[Spice-commits] spice.proto

Marc-André Lureau elmarco at kemper.freedesktop.org
Wed Mar 19 06:48:18 PDT 2014

 spice.proto |    4 ++++
 1 file changed, 4 insertions(+)

New commits:
commit 01955e70079876de62bb8c86ee6793c1405fb47d
Author: Marc-André Lureau <marcandre.lureau at redhat.com>
Date:   Fri Jan 10 17:01:37 2014 +0100

    spice.proto: add webdav channel
    This channel provides a webdav server (rfc4918). This allows various
    guest or remote system that support webdav to access a folder shared by
    the client (some agent can be used to proxy the requests on a local port
    for example). The webdav server may also be accessed by an hypervisor as
    a remote filesystem interface, which can then be accessed by the guest
    via other means (fs/fat emulation, mtp device, etc)
    Due to the usage of a single channel stream and the need for concurrent
    requests, webdav clients streams are multiplexed. Each client stream is
    framed within 64k max messages (in little-endian)
     int64    client_id
     uint16   size
     char     data[size]
    A new client_id indicates a new connection. A new communication stream
    with the webdav server should be started. A client stream message of
    size 0 indicates a disconnection of client_id. This multiplexed
    communication happens over the channel "data" message.
    Only when the port is opened may the communication be started.
    A closed port event should close all currently known multiplexed
    Why WebDAV?
    webdav is supported natively by various OS for a long time (circa
    Windows XP). It has several open-source implementations and a variety of
    tools exist. A webdav implementation can be tested and used without a
    Spice server or any virtualization (this also permit sharing the
    implementation with other projects in the future, such as GNOME). It is
    an IETF open standard and thus thoroughly specified.
    The basic requirements for an efficient remote filesystem are provided
    by the standard (pipelining, concurrency, caching, copy/move, partial
    io, compression, locking ...) While other features are easily possible
    via extensions to the protocol (common ones are executable attributes,
    or searching for example).
    Given the requirements, and the popularity of http/webdav, I believe it
    is the best candidate for Spice remote filesystem support.
    Other alternatives (adhoc, p9, smb2, sftp) have been studied and
    discarded so far since they do not match in term of features or

diff --git a/spice.proto b/spice.proto
index 67b3803..316d287 100644
--- a/spice.proto
+++ b/spice.proto
@@ -1352,6 +1352,9 @@ channel PortChannel : SpicevmcChannel {
     } event;
+channel WebDAVChannel : PortChannel {
 protocol Spice {
     MainChannel main = 1;
     DisplayChannel display;
@@ -1363,4 +1366,5 @@ protocol Spice {
     SmartcardChannel smartcard;
     UsbredirChannel usbredir;
     PortChannel port;
+    WebDAVChannel webdav;

More information about the Spice-commits mailing list