diff --git a/libgupnp/gupnp-context.c b/libgupnp/gupnp-context.c index c48628254a5629106e529d758b30b0d1326b7df9..dc1e9cf39c1b13ea347b593a8074f916361d56c9 100644 --- a/libgupnp/gupnp-context.c +++ b/libgupnp/gupnp-context.c @@ -1697,6 +1697,8 @@ gupnp_context_rewrite_uri_to_uri (GUPnPContext *context, const char *uri) const char *host = NULL; GUri *soup_uri = NULL; GInetAddress *addr = NULL; + GResolver *resolver = NULL; + GList *addr_list = NULL; int index = -1; GError *error = NULL; @@ -1714,6 +1716,17 @@ gupnp_context_rewrite_uri_to_uri (GUPnPContext *context, const char *uri) host = g_uri_get_host (soup_uri); addr = g_inet_address_new_from_string (host); + if (addr == NULL) { + resolver = g_resolver_get_default (); + addr_list = g_resolver_lookup_by_name (resolver, + host, NULL, NULL); + if (addr_list != NULL) + addr = G_INET_ADDRESS(addr_list->data); + else { + g_object_unref (resolver); + return NULL; + } + } index = gssdp_client_get_index (GSSDP_CLIENT (context)); if (g_inet_address_get_is_link_local (addr) && @@ -1739,7 +1752,12 @@ gupnp_context_rewrite_uri_to_uri (GUPnPContext *context, const char *uri) soup_uri = NULL; } - g_object_unref (addr); + if (addr_list != NULL) + g_resolver_free_addresses (addr_list); + else + g_object_unref (addr); + if (resolver != NULL) + g_object_unref (resolver); return soup_uri; }