#!/usr/bin/perl -w
#
# Copyright 2003 by James McQuillan <jam@McQuil.com>
#

use strict;
use IO::Socket;
use Getopt::Long;

##$| = 1;

my $host     = "";
my $port     = 9200;
my $cfg      = "";
my $proc     = "";
my $shutdown = 0;
my $reboot   = 0;

my $getopt_result = GetOptions( 'h|host=s'   => \$host,
                                'p|port=s'   => \$port,
                                'c|cfg=s'    => \$cfg,
                                's|shutdown' => \$shutdown,
                                'r|reboot'   => \$reboot,
                                'proc=s'     => \$proc, );

if( ! $getopt_result ){
  exit;
}

my $server = "$host:$port";

sub get_info {
  my $cmd = shift;
  my $socket = IO::Socket::INET->new($server)
                 or die "Couldn't open connection to $server: $!\n";

  print $socket "$cmd\n" or die "Unable to send the message: $!\n";

  my $rin         = "";
  my $rout        = "";
  my $eof         = 0;
  my $error       = 0;
  my $nfound      = 0;
  my $timeleft    = 0;
  my $timeout     = 60;
  my $total_bytes = "";
  my $bytes       = "";
  my $len         = 0;

  vec( $rin, fileno($socket), 1) = 1;
  while( ! $eof && ! $error ){
    ( $nfound, $timeleft ) = select( $rout = $rin, undef, undef, $timeout );
    if( $nfound ){
      $bytes = "";
      defined( my $addr = $socket->recv( $bytes, 32768, 0 ))
           or die "socket->recv() failed: $!\n";
      $len = length($bytes);
      if( $len ){
        $total_bytes .= $bytes;
        $timeout = 30;
      }
      else{
        $eof = 1;
      }
    }
    else{
      $error = 1;
    }
  }
  $socket->close();
  return($total_bytes);
}

#------------------------------------------------------------------------------

if( $cfg ){
  my $rec = get_info( "getcfg $cfg" );
  for my $line (split /\n/, $rec){
    chomp($line);
    my $entry = "LTSP_" . $line;
    printf("export %s\n", $entry);
  }
}

if( $proc ){
  my $rec = get_info( "getproc $proc" );
  printf($rec);
}

if( $shutdown ){
  my $rec = get_info( "shutdown" );
}

if( $reboot ){
  my $rec = get_info( "reboot" );
}

#------------------------------------------------------------------------------
