rewrote posix_net.cpp based on win_net.cpp

And suddenly hosting a server on linux works at least locally
(with client and server on the same machine).
Even though there are still strange bugs (massive lags in one
direction, doesn't work in LAN), at least it works at all now.
This commit is contained in:
Daniel Gibson 2013-03-03 21:39:27 +01:00
parent 5001b49841
commit e8c8a04c07
6 changed files with 768 additions and 360 deletions

File diff suppressed because it is too large Load diff

View file

@ -402,7 +402,7 @@ void idSessionLocalWin::Connect_f( const idCmdArgs& args )
lobbyConnectInfo_t connectInfo; lobbyConnectInfo_t connectInfo;
Sys_StringToNetAdr( args.Argv( 1 ), &connectInfo.netAddr, true ); Sys_StringToNetAdr( args.Argv( 1 ), &connectInfo.netAddr, true );
connectInfo.netAddr.port = net_port.GetInteger(); connectInfo.netAddr.port = net_port.GetInteger(); // FIXME: really? what if it was specified in the connect cmd?
ConnectAndMoveToLobby( GetPartyLobby(), connectInfo, false ); ConnectAndMoveToLobby( GetPartyLobby(), connectInfo, false );
} }
@ -600,6 +600,7 @@ idSessionLocalWin::EnsurePort
*/ */
void idSessionLocalWin::EnsurePort() void idSessionLocalWin::EnsurePort()
{ {
// XXX: fucked up?
// Init the port using reqular windows sockets // Init the port using reqular windows sockets
if( port.IsOpen() ) if( port.IsOpen() )
{ {

View file

@ -339,6 +339,7 @@ void idLobby::Shutdown( bool retainMigrationInfo, bool skipGoodbye )
idLobby::HandlePacket idLobby::HandlePacket
======================== ========================
*/ */
// FIXME: remoteAddress const?
void idLobby::HandlePacket( lobbyAddress_t& remoteAddress, idBitMsg fragMsg, idPacketProcessor::sessionId_t sessionID ) void idLobby::HandlePacket( lobbyAddress_t& remoteAddress, idBitMsg fragMsg, idPacketProcessor::sessionId_t sessionID )
{ {
SCOPED_PROFILE_EVENT( "HandlePacket" ); SCOPED_PROFILE_EVENT( "HandlePacket" );
@ -1857,7 +1858,7 @@ int idLobby::HandleInitialPeerConnection( idBitMsg& msg, const lobbyAddress_t& p
if( !IsHost() ) if( !IsHost() )
{ {
NET_VERBOSE_PRINT( "NET: Got connectionless hello from peer %s on session, and we are not a host\n", peerAddress.ToString() ); NET_VERBOSE_PRINT( "NET: Got connectionless hello from peer %s (num %i) on session, and we are not a host\n", peerAddress.ToString(), peerNum );
SendGoodbye( peerAddress ); SendGoodbye( peerAddress );
return -1; return -1;
} }

View file

@ -103,10 +103,12 @@ void idLobbyBackendDirect::JoinFromConnectInfo( const lobbyConnectInfo_t& connec
{ {
Sys_StringToNetAdr( "localhost", &address, true ); Sys_StringToNetAdr( "localhost", &address, true );
address.port = net_port.GetInteger(); address.port = net_port.GetInteger();
NET_VERBOSE_PRINT( "NET: idLobbyBackendDirect::JoinFromConnectInfo(): canJoinLocalHost\n" );
} }
else else
{ {
address = connectInfo.netAddr; address = connectInfo.netAddr;
NET_VERBOSE_PRINT( "NET: idLobbyBackendDirect::JoinFromConnectInfo(): %s\n", Sys_NetAdrToString( address ) );
} }
state = STATE_READY; state = STATE_READY;
@ -176,7 +178,7 @@ lobbyConnectInfo_t idLobbyBackendDirect::GetConnectInfo()
if( IsHost() ) if( IsHost() )
{ {
// If we are the host, give them our ip address // If we are the host, give them our ip address
const char* ip = Sys_GetLocalIP( 0 ); const char* ip = Sys_GetLocalIP( 0 ); // XXX: ohweiha.
Sys_StringToNetAdr( ip, &address, false ); Sys_StringToNetAdr( ip, &address, false );
address.port = net_port.GetInteger(); address.port = net_port.GetInteger();
} }

View file

@ -1128,6 +1128,7 @@ bool idSessionLocal::State_Create_And_Move_To_Game_Lobby()
// Now that we've created our game lobby, send our own party users to it // Now that we've created our game lobby, send our own party users to it
// NOTE - We pass in false to wait on party members since we are the host, and we know they can connect to us // NOTE - We pass in false to wait on party members since we are the host, and we know they can connect to us
// TODO: special handling of ourselves here?
GetPartyLobby().SendMembersToLobby( GetGameLobby(), false ); GetPartyLobby().SendMembersToLobby( GetGameLobby(), false );
return true; return true;
} }
@ -1591,7 +1592,7 @@ idSession::~idSession()
dedicatedServerSearch = NULL; dedicatedServerSearch = NULL;
} }
idCVar net_verbose( "net_verbose", "0", CVAR_BOOL, "Print a bunch of message about the network session" ); idCVar net_verbose( "net_verbose", "0", CVAR_BOOL | CVAR_NOCHEAT, "Print a bunch of message about the network session" );
idCVar net_verboseResource( "net_verboseResource", "0", CVAR_BOOL, "Prints a bunch of message about network resources" ); idCVar net_verboseResource( "net_verboseResource", "0", CVAR_BOOL, "Prints a bunch of message about network resources" );
idCVar net_verboseReliable( "net_verboseReliable", "0", CVAR_BOOL, "Prints the more spammy messages about reliable network msgs" ); idCVar net_verboseReliable( "net_verboseReliable", "0", CVAR_BOOL, "Prints the more spammy messages about reliable network msgs" );
idCVar si_splitscreen( "si_splitscreen", "0", CVAR_INTEGER, "force splitscreen" ); idCVar si_splitscreen( "si_splitscreen", "0", CVAR_INTEGER, "force splitscreen" );

View file

@ -61,7 +61,7 @@ idCVar net_socksPort( "net_socksPort", "1080", CVAR_ARCHIVE | CVAR_INTEGER, "" )
idCVar net_socksUsername( "net_socksUsername", "", CVAR_ARCHIVE, "" ); idCVar net_socksUsername( "net_socksUsername", "", CVAR_ARCHIVE, "" );
idCVar net_socksPassword( "net_socksPassword", "", CVAR_ARCHIVE, "" ); idCVar net_socksPassword( "net_socksPassword", "", CVAR_ARCHIVE, "" );
idCVar net_ip( "net_ip", "localhost", 0, "local IP address" ); idCVar net_ip( "net_ip", "localhost", CVAR_NOCHEAT, "local IP address" );
static struct sockaddr_in socksRelayAddr; static struct sockaddr_in socksRelayAddr;
@ -684,7 +684,9 @@ bool Net_GetUDPPacket( int netSocket, netadr_t& net_from, char* data, int& size,
idLib::Printf( buf ); idLib::Printf( buf );
return false; return false;
} }
#if 0
// DG: ip_socket is never initialized, so this is dead code
// - and if netSocket is 0 (so this would be true) recvfrom above will already fail
if( static_cast<unsigned int>( netSocket ) == ip_socket ) if( static_cast<unsigned int>( netSocket ) == ip_socket )
{ {
memset( from.sin_zero, 0, sizeof( from.sin_zero ) ); memset( from.sin_zero, 0, sizeof( from.sin_zero ) );
@ -706,8 +708,12 @@ bool Net_GetUDPPacket( int netSocket, netadr_t& net_from, char* data, int& size,
} }
else else
{ {
#endif // 0
Net_SockadrToNetadr( &from, &net_from ); Net_SockadrToNetadr( &from, &net_from );
#if 0
} }
#endif
if( ret > maxSize ) if( ret > maxSize )
{ {
@ -1177,3 +1183,4 @@ void idUDP::SendPacket( const netadr_t to, const void* data, int size )
Net_SendUDPPacket( netSocket, size, data, to ); Net_SendUDPPacket( netSocket, size, data, to );
} }