summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Goetz <Markus.Goetz@nokia.com>2011-07-07 17:42:55 +0200
committerQt by Nokia <qt-info@nokia.com>2011-07-08 11:22:30 +0200
commit948d051fb145ad486e0409cb219bab9616328502 (patch)
treed5f41ef44d318ca6609994353536370452e10b51
parent62481fe9f6f7445600a5b3820bbdfc422ca85d52 (diff)
QNAM: Add support for more KnownHeaders
Task-Number: QTBUG-17267 Change-Id: I32b41d26411ee3a7162bb658d69363a5eeb37230 Reviewed-on: http://codereview.qt.nokia.com/1327 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
-rw-r--r--src/network/access/qnetworkrequest.cpp21
-rw-r--r--src/network/access/qnetworkrequest.h4
-rw-r--r--tests/auto/qnetworkreply/tst_qnetworkreply.cpp26
3 files changed, 50 insertions, 1 deletions
diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp
index 7f61ef9239..21b1d84a78 100644
--- a/src/network/access/qnetworkrequest.cpp
+++ b/src/network/access/qnetworkrequest.cpp
@@ -105,6 +105,10 @@ QT_BEGIN_NAMESPACE
header and contains a QList<QNetworkCookie> representing the
cookies sent by the server to be stored locally.
+ \value UserAgentHeader The User-Agent header sent by HTTP clients.
+
+ \value ServerHeader The Server header received by HTTP clients.
+
\sa header(), setHeader(), rawHeader(), setRawHeader()
*/
@@ -650,6 +654,12 @@ static QByteArray headerName(QNetworkRequest::KnownHeaders header)
case QNetworkRequest::ContentDispositionHeader:
return "Content-Disposition";
+ case QNetworkRequest::UserAgentHeader:
+ return "User-Agent";
+
+ case QNetworkRequest::ServerHeader:
+ return "Server";
+
// no default:
// if new values are added, this will generate a compiler warning
}
@@ -663,6 +673,8 @@ static QByteArray headerValue(QNetworkRequest::KnownHeaders header, const QVaria
case QNetworkRequest::ContentTypeHeader:
case QNetworkRequest::ContentLengthHeader:
case QNetworkRequest::ContentDispositionHeader:
+ case QNetworkRequest::UserAgentHeader:
+ case QNetworkRequest::ServerHeader:
return value.toByteArray();
case QNetworkRequest::LocationHeader:
@@ -745,6 +757,13 @@ static QNetworkRequest::KnownHeaders parseHeaderName(const QByteArray &headerNam
case 's':
if (qstricmp(headerName.constData(), "set-cookie") == 0)
return QNetworkRequest::SetCookieHeader;
+ else if (qstricmp(headerName.constData(), "server") == 0)
+ return QNetworkRequest::ServerHeader;
+ break;
+
+ case 'u':
+ if (qstricmp(headerName.constData(), "user-agent") == 0)
+ return QNetworkRequest::UserAgentHeader;
break;
}
@@ -778,6 +797,8 @@ static QVariant parseHeaderValue(QNetworkRequest::KnownHeaders header, const QBy
{
// header is always a valid value
switch (header) {
+ case QNetworkRequest::UserAgentHeader:
+ case QNetworkRequest::ServerHeader:
case QNetworkRequest::ContentTypeHeader:
// copy exactly, convert to QString
return QString::fromLatin1(value);
diff --git a/src/network/access/qnetworkrequest.h b/src/network/access/qnetworkrequest.h
index eedb0f6592..aa86007127 100644
--- a/src/network/access/qnetworkrequest.h
+++ b/src/network/access/qnetworkrequest.h
@@ -66,7 +66,9 @@ public:
LastModifiedHeader,
CookieHeader,
SetCookieHeader,
- ContentDispositionHeader // added for QMultipartMessage
+ ContentDispositionHeader, // added for QMultipartMessage
+ UserAgentHeader,
+ ServerHeader
};
enum Attribute {
HttpStatusCodeAttribute,
diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index eb036ea293..a456d15472 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -378,6 +378,8 @@ private Q_SLOTS:
void dontInsertPartialContentIntoTheCache();
+ void httpUserAgent();
+
// NOTE: This test must be last!
void parentingRepliesToTheApp();
};
@@ -1601,6 +1603,11 @@ void tst_QNetworkReply::getFromHttp()
// only compare when the header is set.
if (reply->header(QNetworkRequest::ContentLengthHeader).isValid())
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size());
+
+ // We know our internal server is apache..
+ if (qstrcmp(QTest::currentDataTag(), "success-internal") == 0)
+ QVERIFY(reply->header(QNetworkRequest::ServerHeader).toString().contains("Apache"));
+
QCOMPARE(reply->readAll(), reference.readAll());
}
@@ -6312,6 +6319,25 @@ void tst_QNetworkReply::dontInsertPartialContentIntoTheCache()
QCOMPARE(memoryCache->m_insertedUrls.count(), 0);
}
+void tst_QNetworkReply::httpUserAgent()
+{
+ QByteArray response("HTTP/1.0 200 OK\r\n\r\n");
+ MiniHttpServer server(response);
+ server.doClose = true;
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ request.setHeader(QNetworkRequest::UserAgentHeader, "abcDEFghi");
+ QNetworkReplyPtr reply = manager.get(request);
+
+ connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QTestEventLoop::instance().enterLoop(10);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QVERIFY(server.receivedData.contains("\r\nUser-Agent: abcDEFghi\r\n"));
+}
+
+
// NOTE: This test must be last testcase in tst_qnetworkreply!
void tst_QNetworkReply::parentingRepliesToTheApp()
{