Clean up TcpClient
authorSamuel Cormier-Iijima <sciyoshi@gmail.com>
Fri, 29 Feb 2008 18:01:41 +0000 (13:01 -0500)
committerSamuel Cormier-Iijima <sciyoshi@gmail.com>
Fri, 29 Feb 2008 18:01:41 +0000 (13:01 -0500)
gnio/gtcpclient.c
gnio/gtcpclient.h

index ae8de6d..4898399 100644 (file)
@@ -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;
 }
index 8a1bf7f..e94df73 100644 (file)
@@ -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);