summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorliuxueli <[email protected]>2020-11-04 17:12:23 +0600
committerliuxueli <[email protected]>2020-11-04 17:12:23 +0600
commit0f2f6bb04805617dff06873de23054037012ca61 (patch)
tree1da1474003aecae85350421f61ff42727d5ce570 /src
parentc2b90a03f722e852dccdd2eb4b1cf93741e69983 (diff)
支持识别QUIC50、IQUIC
Diffstat (limited to 'src')
-rw-r--r--src/gquic_process.c20
-rw-r--r--src/gquic_process.h1
-rw-r--r--src/quic_analysis.h1
3 files changed, 18 insertions, 4 deletions
diff --git a/src/gquic_process.c b/src/gquic_process.c
index 91ca9e1..74ce322 100644
--- a/src/gquic_process.c
+++ b/src/gquic_process.c
@@ -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);
diff --git a/src/gquic_process.h b/src/gquic_process.h
index 5926f78..67d355c 100644
--- a/src/gquic_process.h
+++ b/src/gquic_process.h
@@ -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;
diff --git a/src/quic_analysis.h b/src/quic_analysis.h
index 639006b..71c8c67 100644
--- a/src/quic_analysis.h
+++ b/src/quic_analysis.h
@@ -5,6 +5,7 @@
#define FALSE 0x00
#define TRUE 0x01
+#define MAYBE 0x02
#define QUIC_HALF_CLOSE 0x01