All pastes #708041 Raw Edit

ETH Server Query

public c v1 · immutable
#708041 ·published 2007-09-23 14:55 UTC
rendered paste body
//Thanks to Noobie, ascii, chaplex and humbababababababbababababababababababababaa#define _GNU_SOURCE#include "eth.h"typedef struct {	char *arrayname;	char *arrayver;	char *arraymod;	char *arrayIP;	char *arrayshortname;} ethServer_t;//Define Variablesint count = 0;char map[21];char ping[4];char maxplayers[3];char currplayers[3];char name[101];char *qrycmd;//Server Arrayconst static ethServer_t ethServer[] = {//	Name									ETver	 Mod			IP						Shortname	{"^0[^3*C^0]^6ALL ^nAIMBOTS ^5XPSAVE",	"2.55", "etpub",	"87.99.33.29:27962",		"*C"		},	{"^1[deF]ALLBOTS ^2Public-XPSAVE",		"2.55", "etpub",	"212.187.247.2:27960",		"def"		},	{"^7Karoo enemy Territory",				"2.60", "none",		"212.50.160.205:27960",		"kar"		},	{"^1.:V^7C:.^1Old^7School^1U^7S^4A",	"2.55", "etpub",	"8.6.2.5:27960",			"vc"		},	{"^ePUBLIC ^3ALL_AIMBOTS",				"2.55", "etpub",	"195.122.134.106:27960",	"pub"		},	{"^7=|HF|=^1AIM^7BOTS ^)OLD SKOOL",		"2.60",	"etpub",	"193.200.158.43:27960",		"hf1"		},	{"^7=|HF|=^1AIM^7BOTS ^)OLD SKOOL",		"2.55",	"etpub",	"208.167.247.114:27960",	"hf2"		},	};#define DELIMITER ";"#define RAWCOMMAND "%s -carets -raw \"" DELIMITER "\" -woets %s | grep 0"void ETHSQ() {	//Check run.sh for QRYCMD env	if (strlen(qrycmd) == 0) { 	qrycmd = getenv("QRYCMD");		if (!qrycmd) 			qrycmd = "quakestat";	}		//==Start of parsing quakestat==		//Raw	char command[512];	snprintf(command, sizeof(command), RAWCOMMAND, qrycmd, ethServer[count].arrayIP);	char *raw = strdupa(getOutputSystemCommand(command));		//Server Type	strtok(raw, DELIMITER);		//Server IP	strtok(NULL, DELIMITER);		//Servername	strncpy(name, strtok(NULL, DELIMITER), sizeof(name));		//Map	strncpy(map, strtok(NULL, DELIMITER), sizeof(map));		//Max Players	strncpy(maxplayers, strtok(NULL, DELIMITER), sizeof(maxplayers));		//Current Players	strncpy(currplayers, strtok(NULL, DELIMITER), sizeof(currplayers));		//Ping	strncpy(ping, strtok(NULL, DELIMITER), sizeof(ping));		//==End of quakestat parse==		//Output	orig_syscall(UI_PRINT, "^0|^?------------------------------^0|^?----^0|^?-----------------^0|^?-------^0|\n");			  	orig_syscall(UI_PRINT, "^0|^3Servername                    ^0|^3Ping^0|^3Mapname          ^0|^3Players^0|\n");	orig_syscall(UI_PRINT, "^0|^?------------------------------^0|^?----^0|^?-----------------^0|^?-------^0|\n");	orig_syscall(UI_CMD_EXECUTETEXT, EXEC_APPEND, va("echo \"^0|%-30s^0|^n%-4s^0|^n%-17s^0|^n%s/%-7s^0| ""\n", name, ping, map, maxplayers,currplayers));    orig_syscall(UI_CMD_EXECUTETEXT, EXEC_APPEND, va("echo \"^0|^?______________________________^0|^?____^0|^?_________________^0|^?_______^0|\n"));    		}void ETHSQCommand() {	if (syscall_UI_Argc() == 1) {        orig_syscall(UI_PRINT, "^nQuery Servers and/or join them\n");        orig_syscall(UI_PRINT, "^nUsage: " ETH_CMD_PREFIX "server query/join [shortname]\n");        orig_syscall(UI_PRINT, "^nAvailable Servers \n");        orig_syscall(UI_PRINT, "^0|^3Name                                     ^0|^3Shortname^0|^3ET Ver.     ^0|^3Mod        ^0|\n");        orig_syscall(UI_PRINT, "^0|^?-----------------------------------------^0|^?---------^0|^?------------^0|^?-----------^0|\n");		count = 0;		for ( ; count < sizeof(ethServer) / sizeof(ethServer_t[1]) ; count++ ) {    	 	orig_syscall(UI_CMD_EXECUTETEXT, EXEC_APPEND, va("echo \"^0|%-41s^0|^3%-9s^0|^3%-12s^0|^3%-11s^0| ""\n", (ethServer[count].arrayname), (ethServer[count].arrayshortname), (ethServer[count].arrayver), (ethServer[count].arraymod)));     		 }    	count = 0;	}        if (syscall_UI_Argc() > 1){		const char *cmd = syscall_UI_Argv(1);		if ( !strcmp(cmd,"query") ){			const char *server = syscall_UI_Argv(2);			for ( ; count < sizeof(ethServer) / sizeof(ethServer[0]) ; count++ )				if ( !strcasecmp( server, ethServer[count].arrayshortname ) ) {    				ETHSQ();    				count = 0;				} else {					orig_syscall(UI_PRINT, "^nUnknown Server, aborting\n");					count = 0;								return;				} 		} else if ( !strcmp(cmd, "join") ) {			const char *server = syscall_UI_Argv(2);			for ( ; count < sizeof(ethServer) / sizeof(ethServer[0]) ; count++ )				if ( !strcasecmp( server, ethServer[count].arrayshortname ) ) {					orig_syscall( UI_CMD_EXECUTETEXT, EXEC_APPEND, va( "connect %s\n", ethServer[count].arrayIP ) );					count = 0;				} else {					orig_syscall(UI_PRINT, "^nUnknown Server, aborting\n");					count = 0;								return;				}		} else {			 orig_syscall(UI_PRINT, "^nUnknown Option, aborting\n");						 return;		}	}}void registerETHSQCommands() {	orig_Cmd_AddCommand(ETH_CMD_PREFIX "server", &ETHSQCommand);}