diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> | 2010-08-10 15:45:32 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> | 2010-08-19 16:32:37 -0400 |
commit | fc03ecce831cd94639df1a355f5dd8c9b8eebfae (patch) | |
tree | 71f288015f6635414aaa05efdc6f2e7a65fb9e7a /gio/gsocketaddress.c | |
parent | f82f484b8ffa18aab10e79baa96bcfa438f8dc5b (diff) |
Implemented proxy_enumerate() for all Connectables
This patch implements method proxy_enumerate from GSocketConnectable for
all connectables (GNetworkAddress, GNetworkService, GInetSocketAddress
and GUnixSocketAddress).
Reviewed-by: Dan Winship <danw@gnome.org>
Diffstat (limited to 'gio/gsocketaddress.c')
-rw-r--r-- | gio/gsocketaddress.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/gio/gsocketaddress.c b/gio/gsocketaddress.c index 6511e57c3..95fbea944 100644 --- a/gio/gsocketaddress.c +++ b/gio/gsocketaddress.c @@ -28,6 +28,7 @@ #include "ginetaddress.h" #include "ginetsocketaddress.h" #include "gnetworkingprivate.h" +#include "gproxyaddressenumerator.h" #include "gsocketaddressenumerator.h" #include "gsocketconnectable.h" #include "glibintl.h" @@ -62,8 +63,9 @@ enum PROP_FAMILY }; -static void g_socket_address_connectable_iface_init (GSocketConnectableIface *iface); -static GSocketAddressEnumerator *g_socket_address_connectable_enumerate (GSocketConnectable *connectable); +static void g_socket_address_connectable_iface_init (GSocketConnectableIface *iface); +static GSocketAddressEnumerator *g_socket_address_connectable_enumerate (GSocketConnectable *connectable); +static GSocketAddressEnumerator *g_socket_address_connectable_proxy_enumerate (GSocketConnectable *connectable); G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GSocketAddress, g_socket_address, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (G_TYPE_SOCKET_CONNECTABLE, @@ -125,6 +127,7 @@ static void g_socket_address_connectable_iface_init (GSocketConnectableIface *connectable_iface) { connectable_iface->enumerate = g_socket_address_connectable_enumerate; + connectable_iface->proxy_enumerate = g_socket_address_connectable_proxy_enumerate; } static void @@ -351,3 +354,38 @@ g_socket_address_connectable_enumerate (GSocketConnectable *connectable) return (GSocketAddressEnumerator *)sockaddr_enum; } + +static GSocketAddressEnumerator * +g_socket_address_connectable_proxy_enumerate (GSocketConnectable *connectable) +{ + GSocketAddressEnumerator *addr_enum = NULL; + + if (G_IS_INET_SOCKET_ADDRESS (connectable) && + !G_IS_PROXY_ADDRESS (connectable)) + { + GInetAddress *addr; + guint port; + gchar *uri; + gchar *ip; + + g_object_get (connectable, "address", &addr, "port", &port, NULL); + + ip = g_inet_address_to_string (addr); + uri = g_strdup_printf ("none://%s:%u", ip, port); + + addr_enum = g_object_new (G_TYPE_PROXY_ADDRESS_ENUMERATOR, + "connectable", connectable, + "uri", uri, + NULL); + + g_object_unref (addr); + g_free (ip); + g_free (uri); + } + else + { + addr_enum = g_socket_address_connectable_enumerate (connectable); + } + + return addr_enum; +} |