代码重构
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* gquic_process.h
|
||||
* quic_process.h
|
||||
*
|
||||
* Created on: 2019<31><39>4<EFBFBD><34>2<EFBFBD><32>
|
||||
* Author: root
|
||||
@@ -14,94 +14,177 @@
|
||||
|
||||
#include "gquic.h"
|
||||
|
||||
#define VERSION_LEN 4
|
||||
#define VER_Q046 0x51303436
|
||||
/**************************************************************************/
|
||||
/* Public flag */
|
||||
/**************************************************************************/
|
||||
//#define VERSION_LEN 4
|
||||
//#define VER_Q046
|
||||
|
||||
#define GQUIC_PUBLIC_FLAG_VERSION 0x01
|
||||
#define GQUIC_PUBLIC_FLAG_RST 0x02
|
||||
#define GQUIC_PUBLIC_FLAG_NONCE 0x04
|
||||
#define GQUIC_PUBLIC_FLAG_CID 0x08
|
||||
#define GQUIC_PUBLIC_FLAG_PKT_NUM 0x30
|
||||
|
||||
//https://github.com/quicwg/base-drafts/wiki/QUIC-Versions
|
||||
|
||||
enum _QUIC_VERSION
|
||||
{
|
||||
QUIC_VERSION_UNKNOWN=0,
|
||||
//google
|
||||
GQUIC_VERSION_Q001=0x51303031,
|
||||
GQUIC_VERSION_Q002=0x51303032,
|
||||
GQUIC_VERSION_Q003=0x51303033,
|
||||
GQUIC_VERSION_Q004=0x51303034,
|
||||
GQUIC_VERSION_Q005=0x51303035,
|
||||
GQUIC_VERSION_Q006=0x51303036,
|
||||
GQUIC_VERSION_Q007=0x51303037,
|
||||
GQUIC_VERSION_Q008=0x51303038,
|
||||
GQUIC_VERSION_Q009=0x51303039,
|
||||
|
||||
GQUIC_VERSION_Q010=0x51303130,
|
||||
GQUIC_VERSION_Q011=0x51303131,
|
||||
GQUIC_VERSION_Q012=0x51303132,
|
||||
GQUIC_VERSION_Q013=0x51303133,
|
||||
GQUIC_VERSION_Q014=0x51303134,
|
||||
GQUIC_VERSION_Q015=0x51303135,
|
||||
GQUIC_VERSION_Q016=0x51303136,
|
||||
GQUIC_VERSION_Q017=0x51303137,
|
||||
GQUIC_VERSION_Q018=0x51303138,
|
||||
GQUIC_VERSION_Q019=0x51303139,
|
||||
|
||||
GQUIC_VERSION_Q020=0x51303230,
|
||||
GQUIC_VERSION_Q021=0x51303231,
|
||||
GQUIC_VERSION_Q022=0x51303332,
|
||||
GQUIC_VERSION_Q023=0x51303333,
|
||||
GQUIC_VERSION_Q024=0x51303234,
|
||||
GQUIC_VERSION_Q025=0x51303235,
|
||||
GQUIC_VERSION_Q026=0x51303236,
|
||||
GQUIC_VERSION_Q027=0x51303237,
|
||||
GQUIC_VERSION_Q028=0x51303238,
|
||||
GQUIC_VERSION_Q029=0x51303239,
|
||||
|
||||
GQUIC_VERSION_Q030=0x51303330,
|
||||
GQUIC_VERSION_Q031=0x51303331,
|
||||
GQUIC_VERSION_Q032=0x51303332,
|
||||
GQUIC_VERSION_Q033=0x51303333,
|
||||
GQUIC_VERSION_Q034=0x51303334,
|
||||
GQUIC_VERSION_Q035=0x51303335,
|
||||
GQUIC_VERSION_Q036=0x51303336,
|
||||
GQUIC_VERSION_Q037=0x51303337,
|
||||
GQUIC_VERSION_Q038=0x51303338,
|
||||
GQUIC_VERSION_Q039=0x51303339,
|
||||
|
||||
GQUIC_VERSION_Q040=0x51303430,
|
||||
GQUIC_VERSION_Q041=0x51303431,
|
||||
GQUIC_VERSION_Q042=0x51303432,
|
||||
GQUIC_VERSION_Q043=0x51303433,
|
||||
GQUIC_VERSION_Q044=0x51303434,
|
||||
GQUIC_VERSION_Q045=0x51303435,
|
||||
GQUIC_VERSION_Q046=0x51303436,
|
||||
GQUIC_VERSION_Q047=0x51303437,
|
||||
GQUIC_VERSION_Q048=0x51303438, //Google QUIC with TLS
|
||||
GQUIC_VERSION_Q049=0x51303439, //Google QUIC with TLS
|
||||
|
||||
GQUIC_VERSION_Q050=0x51303530,
|
||||
GQUIC_VERSION_Q051=0x51303531,
|
||||
GQUIC_VERSION_Q052=0x51303532,
|
||||
GQUIC_VERSION_Q053=0x51303533,
|
||||
GQUIC_VERSION_Q054=0x51303534,
|
||||
GQUIC_VERSION_Q055=0x51303535,
|
||||
GQUIC_VERSION_Q056=0x51303536,
|
||||
GQUIC_VERSION_Q057=0x51303537,
|
||||
GQUIC_VERSION_Q058=0x51303538,
|
||||
GQUIC_VERSION_Q059=0x51303539,
|
||||
|
||||
GQUIC_VERSION_Q099=0x51303939,
|
||||
|
||||
//Google Proxied QUIC
|
||||
PQUIC_VERSION_PROX=0x50524f58
|
||||
//GOQUIC_VERSION_GO=0x51474f[0-255],
|
||||
//quicly
|
||||
//QUICKLY_VERSION_QUICLY=0x91c170[0-255]
|
||||
|
||||
//IETF
|
||||
//IQUIC_VERSION_=0xf10000
|
||||
|
||||
#define PACKET_PUBLIC_FLAGS_MAX 0x7f
|
||||
#define PUBLIC_FLAG_VER_FST_BYTE 0x51
|
||||
#define PUBLIC_FLAG_VER 0x01
|
||||
#define PUBLIC_FLAG_RST 0x02
|
||||
#define PUBLIC_FLAG_NONCE 0x04
|
||||
#define BYTE_CNTID_8 0x08
|
||||
#define BYTE_CNTID_0 0x00
|
||||
enum gquic_connid_len {
|
||||
PACKET_0BYTE_CONNECTION_ID = 0,
|
||||
PACKET_8BYTE_CONNECTION_ID = 8
|
||||
};
|
||||
|
||||
#define PKT_NUM_6 0x30
|
||||
#define PKT_NUM_4 0x20
|
||||
#define PKT_NUM_2 0x10
|
||||
#define PKT_NUM_1 0x00
|
||||
|
||||
//enum gquic_pkt_num_len {
|
||||
// PACKET_1BYTE_PACKET_NUMBER = 1,
|
||||
// PACKET_2BYTE_PACKET_NUMBER = 2,
|
||||
// PACKET_4BYTE_PACKET_NUMBER = 4,
|
||||
// PACKET_6BYTE_PACKET_NUMBER = 6
|
||||
//};
|
||||
|
||||
// Used to indicate a QuicSequenceNumberLength using two flag bits.
|
||||
enum gquic_pkt_num_len_flags {
|
||||
PACKET_FLAGS_1BYTE_PACKET = 0, // 00
|
||||
PACKET_FLAGS_2BYTE_PACKET = 1, // 01
|
||||
PACKET_FLAGS_4BYTE_PACKET = 1 << 1, // 10
|
||||
PACKET_FLAGS_6BYTE_PACKET = 1 << 1 | 1, // 11
|
||||
struct _gquic_reset_public_header
|
||||
{
|
||||
unsigned char public_flags;
|
||||
unsigned long long connection_id;
|
||||
unsigned int tag;
|
||||
};
|
||||
|
||||
//#define PUBLIC_FLAG_MULTIPATH 0x40
|
||||
#define UNUSE 0x80
|
||||
#define MSG_AUTH_HASH_LEN 12
|
||||
#define PUB_HEAD_SEQ_SFT 4
|
||||
//GQIIC Frame type
|
||||
#define GQUIC_SPECIAL_FRAME_FLAG 0xE0 // Special Frame Types
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM 0x80
|
||||
#define GQUIC_SPECIAL_FRAME_ACK 0x40
|
||||
#define GQUIC_SPECIAL_FRAME_CONGEST_FB 0x20
|
||||
|
||||
/**************************************************************************/
|
||||
/* Frame type */
|
||||
/**************************************************************************/
|
||||
#define FRAM_SPECIAL 0xE0
|
||||
#define STREAM 0x80
|
||||
#define STREAM_F 0x40 //fin
|
||||
#define STREAM_D 0x20 //data length
|
||||
#define STREAM_OOO 0x1C //offset length
|
||||
#define STREAM_SS 0x03 //stream length
|
||||
#define ACK 0x40
|
||||
#define ACK_LL 0x0c
|
||||
#define ACK_MM 0x03
|
||||
#define ACK_N 0x20
|
||||
#define CONGESTION_FEEDBACK 0x20
|
||||
#define PADDING 0x00
|
||||
#define RST_STREAM 0x01
|
||||
#define CONNECTION_CLOSE 0x02
|
||||
#define GOAWAY 0x03
|
||||
#define WINDOW_UPDATE 0x04
|
||||
#define BLOCKED 0x05
|
||||
#define STOP_WAITING 0x06
|
||||
#define PING 0x07
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_FIN 0x40 // FIN
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_DLEN 0x20 //stream length
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_OFFSET 0x1C //offset header field
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_ID 0x03 //offset header field
|
||||
|
||||
#define GQUIC_REGULAR_FRAME_PADDING 0x00
|
||||
#define GQUIC_REGULAR_FRAME_RST_STREAM 0x01
|
||||
#define GQUIC_REGULAR_FRAME_CONNECTION_CLOSE 0x02
|
||||
#define GQUIC_REGULAR_FRAME_GOAWAY 0x03
|
||||
#define GQUIC_REGULAR_FRAME_WINDOW_UPDATE 0x04
|
||||
#define GQUIC_REGULAR_FRAME_BLOCKED 0x05
|
||||
#define GQUIC_REGULAR_FRAME_STOP_WAITING 0x06
|
||||
#define GQUIC_REGULAR_FRAME_PING 0x07
|
||||
|
||||
#define STREAM_ID_1BYTE 0x00
|
||||
#define STREAM_ID_2BYTE 0x01
|
||||
#define STREAM_ID_3BYTE 0x02
|
||||
#define STREAM_ID_4BYTE 0x03
|
||||
#define GQUIC_SPECIAL_FRAME_FLAG 0xE0 // Special Frame Types
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM 0x80
|
||||
#define GQUIC_SPECIAL_FRAME_ACK 0x40
|
||||
#define GQUIC_SPECIAL_FRAME_CONGEST_FB 0x20
|
||||
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_FIN 0x40 // FIN
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_DLEN 0x20 //stream length
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_OFFSET 0x1C //offset header field
|
||||
#define GQUIC_SPECIAL_FRAME_STREAM_ID 0x03 //offset header field
|
||||
|
||||
#define GQUIC_REGULAR_FRAME_PADDING 0x00
|
||||
#define GQUIC_REGULAR_FRAME_RST_STREAM 0x01
|
||||
#define GQUIC_REGULAR_FRAME_CONNECTION_CLOSE 0x02
|
||||
#define GQUIC_REGULAR_FRAME_GOAWAY 0x03
|
||||
#define GQUIC_REGULAR_FRAME_WINDOW_UPDATE 0x04
|
||||
#define GQUIC_REGULAR_FRAME_BLOCKED 0x05
|
||||
#define GQUIC_REGULAR_FRAME_STOP_WAITING 0x06
|
||||
#define GQUIC_REGULAR_FRAME_PING 0x07
|
||||
|
||||
//IQIIC Frame type (GQUIC_Q046 is iQUIC 17)
|
||||
#define IQUIC_FRAME_PADDING 0x00
|
||||
#define IQUIC_FRAME_PING 0x10
|
||||
#define IQUIC_FRAME_ACK_HEX02 0x20
|
||||
#define IQUIC_FRAME_ACK_HEX03 0x30
|
||||
#define IQUIC_FRAME_RESET_STREAM 0x40
|
||||
#define IQUIC_FRAME_STOP_SENDING 0x50
|
||||
#define IQUIC_FRAME_CRYPTO 0x60
|
||||
#define IQUIC_FRAME_NEW_TOKEN 0x70
|
||||
#define IQUIC_FRAME_STREAM_HEX08 0x80
|
||||
#define IQUIC_FRAME_STREAM_HEX09 0x90
|
||||
#define IQUIC_FRAME_STREAM_HEX0A 0xA0
|
||||
#define IQUIC_FRAME_STREAM_HEX0B 0xB0
|
||||
#define IQUIC_FRAME_STREAM_HEX0C 0xC0
|
||||
#define IQUIC_FRAME_STREAM_HEX0D 0xD0
|
||||
#define IQUIC_FRAME_STREAM_HEX0E 0xE0
|
||||
#define IQUIC_FRAME_STREAM_HEX0F 0xF0
|
||||
#define IQUIC_FRAME_MAX_DATA 0x01
|
||||
#define IQUIC_FRAME_MAX_STREAM_DATA 0x11
|
||||
#define IQUIC_FRAME_MAX_STREAMS_HEX12 0x21
|
||||
#define IQUIC_FRAME_MAX_STREAMS_HEX13 0x31
|
||||
#define IQUIC_FRAME_DATA_BLOCKED 0x41
|
||||
#define IQUIC_FRAME_STREAM_DATA_BLOCKED 0x51
|
||||
#define IQUIC_FRAME_STREAMS_BLOCKED_HEX16 0x61
|
||||
#define IQUIC_FRAME_STREAMS_BLOCKED_HEX17 0x71
|
||||
#define IQUIC_FRAME_NEW_CONNECTION_ID 0x81
|
||||
#define IQUIC_FRAME_RETIRE_CONNECTION_ID 0x91
|
||||
#define IQUIC_FRAME_PATH_CHALLENGE 0xA1
|
||||
#define IQUIC_FRAME_PATH_RESPONSE 0xB1
|
||||
#define IQUIC_FRAME_CONNECTION_CLOSE_HEX1C 0xC1
|
||||
#define IQUIC_FRAME_CONNECTION_CLOSE_HEX1D 0xD1
|
||||
|
||||
enum frame_type_t{
|
||||
FRAME_UNKNOWN = 0,
|
||||
FRAME_STREAM,
|
||||
FRAME_ACK,
|
||||
FRAME_CONGESTION_FEEDBACK,
|
||||
FRAME_PADDING,
|
||||
FRAME_RST_STREAM,
|
||||
FRAME_CONNECTION_CLOSE,
|
||||
FRAME_GOAWAY,
|
||||
FRAME_WINDOW_UPDATE,
|
||||
FRAME_BLOCKED,
|
||||
FRAME_STOP_WAITING,
|
||||
FRAME_PING
|
||||
};
|
||||
|
||||
/**************************************************************************/
|
||||
/* Message tag */
|
||||
@@ -111,40 +194,6 @@ enum frame_type_t{
|
||||
#define REJ 0x52454A00
|
||||
#define PRST 0x50525354
|
||||
|
||||
enum message_tag_t{
|
||||
MTAG_UNKNOWN = 0,
|
||||
MTAG_CHLO,
|
||||
MTAG_SHLO,
|
||||
MTAG_REJ,
|
||||
MTAG_PRST
|
||||
};
|
||||
|
||||
struct gquic_frame_hdr{
|
||||
enum frame_type_t frame_type;
|
||||
UCHAR is_fin;
|
||||
UCHAR data_len_byte;
|
||||
UCHAR offset_len;
|
||||
UCHAR stream_id_len;
|
||||
UINT8 stream_id;
|
||||
UINT16 data_len;
|
||||
UCHAR padding_len;
|
||||
enum message_tag_t tag;
|
||||
UINT32 tag_num;
|
||||
};
|
||||
|
||||
struct gquic_pkt_hdr{
|
||||
UINT64 connection_id;
|
||||
int connection_id_len;
|
||||
UINT8 nonce_flag;
|
||||
UINT8 reset_flag;
|
||||
UINT8 version_flag;
|
||||
UINT32 packet_number_len;
|
||||
UINT32 version;
|
||||
UINT8 version_int8;
|
||||
UINT32 packet_number;
|
||||
UCHAR auth_hash[MSG_AUTH_HASH_LEN];
|
||||
// struct gquic_frame_hdr* frame_hdr;
|
||||
};
|
||||
|
||||
/**************************************************************************/
|
||||
/* Tag */
|
||||
@@ -196,15 +245,7 @@ struct gquic_pkt_hdr{
|
||||
|
||||
|
||||
|
||||
UINT8 gquic_process(struct streaminfo *pstream, struct quic_stream* a_quic_stream, int thread_seq, void* a_packet);
|
||||
UINT32 read_offset_len(UINT8 frame_type);
|
||||
UINT32 read_stream_len(UINT8 frame_type);
|
||||
UINT32 read_largest_observed_len(UINT8 frame_type);
|
||||
UINT32 read_missing_packet_len(UINT8 frame_type);
|
||||
|
||||
UINT32 get_stream_id(char* g_data_t, UINT8 frame_type, UINT32 *skip_len);
|
||||
UINT32 read_seq_num_len(UINT8 flags);
|
||||
int read_conn_id_len(UINT8 flags);
|
||||
int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int thread_seq, void* a_packet);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user