[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