summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorliuxueli <[email protected]>2021-09-04 19:55:07 +0800
committerliuxueli <[email protected]>2021-09-04 19:55:07 +0800
commit132a4957566ec702b8e4f871b539251879fee648 (patch)
tree47dad3dcd01eba5aa4daacfd4add0bf94f486839 /src
parenta2eb69b2ad840a40532ce24719e93fd9a20f643d (diff)
TSG-7634: 支持解析gquic 23/34/37/41/44的SNI
Diffstat (limited to 'src')
-rw-r--r--src/gquic_process.cpp51
-rw-r--r--src/gquic_process.h4
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=*(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 short *)(payload+*used_len);
- *used_len+=2; //tag_num
- *used_len+=2; //padding
+ 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,