Ejemplo n.º 1
0
/*
====================
LAN_GetLocalServerAddressString
====================
*/
static void LAN_GetServerAddressString( int source, int n, char *buf, int buflen ) {
		switch (source) {
				case AS_LOCAL :
						if (n >= 0 && n < MAX_OTHER_SERVERS) {
								Q_strncpyz(buf, NET_AdrToStringwPort( cls.localServers[n].adr) , buflen );
								return;
						}
						break;
				case AS_MPLAYER:
						if (n >= 0 && n < MAX_OTHER_SERVERS) {
								Q_strncpyz(buf, NET_AdrToStringwPort( cls.mplayerServers[n].adr) , buflen );
								return;
						}
						break;
				case AS_GLOBAL :
						if (n >= 0 && n < MAX_GLOBAL_SERVERS) {
								Q_strncpyz(buf, NET_AdrToStringwPort( cls.globalServers[n].adr) , buflen );
								return;
						}
						break;
				case AS_FAVORITES :
						if (n >= 0 && n < MAX_OTHER_SERVERS) {
								Q_strncpyz(buf, NET_AdrToStringwPort( cls.favoriteServers[n].adr) , buflen );
								return;
						}
						break;
		}
		buf[0] = '\0';
}
Ejemplo n.º 2
0
void SV_ResolveowHubHost( void )
{
	char     *host = sv_owHubHost->string;
	netadr_t *address = &svs.owHubAddress;
	int      result = -1;

	if ( host && host[ 0 ] )
	{
		Com_Printf( "Resolving |ET:XReaL| Hub %s.\n", host );
		result = NET_StringToAdr( host, address, NA_UNSPEC );

		switch ( result )
		{
			case 0:
				Com_Printf( "Completely failed to resolve %s.\n", host );
				break;

			case 1:
				Com_Printf( "Resolved %s to %s.\n", host, NET_AdrToStringwPort( *address ) );
				break;

			case 2:
				Com_Printf( "Failed to resolve a port for %s.\n", host );
				address->type = NA_BAD;
				break;

			default:
				Com_Printf( "Unknown error %d from NET_StringToAdr()!\n", result );
				break;
		}
	}

	// We had to add this to avoid a double-call to SV_ResolveAlphaHubHost(), not sure why yet...
	sv_owHubHost->modified = qfalse;
}
Ejemplo n.º 3
0
/*
=================
SV_MasterGameStat
=================
*/
void SV_MasterGameStat( const char *data )
{
	netadr_t adr;

	if ( !isLanOnly.Get() )
	{
		return; // only dedicated servers send stats
	}

	Com_Printf( "Resolving %s\n", MASTER_SERVER_NAME );

	switch ( NET_StringToAdr( MASTER_SERVER_NAME, &adr, NA_UNSPEC ) )
	{
		case 0:
			Com_Printf( "Couldn't resolve master address: %s\n", MASTER_SERVER_NAME );
			return;

		case 2:
			adr.port = BigShort( PORT_MASTER );

		default:
			break;
	}

	Com_Printf( "%s resolved to %s\n", MASTER_SERVER_NAME,
	            NET_AdrToStringwPort( adr ) );

	Com_Printf( "Sending gamestat to %s\n", MASTER_SERVER_NAME );
	NET_OutOfBandPrint( NS_SERVER, adr, "gamestat %s", data );
}
Ejemplo n.º 4
0
/*
====================
LAN_GetServerInfo
====================
*/
static void
LAN_GetServerInfo(int source, int n, char *buf, int buflen)
{
  char info[MAX_STRING_CHARS];
  serverInfo_t *server = NULL;
  info[0] = '\0';
  switch (source)
  {
  case AS_LOCAL:
    if (n >= 0 && n < MAX_OTHER_SERVERS)
    {
      server = &cls.localServers[n];
    }
    break;
  case AS_MPLAYER:
  case AS_GLOBAL:
    if (n >= 0 && n < MAX_GLOBAL_SERVERS)
    {
      server = &cls.globalServers[n];
    }
    break;
  case AS_FAVORITES:
    if (n >= 0 && n < MAX_OTHER_SERVERS)
    {
      server = &cls.favoriteServers[n];
    }
    break;
  }
  if (server && buf)
  {
    buf[0] = '\0';
    Info_SetValueForKey(info, "hostname", server->hostName);
    Info_SetValueForKey(info, "mapname", server->mapName);
    Info_SetValueForKey(info, "clients", va("%i", server->clients));
    Info_SetValueForKey(info, "sv_maxclients", va("%i", server->maxClients));
    Info_SetValueForKey(info, "ping", va("%i", server->ping));
    Info_SetValueForKey(info, "minping", va("%i", server->minPing));
    Info_SetValueForKey(info, "maxping", va("%i", server->maxPing));
    Info_SetValueForKey(info, "game", server->game);
    Info_SetValueForKey(info, "gametype", va("%i", server->gameType));
    Info_SetValueForKey(info, "nettype", va("%i", server->netType));
    Info_SetValueForKey(info, "addr", NET_AdrToStringwPort(server->adr));
    Info_SetValueForKey(info, "punkbuster", va("%i", server->punkbuster));
    Info_SetValueForKey(info, "g_needpass", va("%i", server->g_needpass));
    Info_SetValueForKey(info, "g_humanplayers",
			va("%i", server->g_humanplayers));
    Q_strncpyz(buf, info, buflen);
  }
  else
  {
    if (buf)
    {
      buf[0] = '\0';
    }
  }
}
Ejemplo n.º 5
0
void SV_MasterHeartbeat( void ) {
	static netadr_t	adr[MAX_MASTER_SERVERS];
	int			i;

	// "dedicated 1" is for lan play, "dedicated 2" is for inet public play
	if ( !com_dedicated || com_dedicated->integer != 2 ) {
		return;		// only dedicated servers send heartbeats
	}

	// if not time yet, don't send anything
	if ( svs.time < svs.nextHeartbeatTime ) {
		return;
	}
	svs.nextHeartbeatTime = svs.time + HEARTBEAT_MSEC;


	// send to group masters
	for ( i = 0 ; i < MAX_MASTER_SERVERS ; i++ ) {
		if ( !sv_master[i]->string[0] ) {
			continue;
		}

		// see if we haven't already resolved the name
		// resolving usually causes hitches on win95, so only
		// do it when needed
		if ( sv_master[i]->modified ) {
			sv_master[i]->modified = qfalse;

			Com_Printf( "Resolving %s\n", sv_master[i]->string );
			if ( !NET_StringToAdr( sv_master[i]->string, &adr[i], NA_UNSPEC ) ) {
				Com_Printf( "Couldn't resolve address: %s\n", sv_master[i]->string );
				continue;
			}
			if ( !strchr( sv_master[i]->string, ':' ) ) {
				adr[i].port = BigShort( PORT_MASTER );
			}
			Com_Printf( "%s resolved to %s\n", sv_master[i]->string, NET_AdrToStringwPort(adr[i]));
		}


		Com_Printf ("Sending heartbeat to %s\n", sv_master[i]->string );
		// this command should be changed if the server info / status format
		// ever incompatably changes
		NET_OutOfBandPrint( NS_SERVER, adr[i], "heartbeat %s\n", HEARTBEAT_GAME );
	}
}
Ejemplo n.º 6
0
/*
====================
LAN_GetServerInfo
====================
*/
static void LAN_GetServerInfo(int source, int n, char *buf, int buflen)
{
	char            info[MAX_STRING_CHARS];
	serverInfo_t   *server = NULL;

	info[0] = '\0';
	switch (source)
	{
		case AS_LOCAL:
			if(n >= 0 && n < MAX_OTHER_SERVERS)
			{
				server = &cls.localServers[n];
			}
			break;
		case AS_GLOBAL:
			if(n >= 0 && n < MAX_GLOBAL_SERVERS)
			{
				server = &cls.globalServers[n];
			}
			break;
		case AS_FAVORITES:
			if(n >= 0 && n < MAX_OTHER_SERVERS)
			{
				server = &cls.favoriteServers[n];
			}
			break;
	}
	if(server && buf)
	{
		buf[0] = '\0';
		Info_SetValueForKey(info, "hostname", server->hostName);
		Info_SetValueForKey(info, "serverload", va("%i", server->load));
		Info_SetValueForKey(info, "mapname", server->mapName);
		Info_SetValueForKey(info, "clients", va("%i", server->clients));
		Info_SetValueForKey(info, "sv_maxclients", va("%i", server->maxClients));
		Info_SetValueForKey(info, "ping", va("%i", server->ping));
		Info_SetValueForKey(info, "minping", va("%i", server->minPing));
		Info_SetValueForKey(info, "maxping", va("%i", server->maxPing));
		Info_SetValueForKey(info, "game", server->game);
		Info_SetValueForKey(info, "gametype", va("%i", server->gameType));
		Info_SetValueForKey(info, "nettype", va("%i", server->netType));
		Info_SetValueForKey(info, "addr", NET_AdrToStringwPort(server->adr));
		Info_SetValueForKey(info, "sv_allowAnonymous", va("%i", server->allowAnonymous));
		Info_SetValueForKey(info, "friendlyFire", va("%i", server->friendlyFire));	// NERVE - SMF
		Info_SetValueForKey(info, "maxlives", va("%i", server->maxlives));	// NERVE - SMF
		Info_SetValueForKey(info, "needpass", va("%i", server->needpass));	// NERVE - SMF
		Info_SetValueForKey(info, "punkbuster", va("%i", server->punkbuster));	// DHM - Nerve
		Info_SetValueForKey(info, "gamename", server->gameName);	// Arnout
		Info_SetValueForKey(info, "g_antilag", va("%i", server->antilag));	// TTimo
		Info_SetValueForKey(info, "weaprestrict", va("%i", server->weaprestrict));
		Info_SetValueForKey(info, "balancedteams", va("%i", server->balancedteams));
		Q_strncpyz(buf, info, buflen);
	}
	else
	{
		if(buf)
		{
			buf[0] = '\0';
		}
	}
}
Ejemplo n.º 7
0
void SV_MasterHeartbeat(const char *message)
{
	static netadr_t	adr[MAX_MASTER_SERVERS][2]; // [2] for v4 and v6 address for the same address string.
	int			i;
	int			res;
	int			netenabled;

	netenabled = Cvar_VariableIntegerValue("net_enabled");

	// "dedicated 1" is for lan play, "dedicated 2" is for inet public play
	if (!com_dedicated || com_dedicated->integer != 2 || !(netenabled & (NET_ENABLEV4 | NET_ENABLEV6)))
		return;		// only dedicated servers send heartbeats

	// if not time yet, don't send anything
	if ( svs.time < svs.nextHeartbeatTime )
		return;

	svs.nextHeartbeatTime = svs.time + HEARTBEAT_MSEC;

	VM_Call( gvm, GAME_AUTHSERVER_HEARTBEAT );

	// send to group masters
	for (i = 0; i < MAX_MASTER_SERVERS; i++)
	{
		if(!sv_master[i]->string[0])
			continue;

		// see if we haven't already resolved the name
		// resolving usually causes hitches on win95, so only
		// do it when needed
		if(sv_master[i]->modified || (adr[i][0].type == NA_BAD && adr[i][1].type == NA_BAD))
		{
			sv_master[i]->modified = qfalse;
			
			if(netenabled & NET_ENABLEV4)
			{
				Com_Printf("Resolving %s (IPv4)\n", sv_master[i]->string);
				res = NET_StringToAdr(sv_master[i]->string, &adr[i][0], NA_IP);

				if(res == 2)
				{
					// if no port was specified, use the default master port
					adr[i][0].port = BigShort(PORT_MASTER);
				}
				
				if(res)
					Com_Printf( "%s resolved to %s\n", sv_master[i]->string, NET_AdrToStringwPort(adr[i][0]));
				else
					Com_Printf( "%s has no IPv4 address.\n", sv_master[i]->string);
			}
			
			if(netenabled & NET_ENABLEV6)
			{
				Com_Printf("Resolving %s (IPv6)\n", sv_master[i]->string);
				res = NET_StringToAdr(sv_master[i]->string, &adr[i][1], NA_IP6);

				if(res == 2)
				{
					// if no port was specified, use the default master port
					adr[i][1].port = BigShort(PORT_MASTER);
				}
				
				if(res)
					Com_Printf( "%s resolved to %s\n", sv_master[i]->string, NET_AdrToStringwPort(adr[i][1]));
				else
					Com_Printf( "%s has no IPv6 address.\n", sv_master[i]->string);
			}

			if(adr[i][0].type == NA_BAD && adr[i][1].type == NA_BAD)
			{
				// if the address failed to resolve, clear it
				// so we don't take repeated dns hits
				Com_Printf("Couldn't resolve address: %s\n", sv_master[i]->string);
				Cvar_Set(sv_master[i]->name, "");
				sv_master[i]->modified = qfalse;
				continue;
			}
		}


		Com_Printf ("Sending heartbeat to %s\n", sv_master[i]->string );

		// this command should be changed if the server info / status format
		// ever incompatably changes

		if(adr[i][0].type != NA_BAD)
			NET_OutOfBandPrint( NS_SERVER, adr[i][0], "heartbeat %s\n", message);
		if(adr[i][1].type != NA_BAD)
			NET_OutOfBandPrint( NS_SERVER, adr[i][1], "heartbeat %s\n", message);
	}
}
Ejemplo n.º 8
0
/*
 * ====================
 * LAN_GetServerInfo
 * ====================
 */
static void LAN_GetServerInfo( int source, int n, char *buf, int buflen )
{
	char         info[ MAX_STRING_CHARS ];
	serverInfo_t *server = nullptr;

	info[ 0 ] = '\0';

	switch ( source )
	{
		case AS_LOCAL:
			if ( n >= 0 && n < MAX_OTHER_SERVERS )
			{
				server = &cls.localServers[ n ];
			}

			break;

		case AS_GLOBAL:
			if ( n >= 0 && n < MAX_GLOBAL_SERVERS )
			{
				server = &cls.globalServers[ n ];
			}

			break;

		case AS_FAVORITES:
			if ( n >= 0 && n < MAX_OTHER_SERVERS )
			{
				server = &cls.favoriteServers[ n ];
			}

			break;
	}

	if ( server && buf )
	{
		buf[ 0 ] = '\0';
		Info_SetValueForKey( info, "hostname", server->hostName, false );
		Info_SetValueForKey( info, "serverload", va( "%i", server->load ), false );
		Info_SetValueForKey( info, "mapname", server->mapName, false );
		Info_SetValueForKey( info, "label", server->label, false );
		Info_SetValueForKey( info, "clients", va( "%i", server->clients ), false );
		Info_SetValueForKey( info, "bots", va( "%i", server->bots ), false );
		Info_SetValueForKey( info, "sv_maxclients", va( "%i", server->maxClients ), false );
		Info_SetValueForKey( info, "ping", va( "%i", server->ping ), false );
		Info_SetValueForKey( info, "minping", va( "%i", server->minPing ), false );
		Info_SetValueForKey( info, "maxping", va( "%i", server->maxPing ), false );
		Info_SetValueForKey( info, "game", server->game, false );
		Info_SetValueForKey( info, "nettype", Util::enum_str(server->netType), false );
		Info_SetValueForKey( info, "addr", NET_AdrToStringwPort( server->adr ), false );
		Info_SetValueForKey( info, "friendlyFire", va( "%i", server->friendlyFire ), false );   // NERVE - SMF
		Info_SetValueForKey( info, "needpass", va( "%i", server->needpass ), false );   // NERVE - SMF
		Info_SetValueForKey( info, "gamename", server->gameName, false );  // Arnout
		Q_strncpyz( buf, info, buflen );
	}
	else
	{
		if ( buf )
		{
			buf[ 0 ] = '\0';
		}
	}
}
Ejemplo n.º 9
0
static void SV_ResolveMasterServers()
{
	int i, netenabled, res;

	netenabled = Cvar_VariableIntegerValue( "net_enabled" );

	for ( i = 0; i < MAX_MASTER_SERVERS; i++ )
	{
		if ( !sv_master[ i ]->string || !sv_master[ i ]->string[ 0 ] )
		{
			challenges[ i ].type =
			masterServerAddr[ i ].ipv4.type = masterServerAddr[ i ].ipv6.type = NA_BAD;
			continue;
		}

		// see if we haven't already resolved the name
		// resolving usually causes hitches on win95, so only
		// do it when needed
		if ( sv_master[ i ]->modified || ( masterServerAddr[ i ].ipv4.type == NA_BAD && masterServerAddr[ i ].ipv6.type == NA_BAD ) )
		{
			sv_master[ i ]->modified = false;

			if ( netenabled & NET_ENABLEV4 )
			{
				Com_Printf( "Resolving %s (IPv4)\n", sv_master[ i ]->string );
				res = NET_StringToAdr( sv_master[ i ]->string, &masterServerAddr[ i ].ipv4, NA_IP );

				if ( res == 2 )
				{
					// if no port was specified, use the default master port
					masterServerAddr[ i ].ipv4.port = BigShort( PORT_MASTER );
				}

				if ( res )
				{
					Com_Printf( "%s resolved to %s\n", sv_master[ i ]->string, NET_AdrToStringwPort( masterServerAddr[ i ].ipv4 ) );
				}
				else
				{
					Com_Printf( "%s has no IPv4 address.\n", sv_master[ i ]->string );
				}
			}

			if ( netenabled & NET_ENABLEV6 )
			{
				Com_Printf( "Resolving %s (IPv6)\n", sv_master[ i ]->string );
				res = NET_StringToAdr( sv_master[ i ]->string, &masterServerAddr[ i ].ipv6, NA_IP6 );

				if ( res == 2 )
				{
					// if no port was specified, use the default master port
					masterServerAddr[ i ].ipv6.port = BigShort( PORT_MASTER );
				}

				if ( res )
				{
					Com_Printf( "%s resolved to %s\n", sv_master[ i ]->string, NET_AdrToStringwPort( masterServerAddr[ i ].ipv6 ) );
				}
				else
				{
					Com_Printf( "%s has no IPv6 address.\n", sv_master[ i ]->string );
				}
			}

			if ( masterServerAddr[ i ].ipv4.type == NA_BAD && masterServerAddr[ i ].ipv6.type == NA_BAD )
			{
				// if the address failed to resolve, clear it
				// so we don't take repeated dns hits
				Com_Printf( "Couldn't resolve address: %s\n", sv_master[ i ]->string );
				Cvar_Set( sv_master[ i ]->name, "" );
				sv_master[ i ]->modified = false;
				continue;
			}
		}
	}
}
Ejemplo n.º 10
0
/*
===============
SV_MasterHeartbeat
===============
*/
void SV_MasterHeartbeat( const char *hbname ) {
	static netadr_t adr[MAX_MASTER_SERVERS][2];
	int				i, res, netenabled;

	// Update Server doesn't send heartbeat
#if defined (UPDATE_SERVER)
	return;
#endif

	netenabled = Cvar_VariableIntegerValue("net_enabled");
	
	if ( SV_GameIsSinglePlayer() ) {
		return;     // no heartbeats for SP
	}

	// "dedicated 1" is for lan play, "dedicated 2" is for inet public play
	if (!com_dedicated || com_dedicated->integer != 2 || !(netenabled & (NET_ENABLEV4 | NET_ENABLEV6))) {
		return;     // only dedicated servers send heartbeats
	}

	// if not time yet, don't send anything
	if ( svs.time < svs.nextHeartbeatTime ) {
		return;
	}

	svs.nextHeartbeatTime = svs.time + HEARTBEAT_MSEC;

	// send to group masters
	for (i = 0; i < MAX_MASTER_SERVERS; i++) {
		if(!sv_master[i]->string[0]) {
			continue;
		}

		// see if we haven't already resolved the name
		// resolving usually causes hitches on win95, so only
		// do it when needed
		if(sv_master[i]->modified || (adr[i][0].type == NA_BAD && adr[i][1].type == NA_BAD)) {
			sv_master[i]->modified = false;

			if(netenabled & NET_ENABLEV4) {
				Com_Printf("Resolving %s (IPv4)\n", sv_master[i]->string);
				res = NET_StringToAdr(sv_master[i]->string, &adr[i][0], NA_IP);

				if(res == 2) {
					// if no port was specified, use the default master port
					adr[i][0].port = BigShort(PORT_MASTER);
				}
			
				if(res) {
					Com_Printf( "%s resolved to %s\n", sv_master[i]->string, NET_AdrToStringwPort(adr[i][0]));
				} else {
					Com_Printf( "%s has no IPv4 address.\n", sv_master[i]->string);
				}
			}
			
			if(netenabled & NET_ENABLEV6) {
				Com_Printf("Resolving %s (IPv6)\n", sv_master[i]->string);
				res = NET_StringToAdr(sv_master[i]->string, &adr[i][1], NA_IP6);

				if(res == 2) {
					// if no port was specified, use the default master port
					adr[i][1].port = BigShort(PORT_MASTER);
				}
				
				if(res) {
					Com_Printf( "%s resolved to %s\n", sv_master[i]->string, NET_AdrToStringwPort(adr[i][1]));
				} else {
					Com_Printf( "%s has no IPv6 address.\n", sv_master[i]->string);
				}
			}

			if(adr[i][0].type == NA_BAD && adr[i][1].type == NA_BAD) {
				// if the address failed to resolve, clear it
				// so we don't take repeated dns hits
				Com_Printf( "Couldn't resolve address: %s\n", sv_master[i]->string );
				Cvar_Set( sv_master[i]->name, "" );
				sv_master[i]->modified = false;
				continue;
			}
		}

		Com_Printf( "Sending heartbeat to the official OpenWolf servers list %s\n", sv_master[i]->string );

		// this command should be changed if the server info / status format
		// ever incompatably changes

		if(adr[i][0].type != NA_BAD) {
			NET_OutOfBandPrint( NS_SERVER, adr[i][0], "heartbeat %s\n", HEARTBEAT_GAME );
		}
		if(adr[i][1].type != NA_BAD) {
			NET_OutOfBandPrint( NS_SERVER, adr[i][1], "heartbeat %s\n", HEARTBEAT_GAME );
		}
	}

#if defined (USE_PHP)
	// Send to the main master.
	if (svs.queryDone) {
		pthread_exit(&svs.thQuery);
		svs.queryDone = 0;
	} else {
		SV_PHPMaster();
	}
#endif
}