TSG-7634: 支持解析gquic 23/34/37/41/44的SNI
This commit is contained in:
@@ -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) ||
|
||||
|
||||
Reference in New Issue
Block a user