bool CServerRemoteAccess::LookupValue(const char *variable, CUtlBuffer &value) { const char* strval = LookupStringValue(variable); if (strval) { value.PutString(strval); value.PutChar(0); return true; } if (!Q_stricmp(variable, "stats")) { char stats[512]; GetStatsString(stats, sizeof(stats)); value.PutString(stats); value.PutChar(0); return true; } if (!Q_stricmp(variable, "banlist")) { GetUserBanList(value); return true; } if (!Q_stricmp(variable, "playerlist")) { GetPlayerList(value); return true; } if (!Q_stricmp(variable, "maplist")) { GetMapList(value); return true; } if (!Q_stricmp(variable, "uptime")) { value.PutInt(int(Sys_FloatTime() - Host_GetStartTime())); value.PutChar(0); return true; } if (!Q_stricmp(variable, "ipaddress")) { value.PutString(NET_AdrToString(net_local_adr)); value.PutChar(0); return true; } if (!Q_stricmp(variable, "mapcycle")) { int len; void* mapcyclelist = COM_LoadFileForMe(mapcyclefile.string, &len); if (mapcyclelist && len) { value.PutString((char*)mapcyclelist); value.PutChar(0); COM_FreeFile(mapcyclelist); } return true; } value.PutChar(0); return false; }
void Master_Init() { int i, SkipSection, tempport; static int HaveConfigured = 0; char * filep; const char * curfilep; netadr_t tempadr; if(HaveConfigured != 0 || gfNoMasterServer != 0) { return; } HaveConfigured = 1; if(COM_CheckParmCase("-nomaster") != 0 || global_svs.allocated_client_slots <= 1) { Con_Printf("%s: Master server comm disabled.\n", __FUNCTION__); gfNoMasterServer = 0; return; //and don't check again, ever. } MasterHeartbeatTimeout = 15; i = COM_CheckParmCase("-comm"); if(i != 0 && i+1 < global_com_argc) { filep = COM_LoadFileForMe(global_com_argv[i+1], NULL); } else { filep = COM_LoadFileForMe("valvecomm.lst", NULL); if(filep == NULL) { filep = COM_LoadFileForMe("woncomm.lst", NULL); } } if(filep == NULL) { Con_Printf("%s: Couldn't load comm file. Disabling masters--fix it.\n", __FUNCTION__); return; } curfilep = filep; i = 0; while(1) { curfilep = COM_Parse(curfilep); if(global_com_token[0] == '\0') { break; } SkipSection = 1; if(Q_strcasecmp("master", global_com_token) == 0) { SkipSection = 0; } curfilep = COM_Parse(curfilep); if(Q_strcmp("{", global_com_token) != 0) { break; } while(1) { curfilep = COM_Parse(curfilep); if(global_com_token[0] == '\0' || Q_strcmp("}", global_com_token) == 0) { break; } if(SkipSection == 0 && NET_StringToAdr(global_com_token, &tempadr) == 0) { break; } //We just (maybe) parsed the server name, if you missed it. Now for the port. curfilep = COM_Parse(curfilep); if(Q_strcmp(":", global_com_token) != 0) { break; } curfilep = COM_Parse(curfilep); if(global_com_token[0] == '\0') { break; } if(SkipSection == 0) { tempport = Q_atoi(global_com_token); if(tempport < 1 || tempport > 65535) { tempport = 27010; } tempadr.port = tempport; Con_Printf("%s: Adding master server %s.\n", __FUNCTION__, NET_AdrToString(tempadr)); //all that work to avoid needless string copying, all gone :) Master_AddServer(&tempadr); i++; } } } COM_FreeFile(filep); if(i == 0) { Con_Printf("%s: Didn't parse any masters. Disabling master comm.\n", __FUNCTION__); gfNoMasterServer = 0; } }