[Spice-devel] [PATCH spice-gtk] Remove wocky HTTP proxy

marcandre.lureau at redhat.com marcandre.lureau at redhat.com
Thu Aug 3 12:12:10 UTC 2017


From: Marc-André Lureau <marcandre.lureau at redhat.com>

That HTTP proxy code has been added to glib 2.43.92.

Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
---
 doc/reference/Makefile.am |   1 -
 src/Makefile.am           |   2 -
 src/spice-session.c       |   4 -
 src/wocky-http-proxy.c    | 522 ----------------------------------------------
 src/wocky-http-proxy.h    |  54 -----
 5 files changed, 583 deletions(-)
 delete mode 100644 src/wocky-http-proxy.c
 delete mode 100644 src/wocky-http-proxy.h

diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
index c7d09f0..9fda456 100644
--- a/doc/reference/Makefile.am
+++ b/doc/reference/Makefile.am
@@ -58,7 +58,6 @@ IGNORE_HFILES=					\
 	vmcstream.h				\
 	vncdisplaykeymap.h			\
 	win-usb-dev.h				\
-	wocky-http-proxy.h			\
 	$(NULL)
 
 # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
diff --git a/src/Makefile.am b/src/Makefile.am
index 4dbc2eb..4b6e46d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -255,8 +255,6 @@ libspice_client_glib_2_0_la_SOURCES =			\
 	$(USB_ACL_HELPER_SRCS)				\
 	vmcstream.c					\
 	vmcstream.h					\
-	wocky-http-proxy.c				\
-	wocky-http-proxy.h				\
 							\
 	decode.h					\
 	decode-glz.c					\
diff --git a/src/spice-session.c b/src/spice-session.c
index a729cc3..d236808 100644
--- a/src/spice-session.c
+++ b/src/spice-session.c
@@ -30,7 +30,6 @@
 #include "spice-util-priv.h"
 #include "spice-session-priv.h"
 #include "gio-coroutine.h"
-#include "wocky-http-proxy.h"
 #include "spice-uri-priv.h"
 #include "channel-playback-priv.h"
 #include "spice-audio-priv.h"
@@ -845,9 +844,6 @@ static void spice_session_class_init(SpiceSessionClass *klass)
 {
     GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
 
-    _wocky_http_proxy_get_type();
-    _wocky_https_proxy_get_type();
-
     gobject_class->dispose      = spice_session_dispose;
     gobject_class->finalize     = spice_session_finalize;
     gobject_class->get_property = spice_session_get_property;
diff --git a/src/wocky-http-proxy.c b/src/wocky-http-proxy.c
deleted file mode 100644
index 8120a55..0000000
--- a/src/wocky-http-proxy.c
+++ /dev/null
@@ -1,522 +0,0 @@
- /* wocky-http-proxy.c: Source for WockyHttpProxy
- *
- * Copyright (C) 2010 Collabora, Ltd.
- * Copyright (C) 2014 Red Hat, Inc.
- * @author Nicolas Dufresne <nicolas.dufresne at collabora.co.uk>
- * @author Marc-André Lureau <marcandre.lureau at redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include "config.h"
-
-#include "wocky-http-proxy.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-
-struct _WockyHttpProxy
-{
-  GObject parent;
-};
-
-struct _WockyHttpProxyClass
-{
-  GObjectClass parent_class;
-};
-
-static void wocky_http_proxy_iface_init (GProxyInterface *proxy_iface);
-
-#define wocky_http_proxy_get_type _wocky_http_proxy_get_type
-G_DEFINE_TYPE_WITH_CODE (WockyHttpProxy, wocky_http_proxy, G_TYPE_OBJECT,
-  G_IMPLEMENT_INTERFACE (G_TYPE_PROXY,
-    wocky_http_proxy_iface_init)
-  g_io_extension_point_set_required_type (
-    g_io_extension_point_register (G_PROXY_EXTENSION_POINT_NAME),
-    G_TYPE_PROXY);
-  g_io_extension_point_implement (G_PROXY_EXTENSION_POINT_NAME,
-    g_define_type_id, "http", 0))
-
-static void
-wocky_http_proxy_init (WockyHttpProxy *proxy)
-{
-}
-
-#define HTTP_END_MARKER "\r\n\r\n"
-
-static gchar *
-create_request (GProxyAddress *proxy_address, gboolean *has_cred)
-{
-  const gchar *hostname;
-  gint port;
-  const gchar *username;
-  const gchar *password;
-  GString *request;
-  gchar *ascii_hostname;
-
-  if (has_cred)
-    *has_cred = FALSE;
-
-  hostname = g_proxy_address_get_destination_hostname (proxy_address);
-  port = g_proxy_address_get_destination_port (proxy_address);
-  username = g_proxy_address_get_username (proxy_address);
-  password = g_proxy_address_get_password (proxy_address);
-
-  request = g_string_new (NULL);
-
-  ascii_hostname = g_hostname_to_ascii (hostname);
-  g_string_append_printf (request,
-      "CONNECT %s:%i HTTP/1.0\r\n"
-        "Host: %s:%i\r\n"
-        "Proxy-Connection: keep-alive\r\n"
-        "User-Agent: GLib/%i.%i\r\n",
-      ascii_hostname, port,
-      ascii_hostname, port,
-      GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION);
-  g_free (ascii_hostname);
-
-  if (username != NULL && password != NULL)
-    {
-      gchar *cred;
-      gchar *base64_cred;
-
-      if (has_cred)
-        *has_cred = TRUE;
-
-      cred = g_strdup_printf ("%s:%s", username, password);
-      base64_cred = g_base64_encode ((guchar *) cred, strlen (cred));
-      g_free (cred);
-      g_string_append_printf (request,
-          "Proxy-Authorization: Basic %s\r\n",
-          base64_cred);
-      g_free (base64_cred);
-    }
-
-  g_string_append (request, "\r\n");
-
-  return g_string_free (request, FALSE);
-}
-
-static gboolean
-check_reply (const gchar *buffer, gboolean has_cred, GError **error)
-{
-  gint err_code;
-  const gchar *ptr = buffer + 7;
-
-  if (strncmp (buffer, "HTTP/1.", 7) != 0
-      || (*ptr != '0' && *ptr != '1'))
-    {
-      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
-          "Bad HTTP proxy reply");
-      return FALSE;
-    }
-
-  ptr++;
-  while (*ptr == ' ') ptr++;
-
-  err_code = atoi (ptr);
-
-  if (err_code < 200 || err_code >= 300)
-    {
-      const gchar *msg_start;
-      gchar *msg;
-
-      while (g_ascii_isdigit (*ptr))
-        ptr++;
-
-      while (*ptr == ' ')
-        ptr++;
-
-      msg_start = ptr;
-
-      ptr = strchr (msg_start, '\r');
-
-      if (ptr == NULL)
-        ptr = strchr (msg_start, '\0');
-
-      msg = g_strndup (msg_start, ptr - msg_start);
-
-      if (err_code == 407)
-        {
-          if (has_cred)
-            g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_AUTH_FAILED,
-                "HTTP proxy authentication failed");
-          else
-            g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_NEED_AUTH,
-                "HTTP proxy authentication required");
-        }
-      else if (msg[0] == '\0')
-        g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
-            "Connection failed due to broken HTTP reply");
-      else
-        g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
-            "HTTP proxy connection failed: %i %s",
-            err_code, msg);
-
-      g_free (msg);
-      return FALSE;
-    }
-
-  return TRUE;
-}
-
-static GIOStream *
-wocky_http_proxy_connect (GProxy *proxy,
-    GIOStream *io_stream,
-    GProxyAddress *proxy_address,
-    GCancellable *cancellable,
-    GError **error)
-{
-  GInputStream *in;
-  GOutputStream *out;
-  GDataInputStream *data_in = NULL;
-  gchar *buffer = NULL;
-  gboolean has_cred;
-  GIOStream *tlsconn = NULL;
-
-  if (WOCKY_IS_HTTPS_PROXY (proxy))
-    {
-      tlsconn = g_tls_client_connection_new (io_stream,
-                                             G_SOCKET_CONNECTABLE(proxy_address),
-                                             error);
-      if (!tlsconn)
-          goto error;
-
-      GTlsCertificateFlags tls_validation_flags = G_TLS_CERTIFICATE_VALIDATE_ALL;
-#ifdef DEBUG
-      tls_validation_flags &= ~(G_TLS_CERTIFICATE_UNKNOWN_CA | G_TLS_CERTIFICATE_BAD_IDENTITY);
-#endif
-      g_tls_client_connection_set_validation_flags (G_TLS_CLIENT_CONNECTION (tlsconn),
-                                                    tls_validation_flags);
-      if (!g_tls_connection_handshake (G_TLS_CONNECTION (tlsconn), cancellable, error))
-          goto error;
-
-      io_stream = tlsconn;
-    }
-
-  in = g_io_stream_get_input_stream (io_stream);
-  out = g_io_stream_get_output_stream (io_stream);
-
-  data_in = g_data_input_stream_new (in);
-  g_filter_input_stream_set_close_base_stream (G_FILTER_INPUT_STREAM (data_in),
-      FALSE);
-
-  buffer = create_request (proxy_address, &has_cred);
-  if (!g_output_stream_write_all (out, buffer, strlen (buffer), NULL,
-        cancellable, error))
-      goto error;
-
-  g_free (buffer);
-  buffer = g_data_input_stream_read_until (data_in, HTTP_END_MARKER, NULL,
-      cancellable, error);
-  g_clear_object(&data_in);
-
-  if (buffer == NULL)
-    {
-      if (error && (*error == NULL))
-        g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
-            "HTTP proxy server closed connection unexpectedly.");
-      goto error;
-    }
-
-  if (!check_reply (buffer, has_cred, error))
-    goto error;
-
-  g_free (buffer);
-
-  g_object_ref (io_stream);
-  g_clear_object (&tlsconn);
-
-  return io_stream;
-
-error:
-  g_clear_object (&tlsconn);
-  g_clear_object (&data_in);
-  g_free (buffer);
-  return NULL;
-}
-
-
-typedef struct
-{
-  GIOStream *io_stream;
-  gchar *buffer;
-  gssize length;
-  gssize offset;
-  GDataInputStream *data_in;
-  gboolean has_cred;
-} ConnectAsyncData;
-
-static void request_write_cb (GObject *source,
-    GAsyncResult *res,
-    gpointer user_data);
-static void reply_read_cb (GObject *source,
-    GAsyncResult *res,
-    gpointer user_data);
-
-static void
-free_connect_data (ConnectAsyncData *data)
-{
-  if (data->io_stream != NULL)
-    g_object_unref (data->io_stream);
-
-  g_free (data->buffer);
-
-  if (data->data_in != NULL)
-    g_object_unref (data->data_in);
-
-  g_free (data);
-}
-
-static void
-complete_async_from_error (GTask *task, GError *error)
-{
-  if (error == NULL)
-    g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
-        "HTTP proxy server closed connection unexpectedly.");
-
-  g_task_return_error (task, error);
-  g_object_unref (task);
-}
-
-static void
-do_write (GAsyncReadyCallback callback, GTask *task)
-{
-  GOutputStream *out;
-  ConnectAsyncData *data = g_task_get_task_data (task);
-  out = g_io_stream_get_output_stream (data->io_stream);
-  g_output_stream_write_async (out,
-      data->buffer + data->offset,
-      data->length - data->offset,
-      G_PRIORITY_DEFAULT, g_task_get_cancellable(task),
-      callback, task);
-}
-
-static void
-stream_connected (GTask *task,
-                  GIOStream *io_stream)
-{
-  GInputStream *in;
-  ConnectAsyncData *data = g_task_get_task_data (task);
-
-  data->io_stream = g_object_ref (io_stream);
-  in = g_io_stream_get_input_stream (io_stream);
-  data->data_in = g_data_input_stream_new (in);
-  g_filter_input_stream_set_close_base_stream (G_FILTER_INPUT_STREAM (data->data_in),
-                                               FALSE);
-
-  do_write (request_write_cb, task);
-}
-
-static void
-handshake_completed (GObject *source_object,
-                     GAsyncResult *res,
-                     gpointer user_data)
-{
-  GTlsConnection *conn = G_TLS_CONNECTION (source_object);
-  GTask *task = G_TASK (user_data);
-  GError *error = NULL;
-
-  if (!g_tls_connection_handshake_finish (conn, res, &error))
-    {
-      complete_async_from_error (task, error);
-      return;
-    }
-
-  stream_connected (task, G_IO_STREAM (conn));
-}
-
-static void
-wocky_http_proxy_connect_async (GProxy *proxy,
-    GIOStream *io_stream,
-    GProxyAddress *proxy_address,
-    GCancellable *cancellable,
-    GAsyncReadyCallback callback,
-    gpointer user_data)
-{
-  GTask *task;
-  ConnectAsyncData *data;
-
-  task = g_task_new (proxy,
-                     cancellable,
-                     callback,
-                     user_data);
-
-  data = g_new0 (ConnectAsyncData, 1);
-
-  data->buffer = create_request (proxy_address, &data->has_cred);
-  data->length = strlen (data->buffer);
-  data->offset = 0;
-
-  g_task_set_task_data (task, data, (GDestroyNotify)free_connect_data);
-
-  if (WOCKY_IS_HTTPS_PROXY (proxy))
-    {
-      GError *error = NULL;
-      GIOStream *tlsconn;
-
-      tlsconn = g_tls_client_connection_new (io_stream,
-                                             G_SOCKET_CONNECTABLE(proxy_address),
-                                             &error);
-      if (!tlsconn)
-        {
-          complete_async_from_error (task, error);
-          return;
-        }
-
-      g_return_if_fail (tlsconn != NULL);
-
-      GTlsCertificateFlags tls_validation_flags = G_TLS_CERTIFICATE_VALIDATE_ALL;
-#ifdef DEBUG
-      tls_validation_flags &= ~(G_TLS_CERTIFICATE_UNKNOWN_CA | G_TLS_CERTIFICATE_BAD_IDENTITY);
-#endif
-      g_tls_client_connection_set_validation_flags (G_TLS_CLIENT_CONNECTION (tlsconn),
-                                                    tls_validation_flags);
-      g_tls_connection_handshake_async (G_TLS_CONNECTION (tlsconn),
-                                        G_PRIORITY_DEFAULT, cancellable,
-                                        handshake_completed, task);
-    }
-  else
-    {
-      stream_connected (task, io_stream);
-    }
-}
-
-static void
-request_write_cb (GObject *source,
-    GAsyncResult *res,
-    gpointer user_data)
-{
-  GError *error = NULL;
-  GTask *task = G_TASK(user_data);
-  ConnectAsyncData *data = g_task_get_task_data (task);
-  gssize written;
-
-  written = g_output_stream_write_finish (G_OUTPUT_STREAM (source),
-      res, &error);
-  if (written < 0)
-    {
-      complete_async_from_error (task, error);
-      return;
-    }
-
-  data->offset += written;
-
-   if (data->offset == data->length)
-    {
-      g_clear_pointer(&data->buffer, g_free);
-
-      g_data_input_stream_read_until_async (data->data_in,
-          HTTP_END_MARKER,
-          G_PRIORITY_DEFAULT,
-          g_task_get_cancellable(task),
-          reply_read_cb, task);
-
-    }
-  else
-    {
-      do_write (request_write_cb, task);
-    }
-}
-
-static void
-reply_read_cb (GObject *source,
-    GAsyncResult *res,
-    gpointer user_data)
-{
-  GError *error = NULL;
-  GTask *task = G_TASK(user_data);
-  ConnectAsyncData *data = g_task_get_task_data (task);
-
-  data->buffer = g_data_input_stream_read_until_finish (data->data_in,
-      res, NULL, &error);
-
-  if (data->buffer == NULL)
-    {
-      complete_async_from_error (task, error);
-      return;
-    }
-
-  if (!check_reply (data->buffer, data->has_cred, &error))
-    {
-      complete_async_from_error (task, error);
-      return;
-    }
-
-  g_task_return_pointer (task, data->io_stream, (GDestroyNotify) g_object_unref);
-  data->io_stream = NULL;
-  g_object_unref (task);
-}
-
-static GIOStream *
-wocky_http_proxy_connect_finish (GProxy *proxy,
-    GAsyncResult *result,
-    GError **error)
-{
-  GTask *task = G_TASK (result);
-
-  return g_task_propagate_pointer (task, error);
-}
-
-static gboolean
-wocky_http_proxy_supports_hostname (GProxy *proxy)
-{
-  return TRUE;
-}
-
-static void
-wocky_http_proxy_class_init (WockyHttpProxyClass *class)
-{
-}
-
-static void
-wocky_http_proxy_iface_init (GProxyInterface *proxy_iface)
-{
-  proxy_iface->connect  = wocky_http_proxy_connect;
-  proxy_iface->connect_async = wocky_http_proxy_connect_async;
-  proxy_iface->connect_finish = wocky_http_proxy_connect_finish;
-  proxy_iface->supports_hostname = wocky_http_proxy_supports_hostname;
-}
-
-struct _WockyHttpsProxy
-{
-  WockyHttpProxy parent;
-};
-
-struct _WockyHttpsProxyClass
-{
-  WockyHttpProxyClass parent_class;
-};
-
-#define wocky_https_proxy_get_type _wocky_https_proxy_get_type
-G_DEFINE_TYPE_WITH_CODE (WockyHttpsProxy, wocky_https_proxy, WOCKY_TYPE_HTTP_PROXY,
-  G_IMPLEMENT_INTERFACE (G_TYPE_PROXY,
-    wocky_http_proxy_iface_init)
-  g_io_extension_point_set_required_type (
-    g_io_extension_point_register (G_PROXY_EXTENSION_POINT_NAME),
-    G_TYPE_PROXY);
-  g_io_extension_point_implement (G_PROXY_EXTENSION_POINT_NAME,
-    g_define_type_id, "https", 0))
-
-static void
-wocky_https_proxy_init (WockyHttpsProxy *proxy)
-{
-}
-
-static void
-wocky_https_proxy_class_init (WockyHttpsProxyClass *class)
-{
-}
diff --git a/src/wocky-http-proxy.h b/src/wocky-http-proxy.h
deleted file mode 100644
index 38dad78..0000000
--- a/src/wocky-http-proxy.h
+++ /dev/null
@@ -1,54 +0,0 @@
- /* wocky-http-proxy.h: Header for WockyHttpProxy
- *
- * Copyright (C) 2010 Collabora, Ltd.
- * @author Nicolas Dufresne <nicolas.dufresne at collabora.co.uk>
- *
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-#ifndef _WOCKY_HTTP_PROXY_H_
-#define _WOCKY_HTTP_PROXY_H_
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define WOCKY_TYPE_HTTP_PROXY         (_wocky_http_proxy_get_type ())
-#define WOCKY_HTTP_PROXY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), WOCKY_TYPE_HTTP_PROXY, WockyHttpProxy))
-#define WOCKY_HTTP_PROXY_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), WOCKY_TYPE_HTTP_PROXY, WockyHttpProxyClass))
-#define WOCKY_IS_HTTP_PROXY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), WOCKY_TYPE_HTTP_PROXY))
-#define WOCKY_IS_HTTP_PROXY_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), WOCKY_TYPE_HTTP_PROXY))
-#define WOCKY_HTTP_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), WOCKY_TYPE_HTTP_PROXY, WockyHttpProxyClass))
-
-typedef struct _WockyHttpProxy        WockyHttpProxy;
-typedef struct _WockyHttpProxyClass   WockyHttpProxyClass;
-
-GType _wocky_http_proxy_get_type (void);
-
-#define WOCKY_TYPE_HTTPS_PROXY         (_wocky_https_proxy_get_type ())
-#define WOCKY_HTTPS_PROXY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), WOCKY_TYPE_HTTPS_PROXY, WockyHttpsProxy))
-#define WOCKY_HTTPS_PROXY_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), WOCKY_TYPE_HTTPS_PROXY, WockyHttpsProxyClass))
-#define WOCKY_IS_HTTPS_PROXY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), WOCKY_TYPE_HTTPS_PROXY))
-#define WOCKY_IS_HTTPS_PROXY_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), WOCKY_TYPE_HTTPS_PROXY))
-#define WOCKY_HTTPS_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), WOCKY_TYPE_HTTPS_PROXY, WockyHttpsProxyClass))
-
-typedef struct _WockyHttpsProxy        WockyHttpsProxy;
-typedef struct _WockyHttpsProxyClass   WockyHttpsProxyClass;
-
-GType _wocky_https_proxy_get_type (void);
-
-G_END_DECLS
-
-#endif /* _WOCKY_HTTP_PROXY_H_ */
-- 
2.14.0.rc0.1.g40ca67566



More information about the Spice-devel mailing list