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