dolphin/Source/Core/Common/TraversalProto.h
Ziek 4cdc307b87 Moved Traversal Client code over from old netplay
Moved over gui code for copying host code
added gui to netplay diag setup to switch between direct and traversal connection
2015-02-25 18:28:25 -08:00

97 lines
1.8 KiB
C++

// This file is public domain, in case it's useful to anyone. -comex
#pragma once
#include <array>
#include "Common/CommonTypes.h"
typedef std::array<char, 8> TraversalHostId;
typedef u64 TraversalRequestId;
enum TraversalPacketType
{
// [*->*]
TraversalPacketAck = 0,
// [c->s]
TraversalPacketPing = 1,
// [c->s]
TraversalPacketHelloFromClient = 2,
// [s->c]
TraversalPacketHelloFromServer = 3,
// [c->s] When connecting, first the client asks the central server...
TraversalPacketConnectPlease = 4,
// [s->c] ...who asks the game host to send a UDP packet to the
// client... (an ack implies success)
TraversalPacketPleaseSendPacket = 5,
// [s->c] ...which the central server relays back to the client.
TraversalPacketConnectReady = 6,
// [s->c] Alternately, the server might not have heard of this host.
TraversalPacketConnectFailed = 7
};
enum
{
TraversalProtoVersion = 0
};
enum TraversalConnectFailedReason
{
TraversalConnectFailedClientDidntRespond = 0,
TraversalConnectFailedClientFailure,
TraversalConnectFailedNoSuchClient
};
#pragma pack(push, 1)
struct TraversalInetAddress
{
u8 isIPV6;
u32 address[4];
u16 port;
};
struct TraversalPacket
{
u8 type;
TraversalRequestId requestId;
union
{
struct
{
u8 ok;
} ack;
struct
{
TraversalHostId hostId;
} ping;
struct
{
u8 protoVersion;
} helloFromClient;
struct
{
u8 ok;
TraversalHostId yourHostId;
TraversalInetAddress yourAddress; // currently unused
} helloFromServer;
struct
{
TraversalHostId hostId;
} connectPlease;
struct
{
TraversalInetAddress address;
} pleaseSendPacket;
struct
{
TraversalRequestId requestId;
TraversalInetAddress address;
} connectReady;
struct
{
TraversalRequestId requestId;
u8 reason;
} connectFailed;
};
};
#pragma pack(pop)