Added Gui elements in Netplay Setup Diag so a person can choose a traversal server

Fixed bug with UPnP so that it will grab the proper address and protocal
Fixed bug that caused dolphin to freeze when host codes were to large
This commit is contained in:
Ziek
2015-02-14 19:51:08 -08:00
parent 1dea3780a7
commit a629555e6b
9 changed files with 116 additions and 51 deletions

View File

@ -12,13 +12,14 @@ static void GetRandomishBytes(u8* buf, size_t size)
buf[i] = rand() & 0xff;
}
TraversalClient::TraversalClient(ENetHost* netHost, const std::string& server)
TraversalClient::TraversalClient(ENetHost* netHost, const std::string& server, const u16 port)
: m_NetHost(netHost)
, m_Client(nullptr)
, m_FailureReason(0)
, m_ConnectRequestId(0)
, m_PendingConnect(false)
, m_Server(server)
, m_port(port)
, m_PingTime(0)
{
netHost->intercept = TraversalClient::InterceptCallback;
@ -34,13 +35,12 @@ TraversalClient::~TraversalClient()
void TraversalClient::ReconnectToServer()
{
m_Server = "vps.qoid.us"; // XXX
if (enet_address_set_host(&m_ServerAddress, m_Server.c_str()))
{
OnFailure(BadHost);
return;
}
m_ServerAddress.port = 6262;
m_ServerAddress.port = m_port;
m_State = Connecting;
@ -326,12 +326,13 @@ static u16 g_OldPort;
bool EnsureTraversalClient(const std::string& server, u16 port)
{
if (!g_MainNetHost || !g_TraversalClient || server != g_OldServer || port != g_OldPort)
{
g_OldServer = server;
g_OldPort = port;
g_OldPort = port ;
ENetAddress addr = { ENET_HOST_ANY, port };
ENetAddress addr = { ENET_HOST_ANY, 0 };
ENetHost* host = enet_host_create(
&addr, // address
50, // peerCount
@ -344,7 +345,7 @@ bool EnsureTraversalClient(const std::string& server, u16 port)
return false;
}
g_MainNetHost.reset(host);
g_TraversalClient.reset(new TraversalClient(g_MainNetHost.get(), server));
g_TraversalClient.reset(new TraversalClient(g_MainNetHost.get(), server, port));
}
return true;
}

View File

@ -36,7 +36,7 @@ public:
ResendTimeout,
ConnectFailedError = 0x400,
};
TraversalClient(ENetHost* netHost, const std::string& server);
TraversalClient(ENetHost* netHost, const std::string& server, const u16 port);
~TraversalClient();
void Reset();
void ConnectToClient(const std::string& host);
@ -70,6 +70,7 @@ private:
std::list<OutgoingTraversalPacketInfo> m_OutgoingTraversalPackets;
ENetAddress m_ServerAddress;
std::string m_Server;
u16 m_port;
enet_uint32 m_PingTime;
};
extern std::unique_ptr<TraversalClient> g_TraversalClient;

View File

@ -4,8 +4,8 @@
#include <array>
#include "Common/CommonTypes.h"
typedef std::array<char, 8> TraversalHostId;
#define NETPLAY_CODE_SIZE 8
typedef std::array<char, NETPLAY_CODE_SIZE> TraversalHostId;
typedef u64 TraversalRequestId;
enum TraversalPacketType