--- loncom/Attic/lonc 2003/03/18 22:51:03 1.48
+++ loncom/Attic/lonc 2003/03/27 23:00:28 1.49
@@ -5,7 +5,7 @@
# provides persistent TCP connections to the other servers in the network
# through multiplexed domain sockets
#
-# $Id: lonc,v 1.48 2003/03/18 22:51:03 albertel Exp $
+# $Id: lonc,v 1.49 2003/03/27 23:00:28 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -64,7 +64,8 @@ $status='';
$lastlog='';
$conserver='SHELL';
$DEBUG = 0; # Set to 1 for annoyingly complete logs.
-
+$VERSION='$Revison$'; #' stupid emacs
+$remoteVERSION;
# -------------------------------- Set signal handlers to record abnormal exits
&status("Init exception handlers");
@@ -702,75 +703,89 @@ sub openremote {
my $conserver=shift;
-&status("Opening TCP $conserver");
+ &status("Opening TCP $conserver");
my $st=120+int(rand(240)); # Sleep before opening:
-unless (
- $remotesock = IO::Socket::INET->new(PeerAddr => $hostip{$conserver},
- PeerPort => $perlvar{'londPort'},
- Proto => "tcp",
- Type => SOCK_STREAM)
- ) {
-
- &logthis(
-"WARNING: Couldn't connect to $conserver ($st secs): ");
- sleep($st);
- exit;
- };
+ unless (
+ $remotesock = IO::Socket::INET->new(PeerAddr => $hostip{$conserver},
+ PeerPort => $perlvar{'londPort'},
+ Proto => "tcp",
+ Type => SOCK_STREAM)
+ ) {
+
+ &logthis(
+ "WARNING: Couldn't connect to $conserver ($st secs): ");
+ sleep($st);
+ exit;
+ };
# ----------------------------------------------------------------- Init dialog
-&logthis("INFO Connected to $conserver, initing ");
-&status("Init dialogue: $conserver");
+ &logthis("INFO Connected to $conserver, initing");
+ &status("Init dialogue: $conserver");
- $answer = londtransaction($remotesock, "init:$conserver", 60);
+ $answer = londtransaction($remotesock, "init", 60);
chomp($answer);
$answer = londtransaction($remotesock, $answer, 60);
chomp($answer);
-
- if ($@=~/timeout/) {
- &logthis("Timed out during init.. exiting");
- exit;
- }
-if ($answer ne 'ok') {
- &logthis("Init reply: >$answer<");
- my $st=120+int(rand(240));
- &logthis(
-"WARNING: Init failed ($st secs)");
- sleep($st);
- exit;
-}
+ if ($@=~/timeout/) {
+ &logthis("Timed out during init.. exiting");
+ exit;
+ }
-sleep 5;
-&status("Ponging $conserver");
-print $remotesock "pong\n";
-$answer=<$remotesock>;
-chomp($answer);
-if ($answer!~/^$conserver/) {
- &logthis("Pong reply: >$answer<");
-}
+ if ($answer ne 'ok') {
+ &logthis("Init reply: >$answer<");
+ my $st=120+int(rand(240));
+ &logthis("WARNING: Init failed ($st secs)");
+ sleep($st);
+ exit;
+ }
+
+ $answer = londtransaction($remotesock,"sethost:$conserver",60);
+ chomp($answer);
+ if ( $answer ne 'ok') {
+ &logthis('WARNING: unable to specify remote host'.
+ $answer.'');
+ }
+
+ $answer = londtransaction($remotesock,"version:$VERSION",60);
+ chomp($answer);
+ if ($answer =~ /^version:/) {
+ $remoteVERSION=(split(/:/,$answer))[1];
+ } else {
+ &logthis('WARNING: request remote version failed :'.
+ $answer.': my version is :'.$VERSION.':');
+ }
+
+ sleep 5;
+ &status("Ponging $conserver");
+ print $remotesock "pong\n";
+ $answer=<$remotesock>;
+ chomp($answer);
+ if ($answer!~/^$conserver/) {
+ &logthis("Pong reply: >$answer<");
+ }
# ----------------------------------------------------------- Initialize cipher
-&status("Initialize cipher");
-print $remotesock "ekey\n";
-my $buildkey=<$remotesock>;
-my $key=$conserver.$perlvar{'lonHostID'};
-$key=~tr/a-z/A-Z/;
-$key=~tr/G-P/0-9/;
-$key=~tr/Q-Z/0-9/;
-$key=$key.$buildkey.$key.$buildkey.$key.$buildkey;
-$key=substr($key,0,32);
-my $cipherkey=pack("H32",$key);
-if ($cipher=new IDEA $cipherkey) {
- &logthis("Secure connection initialized");
-} else {
- my $st=120+int(rand(240));
- &logthis(
- "WARNING: ".
- "Could not establish secure connection ($st secs)!");
- sleep($st);
- exit;
-}
+ &status("Initialize cipher");
+ print $remotesock "ekey\n";
+ my $buildkey=<$remotesock>;
+ my $key=$conserver.$perlvar{'lonHostID'};
+ $key=~tr/a-z/A-Z/;
+ $key=~tr/G-P/0-9/;
+ $key=~tr/Q-Z/0-9/;
+ $key=$key.$buildkey.$key.$buildkey.$key.$buildkey;
+ $key=substr($key,0,32);
+ my $cipherkey=pack("H32",$key);
+ if ($cipher=new IDEA $cipherkey) {
+ &logthis("Secure connection initialized");
+ } else {
+ my $st=120+int(rand(240));
+ &logthis("WARNING: ".
+ "Could not establish secure connection ($st secs)!");
+ sleep($st);
+ exit;
+ }
&logthis(" Remote open success ");
}
@@ -979,8 +994,8 @@ sub londtransaction {
die("lonc - suiciding on send Timeout");
}
if ($@ =~ /timeout/) {
- &logthis("lonc - suiciding on send Timeout");
- die("lonc - suiciding on send Timeout");
+ &logthis("lonc - suiciding on read Timeout");
+ die("lonc - suiciding on read Timeout");
}
#
# Restore the initial sigmask set.