aboutsummaryrefslogtreecommitdiff
path: root/src/DirectConnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DirectConnection.cpp')
-rw-r--r--src/DirectConnection.cpp48
1 files changed, 37 insertions, 11 deletions
diff --git a/src/DirectConnection.cpp b/src/DirectConnection.cpp
index e5a997f..cb71c8f 100644
--- a/src/DirectConnection.cpp
+++ b/src/DirectConnection.cpp
@@ -156,27 +156,53 @@ namespace sibs
connectCallbackFunc(peer, PubSubResult::RESULT_ERROR, e.what());
return PubSubConnectResult { peer, PubSubResult::RESULT_ERROR, e.what() };
}
+
+ int socketId = socket->udtSocket;
+ if(!server)
+ {
+ UDT::epoll_add_usock(eid, socket->udtSocket);
+ socket->eid = eid;
+ peersMutex.lock();
+ peers[socket->udtSocket] = peer;
+ peer->socket = std::move(socket);
+ peer->address = address;
+ peer->receiveDataCallbackFunc = receiveDataCallbackFunc;
+ peer->type = (server ? PeerType::SERVER : PeerType::CLIENT);
+ peer->routed = true;
+ peer->sharedKeys = 1;
+ peersMutex.unlock();
+ }
Log::debug("DirectConnections: Connecting to peer (ip: %s, port: %d, rendezvous: %s)", address.getAddress().c_str(), address.getPort(), rendezvous ? "yes" : "no");
- if(UDT::connect(socket->udtSocket, (sockaddr*)&address.address, sizeof(address.address)) == UDT::ERROR)
+ if(UDT::connect(socketId, (sockaddr*)&address.address, sizeof(address.address)) == UDT::ERROR)
{
+ if(!server)
+ peers.erase(peers.find(socketId));
+
if(connectCallbackFunc)
connectCallbackFunc(peer, PubSubResult::RESULT_ERROR, UDT::getlasterror_desc());
+
return PubSubConnectResult{ peer, PubSubResult::RESULT_ERROR, UDT::getlasterror_desc() };
}
-
- UDT::epoll_add_usock(eid, socket->udtSocket);
- socket->eid = eid;
- peersMutex.lock();
- peers[socket->udtSocket] = peer;
- peer->socket = std::move(socket);
- peer->address = address;
- peer->receiveDataCallbackFunc = receiveDataCallbackFunc;
- peer->type = (server ? PeerType::SERVER : PeerType::CLIENT);
- peersMutex.unlock();
+
+ if(server)
+ {
+ UDT::epoll_add_usock(eid, socketId);
+ socket->eid = eid;
+ peersMutex.lock();
+ peers[socketId] = peer;
+ peer->socket = std::move(socket);
+ peer->address = address;
+ peer->receiveDataCallbackFunc = receiveDataCallbackFunc;
+ peer->type = PeerType::SERVER;
+ peer->sharedKeys = 1;
+ peersMutex.unlock();
+ }
+ peer->routed = false;
if(connectCallbackFunc)
connectCallbackFunc(peer, PubSubResult::RESULT_OK, "");
+
return PubSubConnectResult { peer, PubSubResult::RESULT_OK, "" };
});
connectionResultsMutex.unlock();