[Spice-devel] [spice-gtk 11/13] Make SpiceURI a public API

Christophe Fergeau cfergeau at redhat.com
Wed Feb 12 04:01:12 PST 2014


On Mon, Feb 03, 2014 at 07:02:42PM +0100, Marc-André Lureau wrote:
> From: Marc-André Lureau <marcandre.lureau at redhat.com>
> 
> Generalize a little bit SpiceProxy to allow easy URI manipulation by
> clients.
> ---
>  doc/reference/Makefile.am            |   1 +
>  doc/reference/spice-gtk-docs.xml     |   1 +
>  doc/reference/spice-gtk-sections.txt |  26 ++
>  gtk/Makefile.am                      |   5 +-
>  gtk/map-file                         |  12 +
>  gtk/spice-client.h                   |   1 +
>  gtk/spice-glib-sym-file              |  12 +
>  gtk/spice-proxy.c                    | 357 --------------------------
>  gtk/spice-proxy.h                    |  64 -----
>  gtk/spice-session-priv.h             |   3 +-
>  gtk/spice-session.c                  |  28 +--
>  gtk/spice-session.h                  |   1 +
>  gtk/spice-uri-priv.h                 |  30 +++
>  gtk/spice-uri.c                      | 473 +++++++++++++++++++++++++++++++++++
>  gtk/spice-uri.h                      |  52 ++++
>  15 files changed, 627 insertions(+), 439 deletions(-)
>  delete mode 100644 gtk/spice-proxy.c
>  delete mode 100644 gtk/spice-proxy.h
>  create mode 100644 gtk/spice-uri-priv.h
>  create mode 100644 gtk/spice-uri.c
>  create mode 100644 gtk/spice-uri.h
> 
> diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
> index a0a856c..76c7d34 100644
> --- a/doc/reference/Makefile.am
> +++ b/doc/reference/Makefile.am
> @@ -44,6 +44,7 @@ IGNORE_HFILES=					\
>  	spice-marshal.h				\
>  	spice-pulse.h				\
>  	spice-session-priv.h			\
> +	spice-uri-priv.h			\
>  	spice-util-priv.h			\
>  	spice-widget-priv.h			\
>  	usb-acl-helper.h			\
> diff --git a/doc/reference/spice-gtk-docs.xml b/doc/reference/spice-gtk-docs.xml
> index 4a9a3cf..d2c1a2b 100644
> --- a/doc/reference/spice-gtk-docs.xml
> +++ b/doc/reference/spice-gtk-docs.xml
> @@ -52,6 +52,7 @@
>        <xi:include href="xml/smartcard-manager.xml"/>
>        <xi:include href="xml/usb-device-manager.xml"/>
>        <xi:include href="xml/spice-util.xml"/>
> +      <xi:include href="xml/spice-uri.xml"/>
>      </chapter>
>  
>    </part>
> diff --git a/doc/reference/spice-gtk-sections.txt b/doc/reference/spice-gtk-sections.txt
> index 8d61aa9..411ca0e 100644
> --- a/doc/reference/spice-gtk-sections.txt
> +++ b/doc/reference/spice-gtk-sections.txt
> @@ -429,3 +429,29 @@ SPICE_PORT_CHANNEL_GET_CLASS
>  SpicePortChannelPrivate
>  </SECTION>
>  
> +<SECTION>
> +<FILE>spice-uri</FILE>
> +spice_uri_get_scheme
> +spice_uri_set_scheme
> +spice_uri_get_hostname
> +spice_uri_set_hostname
> +spice_uri_get_port
> +spice_uri_set_port
> +spice_uri_get_user
> +spice_uri_set_user
> +spice_uri_get_password
> +spice_uri_set_password
> +spice_uri_to_string
> +SpiceURIClass
> +SpiceURI
> +<SUBSECTION Standard>
> +SPICE_IS_URI
> +SPICE_IS_URI_CLASS
> +SPICE_TYPE_URI
> +SPICE_URI
> +SPICE_URI_CLASS
> +SPICE_URI_GET_CLASS
> +spice_uri_get_type
> +<SUBSECTION Private>
> +SpiceURIPrivate
> +</SECTION>
> diff --git a/gtk/Makefile.am b/gtk/Makefile.am
> index 840d129..45d6796 100644
> --- a/gtk/Makefile.am
> +++ b/gtk/Makefile.am
> @@ -248,8 +248,8 @@ libspice_client_glib_2_0_la_SOURCES =			\
>  	channel-usbredir-priv.h				\
>  	smartcard-manager.c				\
>  	smartcard-manager-priv.h			\
> -	spice-proxy.c					\
> -	spice-proxy.h					\
> +	spice-uri.c					\
> +	spice-uri-priv.h				\
>  	usb-device-manager.c				\
>  	usb-device-manager-priv.h			\
>  	usbutil.c					\
> @@ -282,6 +282,7 @@ libspice_client_glibincludedir = $(includedir)/spice-client-glib-2.0
>  libspice_client_glibinclude_HEADERS =	\
>  	spice-audio.h			\
>  	spice-client.h			\
> +	spice-uri.h			\
>  	spice-types.h			\
>  	spice-session.h			\
>  	spice-channel.h			\
> diff --git a/gtk/map-file b/gtk/map-file
> index 368b44f..cf65db0 100644
> --- a/gtk/map-file
> +++ b/gtk/map-file
> @@ -118,6 +118,18 @@ spice_util_get_debug;
>  spice_util_get_version_string;
>  spice_util_set_debug;
>  spice_uuid_to_string;
> +spice_uri_get_hostname;
> +spice_uri_get_password;
> +spice_uri_get_port;
> +spice_uri_get_scheme;
> +spice_uri_get_type;
> +spice_uri_get_user;
> +spice_uri_set_hostname;
> +spice_uri_set_password;
> +spice_uri_set_port;
> +spice_uri_set_scheme;
> +spice_uri_set_user;
> +spice_uri_to_string;
>  local:
>  *;
>  };
> diff --git a/gtk/spice-client.h b/gtk/spice-client.h
> index 730d11a..975259a 100644
> --- a/gtk/spice-client.h
> +++ b/gtk/spice-client.h
> @@ -31,6 +31,7 @@
>  #include "spice-session.h"
>  #include "spice-channel.h"
>  #include "spice-option.h"
> +#include "spice-uri.h"
>  
>  #include "channel-main.h"
>  #include "channel-display.h"
> diff --git a/gtk/spice-glib-sym-file b/gtk/spice-glib-sym-file
> index 4fc8643..ac7e871 100644
> --- a/gtk/spice-glib-sym-file
> +++ b/gtk/spice-glib-sym-file
> @@ -92,3 +92,15 @@ spice_util_get_debug
>  spice_util_get_version_string
>  spice_util_set_debug
>  spice_uuid_to_string
> +spice_uri_get_hostname
> +spice_uri_get_password
> +spice_uri_get_port
> +spice_uri_get_scheme
> +spice_uri_get_type
> +spice_uri_get_user
> +spice_uri_set_hostname
> +spice_uri_set_password
> +spice_uri_set_port
> +spice_uri_set_scheme
> +spice_uri_set_user
> +spice_uri_to_string
> diff --git a/gtk/spice-proxy.c b/gtk/spice-proxy.c
> deleted file mode 100644
> index ecf7e54..0000000
> --- a/gtk/spice-proxy.c
> +++ /dev/null
> @@ -1,357 +0,0 @@
> -/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> -/*
> -   Copyright (C) 2012 Red Hat, Inc.
> -
> -   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, see <http://www.gnu.org/licenses/>.
> -*/
> -
> -#include <stdlib.h>
> -#include <string.h>
> -
> -#include "glib-compat.h"
> -#include "spice-client.h"
> -#include "spice-proxy.h"
> -
> -struct _SpiceProxyPrivate {
> -    gchar *protocol;
> -    gchar *hostname;
> -    guint port;
> -    gchar *user;
> -    gchar *password;
> -};
> -
> -#define SPICE_PROXY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), SPICE_TYPE_PROXY, SpiceProxyPrivate))
> -
> -G_DEFINE_TYPE(SpiceProxy, spice_proxy, G_TYPE_OBJECT);
> -
> -enum  {
> -    SPICE_PROXY_DUMMY_PROPERTY,
> -    SPICE_PROXY_PROTOCOL,
> -    SPICE_PROXY_USER,
> -    SPICE_PROXY_PASSWORD,
> -    SPICE_PROXY_HOSTNAME,
> -    SPICE_PROXY_PORT
> -};
> -
> -G_GNUC_INTERNAL
> -SpiceProxy* spice_proxy_new(void)
> -{
> -    SpiceProxy * self = NULL;
> -    self = (SpiceProxy*)g_object_new(SPICE_TYPE_PROXY, NULL);
> -    return self;
> -}
> -
> -G_GNUC_INTERNAL
> -gboolean spice_proxy_parse(SpiceProxy *self, const gchar *proxyuri, GError **error)
> -{
> -    gchar *dup, *uri;
> -    gboolean success = FALSE;
> -    size_t len;
> -
> -    g_return_val_if_fail(self != NULL, FALSE);
> -    g_return_val_if_fail(proxyuri != NULL, FALSE);
> -
> -    uri = dup = g_strdup(proxyuri);
> -    /* FIXME: use GUri when it is ready... only support http atm */
> -    /* the code is voluntarily not parsing thoroughly the uri */
> -    if (g_ascii_strncasecmp("http://", uri, 7) == 0) {
> -        uri += 7;
> -        spice_proxy_set_protocol(self, "http");
> -        spice_proxy_set_port(self, 3128);
> -    } else if (g_ascii_strncasecmp("https://", uri, 8) == 0) {
> -        uri += 8;
> -        spice_proxy_set_protocol(self, "https");
> -        spice_proxy_set_port(self, 3129);
> -    } else {
> -        return FALSE;
> -    }
> -    /* remove trailing slash */
> -    len = strlen(uri);
> -    for (; len > 0; len--)
> -        if (uri[len-1] == '/')
> -            uri[len-1] = '\0';
> -        else
> -            break;
> -
> -
> -    gchar *saveptr, *auth = strtok_r(uri, "@", &saveptr);
> -    if (saveptr && *saveptr) {
> -        gchar *saveptr2;
> -        const gchar *user = strtok_r(auth, ":", &saveptr2);
> -        const gchar *pass = strtok_r(NULL, ":", &saveptr2);
> -        spice_proxy_set_user(self, user);
> -        spice_proxy_set_password(self, pass);
> -        uri = saveptr;
> -    }
> -
> -    gchar **proxyv = g_strsplit(uri, ":", 2);
> -    const gchar *proxy_port = NULL;
> -
> -    if (proxyv[0] == NULL || strlen(proxyv[0]) == 0) {
> -        g_set_error(error, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
> -                    "Invalid hostname in proxy address");
> -        goto end;
> -    }
> -
> -    spice_proxy_set_hostname(self, proxyv[0]);
> -    if (proxyv[0] != NULL)
> -        proxy_port = proxyv[1];
> -
> -    if (proxy_port != NULL) {
> -        char *endptr;
> -        guint port = strtoul(proxy_port, &endptr, 10);
> -        if (*endptr != '\0') {
> -            g_set_error(error, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
> -                        "Invalid proxy port: %s", proxy_port);
> -            goto end;
> -        }
> -        spice_proxy_set_port(self, port);
> -    }
> -
> -    success = TRUE;
> -
> -end:
> -    g_free(dup);
> -    g_strfreev(proxyv);
> -    return success;
> -}
> -
> -G_GNUC_INTERNAL
> -const gchar* spice_proxy_get_protocol(SpiceProxy *self)
> -{
> -    g_return_val_if_fail(SPICE_IS_PROXY(self), NULL);
> -    return self->priv->protocol;
> -}
> -
> -G_GNUC_INTERNAL
> -void spice_proxy_set_protocol(SpiceProxy *self, const gchar *value)
> -{
> -    g_return_if_fail(SPICE_IS_PROXY(self));
> -
> -    g_free(self->priv->protocol);
> -    self->priv->protocol = g_strdup(value);
> -    g_object_notify((GObject *)self, "protocol");
> -}
> -
> -G_GNUC_INTERNAL
> -const gchar* spice_proxy_get_hostname(SpiceProxy *self)
> -{
> -    g_return_val_if_fail(SPICE_IS_PROXY(self), NULL);
> -    return self->priv->hostname;
> -}
> -
> -
> -G_GNUC_INTERNAL
> -void spice_proxy_set_hostname(SpiceProxy *self, const gchar *value)
> -{
> -    g_return_if_fail(SPICE_IS_PROXY(self));
> -
> -    g_free(self->priv->hostname);
> -    self->priv->hostname = g_strdup(value);
> -    g_object_notify((GObject *)self, "hostname");
> -}
> -
> -G_GNUC_INTERNAL
> -guint spice_proxy_get_port(SpiceProxy *self)
> -{
> -    g_return_val_if_fail(SPICE_IS_PROXY(self), 0);
> -    return self->priv->port;
> -}
> -
> -G_GNUC_INTERNAL
> -void spice_proxy_set_port(SpiceProxy *self, guint port)
> -{
> -    g_return_if_fail(SPICE_IS_PROXY(self));
> -    self->priv->port = port;
> -    g_object_notify((GObject *)self, "port");
> -}
> -
> -static void spice_proxy_get_property(GObject *object, guint property_id,
> -                                     GValue *value, GParamSpec *pspec)
> -{
> -    SpiceProxy *self;
> -    self = G_TYPE_CHECK_INSTANCE_CAST(object, SPICE_TYPE_PROXY, SpiceProxy);
> -
> -    switch (property_id) {
> -    case SPICE_PROXY_PROTOCOL:
> -        g_value_set_string(value, spice_proxy_get_protocol(self));
> -        break;
> -    case SPICE_PROXY_HOSTNAME:
> -        g_value_set_string(value, spice_proxy_get_hostname(self));
> -        break;
> -    case SPICE_PROXY_PORT:
> -        g_value_set_uint(value, spice_proxy_get_port(self));
> -        break;
> -    case SPICE_PROXY_USER:
> -        g_value_set_string(value, spice_proxy_get_user(self));
> -        break;
> -    case SPICE_PROXY_PASSWORD:
> -        g_value_set_string(value, spice_proxy_get_password(self));
> -        break;
> -    default:
> -        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
> -        break;
> -    }
> -}
> -
> -
> -static void spice_proxy_set_property(GObject *object, guint property_id,
> -                                     const GValue *value, GParamSpec *pspec)
> -{
> -    SpiceProxy * self;
> -    self = G_TYPE_CHECK_INSTANCE_CAST(object, SPICE_TYPE_PROXY, SpiceProxy);
> -
> -    switch (property_id) {
> -    case SPICE_PROXY_PROTOCOL:
> -        spice_proxy_set_protocol(self, g_value_get_string(value));
> -        break;
> -    case SPICE_PROXY_HOSTNAME:
> -        spice_proxy_set_hostname(self, g_value_get_string(value));
> -        break;
> -    case SPICE_PROXY_USER:
> -        spice_proxy_set_user(self, g_value_get_string(value));
> -        break;
> -    case SPICE_PROXY_PASSWORD:
> -        spice_proxy_set_password(self, g_value_get_string(value));
> -        break;
> -    case SPICE_PROXY_PORT:
> -        spice_proxy_set_port(self, g_value_get_uint(value));
> -        break;
> -    default:
> -        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
> -        break;
> -    }
> -}
> -
> -static void spice_proxy_finalize(GObject* obj)
> -{
> -    SpiceProxy *self;
> -
> -    self = G_TYPE_CHECK_INSTANCE_CAST(obj, SPICE_TYPE_PROXY, SpiceProxy);
> -    g_free(self->priv->protocol);
> -    g_free(self->priv->hostname);
> -
> -    G_OBJECT_CLASS (spice_proxy_parent_class)->finalize (obj);
> -}
> -
> -static void spice_proxy_init (SpiceProxy *self)
> -{
> -    self->priv = SPICE_PROXY_GET_PRIVATE(self);
> -}
> -
> -
> -static void spice_proxy_class_init(SpiceProxyClass *klass)
> -{
> -    spice_proxy_parent_class = g_type_class_peek_parent (klass);
> -    g_type_class_add_private(klass, sizeof(SpiceProxyPrivate));
> -
> -    G_OBJECT_CLASS (klass)->get_property = spice_proxy_get_property;
> -    G_OBJECT_CLASS (klass)->set_property = spice_proxy_set_property;
> -    G_OBJECT_CLASS (klass)->finalize = spice_proxy_finalize;
> -
> -    g_object_class_install_property(G_OBJECT_CLASS (klass),
> -                                    SPICE_PROXY_PROTOCOL,
> -                                    g_param_spec_string ("protocol",
> -                                                         "protocol",
> -                                                         "protocol",
> -                                                         NULL,
> -                                                         G_PARAM_STATIC_STRINGS |
> -                                                         G_PARAM_READWRITE));
> -
> -    g_object_class_install_property(G_OBJECT_CLASS (klass),
> -                                    SPICE_PROXY_HOSTNAME,
> -                                    g_param_spec_string ("hostname",
> -                                                         "hostname",
> -                                                         "hostname",
> -                                                         NULL,
> -                                                         G_PARAM_STATIC_STRINGS |
> -                                                         G_PARAM_READWRITE));
> -
> -    g_object_class_install_property(G_OBJECT_CLASS (klass),
> -                                    SPICE_PROXY_PORT,
> -                                    g_param_spec_uint ("port",
> -                                                       "port",
> -                                                       "port",
> -                                                       0, G_MAXUINT, 0,
> -                                                       G_PARAM_STATIC_STRINGS |
> -                                                       G_PARAM_READWRITE));
> -
> -    g_object_class_install_property(G_OBJECT_CLASS (klass),
> -                                    SPICE_PROXY_USER,
> -                                    g_param_spec_string ("user",
> -                                                         "user",
> -                                                         "user",
> -                                                         NULL,
> -                                                         G_PARAM_STATIC_STRINGS |
> -                                                         G_PARAM_READWRITE));
> -
> -    g_object_class_install_property(G_OBJECT_CLASS (klass),
> -                                    SPICE_PROXY_PASSWORD,
> -                                    g_param_spec_string ("password",
> -                                                         "password",
> -                                                         "password",
> -                                                         NULL,
> -                                                         G_PARAM_STATIC_STRINGS |
> -                                                         G_PARAM_READWRITE));
> -}
> -
> -G_GNUC_INTERNAL
> -gchar* spice_proxy_to_string(SpiceProxy* self)
> -{
> -    SpiceProxyPrivate *p;
> -
> -    g_return_val_if_fail(SPICE_IS_PROXY(self), NULL);
> -    p = self->priv;
> -
> -    if (p->protocol == NULL || p->hostname == NULL)
> -        return NULL;
> -
> -    return g_strdup_printf("%s://%s:%u", p->protocol, p->hostname, p->port);
> -}
> -
> -G_GNUC_INTERNAL
> -const gchar* spice_proxy_get_user(SpiceProxy *self)
> -{
> -    g_return_val_if_fail(SPICE_IS_PROXY(self), NULL);
> -    return self->priv->user;
> -}
> -
> -
> -G_GNUC_INTERNAL
> -void spice_proxy_set_user(SpiceProxy *self, const gchar *value)
> -{
> -    g_return_if_fail(SPICE_IS_PROXY(self));
> -
> -    g_free(self->priv->user);
> -    self->priv->user = g_strdup(value);
> -    g_object_notify((GObject *)self, "user");
> -}
> -
> -G_GNUC_INTERNAL
> -const gchar* spice_proxy_get_password(SpiceProxy *self)
> -{
> -    g_return_val_if_fail(SPICE_IS_PROXY(self), NULL);
> -    return self->priv->password;
> -}
> -
> -
> -G_GNUC_INTERNAL
> -void spice_proxy_set_password(SpiceProxy *self, const gchar *value)
> -{
> -    g_return_if_fail(SPICE_IS_PROXY(self));
> -
> -    g_free(self->priv->password);
> -    self->priv->password = g_strdup(value);
> -    g_object_notify((GObject *)self, "password");
> -}
> diff --git a/gtk/spice-proxy.h b/gtk/spice-proxy.h
> deleted file mode 100644
> index e74053b..0000000
> --- a/gtk/spice-proxy.h
> +++ /dev/null
> @@ -1,64 +0,0 @@
> -/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> -/*
> -   Copyright (C) 2012 Red Hat, Inc.
> -
> -   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, see <http://www.gnu.org/licenses/>.
> -*/
> -#ifndef __SPICE_PROXY_H__
> -#define __SPICE_PROXY_H__
> -
> -#include <glib-object.h>
> -
> -G_BEGIN_DECLS
> -
> -#define SPICE_TYPE_PROXY (spice_proxy_get_type ())
> -#define SPICE_PROXY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SPICE_TYPE_PROXY, SpiceProxy))
> -#define SPICE_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SPICE_TYPE_PROXY, SpiceProxyClass))
> -#define SPICE_IS_PROXY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SPICE_TYPE_PROXY))
> -#define SPICE_IS_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SPICE_TYPE_PROXY))
> -#define SPICE_PROXY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SPICE_TYPE_PROXY, SpiceProxyClass))
> -
> -typedef struct _SpiceProxy SpiceProxy;
> -typedef struct _SpiceProxyClass SpiceProxyClass;
> -typedef struct _SpiceProxyPrivate SpiceProxyPrivate;
> -
> -struct _SpiceProxy {
> -    GObject parent_instance;
> -    SpiceProxyPrivate * priv;
> -};
> -
> -struct _SpiceProxyClass {
> -    GObjectClass parent_class;
> -};
> -
> -
> -GType spice_proxy_get_type(void) G_GNUC_CONST;
> -
> -SpiceProxy* spice_proxy_new(void);
> -gboolean spice_proxy_parse(SpiceProxy* self, const gchar* uri, GError** error);
> -const gchar* spice_proxy_get_protocol(SpiceProxy* self);
> -void spice_proxy_set_protocol(SpiceProxy* self, const gchar* value);
> -const gchar* spice_proxy_get_hostname(SpiceProxy* self);
> -void spice_proxy_set_hostname(SpiceProxy* self, const gchar* value);
> -guint spice_proxy_get_port(SpiceProxy* self);
> -void spice_proxy_set_port(SpiceProxy* self, guint port);
> -gchar *spice_proxy_to_string(SpiceProxy* self);
> -const gchar* spice_proxy_get_user(SpiceProxy* self);
> -void spice_proxy_set_user(SpiceProxy* self, const gchar* value);
> -const gchar* spice_proxy_get_password(SpiceProxy* self);
> -void spice_proxy_set_password(SpiceProxy* self, const gchar* value);
> -
> -G_END_DECLS
> -
> -#endif /* __SPICE_PROXY_H__ */
> diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h
> index 55fee47..0dc2bfb 100644
> --- a/gtk/spice-session-priv.h
> +++ b/gtk/spice-session-priv.h
> @@ -22,7 +22,6 @@
>  #include <gio/gio.h>
>  #include "desktop-integration.h"
>  #include "spice-session.h"
> -#include "spice-proxy.h"
>  #include "spice-gtk-session.h"
>  #include "spice-channel-cache.h"
>  #include "decode.h"
> @@ -45,7 +44,7 @@ struct _SpiceSessionPrivate {
>      char              *cert_subject;
>      guint             verify;
>      gboolean          read_only;
> -    SpiceProxy        *proxy;
> +    SpiceURI          *proxy;
>  
>      /* whether to enable audio */
>      gboolean          audio;
> diff --git a/gtk/spice-session.c b/gtk/spice-session.c
> index 29c84e8..e229c64 100644
> --- a/gtk/spice-session.c
> +++ b/gtk/spice-session.c
> @@ -28,7 +28,7 @@
>  #include "gio-coroutine.h"
>  #include "glib-compat.h"
>  #include "wocky-http-proxy.h"
> -#include "spice-proxy.h"
> +#include "spice-uri-priv.h"
>  #include "channel-playback-priv.h"
>  
>  struct channel {
> @@ -139,7 +139,7 @@ static void do_emit_main_context(GObject *object, int signum, gpointer params)
>  static void update_proxy(SpiceSession *self, const gchar *str)
>  {
>      SpiceSessionPrivate *s = self->priv;
> -    SpiceProxy *proxy = NULL;
> +    SpiceURI *proxy = NULL;
>      GError *error = NULL;
>  
>      if (str == NULL)
> @@ -149,8 +149,8 @@ static void update_proxy(SpiceSession *self, const gchar *str)
>          return;
>      }
>  
> -    proxy = spice_proxy_new();
> -    if (!spice_proxy_parse(proxy, str, &error))
> +    proxy = spice_uri_new();
> +    if (!spice_uri_parse(proxy, str, &error))
>          g_clear_object(&proxy);
>      if (error) {
>          g_warning("%s", error->message);
> @@ -269,7 +269,7 @@ static int spice_uri_create(SpiceSession *session, char *dest, int len)
>      return pos;
>  }
>  
> -static int spice_uri_parse(SpiceSession *session, const char *original_uri)
> +static int spice_parse_uri(SpiceSession *session, const char *original_uri)
>  {
>      SpiceSessionPrivate *s = SPICE_SESSION_GET_PRIVATE(session);
>      gchar *host = NULL, *port = NULL, *tls_port = NULL, *uri = NULL, *password = NULL;
> @@ -499,7 +499,7 @@ static void spice_session_get_property(GObject    *gobject,
>          g_value_set_pointer(value, s->uuid);
>  	break;
>      case PROP_PROXY:
> -        g_value_take_string(value, spice_proxy_to_string(s->proxy));
> +        g_value_take_string(value, spice_uri_to_string(s->proxy));
>  	break;
>      default:
>  	G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
> @@ -547,7 +547,7 @@ static void spice_session_set_property(GObject      *gobject,
>      case PROP_URI:
>          str = g_value_get_string(value);
>          if (str != NULL)
> -            spice_uri_parse(session, str);
> +            spice_parse_uri(session, str);
>          break;
>      case PROP_CLIENT_SOCKETS:
>          s->client_provided_sockets = g_value_get_boolean(value);
> @@ -1664,7 +1664,7 @@ struct spice_open_host {
>      struct coroutine *from;
>      SpiceSession *session;
>      SpiceChannel *channel;
> -    SpiceProxy *proxy;
> +    SpiceURI *proxy;
>      int port;
>      GCancellable *cancellable;
>      GError *error;
> @@ -1723,11 +1723,11 @@ static void proxy_lookup_ready(GObject *source_object, GAsyncResult *result,
>  
>      for (it = addresses; it != NULL; it = it->next) {
>          address = g_proxy_address_new(G_INET_ADDRESS(it->data),
> -                                      spice_proxy_get_port(open_host->proxy),
> -                                      spice_proxy_get_protocol(open_host->proxy),
> +                                      spice_uri_get_port(open_host->proxy),
> +                                      spice_uri_get_scheme(open_host->proxy),
>                                        s->host, open_host->port,
> -                                      spice_proxy_get_user(open_host->proxy),
> -                                      spice_proxy_get_password(open_host->proxy));
> +                                      spice_uri_get_user(open_host->proxy),
> +                                      spice_uri_get_password(open_host->proxy));
>          if (address != NULL)
>              break;
>      }
> @@ -1755,7 +1755,7 @@ static gboolean open_host_idle_cb(gpointer data)
>  
>      if (open_host->proxy)
>          g_resolver_lookup_by_name_async(g_resolver_get_default(),
> -                                        spice_proxy_get_hostname(open_host->proxy),
> +                                        spice_uri_get_hostname(open_host->proxy),
>                                          open_host->cancellable,
>                                          proxy_lookup_ready, open_host);
>      else
> @@ -1770,7 +1770,7 @@ static gboolean open_host_idle_cb(gpointer data)
>  
>      SPICE_DEBUG("open host %s:%d", s->host, open_host->port);
>      if (open_host->proxy != NULL) {
> -        gchar *str = spice_proxy_to_string(open_host->proxy);
> +        gchar *str = spice_uri_to_string(open_host->proxy);
>          SPICE_DEBUG("(with proxy %s)", str);
>          g_free(str);
>      }
> diff --git a/gtk/spice-session.h b/gtk/spice-session.h
> index b07f525..4ea645e 100644
> --- a/gtk/spice-session.h
> +++ b/gtk/spice-session.h
> @@ -20,6 +20,7 @@
>  
>  #include <glib-object.h>
>  #include "spice-types.h"
> +#include "spice-uri.h"
>  #include "spice-glib-enums.h"
>  #include "spice-util.h"
>  
> diff --git a/gtk/spice-uri-priv.h b/gtk/spice-uri-priv.h
> new file mode 100644
> index 0000000..54351de
> --- /dev/null
> +++ b/gtk/spice-uri-priv.h
> @@ -0,0 +1,30 @@
> +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> +/*
> +  Copyright (C) 2012 Red Hat, Inc.
> +
> +  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, see <http://www.gnu.org/licenses/>.
> +*/
> +#ifndef __SPICE_URI_PRIV_H__
> +#define __SPICE_URI_PRIV_H__
> +
> +#include "spice-uri.h"
> +
> +G_BEGIN_DECLS
> +
> +SpiceURI* spice_uri_new(void);
> +gboolean spice_uri_parse(SpiceURI* self, const gchar* uri, GError** error);
> +
> +G_END_DECLS
> +
> +#endif /* __SPICE_URI_PRIV_H__ */
> diff --git a/gtk/spice-uri.c b/gtk/spice-uri.c
> new file mode 100644
> index 0000000..8a51208
> --- /dev/null
> +++ b/gtk/spice-uri.c
> @@ -0,0 +1,473 @@
> +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> +/*
> +   Copyright (C) 2012 Red Hat, Inc.
> +
> +   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, see <http://www.gnu.org/licenses/>.
> +*/
> +
> +#include <stdlib.h>
> +#include <string.h>
> +
> +#include "glib-compat.h"
> +#include "spice-client.h"
> +#include "spice-uri.h"
> +
> +/**
> + * SECTION:spice-uri
> + * @short_description: URIs handling
> + * @title: SpiceURI
> + * @section_id:
> + * @stability: Stable
> + * @include: spice-uri.h
> + *
> + * A SpiceURI represents a (parsed) URI.
> + * Since: 0.23

Needs to be set to 0.24 throughout this file.

> +/**
> + * spice_uri_set_user:
> + * @uri: a #SpiceURI
> + * @password: the user, or %NULL.

@user

> + *
> + * Sets @uri's user to @password.

@user

> + * Since: 0.23
> + **/

ACK with these small changes

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20140212/bc6ff517/attachment-0001.pgp>


More information about the Spice-devel mailing list