netdev: use typesafe resolve_getaddrinfo() in wireguard.c
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 15 Dec 2018 11:57:50 +0000 (20:57 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 17 Dec 2018 01:02:36 +0000 (10:02 +0900)
src/network/netdev/wireguard.c

index f216f80..167cf65 100644 (file)
@@ -15,6 +15,7 @@
 #include "networkd-manager.h"
 #include "networkd-util.h"
 #include "parse-util.h"
+#include "resolve-private.h"
 #include "string-util.h"
 #include "strv.h"
 #include "wireguard.h"
@@ -205,9 +206,7 @@ static WireguardEndpoint* wireguard_endpoint_free(WireguardEndpoint *e) {
         return mfree(e);
 }
 
-static void wireguard_endpoint_destroy_callback(void *userdata) {
-        WireguardEndpoint *e = userdata;
-
+static void wireguard_endpoint_destroy_callback(WireguardEndpoint *e) {
         assert(e);
         assert(e->netdev);
 
@@ -248,18 +247,16 @@ static int exponential_backoff_milliseconds(unsigned n_retries) {
 static int wireguard_resolve_handler(sd_resolve_query *q,
                                      int ret,
                                      const struct addrinfo *ai,
-                                     void *userdata) {
+                                     WireguardEndpoint *e) {
         _cleanup_(netdev_unrefp) NetDev *netdev_will_unrefed = NULL;
-        NetDev *netdev = NULL;
-        WireguardEndpoint *e;
+        NetDev *netdev;
         Wireguard *w;
         int r;
 
-        assert(userdata);
-        e = userdata;
-        netdev = e->netdev;
+        assert(e);
+        assert(e->netdev);
 
-        assert(netdev);
+        netdev = e->netdev;
         w = WIREGUARD(netdev);
         assert(w);
 
@@ -328,15 +325,14 @@ static void resolve_endpoints(NetDev *netdev) {
         assert(w);
 
         LIST_FOREACH(endpoints, endpoint, w->unresolved_endpoints) {
-                _cleanup_(sd_resolve_query_unrefp) sd_resolve_query *q = NULL;
-
-                r = sd_resolve_getaddrinfo(netdev->manager->resolve,
-                                           &q,
-                                           endpoint->host,
-                                           endpoint->port,
-                                           &hints,
-                                           wireguard_resolve_handler,
-                                           endpoint);
+                r = resolve_getaddrinfo(netdev->manager->resolve,
+                                        NULL,
+                                        endpoint->host,
+                                        endpoint->port,
+                                        &hints,
+                                        wireguard_resolve_handler,
+                                        wireguard_endpoint_destroy_callback,
+                                        endpoint);
 
                 if (r == -ENOBUFS)
                         break;
@@ -345,14 +341,6 @@ static void resolve_endpoints(NetDev *netdev) {
                         continue;
                 }
 
-                r = sd_resolve_query_set_destroy_callback(q, wireguard_endpoint_destroy_callback);
-                if (r < 0) {
-                        log_netdev_error_errno(netdev, r, "Failed to set destroy callback to resolving query: %m");
-                        continue;
-                }
-
-                (void) sd_resolve_query_set_floating(q, true);
-
                 /* Avoid freeing netdev. It will be unrefed by the destroy callback. */
                 netdev_ref(netdev);