[Spice-devel] Testing spice-webdav - problem with spice-webdavd in Windows XP

Submitted by Benjamin Vanheuverzwijn on May 15, 2014, 4:21 p.m.

Details

Message ID CAFphhwtBC1m2xppbX4v1G1nY=U5wSiPAgOjuVEpKPQaHo47dhw@mail.gmail.com
State New
Headers show

Not browsing as part of any series.

Commit Message

Benjamin Vanheuverzwijn May 15, 2014, 4:21 p.m.
The problem was that i was running qemu-1.7.1 without this patch "hook
qemu_chr_fe_set_open()":
http://lists.gnu.org/archive/html/qemu-devel/2014-01/msg01239.html

It won't work directly to qemu-1.7.1, this one (attached) should work.

Thanks to Marc-Andre for the support!

On Tue, May 13, 2014 at 5:25 PM, Benjamin Vanheuverzwijn
<bvanheu@gmail.com>wrote:

> Hey!
>
> I'm currently trying to share a directory through spice using webdav.
>
> I've followed this guide (
> http://lists.freedesktop.org/archives/spice-devel/2014-April/016582.html)
> but i have a problem with my Windows XP SP3 guest.
>
> I've installed this package "
> http://elmarco.fedorapeople.org/spice-webdavd-x86-0.1.24.msi", but the
> "spice-webdavd" would not start:
>
> --------------->8---------------
> $ net start spice-webdavd
> The Spice webdav proxy service is starting.
> The Spice webdav proxy service could not be started.
>
> The service did not report an error.
>
> More help is available by typing NET HELPMSG 3534.
> --------------->8---------------
>
> I'm not familiar with Windows, so i'm not sure where to look. I'm
> currently installing mingw to be able to debug.
>
> I use these arguments in QEMU:
> -device virtserialport,bus=virtio-serial0.0,nr=4,chardev=charchannel3,id=channel3,name=org.spice-space.webdav.0
> -chardev spiceport,name=org.spice-space.webdav.0,id=charchannel3
>
> The device "org.spice-space.webdav.0" appears in my VM (i can see it with
> winobj.exe from sysinternals).
>
> Anyone encountered the same problem?
>
> Thanks!
>
> --
>
> More info about my setup:
>
> The host running the virtual machines:
> Centos 6.5
> - QEMU emulator version 1.7.1
>  - spice-protocol 0.12.6
> - spice-server 0.12.4.128-e3da-dirty
>
> The host running the spice client (desktop):
> ArchLinux up-to-date
> - spicy 0.24
> - spice-protocol 0.12.6
>
> The virtual machine
> Windows XP SP3 up-to-date
> - virtio-win 0.1-52
> - QXL 0.1-16
> - mingw-vdagent-win 0.7.0
>
> --
> Benjamin Vanheuverzwijn
>

Patch hide | download patch | download mbox

--- a/spice-qemu-char.c	2014-03-25 10:01:10.000000000 -0400
+++ b/spice-qemu-char.c	2014-05-15 11:43:09.439374029 -0400
@@ -213,7 +213,7 @@ 
     g_free(s);
 }
 
-static void spice_chr_set_fe_open(struct CharDriverState *chr, int fe_open)
+static void spice_vmc_set_fe_open(struct CharDriverState *chr, int fe_open)
 {
     SpiceCharDriver *s = chr->opaque;
     if (fe_open) {
@@ -223,6 +223,19 @@ 
     }
 }
 
+static void spice_port_set_fe_open(struct CharDriverState *chr, int fe_open)
+{
+#if SPICE_SERVER_VERSION >= 0x000c02
+    SpiceCharDriver *s = chr->opaque;
+
+    if (fe_open) {
+        spice_server_port_event(&s->sin, SPICE_PORT_EVENT_OPENED);
+    } else {
+        spice_server_port_event(&s->sin, SPICE_PORT_EVENT_CLOSED);
+    }
+#endif
+}
+
 static void print_allowed_subtypes(void)
 {
     const char** psubtype;
@@ -240,7 +253,8 @@ 
     fprintf(stderr, "\n");
 }
 
-static CharDriverState *chr_open(const char *subtype)
+static CharDriverState *chr_open(const char *subtype,
+    void (*set_fe_open)(struct CharDriverState *, int))
 {
     CharDriverState *chr;
     SpiceCharDriver *s;
@@ -254,7 +268,7 @@ 
     chr->chr_write = spice_chr_write;
     chr->chr_add_watch = spice_chr_add_watch;
     chr->chr_close = spice_chr_close;
-    chr->chr_set_fe_open = spice_chr_set_fe_open;
+    chr->chr_set_fe_open = set_fe_open;
     chr->explicit_be_open = true;
 
     QLIST_INSERT_HEAD(&spice_chars, s, next);
@@ -282,7 +296,7 @@ 
         return NULL;
     }
 
-    return chr_open(type);
+    return chr_open(type, spice_vmc_set_fe_open);
 }
 
 #if SPICE_SERVER_VERSION >= 0x000c02
@@ -296,7 +310,7 @@ 
         return NULL;
     }
 
-    chr = chr_open("port");
+    chr = chr_open("port", spice_port_set_fe_open);
     s = chr->opaque;
     s->sin.portname = g_strdup(name);