main-channel: Make main_channel_push_notify deal with dynamic memory

Currently main_channel_push_notify only gets passed a static string, but
chances are in the future it may get passed dynamically allocated strings,
prepare it for this.

While at it also make clear that its argument is a string, and simplify
things a bit by making use of this knowledge (pushing the strlen call down).

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
main-channel: Add a main_channel_client_push_notify function

Sometimes we want to send a notify to a single client, rather then to
all of them.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
inputs-channel: Handle printing of insecure keyboard notify

This is clearly something which should be handled in the inputs_channel code,
rather then having a special case for it in the generic channel handling
code in reds.c. Moving it here also fixes the TODO we had on only sending
this message to new clients.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
inputs-channel: Don't send insecure keyb notify to in migrate client

This fixes spice-gtk printing message like these on migration:
(remote-viewer:18402): GSpice-CRITICAL **: spice_channel_iterate_read: assertion `c->state != SPICE_CHANNEL_STATE_MIGRATING' failed

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
char_device: Properly update buffer status when leaving the write loop on stop

Before this patch the write-loop in spice_char_device_write_to_device would
break on running becoming 0, after having written some data, without updating
the buffer status, causing the same data to be written *again* when started.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
char_device: Don't set the write-retry timer when not running

The write-retry timer should not be set when we're leaving
spice_char_device_write_to_device because the char-dev has been stopped.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
char_device: Don't set active when stopped and don't access dev after unref

2 closely related changes in one:
1) When leaving the read or write loop because the chardev has been stopped
active should not be updated. It has been set to FALSE by
spice_char_device_stop and should stay FALSE
2) The updating of dev->active should be done *before* unref-ing dev

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
snd_worker: Don't send empty audio-volume messages

If no volume has been set it, we end up sending a volume message with
audio-volume for 0 channels (iow an empty message). This is not useful
and triggers the following warning in spice-gtk:

(remote-viewer:8726): GSpice-WARNING **: set_sink_input_volume() failed:
Invalid argument

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
red_worker.c: s/red_display_destroy_streams/red_display_destroy_streams_agents

In order not to confuse it with red_destroy_streams in the following
patch.
red_worker.c: fix not destroying streams before sending MSG_MIGRATE

When qemu migration completes, we need to stop the streams, and to send
the corresponding upgrade_items to the client.
Otherwise, (1) the client might display lossy regions that we don't track
(streams are not part of the migration data).
(2) streams_timeout may occur after MSG_MIGRATE has been sent, leading
to messages being sent to the client after MSG_MIGRATE and before
MSG_MIGRATE_DATA (e.g., STREAM_CLIP, STREAM_DESTROY, DRAW_COPY).
No message besides MSG_MIGRATE_DATA should be sent after
MSG_MIGRATE.

When a msg other than MIGRATE_DATA reached spice-gtk after MSG_MIGRATE,
spice-gtk sent it to dest server as the migration data, and the dest
server crashed with a "bad message size" assert.
spice-common: Update

Signed-off-by: Hans de Goede <hdegoede@redhat.com>