# HG changeset patch # User Eric Warmenhoven # Date 1008974561 0 # Node ID 28cd1b9d08a15d23bc8a7c3014a4aa264140a437 # Parent 538c58b43effbdbc60074f8a0743f2e86723fc61 [gaim-migrate @ 2920] evidently this broke things. committer: Tailor Script diff -r 538c58b43eff -r 28cd1b9d08a1 src/proxy.c --- a/src/proxy.c Fri Dec 21 10:23:04 2001 +0000 +++ b/src/proxy.c Fri Dec 21 22:42:41 2001 +0000 @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -119,24 +118,6 @@ g_source_remove(tag); } -static struct sockaddr_in *gaim_gethostbyname(char *host) -{ - static struct sockaddr_in sin; - - if (!inet_aton(host, &sin.sin_addr)) { - struct hostent *hp; - if (!(hp = gethostbyname(host))) { - return NULL; - } - memset(&sin, 0, sizeof(struct sockaddr_in)); - memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); - sin.sin_family = hp->h_addrtype; - } else - sin.sin_family = AF_INET; - - return &sin; -} - static void no_one_calls(gpointer data, gint source, GaimInputCondition cond) { struct PHB *phb = data; @@ -170,25 +151,31 @@ static int proxy_connect_none(char *host, unsigned short port, struct PHB *phb) { - struct sockaddr_in *sin; + struct sockaddr_in sin; + struct hostent *hp; int fd = -1; debug_printf("connecting to %s:%d with no proxy\n", host, port); - if (!(sin = gaim_gethostbyname(host))) { + if (!(hp = gethostbyname(host))) { debug_printf("gethostbyname failed\n"); g_free(phb); return -1; } - if ((fd = socket(sin->sin_family, SOCK_STREAM, 0)) < 0) { + memset(&sin, 0, sizeof(struct sockaddr_in)); + memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); + sin.sin_family = hp->h_addrtype; + sin.sin_port = htons(port); + + if ((fd = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) { debug_printf("unable to create socket\n"); g_free(phb); return -1; } fcntl(fd, F_SETFL, O_NONBLOCK); - if (connect(fd, (struct sockaddr *)sin, sizeof(*sin)) < 0) { + if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { debug_printf("Connect would have blocked\n"); phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, no_one_calls, phb); @@ -315,17 +302,23 @@ static int proxy_connect_http(char *host, unsigned short port, struct PHB *phb) { - struct sockaddr_in *sin; + struct hostent *hp; + struct sockaddr_in sin; int fd = -1; debug_printf("connecting to %s:%d via %s:%d using HTTP\n", host, port, proxyhost, proxyport); - if (!(sin = gaim_gethostbyname(proxyhost))) { + if (!(hp = gethostbyname(proxyhost))) { g_free(phb); return -1; } - if ((fd = socket(sin->sin_family, SOCK_STREAM, 0)) < 0) { + memset(&sin, 0, sizeof(struct sockaddr_in)); + memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); + sin.sin_family = hp->h_addrtype; + sin.sin_port = htons(proxyport); + + if ((fd = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) { g_free(phb); return -1; } @@ -334,7 +327,7 @@ phb->port = port; fcntl(fd, F_SETFL, O_NONBLOCK); - if (connect(fd, (struct sockaddr *)sin, sizeof(*sin)) < 0) { + if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { debug_printf("Connect would have blocked\n"); phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, http_canwrite, phb); @@ -434,17 +427,23 @@ static int proxy_connect_socks4(char *host, unsigned short port, struct PHB *phb) { - struct sockaddr_in *sin; + struct sockaddr_in sin; + struct hostent *hp; int fd = -1; debug_printf("connecting to %s:%d via %s:%d using SOCKS4\n", host, port, proxyhost, proxyport); - if (!(sin = gaim_gethostbyname(proxyhost))) { + if (!(hp = gethostbyname(proxyhost))) { g_free(phb); return -1; } - if ((fd = socket(sin->sin_family, SOCK_STREAM, 0)) < 0) { + memset(&sin, 0, sizeof(struct sockaddr_in)); + memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); + sin.sin_family = hp->h_addrtype; + sin.sin_port = htons(proxyport); + + if ((fd = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) { g_free(phb); return -1; } @@ -453,7 +452,7 @@ phb->port = port; fcntl(fd, F_SETFL, O_NONBLOCK); - if (connect(fd, (struct sockaddr *)sin, sizeof(*sin)) < 0) { + if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { debug_printf("Connect would have blocked\n"); phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s4_canwrite, phb); @@ -657,17 +656,23 @@ static int proxy_connect_socks5(char *host, unsigned short port, struct PHB *phb) { - struct sockaddr_in *sin; int fd = -1; + struct sockaddr_in sin; + struct hostent *hp; debug_printf("connecting to %s:%d via %s:%d using SOCKS5\n", host, port, proxyhost, proxyport); - if (!(sin = gaim_gethostbyname(proxyhost))) { + if (!(hp = gethostbyname(proxyhost))) { g_free(phb); return -1; } - if ((fd = socket(sin->sin_family, SOCK_STREAM, 0)) < 0) { + memset(&sin, 0, sizeof(struct sockaddr_in)); + memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); + sin.sin_family = hp->h_addrtype; + sin.sin_port = htons(proxyport); + + if ((fd = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) { g_free(phb); return -1; } @@ -676,7 +681,7 @@ phb->port = port; fcntl(fd, F_SETFL, O_NONBLOCK); - if (connect(fd, (struct sockaddr *)sin, sizeof(*sin)) < 0) { + if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { if ((errno == EINPROGRESS) || (errno == EINTR)) { debug_printf("Connect would have blocked\n"); phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s5_canwrite, phb);