Browse Source

ZeroTier networking fixes

pull/1754/head
Xadhoom 5 years ago committed by Anders Jenbo
parent
commit
6c4bad0af1
  1. 8
      Source/dvlnet/base_protocol.h
  2. 14
      Source/dvlnet/protocol_zt.cpp
  3. 7
      Source/dvlnet/protocol_zt.h

8
Source/dvlnet/base_protocol.h

@ -186,6 +186,13 @@ void base_protocol<P>::recv()
Log("{}", e.what());
}
}
while (proto.get_disconnected(sender)) {
for (plr_t i = 0; i < MAX_PLRS; ++i) {
if (peers[i] == sender) {
disconnect_net(i);
}
}
}
} catch (std::exception &e) {
Log("{}", e.what());
return;
@ -210,7 +217,6 @@ void base_protocol<P>::handle_join_request(packet &pkt, endpoint sender)
if ((j != plr_self) && (j != i) && peers[j]) {
auto infopkt = pktfty->make_packet<PT_CONNECT>(PLR_MASTER, PLR_BROADCAST, j, peers[j].serialize());
proto.send(sender, infopkt->data());
break;
}
}
auto reply = pktfty->make_packet<PT_JOIN_ACCEPT>(plr_self, PLR_BROADCAST,

14
Source/dvlnet/protocol_zt.cpp

@ -164,7 +164,7 @@ bool protocol_zt::send_queued_all()
{
for (auto &peer : peer_list) {
if (!send_queued_peer(peer.first)) {
// disconnect this peer
// handle error?
}
}
return true;
@ -175,7 +175,7 @@ bool protocol_zt::recv_from_peers()
for (auto &peer : peer_list) {
if (peer.second.fd != -1) {
if (!recv_peer(peer.first)) {
// error, disconnect?
disconnect_queue.push_back(peer.first);
}
}
}
@ -244,6 +244,16 @@ bool protocol_zt::recv(endpoint &peer, buffer_t &data)
return false;
}
bool protocol_zt::get_disconnected(endpoint &peer)
{
if (!disconnect_queue.empty()) {
peer = disconnect_queue.front();
disconnect_queue.pop_front();
return true;
}
return false;
}
void protocol_zt::disconnect(const endpoint &peer)
{
if (peer_list.count(peer)) {

7
Source/dvlnet/protocol_zt.h

@ -34,6 +34,11 @@ public:
return (addr != empty);
}
bool operator==(const endpoint &rhs) const
{
return addr == rhs.addr;
}
bool operator<(const endpoint &rhs) const
{
return addr < rhs.addr;
@ -61,6 +66,7 @@ public:
bool send_oob(const endpoint &peer, const buffer_t &data);
bool send_oob_mc(const buffer_t &data);
bool recv(endpoint &peer, buffer_t &data);
bool get_disconnected(endpoint &peer);
bool network_online();
static std::string make_default_gamename();
@ -75,6 +81,7 @@ private:
};
std::deque<std::pair<endpoint, buffer_t>> oob_recv_queue;
std::deque<endpoint> disconnect_queue;
std::map<endpoint, peer_state> peer_list;
int fd_tcp = -1;

Loading…
Cancel
Save