aboutsummaryrefslogtreecommitdiff
path: root/src/DirectConnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DirectConnection.cpp')
-rw-r--r--src/DirectConnection.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/DirectConnection.cpp b/src/DirectConnection.cpp
index 36d2d16..c19fa63 100644
--- a/src/DirectConnection.cpp
+++ b/src/DirectConnection.cpp
@@ -75,13 +75,43 @@ namespace sibs
void DirectConnections::connectServer(const Ipv4 &address, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc)
{
- connect(address, false, true, connectCallbackFunc, receiveDataCallbackFunc, false);
+ connect(address, true, true, connectCallbackFunc, receiveDataCallbackFunc, true);
}
void DirectConnections::connect(const Ipv4 &address, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc)
{
connect(address, true, true, connectCallbackFunc, receiveDataCallbackFunc, true);
}
+
+ void DirectConnections::connect(const Ipv4 &address, std::shared_ptr<DirectConnectionPeer> serverPeer, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc)
+ {
+ std::thread([this, address, connectCallbackFunc, receiveDataCallbackFunc, serverPeer]()
+ {
+ if(UDT::bind(serverPeer->socket, (sockaddr*)&address.address, sizeof(address.address)) == UDT::ERROR)
+ {
+ std::string errMsg = "UDT: Failed to bind, error: ";
+ errMsg += UDT::getlasterror_desc();
+ throw SocketCreateException(errMsg);
+ }
+
+ Log::debug("DirectConnections: Connecting to peer (ip: %s, port: %d, rendezvous: yes)", address.getAddress().c_str(), address.getPort());
+ if(UDT::connect(serverPeer->socket, (sockaddr*)&address.address, sizeof(address.address)) == UDT::ERROR)
+ {
+ if(connectCallbackFunc)
+ connectCallbackFunc(serverPeer, PubSubResult::ERROR, UDT::getlasterror_desc());
+ return;
+ }
+
+ serverPeer->address = address;
+ serverPeer->receiveDataCallbackFunc = receiveDataCallbackFunc;
+ peersMutex.lock();
+ peers[serverPeer->socket] = serverPeer;
+ peersMutex.unlock();
+
+ if(connectCallbackFunc)
+ connectCallbackFunc(serverPeer, PubSubResult::OK, "");
+ }).detach();
+ }
void DirectConnections::connect(const Ipv4 &address, bool rendezvous, bool reuseAddr, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc, bool bind)
{