[Spice-devel] [RFC PATCH spice-server v2 06/19] stream-device: Create channel for stream device

Frediano Ziglio fziglio at redhat.com
Fri Aug 18 09:48:36 UTC 2017


> 
> > 
> > On Wed, 2017-06-14 at 16:39 +0100, Frediano Ziglio wrote:
> > > 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 47eb3ac..6c4eccb 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 TYPE_STREAM_DEVICE stream_device_get_type()
> > >  
> > > @@ -37,9 +39,11 @@ typedef struct StreamDeviceClass
> > > StreamDeviceClass;
> > >  
> > >  struct StreamDevice {
> > >      RedCharDevice parent;
> > > +
> > >      StreamDevHeader hdr;
> > >      uint8_t hdr_pos;
> > >      bool has_error;
> > > +    StreamChannel *channel;
> > >  };
> > >  
> > >  struct StreamDeviceClass {
> > > @@ -189,7 +193,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;
> > 
> > Perhaps pass channel as an argument to stream_device_new() similar to
> > how we do with red_char_device_spicevmc_new()?
> > 
> 
> If you mean the assign inside stream_device_new is fine for me.
> If you mean write some property code I don't like it.
> 

Something like this:


diff --git a/server/stream-device.c b/server/stream-device.c
index 026f79c7..3a41bbce 100644
--- a/server/stream-device.c
+++ b/server/stream-device.c
@@ -51,7 +51,8 @@ struct StreamDeviceClass {
 };
 
 static GType stream_device_get_type(void) G_GNUC_CONST;
-static StreamDevice *stream_device_new(SpiceCharDeviceInstance *sin, RedsState *reds);
+static StreamDevice *stream_device_new(SpiceCharDeviceInstance *sin, RedsState *reds,
+                                       StreamChannel *channel);
 
 G_DEFINE_TYPE(StreamDevice, stream_device, RED_TYPE_CHAR_DEVICE)
 
@@ -195,7 +196,7 @@ stream_device_connect(RedsState *reds, SpiceCharDeviceInstance *sin)
 
     StreamChannel *channel = stream_channel_new(reds);
 
-    StreamDevice *dev = stream_device_new(sin, reds);
+    StreamDevice *dev = stream_device_new(sin, reds, channel);
     dev->channel = channel;
 
     sif = spice_char_device_get_interface(sin);
@@ -244,12 +245,15 @@ stream_device_init(StreamDevice *self)
 }
 
 static StreamDevice *
-stream_device_new(SpiceCharDeviceInstance *sin, RedsState *reds)
+stream_device_new(SpiceCharDeviceInstance *sin, RedsState *reds, StreamChannel *channel)
 {
-    return g_object_new(TYPE_STREAM_DEVICE,
-                        "sin", sin,
-                        "spice-server", reds,
-                        "client-tokens-interval", 0ULL,
-                        "self-tokens", ~0ULL,
-                        NULL);
+    StreamDevice *dev;
+    dev = g_object_new(TYPE_STREAM_DEVICE,
+                       "sin", sin,
+                       "spice-server", reds,
+                       "client-tokens-interval", 0ULL,
+                       "self-tokens", ~0ULL,
+                       NULL);
+    dev->channel = channel;
+    return dev;
 }

Frediano


More information about the Spice-devel mailing list