]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
last ipv6 change not quite right, should not change any behaviour
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 2 Nov 2009 16:46:47 +0000 (16:46 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 2 Nov 2009 16:46:47 +0000 (16:46 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15318 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_utils.c

index def7e1cdf2a2e0d15d55d633c60cc508133af2c3..43a35bbfb002434c5173edd1457af3fb968a6145 100644 (file)
@@ -1345,7 +1345,6 @@ SWITCH_DECLARE(int) get_addr_int(switch_sockaddr_t *sa)
        return ntohs((unsigned short)s->sin_addr.s_addr);
 }
 
-
 SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2)
 {
        struct sockaddr_in *s1;
@@ -1374,8 +1373,17 @@ SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *s
        case AF_INET:
                return (s1->sin_addr.s_addr == s2->sin_addr.s_addr && s1->sin_port == s2->sin_port);    
        case AF_INET6:
-               return (s16->sin6_addr.s6_addr && s26->sin6_addr.s6_addr &&
-                               *s16->sin6_addr.s6_addr == *s26->sin6_addr.s6_addr && s16->sin6_port == s26->sin6_port);        
+               if (s16->sin6_addr.s6_addr && s26->sin6_addr.s6_addr) {
+                       int i;
+
+                       if (s16->sin6_port != s26->sin6_port) return 0;
+
+                       for(i = 0; i < 4; i++) {
+                               if (*((int32_t *)s16->sin6_addr.s6_addr + i) != *((int32_t *)s26->sin6_addr.s6_addr + i)) return 0;
+                       }
+
+                       return 1;
+               }
        }
        
        return 0;