Browse Source

Merge pull request #53 from murat-dogan/master

proxy support
Paul-Louis Ageneau 5 years ago
parent
commit
0f934aca8c
4 changed files with 36 additions and 4 deletions
  1. 1 1
      deps/libjuice
  2. 14 0
      include/rtc/configuration.hpp
  3. 3 0
      src/configuration.cpp
  4. 18 3
      src/icetransport.cpp

+ 1 - 1
deps/libjuice

@@ -1 +1 @@
-Subproject commit 47d8cc263abb3f3ca2530ca5516f6a52de37c312
+Subproject commit dd3a5375b5fcc0e6122217dbf22af55bd6910ec3

+ 14 - 0
include/rtc/configuration.hpp

@@ -51,8 +51,22 @@ struct IceServer {
 	RelayType relayType;
 	RelayType relayType;
 };
 };
 
 
+struct ProxyServer {
+	enum class Type { None = 0, Socks5, Http, Last = Http };
+
+	ProxyServer(Type type_, string ip_, uint16_t port_, string username_ = "",
+	            string password_ = "");
+
+	Type type;
+	string ip;
+	uint16_t port;
+	string username;
+	string password;
+};
+
 struct Configuration {
 struct Configuration {
 	std::vector<IceServer> iceServers;
 	std::vector<IceServer> iceServers;
+	std::optional<ProxyServer> proxyServer;
 	bool enableIceTcp = false;
 	bool enableIceTcp = false;
 	uint16_t portRangeBegin = 1024;
 	uint16_t portRangeBegin = 1024;
 	uint16_t portRangeEnd = 65535;
 	uint16_t portRangeEnd = 65535;

+ 3 - 0
src/configuration.cpp

@@ -84,4 +84,7 @@ IceServer::IceServer(string hostname_, string service_, string username_, string
     : hostname(std::move(hostname_)), service(std::move(service_)), type(Type::Turn),
     : hostname(std::move(hostname_)), service(std::move(service_)), type(Type::Turn),
       username(std::move(username_)), password(std::move(password_)), relayType(relayType_) {}
       username(std::move(username_)), password(std::move(password_)), relayType(relayType_) {}
 
 
+ProxyServer::ProxyServer(Type type_, string ip_, uint16_t port_, string username_, string password_)
+    : type(type_), ip(ip_), port(port_), username(username_), password(password_) {}
+
 } // namespace rtc
 } // namespace rtc

+ 18 - 3
src/icetransport.cpp

@@ -319,6 +319,18 @@ IceTransport::IceTransport(const Configuration &config, Description::Role role,
 	g_object_set(G_OBJECT(mNiceAgent.get()), "upnp", FALSE, nullptr);
 	g_object_set(G_OBJECT(mNiceAgent.get()), "upnp", FALSE, nullptr);
 	g_object_set(G_OBJECT(mNiceAgent.get()), "upnp-timeout", 200, nullptr);
 	g_object_set(G_OBJECT(mNiceAgent.get()), "upnp-timeout", 200, nullptr);
 
 
+	// Proxy
+	if (config.proxyServer.has_value()) {
+		ProxyServer proxyServer = config.proxyServer.value();
+		g_object_set(G_OBJECT(mNiceAgent.get()), "proxy-type", proxyServer.type, nullptr);
+		g_object_set(G_OBJECT(mNiceAgent.get()), "proxy-ip", proxyServer.ip.c_str(), nullptr);
+		g_object_set(G_OBJECT(mNiceAgent.get()), "proxy-port", proxyServer.port, nullptr);
+		g_object_set(G_OBJECT(mNiceAgent.get()), "proxy-username", proxyServer.username.c_str(),
+		             nullptr);
+		g_object_set(G_OBJECT(mNiceAgent.get()), "proxy-password", proxyServer.password.c_str(),
+		             nullptr);
+	}
+
 	// Randomize order
 	// Randomize order
 	std::vector<IceServer> servers = config.iceServers;
 	std::vector<IceServer> servers = config.iceServers;
 	unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
 	unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
@@ -673,13 +685,15 @@ bool IceTransport::getSelectedCandidatePair(CandidateInfo *localInfo, CandidateI
 	localInfo->address = std::string(ipaddr);
 	localInfo->address = std::string(ipaddr);
 	localInfo->port = nice_address_get_port(&local->addr);
 	localInfo->port = nice_address_get_port(&local->addr);
 	localInfo->type = IceTransport::NiceTypeToCandidateType(local->type);
 	localInfo->type = IceTransport::NiceTypeToCandidateType(local->type);
-	localInfo->transportType = IceTransport::NiceTransportTypeToCandidateTransportType(local->transport);
+	localInfo->transportType =
+	    IceTransport::NiceTransportTypeToCandidateTransportType(local->transport);
 
 
 	nice_address_to_string(&remote->addr, ipaddr);
 	nice_address_to_string(&remote->addr, ipaddr);
 	remoteInfo->address = std::string(ipaddr);
 	remoteInfo->address = std::string(ipaddr);
 	remoteInfo->port = nice_address_get_port(&remote->addr);
 	remoteInfo->port = nice_address_get_port(&remote->addr);
 	remoteInfo->type = IceTransport::NiceTypeToCandidateType(remote->type);
 	remoteInfo->type = IceTransport::NiceTypeToCandidateType(remote->type);
-	remoteInfo->transportType = IceTransport::NiceTransportTypeToCandidateTransportType(remote->transport);
+	remoteInfo->transportType =
+	    IceTransport::NiceTransportTypeToCandidateTransportType(remote->transport);
 
 
 	return true;
 	return true;
 }
 }
@@ -697,7 +711,8 @@ const CandidateType IceTransport::NiceTypeToCandidateType(NiceCandidateType type
 	}
 	}
 }
 }
 
 
-const CandidateTransportType IceTransport::NiceTransportTypeToCandidateTransportType(NiceCandidateTransport type) {
+const CandidateTransportType
+IceTransport::NiceTransportTypeToCandidateTransportType(NiceCandidateTransport type) {
 	switch (type) {
 	switch (type) {
 	case NiceCandidateTransport::NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE:
 	case NiceCandidateTransport::NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE:
 		return CandidateTransportType::TcpActive;
 		return CandidateTransportType::TcpActive;