Tue, 22 Aug 2000 00:37:01 +0000
[gaim-migrate @ 746]
Eric the Lumberjack continues to hack away at the tree. When people ask
what kinds of trees Eric hacks, he simply replied "CVS trees. They're
mostly used for computer stuff". Then the ignorants go away, thinking
they have been enlightened into the world of computers, which unknowingly
they have been.
| 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
6f7d28b0f98d
[gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
338
diff
changeset
|
26 | #ifdef HAVE_CONFIG_H |
|
6f7d28b0f98d
[gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
338
diff
changeset
|
27 | #include "../config.h" |
|
6f7d28b0f98d
[gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
4226cbf12850
[gaim-migrate @ 220]
Eric Warmenhoven <warmenhoven@yahoo.com>
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 | ||
| 178 | return ret; | |
| 179 | break; | |
|
664
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
180 | case PROXY_SOCKS4: |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
181 | /* code shamelessly stolen from everybuddy */ |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
182 | { |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
183 | struct sockaddr_in sa; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
184 | unsigned char packet[12]; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
185 | struct hostent *hp; |
|
234
100138758e8d
[gaim-migrate @ 244]
Todd Kulesza <fflewddur@users.sourceforge.net>
parents:
210
diff
changeset
|
186 | |
|
664
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
187 | debug_print("connecting with socks4.\n"); |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
188 | |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
189 | if (!(hp = gethostbyname(proxy_host))) |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
190 | return -1; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
191 | |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
192 | bzero(&sa, sizeof(sa)); |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
193 | sa.sin_family = AF_INET; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
194 | sa.sin_port = htons(proxy_port); |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
195 | bcopy(hp->h_addr, (char *) &sa.sin_addr, hp->h_length); |
|
253
005289f6798d
[gaim-migrate @ 263]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
234
diff
changeset
|
196 | |
|
664
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
197 | if (connect(sockfd, (struct sockaddr *) &sa, sizeof (sa)) != -1) { |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
198 | unsigned short realport = htons(((struct sockaddr_in *)serv_addr)->sin_port); |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
199 | |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
200 | if (!(hp = gethostbyname(proxy_realhost))) |
|
253
005289f6798d
[gaim-migrate @ 263]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
234
diff
changeset
|
201 | return -1; |
|
664
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
202 | packet[0] = 4; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
203 | packet[1] = 1; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
204 | packet[2] = (((unsigned short) realport) >> 8); |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
205 | packet[3] = (((unsigned short) realport) & 0xff); |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
206 | packet[4] = (unsigned char) (hp->h_addr_list[0])[0]; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
207 | packet[5] = (unsigned char) (hp->h_addr_list[0])[1]; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
208 | packet[6] = (unsigned char) (hp->h_addr_list[0])[2]; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
209 | packet[7] = (unsigned char) (hp->h_addr_list[0])[3]; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
210 | packet[8] = 0; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
211 | if (write(sockfd, packet, 9) == 9) { |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
212 | bzero(packet, sizeof(packet)); |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
213 | if (read(sockfd, packet, 9) >= 4 && packet[1] == 90) |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
214 | return 0; |
|
253
005289f6798d
[gaim-migrate @ 263]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
234
diff
changeset
|
215 | } |
|
664
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
216 | close(sockfd); |
|
253
005289f6798d
[gaim-migrate @ 263]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
234
diff
changeset
|
217 | } |
|
664
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
218 | return -1; |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
219 | } |
|
5885765c40c6
[gaim-migrate @ 674]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
220 | break; |
|
338
21c93bc7ae83
[gaim-migrate @ 348]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
253
diff
changeset
|
221 | case PROXY_SOCKS5: |
|
670
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
222 | { |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
223 | struct sockaddr_in sin; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
224 | struct hostent *hostinfo; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
225 | char buff[11]; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
226 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
227 | sethostent(0); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
228 | hostinfo = gethostbyname(proxy_host); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
229 | if (!hostinfo) return -1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
230 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
231 | sin.sin_addr.s_addr = atol(hostinfo->h_addr); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
232 | sin.sin_family = AF_INET; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
233 | sin.sin_port = htons(proxy_port); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
234 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
235 | if (connect(sockfd, (struct sockaddr *)&sin, sizeof(sin)) < 0) |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
236 | return -1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
237 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
238 | buff[0] = 5; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
239 | buff[1] = 1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
240 | buff[2] = 0; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
241 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
242 | write(sockfd, buff, 3); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
243 | read(sockfd, buff, 2); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
244 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
245 | if (buff[1]) return -1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
246 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
247 | hostinfo = gethostbyname(proxy_realhost); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
248 | if (!hostinfo) return -1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
249 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
250 | buff[0] = 5; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
251 | buff[1] = 1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
252 | buff[2] = 0; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
253 | buff[3] = 1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
254 | buff[4] = (unsigned char) (hostinfo->h_addr_list[0])[0]; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
255 | buff[5] = (unsigned char) (hostinfo->h_addr_list[0])[1]; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
256 | buff[6] = (unsigned char) (hostinfo->h_addr_list[0])[2]; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
257 | buff[7] = (unsigned char) (hostinfo->h_addr_list[0])[3]; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
258 | memcpy(buff+8, &((struct sockaddr_in *)serv_addr)->sin_port, 2); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
259 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
260 | write(sockfd, buff, 10); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
261 | read(sockfd, buff, 10); |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
262 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
263 | if (buff[1]) return -1; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
264 | |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
265 | return 0; |
|
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
266 | } |
|
338
21c93bc7ae83
[gaim-migrate @ 348]
Eric Warmenhoven <warmenhoven@yahoo.com>
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 |