[Spice-devel] [PATCH 07/10] reds: Prepare to make VDIPortState a GObject

Jonathon Jongsma jjongsma at redhat.com
Fri Apr 1 21:13:07 UTC 2016


On Fri, 2016-04-01 at 16:11 -0500, Jonathon Jongsma wrote:
> While we're cleaning things up here, Do we want to keep the VDIPortState name?
> The "State" part of it no longer makes as much sense since it doesn't
> 'inherit'
> from SpiceCharDeviceState anymore. Possibilities: RedCharDeviceVDIPort,
> RedVDIPort?
> 

I didn't look far enough ahead. The next patch does use RedCharDeviceVDIPort as
the typename, so I'll ACK this patch.

Acked-by: Jonathon Jongsma <jjongsma at redhat.com>

> The rest of the patch is basically mechanical, and looks fine.
> 
> Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>
> 
> 
> On Fri, 2016-04-01 at 15:51 -0500, Jonathon Jongsma wrote:
> > From: Christophe Fergeau <cfergeau at redhat.com>
> > 
> > This inherits from RedCharDevice.
> > 
> > Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> >  server/reds.c | 395 +++++++++++++++++++++++++++++--------------------------
> > --
> > -
> >  1 file changed, 200 insertions(+), 195 deletions(-)
> > 
> > diff --git a/server/reds.c b/server/reds.c
> > index 7538d9b..23df51a 100644
> > --- a/server/reds.c
> > +++ b/server/reds.c
> > @@ -181,7 +181,7 @@ enum {
> >      VDI_PORT_READ_STATE_READ_DATA,
> >  };
> >  
> > -struct VDIPortState {
> > +struct VDIPortStatePrivate {
> >      RedCharDevice *base;
> >      uint32_t plug_generation;
> >      int client_agent_started;
> > @@ -206,6 +206,10 @@ struct VDIPortState {
> >                                         before agent is attached */
> >  };
> >  
> > +struct VDIPortState {
> > +    struct VDIPortStatePrivate priv[1];
> > +};
> > +
> >  /* messages that are addressed to the agent and are created in the server
> > */
> >  typedef struct __attribute__ ((__packed__)) VDInternalBuf {
> >      VDIChunkHeader chunk_header;
> > @@ -450,16 +454,16 @@ static void reds_reset_vdp(RedsState *reds)
> >      VDIPortState *state = reds->agent_state;
> >      SpiceCharDeviceInterface *sif;
> >  
> > -    state->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > -    state->receive_pos = (uint8_t *)&state->vdi_chunk_header;
> > -    state->receive_len = sizeof(state->vdi_chunk_header);
> > -    state->message_receive_len = 0;
> > -    if (state->current_read_buf) {
> > -        vdi_port_read_buf_unref(state->current_read_buf);
> > -        state->current_read_buf = NULL;
> > +    state->priv->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > +    state->priv->receive_pos = (uint8_t *)&state->priv->vdi_chunk_header;
> > +    state->priv->receive_len = sizeof(state->priv->vdi_chunk_header);
> > +    state->priv->message_receive_len = 0;
> > +    if (state->priv->current_read_buf) {
> > +        vdi_port_read_buf_unref(state->priv->current_read_buf);
> > +        state->priv->current_read_buf = NULL;
> >      }
> >      /* Reset read filter to start with clean state when the agent
> > reconnects
> > */
> > -    agent_msg_filter_init(&state->read_filter, reds->agent_copypaste,
> > +    agent_msg_filter_init(&state->priv->read_filter, reds->agent_copypaste,
> >                            reds->agent_file_xfer,
> >                            reds_use_client_monitors_config(reds), TRUE);
> >      /* Throw away pending chunks from the current (if any) and future
> > @@ -468,9 +472,9 @@ static void reds_reset_vdp(RedsState *reds)
> >       * is disconnected. Currently, when an agent gets disconnected and
> > reconnected,
> >       * messages that were directed to the previous instance of the agent
> > continue
> >       * to be sent from the client. This TODO will require server, protocol,
> > and client changes */
> > -    state->write_filter.result = AGENT_MSG_FILTER_DISCARD;
> > -    state->write_filter.discard_all = TRUE;
> > -    state->client_agent_started = FALSE;
> > +    state->priv->write_filter.result = AGENT_MSG_FILTER_DISCARD;
> > +    state->priv->write_filter.discard_all = TRUE;
> > +    state->priv->client_agent_started = FALSE;
> >  
> >      /* resetting and not destroying the state as a workaround for a bad
> >       * tokens management in the vdagent protocol:
> > @@ -485,10 +489,10 @@ static void reds_reset_vdp(RedsState *reds)
> >       */
> >      if (red_channel_test_remote_cap(&reds->main_channel->base,
> >                                      SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS))
> > {
> > -        red_char_device_destroy(state->base);
> > -        state->base = NULL;
> > +        red_char_device_destroy(state->priv->base);
> > +        state->priv->base = NULL;
> >      } else {
> > -        red_char_device_reset(state->base);
> > +        red_char_device_reset(state->priv->base);
> >      }
> >  
> >      sif = spice_char_device_get_interface(reds->vdagent);
> > @@ -536,11 +540,11 @@ void reds_client_disconnect(RedsState *reds, RedClient
> > *client)
> >          reds_mig_remove_wait_disconnect_client(reds, client);
> >      }
> >  
> > -    if (reds->agent_state->base) {
> > +    if (reds->agent_state->priv->base) {
> >          /* note that vdagent might be NULL, if the vdagent was once
> >           * up and than was removed */
> > -        if (red_char_device_client_exists(reds->agent_state->base, client))
> > {
> > -            red_char_device_client_remove(reds->agent_state->base, client);
> > +        if (red_char_device_client_exists(reds->agent_state->priv->base,
> > client)) {
> > +            red_char_device_client_remove(reds->agent_state->priv->base,
> > client);
> >          }
> >      }
> >  
> > @@ -552,14 +556,14 @@ void reds_client_disconnect(RedsState *reds, RedClient
> > *client)
> >     // if we are in the middle of one from another client)
> >      if (reds->num_clients == 0) {
> >          /* Let the agent know the client is disconnected */
> > -        if (reds->agent_state->base) {
> > +        if (reds->agent_state->priv->base) {
> >              RedCharDeviceWriteBuffer *char_dev_buf;
> >              VDInternalBuf *internal_buf;
> >              uint32_t total_msg_size;
> >  
> >              total_msg_size = sizeof(VDIChunkHeader) +
> > sizeof(VDAgentMessage);
> >              char_dev_buf =
> > red_char_device_write_buffer_get_server_no_token(
> > -                               reds->agent_state->base, total_msg_size);
> > +                               reds->agent_state->priv->base,
> > total_msg_size);
> >              char_dev_buf->buf_used = total_msg_size;
> >              internal_buf = (VDInternalBuf *)char_dev_buf->buf;
> >              internal_buf->chunk_header.port = VDP_SERVER_PORT;
> > @@ -569,21 +573,21 @@ void reds_client_disconnect(RedsState *reds, RedClient
> > *client)
> >              internal_buf->header.opaque = 0;
> >              internal_buf->header.size = 0;
> >  
> > -            red_char_device_write_buffer_add(reds->agent_state->base,
> > +            red_char_device_write_buffer_add(reds->agent_state->priv->base,
> >                                                 char_dev_buf);
> >          }
> >  
> >          /* Reset write filter to start with clean state on client reconnect
> > */
> > -        agent_msg_filter_init(&reds->agent_state->write_filter, reds
> > ->agent_copypaste,
> > +        agent_msg_filter_init(&reds->agent_state->priv->write_filter, reds
> > ->agent_copypaste,
> >                                reds->agent_file_xfer,
> >                                reds_use_client_monitors_config(reds), TRUE);
> >  
> >          /* Throw away pending chunks from the current (if any) and future
> >           *  messages read from the agent */
> > -        reds->agent_state->read_filter.result = AGENT_MSG_FILTER_DISCARD;
> > -        reds->agent_state->read_filter.discard_all = TRUE;
> > -        free(reds->agent_state->mig_data);
> > -        reds->agent_state->mig_data = NULL;
> > +        reds->agent_state->priv->read_filter.result =
> > AGENT_MSG_FILTER_DISCARD;
> > +        reds->agent_state->priv->read_filter.discard_all = TRUE;
> > +        free(reds->agent_state->priv->mig_data);
> > +        reds->agent_state->priv->mig_data = NULL;
> >  
> >          reds_mig_cleanup(reds);
> >      }
> > @@ -693,9 +697,9 @@ static gboolean vdi_port_read_buf_process(VDIPortState
> > *state, VDIReadBuf *buf,
> >  
> >      *error = FALSE;
> >  
> > -    switch (state->vdi_chunk_header.port) {
> > +    switch (state->priv->vdi_chunk_header.port) {
> >      case VDP_CLIENT_PORT: {
> > -        res = agent_msg_filter_process_data(&state->read_filter,
> > +        res = agent_msg_filter_process_data(&state->priv->read_filter,
> >                                              buf->data, buf->len);
> >          switch (res) {
> >          case AGENT_MSG_FILTER_OK:
> > @@ -721,7 +725,7 @@ static VDIReadBuf
> > *vdi_port_state_get_read_buf(VDIPortState *state)
> >      RingItem *item;
> >      VDIReadBuf *buf;
> >  
> > -    if (!(item = ring_get_head(&state->read_bufs))) {
> > +    if (!(item = ring_get_head(&state->priv->read_bufs))) {
> >          return NULL;
> >      }
> >  
> > @@ -743,14 +747,14 @@ static VDIReadBuf* vdi_port_read_buf_ref(VDIReadBuf
> > *buf)
> >  static void vdi_port_read_buf_unref(VDIReadBuf *buf)
> >  {
> >      if (!--buf->refs) {
> > -        ring_add(&buf->state->read_bufs, &buf->link);
> > +        ring_add(&buf->state->priv->read_bufs, &buf->link);
> >  
> >          /* read_one_msg_from_vdi_port may have never completed because the
> > read_bufs
> >          ring was empty. So we call it again so it can complete its work if
> >          necessary. Note that since we can be called from
> > red_char_device_wakeup
> >          this can cause recursion, but we have protection for that */
> > -        if (buf->state->base) {
> > -            red_char_device_wakeup(buf->state->base);
> > +        if (buf->state->priv->base) {
> > +            red_char_device_wakeup(buf->state->priv->base);
> >          }
> >      }
> >  }
> > @@ -772,48 +776,48 @@ static RedCharDeviceMsgToClient
> > *vdi_port_read_one_msg_from_device(SpiceCharDevi
> >      spice_assert(reds->vdagent == sin);
> >      sif = spice_char_device_get_interface(reds->vdagent);
> >      while (reds->vdagent) {
> > -        switch (state->read_state) {
> > +        switch (state->priv->read_state) {
> >          case VDI_PORT_READ_STATE_READ_HEADER:
> > -            n = sif->read(reds->vdagent, state->receive_pos, state
> > ->receive_len);
> > +            n = sif->read(reds->vdagent, state->priv->receive_pos, state
> > ->priv->receive_len);
> >              if (!n) {
> >                  return NULL;
> >              }
> > -            if ((state->receive_len -= n)) {
> > -                state->receive_pos += n;
> > +            if ((state->priv->receive_len -= n)) {
> > +                state->priv->receive_pos += n;
> >                  return NULL;
> >              }
> > -            state->message_receive_len = state->vdi_chunk_header.size;
> > -            state->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> > +            state->priv->message_receive_len = state->priv
> > ->vdi_chunk_header.size;
> > +            state->priv->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> >          case VDI_PORT_READ_STATE_GET_BUFF: {
> > -            if (!(state->current_read_buf =
> > vdi_port_state_get_read_buf(reds
> > ->agent_state))) {
> > +            if (!(state->priv->current_read_buf =
> > vdi_port_state_get_read_buf(reds->agent_state))) {
> >                  return NULL;
> >              }
> > -            state->receive_pos = state->current_read_buf->data;
> > -            state->receive_len = MIN(state->message_receive_len,
> > -                                    sizeof(state->current_read_buf->data));
> > -            state->current_read_buf->len = state->receive_len;
> > -            state->message_receive_len -= state->receive_len;
> > -            state->read_state = VDI_PORT_READ_STATE_READ_DATA;
> > +            state->priv->receive_pos = state->priv->current_read_buf->data;
> > +            state->priv->receive_len = MIN(state->priv
> > ->message_receive_len,
> > +                                           sizeof(state->priv
> > ->current_read_buf->data));
> > +            state->priv->current_read_buf->len = state->priv->receive_len;
> > +            state->priv->message_receive_len -= state->priv->receive_len;
> > +            state->priv->read_state = VDI_PORT_READ_STATE_READ_DATA;
> >          }
> >          case VDI_PORT_READ_STATE_READ_DATA: {
> >              gboolean error = FALSE;
> > -            n = sif->read(reds->vdagent, state->receive_pos, state
> > ->receive_len);
> > +            n = sif->read(reds->vdagent, state->priv->receive_pos, state
> > ->priv->receive_len);
> >              if (!n) {
> >                  return NULL;
> >              }
> > -            if ((state->receive_len -= n)) {
> > -                state->receive_pos += n;
> > +            if ((state->priv->receive_len -= n)) {
> > +                state->priv->receive_pos += n;
> >                  break;
> >              }
> > -            dispatch_buf = state->current_read_buf;
> > -            state->current_read_buf = NULL;
> > -            state->receive_pos = NULL;
> > -            if (state->message_receive_len == 0) {
> > -                state->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > -                state->receive_pos = (uint8_t *)&state->vdi_chunk_header;
> > -                state->receive_len = sizeof(state->vdi_chunk_header);
> > +            dispatch_buf = state->priv->current_read_buf;
> > +            state->priv->current_read_buf = NULL;
> > +            state->priv->receive_pos = NULL;
> > +            if (state->priv->message_receive_len == 0) {
> > +                state->priv->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > +                state->priv->receive_pos = (uint8_t *)&state->priv
> > ->vdi_chunk_header;
> > +                state->priv->receive_len = sizeof(state->priv
> > ->vdi_chunk_header);
> >              } else {
> > -                state->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> > +                state->priv->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> >              }
> >              if (vdi_port_read_buf_process(reds->agent_state, dispatch_buf,
> > &error)) {
> >                  return dispatch_buf;
> > @@ -890,13 +894,13 @@ void reds_handle_agent_mouse_event(RedsState *reds,
> > const VDAgentMouseState *mou
> >      VDInternalBuf *internal_buf;
> >      uint32_t total_msg_size;
> >  
> > -    if (!reds->inputs_channel || !reds->agent_state->base) {
> > +    if (!reds->inputs_channel || !reds->agent_state->priv->base) {
> >          return;
> >      }
> >  
> >      total_msg_size = sizeof(VDIChunkHeader) + sizeof(VDAgentMessage) +
> >                       sizeof(VDAgentMouseState);
> > -    char_dev_buf = red_char_device_write_buffer_get(reds->agent_state
> > ->base,
> > +    char_dev_buf = red_char_device_write_buffer_get(reds->agent_state->priv
> > ->base,
> >                                                      NULL,
> >                                                      total_msg_size);
> >  
> > @@ -917,7 +921,7 @@ void reds_handle_agent_mouse_event(RedsState *reds,
> > const
> > VDAgentMouseState *mou
> >      internal_buf->u.mouse_state = *mouse_state;
> >  
> >      char_dev_buf->buf_used = total_msg_size;
> > -    red_char_device_write_buffer_add(reds->agent_state->base,
> > char_dev_buf);
> > +    red_char_device_write_buffer_add(reds->agent_state->priv->base,
> > char_dev_buf);
> >  }
> >  
> >  int reds_get_n_channels(RedsState *reds)
> > @@ -973,7 +977,7 @@ void reds_fill_channels(RedsState *reds,
> > SpiceMsgChannels
> > *channels_info)
> >  
> >  void reds_on_main_agent_start(RedsState *reds, MainChannelClient *mcc,
> > uint32_t num_tokens)
> >  {
> > -    RedCharDevice *dev_state = reds->agent_state->base;
> > +    RedCharDevice *dev_state = reds->agent_state->priv->base;
> >      RedChannelClient *rcc;
> >  
> >      if (!reds->vdagent) {
> > @@ -981,7 +985,7 @@ void reds_on_main_agent_start(RedsState *reds,
> > MainChannelClient *mcc, uint32_t
> >      }
> >      spice_assert(reds->vdagent->st && reds->vdagent->st == dev_state);
> >      rcc = main_channel_client_get_base(mcc);
> > -    reds->agent_state->client_agent_started = TRUE;
> > +    reds->agent_state->priv->client_agent_started = TRUE;
> >      /*
> >       * Note that in older releases, send_tokens were set to ~0 on both
> > client
> >       * and server. The server ignored the client given tokens.
> > @@ -1011,10 +1015,10 @@ void reds_on_main_agent_start(RedsState *reds,
> > MainChannelClient *mcc, uint32_t
> >                                                    num_tokens);
> >      }
> >  
> > -    agent_msg_filter_config(&reds->agent_state->write_filter, reds
> > ->agent_copypaste,
> > +    agent_msg_filter_config(&reds->agent_state->priv->write_filter, reds
> > ->agent_copypaste,
> >                              reds->agent_file_xfer,
> >                              reds_use_client_monitors_config(reds));
> > -    reds->agent_state->write_filter.discard_all = FALSE;
> > +    reds->agent_state->priv->write_filter.discard_all = FALSE;
> >  }
> >  
> >  void reds_on_main_agent_tokens(RedsState *reds, MainChannelClient *mcc,
> > uint32_t num_tokens)
> > @@ -1033,7 +1037,7 @@ uint8_t *reds_get_agent_data_buffer(RedsState *reds,
> > MainChannelClient *mcc, siz
> >      VDIPortState *dev_state = reds->agent_state;
> >      RedClient *client;
> >  
> > -    if (!dev_state->client_agent_started) {
> > +    if (!dev_state->priv->client_agent_started) {
> >          /*
> >           * agent got disconnected, and possibly got reconnected, but we
> > still
> > can receive
> >           * msgs that are addressed to the agent's old instance, in case
> > they
> > were
> > @@ -1044,31 +1048,31 @@ uint8_t *reds_get_agent_data_buffer(RedsState *reds,
> > MainChannelClient *mcc, siz
> >          return spice_malloc(size);
> >      }
> >  
> > -    spice_assert(dev_state->recv_from_client_buf == NULL);
> > +    spice_assert(dev_state->priv->recv_from_client_buf == NULL);
> >      client = main_channel_client_get_base(mcc)->client;
> > -    dev_state->recv_from_client_buf =
> > red_char_device_write_buffer_get(dev_state->base,
> > -                                                                      
> >  client,
> > -                                                                       size
> > +
> > sizeof(VDIChunkHeader));
> > -    dev_state->recv_from_client_buf_pushed = FALSE;
> > -    return dev_state->recv_from_client_buf->buf + sizeof(VDIChunkHeader);
> > +    dev_state->priv->recv_from_client_buf =
> > red_char_device_write_buffer_get(dev_state->priv->base,
> > +                                                                           
> >  client,
> > +                                                                           
> >  size + sizeof(VDIChunkHeader));
> > +    dev_state->priv->recv_from_client_buf_pushed = FALSE;
> > +    return dev_state->priv->recv_from_client_buf->buf +
> > sizeof(VDIChunkHeader);
> >  }
> >  
> >  void reds_release_agent_data_buffer(RedsState *reds, uint8_t *buf)
> >  {
> >      VDIPortState *dev_state = reds->agent_state;
> >  
> > -    if (!dev_state->recv_from_client_buf) {
> > +    if (!dev_state->priv->recv_from_client_buf) {
> >          free(buf);
> >          return;
> >      }
> >  
> > -    spice_assert(buf == dev_state->recv_from_client_buf->buf +
> > sizeof(VDIChunkHeader));
> > -    if (!dev_state->recv_from_client_buf_pushed) {
> > -        red_char_device_write_buffer_release(reds->agent_state->base,
> > -                                             dev_state
> > ->recv_from_client_buf);
> > +    spice_assert(buf == dev_state->priv->recv_from_client_buf->buf +
> > sizeof(VDIChunkHeader));
> > +    if (!dev_state->priv->recv_from_client_buf_pushed) {
> > +        red_char_device_write_buffer_release(reds->agent_state->priv->base,
> > +                                               dev_state->priv
> > ->recv_from_client_buf);
> >      }
> > -    dev_state->recv_from_client_buf = NULL;
> > -    dev_state->recv_from_client_buf_pushed = FALSE;
> > +    dev_state->priv->recv_from_client_buf = NULL;
> > +    dev_state->priv->recv_from_client_buf_pushed = FALSE;
> >  }
> >  
> >  static void reds_client_monitors_config_cleanup(RedsState *reds)
> > @@ -1112,7 +1116,7 @@ void reds_on_main_agent_data(RedsState *reds,
> > MainChannelClient *mcc, void *mess
> >      VDIChunkHeader *header;
> >      int res;
> >  
> > -    res = agent_msg_filter_process_data(&reds->agent_state->write_filter,
> > +    res = agent_msg_filter_process_data(&reds->agent_state->priv
> > ->write_filter,
> >                                          message, size);
> >      switch (res) {
> >      case AGENT_MSG_FILTER_OK:
> > @@ -1127,16 +1131,16 @@ void reds_on_main_agent_data(RedsState *reds,
> > MainChannelClient *mcc, void *mess
> >          return;
> >      }
> >  
> > -    spice_assert(reds->agent_state->recv_from_client_buf);
> > -    spice_assert(message == reds->agent_state->recv_from_client_buf->buf +
> > sizeof(VDIChunkHeader));
> > +    spice_assert(reds->agent_state->priv->recv_from_client_buf);
> > +    spice_assert(message == reds->agent_state->priv->recv_from_client_buf
> > ->buf + sizeof(VDIChunkHeader));
> >      // TODO - start tracking agent data per channel
> > -    header =  (VDIChunkHeader *)dev_state->recv_from_client_buf->buf;
> > +    header =  (VDIChunkHeader *)dev_state->priv->recv_from_client_buf->buf;
> >      header->port = VDP_CLIENT_PORT;
> >      header->size = size;
> > -    dev_state->recv_from_client_buf->buf_used = sizeof(VDIChunkHeader) +
> > size;
> > +    dev_state->priv->recv_from_client_buf->buf_used =
> > sizeof(VDIChunkHeader)
> > + size;
> >  
> > -    dev_state->recv_from_client_buf_pushed = TRUE;
> > -    red_char_device_write_buffer_add(reds->agent_state->base, dev_state
> > ->recv_from_client_buf);
> > +    dev_state->priv->recv_from_client_buf_pushed = TRUE;
> > +    red_char_device_write_buffer_add(reds->agent_state->priv->base,
> > dev_state
> > ->priv->recv_from_client_buf);
> >  }
> >  
> >  void reds_on_main_migrate_connected(RedsState *reds, int seamless)
> > @@ -1176,20 +1180,20 @@ void reds_on_main_channel_migrate(RedsState *reds,
> > MainChannelClient *mcc)
> >  
> >      spice_assert(reds->num_clients == 1);
> >  
> > -    if (agent_state->read_state != VDI_PORT_READ_STATE_READ_DATA) {
> > +    if (agent_state->priv->read_state != VDI_PORT_READ_STATE_READ_DATA) {
> >          return;
> >      }
> > -    spice_assert(agent_state->current_read_buf->data &&
> > -                 agent_state->receive_pos > agent_state->current_read_buf
> > ->data);
> > -    read_data_len = agent_state->receive_pos - agent_state
> > ->current_read_buf
> > ->data;
> > +    spice_assert(agent_state->priv->current_read_buf->data &&
> > +                 agent_state->priv->receive_pos > agent_state->priv
> > ->current_read_buf->data);
> > +    read_data_len = agent_state->priv->receive_pos - agent_state->priv
> > ->current_read_buf->data;
> >  
> > -    if (agent_state->read_filter.msg_data_to_read ||
> > +    if (agent_state->priv->read_filter.msg_data_to_read ||
> >          read_data_len > sizeof(VDAgentMessage)) { /* msg header has been
> > read
> > */
> > -        VDIReadBuf *read_buf = agent_state->current_read_buf;
> > +        VDIReadBuf *read_buf = agent_state->priv->current_read_buf;
> >          gboolean error = FALSE;
> >  
> >          spice_debug("push partial read %u (msg first chunk? %d)",
> > read_data_len,
> > -                    !agent_state->read_filter.msg_data_to_read);
> > +                    !agent_state->priv->read_filter.msg_data_to_read);
> >  
> >          read_buf->len = read_data_len;
> >          if (vdi_port_read_buf_process(reds->agent_state, read_buf, &error))
> > {
> > @@ -1205,11 +1209,11 @@ void reds_on_main_channel_migrate(RedsState *reds,
> > MainChannelClient *mcc)
> >              vdi_port_read_buf_unref(read_buf);
> >          }
> >  
> > -        spice_assert(agent_state->receive_len);
> > -        agent_state->message_receive_len += agent_state->receive_len;
> > -        agent_state->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> > -        agent_state->current_read_buf = NULL;
> > -        agent_state->receive_pos = NULL;
> > +        spice_assert(agent_state->priv->receive_len);
> > +        agent_state->priv->message_receive_len += agent_state->priv
> > ->receive_len;
> > +        agent_state->priv->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> > +        agent_state->priv->current_read_buf = NULL;
> > +        agent_state->priv->receive_pos = NULL;
> >      }
> >  }
> >  
> > @@ -1226,11 +1230,12 @@ void reds_marshall_migrate_data(RedsState *reds,
> > SpiceMarshaller *m)
> >      if (!reds->vdagent) {
> >          uint8_t *null_agent_mig_data;
> >  
> > -        spice_assert(!agent_state->base); /* MSG_AGENT_CONNECTED_TOKENS is
> > supported by the client
> > -                                             (see
> > spice_server_migrate_connect), so RedCharDevice
> > -                                             is destroyed when the agent is
> > disconnected and
> > -                                             there is no need to track the
> > client tokens
> > -                                             (see reds_reset_vdp) */
> > +        /* MSG_AGENT_CONNECTED_TOKENS is supported by the client
> > +           (see spice_server_migrate_connect), so agent_attached
> > +           is set to FALSE when the agent is disconnected and
> > +           there is no need to track the client tokens
> > +           (see reds_reset_vdp) */
> > +        spice_assert(!agent_state->priv->base);
> >          red_char_device_migrate_data_marshall_empty(m);
> >          null_agent_mig_data = spice_marshaller_reserve_space(m,
> >                                                              
> >  sizeof(SpiceMigrateDataMain) -
> > @@ -1241,33 +1246,33 @@ void reds_marshall_migrate_data(RedsState *reds,
> > SpiceMarshaller *m)
> >          return;
> >      }
> >  
> > -    red_char_device_migrate_data_marshall(reds->agent_state->base, m);
> > -    spice_marshaller_add_uint8(m, reds->agent_state->client_agent_started);
> > +    red_char_device_migrate_data_marshall(reds->agent_state->priv->base,
> > m);
> > +    spice_marshaller_add_uint8(m, reds->agent_state->priv
> > ->client_agent_started);
> >  
> > -    mig_data.agent2client.chunk_header = agent_state->vdi_chunk_header;
> > +    mig_data.agent2client.chunk_header = agent_state->priv
> > ->vdi_chunk_header;
> >  
> >      /* agent to client partial msg */
> > -    if (agent_state->read_state == VDI_PORT_READ_STATE_READ_HEADER) {
> > -        mig_data.agent2client.chunk_header_size = agent_state->receive_pos 
> > -
> > -            (uint8_t *)&agent_state->vdi_chunk_header;
> > +    if (agent_state->priv->read_state == VDI_PORT_READ_STATE_READ_HEADER) {
> > +        mig_data.agent2client.chunk_header_size = agent_state->priv
> > ->receive_pos -
> > +            (uint8_t *)&agent_state->priv->vdi_chunk_header;
> >  
> >          mig_data.agent2client.msg_header_done = FALSE;
> >          mig_data.agent2client.msg_header_partial_len = 0;
> > -        spice_assert(!agent_state->read_filter.msg_data_to_read);
> > +        spice_assert(!agent_state->priv->read_filter.msg_data_to_read);
> >      } else {
> >          mig_data.agent2client.chunk_header_size = sizeof(VDIChunkHeader);
> > -        mig_data.agent2client.chunk_header.size = agent_state
> > ->message_receive_len;
> > -        if (agent_state->read_state == VDI_PORT_READ_STATE_READ_DATA) {
> > +        mig_data.agent2client.chunk_header.size = agent_state->priv
> > ->message_receive_len;
> > +        if (agent_state->priv->read_state == VDI_PORT_READ_STATE_READ_DATA)
> > {
> >              /* in the middle of reading the message header (see
> > reds_on_main_channel_migrate) */
> >              mig_data.agent2client.msg_header_done = FALSE;
> >              mig_data.agent2client.msg_header_partial_len =
> > -                agent_state->receive_pos - agent_state->current_read_buf
> > ->data;
> > +                agent_state->priv->receive_pos - agent_state->priv
> > ->current_read_buf->data;
> >              spice_assert(mig_data.agent2client.msg_header_partial_len <
> > sizeof(VDAgentMessage));
> > -            spice_assert(!agent_state->read_filter.msg_data_to_read);
> > +            spice_assert(!agent_state->priv->read_filter.msg_data_to_read);
> >          } else {
> >              mig_data.agent2client.msg_header_done =  TRUE;
> > -            mig_data.agent2client.msg_remaining = agent_state
> > ->read_filter.msg_data_to_read;
> > -            mig_data.agent2client.msg_filter_result = agent_state
> > ->read_filter.result;
> > +            mig_data.agent2client.msg_remaining = agent_state->priv
> > ->read_filter.msg_data_to_read;
> > +            mig_data.agent2client.msg_filter_result = agent_state->priv
> > ->read_filter.result;
> >          }
> >      }
> >      spice_marshaller_add_uint32(m,
> > mig_data.agent2client.chunk_header_size);
> > @@ -1277,23 +1282,23 @@ void reds_marshall_migrate_data(RedsState *reds,
> > SpiceMarshaller *m)
> >      spice_marshaller_add_uint8(m, mig_data.agent2client.msg_header_done);
> >      spice_marshaller_add_uint32(m,
> > mig_data.agent2client.msg_header_partial_len);
> >      m2 = spice_marshaller_get_ptr_submarshaller(m, 0);
> > -    spice_marshaller_add(m2, agent_state->current_read_buf->data,
> > +    spice_marshaller_add(m2, agent_state->priv->current_read_buf->data,
> >                           mig_data.agent2client.msg_header_partial_len);
> >      spice_marshaller_add_uint32(m, mig_data.agent2client.msg_remaining);
> >      spice_marshaller_add_uint8(m, mig_data.agent2client.msg_filter_result);
> >  
> > -    mig_data.client2agent.msg_remaining = agent_state
> > ->write_filter.msg_data_to_read;
> > -    mig_data.client2agent.msg_filter_result = agent_state
> > ->write_filter.result;
> > +    mig_data.client2agent.msg_remaining = agent_state->priv
> > ->write_filter.msg_data_to_read;
> > +    mig_data.client2agent.msg_filter_result = agent_state->priv
> > ->write_filter.result;
> >      spice_marshaller_add_uint32(m, mig_data.client2agent.msg_remaining);
> >      spice_marshaller_add_uint8(m, mig_data.client2agent.msg_filter_result);
> >      spice_debug("from agent filter: discard all %d, wait_msg %u,
> > msg_filter_result %d",
> > -                agent_state->read_filter.discard_all,
> > -                agent_state->read_filter.msg_data_to_read,
> > -                 agent_state->read_filter.result);
> > +                agent_state->priv->read_filter.discard_all,
> > +                agent_state->priv->read_filter.msg_data_to_read,
> > +                 agent_state->priv->read_filter.result);
> >      spice_debug("to agent filter: discard all %d, wait_msg %u,
> > msg_filter_result %d",
> > -                agent_state->write_filter.discard_all,
> > -                agent_state->write_filter.msg_data_to_read,
> > -                 agent_state->write_filter.result);
> > +                agent_state->priv->write_filter.discard_all,
> > +                agent_state->priv->write_filter.msg_data_to_read,
> > +                 agent_state->priv->write_filter.result);
> >  }
> >  
> >  static int reds_agent_state_restore(RedsState *reds, SpiceMigrateDataMain
> > *mig_data)
> > @@ -1301,16 +1306,16 @@ static int reds_agent_state_restore(RedsState *reds,
> > SpiceMigrateDataMain *mig_d
> >      VDIPortState *agent_state = reds->agent_state;
> >      uint32_t chunk_header_remaining;
> >  
> > -    agent_state->vdi_chunk_header = mig_data->agent2client.chunk_header;
> > +    agent_state->priv->vdi_chunk_header = mig_data
> > ->agent2client.chunk_header;
> >      spice_assert(mig_data->agent2client.chunk_header_size <=
> > sizeof(VDIChunkHeader));
> >      chunk_header_remaining = sizeof(VDIChunkHeader) - mig_data
> > ->agent2client.chunk_header_size;
> >      if (chunk_header_remaining) {
> > -        agent_state->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > -        agent_state->receive_pos = (uint8_t *)&agent_state
> > ->vdi_chunk_header
> > +
> > +        agent_state->priv->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > +        agent_state->priv->receive_pos = (uint8_t *)&agent_state->priv
> > ->vdi_chunk_header +
> >              mig_data->agent2client.chunk_header_size;
> > -        agent_state->receive_len = chunk_header_remaining;
> > +        agent_state->priv->receive_len = chunk_header_remaining;
> >      } else {
> > -        agent_state->message_receive_len = agent_state
> > ->vdi_chunk_header.size;
> > +        agent_state->priv->message_receive_len = agent_state->priv
> > ->vdi_chunk_header.size;
> >      }
> >  
> >      if (!mig_data->agent2client.msg_header_done) {
> > @@ -1319,49 +1324,49 @@ static int reds_agent_state_restore(RedsState *reds,
> > SpiceMigrateDataMain *mig_d
> >          if (!chunk_header_remaining) {
> >              uint32_t cur_buf_size;
> >  
> > -            agent_state->read_state = VDI_PORT_READ_STATE_READ_DATA;
> > -            agent_state->current_read_buf =
> > vdi_port_state_get_read_buf(reds
> > ->agent_state);
> > -            spice_assert(agent_state->current_read_buf);
> > +            agent_state->priv->read_state = VDI_PORT_READ_STATE_READ_DATA;
> > +            agent_state->priv->current_read_buf =
> > vdi_port_state_get_read_buf(reds->agent_state);
> > +            spice_assert(agent_state->priv->current_read_buf);
> >              partial_msg_header = (uint8_t *)mig_data + mig_data
> > ->agent2client.msg_header_ptr -
> >                  sizeof(SpiceMiniDataHeader);
> > -            memcpy(agent_state->current_read_buf->data,
> > +            memcpy(agent_state->priv->current_read_buf->data,
> >                     partial_msg_header,
> >                     mig_data->agent2client.msg_header_partial_len);
> > -            agent_state->receive_pos = agent_state->current_read_buf->data
> > +
> > +            agent_state->priv->receive_pos = agent_state->priv
> > ->current_read_buf->data +
> >                                        mig_data
> > ->agent2client.msg_header_partial_len;
> > -            cur_buf_size = sizeof(agent_state->current_read_buf->data) -
> > +            cur_buf_size = sizeof(agent_state->priv->current_read_buf
> > ->data) 
> > -
> >                             mig_data->agent2client.msg_header_partial_len;
> > -            agent_state->receive_len = MIN(agent_state
> > ->message_receive_len,
> > cur_buf_size);
> > -            agent_state->current_read_buf->len = agent_state->receive_len +
> > +            agent_state->priv->receive_len = MIN(agent_state->priv
> > ->message_receive_len, cur_buf_size);
> > +            agent_state->priv->current_read_buf->len = agent_state->priv
> > ->receive_len +
> >                                                   mig_data
> > ->agent2client.msg_header_partial_len;
> > -            agent_state->message_receive_len -= agent_state->receive_len;
> > +            agent_state->priv->message_receive_len -= agent_state->priv
> > ->receive_len;
> >          } else {
> >              spice_assert(mig_data->agent2client.msg_header_partial_len ==
> > 0);
> >          }
> >      } else {
> > -            agent_state->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> > -            agent_state->current_read_buf = NULL;
> > -            agent_state->receive_pos = NULL;
> > -            agent_state->read_filter.msg_data_to_read = mig_data
> > ->agent2client.msg_remaining;
> > -            agent_state->read_filter.result = mig_data
> > ->agent2client.msg_filter_result;
> > +            agent_state->priv->read_state = VDI_PORT_READ_STATE_GET_BUFF;
> > +            agent_state->priv->current_read_buf = NULL;
> > +            agent_state->priv->receive_pos = NULL;
> > +            agent_state->priv->read_filter.msg_data_to_read = mig_data
> > ->agent2client.msg_remaining;
> > +            agent_state->priv->read_filter.result = mig_data
> > ->agent2client.msg_filter_result;
> >      }
> >  
> > -    agent_state->read_filter.discard_all = FALSE;
> > -    agent_state->write_filter.discard_all = !mig_data
> > ->client_agent_started;
> > -    agent_state->client_agent_started = mig_data->client_agent_started;
> > +    agent_state->priv->read_filter.discard_all = FALSE;
> > +    agent_state->priv->write_filter.discard_all = !mig_data
> > ->client_agent_started;
> > +    agent_state->priv->client_agent_started = mig_data
> > ->client_agent_started;
> >  
> > -    agent_state->write_filter.msg_data_to_read = mig_data
> > ->client2agent.msg_remaining;
> > -    agent_state->write_filter.result = mig_data
> > ->client2agent.msg_filter_result;
> > +    agent_state->priv->write_filter.msg_data_to_read = mig_data
> > ->client2agent.msg_remaining;
> > +    agent_state->priv->write_filter.result = mig_data
> > ->client2agent.msg_filter_result;
> >  
> >      spice_debug("to agent filter: discard all %d, wait_msg %u,
> > msg_filter_result %d",
> > -                agent_state->write_filter.discard_all,
> > -                agent_state->write_filter.msg_data_to_read,
> > -                 agent_state->write_filter.result);
> > +                agent_state->priv->write_filter.discard_all,
> > +                agent_state->priv->write_filter.msg_data_to_read,
> > +                 agent_state->priv->write_filter.result);
> >      spice_debug("from agent filter: discard all %d, wait_msg %u,
> > msg_filter_result %d",
> > -                agent_state->read_filter.discard_all,
> > -                agent_state->read_filter.msg_data_to_read,
> > -                 agent_state->read_filter.result);
> > -    return red_char_device_restore(agent_state->base, &mig_data
> > ->agent_base);
> > +                agent_state->priv->read_filter.discard_all,
> > +                agent_state->priv->read_filter.msg_data_to_read,
> > +                 agent_state->priv->read_filter.result);
> > +    return red_char_device_restore(agent_state->priv->base, &mig_data
> > ->agent_base);
> >  }
> >  
> >  /*
> > @@ -1384,14 +1389,14 @@ int reds_handle_migrate_data(RedsState *reds,
> > MainChannelClient *mcc,
> >          reds_send_mm_time(reds);
> >      }
> >      if (mig_data->agent_base.connected) {
> > -        if (agent_state->base) { // agent was attached before migration
> > data
> > has arrived
> > +        if (agent_state->priv->base) { // agent was attached before
> > migration
> > data has arrived
> >              if (!reds->vdagent) {
> > -                spice_assert(agent_state->plug_generation > 0);
> > +                spice_assert(agent_state->priv->plug_generation > 0);
> >                  main_channel_push_agent_disconnected(reds->main_channel);
> >                  spice_debug("agent is no longer connected");
> >              } else {
> > -                if (agent_state->plug_generation > 1) {
> > -                    /* red_char_device_reset takes care of not making the
> > device wait for migration data */
> > +                if (agent_state->priv->plug_generation > 1) {
> > +                    /* red_char_device_state_reset takes care of not making
> > the device wait for migration data */
> >                      spice_debug("agent has been detached and reattached
> > before receiving migration data");
> >                      main_channel_push_agent_disconnected(reds
> > ->main_channel);
> >                      main_channel_push_agent_connected(reds->main_channel);
> > @@ -1403,14 +1408,14 @@ int reds_handle_migrate_data(RedsState *reds,
> > MainChannelClient *mcc,
> >          } else {
> >              /* restore agent starte when the agent gets attached */
> >              spice_debug("saving mig_data");
> > -            spice_assert(agent_state->plug_generation == 0);
> > -            agent_state->mig_data = spice_memdup(mig_data, size);
> > +            spice_assert(agent_state->priv->plug_generation == 0);
> > +            agent_state->priv->mig_data = spice_memdup(mig_data, size);
> >          }
> >      } else {
> >          spice_debug("agent was not attached on the source host");
> >          if (reds->vdagent) {
> >              /* red_char_device_client_remove disables waiting for migration
> > data */
> > -            red_char_device_client_remove(agent_state->base,
> > +            red_char_device_client_remove(agent_state->priv->base,
> >                                            main_channel_client_get_base(mcc)
> > ->client);
> >              main_channel_push_agent_connected(reds->main_channel);
> >          }
> > @@ -1745,12 +1750,12 @@ static void reds_handle_main_link(RedsState *reds,
> > RedLinkInfo *link)
> >          if (mig_target) {
> >              spice_warning("unexpected: vdagent attached to destination
> > during
> > migration");
> >          }
> > -        agent_msg_filter_config(&reds->agent_state->read_filter,
> > +        agent_msg_filter_config(&reds->agent_state->priv->read_filter,
> >                                  reds->agent_copypaste,
> >                                  reds->agent_file_xfer,
> >                                  reds_use_client_monitors_config(reds));
> > -        reds->agent_state->read_filter.discard_all = FALSE;
> > -        reds->agent_state->plug_generation++;
> > +        reds->agent_state->priv->read_filter.discard_all = FALSE;
> > +        reds->agent_state->priv->plug_generation++;
> >      }
> >  
> >      if (!mig_target) {
> > @@ -3025,7 +3030,7 @@ static RedCharDevice *attach_to_red_agent(RedsState
> > *reds, SpiceCharDeviceInstan
> >      SpiceCharDeviceInterface *sif;
> >      RedCharDeviceCallbacks char_dev_state_cbs;
> >  
> > -    if (!state->base) {
> > +    if (!state->priv->base) {
> >          char_dev_state_cbs.read_one_msg_from_device =
> > vdi_port_read_one_msg_from_device;
> >          char_dev_state_cbs.ref_msg_to_client = vdi_port_ref_msg_to_client;
> >          char_dev_state_cbs.unref_msg_to_client =
> > vdi_port_unref_msg_to_client;
> > @@ -3034,14 +3039,14 @@ static RedCharDevice *attach_to_red_agent(RedsState
> > *reds, SpiceCharDeviceInstan
> >          char_dev_state_cbs.remove_client = vdi_port_remove_client;
> >          char_dev_state_cbs.on_free_self_token =
> > vdi_port_on_free_self_token;
> >  
> > -        state->base = red_char_device_create(sin,
> > -                                             reds,
> > -                                             REDS_TOKENS_TO_SEND,
> > -                                            
> >  REDS_NUM_INTERNAL_AGENT_MESSAGES,
> > -                                             &char_dev_state_cbs,
> > -                                             reds);
> > +        state->priv->base = red_char_device_create(sin,
> > +                                                   reds,
> > +                                                   REDS_TOKENS_TO_SEND,
> > +                                                  
> >  REDS_NUM_INTERNAL_AGENT_MESSAGES,
> > +                                                   &char_dev_state_cbs,
> > +                                                   reds);
> >      } else {
> > -        red_char_device_reset_dev_instance(state->base, sin);
> > +        red_char_device_reset_dev_instance(state->priv->base, sin);
> >      }
> >  
> >      reds->vdagent = sin;
> > @@ -3053,13 +3058,13 @@ static RedCharDevice *attach_to_red_agent(RedsState
> > *reds, SpiceCharDeviceInstan
> >      }
> >  
> >      if (!reds_main_channel_connected(reds)) {
> > -        return state->base;
> > +        return state->priv->base;
> >      }
> >  
> > -    state->read_filter.discard_all = FALSE;
> > -    reds->agent_state->plug_generation++;
> > +    state->priv->read_filter.discard_all = FALSE;
> > +    reds->agent_state->priv->plug_generation++;
> >  
> > -    if (reds->agent_state->mig_data ||
> > +    if (reds->agent_state->priv->mig_data ||
> >          red_channel_is_waiting_for_migrate_data(&reds->main_channel->base))
> > {
> >          /* Migration in progress (code is running on the destination host):
> >           * 1.  Add the client to spice char device, if it was not already
> > added.
> > @@ -3068,10 +3073,10 @@ static RedCharDevice *attach_to_red_agent(RedsState
> > *reds, SpiceCharDeviceInstan
> >           * 2.b If this happens second ==> we already have spice migrate
> > data
> >           *     then restore state
> >           */
> > -        if (!red_char_device_client_exists(reds->agent_state->base,
> > reds_get_client(reds))) {
> > +        if (!red_char_device_client_exists(reds->agent_state->priv->base,
> > reds_get_client(reds))) {
> >              int client_added;
> >  
> > -            client_added = red_char_device_client_add(reds->agent_state
> > ->base,
> > +            client_added = red_char_device_client_add(reds->agent_state
> > ->priv
> > ->base,
> >                                                       
> >  reds_get_client(reds),
> >                                                        TRUE, /* flow control
> > */
> >                                                       
> >  REDS_VDI_PORT_NUM_RECEIVE_BUFFS,
> > @@ -3085,12 +3090,12 @@ static RedCharDevice *attach_to_red_agent(RedsState
> > *reds, SpiceCharDeviceInstan
> >              }
> >          }
> >  
> > -        if (reds->agent_state->mig_data) {
> > +        if (reds->agent_state->priv->mig_data) {
> >              spice_debug("restoring state from stored migration data");
> > -            spice_assert(reds->agent_state->plug_generation == 1);
> > -            reds_agent_state_restore(reds, reds->agent_state->mig_data);
> > -            free(reds->agent_state->mig_data);
> > -            reds->agent_state->mig_data = NULL;
> > +            spice_assert(reds->agent_state->priv->plug_generation == 1);
> > +            reds_agent_state_restore(reds, reds->agent_state->priv
> > ->mig_data);
> > +            free(reds->agent_state->priv->mig_data);
> > +            reds->agent_state->priv->mig_data = NULL;
> >          }
> >          else {
> >              spice_debug("waiting for migration data");
> > @@ -3101,7 +3106,7 @@ static RedCharDevice *attach_to_red_agent(RedsState
> > *reds, SpiceCharDeviceInstan
> >          main_channel_push_agent_connected(reds->main_channel);
> >      }
> >  
> > -    return state->base;
> > +    return state->priv->base;
> >  }
> >  
> >  SPICE_GNUC_VISIBLE void
> > spice_server_char_device_wakeup(SpiceCharDeviceInstance* sin)
> > @@ -3365,23 +3370,23 @@ static void reds_init_vd_agent_resources(RedsState
> > *reds)
> >  
> >      reds->agent_state = g_new0(VDIPortState, 1);
> >      state = reds->agent_state;
> > -    ring_init(&state->read_bufs);
> > -    agent_msg_filter_init(&state->write_filter, reds->agent_copypaste,
> > +    ring_init(&state->priv->read_bufs);
> > +    agent_msg_filter_init(&state->priv->write_filter, reds
> > ->agent_copypaste,
> >                            reds->agent_file_xfer,
> >                            reds_use_client_monitors_config(reds), TRUE);
> > -    agent_msg_filter_init(&state->read_filter, reds->agent_copypaste,
> > +    agent_msg_filter_init(&state->priv->read_filter, reds->agent_copypaste,
> >                            reds->agent_file_xfer,
> >                            reds_use_client_monitors_config(reds), TRUE);
> >  
> > -    state->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > -    state->receive_pos = (uint8_t *)&state->vdi_chunk_header;
> > -    state->receive_len = sizeof(state->vdi_chunk_header);
> > +    state->priv->read_state = VDI_PORT_READ_STATE_READ_HEADER;
> > +    state->priv->receive_pos = (uint8_t *)&state->priv->vdi_chunk_header;
> > +    state->priv->receive_len = sizeof(state->priv->vdi_chunk_header);
> >  
> >      for (i = 0; i < REDS_VDI_PORT_NUM_RECEIVE_BUFFS; i++) {
> >          VDIReadBuf *buf = spice_new0(VDIReadBuf, 1);
> >          buf->state = state;
> >          ring_item_init(&buf->link);
> > -        ring_add(&reds->agent_state->read_bufs, &buf->link);
> > +        ring_add(&reds->agent_state->priv->read_bufs, &buf->link);
> >      }
> >  }
> >  
> > @@ -3868,16 +3873,16 @@ SPICE_GNUC_VISIBLE int
> > spice_server_set_agent_mouse(SpiceServer *reds, int enabl
> >  SPICE_GNUC_VISIBLE int spice_server_set_agent_copypaste(SpiceServer *reds,
> > int enable)
> >  {
> >      reds->agent_copypaste = enable;
> > -    reds->agent_state->write_filter.copy_paste_enabled = reds
> > ->agent_copypaste;
> > -    reds->agent_state->read_filter.copy_paste_enabled = reds
> > ->agent_copypaste;
> > +    reds->agent_state->priv->write_filter.copy_paste_enabled = reds
> > ->agent_copypaste;
> > +    reds->agent_state->priv->read_filter.copy_paste_enabled = reds
> > ->agent_copypaste;
> >      return 0;
> >  }
> >  
> >  SPICE_GNUC_VISIBLE int spice_server_set_agent_file_xfer(SpiceServer *reds,
> > int enable)
> >  {
> >      reds->agent_file_xfer = enable;
> > -    reds->agent_state->write_filter.file_xfer_enabled = reds
> > ->agent_file_xfer;
> > -    reds->agent_state->read_filter.file_xfer_enabled = reds
> > ->agent_file_xfer;
> > +    reds->agent_state->priv->write_filter.file_xfer_enabled = reds
> > ->agent_file_xfer;
> > +    reds->agent_state->priv->read_filter.file_xfer_enabled = reds
> > ->agent_file_xfer;
> >      return 0;
> >  }
> >  
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list