Network Services API  2.70.01.02
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 
355 /* HTTPClient_connect flags */
357 #define HTTPClient_IGNORE_PROXY (0x01)
358 
360 #define HTTPClient_HOST_EXIST (0x02)
361 
362 /* HTTPClient_setHeader flags */
364 #define HTTPClient_HFIELD_NOT_PERSISTENT (0x01)
365 
367 #define HTTPClient_HFIELD_PERSISTENT (0x02)
368 
369 /* HTTPClient_sendRequest flags */
371 #define HTTPClient_CHUNK_START (0x01)
372 
374 #define HTTPClient_CHUNK_END (0x02)
375 
377 #define HTTPClient_DROP_BODY (0x04)
378 
379 
380 /* HTTP Request Methods */
381 extern const char *HTTP_METHOD_GET;
382 extern const char *HTTP_METHOD_POST;
383 extern const char *HTTP_METHOD_HEAD;
384 extern const char *HTTP_METHOD_OPTIONS;
385 extern const char *HTTP_METHOD_PUT;
386 extern const char *HTTP_METHOD_DELETE;
387 extern const char *HTTP_METHOD_CONNECT;
388 
389 /* structure user need to use for security */
391 {
392  const char *privateKey; /* Private key */
393  const char *clientCert; /* Client certificate */
394  const char *rootCa; /* Root CA */
396 
415 typedef int16_t (*HTTPClient_authenticationCallback)(const char *serverAuthBuff, uint32_t serverAuthLen, char *clientAuthBuff, uint32_t *clientAuthLen);
416 
417 typedef void *HTTPClient_Handle;
418 
429 HTTPClient_Handle HTTPClient_create(int16_t * status, void *params);
430 
439 int16_t HTTPClient_destroy(HTTPClient_Handle client);
440 
466 int16_t HTTPClient_connect2(HTTPClient_Handle client, const char *hostName, SlNetSockSecAttrib_t *secAttribs, uint32_t flags, int16_t *secureRetVal);
467 
486 int16_t HTTPClient_connect(HTTPClient_Handle client, const char *hostName, HTTPClient_extSecParams *exSecParams, uint32_t flags);
487 
495 int16_t HTTPClient_disconnect(HTTPClient_Handle client);
496 
497 
538 int16_t HTTPClient_sendRequest(HTTPClient_Handle client, const char *method,const char *requestURI, const char *body, uint32_t bodyLen, uint32_t flags);
539 
561 int16_t HTTPClient_readResponseBody(HTTPClient_Handle client, char *body, uint32_t bodyLen, bool *moreDataFlag);
562 
587 int16_t HTTPClient_setHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags);
588 
618 int16_t HTTPClient_setHeaderByName(HTTPClient_Handle client, uint32_t option, const char *name, void *value, uint32_t len, uint32_t flags);
619 
639 int16_t HTTPClient_getHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len, uint32_t flags);
640 
662 int16_t HTTPClient_setOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags);
663 
683 int16_t HTTPClient_getOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len ,uint32_t flags);
684 
708 void HTTPClient_setProxy(const SlNetSock_Addr_t *addr);
709 
711 #ifdef __cplusplus
712 }
713 #endif
714 
715 #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:647
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:393
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.
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:417
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:565
const char * privateKey
Definition: httpclient.h:392
const char * rootCa
Definition: httpclient.h:394
const char * HTTP_METHOD_PUT
const char * HTTP_METHOD_POST
Definition: httpclient.h:390
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:415
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale