#!/bin/sh
# the next line restarts using wish \
exec tclsh $0 $@

# TEST is a server is alive.  Input the server IP and the port it is
#   listening on.  Can also input the time to wait for a reply which 
#   will default to 15000 msec.
#
# Returns:
#  0: If server is not active
#  1: If server is alive
#  2: If server is alive but connection times out
#  3: If server is alive but returns unknown reply to AREUUP

proc Results { sock } {
   global rL DataRecv

   fconfigure $sock -buffering line
   set rL [gets $sock]
   set DataRecv 1
   close $sock
}

if { $argc < 2 } {
   puts stderr "USAGE: Alive {IP Address} {Port} (Wait in Msec)"
   exit -1
}

set iP   [lindex $argv 0]
set PorT [lindex $argv 1]
if { $argc == 3 } { set mS [lindex argv 2] } else { set mS 15000 }

set pList [list AREUUP ]
if { [ catch { socket $iP $PorT } s] == 1 } {
   set Stat 0
} else {
   set Stat 1
   after $mS {set DataRecv 2}
   fconfigure $s -buffering line
   puts $s $pList

   fileevent $s readable [list Results $s]
   vwait DataRecv
   if { $DataRecv == 2 } { set Stat 0 }
   after cancel {set DataRecv 2}
   unset DataRecv

   if [string match IMUP $rL] { set Stat 1 } else { set Stat 3 }
}

puts stderr $Stat
exit $Stat
