AusweisApp2
HttpRequest.h
gehe zur Dokumentation dieser Datei
1 
7 #pragma once
8 
9 #include "HttpResponse.h"
10 
11 #include <QByteArray>
12 #include <QMap>
13 #include <QObject>
14 #include <QPointer>
15 #include <QTcpSocket>
16 #include <QUrl>
17 
18 #include <http_parser.h>
19 
20 #include <memory>
21 
22 
23 class test_HttpRequest;
24 
25 
26 namespace governikus
27 {
28 
30  : public QObject
31 {
32  Q_OBJECT
33  friend class HttpServer;
34  friend class ::test_HttpRequest;
35 
36  private:
37  [[nodiscard]] static int onMessageBegin(http_parser* pParser);
38  [[nodiscard]] static int onMessageComplete(http_parser* pParser);
39  [[nodiscard]] static int onHeadersComplete(http_parser* pParser);
40  [[nodiscard]] static int onHeaderField(http_parser* pParser, const char* const pPos, size_t pLength);
41  [[nodiscard]] static int onHeaderValue(http_parser* pParser, const char* const pPos, size_t pLength);
42  [[nodiscard]] static int onBody(http_parser* pParser, const char* const pPos, size_t pLength);
43  [[nodiscard]] static int onUrl(http_parser* pParser, const char* const pPos, size_t pLength);
44 
45  static inline void add(QByteArray& pDest, const char* const pPos, size_t pLength)
46  {
47  pDest += QByteArray(pPos, static_cast<int>(pLength));
48  }
49 
50 
51  QByteArray mUrl;
52  QMap<QByteArray, QByteArray> mHeader;
53  QByteArray mBody;
54  QPointer<QTcpSocket> mSocket;
55  http_parser mParser;
56  http_parser_settings mParserSettings;
57 
58  bool mFinished;
59  QByteArray mCurrentHeaderField;
60  QByteArray mCurrentHeaderValue;
61 
62  void insertHeader();
63 
64  public:
65  HttpRequest(QTcpSocket* pSocket, QObject* pParent = nullptr);
66  ~HttpRequest() override;
67 
68  [[nodiscard]] bool isConnected() const;
69 
70  [[nodiscard]] QByteArray getMethod() const;
71  [[nodiscard]] http_method getHttpMethod() const;
72  [[nodiscard]] bool isUpgrade() const;
73  [[nodiscard]] QByteArray getHeader(const QByteArray& pKey) const;
74  [[nodiscard]] const QMap<QByteArray, QByteArray>& getHeader() const;
75  [[nodiscard]] QUrl getUrl() const;
76  [[nodiscard]] const QByteArray& getBody() const;
77  [[nodiscard]] quint16 getPeerPort() const;
78  [[nodiscard]] quint16 getLocalPort() const;
79  void triggerSocketBuffer();
80 
81  bool send(const HttpResponse& pResponse);
82  bool send(const QByteArray& pResponse);
83 
84  QTcpSocket* take();
85 
86  private Q_SLOTS:
87  void onReadyRead();
88 
89  Q_SIGNALS:
91  void fireSocketStateChanged(QAbstractSocket::SocketState pSocketState);
92  void fireSocketBuffer(const QByteArray& pBuffer);
93 };
94 
95 } // namespace governikus
Definition: HttpRequest.h:31
void triggerSocketBuffer()
Definition: HttpRequest.cpp:128
QTcpSocket * take()
Definition: HttpRequest.cpp:47
bool isConnected() const
Definition: HttpRequest.cpp:68
void fireMessageComplete(HttpRequest *pSelf)
bool send(const HttpResponse &pResponse)
Definition: HttpRequest.cpp:134
quint16 getPeerPort() const
Definition: HttpRequest.cpp:116
HttpRequest(QTcpSocket *pSocket, QObject *pParent=nullptr)
Definition: HttpRequest.cpp:15
QUrl getUrl() const
Definition: HttpRequest.cpp:104
quint16 getLocalPort() const
Definition: HttpRequest.cpp:122
void fireSocketStateChanged(QAbstractSocket::SocketState pSocketState)
const QMap< QByteArray, QByteArray > & getHeader() const
Definition: HttpRequest.cpp:98
const QByteArray & getBody() const
Definition: HttpRequest.cpp:110
~HttpRequest() override
Definition: HttpRequest.cpp:59
http_method getHttpMethod() const
Definition: HttpRequest.cpp:80
bool isUpgrade() const
Definition: HttpRequest.cpp:86
void fireSocketBuffer(const QByteArray &pBuffer)
QByteArray getMethod() const
Definition: HttpRequest.cpp:74
Definition: HttpResponse.h:17
Definition: HttpServer.h:21
http_method
Definition: http_parser.h:208
Implementation of GeneralAuthenticate response APDUs.
Definition: CommandApdu.h:16
Definition: http_parser.h:328
Definition: http_parser.h:296