支持识别QUIC50、IQUIC

This commit is contained in:
liuxueli
2020-11-04 17:12:23 +06:00
parent c2b90a03f7
commit 0f2f6bb048
3 changed files with 18 additions and 4 deletions

View File

@@ -282,8 +282,9 @@ static enum _QUIC_VERSION parse_q0to43_header(struct streaminfo *pstream, struct
_context->is_quic=TRUE;
}
if(_context->is_quic==FALSE)
if(_context->is_quic==FALSE || gquic_hdr->quic_version<GQUIC_VERSION_Q001 || gquic_hdr->quic_version>GQUIC_VERSION_Q043)
{
_context->is_quic=FALSE;
return QUIC_VERSION_UNKNOWN;
}
@@ -457,9 +458,12 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con
MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "QUIC_UNSUPPORT", "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:
break;
}
@@ -863,8 +867,9 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int
is_gquic=is_quic_protocol(pstream, _context, (char *)udp_detail->pdata, udp_detail->datalen, &used_len);
if(is_gquic!=QUIC_VERSION_UNKNOWN)
{
if(_context->quic_info.quic_hdr.packet_number==1 && _context->call_business)
if(_context->cb_version==0 && _context->call_business)
{
_context->cb_version=1;
ret=quic_callPlugins(pstream, _context, &(_context->quic_info.quic_hdr.quic_version), sizeof(_context->quic_info.quic_hdr.quic_version), QUIC_USEING_VERSION_MASK, a_packet);
if(ret&APP_STATE_DROPME | ret&APP_STATE_DROPPKT)
{
@@ -911,7 +916,7 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int
int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int out_sni_len)
{
int ret=APP_STATE_GIVEME;
int sni_len=0,len=0;
int sni_len=0,len=-1;
void *pme=NULL;
char *sni=NULL;
struct _quic_context *_context=NULL;
@@ -929,6 +934,13 @@ int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *ou
len= sni_len>(out_sni_len-1) ? (out_sni_len-1) : sni_len;
memcpy(out_sni, sni, len);
}
else
{
if(_context->is_quic==TRUE)
{
len=0;
}
}
}
quic_release_stream(&pme, a_stream->threadnum);

View File

@@ -269,6 +269,7 @@ enum _QUIC_VERSION
struct _quic_context
{
int is_quic;
int cb_version;
int link_state;
int call_business;
void *business_pme;

View File

@@ -5,6 +5,7 @@
#define FALSE 0x00
#define TRUE 0x01
#define MAYBE 0x02
#define QUIC_HALF_CLOSE 0x01