[Spice-devel] [PATCH spice-gtk 7/8] Check if msg are permitted to be sent in read-only

Alon Levy alevy at redhat.com
Sun Dec 11 07:49:53 PST 2011


On Sun, Dec 11, 2011 at 04:33:08PM +0100, Frédéric Grelot wrote:
> Is it expected that this commit breaks build?
> 
>   CC     spice-channel.lo
> spice-channel.c: In function 'msg_check_read_only':
> spice-channel.c:481:14: error: 'SPICE_MSGC_MAIN_MIGRATE_END' undeclared (first use in this function)
> 
> I couldn't find any declaration of this SPICE_MSGC_MAIN_MIGRATE_END in any other commit...
> 

it is defined in spice-protocol, maybe you have an older version of
that?

> Thanks for your help, 
> 
> Frederic.
> 
> ----- Mail original -----
> > ---
> >  gtk/spice-channel-priv.h |    1 +
> >  gtk/spice-channel.c      |   35 +++++++++++++++++++++++++++++++++--
> >  2 files changed, 34 insertions(+), 2 deletions(-)
> > 
> > diff --git a/gtk/spice-channel-priv.h b/gtk/spice-channel-priv.h
> > index 86b22e1..df661f8 100644
> > --- a/gtk/spice-channel-priv.h
> > +++ b/gtk/spice-channel-priv.h
> > @@ -46,6 +46,7 @@ struct _SpiceMsgOut {
> >      SpiceMessageMarshallers *marshallers;
> >      SpiceMarshaller       *marshaller;
> >      SpiceDataHeader       *header;
> > +    gboolean              ro_check;
> >  };
> >  
> >  struct _SpiceMsgIn {
> > diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c
> > index 99af206..c2133ab 100644
> > --- a/gtk/spice-channel.c
> > +++ b/gtk/spice-channel.c
> > @@ -465,6 +465,30 @@ void spice_msg_out_hexdump(SpiceMsgOut *out,
> > unsigned char *data, int len)
> >      hexdump(">> msg", data, len);
> >  }
> >  
> > +static gboolean msg_check_read_only (int channel_type, int msg_type)
> > +{
> > +    if (msg_type < 100) // those are the common messages
> > +        return FALSE;
> > +
> > +    switch (channel_type) {
> > +    /* messages allowed to be sent in read-only mode */
> > +    case SPICE_CHANNEL_MAIN:
> > +        switch (msg_type) {
> > +        case SPICE_MSGC_MAIN_CLIENT_INFO:
> > +        case SPICE_MSGC_MAIN_MIGRATE_CONNECTED:
> > +        case SPICE_MSGC_MAIN_MIGRATE_CONNECT_ERROR:
> > +        case SPICE_MSGC_MAIN_ATTACH_CHANNELS:
> > +        case SPICE_MSGC_MAIN_MIGRATE_END:
> > +            return FALSE;
> > +        }
> > +        break;
> > +    case SPICE_CHANNEL_DISPLAY:
> > +        return FALSE;
> > +    }
> > +
> > +    return TRUE;
> > +}
> > +
> >  G_GNUC_INTERNAL
> >  SpiceMsgOut *spice_msg_out_new(SpiceChannel *channel, int type)
> >  {
> > @@ -476,6 +500,7 @@ SpiceMsgOut *spice_msg_out_new(SpiceChannel
> > *channel, int type)
> >      out = spice_new0(SpiceMsgOut, 1);
> >      out->refcount = 1;
> >      out->channel  = channel;
> > +    out->ro_check = msg_check_read_only(c->channel_type, type);
> >  
> >      out->marshallers = c->marshallers;
> >      out->marshaller = spice_marshaller_new();
> > @@ -1547,6 +1572,12 @@ static void
> > spice_channel_send_msg(SpiceChannel *channel, SpiceMsgOut *out, gboo
> >      g_return_if_fail(channel != NULL);
> >      g_return_if_fail(out != NULL);
> >  
> > +    if (out->ro_check &&
> > +        spice_session_get_read_only(channel->priv->session)) {
> > +        g_warning("Try to send message while read-only. Please
> > report a bug.");
> > +        return;
> > +    }
> > +
> >      data = spice_marshaller_linearize(out->marshaller, 0,
> >                                        &len, &free_data);
> >      /* spice_msg_out_hexdump(out, data, len); */
> > @@ -1554,9 +1585,9 @@ static void spice_channel_send_msg(SpiceChannel
> > *channel, SpiceMsgOut *out, gboo
> >          spice_channel_buffered_write(channel, data, len);
> >      else
> >          spice_channel_write(channel, data, len);
> > -    if (free_data) {
> > +
> > +    if (free_data)
> >          free(data);
> > -    }
> >  }
> >  
> >  /* coroutine context */
> > --
> > 1.7.7
> > 
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> > 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list