Network Services API  2.50.00.07
httpclient.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2018, 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)
122 
123 #define HTTPClient_REQUEST_HEADER_MASK (0x80000000)
124 
125 /* HTTP request header fields */
126 #define HTTPClient_HFIELD_REQ_ACCEPT (26 | HTTPClient_REQUEST_HEADER_MASK)
127 #define HTTPClient_HFIELD_REQ_ACCEPT_CHARSET (27 | HTTPClient_REQUEST_HEADER_MASK)
128 #define HTTPClient_HFIELD_REQ_ACCEPT_ENCODING (28 | HTTPClient_REQUEST_HEADER_MASK)
129 #define HTTPClient_HFIELD_REQ_ACCEPT_LANGUAGE (29 | HTTPClient_REQUEST_HEADER_MASK)
130 #define HTTPClient_HFIELD_REQ_ALLOW (HTTPClient_HFIELD_RES_ALLOW | HTTPClient_REQUEST_HEADER_MASK)
131 #define HTTPClient_HFIELD_REQ_AUTHORIZATION (30 | HTTPClient_REQUEST_HEADER_MASK)
132 #define HTTPClient_HFIELD_REQ_CACHE_CONTROL (HTTPClient_HFIELD_RES_CACHE_CONTROL | HTTPClient_REQUEST_HEADER_MASK)
133 #define HTTPClient_HFIELD_REQ_CONNECTION (HTTPClient_HFIELD_RES_CONNECTION | HTTPClient_REQUEST_HEADER_MASK)
134 #define HTTPClient_HFIELD_REQ_CONTENT_ENCODING (HTTPClient_HFIELD_RES_CONTENT_ENCODING | HTTPClient_REQUEST_HEADER_MASK)
135 #define HTTPClient_HFIELD_REQ_CONTENT_LANGUAGE (HTTPClient_HFIELD_RES_CONTENT_LANGUAGE | HTTPClient_REQUEST_HEADER_MASK)
136 #define HTTPClient_HFIELD_REQ_CONTENT_LOCATION (HTTPClient_HFIELD_RES_CONTENT_LOCATION | HTTPClient_REQUEST_HEADER_MASK)
137 #define HTTPClient_HFIELD_REQ_CONTENT_TYPE (HTTPClient_HFIELD_RES_CONTENT_TYPE | HTTPClient_REQUEST_HEADER_MASK)
138 #define HTTPClient_HFIELD_REQ_COOKIE (31 | HTTPClient_REQUEST_HEADER_MASK)
139 #define HTTPClient_HFIELD_REQ_DATE (HTTPClient_HFIELD_RES_DATE | HTTPClient_REQUEST_HEADER_MASK)
140 #define HTTPClient_HFIELD_REQ_EXPECT (32 | HTTPClient_REQUEST_HEADER_MASK)
141 #define HTTPClient_HFIELD_REQ_FORWARDED (33 | HTTPClient_REQUEST_HEADER_MASK)
142 #define HTTPClient_HFIELD_REQ_FROM (34 | HTTPClient_REQUEST_HEADER_MASK)
143 #define HTTPClient_HFIELD_REQ_HOST (35 | HTTPClient_REQUEST_HEADER_MASK)
144 #define HTTPClient_HFIELD_REQ_IF_MATCH (36 | HTTPClient_REQUEST_HEADER_MASK)
145 #define HTTPClient_HFIELD_REQ_IF_MODIFIED_SINCE (37 | HTTPClient_REQUEST_HEADER_MASK)
146 #define HTTPClient_HFIELD_REQ_IF_NONE_MATCH (38 | HTTPClient_REQUEST_HEADER_MASK)
147 #define HTTPClient_HFIELD_REQ_IF_RANGE (39 | HTTPClient_REQUEST_HEADER_MASK)
148 #define HTTPClient_HFIELD_REQ_IF_UNMODIFIED_SINCE (40 | HTTPClient_REQUEST_HEADER_MASK)
149 #define HTTPClient_HFIELD_REQ_ORIGIN (41 | HTTPClient_REQUEST_HEADER_MASK)
150 #define HTTPClient_HFIELD_REQ_PROXY_AUTHORIZATION (42 | HTTPClient_REQUEST_HEADER_MASK)
151 #define HTTPClient_HFIELD_REQ_RANGE (43 | HTTPClient_REQUEST_HEADER_MASK)
152 #define HTTPClient_HFIELD_REQ_TE (44 | HTTPClient_REQUEST_HEADER_MASK)
153 #define HTTPClient_HFIELD_REQ_TRANSFER_ENCODING (HTTPClient_HFIELD_RES_TRANSFER_ENCODING | HTTPClient_REQUEST_HEADER_MASK)
154 #define HTTPClient_HFIELD_REQ_UPGRADE (HTTPClient_HFIELD_RES_UPGRADE | HTTPClient_REQUEST_HEADER_MASK)
155 #define HTTPClient_HFIELD_REQ_USER_AGENT (45 | HTTPClient_REQUEST_HEADER_MASK)
156 #define HTTPClient_HFIELD_REQ_VIA (HTTPClient_HFIELD_RES_VIA | HTTPClient_REQUEST_HEADER_MASK)
157 #define HTTPClient_HFIELD_REQ_WARNING (HTTPClient_HFIELD_RES_WARNING | HTTPClient_REQUEST_HEADER_MASK)
158 
159 #define HTTPClient_MAX_NUMBER_OF_HEADER_FIELDS (46)
160 
161 /* SetOpt options */
163 #define HTTPClient_REDIRECT_FEATURE (48)
164 
166 #define HTTPClient_RESPONSE_FILTER_CLEAR (49)
167 
169 #define HTTPClient_REDIRECT_TLS_DOWNGRADE (50)
170 
175 #define HTTPClient_AUTHENTICATE_SERVER_CALLBACK (51)
176 
177 /* HTTP Client Error Codes */
178 
184 #define HTTPClient_ESENDBUFSMALL (-3001)
185 
189 #define HTTPClient_EGETOPTBUFSMALL (-3002)
190 
194 #define HTTPClient_ERESPONSEINVALID (-3003)
195 
199 #define HTTPClient_EINPROGRESS (-3004)
200 
208 #define HTTPClient_EDOMAINBUFSMALL (-3005)
209 
215 #define HTTPClient_ECBALLOCATIONFAILED (-3006)
216 
224 #define HTTPClient_EBODYBUFSMALL (-3008)
225 
231 #define HTTPClient_ENULLPOINTER (-3009)
232 
236 #define HTTPClient_EREQUESTHEADERALLOCFAILED (-3010)
237 
241 #define HTTPClient_EREQHEADERNOTFOUND (-3011)
242 
248 #define HTTPClient_EHOSTNOTFOUND (-3012)
249 
253 #define HTTPClient_ECLIENTALREADYCONNECTED (-3013)
254 
258 #define HTTPClient_ERESPONSEISNOTREDIRECTABLE (-3014)
259 
263 #define HTTPClient_ESENDERROR (-3015)
264 
274 #define HTTPClient_EREDIRECTLOCATIONFAIL (-3016)
275 
283 #define HTTPClient_ETLSDOWNGRADEISFORBIDDEN (-3017)
284 
290 #define HTTPClient_EWRONGAPIPARAMETER (-3018)
291 
299 #define HTTPClient_EHOSTHEADERALREADYEXIST (-3019)
300 
306 #define HTTPClient_ENOCONNECTION (-3020)
307 
314 #define HTTPClient_ENOTABSOLUTEURI (-3021)
315 
321 #define HTTPClient_ECANTCREATESECATTRIB (-3022)
322 
323 /* HTTPClient_connect flags */
325 #define HTTPClient_IGNORE_PROXY (0x01)
326 
327 /* If the user already added "Host:" header, set this flag */
328 #define HTTPClient_HOST_EXIST (0x02)
329 
330 /* HTTPClient_setHeader flags */
332 #define HTTPClient_HFIELD_NOT_PERSISTENT (0x01)
333 
335 #define HTTPClient_HFIELD_PERSISTENT (0x02)
336 
337 /* HTTPClient_sendRequest flags */
339 #define HTTPClient_CHUNK_START (0x01)
340 
342 #define HTTPClient_CHUNK_END (0x02)
343 
345 #define HTTPClient_DROP_BODY (0x04)
346 
347 
348 /* HTTP Request Methods */
349 extern const char *HTTP_METHOD_GET;
350 extern const char *HTTP_METHOD_POST;
351 extern const char *HTTP_METHOD_HEAD;
352 extern const char *HTTP_METHOD_OPTIONS;
353 extern const char *HTTP_METHOD_PUT;
354 extern const char *HTTP_METHOD_DELETE;
355 extern const char *HTTP_METHOD_CONNECT;
356 
357 /* structure user need to use for security */
359 {
360  const char *privateKey; /* Private key */
361  const char *clientCert; /* Client certificate */
362  const char *rootCa; /* Root CA */
364 
383 typedef int16_t (*HTTPClient_authenticationCallback)(const char *serverAuthBuff, uint32_t serverAuthLen, char *clientAuthBuff, uint32_t *clientAuthLen);
384 
385 typedef void *HTTPClient_Handle;
386 
397 HTTPClient_Handle HTTPClient_create(int16_t * status, void *params);
398 
407 int16_t HTTPClient_destroy(HTTPClient_Handle client);
408 
425 int16_t HTTPClient_connect(HTTPClient_Handle client, const char *hostName, HTTPClient_extSecParams *exSecParams, uint32_t flags);
426 
434 int16_t HTTPClient_disconnect(HTTPClient_Handle client);
435 
436 
477 int16_t HTTPClient_sendRequest(HTTPClient_Handle client, const char *method,const char *requestURI, const char *body, uint32_t bodyLen, uint32_t flags);
478 
500 int16_t HTTPClient_readResponseBody(HTTPClient_Handle client, char *body, uint32_t bodyLen, bool *moreDataFlag);
501 
526 int16_t HTTPClient_setHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags);
527 
557 int16_t HTTPClient_setHeaderByName(HTTPClient_Handle client, uint32_t option, const char *name, void *value, uint32_t len, uint32_t flags);
558 
578 int16_t HTTPClient_getHeader(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len, uint32_t flags);
579 
601 int16_t HTTPClient_setOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t len, uint32_t flags);
602 
622 int16_t HTTPClient_getOpt(HTTPClient_Handle client, uint32_t option, void *value, uint32_t *len ,uint32_t flags);
623 
629 void HTTPClient_setProxy(const SlNetSock_Addr_t *addr);
630 
632 #ifdef __cplusplus
633 }
634 #endif
635 
636 #endif
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:646
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:361
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)
Set the proxy address.
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:385
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...
const char * privateKey
Definition: httpclient.h:360
const char * rootCa
Definition: httpclient.h:362
const char * HTTP_METHOD_PUT
const char * HTTP_METHOD_POST
Definition: httpclient.h:358
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:383
© Copyright 1995-2018, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale