Diff for /loncom/LondConnection.pm between versions 1.21 and 1.25

version 1.21, 2003/12/22 11:03:17 version 1.25, 2004/02/09 13:33:16
Line 127  sub Dump { Line 127  sub Dump {
     my $self   = shift;      my $self   = shift;
     my $key;      my $key;
     my $value;      my $value;
     print "Dumping LondConnectionObject:\n";      print STDERR "Dumping LondConnectionObject:\n";
     while(($key, $value) = each %$self) {      while(($key, $value) = each %$self) {
  print "$key -> $value\n";   print STDERR "$key -> $value\n";
     }      }
     print "-------------------------------\n";      print STDERR "-------------------------------\n";
 }  }
   
 =pod  =pod
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},
        Type     => SOCK_STREAM,      Type     => SOCK_STREAM,
        Proto    => "tcp",      Proto    => "tcp",
        Timeout  => 3)) {      Timeout  => 3)) {
  return undef; # Inidicates the socket could not be made.   return undef; # Inidicates the socket could not be made.
     }      }
     #      #
Line 308  sub Readable { Line 309  sub Readable {
  $socket->close();   $socket->close();
  return -1;   return -1;
     }      }
       
     &Debug(8," Transition out of Initialized");      &Debug(8," Transition out of Initialized");
     $self->{TransactionRequest} = $self->{TransactionReply};      $self->{TransactionRequest} = $self->{TransactionReply};
     $self->{InformWritable}     = 1;      $self->{InformWritable}     = 1;
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");
    $socket->close();
    return -1;
       }
       $self->Transition("RequestingVersion");
       $self->{InformReadable}   = 0;
       $self->{InformWritable}   = 1;
       $self->{TransactionRequest} = "version\n";
       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");   $self->Transition("Disconnected");
  $socket->close();   $socket->close();
  return -1;   return -1;
Line 375  sub Readable { Line 395  sub Readable {
     }      }
   
     return 0;      return 0;
       
 }  }
   
   
Line 390  mark the object as waiting for readabili Line 410  mark the object as waiting for readabili
 Returns  0 if successful, or -1 if not.  Returns  0 if successful, or -1 if not.
   
 =cut  =cut
   
 sub Writable {  sub Writable {
     my $self     = shift; # Get reference to the object.      my $self     = shift; # Get reference to the object.
     my $socket   = $self->{Socket};      my $socket   = $self->{Socket};
Line 419  sub Writable { Line 440  sub Writable {
  $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 "RequestingVersion") {
    $self->Transition("ReadingVersionString");
       } elsif ($self->{State} eq "SetHost") {
    $self->Transition("HostSet");
     } elsif($self->{State} eq "RequestingKey") {      } elsif($self->{State} eq "RequestingKey") {
  $self->Transition("ReceivingKey");   $self->Transition("ReceivingKey");
  $self->{InformWritable} = 0;  #            $self->{InformWritable} = 0;
  $self->{InformReadable} = 1;  #            $self->{InformReadable} = 1;
  $self->{TransactionReply} = '';  #            $self->{TransactionReply} = '';
     } elsif ($self->{State} eq "SendingRequest") {      } elsif ($self->{State} eq "SendingRequest") {
  $self->Transition("ReceivingReply");   $self->Transition("ReceivingReply");
  $self->{TimeoutRemaining} = $self->{TimeoutValue};   $self->{TimeoutRemaining} = $self->{TimeoutValue};
Line 437  sub Writable { Line 462  sub Writable {
  $socket->close();   $socket->close();
  return -1;   return -1;
     }      }
   
 }  }
   
 =pod  =pod
   
 =head2 Tick  =head2 Tick
Line 856  sub read_hosts { Line 881  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.21  
changed lines
  Added in v.1.25


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