-int serv_sock;
-
-u_long inet_addr();
-
-void timeout() {
- printf("\rConnection timed out.\n");
- logoff(3);
- }
-
-int connectsock(host,service,protocol)
-char *host;
-char *service;
-char *protocol; {
- struct hostent *phe;
- struct servent *pse;
- struct protoent *ppe;
- struct sockaddr_in sin;
- int s,type;
-
- bzero((char *)&sin,sizeof(sin));
- sin.sin_family = AF_INET;
-
- pse=getservbyname(service,protocol);
- if (pse) {
- sin.sin_port = pse->s_port;
- }
- else if ((sin.sin_port = htons((u_short)atoi(service))) == 0) {
- fprintf(stderr,"Can't get %s service entry: %s\n",
- service,strerror(errno));
- logoff(3);
- }
-
- phe=gethostbyname(host);
- if (phe) {
- memcpy(phe->h_addr,(char *)&sin.sin_addr,phe->h_length);
- }
- else if ((sin.sin_addr.s_addr = inet_addr(host))==INADDR_NONE) {
- fprintf(stderr,"Can't get %s host entry: %s\n",
- host,strerror(errno));
- logoff(3);
- }
-
- if ((ppe=getprotobyname(protocol))==0) {
- fprintf(stderr,"Can't get %s protocol entry: %s\n",
- protocol,strerror(errno));
- logoff(3);
- }
-
- if (!strcmp(protocol,"udp")) {
- type = SOCK_DGRAM;
- }
- else {
- type = SOCK_STREAM;
- }
-
- s = socket(PF_INET,type,ppe->p_proto);
- if (s<0) {
- fprintf(stderr,"Can't create socket: %s\n",strerror(errno));
- logoff(3);
- }
-
-
- signal(SIGALRM,timeout);
- alarm(30);
-
- if (connect(s,(struct sockaddr *)&sin,sizeof(sin))<0) {
- fprintf(stderr,"can't connect to %s.%s: %s\n",
- host,service,strerror(errno));
- logoff(3);
- }
-
- alarm(0);
- signal(SIGALRM,SIG_IGN);
-
- return(s);
- }
-
-/*
- * convert service and host entries into a six-byte numeric in the format
- * expected by a SOCKS v4 server
- */
-void numericize(buf,host,service,protocol)
-unsigned char buf[];
-char *host;
-char *service;
-char *protocol; {
- struct hostent *phe;
- struct servent *pse;
- struct sockaddr_in sin;
-
- bzero((char *)&sin,sizeof(sin));
- sin.sin_family = AF_INET;
-
- pse=getservbyname(service,protocol);
- if (pse) {
- sin.sin_port = pse->s_port;
- }
- else if ((sin.sin_port = htons((u_short)atoi(service))) == 0) {
- fprintf(stderr,"Can't get %s service entry: %s\n",
- service,strerror(errno));
- logoff(3);
- }
-
- buf[1] = (((sin.sin_port) & 0xFF00) >> 8);
- buf[0] = ((sin.sin_port) & 0x00FF);
-
- phe=gethostbyname(host);
- if (phe) {
- bcopy(phe->h_addr,(char *)&sin.sin_addr,phe->h_length);
- }
- else if ((sin.sin_addr.s_addr = inet_addr(host))==INADDR_NONE) {
- fprintf(stderr,"Can't get %s host entry: %s\n",
- host,strerror(errno));
- logoff(3);
- }
- buf[5] = ((sin.sin_addr.s_addr) & 0xFF000000) >> 24;
- buf[4] = ((sin.sin_addr.s_addr) & 0x00FF0000) >> 16;
- buf[3] = ((sin.sin_addr.s_addr) & 0x0000FF00) >> 8;
- buf[2] = ((sin.sin_addr.s_addr) & 0x000000FF) ;
- }
-
-/*
- * input binary data from socket
- */
-void serv_read(buf,bytes)
-char buf[];
-int bytes; {
- int len,rlen;
-
- len = 0;
- while(len<bytes) {
- rlen = read(serv_sock,&buf[len],bytes-len);
- if (rlen<1) {
- printf("\rNetwork error - connection terminated.\n");
- printf("%s\n", strerror(errno));
- logoff(3);
- }
- len = len + rlen;
- }
- }
-
-