支持识别QUIC50、IQUIC
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#define FALSE 0x00
|
||||
#define TRUE 0x01
|
||||
#define MAYBE 0x02
|
||||
|
||||
|
||||
#define QUIC_HALF_CLOSE 0x01
|
||||
|
||||
Reference in New Issue
Block a user