On Tue, 2018-02-20 at 20:48 +0000, Frediano Ziglio wrote: > 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 | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp > index 8d91f2d..31c655c 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 void handle_stream_capabilities(uint32_t len); > static void handle_stream_start_stop(uint32_t len); > > static void read_command_from_device(void) > @@ -96,6 +99,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); > } > @@ -124,6 +129,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 int read_command(bool blocking) > { > int timeout = blocking?-1:0; LGTM, I'm not entirely knowledgable of the capabilities interaction though. Reviewed-by: Lukáš Hrázký <lhrazky@xxxxxxxxxx> _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel