Docker-Build mit gcc-arm-none-eabi 4.9-2014q4 (statt Homebrew-Cask) verwendet, Dockerfile/tools/docker.sh dafür aus Task 13 vorgezogen. cmake/sdk.cmake schont gcc 4.9 (kennt -fcommon/-Wno-error=... nicht). Zwei zusätzliche SDK-Stubs (EarlyInit, pre_gpio_config) in src/sys/sdk_stubs.c ergänzt, siehe sdk/PATCHES.md.
308 lines
11 KiB
C
308 lines
11 KiB
C
#include "wm_type_def.h"
|
|
#include "wm_http_client.h"
|
|
#include "HTTPClient.h"
|
|
#include "HTTPClientWrapper.h"
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientOpenRequest
|
|
* Description: Allocate memory for a new HTTP Session.
|
|
*
|
|
* Input: Flags: HTTP Session internal API flags, 0 should be passed here.
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Session handle
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
tls_http_session_handle_t tls_http_client_open_request(tls_http_session_flags_t flags)
|
|
{
|
|
return HTTPClientOpenRequest(flags);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientCloseRequest
|
|
* Description: Closes any active connection and free any used memory.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_close_request(tls_http_session_handle_t *session)
|
|
{
|
|
return HTTPClientCloseRequest(session);
|
|
}
|
|
|
|
#if TLS_CONFIG_HTTP_CLIENT_AUTH
|
|
/***************************************************************************
|
|
* Function: HTTPClientSetAuth
|
|
* Description: Sets the HTTP authentication schema.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* AuthSchema: HTTP Supported authentication methods.
|
|
* pReserved: Reserved parameter.
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_set_auth(tls_http_session_handle_t session,
|
|
tls_http_auth_achema_t auth_schema,
|
|
void *reserved)
|
|
{
|
|
return HTTPClientSetAuth(session, (HTTP_AUTH_SCHEMA)auth_schema, reserved);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientSetCredentials
|
|
* Description: Sets credentials for the target host.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* pUserName: User name.
|
|
* pPassword: Password.
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_set_credentials(tls_http_session_handle_t session,
|
|
char *user_name, char *password)
|
|
{
|
|
return HTTPClientSetCredentials(session, (CHAR *)user_name, (CHAR *)password);
|
|
}
|
|
#endif
|
|
|
|
#if TLS_CONFIG_HTTP_CLIENT_PROXY
|
|
/***************************************************************************
|
|
* Function: HTTPClientSetProxy
|
|
* Description: Sets all the proxy related parameters.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* pProxyName: The host name.
|
|
* nPort: The proxy port number.
|
|
* pUserName: User name for proxy authentication (can be null).
|
|
* pPassword: User password for proxy authentication (can be null).
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_set_proxy(tls_http_session_handle_t session, char *proxy_name,
|
|
u16 port, char *user_name, char *password)
|
|
{
|
|
return HTTPClientSetProxy(session, (CHAR *)proxy_name, port, (CHAR *)user_name, (CHAR *)password);
|
|
}
|
|
#endif
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientSetVerb
|
|
* Description: Sets the HTTP verb for the outgoing request.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* HttpVerb: HTTP supported verbs
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_set_verb(tls_http_session_handle_t session, tls_http_verb_t http_verb)
|
|
{
|
|
return HTTPClientSetVerb(session, (HTTP_VERB)http_verb);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientAddRequestHeaders
|
|
* Description: Add headers to the outgoing request.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* pHeaderName: The Headers name
|
|
* pHeaderData: The headers data
|
|
* nInsert: Reserved could be any
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_add_request_headers(tls_http_session_handle_t session, char *header_name,
|
|
char *header_data, bool insert)
|
|
{
|
|
return HTTPClientAddRequestHeaders(session, (CHAR *)header_name, (CHAR *)header_data, (BOOL)insert);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientSendRequest
|
|
* Description: This function builds the request headers, performs a DNS resolution ,
|
|
* opens the connection (if it was not opened yet by a previous request or if it has closed)
|
|
* and sends the request headers.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* pUrl: The requested URL
|
|
* pData: Data to post to the server
|
|
* nDataLength: Length of posted data
|
|
* TotalLength: Valid only when http method is post.
|
|
* TRUE: Post data to http server.
|
|
* FALSE: In a post request without knowing the total length in advance so return error or use chunking.
|
|
* nTimeout: Operation timeout
|
|
* nClientPort: Client side port 0 for none
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_send_request(tls_http_session_handle_t session, char *url, void *data,
|
|
u32 data_len, bool total_len, u32 time_out, u32 client_port)
|
|
{
|
|
return HTTPClientSendRequest(session, (CHAR *)url, data, data_len, (BOOL)total_len, time_out, client_port);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientWriteData
|
|
* Description: Write data to the remote server.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* pBuffer: Data to write to the server.
|
|
* nBufferLength: Length of wtitten data.
|
|
* nTimeout: Timeout for the operation.
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_write_data(tls_http_session_handle_t session, void *buffer,
|
|
u32 buffer_len, u32 time_out)
|
|
{
|
|
return HTTPClientWriteData(session, buffer, buffer_len, time_out);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientRecvResponse
|
|
* Description: Receives the response header on the connection and parses it.
|
|
* Performs any required authentication.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* nTimeout: Timeout for the operation.
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_recv_response(tls_http_session_handle_t session, u32 time_out)
|
|
{
|
|
return HTTPClientRecvResponse(session, time_out);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientReadData
|
|
* Description: Read data from the server. Parse out the chunks data.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* nBytesToRead: The size of the buffer (numbers of bytes to read)
|
|
* nTimeout: Operation timeout in seconds
|
|
*
|
|
* Output: pBuffer: A pointer to a buffer that will be filled with the servers response
|
|
* nBytesRecived: Count of the bytes that were received in this operation
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_read_data(tls_http_session_handle_t session, void *buffer,
|
|
u32 bytes_to_read, u32 time_out, u32 *bytes_recived)
|
|
{
|
|
return HTTPClientReadData(session, buffer, bytes_to_read, time_out, bytes_recived);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientGetInfo
|
|
* Description: Fill the users structure with the session information.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
*
|
|
* Output: HTTPClient: The session information.
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_get_info(tls_http_session_handle_t session, tls_http_client_t *http_client)
|
|
{
|
|
return HTTPClientGetInfo(session, http_client);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientFindFirstHeader
|
|
* Description: Initiate the headr searching functions and find the first header.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
* pSearchClue: Search clue.
|
|
*
|
|
* Output: pHeaderBuffer: A pointer to a buffer that will be filled with the header name and value.
|
|
* nLength: Count of the bytes that were received in this operation.
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_find_first_header(tls_http_session_handle_t session, char *search_clue,
|
|
char *header_buffer, u32 *length)
|
|
{
|
|
return HTTPClientFindFirstHeader(session, (CHAR *)search_clue, (CHAR *)header_buffer, length);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientGetNextHeader
|
|
* Description: Find the next header.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
*
|
|
* Output: pHeaderBuffer: A pointer to a buffer that will be filled with the header name and value.
|
|
* nLength: Count of the bytes that were received in this operation.
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_get_next_header(tls_http_session_handle_t session,
|
|
char *header_buffer, u32 *length)
|
|
{
|
|
return HTTPClientGetNextHeader(session, (CHAR *)header_buffer, length);
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Function: HTTPClientFindCloseHeader
|
|
* Description: Terminate a headers search session.
|
|
*
|
|
* Input: pSession: HTTP Session handle.
|
|
*
|
|
* Output: None
|
|
*
|
|
* Return: HTTP Status
|
|
*
|
|
* Date : 2014-6-6
|
|
****************************************************************************/
|
|
int tls_http_client_find_close_header(tls_http_session_handle_t session)
|
|
{
|
|
return HTTPClientFindCloseHeader(session);
|
|
}
|
|
|