Diff for /telnetbbs/telnetbbs.pl between versions 1.6 and 1.10

version 1.6, 2010/12/14 20:32:49 version 1.10, 2010/12/17 20:15:24
Line 13  BEGIN { Line 13  BEGIN {
         delete @ENV{qw(IFS CDPATH ENV BASH_ENV PATH)};          delete @ENV{qw(IFS CDPATH ENV BASH_ENV PATH)};
         $ENV{PATH} = "/bin:/usr/bin";          $ENV{PATH} = "/bin:/usr/bin";
         $|++;          $|++;
         $SIG{__DIE__} = sub { require Carp; Carp::confess(@_); }  #        $SIG{__DIE__} = sub { require Carp; Carp::confess(@_); }
       }        }
   
 use strict;  use strict;
Line 36  my %cfg     = &fetchConfig( ); Line 36  my %cfg     = &fetchConfig( );
 my $EOL     = "\015\012";  my $EOL     = "\015\012";
   
 ##   ## 
 ## These will be moved in to a config file  ## These are read in from the config file
 ##  ##
 my $BBS_NODE  = 0;  my $BBS_NODE  = 0;
 my $pidFile   = $cfg{'pidfile'}    || "/tmp/telnetbbs.pid";  my $pidFile   = $cfg{'pidfile'}    || "/tmp/telnetbbs.pid";
Line 44  my $port      = $opts{'port'}      || $c Line 44  my $port      = $opts{'port'}      || $c
 my $DISPLAY   = $cfg{'display'}    || ":0.0";  my $DISPLAY   = $cfg{'display'}    || ":0.0";
 my $BBS_NAME  = $cfg{'bbs_name'}   || "Hell's Dominion BBS";  my $BBS_NAME  = $cfg{'bbs_name'}   || "Hell's Dominion BBS";
 my $DBCONF    = $cfg{'dosbox_cfg'} || "/tmp/dosbox-__NODE__.conf";  my $DBCONF    = $cfg{'dosbox_cfg'} || "/tmp/dosbox-__NODE__.conf";
 my $BBS_CMD   = $cfg{'bbs_cmd'}    || "DISPLAY=$DISPLAY /usr/bin/dosbox -conf ";  my $BBS_CMD   = $cfg{'bbs_cmd'}    || "DISPLAY=__DISPLAY__ /usr/bin/dosbox -conf ";
 my $LOGGING   = $cfg{'logging'}    || 0;  my $LOGGING   = $cfg{'logging'}    || 0;
 my $LOG       = $cfg{'log_path'}   || "/tmp/bbs.log";  my $LOG       = $cfg{'log_path'}   || "/tmp/bbs.log";
 my $MAX_NODE  = $cfg{'nodes'}      || 1;  my $MAX_NODE  = $cfg{'nodes'}      || 1;
 my $DOSBOXT   = $cfg{'dosboxt'}    || "dosbox.conf.template";  my $DOSBOXT   = $cfg{'dosboxt'}    || "dosbox.conf.template";
 my $BASE_PORT = $cfg{'base_port'}  || 7000;  my $BASE_PORT = $cfg{'base_port'}  || 7000;
 my $LOCK_PATH = $cfg{'lock_path'}  || "/tmp";  my $LOCK_PATH = $cfg{'lock_path'}  || "/tmp";
      $BBS_CMD   =~ s/__DISPLAY__/$DISPLAY/g;
   
 ##  ##
 ## Check that we are 'root'   ## Check that we are 'root' 
Line 105  while( 1 ) { sleep 1; } Line 106  while( 1 ) { sleep 1; }
 ## Sub-routines begin here  ## Sub-routines begin here
 ##  ##
 ###############################################################################  ###############################################################################
 ###############################################################################  
   
   
   ###############################################################################
   ##
   ## &logmsg( "string" );
   ##
   ##  This takes a string and prepends the process name, ID and timestamp
   ##  to the message.  It then displays it to STDOUT and logs it if enabled.
   ##
   ###############################################################################
 sub logmsg   sub logmsg 
 {   { 
         my $message = "$0 $$ " . scalar( localtime( ) ) . ":@_\n";          my $message = "$0 $$ " . scalar( localtime( ) ) . ":@_\n";
Line 116  sub logmsg Line 125  sub logmsg
   
   
 ###############################################################################  ###############################################################################
   ##
   ## &display_config_and_options( %hash );
   ##
   ##  This will display via Data::Dumper a hash that is passed to it.
   ##  If verbose is enabled it will got to STDOUT and if logging is enabled
   ##  it will be logged.
   ##
   ##  This is called only once during startup.
   ##
 ###############################################################################  ###############################################################################
 sub display_config_and_options  sub display_config_and_options
 {  {
Line 163  sub startNetServer Line 181  sub startNetServer
                 ##                  ##
                 my $node = 0;                  my $node = 0;
                 my $lock_file = "";                  my $lock_file = "";
                 foreach (1 .. $MAX_NODE)                  my $cnt  = 0;
                   while ( ! $node && $cnt < $MAX_NODE )
                 {                  {
 print "Searching for lock: " . $LOCK_PATH."/".$BBS_NAME."_node".$_.".lock\n";                          $cnt++;
                         next if ( -f $LOCK_PATH."/".$BBS_NAME."_node".$_.".lock" );                          $lock_file = $LOCK_PATH . "/" . $BBS_NAME . 
                                        "_node" . $cnt . ".lock";
   print "Checking for node lock: $lock_file\n";
                           next if ( -f $lock_file );
   
                         ##                          ##
                         ## Create node lock file                          ## Create node lock file
                         ##                          ##
                         $lock_file = $LOCK_PATH."/".$BBS_NAME."_node".$_.".lock";  
                         open LOCK, ">$lock_file";                          open LOCK, ">$lock_file";
                         close( LOCK );                          close( LOCK );
                         $node = $BBS_NODE = $_;                          $BBS_NODE = $node = $cnt;
   print "Using node: $node\n";
                 }                  }
 print "Using lock: " . $LOCK_PATH."/".$BBS_NAME."_node".$node.".lock\n";  
   
                 ##                  ##
                 ## Create our dosbox config                  ## Create our dosbox config
Line 217  print "Using lock: " . $LOCK_PATH."/".$B Line 238  print "Using lock: " . $LOCK_PATH."/".$B
                 print "Welcome to $BBS_NAME!" . $EOL;                  print "Welcome to $BBS_NAME!" . $EOL;
   
                 ##                  ##
                 if ( ! $lock_file )                   if ( ! $node ) 
                 {                  {
                         print "No available nodes.  Try again later.".$EOL;                          print "No available nodes.  Try again later.".$EOL;
                         exit;                          exit;
Line 235  print "Using lock: " . $LOCK_PATH."/".$B Line 256  print "Using lock: " . $LOCK_PATH."/".$B
                         my $cmd = $BBS_CMD . $DBCONF;                          my $cmd = $BBS_CMD . $DBCONF;
                         system( $cmd );                          system( $cmd );
                         print "Shutting down node $BBS_NODE\n";                          print "Shutting down node $BBS_NODE\n";
   
                         ##                          ##
                         ## Remove Lock                          ## Remove Lock
                         ##                                ##      
                         unlink( $lock_file );                          unlink( $lock_file );
                         unlink( $DBCONF );                          unlink( $DBCONF );
                           close( $hostConnection );
                           close( $server );
                           kill( "TERM" => $bbsPID );
                         exit;                          exit;
                 }                  }
   
Line 284  print "Using lock: " . $LOCK_PATH."/".$B Line 309  print "Using lock: " . $LOCK_PATH."/".$B
                 unlink( $DBCONF );                  unlink( $DBCONF );
         }          }
         close( $hostConnection );          close( $hostConnection );
         exit;          close( $server );
   
 #       close( $server );          exit;
 }  }
   
 ###############################################################################  ###############################################################################
Line 318  sub shutdown Line 343  sub shutdown
         unlink( $pidFile );          unlink( $pidFile );
   
         ##          ##
           ## Remove node lock files
           ##
           foreach (1 .. $MAX_NODE)
           {
                   my $node_lock = $LOCK_PATH."/".$BBS_NAME."_node".$_.".lock";
                   unlink( $node_lock ) if ( -f $node_lock );
           }
   
           ##
         ## Wait for the thread to shutdown          ## Wait for the thread to shutdown
         ##          ##
 #       $netThread->detach( );    #       $netThread->detach( );  
Line 427  sub processExists Line 461  sub processExists
 }  }
   
 ###############################################################################  ###############################################################################
   ##
   ## %config_hash = &fetchConfig( );
   ##
   ##  This reads in a file in the format of "key = value" and stores them
   ## in to a hash of $hash{$key} = $value.  Lines starting with '#' are 
   ## considered comments and ignored.
   ##
 ###############################################################################  ###############################################################################
 sub fetchConfig   sub fetchConfig 
 {  {
Line 454  sub fetchConfig Line 495  sub fetchConfig
 }  }
   
 ###############################################################################  ###############################################################################
   ##
   ## my $file = &fetchConfig( );
   ##
   ##  This function will look for 'telnetbbs.conf' or whatever was specified
   ##  on the command line.  It will search the @paths below for the default
   ##  filename if none is specifed.
   ##
 ###############################################################################  ###############################################################################
 sub findConfig  sub findConfig
 {  {
         my $cf    = 0;          my $cf    = 0;
         my @paths = qw| ./ ./.telnetbbs /etc /usr/local/etc |;          my @paths = qw| ./ ./.telnetbbs /etc /usr/local/etc |;
   
           return $opts{'config'} if defined $opts{'config'};
   
         foreach ( @paths )           foreach ( @paths ) 
         {          {
                 my $fn = $_ . "/telnetbbs.conf";                  my $fn = $_ . "/telnetbbs.conf";
Line 480  sub fetchOptions { Line 530  sub fetchOptions {
         my %opts;          my %opts;
   
         &GetOptions(          &GetOptions(
                           "config:s"      => \$opts{'config'},
                         "help|?"        => \$opts{'help'},                          "help|?"        => \$opts{'help'},
                         "man"           => \$opts{'man'},                          "man"           => \$opts{'man'},
                         "port:i"        => \$opts{'port'},                          "port:i"        => \$opts{'port'},
Line 502  telnetbbs.pl - A telnet server designed Line 553  telnetbbs.pl - A telnet server designed
 telnetbbs.pl [options]  telnetbbs.pl [options]
   
  Options:   Options:
           --config,c      Specify the configuration file to use
         --help,?        Display the basic help menu          --help,?        Display the basic help menu
         --man,m         Display the detailed man page          --man,m         Display the detailed man page
         --port,p        Port to listen on, default 23.          --port,p        Port to listen on, default 23.
           --verbose,v     Enable verbose output
   
 =head1 DESCRIPTION  =head1 DESCRIPTION
   

Removed from v.1.6  
changed lines
  Added in v.1.10


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