75 lines
2.6 KiB
C
75 lines
2.6 KiB
C
#pragma once
|
|
|
|
//###########################################################################
|
|
//
|
|
// L4STEAMNET -- the Steam internet transport (BT_STEAM only).
|
|
//
|
|
// ISteamNetworkingSockets with FakeIP + SDR behind the L4NET.CPP wire
|
|
// seam: connections carry the engine's exact TCP byte stream as reliable
|
|
// Steam messages, re-assembled into per-connection rings so the engine's
|
|
// nonblocking recv semantics hold (empty -> WSAEWOULDBLOCK, peer-closed
|
|
// -> 0). Handles are pseudo-SOCKETs (0x5EA0xxxx) so L4Host and every
|
|
// call site above the seam are identical on both wires; the peer address
|
|
// reported through CheckSocket is the peer's FAKE IPv4:port, so the
|
|
// engine's roster matching works against a lobby-built egg whose
|
|
// [pilots] carry FakeIPs.
|
|
//
|
|
// Install: env BT_STEAM_NET=1 (set by the lobby launch path) -- needs the
|
|
// Steam client running and content\steam_appid.txt (written with the 480
|
|
// Spacewar test id if absent). Everything degrades gracefully: no Steam
|
|
// -> inactive -> pure Winsock.
|
|
//
|
|
// Ports: FakeIP port index 0 = the CONSOLE channel, 1 = the GAME channel
|
|
// (mirroring the arcade console-port / game-port=console+1 convention).
|
|
//
|
|
//###########################################################################
|
|
|
|
#include <winsock2.h>
|
|
|
|
int
|
|
BTSteamNet_Install(); // 0 = up (FakeIP allocated)
|
|
int
|
|
BTSteamNet_Active();
|
|
void
|
|
BTSteamNet_Pump(); // callbacks + rx drain (game thread)
|
|
void
|
|
BTSteamNet_ShutdownAll(); // #163: ordered transport death for
|
|
// process exit -- close every
|
|
// connection, then SteamAPI_Shutdown
|
|
|
|
//
|
|
// The wire-seam surface (BTNet* wrappers in L4NET.CPP + the marshal).
|
|
//
|
|
int
|
|
BTSteamNet_Owns(SOCKET wire_socket);
|
|
int
|
|
BTSteamNet_Send(SOCKET wire_socket, const char *data, int length);
|
|
int
|
|
BTSteamNet_Recv(SOCKET wire_socket, char *buffer, int capacity);
|
|
SOCKET
|
|
BTSteamNet_Accept(SOCKET listener_socket);
|
|
void
|
|
BTSteamNet_Close(SOCKET wire_socket);
|
|
int
|
|
BTSteamNet_PeerAddress(SOCKET wire_socket, SOCKADDR_IN *out);
|
|
|
|
//
|
|
// Connection establishment (the OpenConnection TCP_OPEN delegate + the
|
|
// marshal): True when the IPv4 is a Steam FakeIP.
|
|
//
|
|
int
|
|
BTSteamNet_IsFakeAddress(unsigned long internet_address_be);
|
|
SOCKET
|
|
BTSteamNet_Connect(unsigned long internet_address_be, int remote_port);
|
|
|
|
//
|
|
// The lobby surface: my identity; my roster token (raw, for the
|
|
// GetMyAddress self-match seam). Roster tokens + the token->identity map
|
|
// arrive in the MISSION process via env (BT_FE_MYFAKE / BT_FE_STEAMMAP --
|
|
// see the token-table note in the .cpp).
|
|
//
|
|
unsigned long long
|
|
BTSteamNet_MySteamID();
|
|
int
|
|
BTSteamNet_GetFakeAddressRaw(unsigned long *internet_address_be);
|