1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the QtNetwork module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include "qhttpnetworkheader_p.h"
48 QHttpNetworkHeaderPrivate::QHttpNetworkHeaderPrivate(const QUrl &newUrl)
53 QHttpNetworkHeaderPrivate::QHttpNetworkHeaderPrivate(const QHttpNetworkHeaderPrivate &other)
57 fields = other.fields;
60 qint64 QHttpNetworkHeaderPrivate::contentLength() const
63 // We are not using the headerField() method here because servers might send us multiple content-length
64 // headers which is crap (see QTBUG-15311). Therefore just take the first content-length header field.
66 QList<QPair<QByteArray, QByteArray> >::ConstIterator it = fields.constBegin(),
67 end = fields.constEnd();
68 for ( ; it != end; ++it)
69 if (qstricmp("content-length", it->first) == 0) {
74 qint64 length = value.toULongLong(&ok);
77 return -1; // the header field is not set
80 void QHttpNetworkHeaderPrivate::setContentLength(qint64 length)
82 setHeaderField("Content-Length", QByteArray::number(length));
85 QByteArray QHttpNetworkHeaderPrivate::headerField(const QByteArray &name, const QByteArray &defaultValue) const
87 QList<QByteArray> allValues = headerFieldValues(name);
88 if (allValues.isEmpty())
93 foreach (const QByteArray &value, allValues) {
102 QList<QByteArray> QHttpNetworkHeaderPrivate::headerFieldValues(const QByteArray &name) const
104 QList<QByteArray> result;
105 QList<QPair<QByteArray, QByteArray> >::ConstIterator it = fields.constBegin(),
106 end = fields.constEnd();
107 for ( ; it != end; ++it)
108 if (qstricmp(name.constData(), it->first) == 0)
109 result += it->second;
114 void QHttpNetworkHeaderPrivate::setHeaderField(const QByteArray &name, const QByteArray &data)
116 QList<QPair<QByteArray, QByteArray> >::Iterator it = fields.begin();
117 while (it != fields.end()) {
118 if (qstricmp(name.constData(), it->first) == 0)
119 it = fields.erase(it);
123 fields.append(qMakePair(name, data));
126 bool QHttpNetworkHeaderPrivate::operator==(const QHttpNetworkHeaderPrivate &other) const
128 return (url == other.url);