/* Internet finger client * Copyright 1991 Phil Karn, KA9Q */ #include #include #include "global.h" #include "mbuf.h" #include "socket.h" #include "session.h" #include "proc.h" #include "netuser.h" #include "commands.h" #include "tty.h" int dofinger(argc,argv,p) int argc; char *argv[]; void *p; { struct sockaddr_in sock; char *cp; int s,i; struct mbuf *bp; struct session *sp; /* Allocate a session descriptor */ if((sp = newsession(argv[1],FINGER,1)) == NULLSESSION){ tprintf("Too many sessions\n"); keywait(NULLCHAR,1); return 1; } sp->ttystate.echo = sp->ttystate.edit = 0; sp->flowmode = 1; sock.sin_family = AF_INET; sock.sin_port = IPPORT_FINGER; for(i=1;is = s = socket(AF_INET,SOCK_STREAM,0)) == -1){ tprintf("Can't create socket\n"); break; } sockmode(s,SOCK_ASCII); if(connect(s,(char *)&sock,sizeof(sock)) == -1){ cp = sockerr(s); tprintf(" -- Connect failed: %s\n",cp != NULLCHAR ? cp : ""); close_s(s); sp->s = -1; continue; } tprintf("\n"); usprintf(s,"%s\n",argv[i]); usflush(Curproc->output); while(recv_mbuf(s,&bp,0,NULLCHAR,(int *)0) > 0){ send_mbuf(Curproc->output,bp,0,NULLCHAR,0); } close_s(s); sp->s = -1; } keywait(NULLCHAR,1); freesession(sp); return 0; }