From 132a4957566ec702b8e4f871b539251879fee648 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Sat, 4 Sep 2021 19:55:07 +0800 Subject: [PATCH] =?UTF-8?q?TSG-7634:=20=E6=94=AF=E6=8C=81=E8=A7=A3?= =?UTF-8?q?=E6=9E=90gquic=2023/34/37/41/44=E7=9A=84SNI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gquic_process.cpp | 51 ++++++++++++++++++++++++++++++------------- src/gquic_process.h | 4 ++-- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/gquic_process.cpp b/src/gquic_process.cpp index 107a47c..6eb33d2 100644 --- a/src/gquic_process.cpp +++ b/src/gquic_process.cpp @@ -548,18 +548,21 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con switch(quic_version) // +1 meaning: skip public flags { + case GQUIC_VERSION_Q044: + case GQUIC_VERSION_Q045: case GQUIC_VERSION_Q046: + case GQUIC_VERSION_Q047: + case GQUIC_VERSION_Q048: quic_version=parse_quic_header(pstream, _context, payload, payload_len, used_len); return quic_version; break; default: - if( (quic_version==GQUIC_VERSION_Q044) || - (quic_version==GQUIC_VERSION_Q045) || + if( (quic_version==GQUIC_VERSION_Q099) || (quic_version==PICOQUIC_VERSION_30) || (quic_version==PQUIC_VERSION_PROX) || (quic_version==GQUIC_VERSION_T099) || - (quic_version>=GQUIC_VERSION_Q047 && quic_version<=GQUIC_VERSION_Q050) || + (quic_version>=GQUIC_VERSION_Q049 && quic_version<=GQUIC_VERSION_Q050) || (quic_version>=GQUIC_VERSION_Q051 && quic_version<=GQUIC_VERSION_Q059) || (quic_version>=GQUIC_VERSION_T048 && quic_version<=GQUIC_VERSION_T049) || (quic_version>=GQUIC_VERSION_T050 && quic_version<=GQUIC_VERSION_T059) || @@ -692,7 +695,7 @@ int gquic_frame_type_stream(struct streaminfo *pstream, struct _quic_context* _c { int ret=0; char state=APP_STATE_GIVEME; - unsigned short tag_num = 0; + int tag_num = 0; unsigned int message_tag; if(!check_length(payload_len-*used_len, 8)) @@ -700,12 +703,26 @@ int gquic_frame_type_stream(struct streaminfo *pstream, struct _quic_context* _c return state; } - message_tag=(unsigned int)ntohl(*(unsigned int *)(payload+*used_len)); - *used_len+=4; + switch(_context->quic_info.quic_hdr.quic_version) + { + case GQUIC_VERSION_Q041: + *used_len+=1; // unknown + case GQUIC_VERSION_Q044: + message_tag=(unsigned int)ntohl(*(unsigned int *)(payload+*used_len)); + *used_len+=4; - tag_num=*(unsigned short *)(payload+*used_len); - *used_len+=2; //tag_num - *used_len+=2; //padding + tag_num=*(int *)(payload+*used_len); + *used_len+=4; //tag_num + break; + default: + message_tag=(unsigned int)ntohl(*(unsigned int *)(payload+*used_len)); + *used_len+=4; + + tag_num=*(unsigned int *)(payload+*used_len); + *used_len+=2; //tag_num + *used_len+=2; //padding + break; + } switch(message_tag) { @@ -936,7 +953,7 @@ int parse_gquic_Q046(struct streaminfo *pstream, struct _quic_context* _context, frame_type=payload[*used_len]; *used_len+=1; //skip frame_type - if(frame_type&IQUIC_FRAME_STREAM_HEX08) + if(frame_type&IQUIC_FRAME_STREAM_HEX08) //0x08=Q048 { stream_id=get_stream_id(pstream, _context, payload, payload_len, frame_type, used_len); if(stream_id<0) @@ -1158,15 +1175,19 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int switch(is_gquic) { - case GQUIC_VERSION_Q035: - case GQUIC_VERSION_Q039: - case GQUIC_VERSION_Q043: - ret=gquic_proc_unencrypt(pstream, _context, a_packet, (char *)udp_detail->pdata, udp_detail->datalen, &used_len); - break; + case GQUIC_VERSION_Q044: + case GQUIC_VERSION_Q045: case GQUIC_VERSION_Q046: + case GQUIC_VERSION_Q047: + case GQUIC_VERSION_Q048: ret=parse_gquic_Q046(pstream, _context, a_packet, (char *)udp_detail->pdata, udp_detail->datalen, &used_len); break; default: + if(is_gquic>=GQUIC_VERSION_Q001 && GQUIC_VERSION_Q022<=GQUIC_VERSION_Q043) + { + ret=gquic_proc_unencrypt(pstream, _context, a_packet, (char *)udp_detail->pdata, udp_detail->datalen, &used_len); + } + if( ((is_gquic>=MVFST_VERSION_00 && is_gquic<=MVFST_VERSION_0F) || (is_gquic>=GQUIC_VERSION_Q049 && is_gquic<=GQUIC_VERSION_Q059) || (is_gquic>=GQUIC_VERSION_T050 && is_gquic<=GQUIC_VERSION_T059) || diff --git a/src/gquic_process.h b/src/gquic_process.h index 0171e56..8fb5d88 100644 --- a/src/gquic_process.h +++ b/src/gquic_process.h @@ -217,8 +217,8 @@ enum _QUIC_VERSION GQUIC_VERSION_Q020=0x51303230, GQUIC_VERSION_Q021=0x51303231, - GQUIC_VERSION_Q022=0x51303332, - GQUIC_VERSION_Q023=0x51303333, + GQUIC_VERSION_Q022=0x51303232, + GQUIC_VERSION_Q023=0x51303233, GQUIC_VERSION_Q024=0x51303234, GQUIC_VERSION_Q025=0x51303235, GQUIC_VERSION_Q026=0x51303236,