diff --git a/gio/gproxyaddressenumerator.c b/gio/gproxyaddressenumerator.c index 4e6d58a2d..98987f227 100644 --- a/gio/gproxyaddressenumerator.c +++ b/gio/gproxyaddressenumerator.c @@ -29,6 +29,7 @@ #include "ginetaddress.h" #include "gioerror.h" #include "glibintl.h" +#include "glib-private.h" #include "gnetworkaddress.h" #include "gnetworkingprivate.h" #include "gproxy.h" @@ -158,9 +159,13 @@ next_enumerator (GProxyAddressEnumeratorPrivate *priv) else { GError *error = NULL; + int default_port; - connectable = g_network_address_parse_uri (priv->proxy_uri, 0, &error); + default_port = GLIB_PRIVATE_CALL (g_uri_get_default_scheme_port) (priv->proxy_type); + if (default_port == -1) + default_port = 0; + connectable = g_network_address_parse_uri (priv->proxy_uri, default_port, &error); if (error) { g_warning ("Invalid proxy URI '%s': %s", diff --git a/glib/glib-private.c b/glib/glib-private.c index 6b2205f86..9f4887aa2 100644 --- a/glib/glib-private.c +++ b/glib/glib-private.c @@ -69,6 +69,8 @@ glib__private__ (void) g_win32_pop_invalid_parameter_handler, g_find_program_for_path, + + g_uri_get_default_scheme_port, }; return &table; diff --git a/glib/glib-private.h b/glib/glib-private.h index 85bea5ffe..f49e38f7b 100644 --- a/glib/glib-private.h +++ b/glib/glib-private.h @@ -158,6 +158,8 @@ char *g_find_program_for_path (const char *program, const char *path, const char *working_dir); +int g_uri_get_default_scheme_port (const char *scheme); + #define GLIB_PRIVATE_CALL(symbol) (glib__private__()->symbol) @@ -222,6 +224,9 @@ typedef struct { const char *path, const char *working_dir); + /* See guri.c */ + int (* g_uri_get_default_scheme_port) (const char *scheme); + /* Add other private functions here, initialize them in glib-private.c */ } GLibPrivateVTable; diff --git a/glib/guri.c b/glib/guri.c index f470ddcb1..58725503d 100644 --- a/glib/guri.c +++ b/glib/guri.c @@ -25,6 +25,7 @@ #include "glib.h" #include "glibintl.h" +#include "glib-private.h" #include "guriprivate.h" /** @@ -808,8 +809,8 @@ normalize_port (const char *scheme, return port; } -static int -default_scheme_port (const char *scheme) +int +g_uri_get_default_scheme_port (const char *scheme) { if (strcmp (scheme, "http") == 0 || strcmp (scheme, "ws") == 0) return 80; @@ -1022,7 +1023,7 @@ g_uri_split_internal (const gchar *uri_string, } if (port && *port == -1) - *port = default_scheme_port (scheme_str); + *port = g_uri_get_default_scheme_port (scheme_str); } g_free (normalized_scheme); @@ -2510,7 +2511,7 @@ g_uri_get_port (GUri *uri) g_return_val_if_fail (uri != NULL, -1); if (uri->port == -1 && uri->flags & G_URI_FLAGS_SCHEME_NORMALIZE) - return default_scheme_port (uri->scheme); + return g_uri_get_default_scheme_port (uri->scheme); return uri->port; }