From c5cb81762c1a9cccc89a15c1716642972a4517fe Mon Sep 17 00:00:00 2001 From: Paul-Louis Ageneau Date: Mon, 17 May 2021 15:16:15 +0200 Subject: [PATCH] Added bindAddress configuration setting --- include/rtc/configuration.hpp | 1 + include/rtc/rtc.h | 9 +++++---- src/capi.cpp | 9 ++++++--- src/impl/icetransport.cpp | 5 +++++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/include/rtc/configuration.hpp b/include/rtc/configuration.hpp index 150c092..400efbd 100644 --- a/include/rtc/configuration.hpp +++ b/include/rtc/configuration.hpp @@ -74,6 +74,7 @@ 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; diff --git a/include/rtc/rtc.h b/include/rtc/rtc.h index 671772d..ec53242 100644 --- a/include/rtc/rtc.h +++ b/include/rtc/rtc.h @@ -150,13 +150,14 @@ RTC_EXPORT void *rtcGetUserPointer(int i); typedef struct { const char **iceServers; int iceServersCount; + const char *bindAddress; // libjuice only, NULL means any rtcCertificateType certificateType; bool enableIceTcp; bool disableAutoNegotiation; - uint16_t portRangeBegin; - uint16_t portRangeEnd; - int mtu; // <= 0 means automatic - int maxMessageSize; // <= 0 means default + uint16_t portRangeBegin; // 0 means automatic + uint16_t portRangeEnd; // 0 means automatic + int mtu; // <= 0 means automatic + int maxMessageSize; // <= 0 means default } rtcConfiguration; RTC_EXPORT int rtcCreatePeerConnection(const rtcConfiguration *config); // returns pc id diff --git a/src/capi.cpp b/src/capi.cpp index 9d94c6f..82edb3d 100644 --- a/src/capi.cpp +++ b/src/capi.cpp @@ -290,15 +290,18 @@ int rtcCreatePeerConnection(const rtcConfiguration *config) { for (int i = 0; i < config->iceServersCount; ++i) c.iceServers.emplace_back(string(config->iceServers[i])); - c.certificateType = static_cast(config->certificateType); - c.enableIceTcp = config->enableIceTcp; - c.disableAutoNegotiation = config->disableAutoNegotiation; + if (config->bindAddress) + c.bindAddress = string(config->bindAddress); if (config->portRangeBegin > 0 || config->portRangeEnd > 0) { c.portRangeBegin = config->portRangeBegin; c.portRangeEnd = config->portRangeEnd; } + c.certificateType = static_cast(config->certificateType); + c.enableIceTcp = config->enableIceTcp; + c.disableAutoNegotiation = config->disableAutoNegotiation; + if (config->mtu > 0) c.mtu = size_t(config->mtu); diff --git a/src/impl/icetransport.cpp b/src/impl/icetransport.cpp index dbec7c6..6b02bd0 100644 --- a/src/impl/icetransport.cpp +++ b/src/impl/icetransport.cpp @@ -131,6 +131,11 @@ IceTransport::IceTransport(const Configuration &config, candidate_callback candi jconfig.turn_servers = k > 0 ? turn_servers : nullptr; jconfig.turn_servers_count = k; + // Bind address + if (config.bindAddress) { + jconfig.bind_address = config.bindAddress->c_str(); + } + // Port range if (config.portRangeBegin > 1024 || (config.portRangeEnd != 0 && config.portRangeEnd != 65535)) {