[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