diff options
Diffstat (limited to 'include/fhp')
-rw-r--r-- | include/fhp/fhp.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/include/fhp/fhp.h b/include/fhp/fhp.h new file mode 100644 index 0000000..4a54e3c --- /dev/null +++ b/include/fhp/fhp.h @@ -0,0 +1,97 @@ +#ifndef FHP_H_ +#define FHP_H + +#include <stdint.h> // for uint8_t +#include <stddef.h> // for size_t +#include <stdbool.h> // for size_t + +typedef enum { + FHP_TOKEN_METHOD_START, + FHP_TOKEN_METHOD_FRAGMENT, + FHP_TOKEN_METHOD_END, + + FHP_TOKEN_URL_START, + FHP_TOKEN_URL_FRAGMENT, + FHP_TOKEN_URL_END, + + FHP_TOKEN_VERSION_START, + FHP_TOKEN_VERSION_FRAGMENT, + FHP_TOKEN_VERSION_END, + + FHP_TOKEN_HEADER_NAME_START, + FHP_TOKEN_HEADER_NAME_FRAGMENT, + FHP_TOKEN_HEADER_NAME_END, + + FHP_TOKEN_HEADER_VALUE_START, + FHP_TOKEN_HEADER_VALUE_FRAGMENT, + FHP_TOKEN_HEADER_VALUE_END, + + FHP_TOKEN_LAST +} fhp_token_t; + +typedef struct fhp_t_ fhp_t; + +typedef bool (*fhp_cb_t)( + fhp_t * const, + fhp_token_t, + uint8_t * const, + size_t +); + +typedef enum { + FHP_STATE_INIT, + FHP_STATE_ERROR, + FHP_STATE_METHOD, + FHP_STATE_METHOD_END, + FHP_STATE_URL, + FHP_STATE_URL_END, + FHP_STATE_VERSION, + FHP_STATE_VERSION_END, + FHP_STATE_VERSION_END_CR, + FHP_STATE_STATUS_END, + FHP_STATE_STATUS_END_CR, + FHP_STATE_HEADER_NAME, + FHP_STATE_HEADER_NAME_END, + FHP_STATE_HEADER_NAME_END_CR, + FHP_STATE_HEADER_VALUE, + FHP_STATE_HEADER_VALUE_END_CR, + FHP_STATE_HEADER_VALUE_END, + FHP_STATE_HEADERS_END, + FHP_STATE_HEADERS_END_CR, + FHP_STATE_LAST +} fhp_state_t; + +typedef enum { + FHP_OK, + FHP_ERR_CB, + FHP_ERR_BAD_STATE, + FHP_ERR_INVALID_CHAR, + FHP_ERR_INVALID_ERROR, + FHP_ERR_BUFFER_TOO_SMALL, + FHP_ERR_LAST +} fhp_err_t; + +fhp_err_t +fhp_strerror(fhp_err_t, char * const, size_t); + +#define FHP_BUF_SIZE 1024 + +struct fhp_t_ { + fhp_state_t state; + fhp_cb_t cb; + uint64_t ofs; + fhp_err_t err; + + void *user_data; + + uint8_t buf[FHP_BUF_SIZE]; + size_t buf_len; +}; + +fhp_err_t +fhp_init(fhp_t * const, fhp_cb_t, void * const); + +fhp_err_t +fhp_push(fhp_t * const, uint8_t * const, size_t); + +#endif /* FHP_H */ |