Add helper functions for connecting to service (#583061)

This commit is contained in:
Sjoerd Simons 2009-05-20 12:41:50 +02:00 committed by Alexander Larsson
parent 25800ed4a3
commit 9033b37589
4 changed files with 114 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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;
@ -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"

View File

@ -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___ */