[Spice-devel] [PATCH v2 1/3] spice-protocol: add vd_agent announce capabilities message

Alon Levy alevy at redhat.com
Mon Aug 30 04:51:33 PDT 2010


Announce capabilities message for agent/client.

v2:
 - variable length field
 - includes request field, true means receiver should respond with same but with false in request.
 - client sends with true if it sees agent already connected on startup, otherwise sends with false
 - agent always sends initial with true.
 - removed capability enum, message types are capabilities
 - added VD_AGENT_END_MESSAGE
 - added VD_AGENT_CAPS_SIZE and VD_AGENT_CAPS_BYTES helpers
 - fixed VD_AGENT_HAS_CAPABILITY and VD_AGENT_SET_CAPABILITY
 - both client and agent now store the capabilities (in RedClient and VDAgent instances)

diff --git a/spice/vd_agent.h b/spice/vd_agent.h
index 1fcda88..74c955f 100644
--- a/spice/vd_agent.h
+++ b/spice/vd_agent.h
@@ -64,6 +64,8 @@ enum {
     VD_AGENT_REPLY,
     VD_AGENT_CLIPBOARD,
     VD_AGENT_DISPLAY_CONFIG,
+    VD_AGENT_ANNOUNCE_CAPABILITIES,
+    VD_AGENT_END_MESSAGE,
 };
 
 typedef struct SPICE_ATTR_PACKED VDAgentMonConfig {
@@ -129,6 +131,21 @@ enum {
     VD_AGENT_CLIPBOARD_UTF8_TEXT = 1,
 };
 
+typedef struct SPICE_ATTR_PACKED VDAgentAnnounceCapabilities {
+    uint8_t  request;
+    uint32_t caps_size;
+    uint32_t caps[0];
+} VDAgentAnnounceCapabilities;
+
+#define VD_AGENT_CAPS_SIZE ((VD_AGENT_END_MESSAGE + 31) / 32)
+
+#define VD_AGENT_CAPS_BYTES (((VD_AGENT_END_MESSAGE + 31) / 8) & (0xffffffff - 3))
+
+#define VD_AGENT_HAS_CAPABILITY(caps, caps_size, index) \
+    ((index) < (caps_size * 32) && ((caps)[(index) / 32] & (1 << ((index) & 0x1f))))
+
+#define VD_AGENT_SET_CAPABILITY(caps, index) \
+    { (caps)[(index) / 32] |= (1 << ((index) & 0x1f)); }
 
 #include <spice/end-packed.h>
 


More information about the Spice-devel mailing list