# HG changeset patch # User Eric Warmenhoven # Date 966034532 0 # Node ID 9e51c1a4abbacc305ca7b10aef7c8ab63dd756a3 # Parent e871081839d05283676e2a7b05993ad2ed1f6bab [gaim-migrate @ 680] socks4/5 proxy works committer: Tailor Script diff -r e871081839d0 -r 9e51c1a4abba ChangeLog --- a/ChangeLog Fri Aug 11 05:50:26 2000 +0000 +++ b/ChangeLog Fri Aug 11 22:55:32 2000 +0000 @@ -13,6 +13,7 @@ * Redesigned preferences dialog * Redesigned conversation dialog * Removed the Lag-O-Meter + * Socks 4/5 Proxy works version 0.9.20 (07/14/2000): * More plugin events, more plugin features diff -r e871081839d0 -r 9e51c1a4abba src/proxy.c --- a/src/proxy.c Fri Aug 11 05:50:26 2000 +0000 +++ b/src/proxy.c Fri Aug 11 22:55:32 2000 +0000 @@ -219,7 +219,51 @@ } break; case PROXY_SOCKS5: - return -1; + { + struct sockaddr_in sin; + struct hostent *hostinfo; + char buff[11]; + + sethostent(0); + hostinfo = gethostbyname(proxy_host); + if (!hostinfo) return -1; + + sin.sin_addr.s_addr = atol(hostinfo->h_addr); + sin.sin_family = AF_INET; + sin.sin_port = htons(proxy_port); + + if (connect(sockfd, (struct sockaddr *)&sin, sizeof(sin)) < 0) + return -1; + + buff[0] = 5; + buff[1] = 1; + buff[2] = 0; + + write(sockfd, buff, 3); + read(sockfd, buff, 2); + + if (buff[1]) return -1; + + hostinfo = gethostbyname(proxy_realhost); + if (!hostinfo) return -1; + + buff[0] = 5; + buff[1] = 1; + buff[2] = 0; + buff[3] = 1; + buff[4] = (unsigned char) (hostinfo->h_addr_list[0])[0]; + buff[5] = (unsigned char) (hostinfo->h_addr_list[0])[1]; + buff[6] = (unsigned char) (hostinfo->h_addr_list[0])[2]; + buff[7] = (unsigned char) (hostinfo->h_addr_list[0])[3]; + memcpy(buff+8, &((struct sockaddr_in *)serv_addr)->sin_port, 2); + + write(sockfd, buff, 10); + read(sockfd, buff, 10); + + if (buff[1]) return -1; + + return 0; + } break; default: fprintf(stderr,"Unknown proxy type : %d.\n",proxy_type);