summaryrefslogtreecommitdiff
path: root/src/irc
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2005-06-30 20:16:07 +0000
committerSebastien Helleu <flashcode@flashtux.org>2005-06-30 20:16:07 +0000
commitdbad2a02066cfbec85742afaf06507a7cb0d8f2d (patch)
tree9cddc8da81c50b3b7b9bb92698725c1630611c31 /src/irc
parentec1d57063c9abe2b559ca711ef2abee4f9e11ec4 (diff)
downloadweechat-dbad2a02066cfbec85742afaf06507a7cb0d8f2d.zip
Translated some messages and added calls to freeaddrinfo() function
Diffstat (limited to 'src/irc')
-rw-r--r--src/irc/irc-server.c108
1 files changed, 59 insertions, 49 deletions
diff --git a/src/irc/irc-server.c b/src/irc/irc-server.c
index 07db8ddee..b5630f90d 100644
--- a/src/irc/irc-server.c
+++ b/src/irc/irc-server.c
@@ -1006,32 +1006,36 @@ pass_httpproxy(t_irc_server *server)
*/
int
-resolve(char *hostname, char *ip, int *version)
+resolve (char *hostname, char *ip, int *version)
{
+ char ipbuffer[NI_MAXHOST];
+ struct addrinfo *res;
+
+ if (version != NULL)
+ *version = 0;
+
+ if (getaddrinfo(hostname, NULL, NULL, &res) != 0)
+ return 1;
+
+ if (!res)
+ return 1;
+
+ if (getnameinfo(res->ai_addr, res->ai_addrlen, ipbuffer, sizeof(ipbuffer), NULL, 0, NI_NUMERICHOST) != 0)
+ {
+ freeaddrinfo (res);
+ return 1;
+ }
+
+ if ((res->ai_family == AF_INET) && (version != NULL))
+ *version = 4;
+ if ((res->ai_family == AF_INET6) && (version != NULL))
+ *version = 6;
+
+ strcpy(ip, ipbuffer);
- char ipbuffer[NI_MAXHOST];
- struct addrinfo *res;
-
- if (version != NULL)
- *version = 0;
-
- if (getaddrinfo(hostname, NULL, NULL, &res) != 0)
- return 1;
-
- if (!res)
- return 1;
-
- if (getnameinfo(res->ai_addr, res->ai_addrlen, ipbuffer, sizeof(ipbuffer), NULL, 0, NI_NUMERICHOST) != 0)
- return 1;
-
- if ((res->ai_family == AF_INET) && (version != NULL))
- *version = 4;
- if ((res->ai_family == AF_INET6) && (version != NULL))
- *version = 6;
-
- strcpy(ip, ipbuffer);
-
- return 0;
+ freeaddrinfo (res);
+
+ return 0;
}
/*
@@ -1249,69 +1253,75 @@ server_child (t_irc_server *server)
struct addrinfo hints, *res;
if (cfg_proxy_use)
- {
+ {
memset (&hints, 0, sizeof(hints));
hints.ai_family = (cfg_proxy_ipv6) ? AF_INET6 : AF_INET;
hints.ai_socktype = SOCK_STREAM;
if (getaddrinfo (cfg_proxy_address, NULL, &hints, &res) !=0)
- {
+ {
write(server->child_write, "1", 1);
return 0;
- }
+ }
if ((cfg_proxy_ipv6 && (res->ai_family != AF_INET6))
|| ((!cfg_proxy_ipv6 && (res->ai_family != AF_INET))))
- {
+ {
write(server->child_write, "2", 1);
+ freeaddrinfo (res);
return 0;
- }
-
+ }
+
if (cfg_proxy_ipv6)
- ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (cfg_proxy_port);
+ ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (cfg_proxy_port);
else
- ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (cfg_proxy_port);
+ ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (cfg_proxy_port);
if (connect (server->sock, res->ai_addr, res->ai_addrlen) != 0)
- {
+ {
write(server->child_write, "3", 1);
+ freeaddrinfo (res);
return 0;
- }
+ }
if (pass_proxy(server))
- {
+ {
write(server->child_write, "4", 1);
+ freeaddrinfo (res);
return 0;
- }
- }
+ }
+ }
else
- {
+ {
memset (&hints, 0, sizeof(hints));
hints.ai_family = (server->ipv6) ? AF_INET6 : AF_INET;
hints.ai_socktype = SOCK_STREAM;
if (getaddrinfo (server->address, NULL, &hints, &res) !=0)
- {
+ {
write(server->child_write, "1", 1);
return 0;
- }
+ }
if ((server->ipv6 && (res->ai_family != AF_INET6))
|| ((!server->ipv6 && (res->ai_family != AF_INET))))
- {
+ {
write(server->child_write, "2", 1);
+ freeaddrinfo (res);
return 0;
- }
-
+ }
+
if (server->ipv6)
- ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (server->port);
+ ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (server->port);
else
- ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (server->port);
+ ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (server->port);
if (connect (server->sock, res->ai_addr, res->ai_addrlen) != 0)
- {
+ {
write(server->child_write, "3", 1);
+ freeaddrinfo (res);
return 0;
- }
- }
-
+ }
+ }
+
write (server->child_write, "0", 1);
+ freeaddrinfo (res);
return 0;
}