Category : Linux Files
Archive   : UPC12BS1.ZIP
Filename : HOSTATUS.C

 
Output of file : HOSTATUS.C contained in archive : UPC12BS1.ZIP
/*--------------------------------------------------------------------*/
/* h o s t a t u s . c */
/* */
/* Load host status information for UUPC/extended */
/* */
/* Copyright (c) 1991, Andrew H. Derbyshire */
/*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*/
/* Changes Copyright (c) 1990-1993 by Kendra Electronic */
/* Wonderworks. */
/* */
/* All rights reserved except those explicitly granted by the */
/* UUPC/extended license agreement. */
/*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*/
/* RCS Information */
/*--------------------------------------------------------------------*/

/*
* $Id: hostatus.c 1.4 1993/07/06 10:56:27 ahd Exp $
*
* Revision history:
* $Log: hostatus.c $
* Revision 1.4 1993/07/06 10:56:27 ahd
* Always report bad record failures
*
*/

/*--------------------------------------------------------------------*/
/* System include files */
/*--------------------------------------------------------------------*/

#include
#include
#include

#include

/*--------------------------------------------------------------------*/
/* UUPC/extended include files */
/*--------------------------------------------------------------------*/

#include "lib.h"
#include "hlib.h"
#include "hostable.h"
#include "hostatus.h"
#include "security.h"
#include "timestmp.h"
#include "stater.h"

/*--------------------------------------------------------------------*/
/* Define current file name for panic() and printerr() */
/*--------------------------------------------------------------------*/

currentfile();

/*--------------------------------------------------------------------*/
/* Global variables */
/*--------------------------------------------------------------------*/

time_t start_stats = 0;
time_t hstatus_age = -2;

void HostStatus( void )
{

char fname[FILENAME_MAX];
char buf[BUFSIZ];
struct HostTable *host;
FILE *stream;
unsigned short len1;
unsigned short len2;
long size;

time_t age;

mkfilename( fname, E_confdir, DCSTATUS );

/*--------------------------------------------------------------------*/
/* If the file does not exist but does exist in the spool */
/* directory, attempt to move it, else use the spool directory. */
/* If the file doesn't exist at all, return quietly. */
/*--------------------------------------------------------------------*/

if ( access( fname, 0 ))
{
mkfilename( buf, E_spooldir, DCSTATUS );
if ( access( buf, 0 ))
return;

if (rename( buf, fname ))
{
printerr( buf );
strcpy( fname, buf );
}
}

/*--------------------------------------------------------------------*/
/* Get the age of the file to avoid reloads */
/*--------------------------------------------------------------------*/

age = stater( fname , &size );

if ( age == hstatus_age ) /* Unchanged file? */
return; /* Yes --> Just return quietly */

/*--------------------------------------------------------------------*/
/* Actually open the file */
/*--------------------------------------------------------------------*/

if ((stream = FOPEN(fname , "r", BINARY_MODE)) == NULL)
{

perror( fname );
printmsg(1,"HostStatus: Unable to open host status file");
time(&start_stats);
return;

} /* if */

/*--------------------------------------------------------------------*/
/* Read the header information */
/*--------------------------------------------------------------------*/

fread( &len1, sizeof len1, 1, stream );
fread( &len2, sizeof len2, 1, stream );
fread( buf , 1, len1, stream);
buf[len1++] = ' ';
fread( buf + len1 , 1, len2, stream);
buf[ len1 + len2 ] = '\0';
fread( &start_stats , sizeof start_stats , 1, stream);

printmsg(5,"HostStatus: %s generated by %s beginning %s",
fname,
buf,
ctime(&start_stats));

if ( start_stats < 630720000L ) /* Invalid date? */

time(&start_stats); /* Yes --> reset date to today*/

/*--------------------------------------------------------------------*/
/* Load each host */
/*--------------------------------------------------------------------*/

while (!feof( stream ) && !ferror(stream))
{
if (fread( &len1, sizeof len1, 1, stream ) < 1)
break;

fread( &len2, sizeof len2, 1, stream );
fread( buf , sizeof host->hostname[0], len1, stream);
buf[ len1 ] = '\0';

printmsg(5,"HostStatus: Name length %d, status length %d, "
"host name \"%s\"",
len1, len2, buf );

host = checkreal( buf );

if ( host == BADHOST )
{
printmsg(1,"HostStatus: Host \"%s\" not found, purging entry",
buf );
fread( buf , len2, 1, stream);
}
else if ( len2 <= (sizeof *(host->hstats)))
{
struct HostStats stats; /* host status, as defined by hostatus */

fread( &stats , len2, 1, stream);

printmsg(5,"HostStatus: Loaded status for host %s",
host->hostname);

/*--------------------------------------------------------------------*/
/* Update the host status to the best known information */
/*--------------------------------------------------------------------*/

if ( host->hstats->lconnect > stats.lconnect )
stats.lconnect = host->hstats->lconnect;

if ( host->hstats->ltime > stats.ltime )
stats.ltime = host->hstats->ltime;
else if ( host->hstats->lconnect > stats.ltime )
; /* No operation */
else if (( stats.save_hstatus >= nocall ) &&
( stats.save_hstatus < last_status ))
host->hstatus = stats.save_hstatus;
else
printmsg(0,"HostStatus: Invalid status (%d) ignored for \"%s\"",
stats.save_hstatus,host->hostname ) ;

memcpy( host->hstats, &stats , sizeof stats );
}
else {
printmsg(0,"HostStatus: Bad record length %d (wanted %d), "
"purging status for host %s",
len2, (int) (sizeof *(host->hstats)), buf);
fread( buf , len2, 1, stream);
} /* else */
} /* while */

if (ferror( stream ))
{
printerr( fname );
clearerr( stream );
}

fclose( stream );

hstatus_age = age; /* Remember the age of the file */

} /* HostStatus */


  3 Responses to “Category : Linux Files
Archive   : UPC12BS1.ZIP
Filename : HOSTATUS.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/