mirror of
https://github.com/danog/libtgvoip.git
synced 2024-11-30 04:39:03 +01:00
136 lines
3.9 KiB
C++
136 lines
3.9 KiB
C++
//
|
|
// Created by Grishka on 20.04.2018.
|
|
//
|
|
|
|
#pragma once
|
|
#include <array>
|
|
|
|
// Common macros
|
|
#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)
|
|
#define CHECK_ENDPOINT_PROTOCOL(endpointType, packetProtocol) ((endpointType != Endpoint::Type::TCP_RELAY && packetProtocol == NetworkProtocol::UDP) || (endpointType == Endpoint::Type::TCP_RELAY && packetProtocol == NetworkProtocol::TCP))
|
|
#define PAD4(x) (4 - (x + (x <= 253 ? 1 : 0)) % 4)
|
|
|
|
// Protocol name/version
|
|
enum ProtocolVersions
|
|
{
|
|
PROTOCOL_OLD = 9,
|
|
PROTOCOL_RELIABLE = 10
|
|
};
|
|
|
|
#define PROTOCOL_NAME 0x50567247 // "GrVP" in little endian (reversed here)
|
|
#define PROTOCOL_VERSION 9
|
|
#define MIN_PROTOCOL_VERSION 3
|
|
|
|
// Max recent packets
|
|
#define MAX_RECENT_PACKETS 128
|
|
|
|
// Packet types
|
|
#define PKT_INIT 1
|
|
#define PKT_INIT_ACK 2
|
|
#define PKT_STREAM_DATA 4
|
|
#define PKT_PING 6
|
|
#define PKT_PONG 7
|
|
#define PKT_NOP 14
|
|
|
|
#define PKT_STREAM_EC 17 // Deprecated
|
|
|
|
#define PKT_STREAM_DATA_X2 8 // Deprecated
|
|
#define PKT_STREAM_DATA_X3 9 // Deprecated
|
|
|
|
#define PKT_STREAM_STATE 3 // Deprecated, use extra
|
|
#define PKT_LAN_ENDPOINT 10 // Deprecated, use extra
|
|
#define PKT_NETWORK_CHANGED 11 // Deprecated, use extra
|
|
|
|
// #define PKT_UPDATE_STREAMS 5 // Not used anymore
|
|
// #define PKT_SWITCH_PREF_RELAY 12 // Not used anymore
|
|
// #define PKT_SWITCH_TO_P2P 13 // Not used anymore
|
|
// #define PKT_GROUP_CALL_KEY 15 // replaced with 'extra' in 2.1 (protocol v6)
|
|
// #define PKT_REQUEST_GROUP 16
|
|
|
|
|
|
|
|
// Stream data flags
|
|
#define STREAM_DATA_FLAG_LEN16 0x40
|
|
#define STREAM_DATA_FLAG_HAS_MORE_FLAGS 0x80 // Not used
|
|
|
|
// Since the data can't be larger than the MTU anyway,
|
|
// 5 top bits of data length are allocated for these flags
|
|
#define STREAM_DATA_XFLAG_KEYFRAME (1 << 15)
|
|
#define STREAM_DATA_XFLAG_FRAGMENTED (1 << 14)
|
|
#define STREAM_DATA_XFLAG_EXTRA_FEC (1 << 13)
|
|
|
|
// Extra packet flags
|
|
#define XPFLAG_HAS_EXTRA 1 // Signaling
|
|
#define XPFLAG_HAS_RECV_TS 2 // Video calls
|
|
|
|
|
|
// For codec identifiers
|
|
#define FOURCC(a, b, c, d) ((uint32_t)d | ((uint32_t)c << 8) | ((uint32_t)b << 16) | ((uint32_t)a << 24))
|
|
#define PRINT_FOURCC(x) (char)(x >> 24), (char)(x >> 16), (char)(x >> 8), (char)x
|
|
|
|
#define CODEC_OPUS_OLD 1
|
|
|
|
// MTU
|
|
#define DEFAULT_MTU 1100
|
|
|
|
// Video flags
|
|
#define INIT_VIDEO_RES_NONE 0
|
|
#define INIT_VIDEO_RES_240 1
|
|
#define INIT_VIDEO_RES_360 2
|
|
#define INIT_VIDEO_RES_480 3
|
|
#define INIT_VIDEO_RES_720 4
|
|
#define INIT_VIDEO_RES_1080 5
|
|
#define INIT_VIDEO_RES_1440 6
|
|
#define INIT_VIDEO_RES_4K 7
|
|
|
|
#define VIDEO_FRAME_FLAG_KEYFRAME 1
|
|
|
|
#define VIDEO_ROTATION_MASK 3
|
|
#define VIDEO_ROTATION_0 0
|
|
#define VIDEO_ROTATION_90 1
|
|
#define VIDEO_ROTATION_180 2
|
|
#define VIDEO_ROTATION_270 3
|
|
|
|
#define FEC_SCHEME_XOR 1
|
|
#define FEC_SCHEME_CM256 2
|
|
|
|
// TLIDs of reflector signaling
|
|
#define TLID_DECRYPTED_AUDIO_BLOCK 0xDBF948C1
|
|
#define TLID_SIMPLE_AUDIO_BLOCK 0xCC0D0E76
|
|
#define TLID_UDP_REFLECTOR_PEER_INFO 0x27D9371C
|
|
#define TLID_UDP_REFLECTOR_PEER_INFO_IPV6 0x83fc73b1
|
|
#define TLID_UDP_REFLECTOR_SELF_INFO 0xc01572c7
|
|
#define TLID_UDP_REFLECTOR_REQUEST_PACKETS_INFO 0x1a06fc96
|
|
#define TLID_UDP_REFLECTOR_LAST_PACKETS_INFO 0x0e107305
|
|
#define TLID_VECTOR 0x1cb5c415
|
|
|
|
// Rating flags
|
|
#define NEED_RATE_FLAG_SHITTY_INTERNET_MODE 1
|
|
#define NEED_RATE_FLAG_UDP_NA 2
|
|
#define NEED_RATE_FLAG_UDP_BAD 4
|
|
#define NEED_RATE_FLAG_RECONNECTING 8
|
|
|
|
|
|
// Crypto stuff
|
|
#define SHA1_LENGTH 20
|
|
#define SHA256_LENGTH 32
|
|
|
|
#ifdef _MSC_VER
|
|
#define MSC_STACK_FALLBACK(a, b) (b)
|
|
#else
|
|
#define MSC_STACK_FALLBACK(a, b) (a)
|
|
#endif
|
|
|
|
|
|
|
|
// Legacy flags
|
|
/*flags:# voice_call_id:flags.2?int128 in_seq_no:flags.4?int out_seq_no:flags.4?int
|
|
* recent_received_mask:flags.5?int proto:flags.3?int extra:flags.1?string raw_data:flags.0?string*/
|
|
#define LEGACY_PFLAG_HAS_DATA 1
|
|
#define LEGACY_PFLAG_HAS_EXTRA 2
|
|
#define LEGACY_PFLAG_HAS_CALL_ID 4
|
|
#define LEGACY_PFLAG_HAS_PROTO 8
|
|
#define LEGACY_PFLAG_HAS_SEQ 16
|
|
#define LEGACY_PFLAG_HAS_RECENT_RECV 32
|
|
#define LEGACY_PFLAG_HAS_SENDER_TAG_HASH 64
|