interfaces: Port to GetBestInterfaceEx for UWP compat
authorNirbheek Chauhan <nirbheek@centricular.com>
Thu, 9 Jul 2020 11:13:45 +0000 (16:43 +0530)
committerNirbheek Chauhan <nirbheek@centricular.com>
Thu, 9 Jul 2020 12:35:23 +0000 (18:05 +0530)
Still prefer ipv4 addresses for backwards-compat. GetBestInterface is
not allowed when targeting UWP, so use GetBestInterfaceEx.

Also add some debug logging to ensure that the function is actually
running correctly.

agent/interfaces.c

index 5c8d131..309ca65 100644 (file)
@@ -600,8 +600,21 @@ GList * nice_interfaces_get_local_ips (gboolean include_loopback)
    * Get the best interface for transport to 0.0.0.0.
    * This interface should be first in list!
    */
-  if (GetBestInterface (0, &pref) != NO_ERROR)
-    pref = 0;
+  {
+    DWORD retcode;
+    struct sockaddr_in sa_any = {0};
+
+    sa_any.sin_family = AF_INET;
+    sa_any.sin_addr.s_addr = htonl (INADDR_ANY);
+
+    retcode = GetBestInterfaceEx ((SOCKADDR *) &sa_any, &pref);
+    if (retcode != NO_ERROR) {
+      gchar *msg = g_win32_error_message (retcode);
+      nice_debug ("Error fetching best interface: %s", msg);
+      g_free (msg);
+      pref = 0;
+    }
+  }
 
   /* Loop over the adapters. */
   for (a = addresses; a != NULL; a = a->Next) {