123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- #ifndef ZEPHYR_INCLUDE_NET_HTTP_CLIENT_H_
- #define ZEPHYR_INCLUDE_NET_HTTP_CLIENT_H_
- #include <kernel.h>
- #include <net/net_ip.h>
- #include <net/http_parser.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if !defined(HTTP_CRLF)
- #define HTTP_CRLF "\r\n"
- #endif
- #if !defined(HTTP_STATUS_STR_SIZE)
- #define HTTP_STATUS_STR_SIZE 32
- #endif
- enum http_final_call {
- HTTP_DATA_MORE = 0,
- HTTP_DATA_FINAL = 1,
- };
- struct http_request;
- struct http_response;
- typedef int (*http_payload_cb_t)(int sock,
- struct http_request *req,
- void *user_data);
- typedef int (*http_header_cb_t)(int sock,
- struct http_request *req,
- void *user_data);
- typedef void (*http_response_cb_t)(struct http_response *rsp,
- enum http_final_call final_data,
- void *user_data);
- struct http_response {
-
- const struct http_parser_settings *http_cb;
-
- http_response_cb_t cb;
-
- uint8_t *body_start;
-
- uint8_t *recv_buf;
-
- size_t recv_buf_len;
-
- size_t data_len;
-
- size_t content_length;
-
- size_t processed;
-
- char http_status[HTTP_STATUS_STR_SIZE];
-
- uint16_t http_status_code;
- uint8_t cl_present : 1;
- uint8_t body_found : 1;
- uint8_t message_complete : 1;
- };
- struct http_client_internal_data {
-
- struct k_work_delayable work;
-
- struct http_parser parser;
-
- struct http_parser_settings parser_settings;
-
- struct http_response response;
-
- void *user_data;
-
- int sock;
-
- k_timeout_t timeout;
- };
- struct http_request {
-
- struct http_client_internal_data internal;
-
-
- enum http_method method;
-
- http_response_cb_t response;
-
- const struct http_parser_settings *http_cb;
-
- uint8_t *recv_buf;
-
- size_t recv_buf_len;
-
- const char *url;
-
- const char *protocol;
-
- const char **header_fields;
-
- const char *content_type_value;
-
- const char *host;
-
- const char *port;
-
- http_payload_cb_t payload_cb;
-
- const char *payload;
-
- size_t payload_len;
-
- http_header_cb_t optional_headers_cb;
-
- const char **optional_headers;
- };
- int http_client_req(int sock, struct http_request *req,
- int32_t timeout, void *user_data);
- #ifdef __cplusplus
- }
- #endif
- #endif
|