Network Services API  2.75.00.17
httpclient.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2019, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
56 #ifndef ti_net_http_HTTPClient__include
57 #define ti_net_http_HTTPClient__include
58 
61 
62 #include <stdbool.h>
63 
64 #include <ti/net/slnetsock.h>
65 
66 /*
67  * Bring in common definitions used by HTTP clients. While this
68  * violates the "only include headers you use" rule, these "common"
69  * definitions were originally defined in this header file. And not
70  * providing them via this header file (now that they're really
71  * defined in http.h) is a compatibility break for users who #include
72  * <ti/net/http/httpclient.h> and expect the common definitions to be
73  * provided.
74  */
75 #include "http.h"
76 
77 #ifdef __cplusplus
78 extern "C" {
79 #endif
80 
81 #define HTTPClient_DOMAIN_BUFLEN (100)
82 
84 #define HTTPClient_RES_HFIELD_BUFFER_SIZE (300)
85 
87 #define HTTPClient_MIN_USER_WORKSPACE_SIZE (500)
88 #define HTTPClient_MAX_REDIRECTION_ATTEMPTS (3)
89 #define HTTPClient_MAX_REQUEST_ATTEMPTS (2)
90 #define HTTPClient_MAX_RESPONSE_HEADER_FILEDS (25)
91 
92 #define HTTPClient_PORT (80)
93 #define HTTPClient_SECURE_PORT (443)
94 
95 /* HTTP response header fields */
96 #define HTTPClient_HFIELD_RES_AGE (0)
97 #define HTTPClient_HFIELD_RES_ALLOW (1)
98 #define HTTPClient_HFIELD_RES_CACHE_CONTROL (2)
99 #define HTTPClient_HFIELD_RES_CONNECTION (3)
100 #define HTTPClient_HFIELD_RES_CONTENT_ENCODING (4)
101 #define HTTPClient_HFIELD_RES_CONTENT_LANGUAGE (5)
102 #define HTTPClient_HFIELD_RES_CONTENT_LENGTH (6)
103 #define HTTPClient_HFIELD_RES_CONTENT_LOCATION (7)
104 #define HTTPClient_HFIELD_RES_CONTENT_RANGE (8)
105 #define HTTPClient_HFIELD_RES_CONTENT_TYPE (9)
106 #define HTTPClient_HFIELD_RES_DATE (10)
107 #define HTTPClient_HFIELD_RES_ETAG (11)
108 #define HTTPClient_HFIELD_RES_EXPIRES (12)
109 #define HTTPClient_HFIELD_RES_LAST_MODIFIED (13)
110 #define HTTPClient_HFIELD_RES_LOCATION (14)
111 #define HTTPClient_HFIELD_RES_PROXY_AUTHENTICATE (15)
112 #define HTTPClient_HFIELD_RES_RETRY_AFTER (16)
113 #define HTTPClient_HFIELD_RES_SERVER (17)
114 #define HTTPClient_HFIELD_RES_SET_COOKIE (18)
115 #define HTTPClient_HFIELD_RES_TRAILER (19)
116 #define HTTPClient_HFIELD_RES_TRANSFER_ENCODING (20)
117 #define HTTPClient_HFIELD_RES_UPGRADE (21)
118 #define HTTPClient_HFIELD_RES_VARY (22)
119 #define HTTPClient_HFIELD_RES_VIA (23)
120 #define HTTPClient_HFIELD_RES_WWW_AUTHENTICATE (24)
121 #define HTTPClient_HFIELD_RES_WARNING (25)
123 #define HTTPClient_REQUEST_HEADER_MASK (0x80000000)
124 
125 /* HTTP request header fields */
127 #define HTTPClient_HFIELD_REQ_ACCEPT (26 | HTTPClient_REQUEST_HEADER_MASK)
128 
129 #define HTTPClient_HFIELD_REQ_ACCEPT_CHARSET (27 | HTTPClient_REQUEST_HEADER_MASK)
130 
131 #define HTTPClient_HFIELD_REQ_ACCEPT_ENCODING (28 | HTTPClient_REQUEST_HEADER_MASK)
132 
133 #define HTTPClient_HFIELD_REQ_ACCEPT_LANGUAGE (29 | HTTPClient_REQUEST_HEADER_MASK)
134 
135 #define HTTPClient_HFIELD_REQ_ALLOW (HTTPClient_HFIELD_RES_ALLOW | HTTPClient_REQUEST_HEADER_MASK)
136 
137 #define HTTPClient_HFIELD_REQ_AUTHORIZATION (30 | HTTPClient_REQUEST_HEADER_MASK)
138 
139 #define HTTPClient_HFIELD_REQ_CACHE_CONTROL (HTTPClient_HFIELD_RES_CACHE_CONTROL | HTTPClient_REQUEST_HEADER_MASK)
140 
141 #define HTTPClient_HFIELD_REQ_CONNECTION (HTTPClient_HFIELD_RES_CONNECTION | HTTPClient_REQUEST_HEADER_MASK)
142 
143 #define HTTPClient_HFIELD_REQ_CONTENT_ENCODING (HTTPClient_HFIELD_RES_CONTENT_ENCODING | HTTPClient_REQUEST_HEADER_MASK)
144 
145 #define HTTPClient_HFIELD_REQ_CONTENT_LANGUAGE (HTTPClient_HFIELD_RES_CONTENT_LANGUAGE | HTTPClient_REQUEST_HEADER_MASK)
146 
147 #define HTTPClient_HFIELD_REQ_CONTENT_LOCATION (HTTPClient_HFIELD_RES_CONTENT_LOCATION | HTTPClient_REQUEST_HEADER_MASK)
148 
149 #define HTTPClient_HFIELD_REQ_CONTENT_TYPE (HTTPClient_HFIELD_RES_CONTENT_TYPE | HTTPClient_REQUEST_HEADER_MASK)
150 
151 #define HTTPClient_HFIELD_REQ_COOKIE (31 | HTTPClient_REQUEST_HEADER_MASK)
152 
153 #define HTTPClient_HFIELD_REQ_DATE (HTTPClient_HFIELD_RES_DATE | HTTPClient_REQUEST_HEADER_MASK)
154 
155 #define HTTPClient_HFIELD_REQ_EXPECT (32 | HTTPClient_REQUEST_HEADER_MASK)
156 
157 #define HTTPClient_HFIELD_REQ_FORWARDED (33 | HTTPClient_REQUEST_HEADER_MASK)
158 
159 #define HTTPClient_HFIELD_REQ_FROM (34 | HTTPClient_REQUEST_HEADER_MASK)
160 
161 #define HTTPClient_HFIELD_REQ_HOST (35 | HTTPClient_REQUEST_HEADER_MASK)
162 
163 #define HTTPClient_HFIELD_REQ_IF_MATCH (36 | HTTPClient_REQUEST_HEADER_MASK)
164 
165 #define HTTPClient_HFIELD_REQ_IF_MODIFIED_SINCE (37 | HTTPClient_REQUEST_HEADER_MASK)
166 
167 #define HTTPClient_HFIELD_REQ_IF_NONE_MATCH (38 | HTTPClient_REQUEST_HEADER_MASK)
168 
169 #define HTTPClient_HFIELD_REQ_IF_RANGE (39 | HTTPClient_REQUEST_HEADER_MASK)
170 
171 #define HTTPClient_HFIELD_REQ_IF_UNMODIFIED_SINCE (40 | HTTPClient_REQUEST_HEADER_MASK)
172 
173 #define HTTPClient_HFIELD_REQ_ORIGIN (41 | HTTPClient_REQUEST_HEADER_MASK)
174 
175 #define HTTPClient_HFIELD_REQ_PROXY_AUTHORIZATION (42 | HTTPClient_REQUEST_HEADER_MASK)
176 
177 #define HTTPClient_HFIELD_REQ_RANGE (43 | HTTPClient_REQUEST_HEADER_MASK)
178 
179 #define HTTPClient_HFIELD_REQ_TE (44 | HTTPClient_REQUEST_HEADER_MASK)
180 
181 #define HTTPClient_HFIELD_REQ_TRANSFER_ENCODING (HTTPClient_HFIELD_RES_TRANSFER_ENCODING | HTTPClient_REQUEST_HEADER_MASK)
182 
183 #define HTTPClient_HFIELD_REQ_UPGRADE (HTTPClient_HFIELD_RES_UPGRADE | HTTPClient_REQUEST_HEADER_MASK)
184 
185 #define HTTPClient_HFIELD_REQ_USER_AGENT (45 | HTTPClient_REQUEST_HEADER_MASK)
186 
187 #define HTTPClient_HFIELD_REQ_VIA (HTTPClient_HFIELD_RES_VIA | HTTPClient_REQUEST_HEADER_MASK)
188 
189 #define HTTPClient_HFIELD_REQ_WARNING (HTTPClient_HFIELD_RES_WARNING | HTTPClient_REQUEST_HEADER_MASK)
190 
191 #define HTTPClient_MAX_NUMBER_OF_HEADER_FIELDS (46)
192 
193 /* SetOpt options */
195 #define HTTPClient_REDIRECT_FEATURE (48)
196 
198 #define HTTPClient_RESPONSE_FILTER_CLEAR (49)
199 
201 #define HTTPClient_REDIRECT_TLS_DOWNGRADE (50)
202 
207 #define HTTPClient_AUTHENTICATE_SERVER_CALLBACK (51)
208 
209 /* HTTP Client Error Codes */
210 
216 #define HTTPClient_ESENDBUFSMALL (-3001)
217 
221 #define HTTPClient_EGETOPTBUFSMALL (-3002)
222 
226 #define HTTPClient_ERESPONSEINVALID (-3003)
227 
231 #define HTTPClient_EINPROGRESS (-3004)
232 
240 #define HTTPClient_EDOMAINBUFSMALL (-3005)
241 
247 #define HTTPClient_ECBALLOCATIONFAILED (-3006)
248 
256 #define HTTPClient_EBODYBUFSMALL (-3008)
257 
263 #define HTTPClient_ENULLPOINTER (-3009)
264 
268 #define HTTPClient_EREQUESTHEADERALLOCFAILED (-3010)
269 
273 #define HTTPClient_EREQHEADERNOTFOUND (-3011)
274 
280 #define HTTPClient_EHOSTNOTFOUND (-3012)
281 
285 #define HTTPClient_ECLIENTALREADYCONNECTED (-3013)
286 
290 #define HTTPClient_ERESPONSEISNOTREDIRECTABLE (-3014)
291 
295 #define HTTPClient_ESENDERROR (-3015)
296 
306 #define HTTPClient_EREDIRECTLOCATIONFAIL (-3016)
307 
315 #define HTTPClient_ETLSDOWNGRADEISFORBIDDEN (-3017)
316 
322 #define HTTPClient_EWRONGAPIPARAMETER (-3018)
323 
331 #define HTTPClient_EHOSTHEADERALREADYEXIST (-3019)
332 
338 #define HTTPClient_ENOCONNECTION (-3020)
339 
346 #define HTTPClient_ENOTABSOLUTEURI (-3021)
347 
353 #define HTTPClient_ECANTCREATESECATTRIB (-3022)
354 
360 #define HTTPClient_EINTERNAL (-3023)
361 
365 #define HTTPClient_EGETCUSOMHEADERBUFSMALL (-3024)
366 
370 #define HTTPClient_ENOHEADERNAMEDASINSERTED (-3025)
371 
372 /* HTTPClient_connect flags */
374 #define HTTPClient_IGNORE_PROXY (0x01)
375 
377 #define HTTPClient_HOST_EXIST (0x02)
378 
379 /* HTTPClient_setHeader flags */
381 #define HTTPClient_HFIELD_NOT_PERSISTENT (0x01)
382 
384 #define HTTPClient_HFIELD_PERSISTENT (0x02)
385 
386 /* HTTPClient_setHeaderByName 'option' flag */
388 #define HTTPClient_CUSTOM_RESPONSE_HEADER (0x01)
389 
390 
393 /* HTTPClient_sendRequest flags */
395 #define HTTPClient_CHUNK_START (0x01)
396 
398 #define HTTPClient_CHUNK_END (0x02)
399 
401 #define HTTPClient_DROP_BODY (0x04)
402 
403 
404 /* HTTP Request Methods */
405 extern const char *HTTP_METHOD_GET;
406 extern const char *HTTP_METHOD_POST;
407 extern const char *HTTP_METHOD_HEAD;
408 extern const char *HTTP_METHOD_OPTIONS;
409 extern const char *HTTP_METHOD_PUT;
410 extern const char *HTTP_METHOD_DELETE;
411 extern const char *HTTP_METHOD_CONNECT;
412 
413 /* structure user need to use for security */
415 {
416  const char *privateKey; /* Private key */
417  const char *clientCert; /* Client certificate */
418  const char *rootCa; /* Root CA */
420 
439 typedef int16_t (*HTTPClient_authenticationCallback)(const char *serverAuthBuff, uint32_t serverAuthLen, char *clientAuthBuff, uint32_t *clientAuthLen);
440 
441 typedef void *HTTPClient_Handle;
442 
453 HTTPClient_Handle HTTPClient_create(int16_t * status, void *params);
454 
463 int16_t HTTPClient_destroy(HTTPClient_Handle client);
464 
490 int16_t HTTPClient_connect2(HTTPClient_Handle client, const char *hostName, SlNetSockSecAttrib_t *secAttribs, uint32_t flags, int16_t *secureRetVal);
491 
510 int16_t HTTPClient_connect(HTTPClient_Handle client, const char *hostName, HTTPClient_extSecParams *exSecParams, uint32_t flags);
511 
519 int16_t HTTPClient_disconnect(HTTPClient_Handle client);
520 
521 
562 int16_t HTTPClient_sendRequest(HTTPClient_Handle client, const char *method,const char *requestURI, const char *body, uint32_t bodyLen, uint32_t flags);
563 
585 int16_t HTTPClient_readResponseBody(HTTPClient_Handle client, char *body, uint32_t bodyLen, bool *moreDataFlag);
586 
611 int16_t HTTPClient_setHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags);
612 
651 int16_t HTTPClient_setHeaderByName(HTTPClient_Handle client, uint32_t option, const char *name, void *value, uint32_t len, uint32_t flags);
652 
672 int16_t HTTPClient_getHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len, uint32_t flags);
673 
698 int16_t HTTPClient_getHeaderByName(HTTPClient_Handle client, uint32_t option, const char* name, void *value, uint32_t *len ,uint32_t flags);
720 int16_t HTTPClient_setOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags);
721 
741 int16_t HTTPClient_getOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len ,uint32_t flags);
742 
766 void HTTPClient_setProxy(const SlNetSock_Addr_t *addr);
767 
769 #ifdef __cplusplus
770 }
771 #endif
772 
773 #endif
int16_t HTTPClient_connect2(HTTPClient_Handle client, const char *hostName, SlNetSockSecAttrib_t *secAttribs, uint32_t flags, int16_t *secureRetVal)
Open a connection to an HTTP server. A user can connect to a HTTP server using TLS, proxy or both. HTTPClient_connect2 allows the user more control over security by accepting a secure attribute object and returning the value of the attempted secure connection.
const char * HTTP_METHOD_HEAD
const char * HTTP_METHOD_GET
int16_t HTTPClient_connect(HTTPClient_Handle client, const char *hostName, HTTPClient_extSecParams *exSecParams, uint32_t flags)
Open a connection to an HTTP server. A user can connect to a HTTP server using TLS, proxy or both.
int16_t HTTPClient_destroy(HTTPClient_Handle client)
Destroy the HTTP client instance and free the previously allocated instance object.
struct HTTPClient_extSecParams HTTPClient_extSecParams
int16_t HTTPClient_getOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len, uint32_t flags)
Getting HTTP Client configurations.
int16_t HTTPClient_disconnect(HTTPClient_Handle client)
Disconnect from the HTTP server.
const char * HTTP_METHOD_OPTIONS
IpV4 socket address.
Definition: slnetsock.h:652
int16_t HTTPClient_sendRequest(HTTPClient_Handle client, const char *method, const char *requestURI, const char *body, uint32_t bodyLen, uint32_t flags)
Make an HTTP request to the HTTP server.
int16_t HTTPClient_setOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags)
Setting HTTP Client configurations.
const char * clientCert
Definition: httpclient.h:417
const char * HTTP_METHOD_CONNECT
const char * HTTP_METHOD_DELETE
int16_t HTTPClient_getHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len, uint32_t flags)
Getting HTTP Client Header-field configurations.
int16_t HTTPClient_getHeaderByName(HTTPClient_Handle client, uint32_t option, const char *name, void *value, uint32_t *len, uint32_t flags)
Getting HTTP Client Header-field configurations. This API doesn&#39;t support removing existing custom he...
void HTTPClient_setProxy(const SlNetSock_Addr_t *addr)
Uses the http CONNECT method to create a tunnel through a remote proxy server to the host designated ...
int16_t HTTPClient_setHeaderByName(HTTPClient_Handle client, uint32_t option, const char *name, void *value, uint32_t len, uint32_t flags)
Setting HTTP Client Header-field configurations by header name. Both standard (as defined by the HTTP...
void * HTTPClient_Handle
Definition: httpclient.h:441
int16_t HTTPClient_setHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags)
Setting HTTP Client Header-field configurations.
HTTPClient_Handle HTTPClient_create(int16_t *status, void *params)
Allocate and initialize a new HTTPClient instance object and return its handle.
int16_t HTTPClient_readResponseBody(HTTPClient_Handle client, char *body, uint32_t bodyLen, bool *moreDataFlag)
Read the response body data from the HTTP server The function handles both oneshot and chunked body r...
Secure socket attribute context.
Definition: slnetsock.h:569
const char * privateKey
Definition: httpclient.h:416
const char * rootCa
Definition: httpclient.h:418
const char * HTTP_METHOD_PUT
const char * HTTP_METHOD_POST
Definition: httpclient.h:414
int16_t(* HTTPClient_authenticationCallback)(const char *serverAuthBuff, uint32_t serverAuthLen, char *clientAuthBuff, uint32_t *clientAuthLen)
HTTPClient callback for server authentication handling This function is responsible for generating th...
Definition: httpclient.h:439
© Copyright 1995-2020, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale