|
|
|
|
@@ -122,18 +122,18 @@ static int gquic_pkn_bit2length(unsigned char bit_value)
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int copy_extension_tag(const char *tag_start_pos, int tag_len, struct qstring *out, int thread_seq)
|
|
|
|
|
static int copy_extension_tag(const char *tag_start_pos, int tag_len, qstring *out, int thread_seq)
|
|
|
|
|
{
|
|
|
|
|
if(tag_start_pos!=NULL && tag_len>0)
|
|
|
|
|
{
|
|
|
|
|
if(out->str!=NULL)
|
|
|
|
|
if(out->iov_base!=NULL)
|
|
|
|
|
{
|
|
|
|
|
FREE(out->str);
|
|
|
|
|
FREE(out->iov_base);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
out->str=(char *)CALLOC(1, tag_len+1);
|
|
|
|
|
memcpy((void *)out->str, tag_start_pos, tag_len);
|
|
|
|
|
out->str_len = tag_len;
|
|
|
|
|
out->iov_base=CALLOC(1, tag_len+1);
|
|
|
|
|
memcpy((void *)out->iov_base, tag_start_pos, tag_len);
|
|
|
|
|
out->iov_len = tag_len;
|
|
|
|
|
|
|
|
|
|
return tag_len;
|
|
|
|
|
}
|
|
|
|
|
@@ -810,8 +810,8 @@ void quic_analyze_entry(struct session *sess, const struct quic_param *g_quic_pl
|
|
|
|
|
if(0 == qcontext->msg_state[QUIC_VERSION]
|
|
|
|
|
|| 0 == qcontext->msg_state[QUIC_SNI]
|
|
|
|
|
|| 0 == qcontext->msg_state[QUIC_USER_AGENT]){
|
|
|
|
|
if(NULL == qcontext->quic_info.sni.str
|
|
|
|
|
|| NULL == qcontext->quic_info.user_agent.str){
|
|
|
|
|
if(NULL == qcontext->quic_info.sni.iov_base
|
|
|
|
|
|| NULL == qcontext->quic_info.user_agent.iov_base){
|
|
|
|
|
parse_res = parse_quic_all_version(g_quic_plugin_env, &(qcontext->quic_info), payload, payload_len, thread_seq);
|
|
|
|
|
if(PARSE_RESULT_VERSION == parse_res){
|
|
|
|
|
push_payload = 1;
|
|
|
|
|
@@ -823,12 +823,12 @@ void quic_analyze_entry(struct session *sess, const struct quic_param *g_quic_pl
|
|
|
|
|
quic_session_mq_publish_message_safe(sess, g_quic_plugin_env->quic_topic_id, qmsg);
|
|
|
|
|
qcontext->msg_state[QUIC_VERSION] = 1;
|
|
|
|
|
}
|
|
|
|
|
if((0 == qcontext->msg_state[QUIC_SNI]) && qcontext->quic_info.sni.str){
|
|
|
|
|
if((0 == qcontext->msg_state[QUIC_SNI]) && qcontext->quic_info.sni.iov_base){
|
|
|
|
|
qmsg = quic_create_message(QUIC_SNI, qcontext);
|
|
|
|
|
quic_session_mq_publish_message_safe(sess, g_quic_plugin_env->quic_topic_id, qmsg);
|
|
|
|
|
qcontext->msg_state[QUIC_SNI] = 1;
|
|
|
|
|
}
|
|
|
|
|
if((0 == qcontext->msg_state[QUIC_USER_AGENT]) && qcontext->quic_info.user_agent.str){
|
|
|
|
|
if((0 == qcontext->msg_state[QUIC_USER_AGENT]) && qcontext->quic_info.user_agent.iov_base){
|
|
|
|
|
qmsg = quic_create_message(QUIC_USER_AGENT, qcontext);
|
|
|
|
|
quic_session_mq_publish_message_safe(sess, g_quic_plugin_env->quic_topic_id, qmsg);
|
|
|
|
|
qcontext->msg_state[QUIC_USER_AGENT] =1;
|
|
|
|
|
@@ -837,8 +837,8 @@ void quic_analyze_entry(struct session *sess, const struct quic_param *g_quic_pl
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(push_payload){
|
|
|
|
|
qcontext->quic_info.payload.str = payload;
|
|
|
|
|
qcontext->quic_info.payload.str_len = payload_len;
|
|
|
|
|
qcontext->quic_info.payload.iov_base = (void *)payload;
|
|
|
|
|
qcontext->quic_info.payload.iov_len = payload_len;
|
|
|
|
|
qmsg = quic_create_message(QUIC_PAYLOAD, qcontext);
|
|
|
|
|
quic_session_mq_publish_message_safe(sess, g_quic_plugin_env->quic_topic_id, qmsg);
|
|
|
|
|
}
|
|
|
|
|
@@ -883,29 +883,29 @@ void quic_message_get_version(const struct quic_message *msg, unsigned int *resu
|
|
|
|
|
*result = msg->qctx->quic_info.quic_version;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void quic_message_get_sni(const struct quic_message *msg, struct qstring *result)
|
|
|
|
|
void quic_message_get_sni(const struct quic_message *msg, qstring *result)
|
|
|
|
|
{
|
|
|
|
|
assert(QUIC_MSG_HDR_MAGIC == msg->magic);
|
|
|
|
|
if(result){
|
|
|
|
|
result->str = msg->qctx->quic_info.sni.str;
|
|
|
|
|
result->str_len = msg->qctx->quic_info.sni.str_len;
|
|
|
|
|
result->iov_base = msg->qctx->quic_info.sni.iov_base;
|
|
|
|
|
result->iov_len = msg->qctx->quic_info.sni.iov_len;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void quic_message_get_user_agent(const struct quic_message *msg, struct qstring *result)
|
|
|
|
|
void quic_message_get_user_agent(const struct quic_message *msg, qstring *result)
|
|
|
|
|
{
|
|
|
|
|
assert(QUIC_MSG_HDR_MAGIC == msg->magic);
|
|
|
|
|
if(result){
|
|
|
|
|
result->str = msg->qctx->quic_info.user_agent.str;
|
|
|
|
|
result->str_len = msg->qctx->quic_info.user_agent.str_len;
|
|
|
|
|
result->iov_base = msg->qctx->quic_info.user_agent.iov_base;
|
|
|
|
|
result->iov_len = msg->qctx->quic_info.user_agent.iov_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void quic_message_get_payload(const struct quic_message *msg, struct qstring *result)
|
|
|
|
|
void quic_message_get_payload(const struct quic_message *msg, qstring *result)
|
|
|
|
|
{
|
|
|
|
|
assert(QUIC_MSG_HDR_MAGIC == msg->magic);
|
|
|
|
|
if(result){
|
|
|
|
|
result->str = msg->qctx->quic_info.payload.str;
|
|
|
|
|
result->str_len = msg->qctx->quic_info.payload.str_len;
|
|
|
|
|
result->iov_base = msg->qctx->quic_info.payload.iov_base;
|
|
|
|
|
result->iov_len = msg->qctx->quic_info.payload.iov_len;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|