Go to file
Marc-André Lureau 01955e7007 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
connections.

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
requirements.
2014-03-19 14:47:04 +01:00
build-aux build-sys: make it a seperately buildable spice-common library 2012-03-22 20:21:05 +01:00
common quic: Fix test which is always true 2014-01-20 14:33:33 +01:00
m4 build-sys: make it a seperately buildable spice-common library 2012-03-22 20:21:05 +01:00
python_modules codegen: Add a --generate-wireshark-dissector option 2013-10-23 11:41:43 -05:00
spice-protocol@2575626fb6 Add support for the Opus codec. 2014-01-02 12:28:21 +01:00
.gitmodules build-sys: make it a seperately buildable spice-common library 2012-03-22 20:21:05 +01:00
autogen.sh build-sys: make it a seperately buildable spice-common library 2012-03-22 20:21:05 +01:00
configure.ac Add support for the Opus codec. 2014-01-02 12:28:21 +01:00
COPYING Be explicit about spice-common license 2013-10-23 11:41:43 -05:00
git.mk Update git.mk to latest version 2012-09-21 10:51:17 +02:00
Makefile.am spice-common: don't install spice-protocol 2012-08-09 12:44:41 +02:00
spice1.proto Add support for the Opus codec. 2014-01-02 12:28:21 +01:00
spice_codegen.py Be explicit about spice-common license 2013-10-23 11:41:43 -05:00
spice.proto spice.proto: add webdav channel 2014-03-19 14:47:04 +01:00