30#ifndef CORE_HTTP_CLIENT_H_ 
   31#define CORE_HTTP_CLIENT_H_ 
   46#ifndef HTTP_DO_NOT_USE_CUSTOM_CONFIG 
   47    #include "core_http_config.h" 
   62#define HTTP_METHOD_GET     "GET"                        
   63#define HTTP_METHOD_PUT     "PUT"                        
   64#define HTTP_METHOD_POST    "POST"                       
   65#define HTTP_METHOD_HEAD    "HEAD"                       
   73#define HTTP_MAX_CONTENT_LENGTH_HEADER_LENGTH    sizeof( "Content-Length: 4294967295" ) - 1U
 
   92#define HTTP_SEND_DISABLE_CONTENT_LENGTH_FLAG    0x1U 
  114#define HTTP_REQUEST_KEEP_ALIVE_FLAG       0x1U 
  125#define HTTP_REQUEST_NO_USER_AGENT_FLAG    0x2U 
  146#define HTTP_RESPONSE_CONNECTION_CLOSE_FLAG         0x1U 
  154#define HTTP_RESPONSE_CONNECTION_KEEP_ALIVE_FLAG    0x2U 
  175#define HTTP_RESPONSE_DO_NOT_PARSE_BODY_FLAG    0x1U 
  189#define HTTP_RANGE_REQUEST_END_OF_FILE          -1 
  195typedef enum HTTPStatus
 
  364typedef struct HTTPRequestHeaders
 
  395typedef struct HTTPRequestInfo
 
  432typedef struct HTTPClient_ResponseHeaderParsingCallback
 
  443    void ( * onHeaderCallback )( 
void * pContext,
 
  444                                 const char * fieldLoc,
 
  446                                 const char * valueLoc,
 
  448                                 uint16_t statusCode );
 
  469typedef struct HTTPResponse
 
  775                                        int32_t rangeStartOrlastNbytes,
 
  819                                         uint32_t sendFlags );
 
  838                                      const uint8_t * pData,
 
  938                              const uint8_t * pRequestBodyBuf,
 
  939                              size_t reqBodyBufLen,
 
  941                              uint32_t sendFlags );
 
 1015                                    const char * pField,
 
 1017                                    const char ** pValueLoc,
 
 1018                                    size_t * pValueLen );
 
HTTPStatus_t HTTPClient_AddHeader(HTTPRequestHeaders_t *pRequestHeaders, const char *pField, size_t fieldLen, const char *pValue, size_t valueLen)
Add a header to the request headers stored in HTTPRequestHeaders_t.pBuffer.
Definition: core_http_client.c:1689
 
HTTPStatus_t HTTPClient_Send(const TransportInterface_t *pTransport, HTTPRequestHeaders_t *pRequestHeaders, const uint8_t *pRequestBodyBuf, size_t reqBodyBufLen, HTTPResponse_t *pResponse, uint32_t sendFlags)
Send the request headers in HTTPRequestHeaders_t.pBuffer and request body in pRequestBodyBuf over the...
Definition: core_http_client.c:2209
 
HTTPStatus_t HTTPClient_InitializeRequestHeaders(HTTPRequestHeaders_t *pRequestHeaders, const HTTPRequestInfo_t *pRequestInfo)
Initialize the request headers, stored in HTTPRequestHeaders_t.pBuffer, with initial configurations f...
Definition: core_http_client.c:1589
 
HTTPStatus_t HTTPClient_ReceiveAndParseHttpResponse(const TransportInterface_t *pTransport, HTTPResponse_t *pResponse, const HTTPRequestHeaders_t *pRequestHeaders)
Receive the HTTP response from the network and parse it.
Definition: core_http_client.c:2032
 
HTTPStatus_t HTTPClient_SendHttpHeaders(const TransportInterface_t *pTransport, HTTPClient_GetCurrentTimeFunc_t getTimestampMs, HTTPRequestHeaders_t *pRequestHeaders, size_t reqBodyLen, uint32_t sendFlags)
Send the request headers in pRequestHeaders over the transport.
Definition: core_http_client.c:1926
 
HTTPStatus_t HTTPClient_ReadHeader(const HTTPResponse_t *pResponse, const char *pField, size_t fieldLen, const char **pValueLoc, size_t *pValueLen)
Read a header from a buffer containing a complete HTTP response. This will return the location of the...
Definition: core_http_client.c:2553
 
const char * HTTPClient_strerror(HTTPStatus_t status)
Error code to string conversion utility for HTTP Client library.
Definition: core_http_client.c:2618
 
HTTPStatus_t HTTPClient_SendHttpData(const TransportInterface_t *pTransport, HTTPClient_GetCurrentTimeFunc_t getTimestampMs, const uint8_t *pData, size_t dataLen)
Send the request body in pRequestBodyBuf over the transport.
Definition: core_http_client.c:1814
 
HTTPStatus_t HTTPClient_AddRangeHeader(HTTPRequestHeaders_t *pRequestHeaders, int32_t rangeStartOrlastNbytes, int32_t rangeEnd)
Add the byte range request header to the request headers store in HTTPRequestHeaders_t....
Definition: core_http_client.c:1749
 
The default values for the configuration macros for the HTTP Client library.
 
uint32_t(* HTTPClient_GetCurrentTimeFunc_t)(void)
Application provided function to query the current time in milliseconds.
Definition: core_http_client.h:463
 
HTTPStatus_t
The HTTP Client library return status.
Definition: core_http_client.h:196
 
@ HTTPSecurityAlertInvalidCharacter
An invalid character was found in the HTTP response message or in the HTTP request header.
Definition: core_http_client.h:303
 
@ HTTPPartialResponse
Part of the HTTP response was received from the network.
Definition: core_http_client.h:235
 
@ HTTPInsufficientMemory
The application buffer was not large enough for the HTTP request headers or the HTTP response message...
Definition: core_http_client.h:258
 
@ HTTPParserInternalError
An error occurred in the third-party parsing library.
Definition: core_http_client.h:333
 
@ HTTPNetworkError
A network error was returned from the transport interface.
Definition: core_http_client.h:227
 
@ HTTPSuccess
The HTTP Client library function completed successfully.
Definition: core_http_client.h:207
 
@ HTTPInvalidResponse
The HTTP response, provided for parsing, is either corrupt or incomplete.
Definition: core_http_client.h:350
 
@ HTTPNoResponse
No HTTP response was received from the network.
Definition: core_http_client.h:246
 
@ HTTPSecurityAlertInvalidProtocolVersion
The server sent a response with an invalid character in the HTTP protocol version.
Definition: core_http_client.h:284
 
@ HTTPSecurityAlertInvalidContentLength
The response contains either an invalid character in the Content-Length header or a Content-Length he...
Definition: core_http_client.h:313
 
@ HTTPParserPaused
Represents the paused state of the HTTP parser.
Definition: core_http_client.h:324
 
@ HTTPHeaderNotFound
The requested header field was not found in the response buffer.
Definition: core_http_client.h:341
 
@ HTTPInvalidParameter
The HTTP Client library function input an invalid parameter.
Definition: core_http_client.h:219
 
@ HTTPSecurityAlertInvalidChunkHeader
The server sent a chunk header containing an invalid character.
Definition: core_http_client.h:275
 
@ HTTPSecurityAlertInvalidStatusCode
The server sent a response with an invalid character in the HTTP status-code or the HTTP status code ...
Definition: core_http_client.h:293
 
@ HTTPSecurityAlertExtraneousResponseData
A response contained the "Connection: close" header, but there was more data at the end of the comple...
Definition: core_http_client.h:267
 
Configurations of the initial request headers.
Definition: core_http_client.h:396
 
uint32_t reqFlags
Flags to activate other request header configurations.
Definition: core_http_client.h:422
 
size_t methodLen
Definition: core_http_client.h:401
 
const char * pMethod
The HTTP request method e.g. "GET", "POST", "PUT", or "HEAD".
Definition: core_http_client.h:400
 
const char * pPath
The Request-URI to the objects of interest, e.g. "/path/to/item.txt".
Definition: core_http_client.h:406
 
const char * pHost
The server's host name, e.g. "my-storage.my-cloud.com".
Definition: core_http_client.h:414
 
size_t pathLen
Definition: core_http_client.h:407
 
size_t hostLen
Definition: core_http_client.h:415
 
Represents an HTTP response.
Definition: core_http_client.h:470
 
HTTPClient_ResponseHeaderParsingCallback_t * pHeaderParsingCallback
Optional callback for intercepting the header during the first parse through of the response as is it...
Definition: core_http_client.h:494
 
size_t bodyLen
Byte length of the body in pBuffer.
Definition: core_http_client.h:538
 
size_t headerCount
Count of the headers sent by the server.
Definition: core_http_client.h:561
 
uint16_t statusCode
The HTTP response Status-Code.
Definition: core_http_client.h:547
 
uint32_t respFlags
Flags of useful headers found in the response.
Definition: core_http_client.h:583
 
size_t bufferLen
Definition: core_http_client.h:487
 
uint32_t respOptionFlags
Flags to control the behavior of response parsing.
Definition: core_http_client.h:575
 
size_t headersLen
Byte length of the response headers in pBuffer.
Definition: core_http_client.h:524
 
uint8_t * pBuffer
Buffer for both the raw HTTP header and body.
Definition: core_http_client.h:486
 
const uint8_t * pHeaders
The starting location of the response headers in pBuffer.
Definition: core_http_client.h:517
 
uint8_t areHeadersComplete
Indicates whether the HTTP response headers have been fully received.
Definition: core_http_client.h:568
 
const uint8_t * pBody
The starting location of the response body in pBuffer.
Definition: core_http_client.h:531
 
size_t contentLength
The value in the "Content-Length" header is returned here.
Definition: core_http_client.h:554
 
HTTPClient_GetCurrentTimeFunc_t getTime
Optional callback for getting the system time.
Definition: core_http_client.h:510
 
The transport layer interface.
Definition: transport_interface.h:299
 
Transport interface definitions to send and receive data over the network.