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"
18 
26 
28 {
29 public:
31  {
32  }
33 
35  {
36  cleanup();
37 
38  // Free any outstanding queued requests
39  while(waitingQueue.count() != 0) {
40  delete waitingQueue.dequeue();
41  }
42  }
43 
44  bool connect(const String& host, int port, bool useSsl = false) override;
45 
46  bool send(HttpRequest* request) override;
47 
48  HttpRequest* getRequest() override
49  {
50  return incomingRequest;
51  }
52 
53  void reset() override;
54 
55 protected:
56  // HTTP parser methods
57 
58  int onMessageBegin(http_parser* parser) override;
59  int onHeadersComplete(const HttpHeaders& headers) override;
60  int onBody(const char* at, size_t length) override;
61  int onMessageComplete(http_parser* parser) override;
62 
63  // TCP methods
64  void onReadyToSendData(TcpConnectionEvent sourceEvent) override;
65 
66  void cleanup() override;
67 
68  void sslInitSession(Ssl::Session& session) override
69  {
71  auto request = waitingQueue.peek();
72  if(request != nullptr && request->sslInitDelegate) {
73  request->sslInitDelegate(session, *request);
74  }
75  }
76 
77 private:
78  void sendRequestHeaders(HttpRequest* request);
79  bool sendRequestBody(HttpRequest* request);
80  HttpPartResult multipartProducer();
81 
82 private:
83  RequestQueue waitingQueue;
84  RequestQueue executionQueue;
85 
86  HttpRequest* incomingRequest = nullptr;
87  HttpRequest* outgoingRequest = nullptr;
88 };
89 
T * peek() const
Definition: ObjectQueue.h:32
bool connect(const String &host, int port, bool useSsl=false) override
HttpRequest * getRequest() override
Returns pointer to the current request.
Definition: HttpClientConnection.h:48
unsigned int count() const override
Definition: FIFO.h:38
int onHeadersComplete(const HttpHeaders &headers) override
Called when all headers are received.
T * dequeue()
Definition: ObjectQueue.h:37
The String class.
Definition: WString.h:136
http_parser parser
Definition: HttpConnection.h:233
~HttpClientConnection()
Definition: HttpClientConnection.h:34
Encapsulates a set of HTTP header information.
Definition: HttpHeaders.h:96
int onMessageComplete(http_parser *parser) override
Called when the incoming data is complete.
TcpConnectionEvent
Definition: TcpConnection.h:25
void reset() override
Handles all SSL activity for a TCP connection.
Definition: Session.h:76
SslInitDelegate sslInitDelegate
Definition: HttpRequest.h:274
void onReadyToSendData(TcpConnectionEvent sourceEvent) override
bool send(HttpRequest *request) override
ObjectQueue< HttpRequest, HTTP_REQUEST_POOL_SIZE > RequestQueue
Provides http client connection.
Definition: HttpClientConnection.h:25
void cleanup() override
int onMessageBegin(http_parser *parser) override
Called when a new incoming data is beginning to come.
void sslInitSession(Ssl::Session &session) override
Override in inherited classes to perform custom session initialisation.
Definition: HttpClientConnection.h:68
int onBody(const char *at, size_t length) override
Called when a piece of body data is received.
Definition: HttpRequest.h:35
Provides http base used for client and server connections.
Definition: HttpConnection.h:27
HttpClientConnection()
Definition: HttpClientConnection.h:30
bool useSsl
Definition: TcpConnection.h:204
Multipart stream class.
Definition: MultipartStream.h:25
Definition: HttpClientConnection.h:27
virtual void sslInitSession(Ssl::Session &session)
Override in inherited classes to perform custom session initialisation.
Definition: TcpConnection.h:151