[Spice-devel] [RFC PATCH 08/16] stream-device: Create channel for stream device
Frediano Ziglio
fziglio at redhat.com
Wed Jan 25 12:42:31 UTC 2017
So can be used by the device to communicate with the clients.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
server/stream-device.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/server/stream-device.c b/server/stream-device.c
index 96a6b92..35ba3f0 100644
--- a/server/stream-device.c
+++ b/server/stream-device.c
@@ -22,6 +22,8 @@
#include <spice/stream-device.h>
#include "char-device.h"
+#include "stream-channel.h"
+#include "reds.h"
#define STREAM_TYPE_DEVICE stream_device_get_type()
@@ -41,8 +43,10 @@ typedef struct StreamDeviceClass StreamDeviceClass;
struct StreamDevice {
RedCharDevice parent;
+
StreamDevHeader hdr;
uint8_t hdr_pos;
+ StreamChannel *channel;
};
struct StreamDeviceClass {
@@ -162,7 +166,10 @@ stream_device_connect(RedsState *reds, SpiceCharDeviceInstance *sin)
{
SpiceCharDeviceInterface *sif;
+ StreamChannel *channel = stream_channel_new(reds);
+
StreamDevice *dev = stream_device_new(sin, reds);
+ dev->channel = channel;
sif = spice_char_device_get_interface(sin);
if (sif->state) {
@@ -175,6 +182,19 @@ stream_device_connect(RedsState *reds, SpiceCharDeviceInstance *sin)
static void
stream_device_dispose(GObject *object)
{
+ StreamDevice *device = STREAM_DEVICE(object);
+
+ if (device->channel) {
+ RedChannel *red_channel = RED_CHANNEL(device->channel);
+ RedsState *reds = red_channel_get_server(red_channel);
+
+ // prevent future connection
+ reds_unregister_channel(reds, red_channel);
+
+ // close all current connections and drop the reference
+ red_channel_destroy(red_channel);
+ device->channel = NULL;
+ }
}
static void
--
git-series 0.9.1
More information about the Spice-devel
mailing list