/* * Create a context for all network interfaces that are up. */ static gboolean create_contexts (gpointer data) { GUPnPSimpleContextManager *manager = (GUPnPSimpleContextManager *) data; GList *ifaces; manager->priv->idle_context_creation_src = NULL; if (manager->priv->contexts != NULL) return FALSE; ifaces = gupnp_simple_context_manager_get_interfaces (manager); while (ifaces) { create_and_signal_context ((char *) ifaces->data, manager); g_free (ifaces->data); ifaces = g_list_delete_link (ifaces, ifaces); } return FALSE; }
/* * Create a context for all network interfaces that are up. */ static gboolean create_contexts (gpointer data) { GUPnPUnixContextManager *manager = (GUPnPUnixContextManager *) data; struct ifaddrs *ifa_list, *ifa; char *ret; GList *processed; ret = NULL; if (getifaddrs (&ifa_list) != 0) { g_warning ("Failed to retrieve list of network interfaces:%s\n", strerror (errno)); return FALSE; } processed = NULL; /* Create contexts for each up interface */ for (ifa = ifa_list; ifa != NULL; ifa = ifa->ifa_next) { if (g_list_find_custom (processed, ifa->ifa_name, (GCompareFunc) strcmp) != NULL) continue; if (ifa->ifa_flags & IFF_UP) create_and_signal_context (manager, ifa->ifa_name); processed = g_list_append (processed, ifa->ifa_name); } g_list_free (processed); freeifaddrs (ifa_list); return FALSE; }