17#include <webclient/web_buffers.h>
78 const char *CachedProtoStr;
81 const char *UserAgent;
85 eProtocol_t CachedProto;
88 #ifdef WEB_CLIENT_SSL_SUPPORT
92 int advanceCompareState(
int state);
93 bool equals(
const char *pUrl);
95 static ParsedURI *getParsedURI(OS_FIFO *pFifo);
135 return ((ValidUntil == 0xFFFFFFFF)|| (ValidUntil &&(((uint32_t)((int32_t)ValidUntil - ((int32_t)TimeTick))) >= 0)))&& URIBuf[0];
146 if(CachedPath)
return CachedPath;
186 eProtocol_t GetProto()
191 #ifdef WEB_CLIENT_SSL_SUPPORT
213 bool process_fd_dns(
int fd);
217 bool operator==(
const ParsedURI &rhs) {
return equals(rhs); }
218 bool operator!=(
const ParsedURI &rhs) {
return !equals(rhs); }
219 void SetUserAgent(
const char* ua){UserAgent=ua;}
220 const char * GetUserAgent() {
return UserAgent; }
226 enum Value : uint8_t {
240 HttpMethod() =
default;
241 constexpr HttpMethod(Value v) : val(v) { }
244 constexpr operator Value()
const {
return val; }
246 explicit operator bool()
const =
delete;
248 constexpr bool operator==(HttpMethod rhs)
const {
return val == rhs.val; }
249 constexpr bool operator!=(HttpMethod rhs)
const {
return val != rhs.val; }
250 constexpr bool operator==(Value rhs)
const {
return val == rhs; }
251 constexpr bool operator!=(Value rhs)
const {
return val != rhs; }
253 constexpr const HttpMethod &operator=(HttpMethod rhs) { val = rhs.val;
return *
this; }
255 const char *String()
const;
258 bool ReqBodyAllowed()
const;
259 bool RespBodyAllowed()
const;
279#ifndef WebErrorReporterFunc
280typedef void(WebErrorReporterFunc)(
int ErrorState);
283extern WebErrorReporterFunc *pWebErrorReporter;
333 const char *separator,
335 uint32_t contentLength = 0
379 const char *separator,
381 uint32_t contentLength = 0);
421 const char *separator,
423 uint32_t contentLength = 0)
466 const char *separator,
468 uint32_t contentLength = 0)
504void DoMultipartItem(
int tcpfd,
const char *Disposition,
const char *separator,
const unsigned char * data,
int len);
647 uint16_t TIMEOUT_WAIT);
690 uint16_t TIMEOUT_WAIT)
693 result_buffer, TIMEOUT_WAIT);
741 uint16_t TIMEOUT_WAIT)
788 uint16_t TIMEOUT_WAIT)
837 uint16_t TIMEOUT_WAIT);
879 uint16_t TIMEOUT_WAIT)
882 result_buffer, TIMEOUT_WAIT);
923 uint16_t TIMEOUT_WAIT)
969 const char *Json_Data_To_Post,
971 const char *AdditionalHeaders = NULL,
1011 const char *Json_Data_To_Post,
1013 const char *AdditionalHeaders = NULL,
1016 return DoJsonHttp(HttpMethod::Post, pUrl, Json_Data_To_Post, result_buffer,
1017 AdditionalHeaders, TIMEOUT_WAIT);
1060 const char *Json_Data_To_Post,
1062 const char *AdditionalHeaders = NULL,
1066return DoJsonHttp(method, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1106 const char *Json_Data_To_Post,
1108 const char *AdditionalHeaders = NULL,
1112return DoJsonHttp(HttpMethod::Post, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1156 const char *Json_Data_To_Post,
1158 const char *AdditionalHeaders = NULL,
1197 const char *Json_Data_To_Post,
1199 const char *AdditionalHeaders = NULL,
1202 return DoJsonHttp(HttpMethod::Post, TheUri, Json_Data_To_Post, result_buffer,
1203 AdditionalHeaders, TIMEOUT_WAIT);
1246 const char *Json_Data_To_Post,
1248 const char *AdditionalHeaders = NULL,
1252 return DoJsonHttp(method, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1292 const char *Json_Data_To_Post,
1294 const char *AdditionalHeaders = NULL,
1298 return DoJsonHttp(HttpMethod::Post, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1344 const char *AdditionalHeaders,
1386 const char *AdditionalHeaders,
1389 return DoJsonHttp(HttpMethod::Post, pUrl, jsonout, result_buffer,
1390 AdditionalHeaders, TIMEOUT_WAIT);
1435 const char *AdditionalHeaders,
1439 return DoJsonHttp(method, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1482 const char *AdditionalHeaders,
1486 return DoJsonHttp(HttpMethod::Post, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1532 const char *AdditionalHeaders,
1573 const char *AdditionalHeaders,
1576 return DoJsonHttp(HttpMethod::Post, TheUri, jsonout, result_buffer,
1577 AdditionalHeaders, TIMEOUT_WAIT);
1623 const char *AdditionalHeaders,
1627 return DoJsonHttp(method, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1669 const char *AdditionalHeaders,
1673 return DoJsonHttp(HttpMethod::Post, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1716 const char *FragmentName,
1718 const char *AdditionalHeaders,
1758 const char *FragmentName,
1760 const char *AdditionalHeaders,
1763 return DoJsonHttpFile(HttpMethod::Post, pUrl, FragmentName, result_buffer,
1764 AdditionalHeaders, TIMEOUT_WAIT);
1787 const char *FragmentName,
1789 const char *AdditionalHeaders,
1793 return DoJsonHttpFile(method, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1820 const char *FragmentName,
1822 const char *AdditionalHeaders,
1826 return DoJsonHttpFile(HttpMethod::Post, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1855 const char *FragmentName,
1857 const char *AdditionalHeaders,
1897 const char *FragmentName,
1899 const char *AdditionalHeaders,
1902 return DoJsonHttpFile(HttpMethod::Post, TheUri, FragmentName, result_buffer,
1903 AdditionalHeaders, TIMEOUT_WAIT);
1948 const char *FragmentName,
1950 const char *AdditionalHeaders,
1954 return DoJsonHttpFile(method,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1995 const char *FragmentName,
1997 const char *AdditionalHeaders,
2001 return DoJsonHttpFile(HttpMethod::Post,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
2072 return DoHttp(HttpMethod::Get, TheUri, result_buffer, TIMEOUT_WAIT);
2112 return DoHttp(method, TheUri,sbo,TIMEOUT_WAIT);
2151 return DoHttp(HttpMethod::Get, TheUri,sbo,TIMEOUT_WAIT);
2233 return DoHttpEx(HttpMethod::Get, TheUri, headers, result_buffer, TIMEOUT_WAIT);
2277 return DoHttpEx(method, TheUri, headers, sbo, TIMEOUT_WAIT);
2316 return DoHttpEx(HttpMethod::Get,TheUri,headers, sbo,TIMEOUT_WAIT);
2380 return DoHttp(HttpMethod::Get, pUrl, result_buffer, TIMEOUT_WAIT);
2415 return DoHttp(method, pUrl,sbo,TIMEOUT_WAIT);
2439 return DoHttp(HttpMethod::Get, pUrl,sbo,TIMEOUT_WAIT);
2493 return DoHttpEx(HttpMethod::Get, pUrl, headers, result_buffer, TIMEOUT_WAIT);
2536 return DoHttpEx(method, pUrl,headers, sbo,TIMEOUT_WAIT);
2576 return DoHttpEx(HttpMethod::Get,pUrl,headers, sbo,TIMEOUT_WAIT);
2689int DoHttp(HttpMethod method,
const char *pUrl,
unsigned char *result,
int maxl, uint16_t TIMEOUT_WAIT = 10 *
TICKS_PER_SECOND);
2730int DoHttpEx(HttpMethod method,
const char *pUrl,
const char * headers,
unsigned char *result,
int maxl, uint16_t TIMEOUT_WAIT = 10 *
TICKS_PER_SECOND);
2766 return DoHttp(HttpMethod::Get,TheUri, result, maxl, TIMEOUT_WAIT);
2808 return DoHttpEx(HttpMethod::Get, TheUri, headers, result, maxl, TIMEOUT_WAIT);
2844 return DoHttp(HttpMethod::Get, pUrl, result, maxl, TIMEOUT_WAIT);
2882inline int DoGetEx(
const char *pUrl,
const char * headers,
unsigned char *result,
int maxl, uint16_t TIMEOUT_WAIT = 10 *
TICKS_PER_SECOND)
2884 return DoHttpEx(HttpMethod::Get, pUrl, headers, result, maxl, TIMEOUT_WAIT);
2889void SetHttpUpDiag(
bool b);
2948int StartConnection(
ParsedURI &TheUri,TickTimeout & TT);
2980 TickTimeout tt(timeout);
2981 return StartConnection(TheUri, tt);
3023 const char * methodStr,
3025 const char * content_type=0,
3026 const char * extra_header=0);
static IPADDR4 NullIP()
C++ static function for a null IP address.
Definition nettypes.h:363
Used to hold and manipulate IPv4 and IPv6 addresses in dual stack mode.
Definition ipv6_addr.h:41
void SetNull()
Set the IP address value of an IPADDR6 object to null.
Definition ipv6_addr.h:320
Lightweight alternative to C++ CString class.
Definition nbstring.h:118
A class to create, read, and modify a JSON object.
Definition json_lexer.h:535
Parsed Uniform Resource Identifier Class (URI)
Definition http_funcs.h:62
ParsedURI()
Constructor to create a new blank URI object. For rare cases.
bool IsSecure()
Check the security state of the cached URI object. Requires WEB_CLIENT_SSL_SUPPORT be defined in pred...
Definition http_funcs.h:198
const char * GetHost()
Get the cached URI Host name.
Definition http_funcs.h:156
const char * GetPath()
Get the cached URI path.
Definition http_funcs.h:144
bool valid() const
Check to see if URI is valid.
Definition http_funcs.h:133
void Invalidate()
Set the state of the cached URI object to invalid.
Definition http_funcs.h:208
ParsedURI(const char *uri, uint16_t timeout=20 *TICKS_PER_SECOND, bool skipLookup=false)
Constructor to create a new URI object.
Definition http_funcs.h:121
void NewUri(const char *uri, uint16_t timeout=20 *TICKS_PER_SECOND, bool skipLookup=false)
Replace the existing (URI) object with new information.
uint16_t GetPort()
Get the cached URI network port number.
Definition http_funcs.h:181
IPADDR GetAddr()
Get the resolved host Address.
Definition http_funcs.h:167
Class for NBString-based web client response buffers.
Definition web_buffers.h:54
Base class for web client response buffers.
Definition web_buffers.h:20
#define TICKS_PER_SECOND
System clock ticks per second.
Definition constants.h:49
int DoGetUpdate(ParsedURI &TheUri, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Execute a firmware update from the specified URI.
int DoMultipartStartHttp(HttpMethod method, ParsedURI &TheUri, const char *separator, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND, uint32_t contentLength=0)
Initiates a multipart HTTP request using a pre-parsed URI and returns a connection file descriptor.
bool DoJsonHttp(HttpMethod method, const char *pUrl, const char *Json_Data_To_Post, buffer_object &result_buffer, const char *AdditionalHeaders=NULL, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP request with raw JSON data using a URL string and stores the response in a buffer ob...
int DoMultipartStartPost(ParsedURI &TheUri, const char *separator, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND, uint32_t contentLength=0)
Initiates a multipart HTTP POST request using a pre-parsed URI and returns a connection file descript...
Definition http_funcs.h:420
int StartTransaction(ParsedURI &TheUri, const char *headers=0, const char *action="GET", uint32_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Initiates an HTTP transaction using a pre-parsed URI by establishing a connection and sending request...
void DoMultipartItem(int tcpfd, const char *Disposition, const char *separator, const unsigned char *data, int len)
Sends a multipart data item within an active multipart HTTP request.
void DoMultipartBoundary(int tcpfd, const char *Disposition, const char *separator)
Sends a multipart boundary section within an active multipart HTTP request.
bool DoJsonPostHttpFile(const char *pUrl, const char *FragmentName, buffer_object &result_buffer, const char *AdditionalHeaders, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP POST request with JSON data from a file fragment using a URL string and stores the r...
Definition http_funcs.h:1757
bool DoMultipartFinished(int tcpfd, const char *separator, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Completes a multipart HTTP request and retrieves the server response in a buffer object.
bool DoGet(ParsedURI &TheUri, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP GET request using a pre-parsed URI and stores the response in a buffer object.
Definition http_funcs.h:2070
bool DoGetEx(ParsedURI &TheUri, const char *headers, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP GET request with custom headers using a pre-parsed URI and stores the response in a ...
Definition http_funcs.h:2231
bool DoJsonPost(const char *pUrl, const char *Json_Data_To_Post, buffer_object &result_buffer, const char *AdditionalHeaders=NULL, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP POST request with raw JSON data using a URL string and stores the response in a buff...
Definition http_funcs.h:1010
bool DoUrlEncodedFormPost(ParsedURI &TheUri, char *headers, char *form_data, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT)
Executes an HTTP POST request with URL-encoded form data using a pre-parsed URI and stores the respon...
Definition http_funcs.h:686
bool DoUrlEncodedFormHttp(HttpMethod method, ParsedURI &TheUri, char *headers, char *form_data, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT)
Executes an HTTP request with URL-encoded form data using a pre-parsed URI and stores the response in...
bool DoHttp(HttpMethod method, ParsedURI &TheUri, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP request using a pre-parsed URI and stores the response in a buffer object.
void SetHttpDiag(bool b)
Enable/disable Web Client HTTP diagnostics to the console port.
int PopulateAuthHeader(const char *user, const char *password, char *buffer, int maxlen)
Generates a Base64-encoded HTTP Basic Authentication header string for inclusion in HTTP requests.
bool DoJsonHttpFile(HttpMethod method, const char *pUrl, const char *FragmentName, buffer_object &result_buffer, const char *AdditionalHeaders, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP request with JSON data from a file fragment using a URL string and stores the respon...
int WriteHttpRequestHeaders(int fd, ParsedURI &uri, const char *methodStr, int content_len=0, const char *content_type=0, const char *extra_header=0)
Writes HTTP request headers to an established connection file descriptor.
bool DoHttpEx(HttpMethod method, ParsedURI &TheUri, const char *headers, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT=10 *TICKS_PER_SECOND)
Executes an HTTP request with custom headers using a pre-parsed URI and stores the response in a buff...