From 4782225f29b6f80ee023297d0a0726c6c798e3d7 Mon Sep 17 00:00:00 2001 From: 李佳 Date: Wed, 10 Jul 2024 06:58:33 +0000 Subject: Initial commit --- test/quic_decoder_test_plug.cpp | 131 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 test/quic_decoder_test_plug.cpp (limited to 'test/quic_decoder_test_plug.cpp') diff --git a/test/quic_decoder_test_plug.cpp b/test/quic_decoder_test_plug.cpp new file mode 100644 index 0000000..39363e0 --- /dev/null +++ b/test/quic_decoder_test_plug.cpp @@ -0,0 +1,131 @@ +/* + * author:yangwei + * create time:2021-8-21 + * + */ +#include +#include +#include +#include +#include +#include "cJSON.h" + +#ifdef __cplusplus +extern "C" +{ +#endif +#include "quic_decoder.h" +#include +#include +#include +#include + +extern "C" int commit_test_result_json(cJSON *node, const char *name); +extern int quic_version_int2string(unsigned int version, char *buff, int buff_len); + +static int g_result_count = 1; + +#if 0 +#define DEBUG_PRINT(fmt, args...) fprintf(stderr, fmt, ##args) +#else +#define DEBUG_PRINT(fmt, args...) +#endif + +struct quic_gtest_context +{ + cJSON *json_root; + int version_get; + int tuple4_get; +}; + +static void cJSON_Add_QStringToObject(cJSON * object, const char *name, const char* qstring, size_t len) +{ + char *tmp = (char *)calloc(1, len + 1); + memcpy(tmp, qstring, len); + cJSON_AddStringToObject(object, name, tmp); +} + +extern "C" void QUIC_TEST_PLUG_ENTRY(struct session *sess, int topic_id, const void *msg, void *per_session_ctx, void *plugin_env) +{ + struct quic_gtest_context *qctx = (struct quic_gtest_context *)per_session_ctx; + struct quic_message *qmsg = (struct quic_message *)msg; + enum quic_message_type mtype = quic_message_type_get(qmsg); + char *result = NULL; + size_t res_len = 0; + enum session_state sstate = session_get_current_state(sess); + + DEBUG_PRINT("### QUIC_TEST_PLUG_ENTRY: msg type=%d\n", (int)mtype); + + if(QUIC_CLIENT_HELLO == mtype){ + if(qctx->tuple4_get == 0){ + cJSON_AddStringToObject(qctx->json_root, "Tuple4", session_get0_readable_addr(sess)); + qctx->tuple4_get = 1; + } + + if(qctx->version_get == 0){ + const char *version_str = quic_message_readable_version_get0(qmsg); + if(version_str){ + cJSON_AddStringToObject(qctx->json_root, "VERSION", version_str); + qctx->version_get = 1; + } + } + + quic_message_sni_get0(qmsg, &result, &res_len); + if(result){ + cJSON_Add_QStringToObject(qctx->json_root, "SNI", result, res_len); + } + + quic_message_user_agent_get0(qmsg, &result, &res_len); + if(result){ + cJSON_Add_QStringToObject(qctx->json_root, "UA", result, res_len); + } + } + + if(sstate == SESSION_STATE_CLOSING){ + //some sapp version not support SESSION_STATE_CLOSING, do this in free_cb() + } + + return ; +} + +extern "C" void *quic_gtest_plug_session_ctx_new_cb(struct session *sess, void *plugin_env) +{ + struct quic_gtest_context *ctx = (struct quic_gtest_context *)calloc(1, sizeof(struct quic_gtest_context)); + ctx->json_root = cJSON_CreateObject(); + return ctx; +} + +extern "C" void quic_gtest_session_ctx_free_cb(struct session *sess, void *session_ctx, void *plugin_env) +{ + struct quic_gtest_context *qctx = (struct quic_gtest_context *)session_ctx; + if(qctx->tuple4_get || qctx->version_get){ + char result_name[16]=""; + sprintf(result_name,"QUIC_RESULT_%d", g_result_count); + commit_test_result_json(qctx->json_root, result_name); + g_result_count+=1; + } + free(session_ctx); +} + +extern "C" void *QUIC_TEST_PLUG_INIT(struct stellar *st) +{ + void *fake_quic_gtest_plugin_env = (void *)"_fake_plugin_env_"; + int quic_gtest_plug_id = stellar_session_plugin_register(st, quic_gtest_plug_session_ctx_new_cb, quic_gtest_session_ctx_free_cb, fake_quic_gtest_plugin_env); + int quic_topic_id = stellar_session_mq_get_topic_id(st, QUIC_DECODER_TOPIC); + assert(quic_topic_id >= 0); + stellar_session_mq_subscribe(st, quic_topic_id, QUIC_TEST_PLUG_ENTRY, quic_gtest_plug_id); + + return fake_quic_gtest_plugin_env; +} + +extern "C" void QUIC_TEST_PLUG_DESTROY(void *plugin_env) +{ + return ; +} + +#ifdef __cplusplus +} +#endif + + + -- cgit v1.2.3