summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuxueli <[email protected]>2020-11-06 18:10:42 +0600
committerliuxueli <[email protected]>2020-11-06 18:10:42 +0600
commit409501cd5b56dea2f070ec900b681bf6da11fac9 (patch)
tree8a937d0696bd54c88287c5e95583845a74b599f6
parentd7385a1a6270a38a89da22470e04fdbf34bdb52d (diff)
支持IQUIC
-rw-r--r--src/gquic_process.c98
-rw-r--r--src/gquic_process.h47
-rw-r--r--src/quic_version.cpp12
3 files changed, 99 insertions, 58 deletions
diff --git a/src/gquic_process.c b/src/gquic_process.c
index 74ce322..e8ccd86 100644
--- a/src/gquic_process.c
+++ b/src/gquic_process.c
@@ -14,6 +14,52 @@
#include "gquic_process.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)
{
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(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);
}
else
@@ -426,36 +476,7 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con
case GQUIC_VERSION_Q049:
case GQUIC_VERSION_Q050:
case GQUIC_VERSION_Q099:
- 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_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",
+ MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "GQUIC", "version: Q%03u addr: %s",
(((quic_version>>8)&0x0000000F)*10) + ((quic_version)&0x0000000F),
printaddr(&pstream->addr, pstream->threadnum));
@@ -464,6 +485,16 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con
return quic_version;
break;
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;
}
@@ -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);
break;
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;
}
diff --git a/src/gquic_process.h b/src/gquic_process.h
index 67d355c..07d547f 100644
--- a/src/gquic_process.h
+++ b/src/gquic_process.h
@@ -240,30 +240,29 @@ enum _QUIC_VERSION
IQUIC_VERSION_I007=0xFF000007,
IQUIC_VERSION_I008=0xFF000008,
IQUIC_VERSION_I009=0xFF000009,
- IQUIC_VERSION_I010=0xFF000010,
- IQUIC_VERSION_I011=0xFF000011,
- IQUIC_VERSION_I012=0xFF000012,
- IQUIC_VERSION_I013=0xFF000013,
- IQUIC_VERSION_I014=0xFF000014,
- IQUIC_VERSION_I015=0xFF000015,
- IQUIC_VERSION_I016=0xFF000016,
- IQUIC_VERSION_I017=0xFF000017,
- IQUIC_VERSION_I018=0xFF000018,
- IQUIC_VERSION_I019=0xFF000019,
- IQUIC_VERSION_I020=0xFF000020,
- IQUIC_VERSION_I021=0xFF000021,
- IQUIC_VERSION_I032=0xFF000022,
- IQUIC_VERSION_I023=0xFF000023,
- IQUIC_VERSION_I024=0xFF000024,
- IQUIC_VERSION_I025=0xFF000025,
- IQUIC_VERSION_I026=0xFF000026,
- IQUIC_VERSION_I027=0xFF000027,
- IQUIC_VERSION_I028=0xFF000028,
- IQUIC_VERSION_I029=0xFF000029
-
-
-
-
+ IQUIC_VERSION_I010=0xFF00000A,
+ IQUIC_VERSION_I011=0xFF00000B,
+ IQUIC_VERSION_I012=0xFF00000C,
+ IQUIC_VERSION_I013=0xFF00000D,
+ IQUIC_VERSION_I014=0xFF00000E,
+ IQUIC_VERSION_I015=0xFF00000F,
+ IQUIC_VERSION_I016=0xFF000010,
+ IQUIC_VERSION_I017=0xFF000011,
+ IQUIC_VERSION_I018=0xFF000012,
+ IQUIC_VERSION_I019=0xFF000013,
+ IQUIC_VERSION_I020=0xFF000014,
+ IQUIC_VERSION_I021=0xFF000015,
+ IQUIC_VERSION_I022=0xFF000016,
+ IQUIC_VERSION_I023=0xFF000017,
+ IQUIC_VERSION_I024=0xFF000018,
+ IQUIC_VERSION_I025=0xFF000019,
+ IQUIC_VERSION_I026=0xFF00001A,
+ IQUIC_VERSION_I027=0xFF00001B,
+ IQUIC_VERSION_I028=0xFF00001C,
+ IQUIC_VERSION_I029=0xFF00001D,
+ IQUIC_VERSION_I030=0xFF00001E,
+ IQUIC_VERSION_I031=0xFF00001F,
+ IQUIC_VERSION_I032=0xFF000020
};
struct _quic_context
diff --git a/src/quic_version.cpp b/src/quic_version.cpp
index 569172f..2e41b1d 100644
--- a/src/quic_version.cpp
+++ b/src/quic_version.cpp
@@ -6,12 +6,18 @@
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));
- 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;
}