httpmessage  0.4.0
HTTP message parsing library
message.h
Go to the documentation of this file.
1 /**************************************************************************************$
2  * httpmessage
3  ***************************************************************************************
4  * Copyright © 2022 by Renaud Guillard (dev@nore.fr)
5  * Distributed under the terms of the MIT License, see LICENSE
6  ***************************************************************************************
7  */
8 
14 #if !defined (LIBHTTPMESSAGGE_MESSAGE_H__)
15 #define LIBHTTPMESSAGGE_MESSAGE_H__
16 
17 #include "httpmessage/header.h"
19 
21 
28 
36 typedef struct __httpmessage_message
37 {
43  int type;
48 
49  HTTPMESSAGE_PAD64(__padding, 4)
52  httpmessage_headerfield field_list;
56 
65 
78  httpmessage_message *message,
79  int option_flags);
80 
95  httpmessage_message *message,
96  const char *name, const char *value,
97  int option_flags);
98 
114  size_t *max_headerfield_count,
115  size_t *max_line_per_value,
116  const httpmessage_message *message);
117 
127 typedef struct __httpmessage_request
128 {
131 
134 
137 
139 
148 
157 
170  httpmessage_request *request,
171  int option_flags);
172 
180 
198  size_t max_headerfield_count,
199  size_t max_line_per_headerfield_value);
200 
210 typedef struct __httpmessage_response
211 {
214 
217 
218  HTTPMESSAGE_PAD64(__padding, 4)
221  httpmessage_stringview reason_phrase;
223 
232 
241 
254  httpmessage_response *response,
255  int option_flags
256 );
257 
266 
284  size_t max_headerfield_count,
285  size_t max_line_per_headerfield_value);
286 
308  int *major_version,
309  int *minor_version,
310  const char *text, size_t length);
311 
334  httpmessage_stringview *request_uri,
335  const char *text, size_t length);
336 
364  httpmessage_stringview *method,
365  httpmessage_stringview *request_uri,
366  int *major_version,
367  int *minor_version,
368  const char *text, size_t length,
369  int option_flags);
370 
397  int *major_version,
398  int *minor_version,
399  int *status_code,
400  httpmessage_stringview *reason_phrase,
401  const char *text,
402  size_t length,
403  int option_flags);
404 
423  const char *text, size_t length,
424  int option_flags);
425 
443  httpmessage_message *message,
444  const char *text, size_t length,
445  int option_flags);
446 
461  FILE *file,
462  const httpmessage_message *message);
463 
482  void *output, size_t output_size,
483  const httpmessage_message *message);
484 
502  httpmessage_request *request,
503  const char *text, size_t length,
504  int option_flags);
505 
520  FILE *file,
521  const httpmessage_request *request);
522 
539  void *output, size_t output_size,
540  const httpmessage_request *request);
541 
542 
560  httpmessage_response *response,
561  const char *text, size_t length,
562  int option_flags);
563 
577  FILE *file,
578  const httpmessage_response *response);
579 
597  void *output, size_t output_size,
598  const httpmessage_response *response);
599 
601 
602 #endif /* LIBHTTPMESSAGGE_MESSAGE_H__ */
603 
HMAPI void httpmessage_response_clear(httpmessage_response *response, int option_flags)
Clear response message.
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.
HTTP header parsing and manipulation.
int minor_version
Definition: message.h:47
#define HTTPMESSAGE_C_END
End exter C block.
Definition: preprocessor.h:44
HTTP request message.
Definition: message.h:127
int status_code
Definition: message.h:216
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.
httpmessage_stringview request_uri
Definition: message.h:136
HMAPI httpmessage_request * httpmessage_request_new()
Allocate and initialize a new request.
HMAPI int httpmessage_message_content_consume(httpmessage_message *message, const char *text, size_t length, int option_flags)
Read HTTP message headers and body.
HTTP generic message.
Definition: message.h:36
HMAPI ssize_t httpmessage_response_write_file(FILE *file, const httpmessage_response *response)
Write a HTTP response to a file.
HMAPI void httpmessage_response_init(httpmessage_response *response)
Initialize a HTTP response descriptor.
HMAPI void httpmessage_request_init(httpmessage_request *request)
Initialize a HTTP request descriptor.
HTTP header field and value.
Definition: header.h:198
HTTP response message.
Definition: message.h:210
httpmessage_message message
Definition: message.h:213
HMAPI int httpmessage_message_http_version_consume(int *major_version, int *minor_version, const char *text, size_t length)
Read HTTP version token.
HMAPI void httpmessage_request_free(httpmessage_request **request)
Clear and free a request allocated with httpmessage_request_new()
HMAPI int httpmessage_response_consume(httpmessage_response *response, const char *text, size_t length, int option_flags)
Read a HTTP response message.
HTTPMESSAGE_C_BEGIN typedef httpmessage_stringview httpmessage_body
HTTP message body.
Definition: message.h:27
int major_version
Definition: message.h:45
HMAPI ssize_t httpmessage_request_write_file(FILE *file, const httpmessage_request *request)
Write a HTTP request message to a file.
HMAPI ssize_t httpmessage_message_content_write_file(FILE *file, const httpmessage_message *message)
Write message header and body to a file.
httpmessage_stringview method
Definition: message.h:133
HMAPI void httpmessage_response_free(httpmessage_response **response)
Clear and free a response allocated with httpmessage_response_new()
int type
Message type.
Definition: message.h:43
HMAPI httpmessage_response * httpmessage_response_new()
Allocate and initialize a new response.
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...
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.
HMAPI void httpmessage_message_init(httpmessage_message *message)
Initialize a HTTP message descriptor.
Preprocessor macro definitions.
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...
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.
HMAPI int httpmessage_request_consume(httpmessage_request *request, const char *text, size_t length, int option_flags)
Read a HTTP request message.
#define HTTPMESSAGE_C_BEGIN
Begin extern C block.
Definition: preprocessor.h:40
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.
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.
HMAPI ssize_t httpmessage_response_write_buffer(void *output, size_t output_size, const httpmessage_response *response)
Write a HTTP response to a buffer.
HMAPI void httpmessage_message_clear(httpmessage_message *message, int option_flags)
Clear message.
HMAPI void httpmessage_request_clear(httpmessage_request *request, int option_flags)
Clear request message content.
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.
Reference to a text buffer.
Definition: text.h:27
#define HMAPI
C API exposition macro.
Definition: preprocessor.h:23
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.
httpmessage_message message
Definition: message.h:130