From 409501cd5b56dea2f070ec900b681bf6da11fac9 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Fri, 6 Nov 2020 18:10:42 +0600 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81IQUIC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gquic_process.c | 98 ++++++++++++++++++++++++++++++-------------- src/gquic_process.h | 47 +++++++++++---------- src/quic_version.cpp | 12 ++++-- 3 files changed, 99 insertions(+), 58 deletions(-) diff --git a/src/gquic_process.c b/src/gquic_process.c index 74ce322..e8ccd86 100644 --- a/src/gquic_process.c +++ b/src/gquic_process.c @@ -14,6 +14,52 @@ #include "gquic_process.h" #include "quic_analysis.h" + +int is_iquic(enum _QUIC_VERSION quic_version) +{ + switch(quic_version) + { + case IQUIC_VERSION_I001: + case IQUIC_VERSION_I002: + case IQUIC_VERSION_I003: + case IQUIC_VERSION_I004: + case IQUIC_VERSION_I005: + case IQUIC_VERSION_I006: + case IQUIC_VERSION_I007: + case IQUIC_VERSION_I008: + case IQUIC_VERSION_I009: + case IQUIC_VERSION_I010: + case IQUIC_VERSION_I011: + case IQUIC_VERSION_I012: + case IQUIC_VERSION_I013: + case IQUIC_VERSION_I014: + case IQUIC_VERSION_I015: + case IQUIC_VERSION_I016: + case IQUIC_VERSION_I017: + case IQUIC_VERSION_I018: + case IQUIC_VERSION_I019: + case IQUIC_VERSION_I020: + case IQUIC_VERSION_I021: + case IQUIC_VERSION_I022: + case IQUIC_VERSION_I023: + case IQUIC_VERSION_I024: + case IQUIC_VERSION_I025: + case IQUIC_VERSION_I026: + case IQUIC_VERSION_I027: + case IQUIC_VERSION_I028: + case IQUIC_VERSION_I029: + case IQUIC_VERSION_I030: + case IQUIC_VERSION_I031: + case IQUIC_VERSION_I032: + return TRUE; + break; + default: + break; + } + + return FALSE; +} + int quic_getLinkState(struct _quic_context *_context) { UCHAR state = 0; @@ -405,7 +451,11 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con if(_context->quic_info.quic_hdr.quic_version!=QUIC_VERSION_UNKNOWN) { - // + if(is_iquic((enum _QUIC_VERSION)(_context->quic_info.quic_hdr.quic_version))) + { + return (enum _QUIC_VERSION)(_context->quic_info.quic_hdr.quic_version); + } + quic_version=(enum _QUIC_VERSION)(_context->quic_info.quic_hdr.quic_version); } else @@ -426,36 +476,7 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con case GQUIC_VERSION_Q049: case GQUIC_VERSION_Q050: case GQUIC_VERSION_Q099: - case IQUIC_VERSION_I001: - case IQUIC_VERSION_I002: - case IQUIC_VERSION_I003: - case IQUIC_VERSION_I004: - case IQUIC_VERSION_I005: - case IQUIC_VERSION_I006: - case IQUIC_VERSION_I007: - case IQUIC_VERSION_I008: - case IQUIC_VERSION_I009: - case IQUIC_VERSION_I010: - case IQUIC_VERSION_I011: - case IQUIC_VERSION_I012: - case IQUIC_VERSION_I013: - case IQUIC_VERSION_I014: - case IQUIC_VERSION_I015: - case IQUIC_VERSION_I016: - case IQUIC_VERSION_I017: - case IQUIC_VERSION_I018: - case IQUIC_VERSION_I019: - case IQUIC_VERSION_I020: - case IQUIC_VERSION_I021: - case IQUIC_VERSION_I032: - case IQUIC_VERSION_I023: - case IQUIC_VERSION_I024: - case IQUIC_VERSION_I025: - case IQUIC_VERSION_I026: - case IQUIC_VERSION_I027: - case IQUIC_VERSION_I028: - case IQUIC_VERSION_I029: - MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "QUIC_UNSUPPORT", "version: Q%03u addr: %s", + MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "GQUIC", "version: Q%03u addr: %s", (((quic_version>>8)&0x0000000F)*10) + ((quic_version)&0x0000000F), printaddr(&pstream->addr, pstream->threadnum)); @@ -464,6 +485,16 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con return quic_version; break; default: + if(is_iquic(quic_version)) + { + MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "IQUIC", "version: I%03u addr: %s", + (((quic_version>>16)&0x000000FF)*10) + (((quic_version>>8)&0x000000FF)*10) + ((quic_version)&0x000000FF), + printaddr(&pstream->addr, pstream->threadnum)); + + _context->is_quic=TRUE; + _context->quic_info.quic_hdr.quic_version=quic_version; + return quic_version; + } break; } @@ -886,6 +917,11 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int ret=parse_gquic_Q046(pstream, _context, a_packet, (char *)udp_detail->pdata, udp_detail->datalen, &used_len); break; default: + ret=quic_callPlugins(pstream, _context, (char *)udp_detail->pdata, udp_detail->datalen, QUIC_APPLICATION_DATA_MASK, a_packet); + if(ret&APP_STATE_DROPME | ret&APP_STATE_DROPPKT) + { + return ret; + } break; } diff --git a/src/gquic_process.h b/src/gquic_process.h index 67d355c..07d547f 100644 --- a/src/gquic_process.h +++ b/src/gquic_process.h @@ -240,30 +240,29 @@ enum _QUIC_VERSION IQUIC_VERSION_I007=0xFF000007, IQUIC_VERSION_I008=0xFF000008, IQUIC_VERSION_I009=0xFF000009, - IQUIC_VERSION_I010=0xFF000010, - IQUIC_VERSION_I011=0xFF000011, - IQUIC_VERSION_I012=0xFF000012, - IQUIC_VERSION_I013=0xFF000013, - IQUIC_VERSION_I014=0xFF000014, - IQUIC_VERSION_I015=0xFF000015, - IQUIC_VERSION_I016=0xFF000016, - IQUIC_VERSION_I017=0xFF000017, - IQUIC_VERSION_I018=0xFF000018, - IQUIC_VERSION_I019=0xFF000019, - IQUIC_VERSION_I020=0xFF000020, - IQUIC_VERSION_I021=0xFF000021, - IQUIC_VERSION_I032=0xFF000022, - IQUIC_VERSION_I023=0xFF000023, - IQUIC_VERSION_I024=0xFF000024, - IQUIC_VERSION_I025=0xFF000025, - IQUIC_VERSION_I026=0xFF000026, - IQUIC_VERSION_I027=0xFF000027, - IQUIC_VERSION_I028=0xFF000028, - IQUIC_VERSION_I029=0xFF000029 - - - - + IQUIC_VERSION_I010=0xFF00000A, + IQUIC_VERSION_I011=0xFF00000B, + IQUIC_VERSION_I012=0xFF00000C, + IQUIC_VERSION_I013=0xFF00000D, + IQUIC_VERSION_I014=0xFF00000E, + IQUIC_VERSION_I015=0xFF00000F, + IQUIC_VERSION_I016=0xFF000010, + IQUIC_VERSION_I017=0xFF000011, + IQUIC_VERSION_I018=0xFF000012, + IQUIC_VERSION_I019=0xFF000013, + IQUIC_VERSION_I020=0xFF000014, + IQUIC_VERSION_I021=0xFF000015, + IQUIC_VERSION_I022=0xFF000016, + IQUIC_VERSION_I023=0xFF000017, + IQUIC_VERSION_I024=0xFF000018, + IQUIC_VERSION_I025=0xFF000019, + IQUIC_VERSION_I026=0xFF00001A, + IQUIC_VERSION_I027=0xFF00001B, + IQUIC_VERSION_I028=0xFF00001C, + IQUIC_VERSION_I029=0xFF00001D, + IQUIC_VERSION_I030=0xFF00001E, + IQUIC_VERSION_I031=0xFF00001F, + IQUIC_VERSION_I032=0xFF000020 }; struct _quic_context diff --git a/src/quic_version.cpp b/src/quic_version.cpp index 569172f..2e41b1d 100644 --- a/src/quic_version.cpp +++ b/src/quic_version.cpp @@ -6,12 +6,18 @@ int quic_version_int2string(unsigned int version, char *buff, int buff_len) { - if(version>0 && version<=GQUIC_VERSION_Q099) + if(version>=GQUIC_VERSION_Q001 && version<=GQUIC_VERSION_Q099) { snprintf(buff, buff_len, "Google QUIC %02d", (((version>>8)&0x0000000F)*10) + (version&0x0000000F)); - return 0; + return 1; } - return -1; + if(version>=IQUIC_VERSION_I001 && version<=IQUIC_VERSION_I032) + { + snprintf(buff, buff_len, "IETF QUIC %02d", (((version>>16)&0x000000FF)*10) + (((version>>8)&0x000000FF)*10) + (version&0x000000FF)); + return 1; + } + + return 0; }