libonion
|
#include <string.h>
#include <stdlib.h>
#include <libgen.h>
#include <fcntl.h>
#include <unistd.h>
#include <assert.h>
#include "dict.h"
#include "request.h"
#include "types_internal.h"
#include "codecs.h"
#include "log.h"
#include "block.h"
#include "low.h"
#include "ptr_list.h"
#include "utils.h"
Data Structures | |
struct | onion_token_s |
struct | onion_buffer_s |
struct | onion_multipart_buffer_s |
This struct is mapped at token->extra. The token, _start and data are maped to token->extra area too. |
Typedefs | |
typedef struct onion_token_s | onion_token |
typedef struct onion_buffer_s | onion_buffer |
typedef struct onion_multipart_buffer_s | onion_multipart_buffer |
This struct is mapped at token->extra. The token, _start and data are maped to token->extra area too. |
Functions | |
int | token_read_STRING (onion_token *token, onion_buffer *data) |
Reads a string until a non-string char. Returns an onion_token. | |
int | token_read_until (onion_token *token, onion_buffer *data, char delimiter) |
Reads a string until a delimiter is found. Returns an onion_token. Also detects an empty line. | |
int | token_read_KEY (onion_token *token, onion_buffer *data) |
Reads a key, that is a string ended with ':'. | |
int | token_read_LINE (onion_token *token, onion_buffer *data) |
Reads a string until a ' | ' is found. Returns an onion_token. | |
int | token_read_URLENCODE (onion_token *token, onion_buffer *data) |
Reads a string until a ' | ' is found. Returns an onion_token. | |
int | token_read_MULTIPART_BOUNDARY (onion_token *token, onion_buffer *data) |
Reads as much as possible from the boundary. | |
int | token_read_MULTIPART_next (onion_token *token, onion_buffer *data) |
Reads as much as possible from the boundary. | |
int | token_read_NEW_LINE (onion_token *token, onion_buffer *data) |
onion_connection_status | onion_request_write (onion_request *req, const char *data, size_t size) |
Write some data into the request, and passes it line by line to onion_request_fill. | |
void | onion_request_parser_data_free (void *t) |
Frees the parser data. |
typedef struct onion_buffer_s onion_buffer |
typedef struct onion_multipart_buffer_s onion_multipart_buffer |
This struct is mapped at token->extra. The token, _start and data are maped to token->extra area too.
This is a bit juggling with pointers, but needed to keep the deallocation simple, and the token object minimal in most cases.
token->pos is the pointer to the free area and token->extra_size is the real size.
typedef struct onion_token_s onion_token |
void onion_request_parser_data_free | ( | void * | t | ) |
Frees the parser data.
References ONION_DEBUG0, and onion_low_free().
Referenced by onion_request_t::onion_request_clean(), and onion_request_t::onion_request_free().
onion_connection_status onion_request_write | ( | onion_request * | req, |
const char * | data, | ||
size_t | size | ||
) |
Write some data into the request, and passes it line by line to onion_request_fill.
Reads some data from the input (net, file...) and performs the onion_request_fill.
It features a state machine, from req->parse_state.
Depending on the state input is redirected to a diferent parser, one for headers, POST url encoded data...
References OCS_INTERNAL_ERROR, OCS_NEED_MORE_DATA, onion_low_calloc(), onion_request_t::parser, and onion_request_t::parser_data.
Referenced by onion_http_t::onion_http_read_ready().
int token_read_KEY | ( | onion_token * | token, |
onion_buffer * | data | ||
) |
Reads a key, that is a string ended with ':'.
References KEY, OCS_INTERNAL_ERROR, ONION_ERROR, STRING, STRING_NEW_LINE, and token_read_until().
int token_read_LINE | ( | onion_token * | token, |
onion_buffer * | data | ||
) |
Reads a string until a '
|
' is found. Returns an onion_token.
References LINE, OCS_NEED_MORE_DATA, ONION_DEBUG, and ONION_WARNING.
int token_read_MULTIPART_BOUNDARY | ( | onion_token * | token, |
onion_buffer * | data | ||
) |
Reads as much as possible from the boundary.
References MULTIPART_BOUNDARY, OCS_INTERNAL_ERROR, OCS_NEED_MORE_DATA, and ONION_ERROR.
int token_read_MULTIPART_next | ( | onion_token * | token, |
onion_buffer * | data | ||
) |
Reads as much as possible from the boundary.
References MULTIPART_END, MULTIPART_NEXT, OCS_INTERNAL_ERROR, and OCS_NEED_MORE_DATA.
int token_read_NEW_LINE | ( | onion_token * | token, |
onion_buffer * | data | ||
) |
References NEW_LINE, OCS_INTERNAL_ERROR, and OCS_NEED_MORE_DATA.
int token_read_STRING | ( | onion_token * | token, |
onion_buffer * | data | ||
) |
Reads a string until a non-string char. Returns an onion_token.
References OCS_INTERNAL_ERROR, OCS_NEED_MORE_DATA, ONION_ERROR, STRING, and STRING_NEW_LINE.
int token_read_until | ( | onion_token * | token, |
onion_buffer * | data, | ||
char | delimiter | ||
) |
Reads a string until a delimiter is found. Returns an onion_token. Also detects an empty line.
STRING is a delimited string, string new line is that the string finished witha new line, new line is that I fuond only a new line char.
References NEW_LINE, OCS_INTERNAL_ERROR, OCS_NEED_MORE_DATA, ONION_ERROR, STRING, and STRING_NEW_LINE.
Referenced by token_read_KEY().
int token_read_URLENCODE | ( | onion_token * | token, |
onion_buffer * | data | ||
) |
Reads a string until a '
|
' is found. Returns an onion_token.
References OCS_NEED_MORE_DATA, and URLENCODE.