From 75adda86be49e6839e50443f0bae5875d9910897 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sun, 20 Aug 2017 10:45:27 -0700 Subject: fixes #41 Move DNS out of tcp transport This moves the DNS related functionality into common code, and also removes all the URL parsing stuff out of the platform specific code and into the transports. Now the transports just take sockaddr's on initialization. (We may want to move this until later.) We also add UDP resolution as another separate API. --- tests/resolv.c | 90 +++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 26 deletions(-) (limited to 'tests') diff --git a/tests/resolv.c b/tests/resolv.c index 94108765..849b41cd 100644 --- a/tests/resolv.c +++ b/tests/resolv.c @@ -126,67 +126,105 @@ ip6tostr(void *addr) ); #endif -TestMain("TCP Resolver", { +TestMain("Resolver", { nni_init(); Convey("Google DNS IPv4 resolves", { - nni_aio aio; - const char *str; + nni_aio aio; + const char * str; + nng_sockaddr sa; memset(&aio, 0, sizeof(aio)); nni_aio_init(&aio, NULL, NULL); + aio.a_addr = &sa; nni_plat_tcp_resolv("google-public-dns-a.google.com", "80", NNG_AF_INET, 1, &aio); nni_aio_wait(&aio); So(nni_aio_result(&aio) == 0); - So(aio.a_naddrs == 1); - So(aio.a_addrs[0].s_un.s_in.sa_family == NNG_AF_INET); - So(aio.a_addrs[0].s_un.s_in.sa_port == ntohs(80)); - str = ip4tostr(&aio.a_addrs[0].s_un.s_in.sa_addr); + So(sa.s_un.s_in.sa_family == NNG_AF_INET); + So(sa.s_un.s_in.sa_port == ntohs(80)); + str = ip4tostr(&sa.s_un.s_in.sa_addr); So(strcmp(str, "8.8.8.8") == 0); nni_aio_fini(&aio); }); + Convey("Numeric UDP resolves", { + nni_aio aio; + const char * str; + nng_sockaddr sa; + memset(&aio, 0, sizeof(aio)); + nni_aio_init(&aio, NULL, NULL); + aio.a_addr = &sa; + nni_plat_udp_resolv("8.8.4.4", "69", NNG_AF_INET, 1, &aio); + nni_aio_wait(&aio); + So(nni_aio_result(&aio) == 0); + So(sa.s_un.s_in.sa_family == NNG_AF_INET); + So(sa.s_un.s_in.sa_port == ntohs(69)); + str = ip4tostr(&sa.s_un.s_in.sa_addr); + So(strcmp(str, "8.8.4.4") == 0); + nni_aio_fini(&aio); + }); Convey("Numeric v4 resolves", { - nni_aio aio; - const char *str; + nni_aio aio; + const char * str; + nng_sockaddr sa; memset(&aio, 0, sizeof(aio)); nni_aio_init(&aio, NULL, NULL); + aio.a_addr = &sa; nni_plat_tcp_resolv("8.8.4.4", "80", NNG_AF_INET, 1, &aio); nni_aio_wait(&aio); So(nni_aio_result(&aio) == 0); - So(aio.a_naddrs == 1); - So(aio.a_addrs[0].s_un.s_in.sa_family == NNG_AF_INET); - So(aio.a_addrs[0].s_un.s_in.sa_port == ntohs(80)); - str = ip4tostr(&aio.a_addrs[0].s_un.s_in.sa_addr); + So(sa.s_un.s_in.sa_family == NNG_AF_INET); + So(sa.s_un.s_in.sa_port == ntohs(80)); + str = ip4tostr(&sa.s_un.s_in.sa_addr); So(strcmp(str, "8.8.4.4") == 0); nni_aio_fini(&aio); }); Convey("Numeric v6 resolves", { - nni_aio aio; - const char *str; + nni_aio aio; + const char * str; + nng_sockaddr sa; memset(&aio, 0, sizeof(aio)); nni_aio_init(&aio, NULL, NULL); + aio.a_addr = &sa; nni_plat_tcp_resolv("::1", "80", NNG_AF_INET6, 1, &aio); nni_aio_wait(&aio); So(nni_aio_result(&aio) == 0); - So(aio.a_naddrs == 1); - So(aio.a_addrs[0].s_un.s_in6.sa_family == NNG_AF_INET6); - So(aio.a_addrs[0].s_un.s_in6.sa_port == ntohs(80)); - str = ip6tostr(&aio.a_addrs[0].s_un.s_in6.sa_addr); + So(sa.s_un.s_in6.sa_family == NNG_AF_INET6); + So(sa.s_un.s_in6.sa_port == ntohs(80)); + str = ip6tostr(&sa.s_un.s_in6.sa_addr); So(strcmp(str, "::1") == 0); nni_aio_fini(&aio); }); - Convey("Name service resolves", { - nni_aio aio; - const char *str; + + Convey("TCP Name service resolves", { + nni_aio aio; + const char * str; + nng_sockaddr sa; memset(&aio, 0, sizeof(aio)); nni_aio_init(&aio, NULL, NULL); + aio.a_addr = &sa; nni_plat_tcp_resolv("8.8.4.4", "http", NNG_AF_INET, 1, &aio); nni_aio_wait(&aio); So(nni_aio_result(&aio) == 0); - So(aio.a_naddrs == 1); - So(aio.a_addrs[0].s_un.s_in.sa_family == NNG_AF_INET); - So(aio.a_addrs[0].s_un.s_in.sa_port == ntohs(80)); - str = ip4tostr(&aio.a_addrs[0].s_un.s_in.sa_addr); + So(sa.s_un.s_in.sa_family == NNG_AF_INET); + So(sa.s_un.s_in.sa_port == ntohs(80)); + str = ip4tostr(&sa.s_un.s_in.sa_addr); + So(strcmp(str, "8.8.4.4") == 0); + nni_aio_fini(&aio); + }); + + Convey("UDP Name service resolves", { + nni_aio aio; + const char * str; + nng_sockaddr sa; + memset(&aio, 0, sizeof(aio)); + nni_aio_init(&aio, NULL, NULL); + aio.a_addr = &sa; + nni_plat_udp_resolv("8.8.4.4", "tftp", NNG_AF_INET, 1, &aio); + nni_aio_wait(&aio); + So(nni_aio_result(&aio) == 0); + So(sa.s_un.s_in.sa_family == NNG_AF_INET); + So(sa.s_un.s_in.sa_port == ntohs(69)); + str = ip4tostr(&sa.s_un.s_in.sa_addr); So(strcmp(str, "8.8.4.4") == 0); nni_aio_fini(&aio); }); -- cgit v1.2.3-70-g09d2