75 mcl_size_t content_info_line_length,
char *sub_boundary);
82 DEBUG_ENTRY(
"E_MCL_HTTP_METHOD method = <%d>, string_t *uri = <%p>, mcl_size_t header_size = <%u>, mcl_size_t payload_size = <%u>, mcl_bool_t resize_enabled = <%p>, string_t *user_agent = <%p>, mcl_size_t max_http_payload_size = <%u>, http_request_t **http_request = <%p>",
83 method, uri, header_size, payload_size, &resize_enabled, user_agent, max_http_payload_size, http_request)
91 (*http_request)->resize_enabled = resize_enabled;
92 (*http_request)->boundary =
MCL_NULL;
98 (*http_request)->method = method;
99 (*http_request)->payload_size = payload_size;
100 (*http_request)->payload_offset = 0;
102 (*http_request)->max_http_payload_size = max_http_payload_size;
113 if (0 < payload_size)
115 (*http_request)->payload =
MCL_MALLOC(payload_size);
117 "Memory can not be allocated for the payload of http request.");
133 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, string_t *header_name = <%p>, string_t *header_value = <%p>", http_request, header_name, header_value)
146 header_format =
"%s: %s;boundary=%s;charset=utf-8";
152 header_line_length = header_name->
length + header_value->
length + 2;
153 header_format =
"%s: %s";
174 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, string_t *content_type = <%p>, string_t *content_id = <%p>, string_t *meta_string = <%p>", http_request, content_type,
175 content_id, meta_string)
205 _add_meta(meta_string, http_request, &payload_offset_local);
215 void *user_context,
void *payload,
mcl_size_t payload_size,
string_t *payload_content_type)
217 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, string_t *meta = <%p>, string_t *meta_content_type = <%p>, payload_copy_callback_t payload_copy_callback = <%p>, void *user_context = <%p>, void *payload = <%p>, mcl_size_t payload_size = <%u>, string_t *payload_content_type = <%p>",
218 http_request, meta, meta_content_type, payload_copy_callback, user_context, payload, payload_size, payload_content_type)
260 _add_meta(meta, http_request, &payload_offset_local);
275 _add_payload(http_request, payload_copy_callback, user_context, payload, payload_size, &payload_offset_local);
296 DEBUG_ENTRY(
"http_request_t *http_request = <%p>", http_request)
323 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, string_t *content_type = <%p>, string_t *content_id = <%p>, string_t **sub_boundary = <%p>", http_request, content_type,
324 content_id, sub_boundary)
338 required_empty_size = OVERHEAD_FOR_TUPLE_SUBSECTION_WITH_BOUNDARY_DEFINITION + content_type->
length;
342 required_empty_size = OVERHEAD_FOR_TUPLE_SUBSECTION + content_type->
length;
384 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, string_t **sub_boundary = <%p>", http_request, sub_boundary)
410 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, payload_copy_callback_t copy_callback = <%p>, void *user_context = <%p>, void *data = <%p>, mcl_size_t data_size = <%u>, mcl_size_t *actual_written_size = <%p>",
411 http_request, copy_callback, user_context, data, data_size, actual_written_size)
423 _add_payload(http_request, copy_callback, user_context, (
mcl_uint8_t *)data, data_size, &payload_offset_local);
426 if (
MCL_NULL != actual_written_size)
428 *actual_written_size = payload_offset_local - http_request->
payload_offset;
440 DEBUG_ENTRY(
"http_request_t *http_request = <%p>", http_request)
450 DEBUG_ENTRY(
"http_request_t *http_request = <%p>", http_request)
460 DEBUG_ENTRY(
"http_request_t *http_request = <%p>", http_request)
471 DEBUG_ENTRY(
"http_request_t *http_request = <%p>", http_request)
499 DEBUG_ENTRY(
"http_request_t **http_request = <%p>", http_request)
510 MCL_DEBUG(
"Http request is destroyed successfully.");
514 MCL_DEBUG(
"Http request is already NULL.");
541 DEBUG_ENTRY(
"string_t **boundary = <%p>", boundary)
570 DEBUG_ENTRY(
"mcl_uint8_t *payload = <%p>, mcl_size_t *payload_offset = <%p>, char *boundary = <%s>, E_MCL_BOUNDARY_TYPE boundary_type = <%d>", payload, payload_offset,
571 boundary, boundary_type)
580 boundary_format =
"--%s\r\n";
585 boundary_format =
"--%s--\r\n";
589 return_code =
string_util_snprintf((
char *)&payload[*payload_offset], boundary_line_total_length + MCL_NULL_CHAR_SIZE, boundary_format, boundary);
591 *payload_offset += boundary_line_total_length;
599 DEBUG_ENTRY(
"mcl_size_t required_empty_size = <%u>, http_request_t *http_request = <%p>, mcl_bool_t finalize = <%d>", required_empty_size, http_request, finalize)
617 if (required_empty_size <= max_allowed_available_size)
627 MCL_DEBUG(
"Resizing is disabled. Not shrinking extra payload space.");
642 if (required_empty_size > available_size)
655 if ((new_size <= http_request->max_http_payload_size) && http_request->
resize_enabled)
661 else if ((required_empty_size <= max_allowed_available_size) && http_request->
resize_enabled)
682 DEBUG_ENTRY(
"string_t *meta = <%p>, http_request_t *http_request = <%p>, mcl_size_t *payload_offset = <%p>", meta, http_request, payload_offset)
686 *payload_offset += meta->
length;
697 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, payload_copy_callback_t payload_copy_callback = <%p>, void *user_context = <%p>, mcl_uint8_t *payload = <%p>, mcl_size_t payload_size = <%u>, mcl_size_t *payload_offset = <%p>",
698 http_request, payload_copy_callback, user_context, payload, payload_size, payload_offset)
701 mcl_size_t count = payload_copy_callback(&http_request->
payload[*payload_offset], payload, payload_size, user_context);
704 *payload_offset += count;
710 mcl_size_t content_info_line_length,
char *sub_boundary)
712 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, char *content_info_name = <%s>, char *content_info_value = <%s>, mcl_size_t *payload_offset = <%p>, mcl_size_t content_info_line_length = <%u>, char *sub_boundary = <%s>",
713 http_request, content_info_name, content_info_value, payload_offset, content_info_line_length, sub_boundary)
716 char *content_info_format =
MCL_NULL;
721 content_info_format =
"%s: %s\r\n";
726 content_info_format =
"%s: %s;boundary=%s\r\n";
729 return_code =
string_util_snprintf((
char *)&http_request->
payload[*payload_offset], content_info_line_length + MCL_NULL_CHAR_SIZE, (
const char *)content_info_format,
730 content_info_name, content_info_value, sub_boundary);
732 *payload_offset += content_info_line_length;
740 DEBUG_ENTRY(
"http_request_t *http_request = <%p>, mcl_size_t *payload_offset = <%p>", http_request, payload_offset)
E_MCL_BOUNDARY_TYPE
Open and close boundary types.
static void _add_payload(http_request_t *http_request, payload_copy_callback_t payload_copy_callback, void *user_context, mcl_uint8_t *payload, mcl_size_t payload_size, mcl_size_t *payload_offset)
void string_destroy(string_t **string)
Destroys the allocated resources of the string.
E_MCL_ERROR_CODE string_array_add(string_array_t *array, string_t *string, mcl_bool_t destroy)
Adds an string_t string object into the array.
Memory module header file.
static void _add_meta(string_t *meta, http_request_t *http_request, mcl_size_t *payload_offset)
mcl_size_t OVERHEAD_FOR_TUPLE
string_array_t * header
Header of http request.
mcl_size_t(* payload_copy_callback_t)(void *destination, void *source, mcl_size_t size, void *user_context)
#define CONTENT_ID_HEADER_LENGTH
mcl_size_t OVERHEAD_FOR_TUPLE_SUBSECTION
E_MCL_ERROR_CODE string_initialize_new(const char *value, mcl_size_t value_length, string_t **string)
Initializes a new string_t object with the given value and length.
mcl_uint8_t * payload
Payload of http request.
static E_MCL_ERROR_CODE _add_content_info(http_request_t *http_request, char *content_info_name, char *content_info_value, mcl_size_t *payload_offset, mcl_size_t content_info_line_length, char *sub_boundary)
E_MCL_ERROR_CODE http_request_start_tuple_sub_section(http_request_t *http_request, string_t *content_type, string_t *content_id, string_t **sub_boundary)
To start a sub tuple section inside of the http request body.
char * buffer
Buffer of string handle.
mcl_size_t http_request_get_available_space_for_single(http_request_t *http_request)
To be used to get the available space left in the request buffer in order to add a single...
void string_array_destroy(string_array_t **array)
Destroys the string array handle.
E_MCL_ERROR_CODE http_request_add_raw_data(http_request_t *http_request, payload_copy_callback_t copy_callback, void *user_context, void *data, mcl_size_t data_size, mcl_size_t *actual_written_size)
To add raw data into an http_request.
#define MCL_FALSE
MCL bool type.
char * boundary_characters
#define MCL_MALLOC(bytes)
E_MCL_ERROR_CODE http_request_start_tuple(http_request_t *http_request)
To start a new tuple structure inside the http request body.
Log utility module header file.
static mcl_size_t _get_available_space(http_request_t *http_request, mcl_size_t overhead)
static E_MCL_ERROR_CODE _generate_random_boundary(string_t **boundary)
#define CONTENT_TYPE_HEADER_LENGTH
E_MCL_ERROR_CODE
MCL Error code definitions. Every function returning an error code uses this enum values...
static E_MCL_ERROR_CODE _resize_payload_buffer_if_necessary(mcl_size_t required_empty_size, http_request_t *http_request, mcl_bool_t finalize)
E_MCL_ERROR_CODE http_request_end_tuple_sub_section(http_request_t *http_request, string_t *sub_boundary)
To end a sub tuple section previously started with http_request_start_tuple_sub_section().
mcl_size_t max_http_payload_size
Maximum http payload size of http request.
E_MCL_ERROR_CODE string_util_snprintf(char *string, mcl_size_t length, const char *format,...)
Standard library snprintf wrapper.
#define MCL_RESIZE(p, bytes)
Content type is multipart mixed.
static E_MCL_ERROR_CODE _add_boundary(mcl_uint8_t *payload, mcl_size_t *payload_offset, char *boundary, E_MCL_BOUNDARY_TYPE boundary_type)
Content type is multipart related.
#define ASSERT_STATEMENT_CODE_MESSAGE(condition, statement, return_code,...)
E_MCL_HTTP_METHOD
HTTP Method Types.
There is no more space left in http message buffer. No data has been written in current call...
E_MCL_ERROR_CODE http_request_add_header(http_request_t *http_request, string_t *header_name, string_t *header_value)
To be used to add an HTTP header to the request with it's value.
E_MCL_ERROR_CODE string_compare(const string_t *string, const string_t *other)
Compare the contents of two string_t's.
#define BOUNDARY_LINE_LENGTH
void string_util_memcpy(void *destination, const void *source, mcl_size_t count)
Standard library memcpy wrapper.
string_t content_type_values[CONTENT_TYPE_VALUES_END]
#define ASSERT_CODE_MESSAGE(condition, return_code,...)
string_t http_header_names[HTTP_HEADER_NAMES_END]
E_MCL_ERROR_CODE http_request_finalize(http_request_t *http_request)
Adds closing boundary to the payload and resizes the payload buffer to release unused memory space...
mcl_size_t OVERHEAD_FOR_SINGLE
Definitions module header file.
mcl_size_t http_request_get_available_space_for_tuple(http_request_t *http_request)
To be used to get the available space left in the request buffer in order to add a tuple...
Adding final closing boundary and Authentication header is failed.
Http content type header.
mcl_size_t payload_offset
Payload offset of http request.
E_MCL_ERROR_CODE string_initialize(const string_t *other, string_t **string)
Initializes an string_t object with another one.
E_MCL_ERROR_CODE random_generate_number(mcl_uint32_t *random_number)
Generates random integer number.
mcl_size_t length
Length of buffer.
mcl_size_t OVERHEAD_FOR_TUPLE_SUBSECTION_WITH_BOUNDARY_DEFINITION
HTTP request module header file.
void http_request_destroy(http_request_t **http_request)
To destroy the HTTP Request Handler.
E_MCL_ERROR_CODE string_array_initialize(mcl_size_t count, string_array_t **array)
String array initialize method.
mcl_size_t OVERHEAD_FOR_BOUNDARY
#define BOUNDARY_SIGN_LENGTH
mcl_bool_t resize_enabled
The state or condition of being resizable.
Random module header file.
#define BOUNDARY_CHARACTER_COUNT
E_MCL_ERROR_CODE http_request_add_single(http_request_t *http_request, string_t *content_type, string_t *content_id, string_t *meta_string)
To be used to add a single to the HTTP Request.
string_t * boundary
Boundary of http request.
mcl_size_t http_request_get_available_space_for_raw_data(http_request_t *http_request)
To be used to get the available space left in the request buffer in order to add a raw data...
E_MCL_ERROR_CODE http_request_initialize(E_MCL_HTTP_METHOD method, string_t *uri, mcl_size_t header_size, mcl_size_t payload_size, mcl_bool_t resize_enabled, string_t *user_agent, mcl_size_t max_http_payload_size, http_request_t **http_request)
HTTP Request Initializer.
mcl_size_t payload_size
Payload size of http request.
E_MCL_ERROR_CODE http_request_add_tuple(http_request_t *http_request, string_t *meta, string_t *meta_content_type, payload_copy_callback_t payload_copy_callback, void *user_context, void *payload, mcl_size_t payload_size, string_t *payload_content_type)
To be used to add a tuple to the HTTP Request.
#define MCL_NULL_CHAR_SIZE
#define CONTENT_TYPE_LINE_LENGTH
static void _add_blank_line(http_request_t *http_request, mcl_size_t *payload_offset)
Data types module header file.
#define MCL_ERROR_RETURN(return_value,...)