From eddc3d90c6f1defcdaec9311f22aaebe56ff0ada Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 26 May 2002 16:52:36 +0000 Subject: net_ip2host() and net_host2ip() now treat any IPv6 IPs as 0.0.0.0, if IPv6 support isn't enabled in irssi. Also DCC's human readable IP address is taken from DCC SEND request directly with IPv6. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2825 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/core/network.c | 23 ++++++++++++++--------- src/irc/dcc/dcc-get.c | 14 +++++++++++--- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/core/network.c b/src/core/network.c index 5b4fa1ed..0bd1cfdd 100644 --- a/src/core/network.c +++ b/src/core/network.c @@ -518,12 +518,16 @@ int net_ip2host(IPADDR *ip, char *host) #else unsigned long ip4; - ip4 = ntohl(ip->ip.s_addr); - g_snprintf(host, MAX_IP_LEN, "%lu.%lu.%lu.%lu", - (ip4 & 0xff000000UL) >> 24, - (ip4 & 0x00ff0000) >> 16, - (ip4 & 0x0000ff00) >> 8, - (ip4 & 0x000000ff)); + if (ip->family != AF_INET) { + strcpy(host, "0.0.0.0"); + } else { + ip4 = ntohl(ip->ip.s_addr); + g_snprintf(host, MAX_IP_LEN, "%lu.%lu.%lu.%lu", + (ip4 & 0xff000000UL) >> 24, + (ip4 & 0x00ff0000) >> 16, + (ip4 & 0x0000ff00) >> 8, + (ip4 & 0x000000ff)); + } #endif return 0; } @@ -532,15 +536,16 @@ int net_host2ip(const char *host, IPADDR *ip) { unsigned long addr; -#ifdef HAVE_IPV6 if (strchr(host, ':') != NULL) { /* IPv6 */ ip->family = AF_INET6; +#ifdef HAVE_IPV6 if (inet_pton(AF_INET6, host, &ip->ip) == 0) return -1; - } else +#else + ip->ip.s_addr = 0; #endif - { + } else { /* IPv4 */ ip->family = AF_INET; #ifdef HAVE_INET_ATON diff --git a/src/irc/dcc/dcc-get.c b/src/irc/dcc/dcc-get.c index 381d02b1..d9529553 100644 --- a/src/irc/dcc/dcc-get.c +++ b/src/irc/dcc/dcc-get.c @@ -315,6 +315,7 @@ static void ctcp_msg_dcc_send(IRC_SERVER_REC *server, const char *data, { GET_DCC_REC *dcc; IPADDR ip; + const char *address; char **params, *fname; int paramcount, fileparams; int port, len, quoted = FALSE; @@ -333,7 +334,8 @@ static void ctcp_msg_dcc_send(IRC_SERVER_REC *server, const char *data, fileparams = get_file_params_count(params, paramcount); - dcc_str2ip(params[fileparams], &ip); + address = params[fileparams]; + dcc_str2ip(address, &ip); port = atoi(params[fileparams+1]); size = atol(params[fileparams+2]); @@ -357,8 +359,14 @@ static void ctcp_msg_dcc_send(IRC_SERVER_REC *server, const char *data, dcc = dcc_get_create(server, chat, nick, fname); dcc->target = g_strdup(target); - memcpy(&dcc->addr, &ip, sizeof(ip)); - net_ip2host(&dcc->addr, dcc->addrstr); + memcpy(&dcc->addr, &ip, sizeof(ip)); + if (dcc->addr.family == AF_INET) + net_ip2host(&dcc->addr, dcc->addrstr); + else { + /* with IPv6, show it to us as it was sent */ + strncpy(dcc->addrstr, address, sizeof(dcc->addrstr)-1); + dcc->addrstr[sizeof(dcc->addrstr)-1] = '\0'; + } dcc->port = port; dcc->size = size; dcc->file_quoted = quoted; -- cgit v1.2.3