12c593315Sopenharmony_ci#include <stdlib.h> 22c593315Sopenharmony_ci#include <stdio.h> 32c593315Sopenharmony_ci#include <string.h> 42c593315Sopenharmony_ci 52c593315Sopenharmony_ci#include "llhttp.h" 62c593315Sopenharmony_ci 72c593315Sopenharmony_ci#define CALLBACK_MAYBE(PARSER, NAME) \ 82c593315Sopenharmony_ci do { \ 92c593315Sopenharmony_ci const llhttp_settings_t* settings; \ 102c593315Sopenharmony_ci settings = (const llhttp_settings_t*) (PARSER)->settings; \ 112c593315Sopenharmony_ci if (settings == NULL || settings->NAME == NULL) { \ 122c593315Sopenharmony_ci err = 0; \ 132c593315Sopenharmony_ci break; \ 142c593315Sopenharmony_ci } \ 152c593315Sopenharmony_ci err = settings->NAME((PARSER)); \ 162c593315Sopenharmony_ci } while (0) 172c593315Sopenharmony_ci 182c593315Sopenharmony_ci#define SPAN_CALLBACK_MAYBE(PARSER, NAME, START, LEN) \ 192c593315Sopenharmony_ci do { \ 202c593315Sopenharmony_ci const llhttp_settings_t* settings; \ 212c593315Sopenharmony_ci settings = (const llhttp_settings_t*) (PARSER)->settings; \ 222c593315Sopenharmony_ci if (settings == NULL || settings->NAME == NULL) { \ 232c593315Sopenharmony_ci err = 0; \ 242c593315Sopenharmony_ci break; \ 252c593315Sopenharmony_ci } \ 262c593315Sopenharmony_ci err = settings->NAME((PARSER), (START), (LEN)); \ 272c593315Sopenharmony_ci if (err == -1) { \ 282c593315Sopenharmony_ci err = HPE_USER; \ 292c593315Sopenharmony_ci llhttp_set_error_reason((PARSER), "Span callback error in " #NAME); \ 302c593315Sopenharmony_ci } \ 312c593315Sopenharmony_ci } while (0) 322c593315Sopenharmony_ci 332c593315Sopenharmony_civoid llhttp_init(llhttp_t* parser, llhttp_type_t type, 342c593315Sopenharmony_ci const llhttp_settings_t* settings) { 352c593315Sopenharmony_ci llhttp__internal_init(parser); 362c593315Sopenharmony_ci 372c593315Sopenharmony_ci parser->type = type; 382c593315Sopenharmony_ci parser->settings = (void*) settings; 392c593315Sopenharmony_ci} 402c593315Sopenharmony_ci 412c593315Sopenharmony_ci 422c593315Sopenharmony_ci#if defined(__wasm__) 432c593315Sopenharmony_ci 442c593315Sopenharmony_ciextern int wasm_on_message_begin(llhttp_t * p); 452c593315Sopenharmony_ciextern int wasm_on_url(llhttp_t* p, const char* at, size_t length); 462c593315Sopenharmony_ciextern int wasm_on_status(llhttp_t* p, const char* at, size_t length); 472c593315Sopenharmony_ciextern int wasm_on_header_field(llhttp_t* p, const char* at, size_t length); 482c593315Sopenharmony_ciextern int wasm_on_header_value(llhttp_t* p, const char* at, size_t length); 492c593315Sopenharmony_ciextern int wasm_on_headers_complete(llhttp_t * p, int status_code, 502c593315Sopenharmony_ci uint8_t upgrade, int should_keep_alive); 512c593315Sopenharmony_ciextern int wasm_on_body(llhttp_t* p, const char* at, size_t length); 522c593315Sopenharmony_ciextern int wasm_on_message_complete(llhttp_t * p); 532c593315Sopenharmony_ci 542c593315Sopenharmony_cistatic int wasm_on_headers_complete_wrap(llhttp_t* p) { 552c593315Sopenharmony_ci return wasm_on_headers_complete(p, p->status_code, p->upgrade, 562c593315Sopenharmony_ci llhttp_should_keep_alive(p)); 572c593315Sopenharmony_ci} 582c593315Sopenharmony_ci 592c593315Sopenharmony_ciconst llhttp_settings_t wasm_settings = { 602c593315Sopenharmony_ci wasm_on_message_begin, 612c593315Sopenharmony_ci wasm_on_url, 622c593315Sopenharmony_ci wasm_on_status, 632c593315Sopenharmony_ci NULL, 642c593315Sopenharmony_ci NULL, 652c593315Sopenharmony_ci wasm_on_header_field, 662c593315Sopenharmony_ci wasm_on_header_value, 672c593315Sopenharmony_ci NULL, 682c593315Sopenharmony_ci NULL, 692c593315Sopenharmony_ci wasm_on_headers_complete_wrap, 702c593315Sopenharmony_ci wasm_on_body, 712c593315Sopenharmony_ci wasm_on_message_complete, 722c593315Sopenharmony_ci NULL, 732c593315Sopenharmony_ci NULL, 742c593315Sopenharmony_ci NULL, 752c593315Sopenharmony_ci NULL, 762c593315Sopenharmony_ci NULL, 772c593315Sopenharmony_ci NULL, 782c593315Sopenharmony_ci NULL, 792c593315Sopenharmony_ci NULL, 802c593315Sopenharmony_ci NULL, 812c593315Sopenharmony_ci NULL, 822c593315Sopenharmony_ci NULL, 832c593315Sopenharmony_ci}; 842c593315Sopenharmony_ci 852c593315Sopenharmony_ci 862c593315Sopenharmony_cillhttp_t* llhttp_alloc(llhttp_type_t type) { 872c593315Sopenharmony_ci llhttp_t* parser = malloc(sizeof(llhttp_t)); 882c593315Sopenharmony_ci llhttp_init(parser, type, &wasm_settings); 892c593315Sopenharmony_ci return parser; 902c593315Sopenharmony_ci} 912c593315Sopenharmony_ci 922c593315Sopenharmony_civoid llhttp_free(llhttp_t* parser) { 932c593315Sopenharmony_ci free(parser); 942c593315Sopenharmony_ci} 952c593315Sopenharmony_ci 962c593315Sopenharmony_ci#endif // defined(__wasm__) 972c593315Sopenharmony_ci 982c593315Sopenharmony_ci/* Some getters required to get stuff from the parser */ 992c593315Sopenharmony_ci 1002c593315Sopenharmony_ciuint8_t llhttp_get_type(llhttp_t* parser) { 1012c593315Sopenharmony_ci return parser->type; 1022c593315Sopenharmony_ci} 1032c593315Sopenharmony_ci 1042c593315Sopenharmony_ciuint8_t llhttp_get_http_major(llhttp_t* parser) { 1052c593315Sopenharmony_ci return parser->http_major; 1062c593315Sopenharmony_ci} 1072c593315Sopenharmony_ci 1082c593315Sopenharmony_ciuint8_t llhttp_get_http_minor(llhttp_t* parser) { 1092c593315Sopenharmony_ci return parser->http_minor; 1102c593315Sopenharmony_ci} 1112c593315Sopenharmony_ci 1122c593315Sopenharmony_ciuint8_t llhttp_get_method(llhttp_t* parser) { 1132c593315Sopenharmony_ci return parser->method; 1142c593315Sopenharmony_ci} 1152c593315Sopenharmony_ci 1162c593315Sopenharmony_ciint llhttp_get_status_code(llhttp_t* parser) { 1172c593315Sopenharmony_ci return parser->status_code; 1182c593315Sopenharmony_ci} 1192c593315Sopenharmony_ci 1202c593315Sopenharmony_ciuint8_t llhttp_get_upgrade(llhttp_t* parser) { 1212c593315Sopenharmony_ci return parser->upgrade; 1222c593315Sopenharmony_ci} 1232c593315Sopenharmony_ci 1242c593315Sopenharmony_ci 1252c593315Sopenharmony_civoid llhttp_reset(llhttp_t* parser) { 1262c593315Sopenharmony_ci llhttp_type_t type = parser->type; 1272c593315Sopenharmony_ci const llhttp_settings_t* settings = parser->settings; 1282c593315Sopenharmony_ci void* data = parser->data; 1292c593315Sopenharmony_ci uint8_t lenient_flags = parser->lenient_flags; 1302c593315Sopenharmony_ci 1312c593315Sopenharmony_ci llhttp__internal_init(parser); 1322c593315Sopenharmony_ci 1332c593315Sopenharmony_ci parser->type = type; 1342c593315Sopenharmony_ci parser->settings = (void*) settings; 1352c593315Sopenharmony_ci parser->data = data; 1362c593315Sopenharmony_ci parser->lenient_flags = lenient_flags; 1372c593315Sopenharmony_ci} 1382c593315Sopenharmony_ci 1392c593315Sopenharmony_ci 1402c593315Sopenharmony_cillhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len) { 1412c593315Sopenharmony_ci return llhttp__internal_execute(parser, data, data + len); 1422c593315Sopenharmony_ci} 1432c593315Sopenharmony_ci 1442c593315Sopenharmony_ci 1452c593315Sopenharmony_civoid llhttp_settings_init(llhttp_settings_t* settings) { 1462c593315Sopenharmony_ci memset(settings, 0, sizeof(*settings)); 1472c593315Sopenharmony_ci} 1482c593315Sopenharmony_ci 1492c593315Sopenharmony_ci 1502c593315Sopenharmony_cillhttp_errno_t llhttp_finish(llhttp_t* parser) { 1512c593315Sopenharmony_ci int err; 1522c593315Sopenharmony_ci 1532c593315Sopenharmony_ci /* We're in an error state. Don't bother doing anything. */ 1542c593315Sopenharmony_ci if (parser->error != 0) { 1552c593315Sopenharmony_ci return 0; 1562c593315Sopenharmony_ci } 1572c593315Sopenharmony_ci 1582c593315Sopenharmony_ci switch (parser->finish) { 1592c593315Sopenharmony_ci case HTTP_FINISH_SAFE_WITH_CB: 1602c593315Sopenharmony_ci CALLBACK_MAYBE(parser, on_message_complete); 1612c593315Sopenharmony_ci if (err != HPE_OK) return err; 1622c593315Sopenharmony_ci 1632c593315Sopenharmony_ci /* FALLTHROUGH */ 1642c593315Sopenharmony_ci case HTTP_FINISH_SAFE: 1652c593315Sopenharmony_ci return HPE_OK; 1662c593315Sopenharmony_ci case HTTP_FINISH_UNSAFE: 1672c593315Sopenharmony_ci parser->reason = "Invalid EOF state"; 1682c593315Sopenharmony_ci return HPE_INVALID_EOF_STATE; 1692c593315Sopenharmony_ci default: 1702c593315Sopenharmony_ci abort(); 1712c593315Sopenharmony_ci } 1722c593315Sopenharmony_ci} 1732c593315Sopenharmony_ci 1742c593315Sopenharmony_ci 1752c593315Sopenharmony_civoid llhttp_pause(llhttp_t* parser) { 1762c593315Sopenharmony_ci if (parser->error != HPE_OK) { 1772c593315Sopenharmony_ci return; 1782c593315Sopenharmony_ci } 1792c593315Sopenharmony_ci 1802c593315Sopenharmony_ci parser->error = HPE_PAUSED; 1812c593315Sopenharmony_ci parser->reason = "Paused"; 1822c593315Sopenharmony_ci} 1832c593315Sopenharmony_ci 1842c593315Sopenharmony_ci 1852c593315Sopenharmony_civoid llhttp_resume(llhttp_t* parser) { 1862c593315Sopenharmony_ci if (parser->error != HPE_PAUSED) { 1872c593315Sopenharmony_ci return; 1882c593315Sopenharmony_ci } 1892c593315Sopenharmony_ci 1902c593315Sopenharmony_ci parser->error = 0; 1912c593315Sopenharmony_ci} 1922c593315Sopenharmony_ci 1932c593315Sopenharmony_ci 1942c593315Sopenharmony_civoid llhttp_resume_after_upgrade(llhttp_t* parser) { 1952c593315Sopenharmony_ci if (parser->error != HPE_PAUSED_UPGRADE) { 1962c593315Sopenharmony_ci return; 1972c593315Sopenharmony_ci } 1982c593315Sopenharmony_ci 1992c593315Sopenharmony_ci parser->error = 0; 2002c593315Sopenharmony_ci} 2012c593315Sopenharmony_ci 2022c593315Sopenharmony_ci 2032c593315Sopenharmony_cillhttp_errno_t llhttp_get_errno(const llhttp_t* parser) { 2042c593315Sopenharmony_ci return parser->error; 2052c593315Sopenharmony_ci} 2062c593315Sopenharmony_ci 2072c593315Sopenharmony_ci 2082c593315Sopenharmony_ciconst char* llhttp_get_error_reason(const llhttp_t* parser) { 2092c593315Sopenharmony_ci return parser->reason; 2102c593315Sopenharmony_ci} 2112c593315Sopenharmony_ci 2122c593315Sopenharmony_ci 2132c593315Sopenharmony_civoid llhttp_set_error_reason(llhttp_t* parser, const char* reason) { 2142c593315Sopenharmony_ci parser->reason = reason; 2152c593315Sopenharmony_ci} 2162c593315Sopenharmony_ci 2172c593315Sopenharmony_ci 2182c593315Sopenharmony_ciconst char* llhttp_get_error_pos(const llhttp_t* parser) { 2192c593315Sopenharmony_ci return parser->error_pos; 2202c593315Sopenharmony_ci} 2212c593315Sopenharmony_ci 2222c593315Sopenharmony_ci 2232c593315Sopenharmony_ciconst char* llhttp_errno_name(llhttp_errno_t err) { 2242c593315Sopenharmony_ci#define HTTP_ERRNO_GEN(CODE, NAME, _) case HPE_##NAME: return "HPE_" #NAME; 2252c593315Sopenharmony_ci switch (err) { 2262c593315Sopenharmony_ci HTTP_ERRNO_MAP(HTTP_ERRNO_GEN) 2272c593315Sopenharmony_ci default: abort(); 2282c593315Sopenharmony_ci } 2292c593315Sopenharmony_ci#undef HTTP_ERRNO_GEN 2302c593315Sopenharmony_ci} 2312c593315Sopenharmony_ci 2322c593315Sopenharmony_ci 2332c593315Sopenharmony_ciconst char* llhttp_method_name(llhttp_method_t method) { 2342c593315Sopenharmony_ci#define HTTP_METHOD_GEN(NUM, NAME, STRING) case HTTP_##NAME: return #STRING; 2352c593315Sopenharmony_ci switch (method) { 2362c593315Sopenharmony_ci HTTP_ALL_METHOD_MAP(HTTP_METHOD_GEN) 2372c593315Sopenharmony_ci default: abort(); 2382c593315Sopenharmony_ci } 2392c593315Sopenharmony_ci#undef HTTP_METHOD_GEN 2402c593315Sopenharmony_ci} 2412c593315Sopenharmony_ci 2422c593315Sopenharmony_ciconst char* llhttp_status_name(llhttp_status_t status) { 2432c593315Sopenharmony_ci#define HTTP_STATUS_GEN(NUM, NAME, STRING) case HTTP_STATUS_##NAME: return #STRING; 2442c593315Sopenharmony_ci switch (status) { 2452c593315Sopenharmony_ci HTTP_STATUS_MAP(HTTP_STATUS_GEN) 2462c593315Sopenharmony_ci default: abort(); 2472c593315Sopenharmony_ci } 2482c593315Sopenharmony_ci#undef HTTP_STATUS_GEN 2492c593315Sopenharmony_ci} 2502c593315Sopenharmony_ci 2512c593315Sopenharmony_ci 2522c593315Sopenharmony_civoid llhttp_set_lenient_headers(llhttp_t* parser, int enabled) { 2532c593315Sopenharmony_ci if (enabled) { 2542c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_HEADERS; 2552c593315Sopenharmony_ci } else { 2562c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_HEADERS; 2572c593315Sopenharmony_ci } 2582c593315Sopenharmony_ci} 2592c593315Sopenharmony_ci 2602c593315Sopenharmony_ci 2612c593315Sopenharmony_civoid llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled) { 2622c593315Sopenharmony_ci if (enabled) { 2632c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_CHUNKED_LENGTH; 2642c593315Sopenharmony_ci } else { 2652c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_CHUNKED_LENGTH; 2662c593315Sopenharmony_ci } 2672c593315Sopenharmony_ci} 2682c593315Sopenharmony_ci 2692c593315Sopenharmony_ci 2702c593315Sopenharmony_civoid llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled) { 2712c593315Sopenharmony_ci if (enabled) { 2722c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_KEEP_ALIVE; 2732c593315Sopenharmony_ci } else { 2742c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_KEEP_ALIVE; 2752c593315Sopenharmony_ci } 2762c593315Sopenharmony_ci} 2772c593315Sopenharmony_ci 2782c593315Sopenharmony_civoid llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled) { 2792c593315Sopenharmony_ci if (enabled) { 2802c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_TRANSFER_ENCODING; 2812c593315Sopenharmony_ci } else { 2822c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_TRANSFER_ENCODING; 2832c593315Sopenharmony_ci } 2842c593315Sopenharmony_ci} 2852c593315Sopenharmony_ci 2862c593315Sopenharmony_civoid llhttp_set_lenient_version(llhttp_t* parser, int enabled) { 2872c593315Sopenharmony_ci if (enabled) { 2882c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_VERSION; 2892c593315Sopenharmony_ci } else { 2902c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_VERSION; 2912c593315Sopenharmony_ci } 2922c593315Sopenharmony_ci} 2932c593315Sopenharmony_ci 2942c593315Sopenharmony_civoid llhttp_set_lenient_data_after_close(llhttp_t* parser, int enabled) { 2952c593315Sopenharmony_ci if (enabled) { 2962c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_DATA_AFTER_CLOSE; 2972c593315Sopenharmony_ci } else { 2982c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_DATA_AFTER_CLOSE; 2992c593315Sopenharmony_ci } 3002c593315Sopenharmony_ci} 3012c593315Sopenharmony_ci 3022c593315Sopenharmony_civoid llhttp_set_lenient_optional_lf_after_cr(llhttp_t* parser, int enabled) { 3032c593315Sopenharmony_ci if (enabled) { 3042c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_OPTIONAL_LF_AFTER_CR; 3052c593315Sopenharmony_ci } else { 3062c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_OPTIONAL_LF_AFTER_CR; 3072c593315Sopenharmony_ci } 3082c593315Sopenharmony_ci} 3092c593315Sopenharmony_ci 3102c593315Sopenharmony_civoid llhttp_set_lenient_optional_crlf_after_chunk(llhttp_t* parser, int enabled) { 3112c593315Sopenharmony_ci if (enabled) { 3122c593315Sopenharmony_ci parser->lenient_flags |= LENIENT_OPTIONAL_CRLF_AFTER_CHUNK; 3132c593315Sopenharmony_ci } else { 3142c593315Sopenharmony_ci parser->lenient_flags &= ~LENIENT_OPTIONAL_CRLF_AFTER_CHUNK; 3152c593315Sopenharmony_ci } 3162c593315Sopenharmony_ci} 3172c593315Sopenharmony_ci 3182c593315Sopenharmony_ci/* Callbacks */ 3192c593315Sopenharmony_ci 3202c593315Sopenharmony_ci 3212c593315Sopenharmony_ciint llhttp__on_message_begin(llhttp_t* s, const char* p, const char* endp) { 3222c593315Sopenharmony_ci int err; 3232c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_message_begin); 3242c593315Sopenharmony_ci return err; 3252c593315Sopenharmony_ci} 3262c593315Sopenharmony_ci 3272c593315Sopenharmony_ci 3282c593315Sopenharmony_ciint llhttp__on_url(llhttp_t* s, const char* p, const char* endp) { 3292c593315Sopenharmony_ci int err; 3302c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_url, p, endp - p); 3312c593315Sopenharmony_ci return err; 3322c593315Sopenharmony_ci} 3332c593315Sopenharmony_ci 3342c593315Sopenharmony_ci 3352c593315Sopenharmony_ciint llhttp__on_url_complete(llhttp_t* s, const char* p, const char* endp) { 3362c593315Sopenharmony_ci int err; 3372c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_url_complete); 3382c593315Sopenharmony_ci return err; 3392c593315Sopenharmony_ci} 3402c593315Sopenharmony_ci 3412c593315Sopenharmony_ci 3422c593315Sopenharmony_ciint llhttp__on_status(llhttp_t* s, const char* p, const char* endp) { 3432c593315Sopenharmony_ci int err; 3442c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_status, p, endp - p); 3452c593315Sopenharmony_ci return err; 3462c593315Sopenharmony_ci} 3472c593315Sopenharmony_ci 3482c593315Sopenharmony_ci 3492c593315Sopenharmony_ciint llhttp__on_status_complete(llhttp_t* s, const char* p, const char* endp) { 3502c593315Sopenharmony_ci int err; 3512c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_status_complete); 3522c593315Sopenharmony_ci return err; 3532c593315Sopenharmony_ci} 3542c593315Sopenharmony_ci 3552c593315Sopenharmony_ci 3562c593315Sopenharmony_ciint llhttp__on_method(llhttp_t* s, const char* p, const char* endp) { 3572c593315Sopenharmony_ci int err; 3582c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_method, p, endp - p); 3592c593315Sopenharmony_ci return err; 3602c593315Sopenharmony_ci} 3612c593315Sopenharmony_ci 3622c593315Sopenharmony_ci 3632c593315Sopenharmony_ciint llhttp__on_method_complete(llhttp_t* s, const char* p, const char* endp) { 3642c593315Sopenharmony_ci int err; 3652c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_method_complete); 3662c593315Sopenharmony_ci return err; 3672c593315Sopenharmony_ci} 3682c593315Sopenharmony_ci 3692c593315Sopenharmony_ci 3702c593315Sopenharmony_ciint llhttp__on_version(llhttp_t* s, const char* p, const char* endp) { 3712c593315Sopenharmony_ci int err; 3722c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_version, p, endp - p); 3732c593315Sopenharmony_ci return err; 3742c593315Sopenharmony_ci} 3752c593315Sopenharmony_ci 3762c593315Sopenharmony_ci 3772c593315Sopenharmony_ciint llhttp__on_version_complete(llhttp_t* s, const char* p, const char* endp) { 3782c593315Sopenharmony_ci int err; 3792c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_version_complete); 3802c593315Sopenharmony_ci return err; 3812c593315Sopenharmony_ci} 3822c593315Sopenharmony_ci 3832c593315Sopenharmony_ci 3842c593315Sopenharmony_ciint llhttp__on_header_field(llhttp_t* s, const char* p, const char* endp) { 3852c593315Sopenharmony_ci int err; 3862c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_header_field, p, endp - p); 3872c593315Sopenharmony_ci return err; 3882c593315Sopenharmony_ci} 3892c593315Sopenharmony_ci 3902c593315Sopenharmony_ci 3912c593315Sopenharmony_ciint llhttp__on_header_field_complete(llhttp_t* s, const char* p, const char* endp) { 3922c593315Sopenharmony_ci int err; 3932c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_header_field_complete); 3942c593315Sopenharmony_ci return err; 3952c593315Sopenharmony_ci} 3962c593315Sopenharmony_ci 3972c593315Sopenharmony_ci 3982c593315Sopenharmony_ciint llhttp__on_header_value(llhttp_t* s, const char* p, const char* endp) { 3992c593315Sopenharmony_ci int err; 4002c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_header_value, p, endp - p); 4012c593315Sopenharmony_ci return err; 4022c593315Sopenharmony_ci} 4032c593315Sopenharmony_ci 4042c593315Sopenharmony_ci 4052c593315Sopenharmony_ciint llhttp__on_header_value_complete(llhttp_t* s, const char* p, const char* endp) { 4062c593315Sopenharmony_ci int err; 4072c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_header_value_complete); 4082c593315Sopenharmony_ci return err; 4092c593315Sopenharmony_ci} 4102c593315Sopenharmony_ci 4112c593315Sopenharmony_ci 4122c593315Sopenharmony_ciint llhttp__on_headers_complete(llhttp_t* s, const char* p, const char* endp) { 4132c593315Sopenharmony_ci int err; 4142c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_headers_complete); 4152c593315Sopenharmony_ci return err; 4162c593315Sopenharmony_ci} 4172c593315Sopenharmony_ci 4182c593315Sopenharmony_ci 4192c593315Sopenharmony_ciint llhttp__on_message_complete(llhttp_t* s, const char* p, const char* endp) { 4202c593315Sopenharmony_ci int err; 4212c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_message_complete); 4222c593315Sopenharmony_ci return err; 4232c593315Sopenharmony_ci} 4242c593315Sopenharmony_ci 4252c593315Sopenharmony_ci 4262c593315Sopenharmony_ciint llhttp__on_body(llhttp_t* s, const char* p, const char* endp) { 4272c593315Sopenharmony_ci int err; 4282c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_body, p, endp - p); 4292c593315Sopenharmony_ci return err; 4302c593315Sopenharmony_ci} 4312c593315Sopenharmony_ci 4322c593315Sopenharmony_ci 4332c593315Sopenharmony_ciint llhttp__on_chunk_header(llhttp_t* s, const char* p, const char* endp) { 4342c593315Sopenharmony_ci int err; 4352c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_chunk_header); 4362c593315Sopenharmony_ci return err; 4372c593315Sopenharmony_ci} 4382c593315Sopenharmony_ci 4392c593315Sopenharmony_ci 4402c593315Sopenharmony_ciint llhttp__on_chunk_extension_name(llhttp_t* s, const char* p, const char* endp) { 4412c593315Sopenharmony_ci int err; 4422c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_chunk_extension_name, p, endp - p); 4432c593315Sopenharmony_ci return err; 4442c593315Sopenharmony_ci} 4452c593315Sopenharmony_ci 4462c593315Sopenharmony_ci 4472c593315Sopenharmony_ciint llhttp__on_chunk_extension_name_complete(llhttp_t* s, const char* p, const char* endp) { 4482c593315Sopenharmony_ci int err; 4492c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_chunk_extension_name_complete); 4502c593315Sopenharmony_ci return err; 4512c593315Sopenharmony_ci} 4522c593315Sopenharmony_ci 4532c593315Sopenharmony_ci 4542c593315Sopenharmony_ciint llhttp__on_chunk_extension_value(llhttp_t* s, const char* p, const char* endp) { 4552c593315Sopenharmony_ci int err; 4562c593315Sopenharmony_ci SPAN_CALLBACK_MAYBE(s, on_chunk_extension_value, p, endp - p); 4572c593315Sopenharmony_ci return err; 4582c593315Sopenharmony_ci} 4592c593315Sopenharmony_ci 4602c593315Sopenharmony_ci 4612c593315Sopenharmony_ciint llhttp__on_chunk_extension_value_complete(llhttp_t* s, const char* p, const char* endp) { 4622c593315Sopenharmony_ci int err; 4632c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_chunk_extension_value_complete); 4642c593315Sopenharmony_ci return err; 4652c593315Sopenharmony_ci} 4662c593315Sopenharmony_ci 4672c593315Sopenharmony_ci 4682c593315Sopenharmony_ciint llhttp__on_chunk_complete(llhttp_t* s, const char* p, const char* endp) { 4692c593315Sopenharmony_ci int err; 4702c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_chunk_complete); 4712c593315Sopenharmony_ci return err; 4722c593315Sopenharmony_ci} 4732c593315Sopenharmony_ci 4742c593315Sopenharmony_ci 4752c593315Sopenharmony_ciint llhttp__on_reset(llhttp_t* s, const char* p, const char* endp) { 4762c593315Sopenharmony_ci int err; 4772c593315Sopenharmony_ci CALLBACK_MAYBE(s, on_reset); 4782c593315Sopenharmony_ci return err; 4792c593315Sopenharmony_ci} 4802c593315Sopenharmony_ci 4812c593315Sopenharmony_ci 4822c593315Sopenharmony_ci/* Private */ 4832c593315Sopenharmony_ci 4842c593315Sopenharmony_ci 4852c593315Sopenharmony_civoid llhttp__debug(llhttp_t* s, const char* p, const char* endp, 4862c593315Sopenharmony_ci const char* msg) { 4872c593315Sopenharmony_ci if (p == endp) { 4882c593315Sopenharmony_ci fprintf(stderr, "p=%p type=%d flags=%02x next=null debug=%s\n", s, s->type, 4892c593315Sopenharmony_ci s->flags, msg); 4902c593315Sopenharmony_ci } else { 4912c593315Sopenharmony_ci fprintf(stderr, "p=%p type=%d flags=%02x next=%02x debug=%s\n", s, 4922c593315Sopenharmony_ci s->type, s->flags, *p, msg); 4932c593315Sopenharmony_ci } 4942c593315Sopenharmony_ci} 495