[glib] Implemented proxy sample code that connect to proxy



commit e2a90bcb5fc50f099cbf8df01a09697f7e48522d
Author: Nicolas Dufresne <nicolas dufresne collabora co uk>
Date:   Fri May 7 16:35:04 2010 -0400

    Implemented proxy sample code that connect to proxy

 gio/tests/proxy.c |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 83 insertions(+), 0 deletions(-)
---
diff --git a/gio/tests/proxy.c b/gio/tests/proxy.c
index e751c92..cf54d69 100644
--- a/gio/tests/proxy.c
+++ b/gio/tests/proxy.c
@@ -56,6 +56,7 @@ usage (void)
   fprintf (stderr, "       Use -netaddr to use GNetworkAddress enumerator (host:port).\n");
   fprintf (stderr, "       Use -neturi to use GNetworkAddress enumerator (uri).\n");
   fprintf (stderr, "       Use -netsrv to use GNetworkService enumerator (srv/protocol/domain).\n");
+  fprintf (stderr, "       Use -connect to create a connection using GSocketClient object (uri).\n");
   exit (1);
 }
 
@@ -481,6 +482,82 @@ use_network_service (gboolean synchronous)
   g_object_unref (enumerator);
 }
 
+static void
+_socket_connect_cb (GObject *object,
+		    GAsyncResult *result,
+		    gpointer user_data)
+{
+  GError *error = NULL;
+  GMainLoop *loop = user_data;
+  GSocketClient *client = G_SOCKET_CLIENT (object);
+  GSocketConnection *connection;
+
+  connection = g_socket_client_connect_to_uri_finish (client,
+						      result,
+						      &error);
+  if (connection)
+    {
+      GSocketAddress *proxy_addr;
+      proxy_addr = g_socket_connection_get_remote_address (connection, NULL);
+      print_proxy_address (proxy_addr);
+    }
+  else
+    {
+      print_and_free_error (error);
+    }
+
+  g_main_loop_quit (loop);
+}
+
+static void
+use_socket_client (gboolean synchronous)
+{
+  GError *error = NULL;
+  GSocketClient *client;
+
+  client = g_socket_client_new ();
+
+  printf ("Proxies for URI '%s' are:\n", info);
+
+  if (synchronous)
+    {
+      GSocketConnection *connection;
+      GSocketAddress *proxy_addr;
+
+      connection = g_socket_client_connect_to_uri (client,
+						   info,
+						   0,
+      						   cancellable,
+						   &error);
+
+      if (connection)
+	{
+	  proxy_addr = g_socket_connection_get_remote_address (connection, NULL);
+	  print_proxy_address (proxy_addr);
+	}
+      else
+	{
+	  print_and_free_error (error);
+	}
+    }
+  else
+    {
+      GMainLoop *loop = g_main_loop_new (NULL, FALSE);
+
+      g_socket_client_connect_to_uri_async (client,
+					    info,
+					    0,
+					    cancellable,
+					    _socket_connect_cb,
+					    loop);
+
+      g_main_loop_run (loop);
+      g_main_loop_unref (loop);
+    }
+
+  g_object_unref (client);
+}
+
 typedef enum
 {
   USE_RESOLVER,
@@ -493,6 +570,7 @@ typedef enum
   USE_NETWORK_ADDRESS,
   USE_NETWORK_URI,
   USE_NETWORK_SERVICE,
+  USE_SOCKET_CLIENT,
 } ProxyTestType;
 
 gint
@@ -526,6 +604,8 @@ main (gint argc, gchar **argv)
         type = USE_NETWORK_URI;
       else if (!strcmp (argv[1], "-netsrv"))
         type = USE_NETWORK_SERVICE;
+      else if (!strcmp (argv[1], "-connect"))
+        type = USE_SOCKET_CLIENT;
       else
 	usage ();
 
@@ -573,6 +653,9 @@ main (gint argc, gchar **argv)
     case USE_NETWORK_SERVICE:
       use_network_service (synchronous);
       break;
+    case USE_SOCKET_CLIENT:
+      use_socket_client (synchronous);
+      break;
     }
 
   return return_value;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]