[PATCH spice-streaming-agent v3 2/2] Implement handling of error messages from the server

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

 



Signed-off-by: Lukáš Hrázký <lhrazky@xxxxxxxxxx>
---
 src/spice-streaming-agent.cpp | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index ee57920..53dbca0 100644
--- a/src/spice-streaming-agent.cpp
+++ b/src/spice-streaming-agent.cpp
@@ -137,10 +137,32 @@ static void handle_stream_capabilities(uint32_t len)
     }
 }
 
-static void handle_stream_error(uint32_t len)
+struct StreamMsgNotifyError1K : StreamMsgNotifyError {
+    uint8_t msg[1024];
+};
+
+static void handle_stream_error(size_t len)
 {
-    // TODO read message and use it
-    throw std::runtime_error("got an error message from server");
+    if (len < sizeof(StreamMsgNotifyError)) {
+        throw std::runtime_error("Received NotifyError message size " + std::to_string(len) +
+                                 " is too small (smaller than " +
+                                 std::to_string(sizeof(StreamMsgNotifyError)) + ")");
+    }
+
+    StreamMsgNotifyError1K msg;
+
+    size_t len_to_read = std::min(len, sizeof(msg));
+
+    read_all(&msg, len_to_read);
+    msg.msg[len_to_read - sizeof(StreamMsgNotifyError)] = '\0';
+
+    syslog(LOG_ERR, "Received NotifyError message from the server: %d - %s\n",
+        msg.error_code, msg.msg);
+
+    if (len_to_read > len) {
+        throw std::runtime_error("Received NotifyError message size " + std::to_string(len) +
+                                 " is too big (bigger than " + std::to_string(sizeof(msg)) + ")");
+    }
 }
 
 static void read_command_from_device(void)
-- 
2.16.1

_______________________________________________
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]