home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR3 / KA9Q212.ZIP / FINGER.C < prev    next >
C/C++ Source or Header  |  1993-03-07  |  2KB  |  83 lines

  1. /* Internet finger client
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4.  
  5. /****************************************************************************
  6. *    $Id: finger.c 1.2 92/09/14 18:02:08 ROOT_DOS Exp Locker: ROOT_DOS $
  7. *    13 Sep 92    1.2        CMS        Make "finger @siteX@siteY" work.            *
  8. ****************************************************************************/
  9.  
  10.  
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include "global.h"
  14. #include "mbuf.h"
  15. #include "socket.h"
  16. #include "session.h"
  17. #include "proc.h"
  18. #include "netuser.h"
  19. #include "commands.h"
  20. #include "tty.h"
  21.  
  22. int
  23. dofinger(argc,argv,p)
  24. int argc;
  25. char *argv[];
  26. void *p;
  27. {
  28.     struct sockaddr_in sock;
  29.     char *cp;
  30.     int s,i;
  31.     struct mbuf *bp;
  32.     struct session *sp;
  33.  
  34.     /* Allocate a session descriptor */
  35.     if((sp = newsession(argv[1],FINGER)) == NULLSESSION){
  36.         tprintf("Too many sessions\n");
  37.         keywait(NULLCHAR,1);
  38.         return 1;
  39.     }
  40.     sp->ttystate.echo = sp->ttystate.edit = 0;
  41.     sp->flowmode = 1;
  42.     sock.sin_family = AF_INET;
  43.     sock.sin_port = IPPORT_FINGER;
  44.     for(i=1;i<argc;i++){
  45.         cp = strrchr(argv[i],'@');
  46.         if(cp == NULLCHAR){
  47.             tprintf("%s: local names not supported\n",argv[i]);
  48.             continue;
  49.         }
  50.         *cp++ = '\0';
  51.         tprintf("%s@%s -- ",argv[i],cp);
  52.         tprintf("Resolving %s... ",cp);
  53.         if((sock.sin_addr.s_addr = resolve(cp)) == 0){
  54.             tprintf("Host %s unknown\n",cp);
  55.             continue;
  56.         }
  57.         tprintf("trying %s",psocket((struct sockaddr *)&sock));
  58.         if((sp->s = s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  59.             tprintf("Can't create socket\n");
  60.             break;
  61.         }
  62.         sockmode(s,SOCK_ASCII);
  63.         if(connect(s,(char *)&sock,sizeof(sock)) == -1){
  64.             cp = sockerr(s);
  65.             tprintf(" -- Connect failed: %s\n",cp != NULLCHAR ? cp : "");
  66.             close_s(s);
  67.             sp->s = -1;
  68.             continue;
  69.         }
  70.         tprintf("\n");
  71.         usprintf(s,"%s\n",argv[i]);
  72.         usflush(Curproc->output);
  73.         while(recv_mbuf(s,&bp,0,NULLCHAR,(int *)0) > 0){
  74.             send_mbuf(Curproc->output,bp,0,NULLCHAR,0);
  75.         }
  76.         close_s(s);
  77.         sp->s = -1;
  78.     }
  79.     keywait(NULLCHAR,1);
  80.     freesession(sp);
  81.     return 0;
  82. }
  83.