diff --git a/src/gquic_process.c b/src/gquic_process.c index 15f5074..5d433b1 100644 --- a/src/gquic_process.c +++ b/src/gquic_process.c @@ -14,7 +14,10 @@ #include "gquic_process.h" #include "quic_analysis.h" - +int is_quant() +{ + +} int is_iquic(enum _QUIC_VERSION quic_version) { switch(quic_version) @@ -471,31 +474,29 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con quic_version=parse_quic_header(pstream, _context, payload, payload_len, used_len); return quic_version; break; - case GQUIC_VERSION_Q044: - case GQUIC_VERSION_Q045: - case GQUIC_VERSION_Q048: - case GQUIC_VERSION_Q049: - case GQUIC_VERSION_Q050: - case GQUIC_VERSION_Q099: - 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)); - - _context->is_quic=TRUE; - _context->quic_info.quic_hdr.quic_version=quic_version; - return quic_version; - break; default: - if(is_iquic(quic_version)) + if( (quic_version==GQUIC_VERSION_Q044) || + (quic_version==GQUIC_VERSION_Q045) || + (quic_version==GQUIC_VERSION_Q099) || + (quic_version==PICOQUIC_VERSION_30) || + (quic_version==PQUIC_VERSION_PROX) || + (quic_version>=GQUIC_VERSION_Q048 && quic_version<=GQUIC_VERSION_Q050) || + (quic_version>=QUANT_VERSION_00 && quic_version<=QUANT_VERSION_FF) || + (quic_version>=QUIC_GO_VERSION_00 && quic_version<=QUIC_GO_VERSION_FF) || + (quic_version>=QUICLY_VERSION_00 && quic_version<=QUICLY_VERSION_FF) || + (quic_version>=MSQUIC_VERSION_00 && quic_version<=MSQUIC_VERSION_0F) || + (quic_version>=MOZQUIC_VERSION_00 && quic_version<=MOZQUIC_VERSION_0F) || + (quic_version>=MVFST_VERSION_00 && quic_version<=MVFST_VERSION_0F) || + (quic_version>=IQUIC_VERSION_I001 && quic_version<=IQUIC_VERSION_I032) + ) { - 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)); - + MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "QUIC", "version: 0x%x addr: %s", + quic_version, printaddr(&pstream->addr, pstream->threadnum)); + _context->is_quic=TRUE; _context->quic_info.quic_hdr.quic_version=quic_version; return quic_version; - } + } break; } diff --git a/src/gquic_process.h b/src/gquic_process.h index f05294f..e68ed8b 100644 --- a/src/gquic_process.h +++ b/src/gquic_process.h @@ -156,6 +156,13 @@ enum _QUIC_VERSION { QUIC_VERSION_UNKNOWN=0, + //NetApp + QUANT_VERSION_00=0x45474700, + QUANT_VERSION_FF=0x45474700, + + //Private Octopus + PICOQUIC_VERSION_30=0x50435130, + //google GQUIC_VERSION_Q001=0x51303031, GQUIC_VERSION_Q002=0x51303032, @@ -226,10 +233,27 @@ enum _QUIC_VERSION //Google Proxied QUIC PQUIC_VERSION_PROX=0x50524f58, - //GOQUIC_VERSION_GO=0x51474f[0-255], - //quicly - //QUICKLY_VERSION_QUICLY=0x91c170[0-255] + //quic-go + QUIC_GO_VERSION_00=0x51474F00, + QUIC_GO_VERSION_FF=0x51474FFF, + + //quicly + QUICLY_VERSION_00=0x91c17000, + QUICLY_VERSION_FF=0x91c170FF, + + //Microsoft + MSQUIC_VERSION_00=0xabcd0000, + MSQUIC_VERSION_0F=0xabcd000F, + + //Mozilla + MOZQUIC_VERSION_00=0xf123f0c0, + MOZQUIC_VERSION_0F=0xf123f0cF, + + //Facebook + MVFST_VERSION_00=0xfaceb000, + MVFST_VERSION_0F=0xfaceb00F, + //IETF IQUIC_VERSION_I001=0xFF000001, IQUIC_VERSION_I002=0xFF000002, diff --git a/src/quic_analysis.c b/src/quic_analysis.c index 8e5b11c..9c71ac4 100644 --- a/src/quic_analysis.c +++ b/src/quic_analysis.c @@ -263,7 +263,7 @@ extern "C" char QUIC_ENTRY(struct streaminfo *pstream, void**pme, int thread_seq break; } - if(ret&APP_STATE_DROPME|| pstream->opstate==OP_STATE_CLOSE) + if(ret&APP_STATE_DROPME || ret&APP_STATE_DROPPKT || pstream->opstate==OP_STATE_CLOSE) { quic_release_stream(pme, thread_seq); *pme=NULL; diff --git a/src/quic_version.cpp b/src/quic_version.cpp index 2e41b1d..f4a19ae 100644 --- a/src/quic_version.cpp +++ b/src/quic_version.cpp @@ -18,6 +18,54 @@ int quic_version_int2string(unsigned int version, char *buff, int buff_len) return 1; } + if(version>=QUANT_VERSION_00 && version<=QUANT_VERSION_FF) + { + snprintf(buff, buff_len, "NetApp QUANT %02d", (version&0x000000FF)); + return 1; + } + + if(version==PICOQUIC_VERSION_30) + { + snprintf(buff, buff_len, "Private Octopus"); + return 1; + } + + if(version==PQUIC_VERSION_PROX) + { + snprintf(buff, buff_len, "Proxied QUIC"); + return 1; + } + + if(version>=QUIC_GO_VERSION_00 && version<=QUIC_GO_VERSION_FF) + { + snprintf(buff, buff_len, "quic-go QGO %02d", (version&0x000000FF)); + return 1; + } + + if(version>=QUIC_GO_VERSION_00 && version<=QUIC_GO_VERSION_FF) + { + snprintf(buff, buff_len, "quicly qicly0 %02d", (version&0x000000FF)); + return 1; + } + + if(version>=MSQUIC_VERSION_00 && version<=MSQUIC_VERSION_0F) + { + snprintf(buff, buff_len, "Microsoft MsQuic %02d", (version&0x0000000F)); + return 1; + } + + if(version>=MOZQUIC_VERSION_00 && version<=MOZQUIC_VERSION_0F) + { + snprintf(buff, buff_len, "Mozilla MozQuic %02d", (version&0x0000000F)); + return 1; + } + + if(version>=MVFST_VERSION_00&& version<=MVFST_VERSION_0F) + { + snprintf(buff, buff_len, "Facebook mvfst %02d", (version&0x0000000F)); + return 1; + } + return 0; }