Go to the documentation of this file.00001
00006 #ifndef HTTPREQUEST_H
00007 #define HTTPREQUEST_H
00008
00009 #include <QByteArray>
00010 #include <QTcpSocket>
00011 #include <QMap>
00012 #include <QMultiMap>
00013 #include <QSettings>
00014 #include <QTemporaryFile>
00015 #include <QUuid>
00016
00034 class HttpRequest {
00035 Q_DISABLE_COPY(HttpRequest)
00036 friend class HttpSessionStore;
00037 public:
00038
00040 enum RequestStatus {waitForRequest, waitForHeader, waitForBody, complete, abort};
00041
00046 HttpRequest(QSettings* settings);
00047
00051 virtual ~HttpRequest();
00052
00058 void readFromSocket(QTcpSocket& socket);
00059
00064 RequestStatus getStatus() const;
00065
00067 QByteArray getMethod() const;
00068
00070 QByteArray getPath() const;
00071
00073 QByteArray getVersion() const;
00074
00081 QByteArray getHeader(const QByteArray& name) const;
00082
00087 QList<QByteArray> getHeaders(const QByteArray& name) const;
00088
00090 QMultiMap<QByteArray,QByteArray> getHeaderMap() const;
00091
00098 QByteArray getParameter(const QByteArray& name) const;
00099
00104 QList<QByteArray> getParameters(const QByteArray& name) const;
00105
00107 QMultiMap<QByteArray,QByteArray> getParameterMap() const;
00108
00110 QByteArray getBody() const;
00111
00117 static QByteArray urlDecode(const QByteArray source);
00118
00127 QTemporaryFile* getUploadedFile(const QByteArray fieldName);
00128
00133 QByteArray getCookie(const QByteArray& name) const;
00134
00136 QMap<QByteArray,QByteArray>& getCookieMap();
00137
00138 private:
00139
00141 QMultiMap<QByteArray,QByteArray> headers;
00142
00144 QMultiMap<QByteArray,QByteArray> parameters;
00145
00147 QMap<QByteArray,QTemporaryFile*> uploadedFiles;
00148
00150 QMap<QByteArray,QByteArray> cookies;
00151
00153 QByteArray bodyData;
00154
00156 QByteArray method;
00157
00159 QByteArray path;
00160
00162 QByteArray version;
00163
00168 RequestStatus status;
00169
00171 int maxSize;
00172
00174 int maxMultiPartSize;
00175
00177 QString tempDir;
00178
00180 int currentSize;
00181
00183 int expectedBodySize;
00184
00186 QByteArray currentHeader;
00187
00189 QByteArray boundary;
00190
00192 QTemporaryFile tempFile;
00193
00195 void parseMultiPartFile();
00196
00198 void readRequest(QTcpSocket& socket);
00199
00201 void readHeader(QTcpSocket& socket);
00202
00204 void readBody(QTcpSocket& socket);
00205
00207 void decodeRequestParams();
00208
00210 void extractCookies();
00211
00212 };
00213
00214 #endif // HTTPREQUEST_H