--- loncom/LondConnection.pm 2003/10/28 10:47:44 1.14 +++ loncom/LondConnection.pm 2004/01/05 09:30:10 1.22 @@ -1,7 +1,7 @@ # This module defines and implements a class that represents # a connection to a lond daemon. # -# $Id: LondConnection.pm,v 1.14 2003/10/28 10:47:44 foxr Exp $ +# $Id: LondConnection.pm,v 1.22 2004/01/05 09:30:10 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,6 +46,13 @@ my %hostshash; my %perlvar; # +# Set debugging level +# +sub SetDebug { + $DebugLevel = shift; +} + +# # The config read is done in this way to support the read of # the non-default configuration file in the # event we are being used outside of loncapa. @@ -60,14 +67,45 @@ sub ReadConfig { my $perlvarref = read_conf('loncapa.conf'); %perlvar = %{$perlvarref}; my $hoststab = read_hosts( - "$perlvar{'lonTabDir'}/hosts.tab") || + "$perlvar{lonTabDir}/hosts.tab") || die "Can't read host table!!"; %hostshash = %{$hoststab}; + $ConfigRead = 1; - close(CONFIG); } +# +# Read a foreign configuration. +# This sub is intended for the cases where the package +# will be read from outside the LonCAPA environment, in that case +# the client will need to explicitly provide: +# - A file in hosts.tab format. +# - Some idea of the 'lonCAPA' name of the local host (for building +# the encryption key). +# +# Parameters: +# MyHost - Name of this host as far as LonCAPA is concerned. +# Filename - Name of a hosts.tab formatted file that will be used +# to build up the hosts table. +# +sub ReadForeignConfig { + my $MyHost = shift; + my $Filename = shift; + + &Debug(4, "ReadForeignConfig $MyHost $Filename\n"); + + $perlvar{lonHostID} = $MyHost; # Rmember my host. + my $hosttab = read_hosts($Filename) || + die "Can't read hosts table!!"; + %hostshash = %{$hosttab}; + if($DebugLevel > 3) { + foreach my $host (keys %hostshash) { + print "host $host => $hostshash{$host}\n"; + } + } + $ConfigRead = 1; +} sub Debug { my $level = shift; @@ -89,7 +127,7 @@ sub Dump { my $self = shift; my $key; my $value; - print "Dumping LondConnectionObject:\n"; + print STDERR "Dumping LondConnectionObject:\n"; while(($key, $value) = each %$self) { print STDERR "$key -> $value\n"; } @@ -153,6 +191,7 @@ sub new { # LoncapaHim fields of the object respectively. # if (!exists $hostshash{$Hostname}) { + &Debug(8, "No Such host $Hostname"); return undef; # No such host!!! } my @ConfigLine = @{$hostshash{$Hostname}}; @@ -523,7 +562,15 @@ Shuts down the socket. sub Shutdown { my $self = shift; my $socket = $self->GetSocket(); - $socket->shutdown(2); + Debug(5,"socket is -$socket-"); + if ($socket) { + # Ask lond to exit too. Non blocking so + # there is no cost for failure. + eval { + $socket->send("exit\n", 0); + $socket->shutdown(2); + } + } } =pod @@ -745,6 +792,9 @@ sub read_conf my %perlvar; foreach my $filename (@conf_files,'loncapa_apache.conf') { + if($DebugLevel > 3) { + print("Going to read $confdir.$filename\n"); + } open(CONFIG,'<'.$confdir.$filename) or die("Can't read $confdir$filename"); while (my $configline=) @@ -758,9 +808,15 @@ sub read_conf } close(CONFIG); } + if($DebugLevel > 3) { + print "Dumping perlvar:\n"; + foreach my $var (keys %perlvar) { + print "$var = $perlvar{$var}\n"; + } + } my $perlvarref=\%perlvar; - return ($perlvarref); - } + return $perlvarref; +} #---------------------- Subroutine read_hosts: Read a LON-CAPA hosts.tab # formatted configuration file. @@ -774,7 +830,7 @@ sub read_hosts { my $Filename = shift; my %HostsTab; - open(CONFIG,'<'.$Filename) or die("Can't read $Filename"); + open(CONFIG,'<'.$Filename) or die("Can't read $Filename"); while (my $line = ) { if (!($line =~ /^\s*\#/)) { my @items = split(/:/, $line);