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);
124 NewUri(uri, timeout, skipLookup);
136 return ((ValidUntil == 0xFFFFFFFF)|| (ValidUntil &&(((uint32_t)((int32_t)ValidUntil - ((int32_t)
TimeTick))) >= 0)))&& URIBuf[0];
147 if(CachedPath)
return CachedPath;
187 eProtocol_t GetProto()
192 #ifdef WEB_CLIENT_SSL_SUPPORT
214 bool process_fd_dns(
int fd);
218 bool operator==(
const ParsedURI &rhs) {
return equals(rhs); }
219 bool operator!=(
const ParsedURI &rhs) {
return !equals(rhs); }
220 void SetUserAgent(
const char* ua){UserAgent=ua;}
221 const char * GetUserAgent() {
return UserAgent; }
227 enum Value : uint8_t {
241 HttpMethod() =
default;
242 constexpr HttpMethod(Value v) : val(v) { }
245 constexpr operator Value()
const {
return val; }
247 explicit operator bool()
const =
delete;
249 constexpr bool operator==(HttpMethod rhs)
const {
return val == rhs.val; }
250 constexpr bool operator!=(HttpMethod rhs)
const {
return val != rhs.val; }
251 constexpr bool operator==(Value rhs)
const {
return val == rhs; }
252 constexpr bool operator!=(Value rhs)
const {
return val != rhs; }
254 constexpr const HttpMethod &operator=(HttpMethod rhs) { val = rhs.val;
return *
this; }
256 const char *String()
const;
259 bool ReqBodyAllowed()
const;
260 bool RespBodyAllowed()
const;
280#ifndef WebErrorReporterFunc
281typedef void(WebErrorReporterFunc)(
int ErrorState);
284extern WebErrorReporterFunc *pWebErrorReporter;
334 const char *separator,
336 uint32_t contentLength = 0
380 const char *separator,
382 uint32_t contentLength = 0);
422 const char *separator,
424 uint32_t contentLength = 0)
467 const char *separator,
469 uint32_t contentLength = 0)
505void DoMultipartItem(
int tcpfd,
const char *Disposition,
const char *separator,
const unsigned char * data,
int len);
648 uint16_t TIMEOUT_WAIT);
691 uint16_t TIMEOUT_WAIT)
694 result_buffer, TIMEOUT_WAIT);
742 uint16_t TIMEOUT_WAIT)
789 uint16_t TIMEOUT_WAIT)
838 uint16_t TIMEOUT_WAIT);
880 uint16_t TIMEOUT_WAIT)
883 result_buffer, TIMEOUT_WAIT);
924 uint16_t TIMEOUT_WAIT)
970 const char *Json_Data_To_Post,
972 const char *AdditionalHeaders = NULL,
1012 const char *Json_Data_To_Post,
1014 const char *AdditionalHeaders = NULL,
1017 return DoJsonHttp(HttpMethod::Post, pUrl, Json_Data_To_Post, result_buffer,
1018 AdditionalHeaders, TIMEOUT_WAIT);
1061 const char *Json_Data_To_Post,
1063 const char *AdditionalHeaders = NULL,
1067return DoJsonHttp(method, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1107 const char *Json_Data_To_Post,
1109 const char *AdditionalHeaders = NULL,
1113return DoJsonHttp(HttpMethod::Post, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1157 const char *Json_Data_To_Post,
1159 const char *AdditionalHeaders = NULL,
1198 const char *Json_Data_To_Post,
1200 const char *AdditionalHeaders = NULL,
1203 return DoJsonHttp(HttpMethod::Post, TheUri, Json_Data_To_Post, result_buffer,
1204 AdditionalHeaders, TIMEOUT_WAIT);
1247 const char *Json_Data_To_Post,
1249 const char *AdditionalHeaders = NULL,
1253 return DoJsonHttp(method, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1293 const char *Json_Data_To_Post,
1295 const char *AdditionalHeaders = NULL,
1299 return DoJsonHttp(HttpMethod::Post, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1345 const char *AdditionalHeaders,
1387 const char *AdditionalHeaders,
1390 return DoJsonHttp(HttpMethod::Post, pUrl, jsonout, result_buffer,
1391 AdditionalHeaders, TIMEOUT_WAIT);
1436 const char *AdditionalHeaders,
1440 return DoJsonHttp(method, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1483 const char *AdditionalHeaders,
1487 return DoJsonHttp(HttpMethod::Post, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1533 const char *AdditionalHeaders,
1574 const char *AdditionalHeaders,
1577 return DoJsonHttp(HttpMethod::Post, TheUri, jsonout, result_buffer,
1578 AdditionalHeaders, TIMEOUT_WAIT);
1624 const char *AdditionalHeaders,
1628 return DoJsonHttp(method, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1670 const char *AdditionalHeaders,
1674 return DoJsonHttp(HttpMethod::Post, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1717 const char *FragmentName,
1719 const char *AdditionalHeaders,
1759 const char *FragmentName,
1761 const char *AdditionalHeaders,
1764 return DoJsonHttpFile(HttpMethod::Post, pUrl, FragmentName, result_buffer,
1765 AdditionalHeaders, TIMEOUT_WAIT);
1788 const char *FragmentName,
1790 const char *AdditionalHeaders,
1794 return DoJsonHttpFile(method, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1821 const char *FragmentName,
1823 const char *AdditionalHeaders,
1827 return DoJsonHttpFile(HttpMethod::Post, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1856 const char *FragmentName,
1858 const char *AdditionalHeaders,
1898 const char *FragmentName,
1900 const char *AdditionalHeaders,
1903 return DoJsonHttpFile(HttpMethod::Post, TheUri, FragmentName, result_buffer,
1904 AdditionalHeaders, TIMEOUT_WAIT);
1949 const char *FragmentName,
1951 const char *AdditionalHeaders,
1955 return DoJsonHttpFile(method,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1996 const char *FragmentName,
1998 const char *AdditionalHeaders,
2002 return DoJsonHttpFile(HttpMethod::Post,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
2073 return DoHttp(HttpMethod::Get, TheUri, result_buffer, TIMEOUT_WAIT);
2113 return DoHttp(method, TheUri,sbo,TIMEOUT_WAIT);
2152 return DoHttp(HttpMethod::Get, TheUri,sbo,TIMEOUT_WAIT);
2234 return DoHttpEx(HttpMethod::Get, TheUri, headers, result_buffer, TIMEOUT_WAIT);
2278 return DoHttpEx(method, TheUri, headers, sbo, TIMEOUT_WAIT);
2317 return DoHttpEx(HttpMethod::Get,TheUri,headers, sbo,TIMEOUT_WAIT);
2381 return DoHttp(HttpMethod::Get, pUrl, result_buffer, TIMEOUT_WAIT);
2416 return DoHttp(method, pUrl,sbo,TIMEOUT_WAIT);
2440 return DoHttp(HttpMethod::Get, pUrl,sbo,TIMEOUT_WAIT);
2494 return DoHttpEx(HttpMethod::Get, pUrl, headers, result_buffer, TIMEOUT_WAIT);
2537 return DoHttpEx(method, pUrl,headers, sbo,TIMEOUT_WAIT);
2577 return DoHttpEx(HttpMethod::Get,pUrl,headers, sbo,TIMEOUT_WAIT);
2690int DoHttp(HttpMethod method,
const char *pUrl,
unsigned char *result,
int maxl, uint16_t TIMEOUT_WAIT = 10 *
TICKS_PER_SECOND);
2731int DoHttpEx(HttpMethod method,
const char *pUrl,
const char * headers,
unsigned char *result,
int maxl, uint16_t TIMEOUT_WAIT = 10 *
TICKS_PER_SECOND);
2767 return DoHttp(HttpMethod::Get,TheUri, result, maxl, TIMEOUT_WAIT);
2809 return DoHttpEx(HttpMethod::Get, TheUri, headers, result, maxl, TIMEOUT_WAIT);
2845 return DoHttp(HttpMethod::Get, pUrl, result, maxl, TIMEOUT_WAIT);
2883inline int DoGetEx(
const char *pUrl,
const char * headers,
unsigned char *result,
int maxl, uint16_t TIMEOUT_WAIT = 10 *
TICKS_PER_SECOND)
2885 return DoHttpEx(HttpMethod::Get, pUrl, headers, result, maxl, TIMEOUT_WAIT);
2890void SetHttpUpDiag(
bool b);
2982 return StartConnection(TheUri, tt);
3024 const char * methodStr,
3026 const char * content_type=0,
3027 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:199
const char * GetHost()
Get the cached URI Host name.
Definition http_funcs.h:157
const char * GetPath()
Get the cached URI path.
Definition http_funcs.h:145
bool valid() const
Check to see if URI is valid.
Definition http_funcs.h:134
void Invalidate()
Set the state of the cached URI object to invalid.
Definition http_funcs.h:209
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:182
IPADDR GetAddr()
Get the resolved host Address.
Definition http_funcs.h:168
Class for NBString-based web client response buffers.
Definition web_buffers.h:54
Timeout helper that converts a relative tick duration into an absolute expiration point.
Definition nbrtos.h:262
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
volatile uint32_t tick_t
Unsigned 32-bit type representing a system timer tick count.
Definition nbrtos.h:93
volatile tick_t TimeTick
Number of system timer ticks elapsed since system start.
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:421
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:1758
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:2071
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:2232
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:1011
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:687
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...
A linked-list FIFO for passing pointers to user-defined structures between tasks.
Definition nbrtos.h:1177