HttpClientConnection.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * HttpClientConnection.h
8  *
9  * @author: 2017 - Slavey Karadzhov <slav@attachix.com>
10  *
11  ****/
12 
13 #pragma once
14 
15 #include "HttpConnection.h"
16 #include "DateTime.h"
17 #include "Data/ObjectQueue.h"
19 
27 
29 {
30 public:
32  {
33  }
34 
36  {
37  cleanup();
38 
39  // Free any outstanding queued requests
40  while(waitingQueue.count() != 0) {
41  delete waitingQueue.dequeue();
42  }
43  }
44 
45  bool connect(const String& host, int port, bool useSsl = false) override;
46 
47  bool send(HttpRequest* request) override;
48 
49  HttpRequest* getRequest() override
50  {
51  return incomingRequest;
52  }
53 
54  void reset() override;
55 
56  bool isFinished()
57  {
58  return (waitingQueue.count() + executionQueue.count() == 0);
59  }
60 
61 protected:
62  // HTTP parser methods
63 
64  int onMessageBegin(http_parser* parser) override;
65  int onHeadersComplete(const HttpHeaders& headers) override;
66  int onBody(const char* at, size_t length) override;
67  int onMessageComplete(http_parser* parser) override;
68 
69  // TCP methods
70  void onReadyToSendData(TcpConnectionEvent sourceEvent) override;
71 
72  void onClosed() override;
73 
74  void cleanup() override;
75 
76  void sslInitSession(Ssl::Session& session) override
77  {
79  auto request = waitingQueue.peek();
80  if(request != nullptr && request->sslInitDelegate) {
81  request->sslInitDelegate(session, *request);
82  }
83  }
84 
85  err_t onConnected(err_t err) override
86  {
87  if(err == ERR_OK) {
88  state = eHCS_Ready;
89  init(HTTP_RESPONSE);
90  }
91 
92  return HttpConnection::onConnected(err);
93  }
94 
95 private:
96  void sendRequestHeaders(HttpRequest* request);
97  bool sendRequestBody(HttpRequest* request);
98  MultipartStream::BodyPart multipartProducer();
99 
100 private:
101  RequestQueue waitingQueue;
102  RequestQueue executionQueue;
103 
104  HttpRequest* incomingRequest = nullptr;
105  HttpRequest* outgoingRequest = nullptr;
106 
107  bool allowPipe = false;
108 };
109 
virtual void init(http_parser_type type)
Initializes the http parser for a specific type of HTTP message.
int onBody(const char *at, size_t length) override
Called when a piece of body data is received.
bool isFinished()
Definition: HttpClientConnection.h:56
Provides http base used for client and server connections.
Definition: HttpConnection.h:27
HttpClientConnection()
Definition: HttpClientConnection.h:31
virtual void sslInitSession(Ssl::Session &session)
Override in inherited classes to perform custom session initialisation.
Definition: TcpConnection.h:164
~HttpClientConnection()
Definition: HttpClientConnection.h:35
The String class.
Definition: WString.h:136
Definition: HttpClientConnection.h:28
TcpConnectionEvent
Definition: TcpConnection.h:26
int onHeadersComplete(const HttpHeaders &headers) override
Called when all headers are received.
Encapsulates a set of HTTP header information.
Definition: HttpHeaders.h:34
Each result item contains a set of headers plus content stream.
Definition: MultipartStream.h:39
int onMessageComplete(http_parser *parser) override
Called when the incoming data is complete.
unsigned int count() const override
Definition: FIFO.h:37
void reset() override
bool connect(const String &host, int port, bool useSsl=false) override
T * dequeue()
Definition: ObjectQueue.h:50
void sslInitSession(Ssl::Session &session) override
Override in inherited classes to perform custom session initialisation.
Definition: HttpClientConnection.h:76
void onReadyToSendData(TcpConnectionEvent sourceEvent) override
bool useSsl
Definition: TcpConnection.h:225
err_t onConnected(err_t err) override
int onMessageBegin(http_parser *parser) override
Called when a new incoming data is beginning to come.
bool send(HttpRequest *request) override
HttpConnectionState state
Definition: HttpConnection.h:197
SslInitDelegate sslInitDelegate
Definition: HttpRequest.h:298
Handles all SSL activity for a TCP connection.
Definition: Session.h:77
@ eHCS_Ready
Definition: HttpCommon.h:85
HttpRequest * getRequest() override
Returns pointer to the current request.
Definition: HttpClientConnection.h:49
http_parser parser
Definition: HttpConnection.h:193
T * peek() const
Definition: ObjectQueue.h:45
Encapsulates an incoming or outgoing request.
Definition: HttpRequest.h:36
void cleanup() override
err_t onConnected(err_t err) override
Definition: HttpClientConnection.h:85
void onClosed() override
Gets called when there is/was a tcp connection, the latter does not have to be established,...