in src/uhttp.c [1073:1120]
HTTP_CLIENT_HANDLE uhttp_client_create(const IO_INTERFACE_DESCRIPTION* io_interface_desc, const void* xio_param, ON_HTTP_ERROR_CALLBACK on_http_error, void* callback_ctx)
{
HTTP_CLIENT_HANDLE_DATA* result;
/* Codes_SRS_UHTTP_07_002: [If io_interface_desc is NULL, uhttp_client_create shall return NULL.] */
if (io_interface_desc == NULL)
{
LogError("Invalid Parameter io_interface_desc is NULL");
result = NULL;
}
else
{
result = malloc(sizeof(HTTP_CLIENT_HANDLE_DATA));
if (result == NULL)
{
/* Codes_SRS_UHTTP_07_003: [If uhttp_client_create encounters any error then it shall return NULL] */
LogError("Failure allocating http_client_handle");
}
else
{
memset(result, 0, sizeof(HTTP_CLIENT_HANDLE_DATA) );
if ((result->data_list = singlylinkedlist_create() ) == NULL)
{
/* Codes_SRS_UHTTP_07_003: [If uhttp_client_create encounters any error then it shall return NULL] */
LogError("Failure allocating data list");
free(result);
result = NULL;
}
else if ((result->xio_handle = xio_create(io_interface_desc, xio_param) ) == NULL)
{
/* Codes_SRS_UHTTP_07_044: [ if a failure is encountered on xio_open uhttp_client_open shall return HTTP_CLIENT_OPEN_REQUEST_FAILED. ] */
LogError("xio create failed");
singlylinkedlist_destroy(result->data_list);
free(result);
result = NULL;
}
else
{
/* Codes_SRS_UHTTP_07_001: [uhttp_client_create shall return an initialize the http client handle.] */
result->on_error = on_http_error;
result->error_user_ctx = callback_ctx;
result->recv_msg.recv_state = state_initial;
result->chunk_request = false;
result->trace_on = false;
}
}
}
return (HTTP_CLIENT_HANDLE)result;
}