[Spice-devel] [PATCH spice-streaming-agent v3 3/4] Handle capabilities
Lukáš Hrázký
lhrazky at redhat.com
Wed Feb 21 10:27:57 UTC 2018
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 at redhat.com>
> ---
> 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 at redhat.com>
More information about the Spice-devel
mailing list