Mercurial > pidgin
annotate src/proxy.c @ 780:c714def9cebb
[gaim-migrate @ 790]
You may be a geek if...
You've ever used a computer on Friday, Saturday and Sunday of the
same weekend.
You find yourself interrupting computer store salesman to correct
something he said.
The first thing you notice when walking in a business is their
computer system. ...and offer advice on how you would change it.
You've ever mounted a magnetic tape reel.
You own any shareware.
You know more IP addresses than phone numbers.
You've ever accidentally dialed an IP address.
Your friends use you as tech support.
You've ever named a computer.
You have your local computer store on speed dial.
You can't carry on a conversation without talking about computers.
Co-workers have to E-mail you about the fire alarm to get you out of
the building.
You've ever found "stray" diskettes when doing laundry.
Your computer has it's own phone line - but your teenager doesn't.
You check the national weather service web page for current weather
conditions (rather than look out the window).
You know more URLs than street addresses.
Your pet has a web page.
You get really excited when Yahoo adds your link.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Tue, 29 Aug 2000 03:59:01 +0000 |
| parents | b1b77b39a1fa |
| children | d50d3abb9eb7 |
| rev | line source |
|---|---|
| 1 | 1 /* |
| 2 * gaim | |
| 3 * | |
| 4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 * | |
| 6 * This program is free software; you can redistribute it and/or modify | |
| 7 * it under the terms of the GNU General Public License as published by | |
| 8 * the Free Software Foundation; either version 2 of the License, or | |
| 9 * (at your option) any later version. | |
| 10 * | |
| 11 * This program is distributed in the hope that it will be useful, | |
| 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 * GNU General Public License for more details. | |
| 15 * | |
| 16 * You should have received a copy of the GNU General Public License | |
| 17 * along with this program; if not, write to the Free Software | |
| 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 * | |
| 20 */ | |
| 21 | |
| 22 /* this is a little piece of code to handle proxy connection */ | |
| 23 /* it is intended to : 1st handle http proxy, using the CONNECT command | |
| 24 , 2nd provide an easy way to add socks support */ | |
| 25 | |
|
349
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
26 #ifdef HAVE_CONFIG_H |
|
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
27 #include "../config.h" |
|
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
338
diff
changeset
|
28 #endif |
| 1 | 29 #include <stdio.h> |
| 30 #include <stdlib.h> | |
| 31 #include <string.h> | |
| 32 #include <sys/types.h> | |
| 33 #include <sys/socket.h> | |
| 34 #include <netdb.h> | |
| 35 #include <netinet/in.h> | |
| 36 #include <gtk/gtk.h> | |
| 37 #include "gaim.h" | |
| 38 #include "proxy.h" | |
| 39 | |
| 40 | |
|
210
ec0686b3b03f
[gaim-migrate @ 220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
79
diff
changeset
|
41 /* static int proxy_inited=0; */ |
| 1 | 42 int proxy_type = 0; |
| 43 char proxy_host[256]; | |
| 44 int proxy_port = 3128; | |
| 45 char *proxy_realhost = NULL; | |
| 46 | |
| 47 /* this code is borrowed from cvs 1.10 */ | |
| 48 static int | |
| 49 proxy_recv_line (int sock, char **resultp) | |
| 50 { | |
| 51 int c; | |
| 52 char *result; | |
| 53 size_t input_index = 0; | |
| 54 size_t result_size = 80; | |
| 55 | |
| 79 | 56 result = g_malloc (result_size); |
| 1 | 57 |
| 58 while (1) | |
| 59 { | |
| 60 char ch; | |
| 61 if (recv (sock, &ch, 1, 0) < 0) | |
| 62 fprintf (stderr, "recv() error from proxy server\n"); | |
| 63 c = ch; | |
| 64 | |
| 65 if (c == EOF) | |
| 66 { | |
| 79 | 67 g_free (result); |
| 1 | 68 |
| 69 /* It's end of file. */ | |
| 70 fprintf(stderr, "end of file from server\n"); | |
| 71 } | |
| 72 | |
| 73 if (c == '\012') | |
| 74 break; | |
| 75 | |
| 76 result[input_index++] = c; | |
| 77 while (input_index + 1 >= result_size) | |
| 78 { | |
| 79 result_size *= 2; | |
| 79 | 80 result = (char *) g_realloc (result, result_size); |
| 1 | 81 } |
| 82 } | |
| 83 | |
| 84 if (resultp) | |
| 85 *resultp = result; | |
| 86 | |
| 87 /* Terminate it just for kicks, but we *can* deal with embedded NULs. */ | |
| 88 result[input_index] = '\0'; | |
| 89 | |
| 90 if (resultp == NULL) | |
| 79 | 91 g_free (result); |
| 1 | 92 return input_index; |
| 93 } | |
| 94 | |
| 95 | |
| 96 struct hostent *proxy_gethostbyname(char *host) | |
| 97 { | |
| 98 | |
| 99 if (proxy_type == PROXY_NONE) | |
| 100 return (gethostbyname(host)); | |
| 101 | |
| 102 if (proxy_realhost != NULL) | |
| 103 g_free(proxy_realhost); | |
| 104 | |
| 105 /* we keep the real host name for the Connect command */ | |
| 106 proxy_realhost = (char *) strdup(host); | |
| 107 | |
| 108 return (gethostbyname(proxy_host)); | |
| 109 | |
| 110 } | |
| 111 | |
| 112 | |
| 113 int proxy_connect(int sockfd, struct sockaddr *serv_addr, int | |
| 114 addrlen ) | |
| 115 { | |
| 116 struct sockaddr_in name; | |
| 117 int ret; | |
| 118 | |
| 119 switch (proxy_type) { | |
| 120 case PROXY_NONE: | |
| 121 /* normal use */ | |
| 122 return (connect(sockfd,serv_addr,addrlen)); | |
| 123 break; | |
| 124 case PROXY_HTTP: /* Http proxy */ | |
| 125 /* do the tunneling */ | |
| 126 /* step one : connect to proxy */ | |
| 127 { | |
| 128 struct hostent *hostinfo; | |
| 129 unsigned short shortport = proxy_port; | |
| 130 | |
| 131 memset (&name, 0, sizeof (name)); | |
| 132 name.sin_family = AF_INET; | |
| 133 name.sin_port = htons (shortport); | |
| 134 hostinfo = gethostbyname (proxy_host); | |
| 135 if (hostinfo == NULL) { | |
| 136 fprintf (stderr, "Unknown host %s.\n", proxy_host); | |
| 137 return (-1); | |
| 138 } | |
| 139 name.sin_addr = *(struct in_addr *) hostinfo->h_addr; | |
| 140 } | |
| 141 sprintf(debug_buff,"Trying to connect ...\n"); | |
| 142 debug_print(debug_buff); | |
| 143 if ((ret = connect(sockfd,(struct sockaddr *)&name,sizeof(name)))<0) | |
| 144 return(ret); | |
| 145 | |
| 146 /* step two : do proxy tunneling init */ | |
| 147 { | |
| 148 char cmd[80]; | |
| 149 char *inputline; | |
| 150 unsigned short realport=ntohs(((struct sockaddr_in *)serv_addr)->sin_port); | |
| 151 sprintf(cmd,"CONNECT %s:%d HTTP/1.1\n\r\n\r",proxy_realhost,realport); | |
| 152 sprintf(debug_buff,"<%s>\n",cmd); | |
| 153 debug_print(debug_buff); | |
| 154 if (send(sockfd,cmd,strlen(cmd),0)<0) | |
| 155 return(-1); | |
| 156 if (proxy_recv_line(sockfd,&inputline) < 0) { | |
| 157 return(-1); | |
| 158 } | |
| 159 sprintf(debug_buff,"<%s>\n",inputline); | |
| 160 debug_print(debug_buff); | |
| 161 if (memcmp("HTTP/1.0 200 Connection established",inputline,35)) | |
| 162 if (memcmp("HTTP/1.1 200 Connection established",inputline,35)) { | |
| 163 free(inputline); | |
| 164 return(-1); | |
| 165 } | |
| 166 | |
| 167 while (strlen(inputline)>1) { | |
| 168 free(inputline); | |
| 169 if (proxy_recv_line(sockfd,&inputline) < 0) { | |
| 170 return(-1); | |
| 171 } | |
| 172 sprintf(debug_buff,"<%s>\n",inputline); | |
| 173 debug_print(debug_buff); | |
| 174 } | |
| 175 free(inputline); | |
| 176 } | |
| 177 | |
|
743
b1b77b39a1fa
[gaim-migrate @ 753]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
670
diff
changeset
|
178 return 0; |
| 1 | 179 break; |
|
664
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
180 case PROXY_SOCKS4: |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
181 /* code shamelessly stolen from everybuddy */ |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
182 { |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
183 struct sockaddr_in sa; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
184 unsigned char packet[12]; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
185 struct hostent *hp; |
|
234
985635758c33
[gaim-migrate @ 244]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
186 |
|
664
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
187 debug_print("connecting with socks4.\n"); |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
188 |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
189 if (!(hp = gethostbyname(proxy_host))) |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
190 return -1; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
191 |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
192 bzero(&sa, sizeof(sa)); |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
193 sa.sin_family = AF_INET; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
194 sa.sin_port = htons(proxy_port); |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
195 bcopy(hp->h_addr, (char *) &sa.sin_addr, hp->h_length); |
|
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
234
diff
changeset
|
196 |
|
664
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
197 if (connect(sockfd, (struct sockaddr *) &sa, sizeof (sa)) != -1) { |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
198 unsigned short realport = htons(((struct sockaddr_in *)serv_addr)->sin_port); |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
199 |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
200 if (!(hp = gethostbyname(proxy_realhost))) |
|
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
234
diff
changeset
|
201 return -1; |
|
664
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
202 packet[0] = 4; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
203 packet[1] = 1; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
204 packet[2] = (((unsigned short) realport) >> 8); |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
205 packet[3] = (((unsigned short) realport) & 0xff); |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
206 packet[4] = (unsigned char) (hp->h_addr_list[0])[0]; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
207 packet[5] = (unsigned char) (hp->h_addr_list[0])[1]; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
208 packet[6] = (unsigned char) (hp->h_addr_list[0])[2]; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
209 packet[7] = (unsigned char) (hp->h_addr_list[0])[3]; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
210 packet[8] = 0; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
211 if (write(sockfd, packet, 9) == 9) { |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
212 bzero(packet, sizeof(packet)); |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
213 if (read(sockfd, packet, 9) >= 4 && packet[1] == 90) |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
214 return 0; |
|
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
234
diff
changeset
|
215 } |
|
664
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
216 close(sockfd); |
|
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
234
diff
changeset
|
217 } |
|
664
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
218 return -1; |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
219 } |
|
5cb19972df52
[gaim-migrate @ 674]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
220 break; |
|
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
221 case PROXY_SOCKS5: |
|
670
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
222 { |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
223 struct sockaddr_in sin; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
224 struct hostent *hostinfo; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
225 char buff[11]; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
226 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
227 sethostent(0); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
228 hostinfo = gethostbyname(proxy_host); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
229 if (!hostinfo) return -1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
230 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
231 sin.sin_addr.s_addr = atol(hostinfo->h_addr); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
232 sin.sin_family = AF_INET; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
233 sin.sin_port = htons(proxy_port); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
234 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
235 if (connect(sockfd, (struct sockaddr *)&sin, sizeof(sin)) < 0) |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
236 return -1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
237 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
238 buff[0] = 5; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
239 buff[1] = 1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
240 buff[2] = 0; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
241 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
242 write(sockfd, buff, 3); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
243 read(sockfd, buff, 2); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
244 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
245 if (buff[1]) return -1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
246 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
247 hostinfo = gethostbyname(proxy_realhost); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
248 if (!hostinfo) return -1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
249 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
250 buff[0] = 5; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
251 buff[1] = 1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
252 buff[2] = 0; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
253 buff[3] = 1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
254 buff[4] = (unsigned char) (hostinfo->h_addr_list[0])[0]; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
255 buff[5] = (unsigned char) (hostinfo->h_addr_list[0])[1]; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
256 buff[6] = (unsigned char) (hostinfo->h_addr_list[0])[2]; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
257 buff[7] = (unsigned char) (hostinfo->h_addr_list[0])[3]; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
258 memcpy(buff+8, &((struct sockaddr_in *)serv_addr)->sin_port, 2); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
259 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
260 write(sockfd, buff, 10); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
261 read(sockfd, buff, 10); |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
262 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
263 if (buff[1]) return -1; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
264 |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
265 return 0; |
|
9e51c1a4abba
[gaim-migrate @ 680]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
664
diff
changeset
|
266 } |
|
338
9d258a0aa560
[gaim-migrate @ 348]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
267 break; |
| 1 | 268 default: |
| 269 fprintf(stderr,"Unknown proxy type : %d.\n",proxy_type); | |
| 270 break; | |
| 271 } | |
| 272 return(-1); | |
| 273 } | |
| 274 |
