from libc.stdint cimport int32_t, uint8_t, uint16_t, uint64_t cdef extern from "llhttp.h": struct llhttp__internal_s: int32_t _index void *_span_pos0 void *_span_cb0 int32_t error const char *reason const char *error_pos void *data void *_current uint64_t content_length uint8_t type uint8_t method uint8_t http_major uint8_t http_minor uint8_t header_state uint16_t flags uint8_t upgrade uint16_t status_code uint8_t finish void *settings ctypedef llhttp__internal_s llhttp__internal_t ctypedef llhttp__internal_t llhttp_t ctypedef int (*llhttp_data_cb) (llhttp_t*, const char *at, size_t length) except -1 ctypedef int (*llhttp_cb) (llhttp_t*) except -1 struct llhttp_settings_s: llhttp_cb on_message_begin llhttp_data_cb on_url llhttp_data_cb on_status llhttp_data_cb on_header_field llhttp_data_cb on_header_value llhttp_cb on_headers_complete llhttp_data_cb on_body llhttp_cb on_message_complete llhttp_cb on_chunk_header llhttp_cb on_chunk_complete ctypedef llhttp_settings_s llhttp_settings_t enum llhttp_type: HTTP_BOTH, HTTP_REQUEST, HTTP_RESPONSE ctypedef llhttp_type llhttp_type_t enum llhttp_errno: HPE_OK, HPE_INTERNAL, HPE_STRICT, HPE_LF_EXPECTED, HPE_UNEXPECTED_CONTENT_LENGTH, HPE_CLOSED_CONNECTION, HPE_INVALID_METHOD, HPE_INVALID_URL, HPE_INVALID_CONSTANT, HPE_INVALID_VERSION, HPE_INVALID_HEADER_TOKEN, HPE_INVALID_CONTENT_LENGTH, HPE_INVALID_CHUNK_SIZE, HPE_INVALID_STATUS, HPE_INVALID_EOF_STATE, HPE_INVALID_TRANSFER_ENCODING, HPE_CB_MESSAGE_BEGIN, HPE_CB_HEADERS_COMPLETE, HPE_CB_MESSAGE_COMPLETE, HPE_CB_CHUNK_HEADER, HPE_CB_CHUNK_COMPLETE, HPE_PAUSED, HPE_PAUSED_UPGRADE, HPE_USER ctypedef llhttp_errno llhttp_errno_t enum llhttp_flags: F_CONNECTION_KEEP_ALIVE, F_CONNECTION_CLOSE, F_CONNECTION_UPGRADE, F_CHUNKED, F_UPGRADE, F_CONTENT_LENGTH, F_SKIPBODY, F_TRAILING, F_LENIENT, F_TRANSFER_ENCODING ctypedef llhttp_flags llhttp_flags_t enum llhttp_method: HTTP_DELETE, HTTP_GET, HTTP_HEAD, HTTP_POST, HTTP_PUT, HTTP_CONNECT, HTTP_OPTIONS, HTTP_TRACE, HTTP_COPY, HTTP_LOCK, HTTP_MKCOL, HTTP_MOVE, HTTP_PROPFIND, HTTP_PROPPATCH, HTTP_SEARCH, HTTP_UNLOCK, HTTP_BIND, HTTP_REBIND, HTTP_UNBIND, HTTP_ACL, HTTP_REPORT, HTTP_MKACTIVITY, HTTP_CHECKOUT, HTTP_MERGE, HTTP_MSEARCH, HTTP_NOTIFY, HTTP_SUBSCRIBE, HTTP_UNSUBSCRIBE, HTTP_PATCH, HTTP_PURGE, HTTP_MKCALENDAR, HTTP_LINK, HTTP_UNLINK, HTTP_SOURCE, HTTP_PRI, HTTP_DESCRIBE, HTTP_ANNOUNCE, HTTP_SETUP, HTTP_PLAY, HTTP_PAUSE, HTTP_TEARDOWN, HTTP_GET_PARAMETER, HTTP_SET_PARAMETER, HTTP_REDIRECT, HTTP_RECORD, HTTP_FLUSH ctypedef llhttp_method llhttp_method_t void llhttp_init(llhttp_t* parser, llhttp_type_t type, const llhttp_settings_t* settings) void llhttp_settings_init(llhttp_settings_t* settings) llhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len) void llhttp_resume_after_upgrade(llhttp_t* parser) int llhttp_should_keep_alive(const llhttp_t* parser) const char* llhttp_get_error_pos(const llhttp_t* parser) const char* llhttp_get_error_reason(const llhttp_t* parser) const char* llhttp_method_name(llhttp_method_t method) void llhttp_set_error_reason(llhttp_t* parser, const char* reason); void llhttp_set_lenient_headers(llhttp_t* parser, bint enabled); void llhttp_set_lenient_chunked_length(llhttp_t* parser, bint enabled); void llhttp_set_lenient_keep_alive(llhttp_t* parser, bint enabled); void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, bint enabled); void llhttp_set_lenient_version(llhttp_t* parser, bint enabled); void llhttp_set_lenient_data_after_close(llhttp_t* parser, bint enabled); void llhttp_set_lenient_optional_lf_after_cr(llhttp_t* parser, bint enabled); void llhttp_set_lenient_optional_cr_before_lf(llhttp_t* parser, bint enabled); void llhttp_set_lenient_optional_crlf_after_chunk(llhttp_t* parser, bint enabled); void llhttp_set_lenient_spaces_after_chunk_size(llhttp_t* parser, bint enabled);