diff options
| author | lijia <[email protected]> | 2024-10-27 18:08:00 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2024-11-08 11:23:16 +0800 |
| commit | 627cfac992c52e3c7950355c0d447764056a5276 (patch) | |
| tree | afb5f8f462d964a764dbb071f5cfadad199cbe4d /decoders/http/http_decoder_utils.h | |
| parent | d0a868591470a4a9d71a65a5d540058e72c8d92c (diff) | |
httpv2.0 rebase onto develop-2.0dev-http-v2.0
Diffstat (limited to 'decoders/http/http_decoder_utils.h')
| -rw-r--r-- | decoders/http/http_decoder_utils.h | 92 |
1 files changed, 58 insertions, 34 deletions
diff --git a/decoders/http/http_decoder_utils.h b/decoders/http/http_decoder_utils.h index 01a32b2..c370228 100644 --- a/decoders/http/http_decoder_utils.h +++ b/decoders/http/http_decoder_utils.h @@ -10,31 +10,27 @@ extern "C" #include "stellar/stellar.h" #include "stellar/utils.h" #include "stellar/session.h" -#include "stellar/stellar_mq.h" -#include "stellar/stellar_exdata.h" -#ifdef __cplusplus -} +#include "llhttp.h" + +#ifndef UNUSED +#define UNUSED __attribute__((unused)) #endif -char *http_safe_dup(const char *str, size_t len); -int http_strncasecmp_safe(const char *fix_s1, const char *dyn_s2, size_t fix_n1, size_t dyn_n2); -const char *http_message_type_to_string(enum http_message_type type); -int http_message_type_is_req(struct session *sess, enum http_message_type msg_type); -int http_event_is_req(enum http_event event); -int stellar_session_mq_get_topic_id_reliable(struct stellar *st, const char *topic_name, stellar_msg_free_cb_func *msg_free_cb, void *msg_free_arg); -void httpd_url_decode(const char *string, size_t length, char *ostring, size_t *olen); -int httpd_url_is_encoded(const char *url, size_t len); -/****************************************************************************** - * Logger - ******************************************************************************/ + char *http_safe_dup(const char *str, size_t len); + int http_strncasecmp_safe(const char *fix_s1, const char *dyn_s2, size_t fix_n1, size_t dyn_n2); + void httpd_url_decode(const char *string, size_t length, char *ostring, size_t *olen); + int httpd_url_is_encoded(const char *url, size_t len); + /****************************************************************************** + * Logger + ******************************************************************************/ -enum http_decoder_log_level -{ - DEBUG = 0x11, - WARN = 0x12, - INFO = 0x13, - ERROR = 0x14, -}; + enum http_decoder_log_level + { + DEBUG = 0x11, + WARN = 0x12, + INFO = 0x13, + ERROR = 0x14, + }; #ifndef http_decoder_log #define http_decoder_log(level, format, ...) \ @@ -63,17 +59,45 @@ enum http_decoder_log_level #include <netinet/in.h> -struct httpd_session_addr -{ - uint8_t ipver; /* 4 or 6 */ - uint16_t sport; /* network order */ - uint16_t dport; /* network order */ - union + struct http_session_addr + { + uint8_t ipver; /* 4 or 6 */ + uint16_t sport; /* network order */ + uint16_t dport; /* network order */ + union + { + uint32_t saddr4; + struct in6_addr saddr6; + }; + union + { + uint32_t daddr4; + struct in6_addr daddr6; + }; + }; + /* + why not use libevent evbuffer? + 1. evbuffer is a buffer chain, it is not suitable for http half flow cache; + 2. http_half_flow_buffer is a whole continuous buffer; + */ + struct http_buffer { - uint32_t saddr4; - uint32_t daddr4; - struct in6_addr saddr6; - struct in6_addr daddr6; + int reference; // used by other + char *buffer; + size_t buffer_size; }; -}; -void httpd_session_get_addr(const struct session *sess, struct httpd_session_addr *addr); + int http_protocol_identify(const char *data, size_t data_len); + void httpd_session_get_addr(const struct session *sess, struct http_session_addr *addr); + void http_session_addr_ntop(const struct http_session_addr *sesaddr, char *buf, size_t buflen); + struct http_buffer *http_buffer_new(void); + void http_buffer_free(struct http_buffer *buffer); + int http_buffer_add(struct http_buffer *buffer, const char *data, size_t data_len); + int http_buffer_read(struct http_buffer *buffer, char **data, size_t *data_len); + char *http_string_dup(const char *str, size_t len); + long long http_strtoll(const char *str, size_t strlen); + size_t http_line_header_completed(const char *data, size_t data_len); + void http_truncate_extract_headers(const char *raw_data, size_t raw_data_len, const char **headers_start, const char **headers_end); + +#ifdef __cplusplus +} +#endif
\ No newline at end of file |
