summaryrefslogtreecommitdiff
path: root/gio/gsocketaddress.c
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.co.uk>2010-08-10 15:45:32 -0400
committerNicolas Dufresne <nicolas.dufresne@collabora.co.uk>2010-08-19 16:32:37 -0400
commitfc03ecce831cd94639df1a355f5dd8c9b8eebfae (patch)
tree71f288015f6635414aaa05efdc6f2e7a65fb9e7a /gio/gsocketaddress.c
parentf82f484b8ffa18aab10e79baa96bcfa438f8dc5b (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.c42
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;
+}