httpmessage  0.4.0
HTTP message parsing library
header.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_HEADER_H__)
15 #define LIBHTTPMESSAGGE_HEADER_H__
16 
18 #include "httpmessage/text.h"
19 
21 
22 #include <stddef.h>
23 #include <stdio.h>
24 #include <unistd.h>
25 
26 
33 
34 
35 
54  const char **name,
55  size_t *name_length,
56  const char *text,
57  size_t length);
58 
72 typedef struct __httpmessage_headerfield_value
73 {
76 
78  struct __httpmessage_headerfield_value *next_line;
80 
95  int option_flags);
96 
105 
106 
115 
128  const char *text, size_t length);
129 
139 
154  char *output,
155  size_t output_size,
156  const httpmessage_headerfield_value *value);
157 
167 
188  const char **value, size_t *value_length,
189  const char *text, size_t length,
190  int option_flags);
191 
198 typedef struct __httpmessage_headerfield
199 {
205  struct __httpmessage_headerfield *next_field;
206 
208 
209 
218 
227 
236 
245 
246 
259  const char *name);
260 
277  int option_flags);
278 
288 
302  httpmessage_headerfield *headerfield_list,
303  const char *name,
304  size_t name_length);
305 
335  httpmessage_headerfield **field,
336  httpmessage_headerfield *current_header,
337  const char *text, size_t length,
338  int option_flags);
339 
356  FILE *file,
357  const httpmessage_headerfield *field);
358 
376  void *output, size_t output_size,
377  const httpmessage_headerfield *field);
378 
396  httpmessage_headerfield *headerfield_list,
397  const char *text, size_t length,
398  int option_flags);
399 
413  FILE *file,
414  const httpmessage_headerfield *headerfield_list);
415 
433  void *output, size_t output_size,
434  const httpmessage_headerfield *headerfield_list);
435 
436 
437 
439 
440 #endif /* LIBHTTPMESSAGGE_HEADER_H__ */
441 
HMAPI httpmessage_headerfield * httpmessage_headerfield_find(httpmessage_headerfield *headerfield_list, const char *name, size_t name_length)
Find the first header field matching the given field name.
#define HTTPMESSAGE_C_END
End exter C block.
Definition: preprocessor.h:44
HMAPI ssize_t httpmessage_headerfield_write_buffer(void *output, size_t output_size, const httpmessage_headerfield *field)
Write a HTTP header line to a buffer.
HTTP header field value text reference.
Definition: header.h:72
HMAPI size_t httpmessage_headerfield_count(httpmessage_headerfield *headerfield_list)
Get the number of valid headers in the given header list.
HTTPMESSAGE_C_BEGIN typedef httpmessage_stringview httpmessage_headerfield_name
Headef field name text reference.
Definition: header.h:32
Text utility.
HMAPI void httpmessage_headerfield_clear(httpmessage_headerfield *field, int option_flags)
Clear header member to their initial state.
HMAPI ssize_t httpmessage_headerfield_write_file(FILE *file, const httpmessage_headerfield *field)
Write a HTTP header line to a file.
httpmessage_headerfield_name name
Definition: header.h:201
HMAPI size_t httpmessage_headerfield_value_total_length(const httpmessage_headerfield_value *value)
Get the total length of the header value text.
HMAPI ssize_t httpmessage_headerfield_list_write_file(FILE *file, const httpmessage_headerfield *headerfield_list)
Write HTTP headers to a file.
HMAPI int httpmessage_headerfield_value_merge_lines(char *output, size_t output_size, const httpmessage_headerfield_value *value)
Copy the referenced header value lines to a contiguous text buffer.
HTTP header field and value.
Definition: header.h:198
httpmessage_stringview line
Definition: header.h:75
HMAPI void httpmessage_headerfield_free(httpmessage_headerfield **field)
Free header memory.
HMAPI void httpmessage_headerfield_value_free(httpmessage_headerfield_value **value)
Free header value and following lines.
HMAPI int httpmessage_headerfield_value_line_consume(const char **value, size_t *value_length, const char *text, size_t length, int option_flags)
Read header value content until the end of the current line.
HMAPI int httpmessage_headerfield_line_consume(httpmessage_headerfield **field, httpmessage_headerfield *current_header, const char *text, size_t length, int option_flags)
Read header field name and value on a single lineIf the current line starts by a header field name...
HMAPI void httpmessage_headerfield_init(httpmessage_headerfield *field)
Initialize header members.
struct __httpmessage_headerfield_value * next_line
Definition: header.h:78
HMAPI int httpmessage_headerfield_name_consume(const char **name, size_t *name_length, const char *text, size_t length)
Read the header field name.
HMAPI int httpmessage_headerfield_list_consume(httpmessage_headerfield *headerfield_list, const char *text, size_t length, int option_flags)
Parse all headers in the given text.
HMAPI httpmessage_headerfield_value * httpmessage_headerfield_value_append_line(httpmessage_headerfield_value *value, const char *text, size_t length)
Append a new line of data to the given header value.
HMAPI httpmessage_headerfield_value * httpmessage_headerfield_value_new(void)
Allocate and initialize a new header value.
httpmessage_headerfield_value value
Definition: header.h:203
Preprocessor macro definitions.
HMAPI httpmessage_headerfield * httpmessage_headerfield_new(void)
Allocate and initialize a new header object.
#define HTTPMESSAGE_C_BEGIN
Begin extern C block.
Definition: preprocessor.h:40
HMAPI void httpmessage_headerfield_value_clear(httpmessage_headerfield_value *value, int option_flags)
Initialize a header field value.
struct __httpmessage_headerfield * next_field
Definition: header.h:205
HMAPI ssize_t httpmessage_headerfield_list_write_buffer(void *output, size_t output_size, const httpmessage_headerfield *headerfield_list)
Write a list of HTTP header to a buffer.
Reference to a text buffer.
Definition: text.h:27
#define HMAPI
C API exposition macro.
Definition: preprocessor.h:23
HMAPI void httpmessage_headerfield_value_init(httpmessage_headerfield_value *value)
Initialize a header value.
HMAPI int httpmessage_headerfield_is(const httpmessage_headerfield *field, const char *name)
Indicates if the given header field name match the expected name.