diff options
Diffstat (limited to 'src/quic_entry.cpp')
| -rw-r--r-- | src/quic_entry.cpp | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/src/quic_entry.cpp b/src/quic_entry.cpp index dfa5566..7fbed33 100644 --- a/src/quic_entry.cpp +++ b/src/quic_entry.cpp @@ -6,9 +6,11 @@ */ #include <stdio.h> -#include <MESA/stream_inc/stream_base.h> -#include <MESA/MESA_handle_logger.h> + +#include <MESA/stream.h> #include <MESA/MESA_prof_load.h> +#include <MESA/MESA_handle_logger.h> + #include "quic.h" #include "quic_entry.h" #include "quic_process.h" @@ -141,44 +143,44 @@ void quic_free_client_hello(struct quic_client_hello *client_hello, int thread_s return ; } -void quic_free_context(void** pme, int thread_seq) +void quic_free_context(const struct streaminfo *a_stream, int bridge_id, void *data) { - if(NULL==*pme) + if(NULL!=data) { - return ; + struct quic_context *context = (struct quic_context *)data; + quic_free_client_hello(context->quic_info.client_hello, a_stream->threadnum); + + dictator_free(a_stream->threadnum, data); } - - struct quic_context *context = (struct quic_context *)*pme; - quic_free_client_hello(context->quic_info.client_hello, thread_seq); - - dictator_free(thread_seq, *pme); - *pme=NULL; - - return; } -extern "C" unsigned char QUIC_ENTRY(struct streaminfo *pstream, void**pme, int thread_seq, void *a_packet) +extern "C" unsigned char QUIC_ENTRY(const struct streaminfo *pstream, void**pme, int thread_seq, const void *a_packet) { - unsigned char state=0; - struct quic_context *context=(struct quic_context *)*pme; - if((g_quic_param.quic_interested_region_flag<QUIC_KEY) || (!is_quic_port(pstream))) { return APP_STATE_DROPME; } - if(*pme==NULL) + if(pstream->opstate==OP_STATE_PENDING) { - quic_init_context(pme, thread_seq); - context=(struct quic_context *)*pme; + *pme=stream_bridge_async_data_get(pstream, g_quic_param.context_bridge_id); + if(*pme==NULL) + { + *pme=dictator_malloc(thread_seq, sizeof(struct quic_context)); + memset(*pme, 0, sizeof(struct quic_context)); + } } + + unsigned char state=0; + struct quic_context *context=(struct quic_context *)*pme; state=quic_analyze_entry(pstream, context, thread_seq, a_packet); if(state&APP_STATE_DROPME || pstream->opstate==OP_STATE_CLOSE) { quic_call_business_plug(pstream, context, NULL, 0, QUIC_INTEREST_KEY_MASK, a_packet); - quic_free_context(pme, thread_seq); + quic_free_context(pstream, g_quic_param.context_bridge_id, *pme); + stream_bridge_async_data_put(pstream, g_quic_param.context_bridge_id, NULL); *pme=NULL; return state; } @@ -230,7 +232,7 @@ extern "C" int QUIC_INIT(void) return -1; } - strncpy(g_quic_param.quic_conf_regionname[region_id], region_name, strlen(region_name)); + memcpy(g_quic_param.quic_conf_regionname[region_id], region_name, MIN(sizeof(g_quic_param.quic_conf_regionname[region_id])-1, strlen(region_name))); g_quic_param.quic_region_cnt++; memset(region_name, 0, sizeof(region_name)); } @@ -243,6 +245,9 @@ extern "C" int QUIC_INIT(void) return -1; } + g_quic_param.context_bridge_id=stream_bridge_build("QUIC_CONTEXT", "w"); + stream_bridge_register_data_free_cb(g_quic_param.context_bridge_id, quic_free_context); + return 0; } |
