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