Diff for /loncom/Attic/lonManage between versions 1.22 and 1.23

version 1.22, 2003/11/03 10:48:18 version 1.23, 2003/11/04 11:23:37
Line 63  use lib "."; Line 63  use lib ".";
 use strict; # Because it's good practice.  use strict; # Because it's good practice.
 use English; # Cause I like meaningful names.  use English; # Cause I like meaningful names.
 use Getopt::Long;  use Getopt::Long;
 use IO::Socket::UNIX; # To communicate with lonc.  
 use LondConnection;  use LondConnection;
   use IO::Poll qw(POLLRDNORM POLLWRNORM POLLIN POLLHUP POLLOUT);
   
 # File scoped variables:  # File scoped variables:
   
Line 73  my %hostshash;   # Host table as a host Line 73  my %hostshash;   # Host table as a host
   
 my $MyHost=""; # Host name to use as me.  my $MyHost=""; # Host name to use as me.
 my $ForeignHostTab=""; # Name of foreign hosts table.  my $ForeignHostTab=""; # Name of foreign hosts table.
   
   my $DefaultServerPort =  5663; # Default server port if standalone.
 my $ServerPort; # Port used to connect to lond.  my $ServerPort; # Port used to connect to lond.
   
   my $TransitionTimeout = 5; # Poll timeout in seconds.
   
   
   LondConnection::SetDebug(10);
   
   
 #  #
 #   prints out utility's command usage info.  #   prints out utility's command usage info.
 #  #
Line 112  USAGE Line 120  USAGE
   
 }  }
   
   #
   #  Make a direct connection to the lond in 'host'.  The port is 
   #  gotten from the global variable:  ServerPort.
   #  Returns:
   #    The connection or undef if one could not be formed.
   #
 sub MakeLondConnection {  sub MakeLondConnection {
     my $host = shift;      my $host = shift;
   
     my $Connection = LondConnection->new($host, $ServerPort);      my $Connection = LondConnection->new($host, $ServerPort);
     return return $Connection;      return return $Connection;
 }  }
   #
   #    This function runs through the section of the connection
   #   state machine that has to do with negotiating the startup 
   #   sequence with lond.  The general strategy is to loop
   #   until the connection state becomes idle or disconnected.
   #   Disconnected indicates an error or rejection of the
   #   connection at some point in the negotiation.
   #   idle indicates a connection ready for a request.
   #   The main loop consults the object to determine if it
   #   wants to be writeable or readable, waits for that
   #   condition on the socket (with timeout) and  then issues
   #   the appropriate LondConnection call. Note that
   #   LondConnection is capable of doing everything necessary
   #   to get to the initial idle state.
   # 
   #
   #  Parameters:
   #     connection - A connection that has been created with
   #                  the remote lond.  This connection should
   #                  be in the Connected state ready to send
   #                  the init sequence.
   #
 sub NegotiateStartup {  sub NegotiateStartup {
     my $connection = shift;      my $connection = shift;
       my $returnstatus = "ok"; # Optimistic!!.
   
     return "ok";      my $state      = $connection->GetState;
       if($state ne "Connected") {
    print "Error: Initial lond connection state: $state should be Connected\n";
    return "error";
       }
       my $Socket     = $connection->GetSocket; # This is a IO:Socket::INET object.
   
       #  Ready now to enter the main loop:
       #
       my $error = 0;
       while (($connection->GetState ne "Idle") && (!$error)) {
    #
    #   Wait for the socket to get into the appropriate state:
    #
    my $wantread = $connection->WantReadable; 
    my $poll     = new IO::Poll;
    $poll->mask($Socket => $wantread ? POLLIN : POLLOUT);
    $poll->poll($TransitionTimeout);
    my $done     = $poll->handles();
    if(scalar($done) == 0) {                       # Timeout!!!
       print "Error: Timeout in state : $state negotiating connection\n";
       $returnstatus = "error";
       $error = 1;
    } else {
       my $status;
       $status = $wantread ? $connection->Readable : $connection->Writable;
       if ($status != 0) {
    print "Error: I/O failed in state : $state negotiating connection\n";
    $returnstatus = "error";
    $error = 1;
       }
    }
       }
   
       
       return $returnstatus;
 }  }
 sub PerformTransaction {  sub PerformTransaction {
     my $connection  = shift;      my $connection  = shift;
Line 149  sub subreply { Line 220  sub subreply {
  return "Connect Failed";   return "Connect Failed";
     }      }
     my $reply = NegotiateStartup($connection);      my $reply = NegotiateStartup($connection);
     if($reply != "ok") {      if($reply ne "ok") {
  return "connection negotiation failed";   return "connection negotiation failed";
     }      }
       print "Connection negotiated\n";
     my $reply =  PerformTransaction($connection, $cmd);      my $reply =  PerformTransaction($connection, $cmd);
     return $reply;      return $reply;
   
Line 279  sub ReadConfig { Line 351  sub ReadConfig {
  $MyHost        = $perlvar{lonHostID}; # Set hostname from vars.   $MyHost        = $perlvar{lonHostID}; # Set hostname from vars.
  $ServerPort    = $perlvar{londPort};   $ServerPort    = $perlvar{londPort};
     } else {      } else {
  my $hoststab   = LondConnection::read_hosts($ForeignHostTab);  
  %hostshash     = %{$hoststab};   LondConnection::ReadForeignConfig($MyHost, $ForeignHostTab);
  $ServerPort    = 5663;    my $hoststab = LondConnection::read_hosts($ForeignHostTab); #  we need to know too.
     }    %hostshash   = %{$hoststab};
     $ServerPort    = $DefaultServerPort;
         }
       
 }  }
 #  #
 #  Determine if the target host is valid.  #  Determine if the target host is valid.

Removed from v.1.22  
changed lines
  Added in v.1.23


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>