#!/usr/bin/perl # Metaserver for Freeciv. # # No rights reserved, released to the public domain. use strict; use CGI; use MIME::Base64; use File::Basename; my $userdef_savedata=dirname($0)."/freeciv-meta.dat"; my $userdef_lifetime=300; my $userdef_encoding="utf-8"; my $cgi=new CGI; my %dat; my ($host)=$cgi->param("host"); my ($port)=$cgi->param("port"); my ($client_cap)=$cgi->param("client_cap"); &dat_load($userdef_savedata,\%dat); &dat_lifetime($userdef_lifetime,\%dat); if((length($host)>0)&&(length($port)>0)){# for freeciv-server print $cgi->header({-charset=>$userdef_encoding}); $host=join(":",$host,$port); $dat{$host}{"LifeTime"}[0]=time(); foreach my $key($cgi->param){ my @param=$cgi->param($key); $dat{$host}{$key}=\@param; } if($dat{$host}{"bye"}[0]){undef($dat{$host});}# connection down &dat_save($userdef_savedata,\%dat); } elsif(length($client_cap)>0){# for freeciv-client print $cgi->header({'-content-type'=>'text/plain',-charset=>$userdef_encoding}); my @hosts=(keys %dat); for(my $n=0,my $mn=$#hosts;$n<=$mn;++$n){ $host=$hosts[$n]; print("[server$n]\n"); print("host = \"".$dat{$host}{"host"}[0]."\"\n"); print("port = \"".$dat{$host}{"port"}[0]."\"\n"); print("version = \"".$dat{$host}{"version"}[0]."\"\n"); print("capability = \"".$dat{$host}{"capability"}[0]."\"\n"); print("state = \"".$dat{$host}{"state"}[0]."\"\n"); print("topic = \"".$dat{$host}{"topic"}[0]."\"\n"); print("message = \"".$dat{$host}{"message"}[0]."\"\n"); print("available = \"".$dat{$host}{"available"}[0]."\"\n"); print("serverid = \"".$dat{$host}{"serverid"}[0]."\"\n"); print("nplayers = \"".($#{$dat{$host}{"plu[]"}}+1)."\"\n"); print("player = { \"name\" , \"user\" , \"nation\" , \"type\" , \"host\"\n"); for(my $f=0,my $mf=$#{$dat{$host}{"plu[]"}};$f<=$mf;++$f){ print("\"".$dat{$host}{"plu[]"}[$f]."\",\"".$dat{$host}{"pll[]"}[$f]."\",\"".$dat{$host}{"pln[]"}[$f]."\",\"".$dat{$host}{"plt[]"}[$f]."\",\"".$dat{$host}{"plh[]"}[$f]."\"\n"); } print("}\n"); print("vars = {"); for(my $f=0,my $mf=$#{$dat{$host}{"vn[]"}};$f<=$mf;++$f){ print("\"".$dat{$host}{"vn[]"}[$f]."\",\"".$dat{$host}{"vv[]"}[$f]."\"\n"); } print("}\n"); } print("[main]\n"); print("nservers=".($#hosts+1)."\n"); print("\r\n"); } else {# for web-interface print $cgi->header({-charset=>$userdef_encoding}); print("
\n");
$host=$ENV{"REMOTE_ADDR"};
print("| ".$host." | STATE | ".$dat{$host}{"state"}[0]." | |||
| ".$host." | VERSION | ".$dat{$host}{"version"}[0]." | |||
| ".$host." | MESSAGE | ".$dat{$host}{"message"}[0]." | |||
| ".$host." | PATCHES | ".$dat{$host}{"patches"}[0]." | |||
| ".$host." | CAPABILITY | ".$dat{$host}{"capability"}[0]." | |||
| ".$host." | SERVERID | ".$dat{$host}{"serverid"}[0]." | |||
| ".$host." | ".$dat{$host}{"vn[]"}[$f]." | ".$dat{$host}{"vv[]"}[$f]." | |||
| ".$host." | ".$dat{$host}{"plu[]"}[$f]." | ".$dat{$host}{"pll[]"}[$f]." | ".$dat{$host}{"pln[]"}[$f]." | ".$dat{$host}{"plt[]"}[$f]." | ".$dat{$host}{"plh[]"}[$f]." |