*.修改帧处理方式

*.删除同一流中多ID遍历模式
*.添加函数指针数组管理不同帧回调
*.添加流处理打印
This commit is contained in:
fengweihao
2019-03-29 15:37:18 +08:00
committed by zhengchao
parent fcde7bfbf3
commit ad004b29a6
8 changed files with 1655 additions and 1236 deletions

View File

@@ -19,7 +19,7 @@ typedef struct RTLogInit2Data_ {
char run_log_path[256];
void *run_log_handle;
void *handle;
} RTLogInit2Data;
typedef struct Http2Plugin_{
@@ -66,7 +66,7 @@ struct z_stream_st{
BrotliEncoderState *brenc_state;
};
RTLogInit2Data *rt_log_data();
RTLogInit2Data *logger();
Http2Plugin *http2_plugin();

View File

@@ -29,6 +29,7 @@ struct data_t
{
int gzip;
uint8_t flags;
ssize_t padlen;
struct z_stream_st *inflater;
struct z_stream_st *deflate;
struct evbuffer * evbuf_body;
@@ -42,6 +43,7 @@ struct header_data{
struct http2_headers{
int nvlen;
int complete;
uint8_t flag;
struct header_data *head, *tail;
};
@@ -59,6 +61,7 @@ struct http2_half_private
char * url_storage;
struct data_t body;
struct http2_headers headers;
struct http2_headers promised;
enum nghttp2_manage_stage body_state;
enum nghttp2_manage_stage message_state;
@@ -82,7 +85,10 @@ struct h2_stream_data_t{
int spd_set;
int spd_valid;
int rse_set;
int set_cnt;
int flag_end;
int spd_set_cnt;
int spd_cnt;
tfe_http_event spd_event;
struct http_frame_session_ctx *frame_ctx;
@@ -90,20 +96,16 @@ struct h2_stream_data_t{
struct http2_half_private *resp, *pangu_resp;
};
struct h2_run_id
{
int num;
int32_t id[128];
};
struct tfe_session_info_t
{
TAILQ_HEAD(list_head, h2_stream_data_t) list;
/* stream type**/
int state;
int goaway;
enum tfe_stream_action stream_action;
unsigned int thread_id;
struct h2_run_id h2_id;
/** for down stream as server */
nghttp2_session *as_server;
/** for up stream as client*/

View File

@@ -21,7 +21,7 @@ RTLogInit2Data logging_sc_lid = {
.run_log_level = 1,
};
RTLogInit2Data *rt_log_data()
RTLogInit2Data *logger()
{
return &logging_sc_lid;
};

View File

@@ -45,16 +45,16 @@ struct event_timer_ctx
void load_logging_conf(const char *config)
{
RTLogInit2Data *logging_sc_lid = rt_log_data();
RTLogInit2Data *logging_sc_lid = logger();
MESA_load_profile_int_def(config, (const char *)"http",(const char *)"loglevel",
&logging_sc_lid->run_log_level, 10);
MESA_load_profile_string_def(config, (const char *)"http",(const char *)"logfile",
logging_sc_lid->run_log_path, 128, "log/http2.log");
logging_sc_lid->run_log_handle = MESA_create_runtime_log_handle(logging_sc_lid->run_log_path, logging_sc_lid->run_log_level);
if(logging_sc_lid->run_log_handle == NULL){
TFE_LOG_ERROR(logging_sc_lid->run_log_handle, "Create log runtime_log_handle error, init failed!");
logging_sc_lid->handle = MESA_create_runtime_log_handle(logging_sc_lid->run_log_path, logging_sc_lid->run_log_level);
if(logging_sc_lid->handle == NULL){
TFE_LOG_ERROR(logging_sc_lid->handle, "Create log runtime_log_handle error, init failed!");
}
return;
}
@@ -87,7 +87,7 @@ http2_plugin_init(struct tfe_proxy * proxy)
struct event * event = event_new(ev_base, -1, EV_PERSIST, http2_plugin_timer_gc_cb, &session_info);
if (unlikely(event == NULL)){
TFE_LOG_ERROR(rt_log_data()->run_log_handle, "Create timer error, init failed!");
TFE_LOG_ERROR(logger()->handle, "Create timer error, init failed!");
}
evtimer_add(event, &timer);

File diff suppressed because it is too large Load Diff

View File

@@ -236,9 +236,9 @@ TEST(Http2StreamParser, GetFrameWithHeader_02)
EXPECT_GT(readlen, 0);
/*Send data message**/
enum tfe_stream_action stream_action = ACTION_FORWARD_DATA;
stream_action = nghttp2_client_mem_send(session_info);
EXPECT_EQ(stream_action, ACTION_DROP_DATA);
//enum tfe_stream_action stream_action = ACTION_FORWARD_DATA;
//stream_action = nghttp2_client_mem_send(session_info);
//EXPECT_EQ(stream_action, ACTION_DROP_DATA);
}
TEST(Http2StreamParser, RespFrameWithHead_01)
@@ -261,9 +261,9 @@ TEST(Http2StreamParser, RespFrameWithHead_01)
EXPECT_GT(readlen, 0);
/*Send data head message**/
enum tfe_stream_action stream_action = ACTION_FORWARD_DATA;
stream_action = nghttp2_client_mem_send(session_info);
EXPECT_EQ(stream_action, ACTION_DROP_DATA);
//enum tfe_stream_action stream_action = ACTION_FORWARD_DATA;
//stream_action = nghttp2_client_mem_send(session_info);
//EXPECT_EQ(stream_action, ACTION_DROP_DATA);
/*Recv response settings*/
readlen = nghttp2_session_mem_recv(session_info->as_client, response_settings, sizeof(response_settings));

View File

@@ -81,7 +81,7 @@ set_property(TARGET http-parser-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${
ExternalProject_Add(nghttp2
PREFIX nghttp2
URL ${CMAKE_CURRENT_SOURCE_DIR}/nghttp2-1.24.0.tar.gz
URL_MD5 1bf8209fc10da2d46012b03a158e6693
URL_MD5 66d78a8b968d78ffa34b219a571a39b6
CONFIGURE_COMMAND ./configure --prefix=<INSTALL_DIR> --disable-shared
BUILD_IN_SOURCE 1)

Binary file not shown.