home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 024 / psi110g.zip / FINGER.C < prev    next >
C/C++ Source or Header  |  1994-04-17  |  2KB  |  80 lines

  1. /* Internet finger client
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #include "global.h"
  5. #include "mbuf.h"
  6. #include "socket.h"
  7. #include "session.h"
  8. #include "proc.h"
  9. #include "netuser.h"
  10. #include "commands.h"
  11. #include "tty.h"
  12.   
  13. int
  14. dofinger(argc,argv,p)
  15. int argc;
  16. char *argv[];
  17. void *p;
  18. {
  19.     struct sockaddr_in sock;
  20.     char *cp;
  21.     int s,i;
  22.     struct mbuf *bp;
  23.     struct session *sp;
  24.   
  25.     /*Make sure this comes from console - WG7J*/
  26.     if(Curproc->input != Command->input)
  27.         return 0;
  28.   
  29.     /* Allocate a session descriptor */
  30.     if((sp = newsession(argv[1],FINGER,0)) == NULLSESSION){
  31.         tputs(TooManySessions);
  32.         keywait(NULLCHAR,1);
  33.         return 1;
  34.     }
  35.     sp->ttystate.echo = sp->ttystate.edit = 0;
  36.     sp->flowmode = 1;
  37.     sock.sin_family = AF_INET;
  38.     sock.sin_port = IPPORT_FINGER;
  39.     for(i=1;i<argc;i++){
  40.         cp = strchr(argv[i],'@');
  41.         if(cp == NULLCHAR){
  42.             tprintf("%s@localhost -- ",argv[i]);
  43.             sock.sin_addr.s_addr = 0x7f000001UL;  /* 127.0.0.1 */
  44.         } else {
  45.             *cp++ = '\0';
  46.             tprintf("%s@%s -- ",argv[i],cp);
  47.             tprintf("Resolving %s... ",cp);
  48.             if((sock.sin_addr.s_addr = resolve(cp)) == 0){
  49.                 tprintf("Host %s unknown\n",cp);
  50.                 continue;
  51.             }
  52.         }
  53.         tprintf("trying %s",psocket((struct sockaddr *)&sock));
  54.         if((sp->s = s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  55.             tputs(Nosock);
  56.             break;
  57.         }
  58.         sockmode(s,SOCK_ASCII);
  59.         if(connect(s,(char *)&sock,sizeof(sock)) == -1){
  60.             cp = sockerr(s);
  61.             tprintf(" -- Connect failed: %s\n",cp != NULLCHAR ? cp : "");
  62.             close_s(s);
  63.             sp->s = -1;
  64.             continue;
  65.         }
  66.         tputc('\n');
  67.         usputs(s,argv[i]);
  68.         usputc(s,'\n');
  69.         usflush(Curproc->output);
  70.         while(recv_mbuf(s,&bp,0,NULLCHAR,(int *)0) > 0){
  71.             send_mbuf(Curproc->output,bp,0,NULLCHAR,0);
  72.         }
  73.         close_s(s);
  74.         sp->s = -1;
  75.     }
  76.     keywait(NULLCHAR,1);
  77.     freesession(sp);
  78.     return 0;
  79. }
  80.