home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.wwiv.com
/
ftp.wwiv.com.zip
/
ftp.wwiv.com
/
pub
/
INTERNET
/
UPC2S1.ZIP
/
UUSUB.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-03
|
11KB
|
326 lines
/*--------------------------------------------------------------------*/
/* u u s u b . c */
/* */
/* Report summary of UUPC activity */
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/* Copyright (c) 1990-1993 by Kendra Electronic Wonderworks */
/* */
/* All rights reserved except those explicitly granted by the */
/* UUPC/extended license agreement. */
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/* RCS Information */
/*--------------------------------------------------------------------*/
/*
* $Id: uusub.c 1.6 1993/10/03 20:43:08 ahd Exp $
*
* $Log: uusub.c $
* Revision 1.6 1993/10/03 20:43:08 ahd
* Normalize comments to C++ double slash
*
* Revision 1.5 1993/07/06 11:02:06 ahd
* Load host status information after parsing args
*
* Revision 1.4 1993/05/09 12:44:25 ahd
* Reset collection time start before writing it out to disk
*
* Revision 1.3 1993/04/11 00:35:46 ahd
* Global edits for year, TEXT, etc.
*
* Revision 1.2 1992/11/19 03:03:24 ahd
* drop rcsid
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "lib.h"
#include "hostable.h"
#include "dater.h"
#include "hostrset.h"
#include "hostatus.h"
#include "getopt.h"
#include "security.h"
#include "timestmp.h"
/*--------------------------------------------------------------------*/
/* Local macros */
/*--------------------------------------------------------------------*/
#define line( a, b, c, d, e, f, g, h, i, j ) \
printf("%-8.8s %-6.6s %-11.11s %-11.11s %5.5s %5.5s %5.5s %5.5s %5.5s %5.5s\n" ,\
a, b, c, d, e, f, g, h, i ,j )
/*--------------------------------------------------------------------*/
/* Internal prototypes */
/*--------------------------------------------------------------------*/
static void showstats( const char *name );
static void showhost( struct HostTable *host);
static char *when( time_t t );
static char *status( hostatus current_status );
static char *format( long l);
/*--------------------------------------------------------------------*/
/* Global variables */
/*--------------------------------------------------------------------*/
static char output[10 * 12];
static size_t column ;
currentfile();
/*--------------------------------------------------------------------*/
/* u s a g e */
/* */
/* Report flags used by program */
/*--------------------------------------------------------------------*/
static void usage(void)
{
fprintf(stderr, "Usage: uusub\t[-c] [-s <nodename>] [-x debug]\n");
}
/*--------------------------------------------------------------------*/
/* main program */
/*--------------------------------------------------------------------*/
#ifdef __TURBOC__
#pragma argsused
#endif
void main( int argc , char **argv)
{
int option;
boolean clear_stats = FALSE;
char *name = nil(char);
/*--------------------------------------------------------------------*/
/* Announce ourselves to a waiting world */
/*--------------------------------------------------------------------*/
debuglevel = 0;
#if defined(__CORE__)
copywrong = strdup(copyright);
checkref(copywrong);
#endif
banner( argv );
/*--------------------------------------------------------------------*/
/* Process option flags */
/*--------------------------------------------------------------------*/
while ((option = getopt(argc, argv, "cs:x:")) != EOF) {
switch(option) {
case 'c': // clear stats
clear_stats = TRUE;
break;
case 's': // only named host
name = optarg;
break;
case 'x':
debuglevel = atoi(optarg);
break;
default:
usage();
exit(1);
break;
}
}
if (optind != argc)
{
puts("Extra parameter(s) at end.");
exit(4);
}
/*--------------------------------------------------------------------*/
/* Load system configuration and then the UUPC host stats */
/*--------------------------------------------------------------------*/
if (!configure( B_UUSTAT ))
panic();
HostStatus();
/*--------------------------------------------------------------------*/
/* Now display or clear the loaded information */
/*--------------------------------------------------------------------*/
if ( (name != NULL) && (checkreal( name ) == BADHOST) )
printf("Unknown host \"%s\"\n", name );
else if (clear_stats)
{
if ( name == NULL )
time( &start_stats );
HostReset((const char *)name);
}
else
showstats((const char *)name);
} /* main */
/*--------------------------------------------------------------------*/
/* s h o w s t a t s */
/* */
/* Display information on all hosts */
/*--------------------------------------------------------------------*/
static void showstats( const char *name )
{
struct HostTable *host;
boolean firsthost = TRUE;
static const char *dashes = "-----------";
printf("Host information collected since %s\n",ctime( &start_stats ));
line("Host","Host ", "Date Last", "Last Conn","Secs" , "Bytes", "Bytes",
"Files", "Files", "Total");
line("Name","Status ","Connected ","Attempt", "Conn", "Sent", "Recvd",
"Sent", "Recvd", "Errs");
line(dashes,dashes,dashes,dashes,dashes,dashes,dashes,dashes,
dashes,dashes);
if (name != NULL)
showhost ( checkreal(name) );
else
while ((host = nexthost( firsthost )) != BADHOST)
{
firsthost = FALSE;
showhost ( host );
} /* while */
} /* showstats */
/*--------------------------------------------------------------------*/
/* s h o w h o s t */
/* */
/* Display information on a single host */
/*--------------------------------------------------------------------*/
static void showhost( struct HostTable *host)
{
column = 0;
checkref( host->hstats );
line( host->hostname,
status( host->hstatus ),
when( host->hstats->lconnect ),
when( host->hstats->ltime ),
format( host->hstats->connect ),
format( host->hstats->bsent ),
format( host->hstats->breceived ),
format( host->hstats->fsent ),
format( host->hstats->freceived ),
format( host->hstats->errors ));
} /* showhost */
/*--------------------------------------------------------------------*/
/* Subroutines */
/*--------------------------------------------------------------------*/
static char *when( time_t t )
{
column += 13;
return dater( t, &output[column]);
} /* when */
static char *format( long l)
{
if (l == 0)
return "";
column += 12;
if ( l <= 99999)
sprintf( &output[ column ], "%ld", l);
else if ( (l/1000) <= 9999)
sprintf( &output[ column ], "%ldK", l / 1000);
else
sprintf( &output[ column ], "%ldM", l / 1000000);
return &output[column];
} /* format */
static char *status( hostatus current_status )
{
switch ( current_status )
{
default:
return "??????";
case phantom: // Entry not fully initialized
return "noinit";
case localhost: // This entry is for ourselves
return "local";
case gatewayed: // This entry is delivered to via
// an external program on local sys
return "gatway";
case nocall: // real host: never called
return "NEVER";
case autodial: // Calling now
return "DIALNG";
case nodevice: // Device open failed
return "NODEV";
case startup_failed:
return "NSTART";
case inprogress: // Call now active
return "INPROG";
case invalid_device: // Bad systems file entry
return "INVDEV";
case callback_req: // System must call us back
return "CALLBK";
case dial_script_failed:
// Hardcoded auto-dial failed
return "NDIALS";
case dial_failed: // Hardcoded auto-dial failed
return "NODIAL";
case script_failed: // script in L.SYS failed
return "NSCRPT";
case max_retry: // Have given up calling this sys
return "MAXTRY";
case too_soon: // In retry mode: too soon to call
return "TOSOON";
case succeeded: // self-explanatory
case called: // self-explanatory
return "SUCESS";
case wrong_host: // Call out failed: wrong system
return "WRGHST";
case unknown_host: // Call in cailed: unknown system
return "UNKNWN";
case wrong_time: // Unable to call because of time
return "WRGTIM";
case call_failed: // Connection dropped in mid-call
return "FAILED";
} /* switch */
} /* status */