diff options
Diffstat (limited to 'webrtc/p2p/base/portallocator.h')
-rw-r--r-- | webrtc/p2p/base/portallocator.h | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/webrtc/p2p/base/portallocator.h b/webrtc/p2p/base/portallocator.h index 4f8ec2fbe6..6fb79b065e 100644 --- a/webrtc/p2p/base/portallocator.h +++ b/webrtc/p2p/base/portallocator.h @@ -14,6 +14,7 @@ #include <string> #include <vector> +#include "webrtc/p2p/base/port.h" #include "webrtc/p2p/base/portinterface.h" #include "webrtc/base/helpers.h" #include "webrtc/base/proxyinfo.h" @@ -46,10 +47,14 @@ enum { PORTALLOCATOR_ENABLE_SHARED_UFRAG = 0x80, PORTALLOCATOR_ENABLE_SHARED_SOCKET = 0x100, PORTALLOCATOR_ENABLE_STUN_RETRANSMIT_ATTRIBUTE = 0x200, + // When specified, we'll only allocate the STUN candidate for the public + // interface as seen by regular http traffic and the HOST candidate associated + // with the default local interface. PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION = 0x400, - // When specified, a loopback candidate will be generated if - // PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION is specified. - PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE = 0x800, + // When specified along with PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION, the + // default local candidate mentioned above will not be allocated. Only the + // STUN candidate will be. + PORTALLOCATOR_DISABLE_DEFAULT_LOCAL_CANDIDATE = 0x800, // Disallow use of UDP when connecting to a relay server. Since proxy servers // usually don't handle UDP, using UDP will leak the IP address. PORTALLOCATOR_DISABLE_UDP_RELAY = 0x1000, @@ -71,6 +76,38 @@ enum { CF_ALL = 0x7, }; +// TODO(deadbeef): Rename to TurnCredentials (and username to ufrag). +struct RelayCredentials { + RelayCredentials() {} + RelayCredentials(const std::string& username, const std::string& password) + : username(username), password(password) {} + + std::string username; + std::string password; +}; + +typedef std::vector<ProtocolAddress> PortList; +// TODO(deadbeef): Rename to TurnServerConfig. +struct RelayServerConfig { + RelayServerConfig(RelayType type) : type(type), priority(0) {} + + RelayServerConfig(const std::string& address, + int port, + const std::string& username, + const std::string& password, + ProtocolType proto, + bool secure) + : type(RELAY_TURN), credentials(username, password) { + ports.push_back( + ProtocolAddress(rtc::SocketAddress(address, port), proto, secure)); + } + + RelayType type; + PortList ports; + RelayCredentials credentials; + int priority; +}; + class PortAllocatorSession : public sigslot::has_slots<> { public: // Content name passed in mostly for logging and debugging. @@ -137,6 +174,18 @@ class PortAllocator : public sigslot::has_slots<> { } virtual ~PortAllocator() {} + // Set STUN and TURN servers to be used in future sessions. + virtual void SetIceServers( + const ServerAddresses& stun_servers, + const std::vector<RelayServerConfig>& turn_servers) = 0; + + // Sets the network types to ignore. + // Values are defined by the AdapterType enum. + // For instance, calling this with + // ADAPTER_TYPE_ETHERNET | ADAPTER_TYPE_LOOPBACK will ignore Ethernet and + // loopback interfaces. + virtual void SetNetworkIgnoreMask(int network_ignore_mask) = 0; + PortAllocatorSession* CreateSession( const std::string& sid, const std::string& content_name, |