支持IQUIC

This commit is contained in:
liuxueli
2020-11-06 18:10:42 +06:00
parent d7385a1a62
commit 409501cd5b
3 changed files with 99 additions and 58 deletions

View File

@@ -14,6 +14,52 @@
#include "gquic_process.h" #include "gquic_process.h"
#include "quic_analysis.h" #include "quic_analysis.h"
int is_iquic(enum _QUIC_VERSION quic_version)
{
switch(quic_version)
{
case IQUIC_VERSION_I001:
case IQUIC_VERSION_I002:
case IQUIC_VERSION_I003:
case IQUIC_VERSION_I004:
case IQUIC_VERSION_I005:
case IQUIC_VERSION_I006:
case IQUIC_VERSION_I007:
case IQUIC_VERSION_I008:
case IQUIC_VERSION_I009:
case IQUIC_VERSION_I010:
case IQUIC_VERSION_I011:
case IQUIC_VERSION_I012:
case IQUIC_VERSION_I013:
case IQUIC_VERSION_I014:
case IQUIC_VERSION_I015:
case IQUIC_VERSION_I016:
case IQUIC_VERSION_I017:
case IQUIC_VERSION_I018:
case IQUIC_VERSION_I019:
case IQUIC_VERSION_I020:
case IQUIC_VERSION_I021:
case IQUIC_VERSION_I022:
case IQUIC_VERSION_I023:
case IQUIC_VERSION_I024:
case IQUIC_VERSION_I025:
case IQUIC_VERSION_I026:
case IQUIC_VERSION_I027:
case IQUIC_VERSION_I028:
case IQUIC_VERSION_I029:
case IQUIC_VERSION_I030:
case IQUIC_VERSION_I031:
case IQUIC_VERSION_I032:
return TRUE;
break;
default:
break;
}
return FALSE;
}
int quic_getLinkState(struct _quic_context *_context) int quic_getLinkState(struct _quic_context *_context)
{ {
UCHAR state = 0; UCHAR state = 0;
@@ -405,7 +451,11 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con
if(_context->quic_info.quic_hdr.quic_version!=QUIC_VERSION_UNKNOWN) if(_context->quic_info.quic_hdr.quic_version!=QUIC_VERSION_UNKNOWN)
{ {
// if(is_iquic((enum _QUIC_VERSION)(_context->quic_info.quic_hdr.quic_version)))
{
return (enum _QUIC_VERSION)(_context->quic_info.quic_hdr.quic_version);
}
quic_version=(enum _QUIC_VERSION)(_context->quic_info.quic_hdr.quic_version); quic_version=(enum _QUIC_VERSION)(_context->quic_info.quic_hdr.quic_version);
} }
else else
@@ -426,36 +476,7 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con
case GQUIC_VERSION_Q049: case GQUIC_VERSION_Q049:
case GQUIC_VERSION_Q050: case GQUIC_VERSION_Q050:
case GQUIC_VERSION_Q099: case GQUIC_VERSION_Q099:
case IQUIC_VERSION_I001: MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "GQUIC", "version: Q%03u addr: %s",
case IQUIC_VERSION_I002:
case IQUIC_VERSION_I003:
case IQUIC_VERSION_I004:
case IQUIC_VERSION_I005:
case IQUIC_VERSION_I006:
case IQUIC_VERSION_I007:
case IQUIC_VERSION_I008:
case IQUIC_VERSION_I009:
case IQUIC_VERSION_I010:
case IQUIC_VERSION_I011:
case IQUIC_VERSION_I012:
case IQUIC_VERSION_I013:
case IQUIC_VERSION_I014:
case IQUIC_VERSION_I015:
case IQUIC_VERSION_I016:
case IQUIC_VERSION_I017:
case IQUIC_VERSION_I018:
case IQUIC_VERSION_I019:
case IQUIC_VERSION_I020:
case IQUIC_VERSION_I021:
case IQUIC_VERSION_I032:
case IQUIC_VERSION_I023:
case IQUIC_VERSION_I024:
case IQUIC_VERSION_I025:
case IQUIC_VERSION_I026:
case IQUIC_VERSION_I027:
case IQUIC_VERSION_I028:
case IQUIC_VERSION_I029:
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));
@@ -464,6 +485,16 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con
return quic_version; return quic_version;
break; break;
default: default:
if(is_iquic(quic_version))
{
MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "IQUIC", "version: I%03u addr: %s",
(((quic_version>>16)&0x000000FF)*10) + (((quic_version>>8)&0x000000FF)*10) + ((quic_version)&0x000000FF),
printaddr(&pstream->addr, pstream->threadnum));
_context->is_quic=TRUE;
_context->quic_info.quic_hdr.quic_version=quic_version;
return quic_version;
}
break; break;
} }
@@ -886,6 +917,11 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int
ret=parse_gquic_Q046(pstream, _context, a_packet, (char *)udp_detail->pdata, udp_detail->datalen, &used_len); ret=parse_gquic_Q046(pstream, _context, a_packet, (char *)udp_detail->pdata, udp_detail->datalen, &used_len);
break; break;
default: default:
ret=quic_callPlugins(pstream, _context, (char *)udp_detail->pdata, udp_detail->datalen, QUIC_APPLICATION_DATA_MASK, a_packet);
if(ret&APP_STATE_DROPME | ret&APP_STATE_DROPPKT)
{
return ret;
}
break; break;
} }

View File

@@ -240,30 +240,29 @@ enum _QUIC_VERSION
IQUIC_VERSION_I007=0xFF000007, IQUIC_VERSION_I007=0xFF000007,
IQUIC_VERSION_I008=0xFF000008, IQUIC_VERSION_I008=0xFF000008,
IQUIC_VERSION_I009=0xFF000009, IQUIC_VERSION_I009=0xFF000009,
IQUIC_VERSION_I010=0xFF000010, IQUIC_VERSION_I010=0xFF00000A,
IQUIC_VERSION_I011=0xFF000011, IQUIC_VERSION_I011=0xFF00000B,
IQUIC_VERSION_I012=0xFF000012, IQUIC_VERSION_I012=0xFF00000C,
IQUIC_VERSION_I013=0xFF000013, IQUIC_VERSION_I013=0xFF00000D,
IQUIC_VERSION_I014=0xFF000014, IQUIC_VERSION_I014=0xFF00000E,
IQUIC_VERSION_I015=0xFF000015, IQUIC_VERSION_I015=0xFF00000F,
IQUIC_VERSION_I016=0xFF000016, IQUIC_VERSION_I016=0xFF000010,
IQUIC_VERSION_I017=0xFF000017, IQUIC_VERSION_I017=0xFF000011,
IQUIC_VERSION_I018=0xFF000018, IQUIC_VERSION_I018=0xFF000012,
IQUIC_VERSION_I019=0xFF000019, IQUIC_VERSION_I019=0xFF000013,
IQUIC_VERSION_I020=0xFF000020, IQUIC_VERSION_I020=0xFF000014,
IQUIC_VERSION_I021=0xFF000021, IQUIC_VERSION_I021=0xFF000015,
IQUIC_VERSION_I032=0xFF000022, IQUIC_VERSION_I022=0xFF000016,
IQUIC_VERSION_I023=0xFF000023, IQUIC_VERSION_I023=0xFF000017,
IQUIC_VERSION_I024=0xFF000024, IQUIC_VERSION_I024=0xFF000018,
IQUIC_VERSION_I025=0xFF000025, IQUIC_VERSION_I025=0xFF000019,
IQUIC_VERSION_I026=0xFF000026, IQUIC_VERSION_I026=0xFF00001A,
IQUIC_VERSION_I027=0xFF000027, IQUIC_VERSION_I027=0xFF00001B,
IQUIC_VERSION_I028=0xFF000028, IQUIC_VERSION_I028=0xFF00001C,
IQUIC_VERSION_I029=0xFF000029 IQUIC_VERSION_I029=0xFF00001D,
IQUIC_VERSION_I030=0xFF00001E,
IQUIC_VERSION_I031=0xFF00001F,
IQUIC_VERSION_I032=0xFF000020
}; };
struct _quic_context struct _quic_context

View File

@@ -6,12 +6,18 @@
int quic_version_int2string(unsigned int version, char *buff, int buff_len) int quic_version_int2string(unsigned int version, char *buff, int buff_len)
{ {
if(version>0 && version<=GQUIC_VERSION_Q099) if(version>=GQUIC_VERSION_Q001 && version<=GQUIC_VERSION_Q099)
{ {
snprintf(buff, buff_len, "Google QUIC %02d", (((version>>8)&0x0000000F)*10) + (version&0x0000000F)); snprintf(buff, buff_len, "Google QUIC %02d", (((version>>8)&0x0000000F)*10) + (version&0x0000000F));
return 0; return 1;
} }
return -1; if(version>=IQUIC_VERSION_I001 && version<=IQUIC_VERSION_I032)
{
snprintf(buff, buff_len, "IETF QUIC %02d", (((version>>16)&0x000000FF)*10) + (((version>>8)&0x000000FF)*10) + (version&0x000000FF));
return 1;
}
return 0;
} }