forked from dolphin-emu/dolphin
		
	BreakBeforeBraces: Allman apparently includes all styles, except for AfterUnion (which is false) when using clang-format -dump-config
		
			
				
	
	
		
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// This file is public domain, in case it's useful to anyone. -comex
 | 
						|
 | 
						|
#pragma once
 | 
						|
#include <array>
 | 
						|
#include "Common/CommonTypes.h"
 | 
						|
 | 
						|
#define NETPLAY_CODE_SIZE 8
 | 
						|
typedef std::array<char, NETPLAY_CODE_SIZE> 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)
 |