Browse Source

Added constructors to IceServer

Paul-Louis Ageneau 6 years ago
parent
commit
247c48b8a6
3 changed files with 52 additions and 5 deletions
  1. 39 0
      src/iceconfiguration.cpp
  2. 6 3
      src/iceconfiguration.hpp
  3. 7 2
      src/icetransport.cpp

+ 39 - 0
src/iceconfiguration.cpp

@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2019 Paul-Louis Ageneau
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "iceconfiguration.hpp"
+
+namespace rtc {
+
+using std::to_string;
+
+IceServer::IceServer(const string &host) {
+	if(size_t pos = host.rfind(':'); pos != string::npos) {
+		hostname = host.substr(0, pos);
+		service = host.substr(pos + 1);
+	} else {
+		hostname = host;
+		service = "3478"; // STUN UDP port
+	}
+}
+
+IceServer::IceServer(const string &hostname_, uint16_t port_) : IceServer(hostname_, to_string(port_)) {}
+
+IceServer::IceServer(const string &hostname_, const string &service_) : hostname(hostname_), service(service_) {}
+
+} // namespace rtc

+ 6 - 3
src/iceconfiguration.hpp

@@ -28,17 +28,20 @@
 namespace rtc {
 namespace rtc {
 
 
 struct IceServer {
 struct IceServer {
+	IceServer(const string &host_);
+	IceServer(const string &hostname_, uint16_t port_);
+	IceServer(const string &hostname_, const string &service_);
+
 	string hostname;
 	string hostname;
 	string service;
 	string service;
 };
 };
 
 
 struct IceConfiguration {
 struct IceConfiguration {
 	std::vector<IceServer> servers;
 	std::vector<IceServer> servers;
-	uint16_t portRangeBegin = 0;
-	uint16_t portRangeEnd = 0xFFFF;
+	uint16_t portRangeBegin = 1024;
+	uint16_t portRangeEnd = 65535;
 };
 };
 
 
 } // namespace rtc
 } // namespace rtc
 
 
 #endif
 #endif
-

+ 7 - 2
src/icetransport.cpp

@@ -64,7 +64,12 @@ IceTransport::IceTransport(const IceConfiguration &config, Description::Role rol
 	std::shuffle(servers.begin(), servers.end(), std::default_random_engine(seed));
 	std::shuffle(servers.begin(), servers.end(), std::default_random_engine(seed));
 
 
 	bool success = false;
 	bool success = false;
-	for (const auto &server : servers) {
+	for (auto &server : servers) {
+		if (server.hostname.empty())
+			continue;
+		if (server.service.empty())
+			server.service = "3478"; // STUN UDP port
+
 		struct addrinfo hints = {};
 		struct addrinfo hints = {};
 		hints.ai_family = AF_INET; // IPv4
 		hints.ai_family = AF_INET; // IPv4
 		hints.ai_socktype = SOCK_DGRAM;
 		hints.ai_socktype = SOCK_DGRAM;
@@ -83,7 +88,7 @@ IceTransport::IceTransport(const IceConfiguration &config, Description::Role rol
 				                NI_NUMERICHOST | NI_NUMERICSERV) == 0) {
 				                NI_NUMERICHOST | NI_NUMERICSERV) == 0) {
 					g_object_set(G_OBJECT(mNiceAgent.get()), "stun-server", nodebuffer, nullptr);
 					g_object_set(G_OBJECT(mNiceAgent.get()), "stun-server", nodebuffer, nullptr);
 					g_object_set(G_OBJECT(mNiceAgent.get()), "stun-server-port",
 					g_object_set(G_OBJECT(mNiceAgent.get()), "stun-server-port",
-					             std::atoi(servbuffer), nullptr);
+					             std::stoul(servbuffer), nullptr);
 					success = true;
 					success = true;
 					break;
 					break;
 				}
 				}