| 87 all_count /= 2; |
87 all_count /= 2; |
| 88 addresses = malloc((all_count + 1) * sizeof(struct in_addr)); |
88 addresses = malloc((all_count + 1) * sizeof(struct in_addr)); |
| 89 |
89 |
| 90 ipv4_count = 0; |
90 ipv4_count = 0; |
| 91 while (hosts && (hosts = g_slist_delete_link(hosts, hosts))) { |
91 while (hosts && (hosts = g_slist_delete_link(hosts, hosts))) { |
| 92 const struct sockaddr *addr = hosts->data; |
92 common_sockaddr_t addr; |
| 93 char dst[INET6_ADDRSTRLEN]; |
93 char dst[INET6_ADDRSTRLEN]; |
| 94 |
94 |
| 95 if (addr->sa_family == AF_INET6) { |
95 memcpy(&addr, hosts->data, sizeof(addr)); |
| 96 inet_ntop(addr->sa_family, |
96 |
| 97 &((struct sockaddr_in6 *) addr)->sin6_addr, |
97 if (addr.sa.sa_family == AF_INET6) { |
| |
98 inet_ntop(addr.sa.sa_family, &addr.in6.sin6_addr, |
| 98 dst, sizeof(dst)); |
99 dst, sizeof(dst)); |
| 99 purple_debug_misc("gg", "ggp_resolver_purple_cb " |
100 purple_debug_misc("gg", "ggp_resolver_purple_cb " |
| 100 "ipv6 (ignore): %s\n", dst); |
101 "ipv6 (ignore): %s\n", dst); |
| 101 } else if (addr->sa_family == AF_INET) { |
102 } else if (addr.sa.sa_family == AF_INET) { |
| 102 const struct in_addr addr_ipv4 = |
103 inet_ntop(addr.sa.sa_family, &addr.in.sin_addr, |
| 103 ((struct sockaddr_in *) addr)->sin_addr; |
|
| 104 inet_ntop(addr->sa_family, &addr_ipv4, |
|
| 105 dst, sizeof(dst)); |
104 dst, sizeof(dst)); |
| 106 purple_debug_misc("gg", "ggp_resolver_purple_cb " |
105 purple_debug_misc("gg", "ggp_resolver_purple_cb " |
| 107 "ipv4: %s\n", dst); |
106 "ipv4: %s\n", dst); |
| 108 |
107 |
| 109 g_assert(ipv4_count < all_count); |
108 g_assert(ipv4_count < all_count); |
| 110 addresses[ipv4_count++] = addr_ipv4; |
109 addresses[ipv4_count++] = addr.in.sin_addr; |
| 111 } else { |
110 } else { |
| 112 purple_debug_warning("gg", "ggp_resolver_purple_cb " |
111 purple_debug_warning("gg", "ggp_resolver_purple_cb " |
| 113 "unexpected sa_family: %d\n", addr->sa_family); |
112 "unexpected sa_family: %d\n", |
| |
113 addr.sa.sa_family); |
| 114 } |
114 } |
| 115 |
115 |
| 116 g_free(hosts->data); |
116 g_free(hosts->data); |
| 117 hosts = g_slist_delete_link(hosts, hosts); |
117 hosts = g_slist_delete_link(hosts, hosts); |
| 118 } |
118 } |