From f72083efb5f88ad2ff27776629e43aa37833881f Mon Sep 17 00:00:00 2001 From: Samuel Cormier-Iijima Date: Fri, 29 Feb 2008 13:01:41 -0500 Subject: [PATCH] Clean up TcpClient --- gnio/gtcpclient.c | 110 ++++++++++------------------------------------ gnio/gtcpclient.h | 2 +- 2 files changed, 23 insertions(+), 89 deletions(-) diff --git a/gnio/gtcpclient.c b/gnio/gtcpclient.c index ae8de6d..4898399 100644 --- a/gnio/gtcpclient.c +++ b/gnio/gtcpclient.c @@ -113,7 +113,7 @@ g_tcp_client_class_init (GTcpClientClass *klass) "address", "the remote address the socket will connect to", G_TYPE_SOCKET_ADDRESS, - G_TYPE_CONSTRUCT_ONLY | G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK)); + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK)); } static void @@ -123,15 +123,22 @@ g_tcp_client_init (GTcpClient *client) } GTcpClient * -g_tcp_client_new (GInetSocketAddress *address, - GError **error) +g_tcp_client_new (const gchar *hostname, + gushort port) +{ + return NULL; +} + +GTcpClient * +g_tcp_client_new_with_address (GInetSocketAddress *address) { return NULL; } gboolean -g_tcp_client_connect (GTcpClient *client, - GError **error) +g_tcp_client_connect (GTcpClient *client, + GCancellable *cancellable, + GError **error) { return FALSE; } @@ -140,7 +147,7 @@ typedef struct { GAsyncReadyCallback callback; GCancellable *cancellable; gpointer user_data; - GSocket *socket; + GTcpClient *client; gchar address_buffer[256]; gsize address_length; } ConnectData; @@ -150,106 +157,33 @@ connect_callback (ConnectData *data, GIOCondition condition, gint fd) { - GSocket *socket; - GSimpleAsyncResult *result = NULL; - gint sockerr = 0; - gsize sockerr_size = 1; - - socket = data->socket; - - if (condition & G_IO_OUT) - { - result = g_simple_async_result_new (G_OBJECT (socket), data->callback, data->user_data, g_socket_connect_async); - } - else if (condition & G_IO_ERR) - { - if (getsockopt (fd, SOL_SOCKET, SO_ERROR, (gpointer) &sockerr, &sockerr_size) < 0) - g_warning ("getsockopt: %s", g_strerror (errno)); - - if (sockerr != 0) - result = g_simple_async_result_new_error (G_OBJECT (socket), data->callback, data->user_data, G_IO_ERROR, g_io_error_from_errno (sockerr), "error connecting: %s", g_strerror (sockerr)); - else - g_warning ("getsockopt SO_ERROR returned no error, with sockerr = %d", sockerr); - } - - g_simple_async_result_complete (result); - - g_object_unref (result); - return FALSE; } void -g_socket_connect_async (GTcpClient *client, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +g_tcp_client_connect_async (GTcpClient *client, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { - GSource *source; - GSimpleAsyncResult *result; - ConnectData *data; - gint ret; - gchar buffer[256]; - gsize len; - - g_return_if_fail (G_IS_SOCKET (socket) && G_IS_SOCKET_ADDRESS (address)); - - if (g_socket_get_blocking (socket)) - g_socket_set_blocking (socket, FALSE); - - g_socket_address_to_native (address, buffer); - - len = g_socket_address_native_size (address); - if ((ret = connect (socket->priv->fd, (struct sockaddr *) buffer, len)) < 0) - { - if (errno == EINPROGRESS) - { - source = _g_fd_source_new (socket->priv->fd, G_IO_OUT | G_IO_ERR, cancellable); - - data = g_new (ConnectData, 1); - - data->socket = socket; - data->callback = callback; - data->cancellable = cancellable; - data->user_data = user_data; - data->address_length = len; - memcpy (data->address_buffer, buffer, len); - - g_source_set_callback (source, (GSourceFunc) connect_callback, data, g_free); - - g_source_attach (source, NULL); - } - else - { - g_simple_async_report_error_in_idle (G_OBJECT (socket), callback, user_data, G_IO_ERROR, g_io_error_from_errno (errno), "error connecting: %s", g_strerror (errno)); - } - } - else - { - result = g_simple_async_result_new (G_OBJECT (socket), callback, user_data, g_socket_connect_async); - - g_simple_async_result_complete_in_idle (result); - - g_object_unref (result); - } } gboolean -g_socket_connect_finish (GSocket *socket, - GAsyncResult *result, - GError **error) +g_tcp_client_connect_finish (GTcpClient *client, + GAsyncResult *result, + GError **error) { GSimpleAsyncResult *simple; - g_return_val_if_fail (G_IS_SOCKET (socket), FALSE); + g_return_val_if_fail (G_IS_TCP_CLIENT (client), FALSE); simple = G_SIMPLE_ASYNC_RESULT (result); if (g_simple_async_result_propagate_error (simple, error)) return FALSE; - g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_socket_connect_async); + g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_tcp_client_connect_async); return TRUE; } diff --git a/gnio/gtcpclient.h b/gnio/gtcpclient.h index 8a1bf7f..e94df73 100644 --- a/gnio/gtcpclient.h +++ b/gnio/gtcpclient.h @@ -63,7 +63,7 @@ GTcpClient * g_tcp_client_new (const gchar *hostname, GTcpClient * g_tcp_client_new_from_address (GInetSocketAddress *address); -gboolean g_tcp_client_connect (GTcpClient *clientt, +gboolean g_tcp_client_connect (GTcpClient *client, GCancellable *cancellable, GError **error); -- 2.20.1