#ifndef HTTP_H_ #define HTTP_H_ //20160905 add http_line2region //20191112 add http_host_parser function //20191205 add http_line2value function #define HTTP_H_VERSION_4_20191205 0 //#define HTTP_H_VERSION_4_20191112 0 //#define HTTP_H_VERSION_4_20160905 0 //#define HTTP_H_VERSION_3_20150321 0 #ifndef uchar typedef unsigned char uchar; #endif #ifndef int64 typedef long long int64; #endif #ifndef uint8 typedef unsigned char uint8; #endif #ifndef uint64 typedef unsigned long long uint64; #endif #ifndef uint32 typedef unsigned int uint32; #endif #ifndef uint16 typedef unsigned short uint16; #endif /*interest region*/ typedef enum { /*#http_special1*/ HTTP_INTEREST_KEY_MASK=0, HTTP_ALL_MASK, HTTP_OTHER_REGIONS_MASK, HTTP_STATE_MASK, HTTP_REQ_LINE_MASK, HTTP_RES_LINE_MASK, HTTP_CONTENT_MASK, HTTP_UNGZIP_CONTENT_MASK, HTTP_MESSAGE_URL_MASK, HTTP_URI_MASK, /*#http_request*/ HTTP_HOST_MASK, HTTP_REFERER_MASK, HTTP_USER_AGENT_MASK, HTTP_COOKIE_MASK, HTTP_PROXY_AUTHORIZATION_MASK, HTTP_AUTHORIZATION_MASK, /*#http_response*/ HTTP_LOCATION_MASK, HTTP_SERVER_MASK, HTTP_ETAG_MASK, /*#http_general*/ HTTP_DATE_MASK, HTTP_TRAILER_MASK, HTTP_TRANSFER_ENCODING_MASK, HTTP_VIA_MASK, HTTP_PRAGMA_MASK, HTTP_CONNECTION_MASK, /*#http_content*/ HTTP_CONT_ENCODING_MASK, HTTP_CONT_LANGUAGE_MASK, HTTP_CONT_LOCATION_MASK, HTTP_CONT_DISPOSITION_MASK, HTTP_CONT_RANGE_MASK, HTTP_CONT_LENGTH_MASK, HTTP_CONT_TYPE_MASK, HTTP_CHARSET_MASK, HTTP_EXPIRES_MASK, HTTP_X_FLASH_VERSION_MASK, HTTP_TRANSFER_LENGTH_MASK, HTTP_REGION_NUM=36, }interested_region_mask; /*HTTP_REGION_NUM=36*/ #define HTTP_INTEREST_KEY ((long long)1<0: 该buf是HTTP协议数据,并解析出host域名, 返回host的长度 * 0: 该buf是HTTP协议数据,但没有解析出host域名 * -1: 该buf不是HTTP协议数据 *测试 demo: * 参见HTTP_Parser.c中 http_host_parser_test */ int http_host_parser(const char* buf, uint32 buflen, int http_dir, char** host); /* * 功能说明: * 对一块数据进行HTTP头部字段解析,判断是否是HTTP协议,并返回该buf解析后的HTTP头部字段 * 参数说明: * buf: 输入数据 (必须是单个HTTP连接的数据,不支持一个HTTP连接数据多次解析,也不支持buf里面有多个http连接的数据) * buflen: 输入数据的长度 * http_dir: 输入buf的流方向,DIR_C2S or DIR_S2C * 返回值result: * !=NULL: 该buf是HTTP协议数据,并解析出头部字段 * NULL: 该buf不是HTTP协议数据 */ void *http_field_parser(const char* buf, uint32 buflen, int http_dir); // return length of field_value, field_flag=(HTTP_HOST/HTTP_MESSAGE_URL/...) int http_get_filed_result(void *result, long long field_flag, char **field_value); void http_free_filed_result(void *result); #ifdef __cplusplus } #endif #endif