[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