#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 };
IceServer(const string &url);
IceServer(string hostname_, uint16_t port_);
IceServer(string hostname_, string service_);
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 = 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 {
std::vector<IceServer> iceServers;
optional<ProxyServer> proxyServer; optional<string> bindAddress;
CertificateType certificateType = CertificateType::Default;
TransportPolicy iceTransportPolicy = TransportPolicy::All;
bool enableIceTcp = false; bool enableIceUdpMux = false; bool disableAutoNegotiation = false;
bool disableAutoGathering = false;
bool forceMediaTransport = false;
bool disableFingerprintVerification = false;
uint16_t portRangeBegin = 1024;
uint16_t portRangeEnd = 65535;
optional<size_t> mtu;
optional<size_t> maxMessageSize;
optional<string> certificatePemFile;
optional<string> keyPemFile;
optional<string> keyPemPass;
};
#ifdef RTC_ENABLE_WEBSOCKET
struct WebSocketConfiguration {
bool disableTlsVerification = false; optional<ProxyServer> proxyServer; std::vector<string> protocols;
optional<std::chrono::milliseconds> connectionTimeout; optional<std::chrono::milliseconds> pingInterval; 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
}
#endif