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