home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / network / src_1218.zip / SOCKCMD.C < prev    next >
C/C++ Source or Header  |  1991-01-27  |  2KB  |  103 lines

  1. /* Socket status display code
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #include <stdio.h>
  5. #include "global.h"
  6. #include "mbuf.h"
  7. #include "proc.h"
  8. #include "lzw.h"
  9. #include "usock.h"
  10. #include "socket.h"
  11. #include "ax25.h"
  12. #include "netrom.h"
  13. #include "tcp.h"
  14. #include "udp.h"
  15. #include "commands.h"
  16. #include "config.h"
  17.  
  18. /* Socket status display command */
  19. int
  20. dosock(argc,argv,p)
  21. int argc;
  22. char *argv[];
  23. void *p;
  24. {
  25.     register struct usock *up;
  26.     int s,i;
  27.     struct sockaddr fsock;
  28.     char *cp;
  29.  
  30.     if(argc < 2){
  31.         tprintf("S#  Type    PCB      Remote socket         Owner\n");
  32.         for(s=SOCKBASE;s<Nusock+SOCKBASE;s++){
  33.             up = itop(s);
  34.             if(up == NULLUSOCK)
  35.                 continue;
  36.  
  37.             i = sizeof(fsock);
  38.             if(getpeername(s,(char *)&fsock,&i) == 0 && i != 0)
  39.                 cp = psocket(&fsock);
  40.             else
  41.                 cp = "";
  42.  
  43.             tprintf("%3d %-8s%-8lx %-22s%-8lx %-10s\n",
  44.              s,Socktypes[up->type],ptol(up->cb.p),cp,
  45.              ptol(up->owner),up->owner->name);
  46.         }
  47.         return 0;
  48.     }
  49.     s = atoi(argv[1]);
  50.     if(s < SOCKBASE || s >= Nusock+SOCKBASE){
  51.         tprintf("Number out of range\n");
  52.         return 1;
  53.     }
  54.     up = itop(s);
  55.     if(up == NULLUSOCK){
  56.         tprintf("Socket not in use\n");
  57.         return 0;
  58.     }
  59.     tprintf("%s %lx %s",Socktypes[up->type],ptol(up->cb.p),
  60.      up->flag == SOCK_ASCII ? "ascii" : "binary");
  61.     if(up->eol[0] != '\0'){
  62.         tprintf(" eol seq:");
  63.         for(i=0;up->eol[i] != '\0' && i<sizeof(up->eol);i++)
  64.             tprintf(" %02x",up->eol[i]);
  65.     }
  66.     tprintf("\n");
  67.     if(up->cb.p == NULL)
  68.         return 0;
  69.     switch(up->type){
  70.     case TYPE_RAW:
  71.     case TYPE_LOCAL_DGRAM:
  72.         tprintf("Inqlen: %d packets\n",socklen(s,0));
  73.         tprintf("Outqlen: %d packets\n",socklen(s,1));
  74.         break;
  75.     case TYPE_LOCAL_STREAM:
  76.         tprintf("Inqlen: %d bytes\n",socklen(s,0));
  77.         tprintf("Outqlen: %d bytes\n",socklen(s,1));
  78.         break;
  79.     case TYPE_TCP:
  80.         st_tcp(up->cb.tcb);
  81.         break;
  82.     case TYPE_UDP:
  83.         st_udp(up->cb.udp,0);
  84.         break;
  85. #ifdef    AX25
  86.     case TYPE_AX25I:
  87.         st_ax25(up->cb.ax25);
  88.         break;
  89. #endif
  90. #ifdef    NETROM
  91.     case TYPE_NETROML4:
  92.         donrdump(up->cb.nr4);
  93.         break;
  94. #endif
  95.     }
  96.     if(up->zout != NULLLZW)
  97.         tprintf("Compressed %ld bytes.\n",up->zout->cnt);
  98.     if(up->zin != NULLLZW)
  99.         tprintf("Decompressed %ld bytes.\n",up->zin->cnt);
  100.     return 0;    
  101. }
  102.  
  103.