--- loncom/configuration/Configuration.pm	2002/09/09 13:57:37	1.7
+++ loncom/configuration/Configuration.pm	2004/04/01 15:26:04	1.12
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Configuration file reader
 #
-# $Id: Configuration.pm,v 1.7 2002/09/09 13:57:37 harris41 Exp $
+# $Id: Configuration.pm,v 1.12 2004/04/01 15:26:04 albertel Exp $
 #
 #
 # Copyright Michigan State University Board of Trustees
@@ -27,7 +27,6 @@
 # http://www.lon-capa.org/
 #
 # YEAR=2002
-# 05/03 Scott Harrison
 #
 ###
 
@@ -35,7 +34,7 @@
 
 package LONCAPA::Configuration;
 
-$VERSION = sprintf("%d.%02d", q$Revision: 1.7 $ =~ /(\d+)\.(\d+)/);
+$VERSION = sprintf("%d.%02d", q$Revision: 1.12 $ =~ /(\d+)\.(\d+)/);
 
 use strict;
 
@@ -44,29 +43,64 @@ my $confdir='/etc/httpd/conf/';
 # ------------------- Subroutine read_conf: read LON-CAPA server configuration.
 # This subroutine reads PerlSetVar values out of specified web server
 # configuration files.
-sub read_conf
-  {
+sub read_conf {
     my (@conf_files)=@_;
     my %perlvar;
-    foreach my $filename (@conf_files,'loncapa_apache.conf')
-      {
+    foreach my $filename (@conf_files,'loncapa_apache.conf') {
 	open(CONFIG,'<'.$confdir.$filename) or
 	    die("Can't read $confdir$filename");
-	while (my $configline=<CONFIG>)
-	  {
-	    if ($configline =~ /^[^\#]*PerlSetVar/)
-	      {
+	while (my $configline=<CONFIG>) {
+	    if ($configline =~ /^[^\#]*PerlSetVar/) {
 		my ($unused,$varname,$varvalue)=split(/\s+/,$configline);
 		chomp($varvalue);
 		$perlvar{$varname}=$varvalue;
-	      }
-	  }
+	    }
+	}
 	close(CONFIG);
-      }
+    }
     my $perlvarref=\%perlvar;
     return ($perlvarref);
-  }
+}
 
+#---------------------- Subroutine read_hosts: Read a LON-CAPA hosts.tab
+# formatted configuration file.
+#
+my $RequiredCount = 5;		# Required item count in hosts.tab.
+my $DefaultMaxCon = 5;		# Default value for maximum connections.
+my $DefaultIdle   = 1000;       # Default connection idle time in seconds.
+my $DefaultMinCon = 0;          # Default value for minimum connections.
+sub read_hosts {
+    my $Filename = shift;
+    my %HostsTab;
+    
+    open(CONFIG,'<'.$Filename) or die("Can't read $Filename");
+    while (my $line = <CONFIG>) {
+	if (!($line =~ /^\s*\#/)) {
+	    my @items = split(/:/, $line);
+	    if(scalar @items >= $RequiredCount) {
+		if (scalar @items == $RequiredCount) { # Only required items:
+		    $items[$RequiredCount] = $DefaultMaxCon;
+		}
+		if(scalar @items == $RequiredCount + 1) { # up through maxcon.
+		    $items[$RequiredCount+1] = $DefaultIdle;
+		}
+		if(scalar @items == $RequiredCount + 2) { # up through idle.
+		    $items[$RequiredCount+2] = $DefaultMinCon;
+		}
+		{
+		    my @list = @items; # probably not needed but I'm unsure of 
+		    # about the scope of item so...
+		    $HostsTab{$list[0]} = \@list; 
+		}
+	    }
+	}
+    }
+    close(CONFIG);
+    my $hostref = \%HostsTab;
+    return ($hostref);
+}
+
+1;
 __END__
 
 =pod
@@ -81,10 +115,11 @@ B<LONCAPA::Configuration> - configuratio
  use LONCAPA::Configuration;
 
  LONCAPA::Configuration::read_conf('loncapa.conf');
+ LONCAPA::Configuration::read_hosts(filename);
 
 =head1 DESCRIPTION
 
-Many different parts of the LON-CAPA software need to read in the
+Many different parts of the LON-CAPA software need to reads in the
 machine-specific configuration information.  These included scripts
 controlling the TCP/IP layer (e.g. F<lonc> and F<lond>), testing scripts
 (e.g. test_weblayer.pl and sqltest.pl), and utility scripts
@@ -111,9 +146,47 @@ given toward the B<last> file name proce
 
 =back
 
-=head1 AUTHORS
+=over 4
+=item $hostinfo = LONCAPA::Configuration::read_hosts(filename);
+
+  The parameter is the name of a file in hosts.tab form.  The file is read and
+parsed.  The return value is a reference to a hash.   The hash is indexed by
+host and each element of the has is in turn a reference to an anonymous list
+containing:
+
+=over 4
+=item host
+   The loncapa hostname of the system. (This may be different than the 
+   network hostname, see below).
+=item domain
+   The loncapa domain in which the host lives.
+=item role
+    The role of the system, currently allowed values are access for an
+    access server and library for a library server.
+=item dns
+    The DNS hostname of the system. 
+=item ip
+    The IP address corresponding to the dns hostname of the system.
+=item maxconn 
+    The maximum number of connections this system should hold to the
+    target system's lond.  If the file has no value, a default is supplied
+    here by the function.
+=item idle
+    The number of seconds the oldest idle connection can be idle before it
+    should be adaptively dropped.  If the file has no value, a default
+    is supplied by the function.
+=item mincon
+    The minimum number of connections this system should hold to the
+    target system's lond.  If the file has no value, a default is supplied by
+    the funciton.
 
-Scott Harrison
+=back
+
+=back
+
+
+
+=head1 AUTHORS
 
 This library is free software; you can redistribute it and/or
 modify it under the same terms as LON-CAPA itself.