+
+
+
+
+ if (addrlen == sizeof (struct IPv4HttpAddress))
+ {
+ struct IPv4HttpAddress *a4 = (struct IPv4HttpAddress *) addr;
+ struct sockaddr_in s4;
+
+ if (0 == ntohs(a4->u4_port))
+ return NULL;
+
+ s4.sin_family = AF_INET;
+ s4.sin_addr.s_addr = a4->ipv4_addr;
+ s4.sin_port = a4->u4_port;
+#if HAVE_SOCKADDR_IN_SIN_LEN
+ s4.sin_len = sizeof (struct sockaddr_in);
+#endif
+ ats = plugin->env->get_address_type (plugin->env->cls, (const struct sockaddr *) &s4, sizeof (struct sockaddr_in));
+ }
+ if (addrlen == sizeof (struct IPv6HttpAddress))
+ {
+ struct IPv6HttpAddress *a6 = (struct IPv6HttpAddress *) addr;
+ struct sockaddr_in6 s6;
+
+ if (0 == ntohs(a6->u6_port))
+ return NULL;
+
+ s6.sin6_family = AF_INET6;
+ s6.sin6_addr = a6->ipv6_addr;
+ s6.sin6_port = a6->u6_port;
+#if HAVE_SOCKADDR_IN_SIN_LEN
+ s6.sin6_len = sizeof (struct sockaddr_in6);
+#endif
+ ats = plugin->env->get_address_type (plugin->env->cls, (const struct sockaddr *) &s6, sizeof (struct sockaddr_in6));
+ }
+