NetBurner 3.5.6
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 {
123 NewUri(uri, timeout);
124 };
125
126
133 bool valid() const
134 {
135 return ((ValidUntil == 0xFFFFFFFF)|| (ValidUntil &&(((uint32_t)((int32_t)ValidUntil - ((int32_t)TimeTick))) >= 0)))&& URIBuf[0];
136 };
137
138
144 const char *GetPath()
145 {
146 if(CachedPath) return CachedPath;
147 return "";
148 };
149
150
156 const char *GetHost()
157 {
158 return CachedHost;
159 };
160
161
168 {
169 if (valid())
170 return CachedHostIp;
171 else
172 return IPADDR4::NullIP();
173 };
174
175
181 uint16_t GetPort()
182 {
183 return CachedPort;
184 };
185
186 eProtocol_t GetProto()
187 {
188 return CachedProto;
189 }
190
191 #ifdef WEB_CLIENT_SSL_SUPPORT
198 bool IsSecure()
199 {
200 return secure;
201 }
202 #endif
203 void dump();
204
208 void Invalidate() { ValidUntil = 0; CachedHostIp.SetNull(); };
209 void Resolve(bool block = true, uint16_t timeout = 20 * TICKS_PER_SECOND);
210
211 //Get an FD from UDP rx and send out requests...
212 int start_fd_dns();
213 bool process_fd_dns(int fd);
214
215 ParsedURI & operator=(const char *rhs) { NewUri(rhs); return *this; }
216 ParsedURI & operator=(const ParsedURI &rhs);
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; }
221};
222
223
224class HttpMethod {
225public:
226 enum Value : uint8_t {
227 Options = 0, //< @b
228 Get = 1, //< @b
229 Head = 2, //< @b
230 Post = 3, //< @b
231 Put = 4, //< @b
232 Delete = 5, //< @b
233 Trace = 6, //< @b
234 Connect = 7, //< @b
235 Patch = 8, //< @b
236
237 Unknown = 0xFF //< @b
238 };
239
240 HttpMethod() = default;
241 constexpr HttpMethod(Value v) : val(v) { }
242
243 // Allow switch and comparisons.
244 constexpr operator Value() const { return val; }
245 // Prevent usage: if(method)
246 explicit operator bool() const = delete;
247
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; }
252
253 constexpr const HttpMethod &operator=(HttpMethod rhs) { val = rhs.val; return *this; }
254
255 const char *String() const;
256 int Strlen() const;
257
258 bool ReqBodyAllowed() const;
259 bool RespBodyAllowed() const;
260private:
261 Value val;
262
263};
264
270void SetHttpDiag(bool b);
276void SetHttpDiag(int level);
277
278
279#ifndef WebErrorReporterFunc
280typedef void(WebErrorReporterFunc)(int ErrorState);
281#endif
282
283extern WebErrorReporterFunc *pWebErrorReporter;
284
285
286class ParsedJsonDataSet; // Forward declaration
287
331int DoMultipartStartHttp(HttpMethod method,
332 ParsedURI &TheUri,
333 const char *separator,
334 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
335 uint32_t contentLength = 0
336 );
337
377int DoMultipartStartHttp(HttpMethod method,
378 const char *pUrl,
379 const char *separator,
380 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
381 uint32_t contentLength = 0);
382
421 const char *separator,
422 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
423 uint32_t contentLength = 0)
424{
425 return DoMultipartStartHttp(HttpMethod::Post, TheUri, separator, TIMEOUT_WAIT,
426 contentLength);
427}
428
465inline int DoMultipartStartPost(const char *pUrl,
466 const char *separator,
467 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND,
468 uint32_t contentLength = 0)
469{
470 return DoMultipartStartHttp(HttpMethod::Post, pUrl, separator, TIMEOUT_WAIT, contentLength);
471}
472
504void DoMultipartItem(int tcpfd, const char *Disposition, const char *separator,const unsigned char * data, int len);
505
532void DoMultipartBoundary(int tcpfd, const char *Disposition, const char *separator);
533
564bool DoMultipartFinished(int tcpfd, const char *separator, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
565
597inline bool DoMultipartFinished(int tcpfd, const char *separator, NBString &result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
598{
599 StringBufferObject sbo(result_string);
600 return DoMultipartFinished(tcpfd, separator, sbo,TIMEOUT_WAIT);
601}
602
642bool DoUrlEncodedFormHttp( HttpMethod method,
643 ParsedURI & TheUri,
644 char * headers,
645 char * form_data,
646 buffer_object & result_buffer,
647 uint16_t TIMEOUT_WAIT);
648
686inline bool DoUrlEncodedFormPost( ParsedURI & TheUri,
687 char * headers,
688 char * form_data,
689 buffer_object & result_buffer,
690 uint16_t TIMEOUT_WAIT)
691{
692 return DoUrlEncodedFormHttp(HttpMethod::Post, TheUri, headers, form_data,
693 result_buffer, TIMEOUT_WAIT);
694}
695
736inline bool DoUrlEncodedFormHttp(HttpMethod method,
737 ParsedURI & TheUri,
738 char * headers,
739 char * form_data,
740 NBString & result_string,
741 uint16_t TIMEOUT_WAIT)
742{
743 StringBufferObject sbo(result_string);
744 return DoUrlEncodedFormHttp(method, TheUri,headers,form_data,sbo,TIMEOUT_WAIT);
745}
746
784inline bool DoUrlEncodedFormPost( ParsedURI & TheUri,
785 char * headers,
786 char * form_data,
787 NBString & result_string,
788 uint16_t TIMEOUT_WAIT)
789{
790 StringBufferObject sbo(result_string);
791 return DoUrlEncodedFormHttp(HttpMethod::Post, TheUri,headers,form_data,sbo,TIMEOUT_WAIT);
792}
793
832bool DoUrlEncodedFormHttp( HttpMethod method,
833 const char * pUrl,
834 char * headers,
835 char * form_data,
836 buffer_object & result_buffer,
837 uint16_t TIMEOUT_WAIT);
838
875inline bool DoUrlEncodedFormPost( const char * pUrl,
876 char * headers,
877 char * form_data,
878 buffer_object & result_buffer,
879 uint16_t TIMEOUT_WAIT)
880{
881 return DoUrlEncodedFormHttp(HttpMethod::Post, pUrl, headers, form_data,
882 result_buffer, TIMEOUT_WAIT);
883}
884
919inline bool DoUrlEncodedFormPost( const char * pUrl,
920 char * headers,
921 char * form_data,
922 NBString & result_string,
923 uint16_t TIMEOUT_WAIT)
924{
925 StringBufferObject sbo(result_string);
926 return DoUrlEncodedFormHttp(HttpMethod::Post, pUrl,headers,form_data,sbo,TIMEOUT_WAIT);
927}
928
967bool DoJsonHttp(HttpMethod method,
968 const char *pUrl,
969 const char *Json_Data_To_Post,
970 buffer_object &result_buffer,
971 const char *AdditionalHeaders = NULL,
972 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
973
1010inline bool DoJsonPost(const char *pUrl,
1011 const char *Json_Data_To_Post,
1012 buffer_object &result_buffer,
1013 const char *AdditionalHeaders = NULL,
1014 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1015{
1016 return DoJsonHttp(HttpMethod::Post, pUrl, Json_Data_To_Post, result_buffer,
1017 AdditionalHeaders, TIMEOUT_WAIT);
1018}
1019
1058inline bool DoJsonHttp(HttpMethod method,
1059 const char *pUrl,
1060 const char *Json_Data_To_Post,
1061 NBString &result_string,
1062 const char *AdditionalHeaders = NULL,
1063 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1064{
1065 StringBufferObject sbo(result_string);
1066return DoJsonHttp(method, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1067
1068}
1069
1105inline bool DoJsonPost(const char *pUrl,
1106 const char *Json_Data_To_Post,
1107 NBString &result_string,
1108 const char *AdditionalHeaders = NULL,
1109 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1110{
1111 StringBufferObject sbo(result_string);
1112return DoJsonHttp(HttpMethod::Post, pUrl,Json_Data_To_Post,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1113
1114}
1115
1154bool DoJsonHttp(HttpMethod method,
1155 ParsedURI &TheUri,
1156 const char *Json_Data_To_Post,
1157 buffer_object &result_buffer,
1158 const char *AdditionalHeaders = NULL,
1159 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1160
1196inline bool DoJsonPost(ParsedURI &TheUri,
1197 const char *Json_Data_To_Post,
1198 buffer_object &result_buffer,
1199 const char *AdditionalHeaders = NULL,
1200 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1201{
1202 return DoJsonHttp(HttpMethod::Post, TheUri, Json_Data_To_Post, result_buffer,
1203 AdditionalHeaders, TIMEOUT_WAIT);
1204}
1205
1244inline bool DoJsonHttp(HttpMethod method,
1245 ParsedURI &TheUri,
1246 const char *Json_Data_To_Post,
1247 NBString & result_string,
1248 const char *AdditionalHeaders = NULL,
1249 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1250{
1251 StringBufferObject sbo(result_string);
1252 return DoJsonHttp(method, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1253}
1254
1291inline bool DoJsonPost(ParsedURI &TheUri,
1292 const char *Json_Data_To_Post,
1293 NBString & result_string,
1294 const char *AdditionalHeaders = NULL,
1295 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1296{
1297 StringBufferObject sbo(result_string);
1298 return DoJsonHttp(HttpMethod::Post, TheUri,Json_Data_To_Post,sbo,AdditionalHeaders, TIMEOUT_WAIT);
1299}
1300
1340bool DoJsonHttp(HttpMethod method,
1341 const char *pUrl,
1342 ParsedJsonDataSet &jsonout,
1343 buffer_object &result_buffer,
1344 const char *AdditionalHeaders,
1345 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1346
1383inline bool DoJsonPost(const char *pUrl,
1384 ParsedJsonDataSet &jsonout,
1385 buffer_object &result_buffer,
1386 const char *AdditionalHeaders,
1387 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1388{
1389 return DoJsonHttp(HttpMethod::Post, pUrl, jsonout, result_buffer,
1390 AdditionalHeaders, TIMEOUT_WAIT);
1391}
1392
1431inline bool DoJsonHttp(HttpMethod method,
1432 const char *pUrl,
1433 ParsedJsonDataSet &jsonout,
1434 NBString &result_string,
1435 const char *AdditionalHeaders,
1436 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1437{
1438 StringBufferObject sbo(result_string);
1439 return DoJsonHttp(method, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1440}
1441
1479inline bool DoJsonPost(const char *pUrl,
1480 ParsedJsonDataSet &jsonout,
1481 NBString &result_string,
1482 const char *AdditionalHeaders,
1483 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1484{
1485 StringBufferObject sbo(result_string);
1486 return DoJsonHttp(HttpMethod::Post, pUrl,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1487}
1488
1528bool DoJsonHttp(HttpMethod method,
1529 ParsedURI &TheUri,
1530 ParsedJsonDataSet &jsonout,
1531 buffer_object &result_buffer,
1532 const char *AdditionalHeaders,
1533 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1534
1570inline bool DoJsonPost(ParsedURI &TheUri,
1571 ParsedJsonDataSet &jsonout,
1572 buffer_object &result_buffer,
1573 const char *AdditionalHeaders,
1574 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1575{
1576 return DoJsonHttp(HttpMethod::Post, TheUri, jsonout, result_buffer,
1577 AdditionalHeaders, TIMEOUT_WAIT);
1578}
1579
1619inline bool DoJsonHttp(HttpMethod method,
1620 ParsedURI &TheUri,
1621 ParsedJsonDataSet &jsonout,
1622 NBString &result_string,
1623 const char *AdditionalHeaders,
1624 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1625{
1626 StringBufferObject sbo(result_string);
1627 return DoJsonHttp(method, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1628}
1629
1630
1666inline bool DoJsonPost(ParsedURI &TheUri,
1667 ParsedJsonDataSet &jsonout,
1668 NBString &result_string,
1669 const char *AdditionalHeaders,
1670 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1671{
1672 StringBufferObject sbo(result_string);
1673 return DoJsonHttp(HttpMethod::Post, TheUri,jsonout,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1674}
1675
1714bool DoJsonHttpFile(HttpMethod method,
1715 const char *pUrl,
1716 const char *FragmentName,
1717 buffer_object &result_buffer,
1718 const char *AdditionalHeaders,
1719 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1720
1757inline bool DoJsonPostHttpFile( const char *pUrl,
1758 const char *FragmentName,
1759 buffer_object &result_buffer,
1760 const char *AdditionalHeaders,
1761 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1762{
1763 return DoJsonHttpFile(HttpMethod::Post, pUrl, FragmentName, result_buffer,
1764 AdditionalHeaders, TIMEOUT_WAIT);
1765}
1766
1785inline bool DoJsonHttpFile(HttpMethod method,
1786 const char *pUrl,
1787 const char *FragmentName,
1788 NBString & result_string,
1789 const char *AdditionalHeaders,
1790 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1791{
1792 StringBufferObject sbo(result_string);
1793 return DoJsonHttpFile(method, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1794}
1795
1796
1819inline bool DoJsonPostHttpFile(const char *pUrl,
1820 const char *FragmentName,
1821 NBString & result_string,
1822 const char *AdditionalHeaders,
1823 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1824{
1825 StringBufferObject sbo(result_string);
1826 return DoJsonHttpFile(HttpMethod::Post, pUrl,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1827}
1828
1829
1853bool DoJsonHttpFile(HttpMethod method,
1854 ParsedURI &TheUri,
1855 const char *FragmentName,
1856 buffer_object &result_buffer,
1857 const char *AdditionalHeaders,
1858 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
1859
1860
1896inline bool DoJsonPostHttpFile( ParsedURI &TheUri,
1897 const char *FragmentName,
1898 buffer_object &result_buffer,
1899 const char *AdditionalHeaders,
1900 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1901{
1902 return DoJsonHttpFile(HttpMethod::Post, TheUri, FragmentName, result_buffer,
1903 AdditionalHeaders, TIMEOUT_WAIT);
1904}
1905
1946inline bool DoJsonHttpFile(HttpMethod method,
1947 ParsedURI &TheUri,
1948 const char *FragmentName,
1949 NBString & result_string,
1950 const char *AdditionalHeaders,
1951 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1952{
1953 StringBufferObject sbo(result_string);
1954 return DoJsonHttpFile(method,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
1955}
1956
1994inline bool DoJsonPostHttpFile(ParsedURI &TheUri,
1995 const char *FragmentName,
1996 NBString & result_string,
1997 const char *AdditionalHeaders,
1998 uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
1999{
2000 StringBufferObject sbo(result_string);
2001 return DoJsonHttpFile(HttpMethod::Post,TheUri,FragmentName,sbo,AdditionalHeaders,TIMEOUT_WAIT);
2002}
2003
2004
2005
2039bool DoHttp(HttpMethod method, ParsedURI &TheUri, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2040
2070inline bool DoGet(ParsedURI &TheUri, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2071{
2072 return DoHttp(HttpMethod::Get, TheUri, result_buffer, TIMEOUT_WAIT);
2073}
2074
2109inline bool DoHttp(HttpMethod method, ParsedURI &TheUri, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2110{
2111 StringBufferObject sbo(result_string);
2112 return DoHttp(method, TheUri,sbo,TIMEOUT_WAIT);
2113}
2114
2115
2116
2148inline bool DoGet(ParsedURI &TheUri, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2149{
2150 StringBufferObject sbo(result_string);
2151 return DoHttp(HttpMethod::Get, TheUri,sbo,TIMEOUT_WAIT);
2152}
2153
2154
2195bool DoHttpEx(HttpMethod method, ParsedURI &TheUri,const char * headers, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2196
2197
2231inline bool DoGetEx(ParsedURI &TheUri,const char * headers, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2232{
2233 return DoHttpEx(HttpMethod::Get, TheUri, headers, result_buffer, TIMEOUT_WAIT);
2234}
2235
2236
2274inline bool DoHttpEx(HttpMethod method, ParsedURI &TheUri,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2275{
2276 StringBufferObject sbo(result_string);
2277 return DoHttpEx(method, TheUri, headers, sbo, TIMEOUT_WAIT);
2278}
2279
2280
2313inline bool DoGetEx(ParsedURI &TheUri,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2314{
2315 StringBufferObject sbo(result_string);
2316 return DoHttpEx(HttpMethod::Get,TheUri,headers, sbo,TIMEOUT_WAIT);
2317}
2318
2319
2351bool DoHttp(HttpMethod method, const char *pUrl, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2352
2353
2378inline bool DoGet(const char *pUrl, buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2379{
2380 return DoHttp(HttpMethod::Get, pUrl, result_buffer, TIMEOUT_WAIT);
2381}
2382
2412inline bool DoHttp(HttpMethod method, const char *pUrl, NBString &result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2413{
2414 StringBufferObject sbo(result_string);
2415 return DoHttp(method, pUrl,sbo,TIMEOUT_WAIT);
2416}
2417
2436inline bool DoGet(const char *pUrl, NBString &result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2437{
2438 StringBufferObject sbo(result_string);
2439 return DoHttp(HttpMethod::Get, pUrl,sbo,TIMEOUT_WAIT);
2440}
2441
2455bool DoHttpEx(HttpMethod method, const char *pUrl,const char * headers,buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2456
2457
2491inline bool DoGetEx(const char *pUrl,const char * headers,buffer_object &result_buffer, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2492{
2493 return DoHttpEx(HttpMethod::Get, pUrl, headers, result_buffer, TIMEOUT_WAIT);
2494}
2495
2496
2533inline bool DoHttpEx(HttpMethod method, const char * pUrl,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2534{
2535 StringBufferObject sbo(result_string);
2536 return DoHttpEx(method, pUrl,headers, sbo,TIMEOUT_WAIT);
2537}
2538
2539
2573inline bool DoGetEx(const char * pUrl,const char * headers, NBString & result_string, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2574{
2575 StringBufferObject sbo(result_string);
2576 return DoHttpEx(HttpMethod::Get,pUrl,headers, sbo,TIMEOUT_WAIT);
2577}
2578
2613int DoHttp(HttpMethod method, ParsedURI &TheUri, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2614
2655int DoHttpEx(HttpMethod method, ParsedURI &TheUri, const char* headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2656
2689int DoHttp(HttpMethod method, const char *pUrl, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2690
2691
2730int DoHttpEx(HttpMethod method, const char *pUrl,const char * headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2731
2764inline int DoGet(ParsedURI &TheUri, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2765{
2766 return DoHttp(HttpMethod::Get,TheUri, result, maxl, TIMEOUT_WAIT);
2767}
2768
2806inline int DoGetEx(ParsedURI &TheUri, const char* headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2807{
2808 return DoHttpEx(HttpMethod::Get, TheUri, headers, result, maxl, TIMEOUT_WAIT);
2809}
2810
2811
2842inline int DoGet(const char *pUrl, unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2843{
2844 return DoHttp(HttpMethod::Get, pUrl, result, maxl, TIMEOUT_WAIT);
2845}
2846
2882inline int DoGetEx(const char *pUrl,const char * headers,unsigned char *result, int maxl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND)
2883{
2884 return DoHttpEx(HttpMethod::Get, pUrl, headers, result, maxl, TIMEOUT_WAIT);
2885}
2886
2887
2888//Turn on update diagnostics
2889void SetHttpUpDiag(bool b);
2890
2891
2900int DoGetUpdate(ParsedURI &TheUri, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2901
2910int DoGetUpdate(const char *pUrl, uint16_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
2911
2912
2913
2944int PopulateAuthHeader(const char * user, const char * password, char * buffer, int maxlen);
2945
2946
2947/* Parse the uri and open tcp to the correct host/port nothing is sent*/
2948int StartConnection(ParsedURI &TheUri,TickTimeout & TT);
2949
2950
2978inline int StartConnection(ParsedURI &TheUri,uint32_t timeout=TICKS_PER_SECOND*10)
2979{
2980 TickTimeout tt(timeout);
2981 return StartConnection(TheUri, tt);
2982}
2983
3022 ParsedURI &uri,
3023 const char * methodStr,
3024 int content_len=0,
3025 const char * content_type=0,
3026 const char * extra_header=0);
3027
3028
3062int StartTransaction(ParsedURI &TheUri, const char *headers = 0, const char *action = "GET", uint32_t TIMEOUT_WAIT = 10 * TICKS_PER_SECOND);
3063
3097int StartTransaction(const char * pUrl, const char * headers=0,const char * action="GET", uint32_t TIMEOUT_WAIT= 10 * TICKS_PER_SECOND);
3098
3099
3100
3105#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: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...