/* * Copyright (c) 2017 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __HTTP_H__ #define __HTTP_H__ #if defined(CONFIG_HTTP_CLIENT) #include struct http_client_request { /** The HTTP method: GET, HEAD, OPTIONS, POST */ char *method; /** The URL for this request, for example: /index.html */ char *url; /** The HTTP protocol: HTTP/1.1 */ char *protocol; /** The HTTP header fields (application specific) * The Content-Type may be specified here or in the next field. * Depending on your application, the Content-Type may vary, however * some header fields may remain constant through the application's * life cycle. */ char *header_fields; /** The value of the Content-Type header field, may be NULL */ char *content_type_value; /** Payload, may be NULL */ char *payload; /** Payload size, may be 0 */ uint16_t payload_size; }; int http_request(struct net_context *net_ctx, int32_t timeout, struct http_client_request *req); int http_request_get(struct net_context *net_ctx, int32_t timeout, char *url, char *header_fields); int http_request_head(struct net_context *net_ctx, int32_t timeout, char *url, char *header_fields); int http_request_options(struct net_context *net_ctx, int32_t timeout, char *url, char *header_fields); int http_request_post(struct net_context *net_ctx, int32_t timeout, char *url, char *header_fields, char *content_type_value, char *payload); #endif #if defined(CONFIG_HTTP_SERVER) #include #if defined(CONFIG_HTTP_PARSER) #include #endif /* HTTP server context state */ enum HTTP_CTX_STATE { HTTP_CTX_FREE = 0, HTTP_CTX_IN_USE }; /* HTTP header fields struct */ struct http_field_value { /** Field name, this variable will point to the beginning of the string * containing the HTTP field name */ const char *key; /** Length of the field name */ uint16_t key_len; /** Value, this variable will point to the beginning of the string * containing the field value */ const char *value; /** Length of the field value */ uint16_t value_len; }; /* The HTTP server context struct */ struct http_server_ctx { uint8_t state; /** Collection of header fields */ struct http_field_value field_values[CONFIG_HTTP_HEADER_FIELD_ITEMS]; /** Number of header field elements */ uint16_t field_values_ctr; /** HTTP Request URL */ const char *url; /** URL's length */ uint16_t url_len; /**IP stack network context */ struct net_context *net_ctx; /** Network timeout */ int32_t timeout; #if defined(CONFIG_HTTP_PARSER) /** HTTP parser */ struct http_parser parser; /** HTTP parser settings */ struct http_parser_settings parser_settings; #endif }; int http_response(struct http_server_ctx *ctx, const char *http_header, const char *html_payload); int http_response_400(struct http_server_ctx *ctx, const char *html_payload); int http_response_403(struct http_server_ctx *ctx, const char *html_payload); int http_response_404(struct http_server_ctx *ctx, const char *html_payload); #endif #endif