1 //
2 // Created by Grishka on 20.04.2018.
3 //
4 
5 #ifndef TGVOIP_PRIVATEDEFINES_H
6 #define TGVOIP_PRIVATEDEFINES_H
7 
8 #define PKT_INIT 1
9 #define PKT_INIT_ACK 2
10 #define PKT_STREAM_STATE 3
11 #define PKT_STREAM_DATA 4
12 #define PKT_UPDATE_STREAMS 5
13 #define PKT_PING 6
14 #define PKT_PONG 7
15 #define PKT_STREAM_DATA_X2 8
16 #define PKT_STREAM_DATA_X3 9
17 #define PKT_LAN_ENDPOINT 10
18 #define PKT_NETWORK_CHANGED 11
19 #define PKT_SWITCH_PREF_RELAY 12
20 #define PKT_SWITCH_TO_P2P 13
21 #define PKT_NOP 14
22 //#define PKT_GROUP_CALL_KEY 15		// replaced with 'extra' in 2.1 (protocol v6)
23 //#define PKT_REQUEST_GROUP 16
24 #define PKT_STREAM_EC 17
25 
26 #define IS_MOBILE_NETWORK(x) (x==NET_TYPE_GPRS || x==NET_TYPE_EDGE || x==NET_TYPE_3G || x==NET_TYPE_HSPA || x==NET_TYPE_LTE || x==NET_TYPE_OTHER_MOBILE)
27 
28 #define PROTOCOL_NAME 0x50567247 // "GrVP" in little endian (reversed here)
29 #define PROTOCOL_VERSION 9
30 #define MIN_PROTOCOL_VERSION 3
31 
32 #define STREAM_DATA_FLAG_LEN16 0x40
33 #define STREAM_DATA_FLAG_HAS_MORE_FLAGS 0x80
34 // Since the data can't be larger than the MTU anyway,
35 // 5 top bits of data length are allocated for these flags
36 #define STREAM_DATA_XFLAG_KEYFRAME (1 << 15)
37 #define STREAM_DATA_XFLAG_FRAGMENTED (1 << 14)
38 #define STREAM_DATA_XFLAG_EXTRA_FEC (1 << 13)
39 
40 #define STREAM_TYPE_AUDIO 1
41 #define STREAM_TYPE_VIDEO 2
42 
43 #define FOURCC(a,b,c,d) ((uint32_t)d | ((uint32_t)c << 8) | ((uint32_t)b << 16) | ((uint32_t)a << 24))
44 #define PRINT_FOURCC(x) (char)(x >> 24), (char)(x >> 16), (char)(x >> 8), (char)x
45 
46 #define CODEC_OPUS_OLD 1
47 #define CODEC_OPUS FOURCC('O','P','U','S')
48 
49 #define CODEC_AVC FOURCC('A','V','C',' ')
50 #define CODEC_HEVC FOURCC('H','E','V','C')
51 #define CODEC_VP8 FOURCC('V','P','8','0')
52 #define CODEC_VP9 FOURCC('V','P','9','0')
53 #define CODEC_AV1 FOURCC('A','V','0','1')
54 
55 #define DEFAULT_MTU 1100
56 
57 /*flags:# voice_call_id:flags.2?int128 in_seq_no:flags.4?int out_seq_no:flags.4?int
58 	 * recent_received_mask:flags.5?int proto:flags.3?int extra:flags.1?string raw_data:flags.0?string*/
59 #define PFLAG_HAS_DATA 1
60 #define PFLAG_HAS_EXTRA 2
61 #define PFLAG_HAS_CALL_ID 4
62 #define PFLAG_HAS_PROTO 8
63 #define PFLAG_HAS_SEQ 16
64 #define PFLAG_HAS_RECENT_RECV 32
65 #define PFLAG_HAS_SENDER_TAG_HASH 64
66 
67 #define XPFLAG_HAS_EXTRA 1
68 #define XPFLAG_HAS_RECV_TS 2
69 
70 #define EXTRA_TYPE_STREAM_FLAGS 1
71 #define EXTRA_TYPE_STREAM_CSD 2
72 #define EXTRA_TYPE_LAN_ENDPOINT 3
73 #define EXTRA_TYPE_NETWORK_CHANGED 4
74 #define EXTRA_TYPE_GROUP_CALL_KEY 5
75 #define EXTRA_TYPE_REQUEST_GROUP 6
76 #define EXTRA_TYPE_IPV6_ENDPOINT 7
77 #define EXTRA_TYPE_BW_ESTIMATE 8
78 #define EXTRA_TYPE_VIDEO_ROTATION 9
79 
80 #define STREAM_FLAG_ENABLED 1
81 #define STREAM_FLAG_DTX 2
82 #define STREAM_FLAG_EXTRA_EC 4
83 
84 #define STREAM_RFLAG_SUPPORTED 1
85 
86 #define INIT_FLAG_DATA_SAVING_ENABLED 1
87 #define INIT_FLAG_GROUP_CALLS_SUPPORTED 2
88 #define INIT_FLAG_VIDEO_SEND_SUPPORTED 4
89 #define INIT_FLAG_VIDEO_RECV_SUPPORTED 8
90 
91 #define INIT_VIDEO_RES_NONE 0
92 #define INIT_VIDEO_RES_240 1
93 #define INIT_VIDEO_RES_360 2
94 #define INIT_VIDEO_RES_480 3
95 #define INIT_VIDEO_RES_720 4
96 #define INIT_VIDEO_RES_1080 5
97 #define INIT_VIDEO_RES_1440 6
98 #define INIT_VIDEO_RES_4K 7
99 
100 #define TLID_DECRYPTED_AUDIO_BLOCK 0xDBF948C1
101 #define TLID_SIMPLE_AUDIO_BLOCK 0xCC0D0E76
102 #define TLID_UDP_REFLECTOR_PEER_INFO 0x27D9371C
103 #define TLID_UDP_REFLECTOR_PEER_INFO_IPV6 0x83fc73b1
104 #define TLID_UDP_REFLECTOR_SELF_INFO 0xc01572c7
105 #define TLID_UDP_REFLECTOR_REQUEST_PACKETS_INFO 0x1a06fc96
106 #define TLID_UDP_REFLECTOR_LAST_PACKETS_INFO 0x0e107305
107 #define TLID_VECTOR 0x1cb5c415
108 #define PAD4(x) (4-(x+(x<=253 ? 1 : 0))%4)
109 
110 #define MAX_RECENT_PACKETS 128
111 
112 #define MAX(a,b) (a>b ? a : b)
113 #define MIN(a,b) (a<b ? a : b)
114 
115 #define SHA1_LENGTH 20
116 #define SHA256_LENGTH 32
117 
118 #ifdef _MSC_VER
119 #define MSC_STACK_FALLBACK(a, b) (b)
120 #else
121 #define MSC_STACK_FALLBACK(a, b) (a)
122 #endif
123 
124 #define SEQ_MAX 0xFFFFFFFF
125 
seqgt(uint32_t s1,uint32_t s2)126 inline bool seqgt(uint32_t s1, uint32_t s2){
127 	return ((s1>s2) && (s1-s2<=SEQ_MAX/2)) || ((s1<s2) && (s2-s1>SEQ_MAX/2));
128 }
129 
130 #define NEED_RATE_FLAG_SHITTY_INTERNET_MODE 1
131 #define NEED_RATE_FLAG_UDP_NA 2
132 #define NEED_RATE_FLAG_UDP_BAD 4
133 #define NEED_RATE_FLAG_RECONNECTING 8
134 
135 #define VIDEO_FRAME_FLAG_KEYFRAME 1
136 
137 #endif //TGVOIP_PRIVATEDEFINES_H
138