Browse Source

Show error dialog when ZeroTier fails

Fixes #2708
pull/3293/head
Anders Jenbo 4 years ago
parent
commit
f0cc7adbdf
  1. 10
      Source/DiabloUI/selgame.cpp
  2. 6
      Source/dvlnet/base_protocol.h
  3. 5
      Source/dvlnet/protocol_zt.cpp

10
Source/DiabloUI/selgame.cpp

@ -478,7 +478,10 @@ void selgame_Password_Select(int /*value*/)
selgame_endMenu = true;
} else {
selgame_Free();
UiSelOkDialog(_("Multi Player Game"), SDL_GetError(), false);
std::string error = SDL_GetError();
if (error.empty())
error = "Unknown network error";
UiSelOkDialog(_("Multi Player Game"), error.c_str(), false);
LoadBackgroundArt("ui_art\\selgame.pcx");
selgame_Password_Init(selgame_selectedGame);
}
@ -496,7 +499,10 @@ void selgame_Password_Select(int /*value*/)
selgame_endMenu = true;
} else {
selgame_Free();
UiSelOkDialog(_("Multi Player Game"), SDL_GetError(), false);
std::string error = SDL_GetError();
if (error.empty())
error = "Unknown network error";
UiSelOkDialog(_("Multi Player Game"), error.c_str(), false);
LoadBackgroundArt("ui_art\\selgame.pcx");
selgame_Password_Init(0);
}

6
Source/dvlnet/base_protocol.h

@ -129,8 +129,7 @@ int base_protocol<P>::create(std::string addrstr)
plr_self = 0;
connected_table[plr_self] = true;
}
return (plr_self == PLR_BROADCAST ? MAX_PLRS : plr_self);
return (plr_self == PLR_BROADCAST ? -1 : plr_self);
}
template <class P>
@ -140,7 +139,8 @@ int base_protocol<P>::join(std::string addrstr)
if (wait_network())
if (wait_firstpeer())
wait_join();
return (plr_self == PLR_BROADCAST ? MAX_PLRS : plr_self);
return (plr_self == PLR_BROADCAST ? -1 : plr_self);
}
template <class P>

5
Source/dvlnet/protocol_zt.cpp

@ -63,6 +63,7 @@ bool protocol_zt::network_online()
auto ret = lwip_bind(fd_udp, (struct sockaddr *)&in6, sizeof(in6));
if (ret < 0) {
Log("lwip, (udp) bind: {}", strerror(errno));
SDL_SetError("lwip, (udp) bind: %s", strerror(errno));
throw protocol_exception();
}
set_nonblock(fd_udp);
@ -73,11 +74,13 @@ bool protocol_zt::network_online()
auto r1 = lwip_bind(fd_tcp, (struct sockaddr *)&in6, sizeof(in6));
if (r1 < 0) {
Log("lwip, (tcp) bind: {}", strerror(errno));
SDL_SetError("lwip, (udp) bind: %s", strerror(errno));
throw protocol_exception();
}
auto r2 = lwip_listen(fd_tcp, 10);
if (r2 < 0) {
Log("lwip, listen: {}", strerror(errno));
SDL_SetError("lwip, listen: %s", strerror(errno));
throw protocol_exception();
}
set_nonblock(fd_tcp);
@ -209,6 +212,7 @@ bool protocol_zt::accept_all()
std::copy(in6.sin6_addr.s6_addr, in6.sin6_addr.s6_addr + 16, ep.addr.begin());
if (peer_list[ep].fd != -1) {
Log("protocol_zt::accept_all: WARNING: overwriting connection");
SDL_SetError("protocol_zt::accept_all: WARNING: overwriting connection");
lwip_close(peer_list[ep].fd);
}
set_nonblock(newfd);
@ -258,6 +262,7 @@ void protocol_zt::disconnect(const endpoint &peer)
if (peer_list[peer].fd != -1) {
if (lwip_close(peer_list[peer].fd) < 0) {
Log("lwip_close: {}", strerror(errno));
SDL_SetError("lwip_close: %s", strerror(errno));
}
}
peer_list.erase(peer);

Loading…
Cancel
Save