Initial work to make irssi respect the resolved ip order

Ip's aren't selected using random() anymore, also select the ip version
by using getaddrinfo and some proper hints.
This commit is contained in:
LemonBoy 2015-09-21 13:54:13 +02:00
commit ffaa890e99
17 changed files with 87 additions and 236 deletions

View file

@ -264,12 +264,12 @@ GIOChannel *dcc_connect_ip(IPADDR *ip, int port)
}
if (own_ip == NULL)
own_ip = IPADDR_IS_V6(ip) ? source_host_ip6 : source_host_ip4;
own_ip = &source_host_ip;
handle = net_connect_ip(ip, port, own_ip);
if (handle == NULL && errno == EADDRNOTAVAIL && own_ip != NULL) {
/* dcc_own_ip is external address */
own_ip = IPADDR_IS_V6(ip) ? source_host_ip6 : source_host_ip4;
own_ip = &source_host_ip;
handle = net_connect_ip(ip, port, own_ip);
}
return handle;

View file

@ -585,7 +585,7 @@ static LISTEN_REC *find_listen(const char *ircnet, int port)
static void add_listen(const char *ircnet, int port)
{
LISTEN_REC *rec;
IPADDR ip4, ip6, *my_ip;
IPADDR ip, *my_ip;
if (port <= 0 || *ircnet == '\0')
return;
@ -593,16 +593,13 @@ static void add_listen(const char *ircnet, int port)
/* bind to specific host/ip? */
my_ip = NULL;
if (*settings_get_str("irssiproxy_bind") != '\0') {
if (net_gethostbyname(settings_get_str("irssiproxy_bind"),
&ip4, &ip6) != 0) {
if (net_gethostbyname(settings_get_str("irssiproxy_bind"), &ip) != 0) {
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
"Proxy: can not resolve '%s' - aborting",
settings_get_str("irssiproxy_bind"));
return;
}
my_ip = ip6.family == 0 ? &ip4 : ip4.family == 0 ||
settings_get_bool("resolve_prefer_ipv6") ? &ip6 : &ip4;
my_ip = &ip;
}
rec = g_new0(LISTEN_REC, 1);