[Spice-devel] [PATCH spice-streaming-agent v4 3/4] Handle capabilities
Frediano Ziglio
fziglio at redhat.com
Wed Feb 21 15:47:15 UTC 2018
Do not bail if the server is attempting to communicate some extensions
but just ignore as at the moment we support none.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
src/spice-streaming-agent.cpp | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index 9e2a404..0e419bc 100644
--- a/src/spice-streaming-agent.cpp
+++ b/src/spice-streaming-agent.cpp
@@ -40,6 +40,8 @@
using namespace spice::streaming_agent;
+static size_t write_all(int fd, const void *buf, const size_t len);
+
static ConcreteAgent agent;
struct SpiceStreamFormatMessage
@@ -99,6 +101,31 @@ static void handle_stream_start_stop(uint32_t len)
}
}
+static void handle_stream_capabilities(uint32_t len)
+{
+ uint8_t caps[STREAM_MSG_CAPABILITIES_MAX_BYTES];
+
+ if (len > sizeof(caps)) {
+ throw std::runtime_error("capability message too long");
+ }
+ int n = read(streamfd, caps, len);
+ if (n != len) {
+ throw std::runtime_error("read command from device FAILED -- read " + std::to_string(n) +
+ " expected " + std::to_string(len));
+ }
+
+ // we currently do not support extensions so just reply so
+ StreamDevHeader hdr = {
+ STREAM_DEVICE_PROTOCOL,
+ 0,
+ STREAM_TYPE_CAPABILITIES,
+ 0
+ };
+ if (write_all(streamfd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
+ throw std::runtime_error("error writing capabilities");
+ }
+}
+
static void read_command_from_device(void)
{
StreamDevHeader hdr;
@@ -116,6 +143,8 @@ static void read_command_from_device(void)
}
switch (hdr.type) {
+ case STREAM_TYPE_CAPABILITIES:
+ return handle_stream_capabilities(hdr.size);
case STREAM_TYPE_START_STOP:
return handle_stream_start_stop(hdr.size);
}
--
2.14.3
More information about the Spice-devel
mailing list