httpmessage  0.4.0
HTTP message parsing library
Classes | Enumerations | Functions | Variables
HTTP messages

Classes

struct  httpmessage_message
 HTTP generic message. More...
 
struct  httpmessage_request
 HTTP request message. More...
 
struct  httpmessage_response
 HTTP response message. More...
 

Enumerations

enum  httpmessage_message_type { HTTPMESSAGE_TYPE_UNKNOWN = -1, HTTPMESSAGE_TYPE_REQUEST = 'q', HTTPMESSAGE_TYPE_RESPONSE = 'r' }
 HTTP message type. More...
 

Functions

HMAPI void httpmessage_message_init (httpmessage_message *message)
 Initialize a HTTP message descriptor. More...
 
HMAPI void httpmessage_message_clear (httpmessage_message *message, int option_flags)
 Clear message. More...
 
HMAPI int httpmessage_message_append_header (httpmessage_message *message, const char *name, const char *value, int option_flags)
 Append a header to the given message. More...
 
HMAPI int httpmessage_message_get_storage_infos (size_t *max_headerfield_count, size_t *max_line_per_value, const httpmessage_message *message)
 Get message storage capabilities. More...
 
HMAPI httpmessage_requesthttpmessage_request_new ()
 Allocate and initialize a new request. More...
 
HMAPI void httpmessage_request_init (httpmessage_request *request)
 Initialize a HTTP request descriptor. More...
 
HMAPI void httpmessage_request_clear (httpmessage_request *request, int option_flags)
 Clear request message content. More...
 
HMAPI void httpmessage_request_free (httpmessage_request **request)
 Clear and free a request allocated with httpmessage_request_new() More...
 
HMAPI httpmessage_requesthttpmessage_request_storage_new (size_t max_headerfield_count, size_t max_line_per_headerfield_value)
 Create a request message with pre-allocated header field storage in a single memory block. More...
 
HMAPI httpmessage_responsehttpmessage_response_new ()
 Allocate and initialize a new response. More...
 
HMAPI void httpmessage_response_init (httpmessage_response *response)
 Initialize a HTTP response descriptor. More...
 
HMAPI void httpmessage_response_clear (httpmessage_response *response, int option_flags)
 Clear response message. More...
 
HMAPI void httpmessage_response_free (httpmessage_response **response)
 Clear and free a response allocated with httpmessage_response_new() More...
 
HMAPI httpmessage_responsehttpmessage_response_storage_new (size_t max_headerfield_count, size_t max_line_per_headerfield_value)
 Create a response message with pre-allocated header field storage in a single memory block. More...
 
HMAPI int httpmessage_message_http_version_consume (int *major_version, int *minor_version, const char *text, size_t length)
 Read HTTP version token. More...
 
HMAPI int httpmessage_request_request_uri_consume (httpmessage_stringview *request_uri, const char *text, size_t length)
 Read the Request-URI resourcce of a request line. More...
 
HMAPI int httpmessage_request_line_consume (httpmessage_stringview *method, httpmessage_stringview *request_uri, int *major_version, int *minor_version, const char *text, size_t length, int option_flags)
 Read the first line of a HTTP request message. More...
 
HMAPI int httpmessage_status_line_consume (int *major_version, int *minor_version, int *status_code, httpmessage_stringview *reason_phrase, const char *text, size_t length, int option_flags)
 Read HTTM message status line. More...
 
HMAPI int httpmessage_message_get_type (const char *text, size_t length, int option_flags)
 Guess HTTP message type by parsing the first line of the message. More...
 
HMAPI int httpmessage_message_content_consume (httpmessage_message *message, const char *text, size_t length, int option_flags)
 Read HTTP message headers and body. More...
 
HMAPI ssize_t httpmessage_message_content_write_file (FILE *file, const httpmessage_message *message)
 Write message header and body to a file. More...
 
HMAPI ssize_t httpmessage_message_content_write_buffer (void *output, size_t output_size, const httpmessage_message *message)
 Write message header and body to a buffer. More...
 
HMAPI int httpmessage_request_consume (httpmessage_request *request, const char *text, size_t length, int option_flags)
 Read a HTTP request message. More...
 
HMAPI ssize_t httpmessage_request_write_file (FILE *file, const httpmessage_request *request)
 Write a HTTP request message to a file. More...
 
HMAPI ssize_t httpmessage_request_write_buffer (void *output, size_t output_size, const httpmessage_request *request)
 Write a HTTP request message to a buffer. More...
 
HMAPI int httpmessage_response_consume (httpmessage_response *response, const char *text, size_t length, int option_flags)
 Read a HTTP response message. More...
 
HMAPI ssize_t httpmessage_response_write_file (FILE *file, const httpmessage_response *response)
 Write a HTTP response to a file. More...
 
HMAPI ssize_t httpmessage_response_write_buffer (void *output, size_t output_size, const httpmessage_response *response)
 Write a HTTP response to a buffer. More...
 

Variables

HTTPMESSAGE_C_BEGIN typedef httpmessage_stringview httpmessage_body
 HTTP message body.
 

Detailed Description

Enumeration Type Documentation

◆ httpmessage_message_type

HTTP message type.

See also
https://datatracker.ietf.org/doc/html/rfc2616#section-4
Enumerator
HTTPMESSAGE_TYPE_UNKNOWN 

Unknown message type

HTTPMESSAGE_TYPE_REQUEST 

HTTP request message

HTTPMESSAGE_TYPE_RESPONSE 

HTTP response message

Function Documentation

◆ httpmessage_message_append_header()

HMAPI int httpmessage_message_append_header ( httpmessage_message message,
const char *  name,
const char *  value,
int  option_flags 
)

Append a header to the given message.

Parameters
messageMessage to add the header to.
nameHeader field name
valueHeader value
option_flagsOption flags. Supported flags are
Returns
HTTPMESSAGE_OK on success. One of httpmessage_result_code error codes on error.
Examples:
request_write_buffer.c.

◆ httpmessage_message_clear()

HMAPI void httpmessage_message_clear ( httpmessage_message message,
int  option_flags 
)

Clear message.

Parameters
messageMessage instance
option_flagsOption flags. Supported flags are
See also
httpmessage_option_flags

◆ httpmessage_message_content_consume()

HMAPI int httpmessage_message_content_consume ( httpmessage_message message,
const char *  text,
size_t  length,
int  option_flags 
)

Read HTTP message headers and body.

Parameters
messageOutput message descriptor
textInput text
lengthInput text length
option_flagsOption flags. Supported flags are
Returns
On success, number of bytes consumed in text. On error, one of httpmessage_result_code
See also
httpmessage_result_code
httpmessage_option_flags

◆ httpmessage_message_content_write_buffer()

HMAPI ssize_t httpmessage_message_content_write_buffer ( void *  output,
size_t  output_size,
const httpmessage_message message 
)

Write message header and body to a buffer.

Parameters
outputOutput buffer
output_sizeOutput buffer size
messageMessage to write
Attention
NULL termination character may not be written at end of string if the buffer is too small.
Returns
On success, the number of bytes written (excludint the null-termination character). On error, one of httpmessage_result_type
See also
httpmessage_result_code

◆ httpmessage_message_content_write_file()

HMAPI ssize_t httpmessage_message_content_write_file ( FILE *  file,
const httpmessage_message message 
)

Write message header and body to a file.

Parameters
fileOutput file descriptor
messageHTTP message content to write
Returns
On success, the number of bytes written. On error, one of httpmessage_result_type
See also
httpmessage_result_code

◆ httpmessage_message_get_storage_infos()

HMAPI int httpmessage_message_get_storage_infos ( size_t *  max_headerfield_count,
size_t *  max_line_per_value,
const httpmessage_message message 
)

Get message storage capabilities.

Parameters
max_headerfield_countThis argument will be filled with the number of header structure allocated in storage.
max_line_per_valueThis argument will be filled with the maximum number of header field value lines per value that can be used in this storage.
messageMessage storage to inspect. If the storage was allocated with httpmessage_request_storage_new or httpmessage_response_storage_new, the returned value is valid for any header of the storage. Otherwise, some header fields may have a lower line count.
Returns
HTTPMESSAGE_OK or HTTPMESSAGE_ERROR_INVALID_ARGUMENT

◆ httpmessage_message_get_type()

HMAPI int httpmessage_message_get_type ( const char *  text,
size_t  length,
int  option_flags 
)

Guess HTTP message type by parsing the first line of the message.

Parameters
textInput text
lengthInput length
option_flagsOption flags. Supported flags are
Returns
One of httpmessage_message_type values
See also
httpmessage_message_type
httpmessage_option_flags
Examples:
detect-and-parse.c.

◆ httpmessage_message_http_version_consume()

HMAPI int httpmessage_message_http_version_consume ( int *  major_version,
int *  minor_version,
const char *  text,
size_t  length 
)

Read HTTP version token.

HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT
See also
https://datatracker.ietf.org/doc/html/rfc2616#section-3.1
Parameters
major_versionOutput major version
minor_versionOutput minor version
textInput text
lengthInput text lengh
Returns
On success, number of bytes consumed in text. On error, one of httpmessage_result_code
See also
httpmessage_result_code

◆ httpmessage_message_init()

HMAPI void httpmessage_message_init ( httpmessage_message message)

Initialize a HTTP message descriptor.

Parameters
messageMessage descriptor instance

◆ httpmessage_request_clear()

HMAPI void httpmessage_request_clear ( httpmessage_request request,
int  option_flags 
)

Clear request message content.

Parameters
requestRequest to clear.
option_flagsOption flags. Supported flags are
See also
httpmessage_option_flags
Examples:
request_write_buffer.c.

◆ httpmessage_request_consume()

HMAPI int httpmessage_request_consume ( httpmessage_request request,
const char *  text,
size_t  length,
int  option_flags 
)

Read a HTTP request message.

Parameters
requestOutput request
textInput text
lengthInput text length
option_flagsOption flags. Supported flags are
Returns
On success, number of bytes consumed in text. On error, one of httpmessage_result_code
See also
httpmessage_result_code
httpmessage_option_flags
Examples:
detect-and-parse.c, and storage.c.

◆ httpmessage_request_free()

HMAPI void httpmessage_request_free ( httpmessage_request **  request)

Clear and free a request allocated with httpmessage_request_new()

Parameters
requestRequest to free

◆ httpmessage_request_init()

HMAPI void httpmessage_request_init ( httpmessage_request request)

Initialize a HTTP request descriptor.

Parameters
requestRequest descriptor instance
Examples:
detect-and-parse.c, and request_write_buffer.c.

◆ httpmessage_request_line_consume()

HMAPI int httpmessage_request_line_consume ( httpmessage_stringview method,
httpmessage_stringview request_uri,
int *  major_version,
int *  minor_version,
const char *  text,
size_t  length,
int  option_flags 
)

Read the first line of a HTTP request message.

Request-Line = Method SP Request-URI SP HTTP-Version CRLF
See also
https://datatracker.ietf.org/doc/html/rfc2616#section-5.1
Parameters
methodOutput request method
request_uriOutput request URI
major_versionOutput HTTP majour version
minor_versionOutput HTTP minor version
textInput text
lengthInput text length
option_flagsOption flags. Supported flags are
Returns
On success, number of bytes consumed in text. On error, on of httpmessage_reult_code.
See also
httpmessage_result_code
httpmessage_option_flags

◆ httpmessage_request_new()

HMAPI httpmessage_request* httpmessage_request_new ( )

Allocate and initialize a new request.

Returns
The new request or NULL on error.

◆ httpmessage_request_request_uri_consume()

HMAPI int httpmessage_request_request_uri_consume ( httpmessage_stringview request_uri,
const char *  text,
size_t  length 
)

Read the Request-URI resourcce of a request line.

Request-URI = "*" | absoluteURI | abs_path | authority
See also
https://datatracker.ietf.org/doc/html/rfc2616#section-5.1.2
Parameters
request_uriOutput string view
textInput text
lengthInput text length
Returns
On success, number of bytes consumed in text. On error, on of httpmessage_result_code.
See also
https://datatracker.ietf.org/doc/html/rfc2616#section-5.1.2
Todo:
Better URI parsing
See also
httpmessage_result_code

◆ httpmessage_request_storage_new()

HMAPI httpmessage_request* httpmessage_request_storage_new ( size_t  max_headerfield_count,
size_t  max_line_per_headerfield_value 
)

Create a request message with pre-allocated header field storage in a single memory block.

Parameters
max_headerfield_countNumber of header field to allocated
max_line_per_headerfield_valueNumber of header field value line to allocate for each header field.
Returns
A request with pre-allocated header fields.
Attention
NEVER call httpmessage_request_init() on the returned object. This will reset the maximum number of header field and value line to 1.
Use free() to release the object allocated with this function.
ALWAYS set HTTPMESSAGE_CLEAR_NO_FREE and HTTPMESSAGE_NO_ALLOCATION whenusing this object with *_consume or *_clear() functions
Examples:
storage.c.

◆ httpmessage_request_write_buffer()

HMAPI ssize_t httpmessage_request_write_buffer ( void *  output,
size_t  output_size,
const httpmessage_request request 
)

Write a HTTP request message to a buffer.

Parameters
outputOutput buffer
output_sizeOutput buffer size
requestRequest to write
Attention
NULL termination character may not be written at end of string if the buffer is too small.
Returns
On success, the number of bytes written (excludint the null-termination character). On error, one of httpmessage_result_type
See also
httpmessage_result_code
Examples:
request_write_buffer.c.

◆ httpmessage_request_write_file()

HMAPI ssize_t httpmessage_request_write_file ( FILE *  file,
const httpmessage_request request 
)

Write a HTTP request message to a file.

Parameters
fileOutput file
requestRequest to write
Returns
On success, the number of bytes written (excludint the null-termination character). On error, one of httpmessage_result_type
See also
httpmessage_result_code

◆ httpmessage_response_clear()

HMAPI void httpmessage_response_clear ( httpmessage_response response,
int  option_flags 
)

Clear response message.

Parameters
responseResponse to clear.
option_flagsOption flags. Supported flags are
See also
httpmessage_option_flags

◆ httpmessage_response_consume()

HMAPI int httpmessage_response_consume ( httpmessage_response response,
const char *  text,
size_t  length,
int  option_flags 
)

Read a HTTP response message.

Parameters
responseOutput request
textInput text
lengthInput text length
option_flagsOption flags. Supported flags are
Returns
On success, number of bytes consumed in text. On error, one of httpmessage_result_code
See also
httpmessage_result_code
httpmessage_option_flags

◆ httpmessage_response_free()

HMAPI void httpmessage_response_free ( httpmessage_response **  response)

Clear and free a response allocated with httpmessage_response_new()

Parameters
responseResponse to free

◆ httpmessage_response_init()

HMAPI void httpmessage_response_init ( httpmessage_response response)

Initialize a HTTP response descriptor.

Parameters
responseResponse descriptor instance

◆ httpmessage_response_new()

HMAPI httpmessage_response* httpmessage_response_new ( )

Allocate and initialize a new response.

Returns
The new response or NULL on error.

◆ httpmessage_response_storage_new()

HMAPI httpmessage_response* httpmessage_response_storage_new ( size_t  max_headerfield_count,
size_t  max_line_per_headerfield_value 
)

Create a response message with pre-allocated header field storage in a single memory block.

Parameters
max_headerfield_countNumber of header field to allocated
max_line_per_headerfield_valueNumber of header field value line to allocate for each header field.
Returns
A response with pre-allocated header fields.
Attention
NEVER call httpmessage_response_init() on the returned object. This will reset the maximum number of header field and value line to 1.
Use free() to release the object allocated with this function.
ALWAYS set HTTPMESSAGE_CLEAR_NO_FREE and HTTPMESSAGE_NO_ALLOCATION whenusing this object with *_consume or *_clear() functions

◆ httpmessage_response_write_buffer()

HMAPI ssize_t httpmessage_response_write_buffer ( void *  output,
size_t  output_size,
const httpmessage_response response 
)

Write a HTTP response to a buffer.

Parameters
outputOutput buffer
output_sizeOutput buffer size
responseResponse to write
Attention
NULL termination character may not be written at end of string if the buffer is too small.
Returns
On success, the number of bytes written (excludint the null-termination character). On error, one of httpmessage_result_type
See also
httpmessage_result_code

◆ httpmessage_response_write_file()

HMAPI ssize_t httpmessage_response_write_file ( FILE *  file,
const httpmessage_response response 
)

Write a HTTP response to a file.

Parameters
fileOutput file.
responseResponse to write
Returns
On success, the number of bytes written (excludint the null-termination character). On error, one of httpmessage_result_type
See also
httpmessage_result_code

◆ httpmessage_status_line_consume()

HMAPI int httpmessage_status_line_consume ( int *  major_version,
int *  minor_version,
int *  status_code,
httpmessage_stringview reason_phrase,
const char *  text,
size_t  length,
int  option_flags 
)

Read HTTM message status line.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
See also
https://datatracker.ietf.org/doc/html/rfc2616#section-6.1
Parameters
major_versionOutput major version
minor_versionOutput minor version
status_codeOutput status code
reason_phraseOutput response phrase
textInput text
lengthInput text length
option_flagsOption flags. Supported flags are
Returns
On success, number of bytes consumed in text. On error one of httpmessage_result_code
See also
httpmessage_result_code
httpmessage_option_flags