summaryrefslogtreecommitdiff
path: root/include/http_decoder.h
diff options
context:
space:
mode:
authorlijia <[email protected]>2024-04-08 09:48:13 +0800
committerlijia <[email protected]>2024-04-08 09:48:13 +0800
commit215e383be1f47cd18c235855d0cee0485f6cb423 (patch)
tree34668fd59622c37826c3a786ba0e196a7d65147b /include/http_decoder.h
parentea795e9c6940281bf8557bfd79f13f319f947c58 (diff)
Separate from stellar-on-sapp project.
Diffstat (limited to 'include/http_decoder.h')
-rw-r--r--include/http_decoder.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/include/http_decoder.h b/include/http_decoder.h
new file mode 100644
index 0000000..fe7d1c2
--- /dev/null
+++ b/include/http_decoder.h
@@ -0,0 +1,118 @@
+/*
+**********************************************************************************************
+* File: http_decoder.h
+* Description:
+* Authors: Liu WenTan <[email protected]>
+* Date: 2024-01-10
+* Copyright: (c) Since 2022 Geedge Networks, Ltd. All rights reserved.
+***********************************************************************************************
+*/
+
+#ifndef _HTTP_DECODER_H_
+#define _HTTP_DECODER_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>
+
+enum http_message_type {
+ HTTP_MESSAGE_REQ_LINE,
+ HTTP_MESSAGE_REQ_HEADER,
+ HTTP_MESSAGE_REQ_BODY,
+ HTTP_MESSAGE_RES_LINE,
+ HTTP_MESSAGE_RES_HEADER,
+ HTTP_MESSAGE_RES_BODY,
+ HTTP_MESSAGE_MAX
+};
+
+//http string
+struct hstring {
+ char *str;
+ size_t str_len;
+};
+
+struct http_header {
+ struct hstring key;
+ struct hstring val;
+};
+
+struct http_request_line {
+ struct hstring method;
+ struct hstring uri;
+ struct hstring version;
+
+ int major_version;
+ int minor_version;
+};
+
+struct http_response_line {
+ struct hstring version;
+ struct hstring status;
+
+ int major_version;
+ int minor_version;
+ int status_code;
+};
+
+struct http_message;
+
+enum http_message_type http_message_type(struct http_message *msg);
+
+/**
+ * @retval succeed(0) failed(-1)
+*/
+int http_message_get_request_line(struct http_message *msg,
+ struct http_request_line *line);
+
+int http_message_get_response_line(struct http_message *msg,
+ struct http_response_line *line);
+
+/* same key may has multiple kv */
+int http_message_get_request_header(struct http_message *msg, struct hstring *key,
+ struct http_header *hdr_array, size_t array_size);
+
+int http_message_get_response_header(struct http_message *msg, struct hstring *key,
+ struct http_header *hdr_array, size_t array_size);
+
+/**
+ * @brief loop reading all headers
+ *
+ * @retval succeed(1) failed(<= 0)
+*/
+int http_message_request_header_next(struct http_message *msg,
+ struct http_header *header);
+
+int http_message_response_header_next(struct http_message *msg,
+ struct http_header *header);
+
+/**
+ * @retval succeed(0) failed(-1)
+*/
+int http_message_get_request_raw_body(struct http_message *msg,
+ struct hstring *body);
+
+int http_message_get_response_raw_body(struct http_message *msg,
+ struct hstring *body);
+
+/**
+ * @brief If the body hasn't been compressed, return raw body
+ *
+ * @retval succeed(0) failed(-1)
+*/
+int http_message_get_request_decompress_body(struct http_message *msg,
+ struct hstring *body);
+
+int http_message_get_response_decompress_body(struct http_message *msg,
+ struct hstring *body);
+
+int http_message_get_url(struct http_message *msg, struct hstring *url);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif \ No newline at end of file