--- loncom/Attic/lonc 1999/10/13 17:48:51 1.1.1.1 +++ loncom/Attic/lonc 1999/11/18 19:52:46 1.3 @@ -10,7 +10,8 @@ # HUP restarts # USR1 tries to open connections again -# 6/4/99,6/5,6/7,6/8,6/9,6/10,6/11,6/12,7/14,7/19,10/8,10/9 Gerd Kortemeyer +# 6/4/99,6/5,6/7,6/8,6/9,6/10,6/11,6/12,7/14,7/19, +# 10/8,10/9,10/15,11/18 Gerd Kortemeyer # based on nonforker from Perl Cookbook # - server who multiplexes without forking @@ -121,6 +122,16 @@ sub logthis { print $fh "$local ($$): $message\n"; } + +sub logperm { + my $message=shift; + my $execdir=$perlvar{'lonDaemons'}; + my $now=time; + my $local=localtime($now); + my $fh=IO::File->new(">>$execdir/logs/lonnet.perm.log"); + print $fh "$now:$message:$local\n"; +} + # ---------------------------------------------------- Fork once and dissociate $fpid=fork; @@ -214,10 +225,12 @@ unless ( exit; }; # --------------------------------------- Send a ping to make other end do USR1 -print $remotesock "ping\n"; +print $remotesock "init\n"; +$answer=<$remotesock>; +print $remotesock "$answer"; $answer=<$remotesock>; chomp($answer); -&logthis("Ping reply for $conserver: >$answer<"); +&logthis("Init reply for $conserver: >$answer<"); sleep 5; print $remotesock "pong\n"; $answer=<$remotesock>; @@ -240,6 +253,42 @@ if ($cipher=new IDEA $cipherkey) { &logthis("Error: Could not establish secure connection, $conserver!"); } +# ----------------------------------------- We're online, send delayed messages + + my $path="$perlvar{'lonSockDir'}/delayed"; + my $dfname; + while ($dfname=<$path/*.$conserver>) { + my $wcmd; + { + my $dfh=IO::File->new($dfname); + $wcmd=<$dfh>; + } + my ($server,$cmd)=split(/:/,$wcmd); + chomp($cmd); + my $bcmd=$cmd; + if ($cmd =~ /^encrypt\:/) { + my $rcmd=$cmd; + $rcmd =~ s/^encrypt\://; + chomp($rcmd); + my $cmdlength=length($rcmd); + $rcmd.=" "; + my $encrequest=''; + for (my $encidx=0;$encidx<=$cmdlength;$encidx+=8) { + $encrequest.= + unpack("H16",$cipher->encrypt(substr($rcmd,$encidx,8))); + } + $cmd="enc:$cmdlength:$encrequest\n"; + } + + print $remotesock "$cmd\n"; + $answer=<$remotesock>; + chomp($answer); + if ($answer ne '') { + unlink("$dfname"); + &logthis("Delayed $cmd to $conserver ($server): >$answer<"); + &logperm("S:$conserver:$bcmd"); + } + } # ------------------------------------------------------- Listen to UNIX socket unless (