summaryrefslogtreecommitdiff
path: root/decoders/http/http_decoder_utils.h
diff options
context:
space:
mode:
authorlijia <[email protected]>2024-10-27 18:08:00 +0800
committerlijia <[email protected]>2024-11-08 11:23:16 +0800
commit627cfac992c52e3c7950355c0d447764056a5276 (patch)
treeafb5f8f462d964a764dbb071f5cfadad199cbe4d /decoders/http/http_decoder_utils.h
parentd0a868591470a4a9d71a65a5d540058e72c8d92c (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.h92
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