#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 int BTSteamNet_Install(); // 0 = up (FakeIP allocated) int BTSteamNet_Active(); void BTSteamNet_Pump(); // callbacks + rx drain (game thread) // // 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);