diff --git a/source/masterserver/addServerInfo.php b/source/masterserver/addServerInfo.php new file mode 100644 index 000000000..73493cd11 --- /dev/null +++ b/source/masterserver/addServerInfo.php @@ -0,0 +1,175 @@ += $timeout ) + { + $canconnect = false; + echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; + break; + } + sleep( 1 ); + continue; + } + $canconnect = false; + echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; + break; + } + + socket_set_block( $socket ) + or die( 'Unable to set block on socket.' ); + + //echo "and now read ...."; + //$buf = socket_read($socket, 161); + //echo $buf ."\n"; + + // Make sure its a glest server connecting + // + // struct Data{ + // int8 messageType; + // NetworkString versionString; + // NetworkString name; + // int16 playerIndex; + // int8 gameState; + // }; + + + if ( $canconnect == true ) { + $data_from_server = socket_read( $socket, 1 ); + } + + + socket_close( $socket ); + + error_reporting( E_ALL ); + + if ( $canconnect == false ) + { + echo 'wrong router setup'; + } + /* + else if ( $data_from_server != 1 ) // insert serious verification here + { + echo "invalid handshake!"; + } + */ + else // connection to game server succeeded, protocol verification succeeded + { // add this game server to the database + mysql_db_query( MYSQL_DATABASE, 'INSERT INTO glestserver SET ' . + 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . + 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . + 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . + 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . + 'ip=\'' . mysql_real_escape_string( $remote_ip ) . '\', ' . + 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . + 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . + 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . + 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . + 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . + 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . + 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\' +;' ); + echo 'OK'; + } + } + db_disconnect( DB_LINK ); +?> diff --git a/source/masterserver/addServerInfo.php.orig b/source/masterserver/addServerInfo.php.orig new file mode 100644 index 000000000..86a40152c --- /dev/null +++ b/source/masterserver/addServerInfo.php.orig @@ -0,0 +1,175 @@ += $timeout ) + { + $canconnect = false; + echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; + break; + } + sleep( 1 ); + continue; + } + $canconnect = false; + echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; + break; + } + + socket_set_block( $socket ) + or die( 'Unable to set block on socket.' ); + + //echo "and now read ...."; + //$buf = socket_read($socket, 161); + //echo $buf ."\n"; + + // Make sure its a glest server connecting + // + // struct Data{ + // int8 messageType; + // NetworkString versionString; + // NetworkString name; + // int16 playerIndex; + // int8 gameState; + // }; + + + if ( $canconnect == true ) { + $data_from_server = socket_read( $socket, 1 ); + } + + + socket_close( $socket ); + + error_reporting( E_ALL ); + + if ( $canconnect == false ) + { + echo 'wrong router setup'; + } + /* + else if ( $data_from_server != 1 ) // insert serious verification here + { + echo "invalid handshake!"; + } + */ + else // connection to game server succeeded, protocol verification succeeded + { // add this game server to the database + mysql_db_query( MYSQL_DATABASE, 'INSERT INTO glestserver SET ' . + 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . + 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . + 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . + 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . + 'ip=\'' . mysql_real_escape_string( $remote_ip ) . '\', ' . + 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . + 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . + 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . + 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . + 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . + 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . + 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\' +;' ); + echo 'OK'; + } + } + db_disconnect( DB_LINK ); +?> diff --git a/source/masterserver/cleanUpServerList.php b/source/masterserver/cleanUpServerList.php new file mode 100644 index 000000000..83c32c7d1 --- /dev/null +++ b/source/masterserver/cleanUpServerList.php @@ -0,0 +1,14 @@ + diff --git a/source/masterserver/config.php b/source/masterserver/config.php new file mode 100644 index 000000000..55f588e5f --- /dev/null +++ b/source/masterserver/config.php @@ -0,0 +1,13 @@ + diff --git a/source/masterserver/createDB.sql b/source/masterserver/createDB.sql new file mode 100755 index 000000000..78b023d39 --- /dev/null +++ b/source/masterserver/createDB.sql @@ -0,0 +1,45 @@ +-- phpMyAdmin SQL Dump +-- version 2.11.9.6 +-- http://www.phpmyadmin.net +-- +-- Host: mysql.goneo.de +-- Erstellungszeit: 12. Mai 2010 um 03:08 +-- Server Version: 5.0.90 +-- PHP-Version: 4.4.9 + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Datenbank: `17632m6025_1` +-- + +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `glestserver` +-- + +CREATE TABLE IF NOT EXISTS `glestserver` ( + `lasttime` timestamp NOT NULL default CURRENT_TIMESTAMP, + `glestVersion` varchar(30) collate utf8_unicode_ci NOT NULL, + `platform` varchar(30) collate utf8_unicode_ci NOT NULL, + `binaryCompileDate` varchar(30) collate utf8_unicode_ci NOT NULL, + `serverTitle` varchar(100) collate utf8_unicode_ci NOT NULL, + `ip` varchar(15) collate utf8_unicode_ci NOT NULL, + `tech` varchar(100) collate utf8_unicode_ci NOT NULL, + `map` varchar(100) collate utf8_unicode_ci NOT NULL, + `tileset` varchar(100) collate utf8_unicode_ci NOT NULL, + `activeSlots` int(11) NOT NULL, + `networkSlots` int(11) NOT NULL, + `connectedClients` int(11) NOT NULL, + `externalServerPort` int(11) NOT NULL, + KEY `lasttime` (`lasttime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Daten für Tabelle `glestserver` +-- + +INSERT INTO `glestserver` (`lasttime`, `glestVersion`, `platform`, `binaryCompileDate`, `serverTitle`, `ip`, `tech`, `map`, `tileset`, `activeSlots`, `networkSlots`, `connectedClients`,`externalServerPort`) VALUES +('2010-05-12 01:41:43', '', '', '', '', '', '', '', '', 0, 0, 0, 0); + diff --git a/source/masterserver/functions.php b/source/masterserver/functions.php new file mode 100644 index 000000000..3fab3aa9f --- /dev/null +++ b/source/masterserver/functions.php @@ -0,0 +1,57 @@ + here already, but then you don't filter non-visible bytes here) + //$text=strtolower($text); + $code_entities_match = array('!','@','#','$','%','^','&','*','(',')','_','+','{','}','|','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','='); + $code_entities_replace = array('','','','','','','','','','','','','','','','','','','','',''); + $text = str_replace( $code_entities_match, $code_entities_replace, $text ); + return $text; + } + + function db_connect() + { + // If we may use persistent MYSQL database server links... + if ( defined( 'MYSQL_LINK_PERSIST' ) && MYSQL_LINK_PERSIST === true ) + { + // ...then reuse an existing link or create a new one, ... + $linkid = mysql_pconnect( MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD ); + } + else + { + // ...otherwise create a standard link + $linkid = mysql_connect( MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD ); + } + return $linkid; + } + + function db_disconnect( $linkid ) + { + // note that mysql_close() only closes non-persistent connections + return mysql_close( $linkid ); + } + + function get_localsubnet_ip_prefix() + { + // If this is supposed to match any RFC1918 or even any unroutable IP address space then this is far from complete. + // Consider using something like the 'IANA Private list' provided at http://sites.google.com/site/blocklist/ instead. + // The data in this list is a subset of what IANA makes available at http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml + // Note that you may want/need to add in the IPv6 equivalent, too: http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml + return "192."; + } + + function get_external_ip() + { + return $_SERVER['SERVER_ADDR']; + //return "209.52.70.192"; + } + + function cleanupServerList( $mysql_database ) + { + // on a busy server, this function should be invoked by cron in regular intervals instead (one SQL query less for the script) + return mysql_db_query( $mysql_database, 'DELETE FROM glestserver WHERE lasttime diff --git a/source/masterserver/showServers.php b/source/masterserver/showServers.php new file mode 100644 index 000000000..37dd9fe35 --- /dev/null +++ b/source/masterserver/showServers.php @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + +END; + + foreach( $all_servers as $server ) + { + //array_walk( $server, 'htmlspecialchars', 'ENT_QUOTES' ); + echo "\t\t\t" . '' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t\t' . PHP_EOL; + echo "\t\t\t" . '' . PHP_EOL; + } + unset( $all_servers ); + unset( $server ); + +echo << + + +END; +?> diff --git a/source/masterserver/showServersForGlest.php b/source/masterserver/showServersForGlest.php new file mode 100644 index 000000000..1eedb4e88 --- /dev/null +++ b/source/masterserver/showServersForGlest.php @@ -0,0 +1,33 @@ + +
glestVersionplatformbinaryCompileDateserverTitleiptechmaptilesetactiveSlotsnetworkSlotsconnectedClientsexternalServerPort
" . htmlspecialchars( $server['glestVersion'], ENT_QUOTES ) . '" . htmlspecialchars( $server['platform'], ENT_QUOTES ) . '" . htmlspecialchars( $server['binaryCompileDate'], ENT_QUOTES ) . '" . htmlspecialchars( $server['serverTitle'], ENT_QUOTES ) . '" . htmlspecialchars( $server['ip'], ENT_QUOTES ) . '" . htmlspecialchars( $server['tech'], ENT_QUOTES ) . '" . htmlspecialchars( $server['map'], ENT_QUOTES ) . '" . htmlspecialchars( $server['tileset'], ENT_QUOTES ) . '" . htmlspecialchars( $server['activeSlots'], ENT_QUOTES ) . '" . htmlspecialchars( $server['networkSlots'], ENT_QUOTES ) . '" . htmlspecialchars( $server['connectedClients'], ENT_QUOTES ) . '" . htmlspecialchars( $server['externalServerPort'], ENT_QUOTES ) . '