diff options
| author | liuxueli <[email protected]> | 2020-11-04 17:12:23 +0600 |
|---|---|---|
| committer | liuxueli <[email protected]> | 2020-11-04 17:12:23 +0600 |
| commit | 0f2f6bb04805617dff06873de23054037012ca61 (patch) | |
| tree | 1da1474003aecae85350421f61ff42727d5ce570 /src | |
| parent | c2b90a03f722e852dccdd2eb4b1cf93741e69983 (diff) | |
支持识别QUIC50、IQUIC
Diffstat (limited to 'src')
| -rw-r--r-- | src/gquic_process.c | 20 | ||||
| -rw-r--r-- | src/gquic_process.h | 1 | ||||
| -rw-r--r-- | src/quic_analysis.h | 1 |
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 |
