[PATCH spice-streaming-agent v2 4/5] Handle capabilities

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 src/spice-streaming-agent.cpp | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index d72c30b..9547e49 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
@@ -77,6 +79,7 @@ static int have_something_to_read(int timeout)
     return 0;
 }
 
+static int read_stream_capabilities(uint32_t len);
 static int read_stream_start_stop(uint32_t len);
 
 static int read_command_from_device(void)
@@ -96,6 +99,8 @@ static int read_command_from_device(void)
     }
 
     switch (hdr.type) {
+    case STREAM_TYPE_CAPABILITIES:
+        return read_stream_capabilities(hdr.size);
     case STREAM_TYPE_START_STOP:
         return read_stream_start_stop(hdr.size);
     }
@@ -124,6 +129,32 @@ static int read_stream_start_stop(uint32_t len)
     return 1;
 }
 
+static int read_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 suppor 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");
+    }
+    return 1;
+}
+
 static int read_command(bool blocking)
 {
     int timeout = blocking?-1:0;
-- 
2.14.3

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]