#!/usr/bin/perl

##########################################################################
# AthenapT[o[o[Wc[
#
# @NAthenåeT[o[ɐڑď\
#
#-------------------------------------------------------------------------
#   ./checkversion IP:port ƂĎgp܂
#   ./checkversion IP port ł܂
#
# @ƃR[hOŏI܂
#
##########################################################################



$connecttimeout=10;	# ڑ^CAEg(b)

#-------------------------------ݒ肱܂-----------------------------




use IO::Socket;

unless($ARGV[0]){
	print "USAGE: $0 server:port\n";
	exit(1);
}

$server=$ARGV[0];
$port=$ARGV[1];
$port=$1 if($server=~s/:(\d+)//);
$port||=6900;

# T[o[ɐڑ
my($so,$er)=();
eval{
	$so=IO::Socket::INET->new(
		PeerAddr=> $server,
		PeerPort=> $port,
		Proto	=> "tcp",
		Timeout	=> $connecttimeout) or $er=1;
};
if($er || $@){
	print "Cant connect to server [$server:$port] !\n";
	exit(2);
}

# v
print $so pack("v",30000);
$so->flush();

# 
if( read($so,$buf,10)<10 ){
	print "socket read error. not athena or too old version ?\n";
	exit(5);
}

# ؒfv
print $so pack("v",30002);
$so->flush();

# pPbg
my($ret,$maver,$miver,$rev,$dev,$mod,$type,$mdver)=unpack("v c6 v",$buf);

if($ret!=30001){
	print "server error. not athena or too old version ?\n";
	exit(6);
}

print "[$server:$port]\n";
printf "Athena %s-%d.%d", ("stable","dev")[$dev], $maver,$miver;
printf ".%d",$rev if $rev;
printf "%s%d\n",("","-mod")[$mod],$mdver;
my(@stype)=();
foreach $i(0..3){
	push @stype,(("login","char","inter","map")[$i]) if( $type & (1<<$i) );
}
print join("/",@stype)." server.\n";
exit(0);
