支持识别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;
|
_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;
|
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",
|
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),
|
(((quic_version>>8)&0x0000000F)*10) + ((quic_version)&0x0000000F),
|
||||||
printaddr(&pstream->addr, pstream->threadnum));
|
printaddr(&pstream->addr, pstream->threadnum));
|
||||||
|
|
||||||
|
_context->is_quic=TRUE;
|
||||||
|
_context->quic_info.quic_hdr.quic_version=quic_version;
|
||||||
|
return quic_version;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
||||||
break;
|
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);
|
is_gquic=is_quic_protocol(pstream, _context, (char *)udp_detail->pdata, udp_detail->datalen, &used_len);
|
||||||
if(is_gquic!=QUIC_VERSION_UNKNOWN)
|
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);
|
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)
|
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 quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int out_sni_len)
|
||||||
{
|
{
|
||||||
int ret=APP_STATE_GIVEME;
|
int ret=APP_STATE_GIVEME;
|
||||||
int sni_len=0,len=0;
|
int sni_len=0,len=-1;
|
||||||
void *pme=NULL;
|
void *pme=NULL;
|
||||||
char *sni=NULL;
|
char *sni=NULL;
|
||||||
struct _quic_context *_context=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;
|
len= sni_len>(out_sni_len-1) ? (out_sni_len-1) : sni_len;
|
||||||
memcpy(out_sni, sni, len);
|
memcpy(out_sni, sni, len);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(_context->is_quic==TRUE)
|
||||||
|
{
|
||||||
|
len=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
quic_release_stream(&pme, a_stream->threadnum);
|
quic_release_stream(&pme, a_stream->threadnum);
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ enum _QUIC_VERSION
|
|||||||
struct _quic_context
|
struct _quic_context
|
||||||
{
|
{
|
||||||
int is_quic;
|
int is_quic;
|
||||||
|
int cb_version;
|
||||||
int link_state;
|
int link_state;
|
||||||
int call_business;
|
int call_business;
|
||||||
void *business_pme;
|
void *business_pme;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#define FALSE 0x00
|
#define FALSE 0x00
|
||||||
#define TRUE 0x01
|
#define TRUE 0x01
|
||||||
|
#define MAYBE 0x02
|
||||||
|
|
||||||
|
|
||||||
#define QUIC_HALF_CLOSE 0x01
|
#define QUIC_HALF_CLOSE 0x01
|
||||||
|
|||||||
Reference in New Issue
Block a user