[glib] Add helper functions for connecting to service (#583061)
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Subject: [glib] Add helper functions for connecting to service (#583061)
- Date: Wed, 20 May 2009 06:42:33 -0400 (EDT)
commit 9033b37589fcdf42d10025ea9e4d0dfc2c018bf4
Author: Sjoerd Simons <sjoerd luon net>
Date: Wed May 20 12:41:50 2009 +0200
Add helper functions for connecting to service (#583061)
---
docs/reference/gio/gio-sections.txt | 3 +
gio/gio.symbols | 3 +
gio/gsocketclient.c | 93 +++++++++++++++++++++++++++++++++++
gio/gsocketclient.h | 15 ++++++
4 files changed, 114 insertions(+), 0 deletions(-)
diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt
index d882c01..9d9fe19 100644
--- a/docs/reference/gio/gio-sections.txt
+++ b/docs/reference/gio/gio-sections.txt
@@ -1691,6 +1691,9 @@ g_socket_client_connect_finish
g_socket_client_connect_to_host
g_socket_client_connect_to_host_async
g_socket_client_connect_to_host_finish
+g_socket_client_connect_to_service
+g_socket_client_connect_to_service_async
+g_socket_client_connect_to_service_finish
g_socket_client_set_family
g_socket_client_set_local_address
g_socket_client_set_protocol
diff --git a/gio/gio.symbols b/gio/gio.symbols
index ad15e40..dcdcb7f 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -1124,6 +1124,9 @@ g_socket_client_connect_finish
g_socket_client_connect_to_host
g_socket_client_connect_to_host_async
g_socket_client_connect_to_host_finish
+g_socket_client_connect_to_service
+g_socket_client_connect_to_service_async
+g_socket_client_connect_to_service_finish
g_socket_client_get_family
g_socket_client_get_local_address
g_socket_client_get_protocol
diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c
index 944b73c..bdb918d 100644
--- a/gio/gsocketclient.c
+++ b/gio/gsocketclient.c
@@ -36,6 +36,7 @@
#include <gio/gioerror.h>
#include <gio/gsocket.h>
#include <gio/gnetworkaddress.h>
+#include <gio/gnetworkservice.h>
#include <gio/gsocketaddress.h>
#include "glibintl.h"
@@ -596,6 +597,48 @@ g_socket_client_connect_to_host (GSocketClient *client,
return connection;
}
+/**
+ * g_socket_client_connect_to_service:
+ * @client: a #GSocketConnection
+ * @domain: a domain name
+ * @service: the name of the service to connect to
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: a pointer to a #GError, or %NULL
+ * @returns: a #GSocketConnection if successful, or %NULL on error
+ *
+ * Attempts to create a TCP connection to a service.
+ *
+ * This call looks up the SRV record for @service at @domain for the
+ * "tcp" protocol. It then attempts to connect, in turn, to each of
+ * the hosts providing the service until either a connection succeeds
+ * or there are no hosts remaining.
+ *
+ * Upon a successful connection, a new #GSocketConnection is constructed
+ * and returned. The caller owns this new object and must drop their
+ * reference to it when finished with it.
+ *
+ * In the event of any failure (DNS error, service not found, no hosts
+ * connectable) %NULL is returned and @error (if non-%NULL) is set
+ * accordingly.
+ **/
+GSocketConnection *
+g_socket_client_connect_to_service (GSocketClient *client,
+ const char *domain,
+ const char *service,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GSocketConnectable *connectable;
+ GSocketConnection *connection;
+
+ connectable = g_network_service_new (service, "tcp", domain);
+ connection = g_socket_client_connect (client, connectable,
+ cancellable, error);
+ g_object_unref (connectable);
+
+ return connection;
+}
+
typedef struct
{
GSimpleAsyncResult *result;
@@ -857,6 +900,35 @@ g_socket_client_connect_to_host_async (GSocketClient *client,
}
/**
+ * g_socket_client_connect_to_service_async:
+ * @client: a #GSocketClient
+ * @domain: a domain name
+ * @service: the name of the service to connect to
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: a #GAsyncReadyCallback
+ * @user_data: user data for the callback
+ *
+ * This is the asynchronous version of
+ * g_socket_client_connect_to_service().
+ **/
+void
+g_socket_client_connect_to_service_async (GSocketClient *client,
+ const char *domain,
+ const char *service,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSocketConnectable *connectable;
+
+ connectable = g_network_service_new (service, "tcp", domain);
+ g_socket_client_connect_async (client,
+ connectable, cancellable,
+ callback, user_data);
+ g_object_unref (connectable);
+}
+
+/**
* g_socket_client_connect_finish:
* @client: a #GSocketClient.
* @result: a #GAsyncResult.
@@ -903,5 +975,26 @@ g_socket_client_connect_to_host_finish (GSocketClient *client,
return g_socket_client_connect_finish (client, result, error);
}
+/**
+ * g_socket_client_connect_to_service_finish:
+ * @client: a #GSocketClient.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to
+ * ignore.
+ *
+ * Finishes an async connect operation. See g_socket_client_connect_to_service_async()
+ *
+ * Returns: a #GSocketConnection on success, %NULL on error.
+ *
+ * Since: 2.22
+ **/
+GSocketConnection *
+g_socket_client_connect_to_service_finish (GSocketClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ return g_socket_client_connect_finish (client, result, error);
+}
+
#define __G_SOCKET_CLIENT_C__
#include "gioaliasdef.c"
diff --git a/gio/gsocketclient.h b/gio/gsocketclient.h
index b04f57b..990d23b 100644
--- a/gio/gsocketclient.h
+++ b/gio/gsocketclient.h
@@ -92,6 +92,11 @@ GSocketConnection * g_socket_client_connect_to_host (GSocket
int default_port,
GCancellable *cancellable,
GError **error);
+GSocketConnection * g_socket_client_connect_to_service (GSocketClient *client,
+ const char *domain,
+ const char *service,
+ GCancellable *cancellable,
+ GError **error);
void g_socket_client_connect_async (GSocketClient *client,
GSocketConnectable *connectable,
GCancellable *cancellable,
@@ -110,6 +115,16 @@ GSocketConnection * g_socket_client_connect_to_host_finish (GSocket
GAsyncResult *result,
GError **error);
+void g_socket_client_connect_to_service_async (GSocketClient *client,
+ const char *domain,
+ const char *service,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GSocketConnection * g_socket_client_connect_to_service_finish (GSocketClient *client,
+ GAsyncResult *result,
+ GError **error);
+
G_END_DECLS
#endif /* __G_SOCKET_CLIENT_H___ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]