home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / UUPC11XS.ZIP / UUCP / UUSUB.C < prev    next >
C/C++ Source or Header  |  1992-11-18  |  10KB  |  301 lines

  1. /*--------------------------------------------------------------------*/
  2. /*    u u s u b . c                                                   */
  3. /*                                                                    */
  4. /*    Report summary of UUPC activity                                 */
  5. /*                                                                    */
  6. /*    Copyright (C) 1991-1992, Andrew H. Derbyshire                   */
  7. /*--------------------------------------------------------------------*/
  8.  
  9. /*
  10.  *    $Id: UUSUB.C 1.2 1992/11/19 03:03:24 ahd Exp $
  11.  *
  12.  *    $Log: UUSUB.C $
  13.  * Revision 1.2  1992/11/19  03:03:24  ahd
  14.  * drop rcsid
  15.  *
  16.  */
  17.  
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #include <time.h>
  23.  
  24. #include "lib.h"
  25. #include "hostable.h"
  26. #include "dater.h"
  27. #include "hostrset.h"
  28. #include "hostatus.h"
  29. #include "getopt.h"
  30. #include "security.h"
  31. #include "timestmp.h"
  32.  
  33. /*--------------------------------------------------------------------*/
  34. /*                            Local macros                            */
  35. /*--------------------------------------------------------------------*/
  36.  
  37. #define line( a, b, c, d, e, f, g, h, i, j ) \
  38.       printf("%-8.8s %-6.6s %-11.11s %-11.11s %5.5s %5.5s %5.5s %5.5s %5.5s %5.5s\n" ,\
  39.       a, b, c, d, e, f, g, h, i ,j )
  40.  
  41. /*--------------------------------------------------------------------*/
  42. /*                        Internal prototypes                         */
  43. /*--------------------------------------------------------------------*/
  44.  
  45. static void showstats( const char *name );
  46. static void showhost( struct HostTable *host);
  47. static char *when( time_t t );
  48. static char *status( hostatus current_status );
  49. static char *format( long l);
  50.  
  51. /*--------------------------------------------------------------------*/
  52. /*                          Global variables                          */
  53. /*--------------------------------------------------------------------*/
  54.  
  55. static char output[10 * 12];
  56. static size_t column ;
  57.  
  58. currentfile();
  59.  
  60. /*--------------------------------------------------------------------*/
  61. /*    u s a g e                                                       */
  62. /*                                                                    */
  63. /*    Report flags used by program                                    */
  64. /*--------------------------------------------------------------------*/
  65.  
  66. static         void    usage(void)
  67. {
  68.       fprintf(stderr, "Usage: uusub\t[-c] [-s <nodename>] [-x debug]\n");
  69. }
  70.  
  71. /*--------------------------------------------------------------------*/
  72. /*                            main program                            */
  73. /*--------------------------------------------------------------------*/
  74.  
  75. #ifdef __TURBOC__
  76. #pragma argsused
  77. #endif
  78.  
  79. void main( int argc , char **argv)
  80. {
  81.  
  82.    int         option;
  83.    boolean clear_stats = FALSE;
  84.    char *name = nil(char);
  85.  
  86. /*--------------------------------------------------------------------*/
  87. /*               Announce ourselves to a waiting world                */
  88. /*--------------------------------------------------------------------*/
  89.  
  90.    debuglevel = 0;
  91.  
  92. #if defined(__CORE__)
  93.    copywrong = strdup(copyright);
  94.    checkref(copywrong);
  95. #endif
  96.    banner( argv );
  97.  
  98. /*--------------------------------------------------------------------*/
  99. /*       Load system configuration and then the UUPC host stats       */
  100. /*--------------------------------------------------------------------*/
  101.  
  102.    if (!configure( B_UUSTAT ))
  103.       panic();
  104.  
  105.    HostStatus();
  106.  
  107. /*--------------------------------------------------------------------*/
  108. /*                        Process option flags                        */
  109. /*--------------------------------------------------------------------*/
  110.  
  111.    while ((option = getopt(argc, argv, "cs:x:")) != EOF)  {
  112.       switch(option)  {
  113.          case 'c':               /* clear stats */
  114.             clear_stats = TRUE;
  115.             break;
  116.          case 's':               /* only named host */
  117.             name = optarg;
  118.             break;
  119.          case 'x':
  120.             debuglevel = atoi(optarg);
  121.             break;
  122.          default:
  123.             usage();
  124.             exit(1);
  125.             break;
  126.       }
  127.    }
  128.  
  129.    if (optind != argc)
  130.    {
  131.       puts("Extra parameter(s) at end.");
  132.       exit(4);
  133.    }
  134.  
  135.    if ( (name != NULL) && (checkreal( name ) == BADHOST) )
  136.        printf("Unknown host \"%s\"\n", name );
  137.    else if (clear_stats)
  138.    {
  139.        HostReset((const char *)name);
  140.        if ( name == NULL )
  141.          time( &start_stats );
  142.    }
  143.    else
  144.        showstats((const char *)name);
  145.  
  146. } /* main */
  147.  
  148.  
  149. /*--------------------------------------------------------------------*/
  150. /*    s h o w s t a t s                                               */
  151. /*                                                                    */
  152. /*    Display information on all hosts                                */
  153. /*--------------------------------------------------------------------*/
  154.  
  155. static void showstats( const char *name )
  156. {
  157.    struct HostTable *host;
  158.    boolean firsthost = TRUE;
  159.    static const char *dashes = "-----------";
  160.  
  161.    printf("Host information collected since %s\n",ctime( &start_stats ));
  162.  
  163.    line("Host","Host ",  "Date Last",  "Last Conn","Secs" , "Bytes", "Bytes",
  164.          "Files", "Files", "Total");
  165.    line("Name","Status ","Connected ","Attempt", "Conn",  "Sent",  "Recvd",
  166.         "Sent",  "Recvd", "Errs");
  167.    line(dashes,dashes,dashes,dashes,dashes,dashes,dashes,dashes,
  168.          dashes,dashes);
  169.  
  170.    if (name != NULL)
  171.       showhost ( checkreal(name) );
  172.    else
  173.       while  ((host = nexthost( firsthost )) != BADHOST)
  174.       {
  175.          firsthost = FALSE;
  176.          showhost ( host );
  177.       } /* while */
  178.  
  179. } /* showstats */
  180.  
  181. /*--------------------------------------------------------------------*/
  182. /*    s h o w h o s t                                                 */
  183. /*                                                                    */
  184. /*    Display information on a single host                            */
  185. /*--------------------------------------------------------------------*/
  186.  
  187. static void showhost( struct HostTable *host)
  188. {
  189.    column = 0;
  190.    checkref( host->hstats );
  191.    line( host->hostname,
  192.       status( host->hstatus ),
  193.       when( host->hstats->lconnect ),
  194.       when( host->hstats->ltime ),
  195.       format( host->hstats->connect ),
  196.       format( host->hstats->bsent ),
  197.       format( host->hstats->breceived ),
  198.       format( host->hstats->fsent ),
  199.       format( host->hstats->freceived ),
  200.       format( host->hstats->errors  ));
  201. } /* showhost */
  202.  
  203. /*--------------------------------------------------------------------*/
  204. /*                            Subroutines                             */
  205. /*--------------------------------------------------------------------*/
  206.  
  207. static char *when( time_t t )
  208. {
  209.    column += 13;
  210.    return dater( t, &output[column]);
  211. } /* when */
  212.  
  213. static char *format( long l)
  214. {
  215.    if (l == 0)
  216.       return "";
  217.  
  218.    column += 12;
  219.    if ( l <= 99999)
  220.       sprintf( &output[ column ], "%ld", l);
  221.    else if ( (l/1000) <= 9999)
  222.       sprintf( &output[ column ], "%ldK", l / 1000);
  223.    else
  224.       sprintf( &output[ column ], "%ldM", l / 1000000);
  225.    return &output[column];
  226.  
  227. } /* format */
  228.  
  229. static char *status( hostatus current_status )
  230. {
  231.    switch ( current_status )
  232.    {
  233.       default:
  234.        return "??????";
  235.  
  236.       case  phantom:          /* Entry not fully initialized      */
  237.             return "noinit";
  238.  
  239.       case  localhost:        /* This entry is for ourselves      */
  240.             return "local";
  241.  
  242.       case  gatewayed:        /* This entry is delivered to via   */
  243.                               /* an external program on local sys */
  244.             return "gatway";
  245.  
  246.       case  nocall:           /* real host: never called          */
  247.          return "NEVER";
  248.  
  249.       case autodial:          /* Calling now                      */
  250.          return "DIALNG";
  251.  
  252.       case nodevice:          /* Device open failed               */
  253.          return "NODEV";
  254.  
  255.       case startup_failed:
  256.          return "NSTART";
  257.  
  258.       case  inprogress:       /* Call now active                  */
  259.          return "INPROG";
  260.  
  261.       case invalid_device:    /* Bad systems file entry           */
  262.          return "INVDEV";
  263.  
  264.       case  callback_req:     /* System must call us back         */
  265.           return "CALLBK";
  266.  
  267.       case  dial_script_failed:
  268.                               /* Hardcoded auto-dial failed       */
  269.          return "NDIALS";
  270.  
  271.       case  dial_failed:      /* Hardcoded auto-dial failed       */
  272.          return "NODIAL";
  273.  
  274.       case  script_failed:    /* script in L.SYS failed           */
  275.          return "NSCRPT";
  276.  
  277.       case  max_retry:        /* Have given up calling this sys   */
  278.          return "MAXTRY";
  279.  
  280.       case  too_soon:         /* In retry mode: too soon to call  */
  281.          return "TOSOON";
  282.  
  283.       case  succeeded:        /* self-explanatory                 */
  284.       case  called:           /* self-explanatory                 */
  285.          return "SUCESS";
  286.  
  287.       case  wrong_host:       /* Call out failed: wrong system    */
  288.          return "WRGHST";
  289.  
  290.       case  unknown_host:     /* Call in cailed: unknown system   */
  291.          return "UNKNWN";
  292.  
  293.       case  wrong_time:       /* Unable to call because of time   */
  294.          return "WRGTIM";
  295.  
  296.       case  call_failed:      /* Connection dropped in mid-call   */
  297.          return "FAILED";
  298.    } /* switch */
  299.  
  300. } /* status */
  301.