feat: add history and lastest different version test stage; decoder result use struct iovec.

This commit is contained in:
lijia
2024-06-24 18:37:07 +08:00
parent 82cd2ced07
commit fba00d59cb
18 changed files with 153 additions and 126 deletions

View File

@@ -12,4 +12,4 @@ set_target_properties(${lib_name} PROPERTIES PREFIX "")
target_link_libraries(${lib_name} ${DNS_DEPEND_DYN_LIB} pthread -Wl,--no-whole-archive openssl-crypto-static -Wl,--no-whole-archive openssl-ssl-static)
set_target_properties(${lib_name} PROPERTIES OUTPUT_NAME ${lib_name})
install(TARGETS ${lib_name} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/plug/protocol/quic COMPONENT LIBRARIES)
install(TARGETS ${lib_name} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/sapp/stellar_plugin/quic COMPONENT LIBRARIES)

View File

@@ -112,11 +112,11 @@ static int parse_quic_port(char *port_list, unsigned short *quic_port, int quic_
static void free_quicinfo(struct quic_info *quic_info)
{
if(quic_info->sni.str)
FREE(quic_info->sni.str);
if(quic_info->sni.iov_base)
FREE(quic_info->sni.iov_base);
if(quic_info->user_agent.str)
FREE(quic_info->user_agent.str);
if(quic_info->user_agent.iov_base)
FREE(quic_info->user_agent.iov_base);
return ;
}

View File

@@ -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;
}
}

View File

@@ -288,9 +288,9 @@ enum QUIC_VERSION_T
struct quic_info
{
unsigned int quic_version;
struct qstring sni;
struct qstring user_agent;
struct qstring payload;
qstring sni;
qstring user_agent;
qstring payload;
// struct quic_client_hello *client_hello;
};