kopete/protocols/messenger/libpapillon
httptransfer.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "Papillon/Http/Transfer"
00016
00017 #include <QtNetwork/QHttpHeader>
00018 #include <QtNetwork/QHttpRequestHeader>
00019 #include <QtNetwork/QHttpResponseHeader>
00020
00021 namespace Papillon
00022 {
00023
00024 class HttpTransfer::Private
00025 {
00026 public:
00027 Private()
00028 : type(HttpTransfer::HttpRequest), httpHeader(0)
00029 {}
00030
00031 ~Private()
00032 {
00033 delete httpHeader;
00034 }
00035
00036 HttpTransfer::HttpTransferType type;
00037
00038 QHttpHeader *httpHeader;
00039 QByteArray body;
00040 };
00041
00042 HttpTransfer::HttpTransfer(HttpTransferType type)
00043 : d(new Private)
00044 {
00045 d->type = type;
00046 switch(type)
00047 {
00048 case HttpRequest:
00049 d->httpHeader = new QHttpRequestHeader;
00050 break;
00051 case HttpResponse:
00052 d->httpHeader = new QHttpResponseHeader;
00053 break;
00054 }
00055 }
00056
00057 HttpTransfer::~HttpTransfer()
00058 {
00059 delete d;
00060 }
00061
00062 HttpTransfer::HttpTransferType HttpTransfer::type() const
00063 {
00064 return d->type;
00065 }
00066
00067 bool HttpTransfer::isValid() const
00068 {
00069 return d->httpHeader->isValid();
00070 }
00071
00072 uint HttpTransfer::contentLength() const
00073 {
00074 return d->httpHeader->contentLength();
00075 }
00076
00077 QString HttpTransfer::contentType() const
00078 {
00079 return d->httpHeader->contentType();
00080 }
00081
00082 void HttpTransfer::setContentType(const QString &contentType)
00083 {
00084 d->httpHeader->setContentType(contentType);
00085 }
00086
00087 void HttpTransfer::setRequest(const QString &method, const QString &path, int majorVer, int minorVer)
00088 {
00089 Q_ASSERT(type() == HttpTransfer::HttpRequest);
00090
00091 static_cast<QHttpRequestHeader*>(d->httpHeader)->setRequest(method, path, majorVer, minorVer);
00092 }
00093
00094 void HttpTransfer::setHttpHeader(const QHttpRequestHeader &header)
00095 {
00096 Q_ASSERT(type() == HttpTransfer::HttpRequest);
00097
00098
00099 QHttpRequestHeader *requestHeader = static_cast<QHttpRequestHeader*>(d->httpHeader);
00100 requestHeader->operator=(header);
00101 }
00102
00103 void HttpTransfer::setHttpHeader(const QHttpResponseHeader &header)
00104 {
00105 Q_ASSERT(type() == HttpTransfer::HttpResponse);
00106
00107
00108 QHttpResponseHeader *responseHeader = static_cast<QHttpResponseHeader*>(d->httpHeader);
00109 responseHeader->operator=(header);
00110 }
00111
00112 bool HttpTransfer::hasContentLength() const
00113 {
00114 return d->httpHeader->hasContentLength();
00115 }
00116
00117 bool HttpTransfer::hasContentType() const
00118 {
00119 return d->httpHeader->hasContentType();
00120 }
00121
00122 bool HttpTransfer::hasKey(const QString &key) const
00123 {
00124 return d->httpHeader->hasKey(key.toLower());
00125 }
00126
00127 QString HttpTransfer::value(const QString & key) const
00128 {
00129 return d->httpHeader->value(key.toLower());
00130 }
00131
00132 QList<QPair<QString, QString> > HttpTransfer::values() const
00133 {
00134 return d->httpHeader->values();
00135 }
00136
00137 void HttpTransfer::setValue(const QString & key, const QString &value)
00138 {
00139 d->httpHeader->setValue(key.toLower(), value);
00140 }
00141
00142 void HttpTransfer::setValues(const QList<QPair<QString, QString> > &values)
00143 {
00144 d->httpHeader->setValues(values);
00145 }
00146
00147 int HttpTransfer::statusCode() const
00148 {
00149 Q_ASSERT(d->type == HttpResponse);
00150
00151 return static_cast<QHttpResponseHeader*>(d->httpHeader)->statusCode();
00152 }
00153
00154 QString HttpTransfer::method() const
00155 {
00156 Q_ASSERT(d->type == HttpRequest);
00157
00158 return static_cast<QHttpRequestHeader*>(d->httpHeader)->method();
00159 }
00160
00161 QString HttpTransfer::path() const
00162 {
00163 Q_ASSERT(d->type == HttpRequest);
00164
00165 return static_cast<QHttpRequestHeader*>(d->httpHeader)->path();
00166 }
00167
00168 QByteArray HttpTransfer::body() const
00169 {
00170 return d->body;
00171 }
00172
00173 void HttpTransfer::setBody(const QByteArray &body)
00174 {
00175 d->body = body;
00176 d->httpHeader->setContentLength( body.size() );
00177 }
00178
00179 QByteArray HttpTransfer::toRawCommand()
00180 {
00181 QByteArray result;
00182
00183 result += d->httpHeader->toString().toUtf8();
00184 result += d->body;
00185
00186 return result;
00187 }
00188
00189
00190 }