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
|
switch(quic_version) // +1 meaning: skip public flags
|
||||||
{
|
{
|
||||||
|
case GQUIC_VERSION_Q044:
|
||||||
|
case GQUIC_VERSION_Q045:
|
||||||
case GQUIC_VERSION_Q046:
|
case GQUIC_VERSION_Q046:
|
||||||
|
case GQUIC_VERSION_Q047:
|
||||||
|
case GQUIC_VERSION_Q048:
|
||||||
quic_version=parse_quic_header(pstream, _context, payload, payload_len, used_len);
|
quic_version=parse_quic_header(pstream, _context, payload, payload_len, used_len);
|
||||||
return quic_version;
|
return quic_version;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if( (quic_version==GQUIC_VERSION_Q044) ||
|
if(
|
||||||
(quic_version==GQUIC_VERSION_Q045) ||
|
|
||||||
(quic_version==GQUIC_VERSION_Q099) ||
|
(quic_version==GQUIC_VERSION_Q099) ||
|
||||||
(quic_version==PICOQUIC_VERSION_30) ||
|
(quic_version==PICOQUIC_VERSION_30) ||
|
||||||
(quic_version==PQUIC_VERSION_PROX) ||
|
(quic_version==PQUIC_VERSION_PROX) ||
|
||||||
(quic_version==GQUIC_VERSION_T099) ||
|
(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_Q051 && quic_version<=GQUIC_VERSION_Q059) ||
|
||||||
(quic_version>=GQUIC_VERSION_T048 && quic_version<=GQUIC_VERSION_T049) ||
|
(quic_version>=GQUIC_VERSION_T048 && quic_version<=GQUIC_VERSION_T049) ||
|
||||||
(quic_version>=GQUIC_VERSION_T050 && quic_version<=GQUIC_VERSION_T059) ||
|
(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;
|
int ret=0;
|
||||||
char state=APP_STATE_GIVEME;
|
char state=APP_STATE_GIVEME;
|
||||||
unsigned short tag_num = 0;
|
int tag_num = 0;
|
||||||
unsigned int message_tag;
|
unsigned int message_tag;
|
||||||
|
|
||||||
if(!check_length(payload_len-*used_len, 8))
|
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;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
message_tag=(unsigned int)ntohl(*(unsigned int *)(payload+*used_len));
|
switch(_context->quic_info.quic_hdr.quic_version)
|
||||||
*used_len+=4;
|
{
|
||||||
|
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);
|
tag_num=*(int *)(payload+*used_len);
|
||||||
*used_len+=2; //tag_num
|
*used_len+=4; //tag_num
|
||||||
*used_len+=2; //padding
|
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)
|
switch(message_tag)
|
||||||
{
|
{
|
||||||
@@ -936,7 +953,7 @@ int parse_gquic_Q046(struct streaminfo *pstream, struct _quic_context* _context,
|
|||||||
frame_type=payload[*used_len];
|
frame_type=payload[*used_len];
|
||||||
*used_len+=1; //skip frame_type
|
*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);
|
stream_id=get_stream_id(pstream, _context, payload, payload_len, frame_type, used_len);
|
||||||
if(stream_id<0)
|
if(stream_id<0)
|
||||||
@@ -1158,15 +1175,19 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int
|
|||||||
|
|
||||||
switch(is_gquic)
|
switch(is_gquic)
|
||||||
{
|
{
|
||||||
case GQUIC_VERSION_Q035:
|
case GQUIC_VERSION_Q044:
|
||||||
case GQUIC_VERSION_Q039:
|
case GQUIC_VERSION_Q045:
|
||||||
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_Q046:
|
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);
|
ret=parse_gquic_Q046(pstream, _context, a_packet, (char *)udp_detail->pdata, udp_detail->datalen, &used_len);
|
||||||
break;
|
break;
|
||||||
default:
|
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) ||
|
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_Q049 && is_gquic<=GQUIC_VERSION_Q059) ||
|
||||||
(is_gquic>=GQUIC_VERSION_T050 && is_gquic<=GQUIC_VERSION_T059) ||
|
(is_gquic>=GQUIC_VERSION_T050 && is_gquic<=GQUIC_VERSION_T059) ||
|
||||||
|
|||||||
@@ -217,8 +217,8 @@ enum _QUIC_VERSION
|
|||||||
|
|
||||||
GQUIC_VERSION_Q020=0x51303230,
|
GQUIC_VERSION_Q020=0x51303230,
|
||||||
GQUIC_VERSION_Q021=0x51303231,
|
GQUIC_VERSION_Q021=0x51303231,
|
||||||
GQUIC_VERSION_Q022=0x51303332,
|
GQUIC_VERSION_Q022=0x51303232,
|
||||||
GQUIC_VERSION_Q023=0x51303333,
|
GQUIC_VERSION_Q023=0x51303233,
|
||||||
GQUIC_VERSION_Q024=0x51303234,
|
GQUIC_VERSION_Q024=0x51303234,
|
||||||
GQUIC_VERSION_Q025=0x51303235,
|
GQUIC_VERSION_Q025=0x51303235,
|
||||||
GQUIC_VERSION_Q026=0x51303236,
|
GQUIC_VERSION_Q026=0x51303236,
|
||||||
|
|||||||
Reference in New Issue
Block a user