____                _       __
    / __ )____  _____   | |     / /___ ___________
   / __  / __ \/ ___/   | | /| / / __ `/ ___/ ___/
  / /_/ / /_/ (__  )    | |/ |/ / /_/ / /  (__  )
 /_____/\____/____/     |__/|__/\__,_/_/  /____/

       A futuristic real-time strategy game.
          This file is part of Bos Wars.
(C) Copyright 2001-2007 by the Bos Wars and Stratagus Project. Distributed under the "GNU General Public License"

netconnect.cpp File Reference

The network high level connection code. More...

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include "stratagus.h"
#include "net_lowlevel.h"
#include "player.h"
#include "map.h"
#include "network.h"
#include "netconnect.h"
#include "interface.h"
#include "menus.h"
#include "settings.h"
#include "version.h"

Go to the source code of this file.

Defines

#define CLIENT_LIVE_BEAT   60
#define CLIENT_IS_DEAD   300

Functions

static int NetworkSendICMessage (unsigned long host, int port, CInitMessage *msg)
static void NetworkSendRateLimitedClientMessage (CInitMessage *msg, unsigned long msecs)
int NetworkSetupServerAddress (const std::string &serveraddr)
 Menu: Setup the server IP.
void NetworkInitClientConnect (void)
 Setup network connect state machine for clients.
void NetworkExitClientConnect (void)
 Terminate network connect state machine for clients.
void NetworkDetachFromServer (void)
 Menu Loop: Client: Send GoodBye to the server and detach.
void NetworkInitServerConnect (int openslots)
 Setup network connect state machine for the server.
void NetworkExitServerConnect (void)
 Terminate network connect state machine for the server.
void NetworkServerResyncClients (void)
 Menu Loop: Server: Mark clients state to send stateinfo message.
void NetworkServerStartGame (void)
 Server user has finally hit the start game button.
void NetworkGamePrepareGameSettings (void)
void NetworkConnectSetupGame (void)
 Assign Player slot, evaluate Setup state..
void NetClientCheckLocalState (void)
void NetworkProcessClientRequest (void)
 Menu Loop: Send out client request messages.
static void KickDeadClient (int c)
void NetworkProcessServerRequest (void)
 Menu Loop: Send out server request messages.
static void ClientParseDetaching (const CInitMessage *msg)
static void ClientParseConnecting (const CInitMessage *msg)
static bool IsSafeMapName (const char *mapname)
static void ClientParseConnected (const CInitMessage *msg)
static void ClientParseMapInfo (const CInitMessage *msg)
static void ClientParseSynced (const CInitMessage *msg)
static void ClientParseAsync (const CInitMessage *msg)
static void ClientParseGoAhead (const CInitMessage *msg)
static void ClientParseStarted (const CInitMessage *msg)
static void ClientParseAreYouThere (const CInitMessage *msg)
static void ClientParseBadMap (const CInitMessage *msg)
static void ServerParseHello (int h, const CInitMessage *msg)
static void ServerParseResync (const int h)
static void ServerParseWaiting (const int h)
static void ServerParseMap (const int h)
static void ServerParseState (const int h, const CInitMessage *msg)
static void ServerParseGoodBye (const int h)
static void ServerParseSeeYou (const int h)
static void ServerParseIAmHere (const int h)
static int CheckVersions (const CInitMessage *msg)
static void NetworkParseMenuPacket (const CInitMessage *msg)
int NetworkParseSetupEvent (const unsigned char *buf, int size)
 Parse a network connect event.

Variables

std::string NetworkArg
 Network command line argument.
int NetPlayers
 How many network players.
int NetworkPort = NetworkDefaultPort
 Local network port to use.
int HostsCount
 Number of hosts.
CNetworkHost Hosts [PlayerMax]
 Host and ports of all players.
int NetConnectRunning
 Network menu: Setup mode active.
NetworkState NetStates [PlayerMax]
 Network menu: Server: Client Host states.
unsigned char NetLocalState
 Network menu: Local Server/Client connect state;.
int NetLocalHostsSlot
 Network menu: Slot # in Hosts array of local client.
int NetLocalPlayerNumber
 Player number of local client.
static int NetStateMsgCnt
 Number of consecutive msgs of same type sent.
static unsigned char LastStateMsgType
 Subtype of last InitConfig message sent.
static unsigned long NetLastPacketSent
 Tick the last network packet was sent.
static unsigned long NetworkServerIP
 Network Client: IP of server to join.
std::string NetworkMapName
 Name of the map recieved with ICMMap.
static int NetworkServerPort = NetworkDefaultPort
 Server network port to use.
CServerSetup ServerSetupState
 Network menu: Multiplayer Server Menu selections state.
CServerSetup LocalSetupState
 Network menu: Multiplayer Client Menu selections local state.


Detailed Description

The network high level connection code.

Definition in file netconnect.cpp.


Define Documentation

#define CLIENT_IS_DEAD   300

Definition at line 59 of file netconnect.cpp.

Referenced by NetworkProcessServerRequest().

#define CLIENT_LIVE_BEAT   60

Definition at line 58 of file netconnect.cpp.

Referenced by NetworkProcessServerRequest().


Function Documentation

static int CheckVersions ( const CInitMessage msg  )  [static]

static void ClientParseAreYouThere ( const CInitMessage msg  )  [static]

Parse a network menu AreYouThere keepalive packet and reply IAmHere.

Parameters:
msg message received

Definition at line 1464 of file netconnect.cpp.

References ICMIAH, MessageInitHello, NetworkSendICMessage(), NetworkServerIP, NetworkServerPort, CInitMessage::SubType, and CInitMessage::Type.

Referenced by NetworkParseMenuPacket().

static void ClientParseAsync ( const CInitMessage msg  )  [static]

static void ClientParseBadMap ( const CInitMessage msg  )  [static]

Parse a network menu Bad Map reply from server.

Parameters:
msg message received

Definition at line 1478 of file netconnect.cpp.

References ICMSeeYou, MessageInitHello, NetConnectRunning, NetworkSendICMessage(), NetworkServerIP, NetworkServerPort, CInitMessage::SubType, and CInitMessage::Type.

Referenced by NetworkParseMenuPacket().

static void ClientParseConnected ( const CInitMessage msg  )  [static]

static void ClientParseConnecting ( const CInitMessage msg  )  [static]

static void ClientParseDetaching ( const CInitMessage msg  )  [static]

Parse a network menu packet in client detaching state.

Parameters:
msg message received

Definition at line 1126 of file netconnect.cpp.

References _C_, ccs_disconnected, DebugPrint, ICMGoodBye, NetLocalState, NetStateMsgCnt, and CInitMessage::SubType.

Referenced by NetworkParseMenuPacket().

static void ClientParseGoAhead ( const CInitMessage msg  )  [static]

Parse a network menu packet in client final goahead waiting state.

Parameters:
msg message received

Definition at line 1419 of file netconnect.cpp.

References _C_, ccs_started, DebugPrint, ICMConfig, ICMState, NetLocalState, NetStateMsgCnt, CInitMessage::State, CInitMessage::SubType, and CInitMessage::u.

Referenced by NetworkParseMenuPacket().

static void ClientParseMapInfo ( const CInitMessage msg  )  [static]

Parse a network menu packet in client initial mapinfo state.

Parameters:
msg message received

Definition at line 1298 of file netconnect.cpp.

References _C_, ccs_synced, DebugPrint, ICMState, NetLocalState, NetStateMsgCnt, CInitMessage::State, CInitMessage::SubType, and CInitMessage::u.

Referenced by NetworkParseMenuPacket().

static void ClientParseStarted ( const CInitMessage msg  )  [static]

Parse a network menu packet in client final started state

Parameters:
msg message received

Definition at line 1444 of file netconnect.cpp.

References _C_, DebugPrint, ICMGo, NetConnectRunning, and CInitMessage::SubType.

Referenced by NetworkParseMenuPacket().

static void ClientParseSynced ( const CInitMessage msg  )  [static]

static bool IsSafeMapName ( const char *  mapname  )  [static]

Check if the map name looks safe.

A map name looks safe when there are no special characters and no .. or // sequences. This way only real valid maps from the map directory will be loaded.

Returns:
true if the map name looks safe.

Definition at line 1224 of file netconnect.cpp.

References strncpy_s().

Referenced by ClientParseConnected().

static void KickDeadClient ( int  c  )  [static]

Kick a client that doesn't answer to our packets

Parameters:
c The client (host slot) to kick

Definition at line 1052 of file netconnect.cpp.

References _C_, ccs_async, ccs_unused, DebugPrint, CNetworkHost::Host, CServerSetup::LastFrame, PlayerMax, CNetworkHost::PlyNr, CNetworkHost::Port, CServerSetup::Ready, and _network_state_::State.

Referenced by NetworkProcessServerRequest(), ServerParseHello(), and ServerParseSeeYou().

void NetClientCheckLocalState ( void   ) 

Callback from netconnect loop in Client-Sync state: Compare local state with server's information and force update when changes have occured.

Definition at line 901 of file netconnect.cpp.

References ccs_changed, NetLocalHostsSlot, NetLocalState, and CServerSetup::Ready.

Referenced by NetworkProcessClientRequest().

void NetworkConnectSetupGame ( void   ) 

Assign Player slot, evaluate Setup state..

Assign player slots and names in a network game..

Definition at line 888 of file netconnect.cpp.

References CInitMessage::HostsCount, LocalPlayerName, Players, CNetworkHost::PlyNr, CPlayer::SetName(), and ThisPlayer.

Referenced by InitNetwork2().

void NetworkDetachFromServer ( void   ) 

Menu Loop: Client: Send GoodBye to the server and detach.

Terminate and detach Network connect state machine for the client

Definition at line 435 of file netconnect.cpp.

References ccs_detaching, NetLocalState, and NetStateMsgCnt.

Referenced by tolua_stratagus_NetworkDetachFromServer00().

void NetworkExitClientConnect ( void   ) 

Terminate network connect state machine for clients.

Terminate Network connect state machine for clients

Definition at line 426 of file netconnect.cpp.

References NetConnectRunning, and NetPlayers.

void NetworkExitServerConnect ( void   ) 

Terminate network connect state machine for the server.

Terminate Network connect state machine for the server

Definition at line 472 of file netconnect.cpp.

References _C_, DebugPrint, ICMServerQuit, MessageInitReply, NetConnectRunning, NetworkInitServerConnect(), NetworkSendICMessage(), NIPQUAD, PlayerMax, CInitMessage::SubType, and CInitMessage::Type.

void NetworkGamePrepareGameSettings ( void   ) 

void NetworkInitClientConnect ( void   ) 

void NetworkInitServerConnect ( int  openslots  ) 

Setup network connect state machine for the server.

Setup Network connect state machine for the server

Definition at line 444 of file netconnect.cpp.

References ccs_unused, CServerSetup::Clear(), CServerSetup::CompOpt, CNetworkHost::Host, LocalPlayerName, NetConnectRunning, PlayerMax, CNetworkHost::PlyName, CNetworkHost::PlyNr, CNetworkHost::Port, and _network_state_::State.

Referenced by NetworkExitServerConnect(), and tolua_stratagus_NetworkInitServerConnect00().

static void NetworkParseMenuPacket ( const CInitMessage msg  )  [static]

int NetworkParseSetupEvent ( const unsigned char *  buf,
int  size 
)

Parse a network connect event.

Parse a setup event. (Command type <= MessageInitEvent)

Parameters:
buf Packet received
size size of the received packet.
Returns:
1 if packet is an InitConfig message, 0 otherwise

Definition at line 2047 of file netconnect.cpp.

References ccs_started, CInitMessage::Deserialize(), IfaceStateMenu, InterfaceState, MessageInitConfig, NetConnectRunning, NetLocalState, NetworkParseMenuPacket(), CInitMessage::Size(), and CInitMessage::Type.

Referenced by NetworkEvent().

void NetworkProcessClientRequest ( void   ) 

void NetworkProcessServerRequest ( void   ) 

Menu Loop: Send out server request messages.

Server Menu Loop: Send out server request messages

Definition at line 1076 of file netconnect.cpp.

References _C_, CLIENT_IS_DEAD, CLIENT_LIVE_BEAT, DebugPrint, FrameCounter, GameRunning, ICMAYT, KickDeadClient(), CServerSetup::LastFrame, CInitMessage::MapUID, MessageInitReply, NetworkSendICMessage(), NIPQUAD, PlayerMax, CInitMessage::SubType, and CInitMessage::Type.

Referenced by MenuScreen::logic().

static int NetworkSendICMessage ( unsigned long  host,
int  port,
CInitMessage msg 
) [static]

Send an InitConfig message across the Network

Parameters:
host Host to send to (network byte order).
port Port of host to send to (network byte order).
msg The message to send
Todo:
FIXME: we don't need to put the header into all messages. (header = msg->Stratagus ... )

Definition at line 282 of file netconnect.cpp.

References CInitMessage::Lag, NetSendUDP(), NetworkFildes, NetworkLag, NetworkProtocolVersion, NetworkUpdates, CInitMessage::Serialize(), CInitMessage::Size(), CInitMessage::Stratagus, StratagusVersion, CInitMessage::Updates, and CInitMessage::Version.

Referenced by CheckVersions(), ClientParseAreYouThere(), ClientParseBadMap(), NetworkExitServerConnect(), NetworkProcessClientRequest(), NetworkProcessServerRequest(), NetworkSendRateLimitedClientMessage(), NetworkServerStartGame(), ServerParseGoodBye(), ServerParseHello(), ServerParseMap(), ServerParseResync(), ServerParseState(), and ServerParseWaiting().

static void NetworkSendRateLimitedClientMessage ( CInitMessage msg,
unsigned long  msecs 
) [static]

Send a message to the server, but only if the last packet was a while ago

Parameters:
msg The message to send
msecs microseconds to delay

Definition at line 351 of file netconnect.cpp.

References _C_, DebugPrint, GetTicks(), LastStateMsgType, NetLastPacketSent, NetLocalState, NetStateMsgCnt, NetworkSendICMessage(), NetworkServerIP, NetworkServerPort, NIPQUAD, CInitMessage::SubType, and CInitMessage::Type.

Referenced by NetworkProcessClientRequest().

void NetworkServerResyncClients ( void   ) 

Menu Loop: Server: Mark clients state to send stateinfo message.

Notify state change by menu user to connected clients

Definition at line 501 of file netconnect.cpp.

References ccs_async, ccs_synced, NetConnectRunning, PlayerMax, _network_state_::State, and CInitMessage::State.

Referenced by tolua_stratagus_NetworkServerResyncClients00().

void NetworkServerStartGame ( void   ) 

int NetworkSetupServerAddress ( const std::string &  serveraddr  ) 

Menu: Setup the server IP.

Setup the IP-Address of the network server to connect to

Parameters:
serveraddr the serveraddress the user has entered
Returns:
True, if error; otherwise false.

Definition at line 384 of file netconnect.cpp.

References _C_, DebugPrint, INADDR_NONE, NetResolveHost(), NetworkServerIP, and NIPQUAD.

Referenced by tolua_stratagus_NetworkSetupServerAddress00().

static void ServerParseGoodBye ( const int  h  )  [static]

Parse the disconnect request of a client by sending out good bye

Parameters:
h slot number of host msg originates from

Definition at line 1798 of file netconnect.cpp.

References _C_, ccs_detaching, DebugPrint, FrameCounter, ICMGoodBye, CServerSetup::LastFrame, MessageInitReply, _network_state_::MsgCnt, NetLastHost, NetLastPort, NetworkSendICMessage(), NIPQUAD, _network_state_::State, CInitMessage::State, CInitMessage::SubType, and CInitMessage::Type.

Referenced by NetworkParseMenuPacket().

static void ServerParseHello ( int  h,
const CInitMessage msg 
) [static]

static void ServerParseIAmHere ( const int  h  )  [static]

Parse the 'I am Here' reply to the servers' 'Are you there' msg

Parameters:
h slot number of host msg originates from

Definition at line 1851 of file netconnect.cpp.

References FrameCounter, and CServerSetup::LastFrame.

Referenced by NetworkParseMenuPacket().

static void ServerParseMap ( const int  h  )  [static]

static void ServerParseResync ( const int  h  )  [static]

static void ServerParseSeeYou ( const int  h  )  [static]

Parse the final see you msg of a disconnecting client

Parameters:
h slot number of host msg originates from

Definition at line 1832 of file netconnect.cpp.

References _C_, ccs_detaching, DebugPrint, KickDeadClient(), and CInitMessage::State.

Referenced by NetworkParseMenuPacket().

static void ServerParseState ( const int  h,
const CInitMessage msg 
) [static]

Parse locate state change notifiction or initial state info request of client

Parameters:
h slot number of host msg originates from
msg message received

Definition at line 1744 of file netconnect.cpp.

References _C_, ccs_async, ccs_mapinfo, ccs_synced, DebugPrint, FrameCounter, ICMState, CMap::Info, CServerSetup::LastFrame, Map, CMapInfo::MapUID, CInitMessage::MapUID, MessageInitReply, _network_state_::MsgCnt, NetLastHost, NetLastPort, NetworkSendICMessage(), NIPQUAD, PlayerMax, CServerSetup::Ready, _network_state_::State, CInitMessage::State, CInitMessage::SubType, CInitMessage::Type, and CInitMessage::u.

Referenced by NetworkParseMenuPacket().

static void ServerParseWaiting ( const int  h  )  [static]


Variable Documentation

CNetworkHost Hosts[PlayerMax]

Host and ports of all players.

Host, port, and number of all players.

Definition at line 75 of file netconnect.cpp.

Referenced by InitNetwork2(), NetworkBroadcast(), NetworkEvent(), NetworkRecover(), NetworkRemovePlayer(), NetworkSendSelection(), NetworkSyncCommands(), tolua_get_stratagus_Hosts(), and tolua_set_stratagus_Hosts().

unsigned char LastStateMsgType [static]

Subtype of last InitConfig message sent.

Definition at line 84 of file netconnect.cpp.

Referenced by NetworkInitClientConnect(), and NetworkSendRateLimitedClientMessage().

Network menu: Multiplayer Client Menu selections local state.

Definition at line 98 of file netconnect.cpp.

Referenced by tolua_get_LocalSetupState(), and tolua_set_LocalSetupState().

unsigned long NetLastPacketSent [static]

Tick the last network packet was sent.

Definition at line 85 of file netconnect.cpp.

Referenced by NetworkInitClientConnect(), and NetworkSendRateLimitedClientMessage().

Network menu: Slot # in Hosts array of local client.

Definition at line 80 of file netconnect.cpp.

Referenced by ClientParseAsync(), ClientParseConnecting(), NetClientCheckLocalState(), tolua_get_NetLocalHostsSlot(), and tolua_set_NetLocalHostsSlot().

Player number of local client.

Definition at line 81 of file netconnect.cpp.

Referenced by ApplyReplaySettings(), ClientParseSynced(), CreatePlayer(), and NetworkServerStartGame().

unsigned char NetLocalState

int NetStateMsgCnt [static]

NetworkState NetStates[PlayerMax]

Network menu: Server: Client Host states.

Definition at line 78 of file netconnect.cpp.

std::string NetworkArg

Network command line argument.

Definition at line 65 of file netconnect.cpp.

Referenced by main().

std::string NetworkMapName

Name of the map recieved with ICMMap.

Definition at line 87 of file netconnect.cpp.

Referenced by ClientParseConnected(), ServerParseWaiting(), tolua_get_NetworkMapName(), and tolua_set_NetworkMapName().

int NetworkPort = NetworkDefaultPort

Local network port to use.

Definition at line 67 of file netconnect.cpp.

Referenced by InitNetwork1(), main(), and NetworkInitClientConnect().

unsigned long NetworkServerIP [static]

int NetworkServerPort = NetworkDefaultPort [static]

Server network port to use.

FIXME ARI: The following is a kludge to have some way to override the default port on the server to connect to. Should be selectable by advanced network menus. For now just specify with the -P port command line arg...

Definition at line 92 of file netconnect.cpp.

Referenced by ClientParseAreYouThere(), ClientParseBadMap(), ClientParseConnecting(), NetworkInitClientConnect(), NetworkProcessClientRequest(), and NetworkSendRateLimitedClientMessage().

Network menu: Multiplayer Server Menu selections state.

Client and server selection state for Multiplayer clients

Definition at line 97 of file netconnect.cpp.

Referenced by tolua_get_ServerSetupState(), and tolua_set_ServerSetupState().


Generated on Sat Feb 21 00:28:18 2009 for Bos Wars by  doxygen 1.5.6