From: Sjoerd Simons Date: Wed, 20 May 2009 10:41:50 +0000 (+0200) Subject: Add helper functions for connecting to service (#583061) X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=9033b37589fcdf42d10025ea9e4d0dfc2c018bf4;p=dana%2Fcg-glib.git Add helper functions for connecting to service (#583061) --- diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt index d882c01a..9d9fe195 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 ad15e409..dcdcb7f2 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 944b73cb..bdb918da 100644 --- a/gio/gsocketclient.c +++ b/gio/gsocketclient.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #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; @@ -856,6 +899,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. @@ -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 b04f57be..990d23bf 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___ */