forked from paullouisageneau/libdatachannel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfiguration.hpp
124 lines (98 loc) · 3.34 KB
/
configuration.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* Copyright (c) 2019 Paul-Louis Ageneau
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#ifndef RTC_ICE_CONFIGURATION_H
#define RTC_ICE_CONFIGURATION_H
#include "common.hpp"
#include <vector>
namespace rtc {
struct RTC_CPP_EXPORT IceServer {
enum class Type { Stun, Turn };
enum class RelayType { TurnUdp, TurnTcp, TurnTls };
// Any type
IceServer(const string &url);
// STUN
IceServer(string hostname_, uint16_t port_);
IceServer(string hostname_, string service_);
// TURN
IceServer(string hostname_, uint16_t port, string username_, string password_,
RelayType relayType_ = RelayType::TurnUdp);
IceServer(string hostname_, string service_, string username_, string password_,
RelayType relayType_ = RelayType::TurnUdp);
string hostname;
uint16_t port;
Type type;
string username;
string password;
RelayType relayType;
};
struct RTC_CPP_EXPORT ProxyServer {
enum class Type { Http, Socks5 };
ProxyServer(const string &url);
ProxyServer(Type type_, string hostname_, uint16_t port_);
ProxyServer(Type type_, string hostname_, uint16_t port_, string username_, string password_);
Type type;
string hostname;
uint16_t port;
optional<string> username;
optional<string> password;
};
enum class CertificateType {
Default = RTC_CERTIFICATE_DEFAULT, // ECDSA
Ecdsa = RTC_CERTIFICATE_ECDSA,
Rsa = RTC_CERTIFICATE_RSA
};
enum class TransportPolicy { All = RTC_TRANSPORT_POLICY_ALL, Relay = RTC_TRANSPORT_POLICY_RELAY };
struct RTC_CPP_EXPORT Configuration {
// ICE settings
std::vector<IceServer> iceServers;
optional<ProxyServer> proxyServer; // libnice only
optional<string> bindAddress; // libjuice only, default any
// Options
CertificateType certificateType = CertificateType::Default;
TransportPolicy iceTransportPolicy = TransportPolicy::All;
bool enableIceTcp = false; // libnice only
bool enableIceUdpMux = false; // libjuice only
bool disableAutoNegotiation = false;
bool disableAutoGathering = false;
bool forceMediaTransport = false;
bool disableFingerprintVerification = false;
// Port range
uint16_t portRangeBegin = 1024;
uint16_t portRangeEnd = 65535;
// Network MTU
optional<size_t> mtu;
// Local maximum message size for Data Channels
optional<size_t> maxMessageSize;
};
#ifdef RTC_ENABLE_WEBSOCKET
struct WebSocketConfiguration {
bool disableTlsVerification = false; // if true, don't verify the TLS certificate
optional<ProxyServer> proxyServer; // only non-authenticated http supported for now
std::vector<string> protocols;
optional<std::chrono::milliseconds> connectionTimeout; // zero to disable
optional<std::chrono::milliseconds> pingInterval; // zero to disable
optional<int> maxOutstandingPings;
optional<string> caCertificatePemFile;
optional<string> certificatePemFile;
optional<string> keyPemFile;
optional<string> keyPemPass;
optional<size_t> maxMessageSize;
};
struct WebSocketServerConfiguration {
uint16_t port = 8080;
bool enableTls = false;
optional<string> certificatePemFile;
optional<string> keyPemFile;
optional<string> keyPemPass;
optional<string> bindAddress;
optional<std::chrono::milliseconds> connectionTimeout;
optional<size_t> maxMessageSize;
};
#endif
} // namespace rtc
#endif