Mercurial > pidgin
comparison src/proxy.c @ 670:9e51c1a4abba
[gaim-migrate @ 680]
socks4/5 proxy works
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 11 Aug 2000 22:55:32 +0000 |
| parents | 5cb19972df52 |
| children | b1b77b39a1fa |
comparison
equal
deleted
inserted
replaced
| 669:e871081839d0 | 670:9e51c1a4abba |
|---|---|
| 217 } | 217 } |
| 218 return -1; | 218 return -1; |
| 219 } | 219 } |
| 220 break; | 220 break; |
| 221 case PROXY_SOCKS5: | 221 case PROXY_SOCKS5: |
| 222 return -1; | 222 { |
| 223 struct sockaddr_in sin; | |
| 224 struct hostent *hostinfo; | |
| 225 char buff[11]; | |
| 226 | |
| 227 sethostent(0); | |
| 228 hostinfo = gethostbyname(proxy_host); | |
| 229 if (!hostinfo) return -1; | |
| 230 | |
| 231 sin.sin_addr.s_addr = atol(hostinfo->h_addr); | |
| 232 sin.sin_family = AF_INET; | |
| 233 sin.sin_port = htons(proxy_port); | |
| 234 | |
| 235 if (connect(sockfd, (struct sockaddr *)&sin, sizeof(sin)) < 0) | |
| 236 return -1; | |
| 237 | |
| 238 buff[0] = 5; | |
| 239 buff[1] = 1; | |
| 240 buff[2] = 0; | |
| 241 | |
| 242 write(sockfd, buff, 3); | |
| 243 read(sockfd, buff, 2); | |
| 244 | |
| 245 if (buff[1]) return -1; | |
| 246 | |
| 247 hostinfo = gethostbyname(proxy_realhost); | |
| 248 if (!hostinfo) return -1; | |
| 249 | |
| 250 buff[0] = 5; | |
| 251 buff[1] = 1; | |
| 252 buff[2] = 0; | |
| 253 buff[3] = 1; | |
| 254 buff[4] = (unsigned char) (hostinfo->h_addr_list[0])[0]; | |
| 255 buff[5] = (unsigned char) (hostinfo->h_addr_list[0])[1]; | |
| 256 buff[6] = (unsigned char) (hostinfo->h_addr_list[0])[2]; | |
| 257 buff[7] = (unsigned char) (hostinfo->h_addr_list[0])[3]; | |
| 258 memcpy(buff+8, &((struct sockaddr_in *)serv_addr)->sin_port, 2); | |
| 259 | |
| 260 write(sockfd, buff, 10); | |
| 261 read(sockfd, buff, 10); | |
| 262 | |
| 263 if (buff[1]) return -1; | |
| 264 | |
| 265 return 0; | |
| 266 } | |
| 223 break; | 267 break; |
| 224 default: | 268 default: |
| 225 fprintf(stderr,"Unknown proxy type : %d.\n",proxy_type); | 269 fprintf(stderr,"Unknown proxy type : %d.\n",proxy_type); |
| 226 break; | 270 break; |
| 227 } | 271 } |
