Fix some IPv6 address compatibility issues.
authorMichael Poole <mdpoole@troilus.org>
Thu, 6 Apr 2006 02:19:47 +0000 (02:19 +0000)
committerMichael Poole <mdpoole@troilus.org>
Thu, 6 Apr 2006 02:19:47 +0000 (02:19 +0000)
src/proto-p10.c (irc_p10_pton): Mark valid IPv4 addresses as v4-mapped.
  (irc_p10_ntop): Emit invalid IPs as AAAAAA (but it could be _ for +6
    flagged hubs).
git-archimport-id: srvx@srvx.net--2006/srvx--devo--1.3--patch-11

ChangeLog
src/proto-p10.c

index 6185dc82a412cad083ce86239a07c219150c5269..9f4add7fc4700fea397c2e1105f54b25be9ee044 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,21 @@
 # arch-tag: automatic-ChangeLog--srvx@srvx.net--2006/srvx--devo--1.3
 #
 
+2006-04-06 02:19:47 GMT        Michael Poole <mdpoole@troilus.org>     patch-11
+
+    Summary:
+      Fix some IPv6 address compatibility issues.
+    Revision:
+      srvx--devo--1.3--patch-11
+
+    src/proto-p10.c (irc_p10_pton): Mark valid IPv4 addresses as v4-mapped.
+      (irc_p10_ntop): Emit invalid IPs as AAAAAA (but it could be _ for +6
+        flagged hubs).
+
+    modified files:
+     ChangeLog src/proto-p10.c
+
+
 2006-04-05 02:07:30 GMT        Michael Poole <mdpoole@troilus.org>     patch-10
 
     Summary:
index d44d8a288c664722f19ce63a72bfb8d9bab4ed5c..a5d61e47664f133e2765650ec40dae2f3397d25b 100644 (file)
@@ -383,6 +383,8 @@ irc_p10_pton(irc_in_addr_t *ip, const char *input)
         unsigned int value;
         memset(ip, 0, 6 * sizeof(ip->in6[0]));
         value = base64toint(input, 6);
+        if (value)
+            ip->in6[5] = htons(65535);
         ip->in6[6] = htons(value >> 16);
         ip->in6[7] = htons(value & 65535);
     } else {
@@ -404,7 +406,9 @@ irc_p10_pton(irc_in_addr_t *ip, const char *input)
 static void
 irc_p10_ntop(char *output, const irc_in_addr_t *ip)
 {
-    if (irc_in_addr_is_ipv4(*ip)) {
+    if (!irc_in_addr_is_valid(*ip)) {
+        strcpy(output, "AAAAAA");
+    } else if (irc_in_addr_is_ipv4(*ip)) {
         unsigned int in4;
         in4 = (ntohs(ip->in6[6]) << 16) | ntohs(ip->in6[7]);
         inttobase64(output, in4, 6);