/** * Anatole SCHRAMM-HENRY * Updated on 12/07/2020 */ #ifndef HTTPCLIENT_H #define HTTPCLIENT_H #include #include "HttpConstants.h" #include "Dictionary.h" namespace HttpClientHelper { } class HttpClient : public WiFiClient, public HttpConstants { public: enum ConnectionStatus { NO_ATTEMPT = 0, SUCCESSFUL, FAILED }; HttpClient(const char *address, uint16_t port = 80, uint32_t timeout = 5000); HttpClient(const char *address, const char *resource, uint16_t port = 80, uint32_t timeout = 5000); HttpClient(const HttpClient &object); virtual ~HttpClient(); int sendHttpQuery(const char *resource, HttpRequestMethod method = HttpRequestMethod::GET, Dictionary *getData = NULL, Dictionary *postData = NULL, Dictionary *headerData = NULL); int sendHttpQuery(HttpRequestMethod method = HttpRequestMethod::GET, Dictionary *getData = NULL, Dictionary *postData = NULL, Dictionary *headerData = NULL); void keepAlive(boolean enabled); void setMaxRetries(int16_t retries); //100 ms is the default timeout HTTP_CODE isReplyAvailable(uint16_t timeout = 10000); uint16_t readHttpBody(uint8_t *buffer, uint32_t size); protected: private: boolean connectByHostOrIp(); void sendUriWithGetParams(Dictionary *data); void sendPostData(Dictionary *data); void sendHeader(HttpMIMEType contentType = HttpMIMEType::UNKNOWN_MIME, uint64_t contentLength = 0, Dictionary *headerData = NULL, HttpVersion httpVersion = HttpVersion::HTTP_1_1); uint64_t computeBodyLength(Dictionary *data); ConnectionStatus _connectionStatus = NO_ATTEMPT; char *_resource = NULL; const char *_pAddress; uint16_t _port; boolean _keepAlive = false; int16_t _maxRetries = -1; uint16_t _retries = 0; boolean _isIp = false; HTTP_CODE _httpCode = HTTP_CODE::UNDEFINED_CODE; boolean _httpCodeParsed = false; }; #endif //HTTPCLIENT_H /* * TCP status codes : * enum tcp_state { CLOSED = 0, LISTEN = 1, SYN_SENT = 2, SYN_RCVD = 3, ESTABLISHED = 4, FIN_WAIT_1 = 5, FIN_WAIT_2 = 6, CLOSE_WAIT = 7, CLOSING = 8, LAST_ACK = 9, TIME_WAIT = 10 }; */