blob: bbd013060118f3c40329266b7fd14d76fd6cdba9 [file] [log] [blame]
/*************************************************************
Description:
MBTK HTTP Header file.
Author:
LiuBin
Date:
2020/4/29 17:25:55
*************************************************************/
#ifndef _MBTK_HTTP_2_H
#define _MBTK_HTTP_2_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdio.h>
#include "mbtk_type.h"
#include "mbtk_sock2.h"
/*************************************************************
Constants and Macros
*************************************************************/
#define MBTK_HTTP_URI_MAX 512
#define MBTK_HTTP_HOST_MAX 50
#define MBTK_HTTP_URL_MAX (MBTK_HTTP_URI_MAX + MBTK_HTTP_HOST_MAX)
#define MBTK_HTTP_PORT_DEF 80
#define MBTK_HTTPS_PORT_DEF 443
#define HTTP_HANDLE_MAX 3
#define HTTP_SESSION_MAX 5
#define HTTP_REQUEST_HEADER_MAX 30
#define HTTP_RESPONSE_HEADER_MAX 30
#define HTTP_CONTENT_LEN_MAX 1024
#define HTTP_MSG_LEN_MAX 1024
#define HTTP_IPC_MSG_PATH "/dev"
#define HTTP_IPC_MSG_ID 'H'
/*************************************************************
Definitions:enum,struct,union,class
*************************************************************/
typedef enum {
HTTP_VERSION_1_0 = 0,
HTTP_VERSION_1_1,
HTTP_VERSION_2,
HTTP_VERSION_3
} mbtk_http_version_enum;
typedef enum {
HTTP_OPTION_HEAD = 0,
HTTP_OPTION_GET,
HTTP_OPTION_POST,
HTTP_OPTION_PUT,
HTTP_OPTION_DELETE,
HTTP_OPTION_OPTIONS,
HTTP_OPTION_TRACE,
HTTP_OPTION_CONNECT,
HTTP_OPTION_LINK,
HTTP_OPTION_UNLINK
} mbtk_http_option_enum;
#if 0
typedef enum {
HTTP_HEADER_GENERAL = 0,
HTTP_HEADER_REQUEST,
HTTP_HEADER_RESPONSE,
HTTP_HEADER_ENTITY,
HTTP_HEADER_OTHERS
} mbtk_http_header_type_e;
typedef enum {
// General field start.
HTTP_HEADER_INDEX_CACHE_CONTROL = 0,
HTTP_HEADER_INDEX_CONNECTION,
HTTP_HEADER_INDEX_DATE,
HTTP_HEADER_INDEX_PRAGMA,
HTTP_HEADER_INDEX_TRAILER,
HTTP_HEADER_INDEX_TRANSFER_ENCODING,
HTTP_HEADER_INDEX_UPGRADE,
HTTP_HEADER_INDEX_VIA,
HTTP_HEADER_INDEX_WARNING,
// General field end.
// Request field start.
HTTP_HEADER_INDEX_ACCEPT,
HTTP_HEADER_INDEX_ACCEPT_CHARSET,
HTTP_HEADER_INDEX_ACCEPT_ENCODING,
HTTP_HEADER_INDEX_ACCEPT_LANGUAGE,
HTTP_HEADER_INDEX_AUTHORIZATION,
HTTP_HEADER_INDEX_EXPECT,
HTTP_HEADER_INDEX_FROM,
HTTP_HEADER_INDEX_HOST,
HTTP_HEADER_INDEX_IF_MATCH,
HTTP_HEADER_INDEX_IF_MODIFIED_SINCE,
HTTP_HEADER_INDEX_IF_NONE_MATCH,
HTTP_HEADER_INDEX_IF_RANGE,
HTTP_HEADER_INDEX_IF_UNMODIFIED_SINCE,
HTTP_HEADER_INDEX_MAX_FORWARDS,
HTTP_HEADER_INDEX_PROXY_AUTHORIZATION,
HTTP_HEADER_INDEX_RANGE,
HTTP_HEADER_INDEX_REFERER,
HTTP_HEADER_INDEX_TE,
HTTP_HEADER_INDEX_USER_AGENT,
// Request field end.
// Response field start.
HTTP_HEADER_INDEX_ACCEPT_RANGES,
HTTP_HEADER_INDEX_AGE,
HTTP_HEADER_INDEX_ETAG,
HTTP_HEADER_INDEX_LOCATION,
HTTP_HEADER_INDEX_PROXY_AUTHENTICATE,
HTTP_HEADER_INDEX_RETRY_AFTER,
HTTP_HEADER_INDEX_SERVER,
HTTP_HEADER_INDEX_VARY,
HTTP_HEADER_INDEX_WWW_AUTHENTICATE,
// Response field end.
// Entity field start.
HTTP_HEADER_INDEX_ALLOW,
HTTP_HEADER_INDEX_CONTENT_ENCODING,
HTTP_HEADER_INDEX_CONTENT_LANGUAGE,
HTTP_HEADER_INDEX_CONTENT_LENGTH,
HTTP_HEADER_INDEX_CONTENT_LOCATION,
HTTP_HEADER_INDEX_CONTENT_MD5,
HTTP_HEADER_INDEX_CONTENT_RANGE,
HTTP_HEADER_INDEX_CONTENT_TYPE,
HTTP_HEADER_INDEX_EXPIRES,
HTTP_HEADER_INDEX_LAST_MODIFIED,
// Entity field end.
// Other field start.
HTTP_HEADER_INDEX_SET_COOKIE,
HTTP_HEADER_INDEX_COOKIE,
HTTP_HEADER_INDEX_X_FRAME_OPTIONS,
HTTP_HEADER_INDEX_X_XSS_PROTECTION,
HTTP_HEADER_INDEX_DNT,
HTTP_HEADER_INDEX_P3P
// Other field end.
} mbtk_http_header_index_e;
#endif
typedef enum {
HTTP_SESSION_STATE_NON = 0,
HTTP_SESSION_STATE_CONN,
HTTP_SESSION_STATE_WRITE_HEADER,
HTTP_SESSION_STATE_WRITE_CONTENT,
HTTP_SESSION_STATE_WRITE_END,
HTTP_SESSION_STATE_READ_HEADER,
HTTP_SESSION_STATE_READ_CONTENT,
HTTP_SESSION_STATE_READ_END
} http_session_state_e;
typedef enum {
MBTK_HTTP_STATE_CODE_200 = 200,
MBTK_HTTP_STATE_CODE_204 = 204,
MBTK_HTTP_STATE_CODE_206 = 206,
MBTK_HTTP_STATE_CODE_301 = 301,
MBTK_HTTP_STATE_CODE_302 = 302,
MBTK_HTTP_STATE_CODE_303 = 303,
MBTK_HTTP_STATE_CODE_304 = 304,
MBTK_HTTP_STATE_CODE_307 = 307,
MBTK_HTTP_STATE_CODE_400 = 400,
MBTK_HTTP_STATE_CODE_401 = 401,
MBTK_HTTP_STATE_CODE_403 = 403,
MBTK_HTTP_STATE_CODE_404 = 404,
MBTK_HTTP_STATE_CODE_500 = 500,
MBTK_HTTP_STATE_CODE_503 = 503
} mbtk_http_state_code_e;
typedef enum {
MBTK_HTTP_DATA_NON = 0,
MBTK_HTTP_DATA_HEADER,
MBTK_HTTP_DATA_CONTENT,
MBTK_HTTP_DATA_COMPLETE
} mbtk_http_data_type_enum;
typedef void (*mbtk_http_data_callback_func)(
int session_id, mbtk_http_data_type_enum type,
void *data,int data_len);
typedef struct mbtk_http_header {
char name[30];
char *value;
} mbtk_http_header_t;
typedef struct {
int header_cnt;
mbtk_http_header_t *req_h[HTTP_REQUEST_HEADER_MAX];
int content_len; // Post content lenght
int content_len_send; // Post content lenght for send.
char *content;
} mbtk_http_session_req_t;
typedef struct {
int state_code;
mbtk_http_version_enum version;
int content_length;
bool is_chunked;
int header_cnt;
mbtk_http_header_t *rsp_h[HTTP_RESPONSE_HEADER_MAX];
} mbtk_http_session_rsp_t;
typedef struct mbtk_http_session{
int handle_id;
int id;
int sock_fd;
int file_fd;
http_session_state_e state;
char host[MBTK_HTTP_HOST_MAX + 1];
mbtk_http_option_enum option;
mbtk_http_version_enum version;
char uri[MBTK_HTTP_URI_MAX + 1];
int port;
bool is_ssl;
bool ingnore_cert; //FALSE:need cert
mbtk_http_session_req_t req;
mbtk_http_session_rsp_t rsp;
} mbtk_http_session_t;
typedef struct mbtk_http_handle{
int id;
bool show_rsp_header;
mbtk_http_data_callback_func data_cb;
int session_cnt;
mbtk_http_session_t *session[HTTP_SESSION_MAX];
} mbtk_http_handle_t;
#if 0
typedef enum {
HTTP_MSG_SESSION_CREATE_REQ,
HTTP_MSG_SESSION_CREATE_RSP,
HTTP_MSG_SESSION_FREE_REQ,
HTTP_MSG_SESSION_FREE_RSP,
HTTP_MSG_SESSION_URL_SET_REQ,
HTTP_MSG_SESSION_URL_SET_RSP,
HTTP_MSG_SESSION_HEAD_SET_REQ,
HTTP_MSG_SESSION_HEAD_SET_RSP,
HTTP_MSG_SESSION_CONTENT_SET_REQ,
HTTP_MSG_SESSION_CONTENT_SET_RSP,
HTTP_MSG_SESSION_ACTION_REQ,
HTTP_MSG_SESSION_ACTION_RSP,
HTTP_MSG_SESSION_CONTENT_SEND_REQ,
HTTP_MSG_SESSION_CONTENT_SEND_RSP
} mbtk_http_msg_type_enum;
#endif
typedef enum {
HTTP_MSG_SESSION_CREATE,
HTTP_MSG_SESSION_FREE,
HTTP_MSG_SESSION_HEAD_SET,
HTTP_MSG_SESSION_CONTENT_SET,
HTTP_MSG_SESSION_ACTION,
HTTP_MSG_SESSION_CONTENT_SEND,
HTTP_MSG_HANDLE_EXIT
} mbtk_http_msg_type_enum;
typedef enum {
MBTK_HTTP_ERR_SUCCESS,
MBTK_HTTP_ERR_UNKNOWN
} mbtk_http_err_enum;
typedef struct {
mbtk_http_msg_type_enum type;
int int_arg1;
int int_arg2;
char str_small[30];
char str_large[HTTP_MSG_LEN_MAX];
} mbtk_http_msg_req_t;
typedef struct {
mbtk_http_msg_type_enum type;
mbtk_http_err_enum err;
mbtk_http_data_type_enum data_type;
int buff_len;
char buff[HTTP_MSG_LEN_MAX];
} mbtk_http_msg_rsp_t;
/*************************************************************
Extern variables
*************************************************************/
#if 0
const mbtk_http_header_field_t mbtk_http_headers[] = {
{HTTP_HEADER_INDEX_CACHE_CONTROL, HTTP_HEADER_GENERAL,"Cache-Control"},
{HTTP_HEADER_INDEX_CONNECTION, HTTP_HEADER_GENERAL,"Connection"},
{HTTP_HEADER_INDEX_DATE, HTTP_HEADER_GENERAL,"Date"},
{HTTP_HEADER_INDEX_PRAGMA, HTTP_HEADER_GENERAL,"Pragma"},
{HTTP_HEADER_INDEX_TRAILER, HTTP_HEADER_GENERAL,"Trailer"},
{HTTP_HEADER_INDEX_TRANSFER_ENCODING, HTTP_HEADER_GENERAL,"Transfer-Encoding"},
{HTTP_HEADER_INDEX_UPGRADE, HTTP_HEADER_GENERAL,"Upgrade"},
{HTTP_HEADER_INDEX_VIA, HTTP_HEADER_GENERAL,"Via"},
{HTTP_HEADER_INDEX_WARNING, HTTP_HEADER_GENERAL,"Warning"},
{HTTP_HEADER_INDEX_ACCEPT, HTTP_HEADER_REQUEST,"Accept"},
{HTTP_HEADER_INDEX_ACCEPT_CHARSET, HTTP_HEADER_REQUEST,"Accept-Charset"},
{HTTP_HEADER_INDEX_ACCEPT_ENCODING, HTTP_HEADER_REQUEST,"Accept-Encoding"},
{HTTP_HEADER_INDEX_ACCEPT_LANGUAGE, HTTP_HEADER_REQUEST,"Accept-Language"},
{HTTP_HEADER_INDEX_AUTHORIZATION, HTTP_HEADER_REQUEST,"Authorization"},
{HTTP_HEADER_INDEX_EXPECT, HTTP_HEADER_REQUEST,"Expect"},
{HTTP_HEADER_INDEX_FROM, HTTP_HEADER_REQUEST,"From"},
{HTTP_HEADER_INDEX_HOST, HTTP_HEADER_REQUEST,"Host"},
{HTTP_HEADER_INDEX_IF_MATCH, HTTP_HEADER_REQUEST,"If-Match"},
{HTTP_HEADER_INDEX_IF_MODIFIED_SINCE, HTTP_HEADER_REQUEST,"If-Modified-Since"},
{HTTP_HEADER_INDEX_IF_NONE_MATCH, HTTP_HEADER_REQUEST,"If-None-Match"},
{HTTP_HEADER_INDEX_IF_RANGE, HTTP_HEADER_REQUEST,"If-Range"},
{HTTP_HEADER_INDEX_IF_UNMODIFIED_SINCE, HTTP_HEADER_REQUEST,"If-Unmodified-Since"},
{HTTP_HEADER_INDEX_MAX_FORWARDS, HTTP_HEADER_REQUEST,"Max-Forwards"},
{HTTP_HEADER_INDEX_PROXY_AUTHORIZATION, HTTP_HEADER_REQUEST,"Proxy-Authorization"},
{HTTP_HEADER_INDEX_RANGE, HTTP_HEADER_REQUEST,"Range"},
{HTTP_HEADER_INDEX_REFERER, HTTP_HEADER_REQUEST,"Referer"},
{HTTP_HEADER_INDEX_TE, HTTP_HEADER_REQUEST,"TE"},
{HTTP_HEADER_INDEX_USER_AGENT, HTTP_HEADER_REQUEST,"User-Agent"},
{HTTP_HEADER_INDEX_ACCEPT_RANGES, HTTP_HEADER_RESPONSE,"Accept-Ranges"},
{HTTP_HEADER_INDEX_AGE, HTTP_HEADER_RESPONSE,"Age"},
{HTTP_HEADER_INDEX_ETAG, HTTP_HEADER_RESPONSE,"ETag"},
{HTTP_HEADER_INDEX_LOCATION, HTTP_HEADER_RESPONSE,"Location"},
{HTTP_HEADER_INDEX_PROXY_AUTHENTICATE, HTTP_HEADER_RESPONSE,"Proxy-Authenticate"},
{HTTP_HEADER_INDEX_RETRY_AFTER, HTTP_HEADER_RESPONSE,"Retry-After"},
{HTTP_HEADER_INDEX_SERVER, HTTP_HEADER_RESPONSE,"Server"},
{HTTP_HEADER_INDEX_VARY, HTTP_HEADER_RESPONSE,"Vary"},
{HTTP_HEADER_INDEX_WWW_AUTHENTICATE, HTTP_HEADER_RESPONSE,"WWW-Authenticate"},
{HTTP_HEADER_INDEX_ALLOW, HTTP_HEADER_ENTITY,"Allow"},
{HTTP_HEADER_INDEX_CONTENT_ENCODING, HTTP_HEADER_ENTITY,"Content-Encoding"},
{HTTP_HEADER_INDEX_CONTENT_LANGUAGE, HTTP_HEADER_ENTITY,"Content-Language"},
{HTTP_HEADER_INDEX_CONTENT_LENGTH, HTTP_HEADER_ENTITY,"Content-Length"},
{HTTP_HEADER_INDEX_CONTENT_LOCATION, HTTP_HEADER_ENTITY,"Content-Location"},
{HTTP_HEADER_INDEX_CONTENT_MD5, HTTP_HEADER_ENTITY,"Content-MD5"},
{HTTP_HEADER_INDEX_CONTENT_RANGE, HTTP_HEADER_ENTITY,"Content-Range"},
{HTTP_HEADER_INDEX_CONTENT_TYPE, HTTP_HEADER_ENTITY,"Content-Type"},
{HTTP_HEADER_INDEX_EXPIRES, HTTP_HEADER_ENTITY,"Expires"},
{HTTP_HEADER_INDEX_LAST_MODIFIED, HTTP_HEADER_ENTITY,"Last-Modified"},
{HTTP_HEADER_INDEX_SET_COOKIE, HTTP_HEADER_OTHERS,"Set-Cookie"},
{HTTP_HEADER_INDEX_COOKIE, HTTP_HEADER_OTHERS,"Cookie"},
{HTTP_HEADER_INDEX_X_FRAME_OPTIONS, HTTP_HEADER_OTHERS,"X-Frame-Options"},
{HTTP_HEADER_INDEX_X_XSS_PROTECTION, HTTP_HEADER_OTHERS,"X-XSS-Protection"},
{HTTP_HEADER_INDEX_DNT, HTTP_HEADER_OTHERS,"DNT"},
{HTTP_HEADER_INDEX_P3P, HTTP_HEADER_OTHERS,"P3P"}
};
#endif
/*************************************************************
Public Function Declaration
*************************************************************/
int mbtk_http_handle_get(bool show_rsp_header,mbtk_http_data_callback_func data_cb);
int mbtk_http_handle_free(int handle_id);
int mbtk_http_session_create(int handle_id, mbtk_http_option_enum option,
mbtk_http_version_enum version);
int mbtk_http_session_option_reset(int handle_id, int session_id, mbtk_http_option_enum option);
int mbtk_http_session_ingnore_cert_set(int handle_id, int session_id, bool ingnore_cert);
int mbtk_http_session_free(int handle_id,int session_id);
int mbtk_http_session_url_set(int handle_id,int session_id,void *url);
int mbtk_http_session_head_add(int handle_id,int session_id,
char *name, char *value);
int mbtk_http_session_content_set(int handle_id,int session_id,
char *content,uint32 content_len);
int mbtk_http_session_start(int handle_id,int session_id);
int mbtk_http_session_content_send(int handle_id,int session_id,
char *data,int data_len);
const mbtk_http_session_t* mbtk_http_session_get(int handle_id,int session_id);
#ifdef __cplusplus
}
#endif
#endif /* _MBTK_HTTP_2_H */