/** * 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 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 username; optional 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 iceServers; optional proxyServer; // libnice only optional 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 forceMediaTransport = false; // Port range uint16_t portRangeBegin = 1024; uint16_t portRangeEnd = 65535; // Network MTU optional mtu; // Local maximum message size for Data Channels optional maxMessageSize; }; #ifdef RTC_ENABLE_WEBSOCKET struct WebSocketConfiguration { bool disableTlsVerification = false; // if true, don't verify the TLS certificate optional proxyServer; // only non-authenticated http supported for now std::vector protocols; optional connectionTimeout; // zero to disable optional pingInterval; // zero to disable optional maxOutstandingPings; optional caCertificatePemFile; optional certificatePemFile; optional keyPemFile; optional keyPemPass; optional maxMessageSize; }; struct WebSocketServerConfiguration { uint16_t port = 8080; bool enableTls = false; optional certificatePemFile; optional keyPemFile; optional keyPemPass; optional bindAddress; optional connectionTimeout; optional maxMessageSize; }; #endif } // namespace rtc #endif