QtWebApp
httprequest.h
Go to the documentation of this file.
1 
6 #ifndef HTTPREQUEST_H
7 #define HTTPREQUEST_H
8 
9 #include <QByteArray>
10 #include <QHostAddress>
11 #include <QTcpSocket>
12 #include <QMap>
13 #include <QMultiMap>
14 #include <QSettings>
15 #include <QTemporaryFile>
16 #include <QUuid>
17 #include "httpglobal.h"
18 
19 namespace stefanfrings {
20 
37 class DECLSPEC HttpRequest {
38  Q_DISABLE_COPY(HttpRequest)
39  friend class HttpSessionStore;
40 
41 public:
42 
44  enum RequestStatus {waitForRequest, waitForHeader, waitForBody, complete, abort};
45 
50  HttpRequest(const QSettings* settings);
51 
55  virtual ~HttpRequest();
56 
63  void readFromSocket(QTcpSocket *socket);
64 
69  RequestStatus getStatus() const;
70 
72  QByteArray getMethod() const;
73 
75  QByteArray getPath() const;
76 
78  const QByteArray& getRawPath() const;
79 
81  QByteArray getVersion() const;
82 
89  QByteArray getHeader(const QByteArray& name) const;
90 
95  QList<QByteArray> getHeaders(const QByteArray& name) const;
96 
101  QMultiMap<QByteArray,QByteArray> getHeaderMap() const;
102 
109  QByteArray getParameter(const QByteArray& name) const;
110 
115  QList<QByteArray> getParameters(const QByteArray& name) const;
116 
118  QMultiMap<QByteArray,QByteArray> getParameterMap() const;
119 
121  QByteArray getBody() const;
122 
129  static QByteArray urlDecode(const QByteArray source);
130 
139  QTemporaryFile* getUploadedFile(const QByteArray fieldName) const;
140 
145  QByteArray getCookie(const QByteArray& name) const;
146 
148  QMap<QByteArray,QByteArray>& getCookieMap();
149 
155  QHostAddress getPeerAddress() const;
156 
157 private:
158 
160  QMultiMap<QByteArray,QByteArray> headers;
161 
163  QMultiMap<QByteArray,QByteArray> parameters;
164 
166  QMap<QByteArray,QTemporaryFile*> uploadedFiles;
167 
169  QMap<QByteArray,QByteArray> cookies;
170 
172  QByteArray bodyData;
173 
175  QByteArray method;
176 
178  QByteArray path;
179 
181  QByteArray version;
182 
187  RequestStatus status;
188 
190  QHostAddress peerAddress;
191 
193  int maxSize;
194 
196  int maxMultiPartSize;
197 
199  int currentSize;
200 
202  int expectedBodySize;
203 
205  QByteArray currentHeader;
206 
208  QByteArray boundary;
209 
211  QTemporaryFile* tempFile;
212 
214  void parseMultiPartFile();
215 
217  void readRequest(QTcpSocket* socket);
218 
220  void readHeader(QTcpSocket* socket);
221 
223  void readBody(QTcpSocket* socket);
224 
226  void decodeRequestParams();
227 
229  void extractCookies();
230 
232  QByteArray lineBuffer;
233 
234 };
235 
236 } // end of namespace
237 
238 #endif // HTTPREQUEST_H
This object represents a single HTTP request.
Definition: httprequest.h:37
RequestStatus
Values for getStatus()
Definition: httprequest.h:44
Stores HTTP sessions and deletes them when they have expired.