--- gtk/spice-proxy.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/gtk/spice-proxy.c b/gtk/spice-proxy.c index 7711e83..8613469 100644 --- a/gtk/spice-proxy.c +++ b/gtk/spice-proxy.c @@ -19,6 +19,7 @@ #include <stdlib.h> #include <string.h> +#include "glib-compat.h" #include "spice-client.h" #include "spice-proxy.h" @@ -78,6 +79,18 @@ gboolean spice_proxy_parse(SpiceProxy *self, const gchar *proxyuri, GError **err spice_proxy_set_protocol(self, "http"); spice_proxy_set_port(self, 3128); + /* yes, that parser is bad, we need GUri... */ + if (strstr(uri, "@")) { + gchar *saveptr, *saveptr2; + gchar *next = strstr(uri, "@") + 1; + gchar *auth = strtok_r(uri, "@", &saveptr); + 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 = next; + } + /* max 2 parts, host:port */ gchar **proxyv = g_strsplit(uri, ":", 2); const gchar *proxy_port = NULL; @@ -303,7 +316,14 @@ gchar* spice_proxy_to_string(SpiceProxy* self) if (p->protocol == NULL || p->hostname == NULL) return NULL; - return g_strdup_printf("%s://%s:%u", p->protocol, p->hostname, p->port); + if (p->user || p->password) + return g_strdup_printf("%s://%s:%s@%s:%u", + p->protocol, + p->user, p->password, + p->hostname, p->port); + else + return g_strdup_printf("%s://%s:%u", + p->protocol, p->hostname, p->port); } G_GNUC_INTERNAL -- 1.8.4.2 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel