| 251 int sock, errno2; |
249 int sock, errno2; |
| 252 struct sockaddr_in sin; |
250 struct sockaddr_in sin; |
| 253 struct in_addr *a = addr; |
251 struct in_addr *a = addr; |
| 254 struct sockaddr_in myaddr; |
252 struct sockaddr_in myaddr; |
| 255 |
253 |
| 256 gg_debug(GG_DEBUG_FUNCTION, "** gg_connect(%s, %d, %d);\n", inet_ntoa(*a), port, async); |
254 gg_debug(GG_DEBUG_FUNCTION, "** gg_connect(%s, %d, %d);\n", |
| |
255 inet_ntoa(*a), port, async); |
| 257 |
256 |
| 258 if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { |
257 if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { |
| 259 gg_debug(GG_DEBUG_MISC, "// gg_connect() socket() failed (errno=%d, %s)\n", errno, strerror(errno)); |
258 gg_debug(GG_DEBUG_MISC, "// gg_connect() socket() failed " |
| |
259 "(errno=%d, %s)\n", errno, strerror(errno)); |
| 260 return -1; |
260 return -1; |
| 261 } |
261 } |
| 262 |
262 |
| 263 memset(&myaddr, 0, sizeof(myaddr)); |
263 memset(&myaddr, 0, sizeof(myaddr)); |
| 264 myaddr.sin_family = AF_INET; |
264 myaddr.sin_family = AF_INET; |
| 265 |
265 |
| 266 myaddr.sin_addr.s_addr = gg_local_ip; |
266 myaddr.sin_addr.s_addr = gg_local_ip; |
| 267 |
267 |
| 268 if (bind(sock, (struct sockaddr *) &myaddr, sizeof(myaddr)) == -1) { |
268 if (bind(sock, (struct sockaddr *) &myaddr, sizeof(myaddr)) == -1) { |
| 269 gg_debug(GG_DEBUG_MISC, "// gg_connect() bind() failed (errno=%d, %s)\n", errno, strerror(errno)); |
269 gg_debug(GG_DEBUG_MISC, "// gg_connect() bind() failed " |
| |
270 "(errno=%d, %s)\n", errno, strerror(errno)); |
| 270 errno2 = errno; |
271 errno2 = errno; |
| 271 close(sock); |
272 close(sock); |
| 272 errno = errno2; |
273 errno = errno2; |
| 273 return -1; |
274 return -1; |
| 274 } |
275 } |
| 573 unsigned int tmp_size; |
575 unsigned int tmp_size; |
| 574 |
576 |
| 575 if (!gg_proxy_enabled || !gg_proxy_username || !gg_proxy_password) |
577 if (!gg_proxy_enabled || !gg_proxy_username || !gg_proxy_password) |
| 576 return NULL; |
578 return NULL; |
| 577 |
579 |
| 578 if (!(tmp = malloc((tmp_size = strlen(gg_proxy_username) + strlen(gg_proxy_password) + 2)))) |
580 tmp_size = strlen(gg_proxy_username) + strlen(gg_proxy_password) + 2; |
| |
581 tmp = malloc(tmp_size); |
| |
582 if (!tmp) |
| 579 return NULL; |
583 return NULL; |
| 580 |
584 |
| 581 snprintf(tmp, tmp_size, "%s:%s", gg_proxy_username, gg_proxy_password); |
585 snprintf(tmp, tmp_size, "%s:%s", gg_proxy_username, gg_proxy_password); |
| 582 |
586 |
| 583 if (!(enc = gg_base64_encode(tmp))) { |
587 enc = gg_base64_encode(tmp); |
| |
588 if (!enc) { |
| 584 free(tmp); |
589 free(tmp); |
| 585 return NULL; |
590 return NULL; |
| 586 } |
591 } |
| 587 |
592 |
| 588 free(tmp); |
593 free(tmp); |
| 589 |
594 |
| 590 if (!(out = malloc(strlen(enc) + 40))) { |
595 out = malloc(strlen(enc) + 40); |
| |
596 if (!out) { |
| 591 free(enc); |
597 free(enc); |
| 592 return NULL; |
598 return NULL; |
| 593 } |
599 } |
| 594 |
600 |
| 595 snprintf(out, strlen(enc) + 40, "Proxy-Authorization: Basic %s\r\n", enc); |
601 snprintf(out, strlen(enc) + 40, "Proxy-Authorization: Basic %s\r\n", enc); |