Commit Graph

127 Commits

Author SHA1 Message Date
Marc-André Lureau
f4d8de5bdf protocol: add SPICE_{PLAYBACK,RECORD}_CAP_VOLUME caps
These changes the protocol the following way:

When the client announces it has SPICE_PLAYBACK_CAP_VOLUME, the server
can send PlaybackChannel.{volume,mute} messages to notify of volume
changes (respectively for RECORD).

If the client doesn't implement SPICE_PLAYBACK_CAP_VOLUME, the server can
handle the volume changes the way it prefers, for example, ignoring them or
applying volume effect on the server side etc..
2011-06-22 12:01:10 +02:00
Marc-André Lureau
ec027d44b6 spice: enums.h regenerated 2011-06-22 11:55:11 +02:00
Arnon Gilboa
5bb6ff4fa6 macros: define INLINE
needed for spice/common files used by the client, server & qxl driver.
in windows _inline works for both c/c++, while inline is c++ only.
compiling the client with mixed c/c++ code required this define.
2011-05-12 11:45:58 +03:00
Christophe Fergeau
b95f8e77a5 protocol: set version number to 0.8.0
spice-protocol 0.8.0 has been released, but for some reason the
version number in the master branch was still at 0.6.3
2011-04-18 12:48:41 +02:00
Christophe Fergeau
8adf6bcf90 protocol: use packed-start/end to pack structures
spice-protocol comes with 2 headers to handle structure packing,
but controller_prot.h and foreign_menu_prot were both using their
own preprocessor definitions to handle packing. It's better to have
structure packing macros centralized since how it's done varies
between compilers, so it may need to change over time.
2011-04-11 13:01:57 +02:00
Marc-André Lureau
2ffbca2100 controller: add missing spice/types include 2011-04-11 12:44:28 +02:00
Hans de Goede
db3961d831 vd_agent.h: Add a VDP_END_PORT to the chunk port enum 2011-03-24 11:28:51 +01:00
Alon Levy
1a69e2bd75 qxl_dev: introduce defines for rings sizes 2011-03-07 20:46:58 +02:00
Alon Levy
a3b37c6a02 Merge branch 'master' of git://git.freedesktop.org/git/spice/spice-protocol 2011-03-03 11:42:03 +02:00
Marc-André Lureau
6eabd3f5fb protocol: add clipboard selection capability
Add a new capability VD_AGENT_CAP_CLIPBOARD_SELECTION.

When both client and servers have this capability, the
VDAgentClipboard* messages MUST be prepended with a uint8_t indicating
which clipboard selection to operate + 3 bytes stuffing for alignment
that could be used for future capabilities or extensions.

A few clipboard selection are defined according to X11/Gtk scheme:

- VD_AGENT_CLIPBOARD_SELECTION_CLIPBOARD: the default clipboard,
  implemented by most OS to deal with explicit Copy/Paste operations.

- VD_AGENT_CLIPBOARD_SELECTION_PRIMARY: the PRIMARY clipboard, used
  for mouse selections.

- VD_AGENT_CLIPBOARD_SELECTION_SECONDARY: the SECONDARY clipboard.

See also:
http://www.freedesktop.org/wiki/Specifications/ClipboardsWiki

https://bugs.freedesktop.org/show_bug.cgi?id=34833
2011-02-28 14:51:32 +01:00
Marc-André Lureau
7300282977 protocol: add common channel caps for AUTH mechanism selection
Current version 2.0 of the SPICE protocol describes how the client
reply to the server SpiceLinkReply message with a RSA_public_encrypt()
of the password.

Instead of using the current Spice AUTH mechanism, we would like to
offer different AUTH mechanisms, in particular SASL, which is a
framework allowing different underlying mechanisms such as
GSSAPI/Kerberos v5 (and optionally adding a data security layer).

We could bump the protocol version, but that would make this feature
mandatory for the implementer of the protocol. By using the channel
caps, the client and server are left to negotiate and alter the AUTH
part of the protocol as follows:

- SPICE_COMMON_CAP_PROTOCOL_AUTH_SELECTION, if set, the authentication
  mechanism can be chosen during link phase. If both client and server
  have this cap, the client MUST reply to SpiceLinkReply with a
  SpiceLinkAuthMechanism message, with the value of the CAP_AUTH
  mechanism choosen (a uint32 auth_mechanism). The following
  authentication steps are described by the selected authentication
  mechanism.

The differents mechanisms selectable via
SPICE_COMMON_CAP_PROTOCOL_AUTH_SELECTION are also specified as part of
the common channel caps. They can be used only if both client and
server offer them.

Ex: no AUTH selection
C: SpiceLinkMess
S: SpiceLinkReply, CAP_PROTOCOL_AUTH_SELECTION not in common caps
- The client can't choose AUTH, and fallback on Spice RSA mechanism

Ex: AUTH selection
C: SpiceLinkMess, CAP_PROTOCOL_AUTH_SELECTION in common caps
S: SpiceLinkReply, CAP_PROTOCOL_AUTH_SELECTION in common caps
- The client MUST reply with SpiceLinkAuthMechanism
C: SpiceLinkAuthMechanism (with a matching CAP_AUTH)

- SPICE_COMMON_CAP_AUTH_SPICE, the following steps and authentication
  mechanism are the same as with version 2.0: a RSA_public_encrypt()
  of the password is sent.

  This mechanism MUST be implemented in both client and server to
  comply with the SPICE protocol.

- SPICE_COMMON_CAP_AUTH_SASL, the authentication exchange follows
  SASL protocol has defined in RFC 2222.

  This mechanism is OPTIONAL in both client and servers.

Ex: AUTH selection, followed by SASL authentication

AUTH Selection:
C: SpiceLinkMess, CAP_PROTOCOL_AUTH_SELECTION + CAP_AUTH_SASL in common caps
S: SpiceLinkReply, CAP_PROTOCOL_AUTH_SELECTION + CAP_AUTH_SASL in common caps
- The client MUST reply with SpiceLinkAuthMechanism
C: SpiceLinkAuthMechanism CAP_AUTH_SASL

Init:
S:  u32 mechlist-length
    u8-array mechlist-string

Start:
C:  u32 mechname-length
    u8-array mechname-string
    u32 clientout-length
    u8-array clientout-string
S:  u32 serverin-length
    u8-array serverin-string
    u8 continue

Step: (while continue)
C:  u32 clientout-length
    u8-array clientout-string
S:  u32 serverin-length
    u8-array serverin-string
    u8 continue

See also VNC SASL protocol description, which uses the same protocol:

http://sourceforge.net/mailarchive/forum.php?thread_name=20100719125155.GA14166%40evileye.atkac.brq.redhat.com&forum_name=tigervnc-rfbproto

Updated since v1 of this commit:
 - renamed s/SPICE_CHANNEL_CAP/SPICE_COMMON_CAP
 - added some note about mandatory vs optional mechanisms.
2011-02-23 17:55:58 +02:00
Marc-André Lureau
0386da3be4 protocol: add common channel caps for AUTH mechanism selection
Current version 2.0 of the SPICE protocol describes how the client
reply to the server SpiceLinkReply message with a RSA_public_encrypt()
of the password.

Instead of using the current Spice AUTH mechanism, we would like to
offer different AUTH mechanisms, in particular SASL, which is a
framework allowing different underlying mechanisms such as
GSSAPI/Kerberos v5 (and optionally adding a data security layer).

We could bump the protocol version, but that would make this feature
mandatory for the implementer of the protocol. By using the channel
caps, the client and server are left to negotiate and alter the AUTH
part of the protocol as follows:

- SPICE_COMMON_CAP_PROTOCOL_AUTH_SELECTION, if set, the authentication
  mechanism can be chosen during link phase. If both client and server
  have this cap, the client MUST reply to SpiceLinkReply with a
  SpiceLinkAuthMechanism message, with the value of the CAP_AUTH
  mechanism choosen (a uint32 auth_mechanism). The following
  authentication steps are described by the selected authentication
  mechanism.

The differents mechanisms selectable via
SPICE_COMMON_CAP_PROTOCOL_AUTH_SELECTION are also specified as part of
the common channel caps. They can be used only if both client and
server offer them.

Ex: no AUTH selection
C: SpiceLinkMess
S: SpiceLinkReply, CAP_PROTOCOL_AUTH_SELECTION not in common caps
- The client can't choose AUTH, and fallback on Spice RSA mechanism

Ex: AUTH selection
C: SpiceLinkMess, CAP_PROTOCOL_AUTH_SELECTION in common caps
S: SpiceLinkReply, CAP_PROTOCOL_AUTH_SELECTION in common caps
- The client MUST reply with SpiceLinkAuthMechanism
C: SpiceLinkAuthMechanism (with a matching CAP_AUTH)

- SPICE_COMMON_CAP_AUTH_SPICE, the following steps and authentication
  mechanism are the same as with version 2.0: a RSA_public_encrypt()
  of the password is sent.

  This mechanism MUST be implemented in both client and server to
  comply with the SPICE protocol.

- SPICE_COMMON_CAP_AUTH_SASL, the authentication exchange follows
  SASL protocol has defined in RFC 2222.

  This mechanism is OPTIONAL in both client and servers.

Ex: AUTH selection, followed by SASL authentication

AUTH Selection:
C: SpiceLinkMess, CAP_PROTOCOL_AUTH_SELECTION + CAP_AUTH_SASL in common caps
S: SpiceLinkReply, CAP_PROTOCOL_AUTH_SELECTION + CAP_AUTH_SASL in common caps
- The client MUST reply with SpiceLinkAuthMechanism
C: SpiceLinkAuthMechanism CAP_AUTH_SASL

Init:
S:  u32 mechlist-length
    u8-array mechlist-string

Start:
C:  u32 mechname-length
    u8-array mechname-string
    u32 clientout-length
    u8-array clientout-string
S:  u32 serverin-length
    u8-array serverin-string
    u8 continue

Step: (while continue)
C:  u32 clientout-length
    u8-array clientout-string
S:  u32 serverin-length
    u8-array serverin-string
    u8 continue

See also VNC SASL protocol description, which uses the same protocol:

http://sourceforge.net/mailarchive/forum.php?thread_name=20100719125155.GA14166%40evileye.atkac.brq.redhat.com&forum_name=tigervnc-rfbproto

Updated since v1 of this commit:
 - renamed s/SPICE_CHANNEL_CAP/SPICE_COMMON_CAP
 - added some note about mandatory vs optional mechanisms.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2011-02-23 16:50:46 +01:00
Alon Levy
9d5ef9beec enums: typedefy SpiceBitmapFmt 2011-02-10 20:11:11 +02:00
Alon Levy
f5689c14cf qxl_dev.h: make QXLEffectType an enum instead of defines 2011-02-10 15:43:09 +02:00
Alon Levy
07aa808a21 qxl_dev.h: make QXLBitmapFlags a typedef 2011-02-10 15:43:09 +02:00
Alon Levy
6e719d6fcc qxl_dev.h: make QXLSurfaceCmdType a typedef 2011-02-10 15:43:06 +02:00
Alon Levy
3b67b660b6 qxl_dev.h: name QXL_IMAGE_* flags as type and enum QXLImageFlags 2011-02-10 15:43:02 +02:00
Alon Levy
dbe9402bc2 qxl_dev.h: make QXLCmdType enum also a typedef 2011-02-10 15:42:59 +02:00
Arnon Gilboa
d529c7d830 define spice_mb MemoryBarrier for WIN64
__asm is not supported on _WIN64, so use macro instead
required for Windows x64 guest display driver (qxldd.dll)
2011-02-02 11:34:19 +02:00
Hans de Goede
0b953e03ba Update license header for spice/macros.h
This one mistakenly had a GPL header rather then an LGPL header.
2011-01-21 15:39:09 +01:00
Marc-André Lureau
45f954aadb mingw32: specify packing alignment to 1 byte, to override -mms-bitfield
Ex: G_STRUCT_OFFSET(SpiceLinkReply, num_channel_caps) is 172 bytes
when compiled with -mms-bitfield, and 170 bytes without.

GLib/Gtk are compiled with -mms-bitfield, and it is necessary to
compile with the same option for compatibility. The pack pragma
for MINGW32 corrects the structure alignement.

We could use the pack pragma for GNUC unconditionally, that could help
to ensure struct binary compatibility between different compiled
flavours.
2010-12-29 16:13:55 +01:00
Alon Levy
c3822ca59b smartcard: add channel 2010-10-25 14:51:42 +02:00
Hans de Goede
d63c0072b4 controller: Make all text utf-8
We are making all text send over the controller socket utf-8, rather then
having somethings as 8 bit (hostname) and others unicode16.

Adjust the CONTROLLER_MENU_*_DELIMITER defines for this.
2010-10-21 16:47:12 +02:00
Hans de Goede
254b8803f9 Release 0.6.3 2010-10-18 15:10:14 +02:00
Arnon Gilboa
6e499cf69e Add controller protocol 2010-10-18 10:08:45 +02:00
Arnon Gilboa
8e1e17755e Add foreign menu protocol 2010-10-18 10:02:11 +02:00
Hans de Goede
7e66782a76 Add clipboard data types for images 2010-10-12 13:52:40 +02:00
Hans de Goede
55bdae1179 VD_AGENT_CLIPBOARD_GRAB takes a list of types rather then a single type
This way the grabbing side can indicate when the clipboard owning app
can provide the clipboard contents in multiple formats, ie plain text
and html.

Also drop the VD_AGENT_CLIPBOARD_BITMAP type until we have a clear
cross platform definition of the contents to send for bitmap type
clipboard data.
2010-10-04 16:54:00 +02:00
Arnon Gilboa
016cdb0b1d vd_agent: add VD_AGENT_CAP_CLIPBOARD_BY_DEMAND capability enum
VD_AGENT_CLIPBOARD_NONE for unsupported clipboard types
2010-10-04 16:48:27 +02:00
Arnon Gilboa
5fdd0ba665 vd_agent: add protocol messages for clipboard/selection-owner model
-VD_AGENT_CLIPBOARD_GRAB(type) - tell the other side that an application in our side ("we") got ownership of the clipboard.
-VD_AGENT_CLIPBOARD_REQUEST(type) - after we know the other side owns the clipboard (GRAB received), we notify the os we are the owner. when we are asked by the os/app for the clipboard data, we send this REQUEST msg to the other side.
-VD_AGENT_CLIPBOARD(type, data) - the existing message for sending the clipboard, is now sent only in response to REQUEST.
-VD_AGENT_CLIPBOARD_RELEASE - tell the other side that we are no longer the owner of the clipboard (e.g. the owner app was closed).

this patch will be followed by agent & client patches handling the above messages.
2010-10-04 16:48:27 +02:00
Alexander Larsson
57872d7887 Bump version to 0.6.1 2010-09-29 18:16:07 +02:00
Alexander Larsson
2884c98787 Update for release 2010-09-29 18:16:00 +02:00
Gerd Hoffmann
527d52ae25 add compat flag for 16bpp mode
spice 0.6 uses 32bpp values unconditionally for brush and palette
colors.

spice 0.4 used to use 16 bpp or 32 bpp depending on the video mode.
The qxl parser needs to know the guest video mode depth to correctly
interpret these values in spice 0.4 compat mode.  Add a flag to pass
on this informartion.
2010-09-14 10:08:28 +02:00
Alexander Larsson
3eae24f83d Bump version to 0.6.0 2010-08-31 14:28:44 +02:00
Alexander Larsson
068e6362d3 Update NEWS for release 2010-08-31 14:26:39 +02:00
Alon Levy
31d502522a add vd_agent announce capabilities message 2010-08-31 11:08:33 +03:00
Alon Levy
2335032d3b Merge commit 'e27cb334cf70409c7e32be6f061921b4b317be17' 2010-08-30 16:13:58 +03:00
Alon Levy
e27cb334cf move pipe header defines from reds.c to spice-protocol 2010-08-30 13:25:44 +03:00
Alexander Larsson
ae739ac541 Update NEWS for release 2010-08-29 20:17:36 +03:00
Alexander Larsson
5200cb0cd1 Update version to 0.5.3 2010-08-29 20:17:36 +03:00
Alexander Larsson
ca700d1fa7 Change major to 2 to declare network protocol stable 2010-08-29 20:17:36 +03:00
Yonit Halperin
3f63e04881 vdagent protocol: add display setting 2010-08-29 20:17:36 +03:00
Arnon Gilboa
b0f61eba25 client/agent: add clipboard max size limit for sending to/from the guest agent
define default & env variable for overriding it
2010-07-21 17:41:13 +03:00
Alexander Larsson
03498833d7 Update NEWS for release 2010-07-20 18:05:15 +02:00
Alexander Larsson
4f38933a08 Update version to 0.5.3 2010-07-20 18:03:35 +02:00
Alexander Larsson
d8b1b6afb2 Change major to 2 to declare network protocol stable 2010-07-20 15:52:05 +02:00
Yonit Halperin
1509b51bef vdagent protocol: add display setting 2010-07-19 08:34:33 +03:00
Alon Levy
a94a5b171a clipboard agent message added 2010-07-11 12:09:31 +03:00
Alexander Larsson
a9bbc090a5 Update NEWS for release 2010-07-08 20:47:06 +02:00
Alexander Larsson
8ba4939810 Fix misspellings
SpicedSubMessage -> SpiceSubMessage
QXLAlphaBlnd -> QXLAlphaBlend
2010-07-08 18:22:41 +02:00