NetBurner 3.5.7
PDF Version
http_funcs.h
1/*NB_REVISION*/
2
3/*NB_COPYRIGHT*/
4
11#ifndef _HTTP_FUNCS_H
12#define _HTTP_FUNCS_H
13
14#include <nbrtos.h>
15#include <nettypes.h>
16#include <dns.h>
17#include <webclient/web_buffers.h>
18
62{
63public:
64 enum eProtocol_t {
65 eProto_None,
66 eProto_HTTP,
67 eProto_HTTPS,
68 eProto_SSH,
69 eProto_SMTP,
70 eProto_MQTT,
71 eProto_MQTTS,
72 eProto_WS,
73 eProto_WSS
74 };
75private:
76
77 char URIBuf[256];
78 const char *CachedProtoStr;
79 char *CachedHost;
80 char *CachedPath;
81 const char *UserAgent;
82 IPADDR CachedHostIp;
83 tick_t ValidUntil;
84 uint16_t CachedPort;
85 eProtocol_t CachedProto;
86 uint8_t len;
87
88 #ifdef WEB_CLIENT_SSL_SUPPORT
89 bool secure;
90 #endif
91
92 int advanceCompareState(int state);
93 bool equals(const char *pUrl);
94 bool equals(const ParsedURI &rhs);
95 static ParsedURI *getParsedURI(OS_FIFO *pFifo);
96 public:
106 void NewUri(const char *uri, uint16_t timeout = 20 * TICKS_PER_SECOND, bool skipLookup = false);
107
108
113
121 ParsedURI(const char *uri, uint16_t timeout = 20 * TICKS_PER_SECOND, bool skipLookup = false)
122 : ParsedURI()
123 {
124 NewUri(uri, timeout, skipLookup);
125 };
126
127
134 bool valid() const
135 {
136 return ((ValidUntil == 0xFFFFFFFF)|| (ValidUntil &&(((uint32_t)((int32_t)ValidUntil - ((int32_t)TimeTick))) >= 0)))&& URIBuf[0];
137 };
138
139
145 const char *GetPath()
146 {
147 if(CachedPath) return CachedPath;
148 return "";
149 };
150
151
157 const char *GetHost()
158 {
159 return CachedHost;
160 };
161
162
169 {
170 if (valid())
171 return CachedHostIp;
172 else
173 return IPADDR4::NullIP();
174 };
175
176
182 uint16_t GetPort()
183 {
184 return CachedPort;
185 };
186
187 eProtocol_t GetProto()
188 {
189 return CachedProto;
190 }
191
192 #ifdef WEB_CLIENT_SSL_SUPPORT
199 bool IsSecure()
200 {
201 return secure;
202 }
203 #endif
204 void dump();
205
209 void Invalidate() { ValidUntil = 0; CachedHostIp.SetNull(); };
210 void Resolve(bool block = true, uint16_t timeout = 20 * TICKS_PER_SECOND);
211
212 //Get an FD from UDP rx and send out requests...
213 int start_fd_dns();
214 bool process_fd_dns(int fd);
215
216 ParsedURI & operator=(const char *rhs) { NewUri(rhs); return *this; }
217 ParsedURI & operator=(const ParsedURI &rhs);
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; }
222};
223
224
225class HttpMethod {
226public:
227 enum Value : uint8_t {
228 Options = 0, //< @b
229 Get = 1, //< @b
230 Head = 2, //< @b
231 Post = 3, //< @b
232 Put = 4, //< @b
233 Delete = 5, //< @b
234 Trace = 6, //< @b
235 Connect = 7, //< @b
236 Patch = 8, //< @b
237
238 Unknown = 0xFF //< @b
239 };
240
241 HttpMethod() = default;
242 constexpr HttpMethod(Value v) : val(v) { }
243
244 // Allow switch and comparisons.
245 constexpr operator Value() const { return val; }
246 // Prevent usage: if(method)
247 explicit operator bool() const = delete;
248
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; }
253
254 constexpr const HttpMethod &operator=(HttpMethod rhs) { val = rhs.val; return *this; }
255
256 const char *String() const;
257 int Strlen() const;
258
259 bool ReqBodyAllowed() const;
260 bool RespBodyAllowed() const;
261private:
262 Value val;
263
264};
265
271void SetHttpDiag(bool b);
277void SetHttpDiag(int level);
278
279
280#ifndef WebErrorReporterFunc
281typedef void(WebErrorReporterFunc)(int ErrorState);
282#endif
283
284extern WebErrorReporterFunc *pWebErrorReporter;
285
286
287class ParsedJsonDataSet; // Forward declaration
288
332int DoMultipartStartHttp(HttpMethod method,
333 ParsedURI &TheUri,
334 const char *separator,
335 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
336 uint32_t contentLength = 0
337 );
338
378int DoMultipartStartHttp(HttpMethod method,
379 const char *pUrl,
380 const char *separator,
381 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
382 uint32_t contentLength = 0);
383
422 const char *separator,
423 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
424 uint32_t contentLength = 0)
425{
426 return DoMultipartStartHttp(HttpMethod::Post, TheUri, separator, TIMEOUT_WAIT,
427 contentLength);
428}
429
466inline int DoMultipartStartPost(const char *pUrl,
467 const char *separator,
468 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
469 uint32_t contentLength = 0)
470{
471 return DoMultipartStartHttp(HttpMethod::Post, pUrl, separator, TIMEOUT_WAIT, contentLength);
472}
473
505void DoMultipartItem(int tcpfd, const char *Disposition, const char *separator,const unsigned char * data, int len);
506
533void DoMultipartBoundary(int tcpfd, const char *Disposition, const char *separator);
534
565bool DoMultipartFinished(int tcpfd, const char *separator, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
566
598inline bool DoMultipartFinished(int tcpfd, const char *separator, NBString &result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
599{
600 StringBufferObject sbo(result_string);
601 return DoMultipartFinished(tcpfd, separator, sbo,TIMEOUT_WAIT);
602}
603
643bool DoUrlEncodedFormHttp( HttpMethod method,
644 ParsedURI & TheUri,
645 char * headers,
646 char * form_data,
647 buffer_object & result_buffer,
648 uint16_t TIMEOUT_WAIT);
649
687inline bool DoUrlEncodedFormPost( ParsedURI & TheUri,
688 char * headers,
689 char * form_data,
690 buffer_object & result_buffer,
691 uint16_t TIMEOUT_WAIT)
692{
693 return DoUrlEncodedFormHttp(HttpMethod::Post, TheUri, headers, form_data,
694 result_buffer, TIMEOUT_WAIT);
695}
696
737inline bool DoUrlEncodedFormHttp(HttpMethod method,
738 ParsedURI & TheUri,
739 char * headers,
740 char * form_data,
741 NBString & result_string,
742 uint16_t TIMEOUT_WAIT)
743{
744 StringBufferObject sbo(result_string);
745 return DoUrlEncodedFormHttp(method, TheUri,headers,form_data,sbo,TIMEOUT_WAIT);
746}
747
785inline bool DoUrlEncodedFormPost( ParsedURI & TheUri,
786 char * headers,
787 char * form_data,
788 NBString & result_string,
789 uint16_t TIMEOUT_WAIT)
790{
791 StringBufferObject sbo(result_string);
792 return DoUrlEncodedFormHttp(HttpMethod::Post, TheUri,headers,form_data,sbo,TIMEOUT_WAIT);
793}
794
833bool DoUrlEncodedFormHttp( HttpMethod method,
834 const char * pUrl,
835 char * headers,
836 char * form_data,
837 buffer_object & result_buffer,
838 uint16_t TIMEOUT_WAIT);
839
876inline bool DoUrlEncodedFormPost( const char * pUrl,
877 char * headers,
878 char * form_data,
879 buffer_object & result_buffer,
880 uint16_t TIMEOUT_WAIT)
881{
882 return DoUrlEncodedFormHttp(HttpMethod::Post, pUrl, headers, form_data,
883 result_buffer, TIMEOUT_WAIT);
884}
885
920inline bool DoUrlEncodedFormPost( const char * pUrl,
921 char * headers,
922 char * form_data,
923 NBString & result_string,
924 uint16_t TIMEOUT_WAIT)
925{
926 StringBufferObject sbo(result_string);
927 return DoUrlEncodedFormHttp(HttpMethod::Post, pUrl,headers,form_data,sbo,TIMEOUT_WAIT);
928}
929
968bool DoJsonHttp(HttpMethod method,
969 const char *pUrl,
970 const char *Json_Data_To_Post,
971 buffer_object &result_buffer,
972 const char *AdditionalHeaders = NULL,
973 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
974
1011inline bool DoJsonPost(const char *pUrl,
1012 const char *Json_Data_To_Post,
1013 buffer_object &result_buffer,
1014 const char *AdditionalHeaders = NULL,
1015 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1016{
1017 return DoJsonHttp(HttpMethod::Post, pUrl, Json_Data_To_Post, result_buffer,
1018 AdditionalHeaders, TIMEOUT_WAIT);
1019}
1020
1059inline bool DoJsonHttp(HttpMethod method,
1060 const char *pUrl,
1061 const char *Json_Data_To_Post,
1062 NBString &result_string,
1063 const char *AdditionalHeaders = NULL,
1064 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1065{
1066 StringBufferObject sbo(result_string);
1067return DoJsonHttp(method, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1068
1069}
1070
1106inline bool DoJsonPost(const char *pUrl,
1107 const char *Json_Data_To_Post,
1108 NBString &result_string,
1109 const char *AdditionalHeaders = NULL,
1110 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1111{
1112 StringBufferObject sbo(result_string);
1113return DoJsonHttp(HttpMethod::Post, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1114
1115}
1116
1155bool DoJsonHttp(HttpMethod method,
1156 ParsedURI &TheUri,
1157 const char *Json_Data_To_Post,
1158 buffer_object &result_buffer,
1159 const char *AdditionalHeaders = NULL,
1160 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1161
1197inline bool DoJsonPost(ParsedURI &TheUri,
1198 const char *Json_Data_To_Post,
1199 buffer_object &result_buffer,
1200 const char *AdditionalHeaders = NULL,
1201 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1202{
1203 return DoJsonHttp(HttpMethod::Post, TheUri, Json_Data_To_Post, result_buffer,
1204 AdditionalHeaders, TIMEOUT_WAIT);
1205}
1206
1245inline bool DoJsonHttp(HttpMethod method,
1246 ParsedURI &TheUri,
1247 const char *Json_Data_To_Post,
1248 NBString & result_string,
1249 const char *AdditionalHeaders = NULL,
1250 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1251{
1252 StringBufferObject sbo(result_string);
1253 return DoJsonHttp(method, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1254}
1255
1292inline bool DoJsonPost(ParsedURI &TheUri,
1293 const char *Json_Data_To_Post,
1294 NBString & result_string,
1295 const char *AdditionalHeaders = NULL,
1296 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1297{
1298 StringBufferObject sbo(result_string);
1299 return DoJsonHttp(HttpMethod::Post, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1300}
1301
1341bool DoJsonHttp(HttpMethod method,
1342 const char *pUrl,
1343 ParsedJsonDataSet &jsonout,
1344 buffer_object &result_buffer,
1345 const char *AdditionalHeaders,
1346 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1347
1384inline bool DoJsonPost(const char *pUrl,
1385 ParsedJsonDataSet &jsonout,
1386 buffer_object &result_buffer,
1387 const char *AdditionalHeaders,
1388 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1389{
1390 return DoJsonHttp(HttpMethod::Post, pUrl, jsonout, result_buffer,
1391 AdditionalHeaders, TIMEOUT_WAIT);
1392}
1393
1432inline bool DoJsonHttp(HttpMethod method,
1433 const char *pUrl,
1434 ParsedJsonDataSet &jsonout,
1435 NBString &result_string,
1436 const char *AdditionalHeaders,
1437 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1438{
1439 StringBufferObject sbo(result_string);
1440 return DoJsonHttp(method, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1441}
1442
1480inline bool DoJsonPost(const char *pUrl,
1481 ParsedJsonDataSet &jsonout,
1482 NBString &result_string,
1483 const char *AdditionalHeaders,
1484 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1485{
1486 StringBufferObject sbo(result_string);
1487 return DoJsonHttp(HttpMethod::Post, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1488}
1489
1529bool DoJsonHttp(HttpMethod method,
1530 ParsedURI &TheUri,
1531 ParsedJsonDataSet &jsonout,
1532 buffer_object &result_buffer,
1533 const char *AdditionalHeaders,
1534 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1535
1571inline bool DoJsonPost(ParsedURI &TheUri,
1572 ParsedJsonDataSet &jsonout,
1573 buffer_object &result_buffer,
1574 const char *AdditionalHeaders,
1575 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1576{
1577 return DoJsonHttp(HttpMethod::Post, TheUri, jsonout, result_buffer,
1578 AdditionalHeaders, TIMEOUT_WAIT);
1579}
1580
1620inline bool DoJsonHttp(HttpMethod method,
1621 ParsedURI &TheUri,
1622 ParsedJsonDataSet &jsonout,
1623 NBString &result_string,
1624 const char *AdditionalHeaders,
1625 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1626{
1627 StringBufferObject sbo(result_string);
1628 return DoJsonHttp(method, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1629}
1630
1631
1667inline bool DoJsonPost(ParsedURI &TheUri,
1668 ParsedJsonDataSet &jsonout,
1669 NBString &result_string,
1670 const char *AdditionalHeaders,
1671 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1672{
1673 StringBufferObject sbo(result_string);
1674 return DoJsonHttp(HttpMethod::Post, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1675}
1676
1715bool DoJsonHttpFile(HttpMethod method,
1716 const char *pUrl,
1717 const char *FragmentName,
1718 buffer_object &result_buffer,
1719 const char *AdditionalHeaders,
1720 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1721
1758inline bool DoJsonPostHttpFile( const char *pUrl,
1759 const char *FragmentName,
1760 buffer_object &result_buffer,
1761 const char *AdditionalHeaders,
1762 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1763{
1764 return DoJsonHttpFile(HttpMethod::Post, pUrl, FragmentName, result_buffer,
1765 AdditionalHeaders, TIMEOUT_WAIT);
1766}
1767
1786inline bool DoJsonHttpFile(HttpMethod method,
1787 const char *pUrl,
1788 const char *FragmentName,
1789 NBString & result_string,
1790 const char *AdditionalHeaders,
1791 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1792{
1793 StringBufferObject sbo(result_string);
1794 return DoJsonHttpFile(method, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1795}
1796
1797
1820inline bool DoJsonPostHttpFile(const char *pUrl,
1821 const char *FragmentName,
1822 NBString & result_string,
1823 const char *AdditionalHeaders,
1824 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1825{
1826 StringBufferObject sbo(result_string);
1827 return DoJsonHttpFile(HttpMethod::Post, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1828}
1829
1830
1854bool DoJsonHttpFile(HttpMethod method,
1855 ParsedURI &TheUri,
1856 const char *FragmentName,
1857 buffer_object &result_buffer,
1858 const char *AdditionalHeaders,
1859 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1860
1861
1897inline bool DoJsonPostHttpFile( ParsedURI &TheUri,
1898 const char *FragmentName,
1899 buffer_object &result_buffer,
1900 const char *AdditionalHeaders,
1901 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1902{
1903 return DoJsonHttpFile(HttpMethod::Post, TheUri, FragmentName, result_buffer,
1904 AdditionalHeaders, TIMEOUT_WAIT);
1905}
1906
1947inline bool DoJsonHttpFile(HttpMethod method,
1948 ParsedURI &TheUri,
1949 const char *FragmentName,
1950 NBString & result_string,
1951 const char *AdditionalHeaders,
1952 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1953{
1954 StringBufferObject sbo(result_string);
1955 return DoJsonHttpFile(method,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1956}
1957
1995inline bool DoJsonPostHttpFile(ParsedURI &TheUri,
1996 const char *FragmentName,
1997 NBString & result_string,
1998 const char *AdditionalHeaders,
1999 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2000{
2001 StringBufferObject sbo(result_string);
2002 return DoJsonHttpFile(HttpMethod::Post,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
2003}
2004
2005
2006
2040bool DoHttp(HttpMethod method, ParsedURI &TheUri, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2041
2071inline bool DoGet(ParsedURI &TheUri, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2072{
2073 return DoHttp(HttpMethod::Get, TheUri, result_buffer, TIMEOUT_WAIT);
2074}
2075
2110inline bool DoHttp(HttpMethod method, ParsedURI &TheUri, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2111{
2112 StringBufferObject sbo(result_string);
2113 return DoHttp(method, TheUri,sbo,TIMEOUT_WAIT);
2114}
2115
2116
2117
2149inline bool DoGet(ParsedURI &TheUri, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2150{
2151 StringBufferObject sbo(result_string);
2152 return DoHttp(HttpMethod::Get, TheUri,sbo,TIMEOUT_WAIT);
2153}
2154
2155
2196bool DoHttpEx(HttpMethod method, ParsedURI &TheUri,const char * headers, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2197
2198
2232inline bool DoGetEx(ParsedURI &TheUri,const char * headers, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2233{
2234 return DoHttpEx(HttpMethod::Get, TheUri, headers, result_buffer, TIMEOUT_WAIT);
2235}
2236
2237
2275inline bool DoHttpEx(HttpMethod method, ParsedURI &TheUri,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2276{
2277 StringBufferObject sbo(result_string);
2278 return DoHttpEx(method, TheUri, headers, sbo, TIMEOUT_WAIT);
2279}
2280
2281
2314inline bool DoGetEx(ParsedURI &TheUri,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2315{
2316 StringBufferObject sbo(result_string);
2317 return DoHttpEx(HttpMethod::Get,TheUri,headers, sbo,TIMEOUT_WAIT);
2318}
2319
2320
2352bool DoHttp(HttpMethod method, const char *pUrl, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2353
2354
2379inline bool DoGet(const char *pUrl, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2380{
2381 return DoHttp(HttpMethod::Get, pUrl, result_buffer, TIMEOUT_WAIT);
2382}
2383
2413inline bool DoHttp(HttpMethod method, const char *pUrl, NBString &result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2414{
2415 StringBufferObject sbo(result_string);
2416 return DoHttp(method, pUrl,sbo,TIMEOUT_WAIT);
2417}
2418
2437inline bool DoGet(const char *pUrl, NBString &result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2438{
2439 StringBufferObject sbo(result_string);
2440 return DoHttp(HttpMethod::Get, pUrl,sbo,TIMEOUT_WAIT);
2441}
2442
2456bool DoHttpEx(HttpMethod method, const char *pUrl,const char * headers,buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2457
2458
2492inline bool DoGetEx(const char *pUrl,const char * headers,buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2493{
2494 return DoHttpEx(HttpMethod::Get, pUrl, headers, result_buffer, TIMEOUT_WAIT);
2495}
2496
2497
2534inline bool DoHttpEx(HttpMethod method, const char * pUrl,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2535{
2536 StringBufferObject sbo(result_string);
2537 return DoHttpEx(method, pUrl,headers, sbo,TIMEOUT_WAIT);
2538}
2539
2540
2574inline bool DoGetEx(const char * pUrl,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2575{
2576 StringBufferObject sbo(result_string);
2577 return DoHttpEx(HttpMethod::Get,pUrl,headers, sbo,TIMEOUT_WAIT);
2578}
2579
2614int DoHttp(HttpMethod method, ParsedURI &TheUri, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2615
2656int DoHttpEx(HttpMethod method, ParsedURI &TheUri, const char* headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2657
2690int DoHttp(HttpMethod method, const char *pUrl, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2691
2692
2731int DoHttpEx(HttpMethod method, const char *pUrl,const char * headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2732
2765inline int DoGet(ParsedURI &TheUri, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2766{
2767 return DoHttp(HttpMethod::Get,TheUri, result, maxl, TIMEOUT_WAIT);
2768}
2769
2807inline int DoGetEx(ParsedURI &TheUri, const char* headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2808{
2809 return DoHttpEx(HttpMethod::Get, TheUri, headers, result, maxl, TIMEOUT_WAIT);
2810}
2811
2812
2843inline int DoGet(const char *pUrl, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2844{
2845 return DoHttp(HttpMethod::Get, pUrl, result, maxl, TIMEOUT_WAIT);
2846}
2847
2883inline int DoGetEx(const char *pUrl,const char * headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2884{
2885 return DoHttpEx(HttpMethod::Get, pUrl, headers, result, maxl, TIMEOUT_WAIT);
2886}
2887
2888
2889//Turn on update diagnostics
2890void SetHttpUpDiag(bool b);
2891
2892
2901int DoGetUpdate(ParsedURI &TheUri, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2902
2911int DoGetUpdate(const char *pUrl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2912
2913
2914
2945int PopulateAuthHeader(const char * user, const char * password, char * buffer, int maxlen);
2946
2947
2948/* Parse the uri and open tcp to the correct host/port nothing is sent*/
2949int StartConnection(ParsedURI &TheUri,TickTimeout & TT);
2950
2951
2979inline int StartConnection(ParsedURI &TheUri,uint32_t timeout=TICKS_PER_SECOND*10)
2980{
2981 TickTimeout tt(timeout);
2982 return StartConnection(TheUri, tt);
2983}
2984
3023 ParsedURI &uri,
3024 const char * methodStr,
3025 int content_len=0,
3026 const char * content_type=0,
3027 const char * extra_header=0);
3028
3029
3063int StartTransaction(ParsedURI &TheUri, const char *headers = 0, const char *action = "GET", uint32_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
3064
3098int StartTransaction(const char * pUrl, const char * headers=0,const char * action="GET", uint32_t TIMEOUT_WAIT= 10 * TICKS_PER_SECOND);
3099
3100
3101
3106#endif
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