Diff for /loncom/LondConnection.pm between versions 1.23 and 1.24

version 1.23, 2004/01/06 09:35:22 version 1.24, 2004/02/09 10:57:37
Line 199  sub new { Line 199  sub new {
     Debug(5, "Connecting to ".$DnsName);      Debug(5, "Connecting to ".$DnsName);
     # Now create the object...      # Now create the object...
     my $self     = { Host               => $DnsName,      my $self     = { Host               => $DnsName,
      LoncapaHim         => $Hostname,                       LoncapaHim         => $Hostname,
              Port               => $Port,                       Port               => $Port,
              State              => "Initialized",                       State              => "Initialized",
              TransactionRequest => "",                       TransactionRequest => "",
              TransactionReply   => "",                       TransactionReply   => "",
              InformReadable     => 0,                       InformReadable     => 0,
              InformWritable     => 0,                       InformWritable     => 0,
      TimeoutCallback    => undef,                       TimeoutCallback    => undef,
      TransitionCallback => undef,                       TransitionCallback => undef,
              Timeoutable        => 0,                       Timeoutable        => 0,
              TimeoutValue       => 30,                       TimeoutValue       => 30,
      TimeoutRemaining   => 0,                       TimeoutRemaining   => 0,
      CipherKey          => "",                       CipherKey          => "",
      Cipher             => undef};                       LondVersion        => "Unknown",
                        Cipher             => undef};
     bless($self, $class);      bless($self, $class);
     unless ($self->{Socket} = IO::Socket::INET->new(PeerHost => $self->{Host},      unless ($self->{Socket} = IO::Socket::INET->new(PeerHost => $self->{Host},
        PeerPort => $self->{Port},         PeerPort => $self->{Port},
Line 316  sub Readable { Line 317  sub Readable {
     $self->Transition("ChallengeReceived");      $self->Transition("ChallengeReceived");
     $self->{TimeoutRemaining}   = $self->{TimeoutValue};      $self->{TimeoutRemaining}   = $self->{TimeoutValue};
     return 0;      return 0;
  } elsif ($self->{State} eq "ChallengeReplied") { # should be ok.     }  elsif ($self->{State} eq "ChallengeReplied") {
     if($self->{TransactionReply} != "ok\n") {        if($self->{TransactionReply} ne "ok\n") {
  $self->Transition("Disconnected");           $self->Transition("Disconnected");
  $socket->close();           $socket->close();
  return -1;           return -1;
     }        }
     $self->Transition("RequestingKey");        $self->Transition("RequestingVersion");
     $self->{InformReadable}  = 0;        $self->{InformReadable}   = 0;
     $self->{InformWritable}  = 1;        $self->{InformWritable}   = 1;
     $self->{TransactionRequest} = "ekey\n";        $self->{TransactionRequest} = "version\n";
     return 0;        return 0;
      } elsif ($self->{State} eq "ReadingVersionString") {
         $self->{LondVersion}       = chomp($self->{TransactionReply});
         $self->Transition("SetHost");
         $self->{InformReadable}    = 0;
         $self->{InformWritable}    = 1;
         my $peer = $self->{LoncapaHim};
         $self->{TransactionRequest}= "sethost:$peer\n";
         return 0;
    } elsif ($self->{State} eq "HostSet") { # should be ok.
         if($self->{TransactionReply} ne "ok\n") {
            $self->Transition("Disconnected");
            $socket->close();
            return -1;
         }
      $self->Transition("RequestingKey");
      $self->{InformReadable}  = 0;
      $self->{InformWritable}  = 1;
      $self->{TransactionRequest} = "ekey\n";
      return 0;
  } elsif ($self->{State}  eq "ReceivingKey") {   } elsif ($self->{State}  eq "ReceivingKey") {
     my $buildkey = $self->{TransactionReply};      my $buildkey = $self->{TransactionReply};
     my $key = $self->{LoncapaHim}.$perlvar{'lonHostID'};      my $key = $self->{LoncapaHim}.$perlvar{'lonHostID'};
Line 408  sub Writable { Line 428  sub Writable {
  ($errno == POSIX::EINTR)          ||   ($errno == POSIX::EINTR)          ||
  ($errno ==  0)) {   ($errno ==  0)) {
  substr($self->{TransactionRequest}, 0, $nwritten) = ""; # rmv written part   substr($self->{TransactionRequest}, 0, $nwritten) = ""; # rmv written part
  if(length $self->{TransactionRequest} == 0) {        if(length $self->{TransactionRequest} == 0) {
     $self->{InformWritable} = 0;           $self->{InformWritable} = 0;
     $self->{InformReadable} = 1;           $self->{InformReadable} = 1;
     $self->{TransactionReply} = '';           $self->{TransactionReply} = '';
     #           #
     # Figure out the next state:           # Figure out the next state:
     #           #
     if($self->{State} eq "Connected") {           if($self->{State} eq "Connected") {
  $self->Transition("Initialized");              $self->Transition("Initialized");
     } elsif($self->{State} eq "ChallengeReceived") {           } elsif($self->{State} eq "ChallengeReceived") {
  $self->Transition("ChallengeReplied");              $self->Transition("ChallengeReplied");
     } elsif($self->{State} eq "RequestingKey") {           } elsif($self->{State} eq "RequestingVersion") {
  $self->Transition("ReceivingKey");              $self->Transition("ReadingVersionString");
  $self->{InformWritable} = 0;           } elsif ($self->{State} eq "SetHost") {
  $self->{InformReadable} = 1;              $self->Transition("HostSet");
  $self->{TransactionReply} = '';           } elsif($self->{State} eq "RequestingKey") {
     } elsif ($self->{State} eq "SendingRequest") {              $self->Transition("ReceivingKey");
  $self->Transition("ReceivingReply");  #            $self->{InformWritable} = 0;
  $self->{TimeoutRemaining} = $self->{TimeoutValue};  #            $self->{InformReadable} = 1;
     } elsif ($self->{State} eq "Disconnected") {  #            $self->{TransactionReply} = '';
  return -1;           } elsif ($self->{State} eq "SendingRequest") {
     }              $self->Transition("ReceivingReply");
     return 0;              $self->{TimeoutRemaining} = $self->{TimeoutValue};
  }           } elsif ($self->{State} eq "Disconnected") {
     } else { # The write failed (e.g. partner disconnected).              return -1;
  $self->Transition("Disconnected");           }
  $socket->close();           return 0;
  return -1;        }
     }     } else { # The write failed (e.g. partner disconnected).
         $self->Transition("Disconnected");
         $socket->close();
         return -1;
      }
   
 }  }
 =pod  =pod
Line 856  sub read_hosts { Line 880  sub read_hosts {
     my $hostref = \%HostsTab;      my $hostref = \%HostsTab;
     return ($hostref);      return ($hostref);
 }  }
   #
   #   Get the version of our peer.  Note that this is only well
   #   defined if the state machine has hit the idle state at least
   #   once (well actually if it has transitioned out of 
   #   ReadingVersionString   The member data LondVersion is returned.
   #
   sub PeerVersion {
      my $self = shift;
      
      return $self->{LondVersion};
   }
   
 1;  1;
   

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


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