TSG-7753: 修改quic_protocol_identify函数,增加输出VERSION/UA字段
This commit is contained in:
@@ -90,7 +90,7 @@ struct _quic_info
|
||||
|
||||
//buff_len minimun 32bytes
|
||||
int quic_version_int2string(unsigned int version, char *buff, int buff_len);
|
||||
//ret: 0: not quic, >0: quic
|
||||
int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int out_sni_len);
|
||||
//ret: 0: not quic, >0: quic version
|
||||
unsigned int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int *out_sni_len, char *out_ua, int *out_ua_len);
|
||||
|
||||
#endif /* SRC_GQUIC_H_ */
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
#define PRINTADDR(a, b) ((b)<RLOG_LV_FATAL ? printaddr(&(a->addr), a->threadnum) : "")
|
||||
#endif
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
const unsigned char PCAP_FILE_HEAD[24] = {0xD4, 0xC3, 0xB2, 0xA1, 0x02, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
|
||||
@@ -1350,18 +1354,17 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int
|
||||
}
|
||||
|
||||
return APP_STATE_DROPME;;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
unsigned int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int *out_sni_len, char *out_ua, int *out_ua_len)
|
||||
{
|
||||
{
|
||||
int ret=APP_STATE_GIVEME;
|
||||
int sni_len=0,len=-1;
|
||||
int len=0;
|
||||
void *pme=NULL;
|
||||
struct _quic_context *_context=NULL;
|
||||
unsigned int quic_version=QUIC_VERSION_UNKNOWN;
|
||||
|
||||
if(!is_quic_port(a_stream))
|
||||
if(!is_quic_port(a_stream))
|
||||
{
|
||||
return quic_version;
|
||||
}
|
||||
@@ -1374,26 +1377,30 @@ int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *ou
|
||||
{
|
||||
if(_context->quic_info.client_hello!=NULL)
|
||||
{
|
||||
if(_context->quic_info.client_hello->sni_idx!=0xFF)
|
||||
{
|
||||
sni=(char *)(_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].value);
|
||||
sni_len=_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].length;
|
||||
if(_context->quic_info.client_hello->sni_idx!=0xFF)
|
||||
{
|
||||
len=MIN((int)_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].length, (*out_sni_len)-1);
|
||||
memcpy(out_sni, _context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].value, len);
|
||||
memcpy(out_sni, sni, len);
|
||||
(*out_sni_len)=len;
|
||||
}
|
||||
|
||||
else
|
||||
if(_context->quic_info.client_hello->ua_idx!=0xFF)
|
||||
{
|
||||
len=MIN((int)_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->ua_idx].length, (*out_ua_len)-1);
|
||||
memcpy(out_ua, _context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->ua_idx].value, len);
|
||||
(*out_ua_len)=len;
|
||||
}
|
||||
|
||||
quic_version=_context->quic_info.quic_hdr.quic_version;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(_context->is_quic==TRUE)
|
||||
if(_context->is_quic==TRUE)
|
||||
{
|
||||
quic_version=_context->quic_info.quic_hdr.quic_version;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
quic_release_stream(&pme, a_stream->threadnum);
|
||||
quic_release_stream(&pme, a_stream->threadnum);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user