[Spice-devel] [PATCH v2 03/15] Rename SpiceCharDeviceState to RedCharDevice

Frediano Ziglio fziglio at redhat.com
Fri Apr 1 10:57:58 UTC 2016


> 
> This is more consistent with internal type naming convention, and it
> paves the way for a new char device GObject heirarchy
> ---
>  server/char-device.c  | 107
>  +++++++++++++++++++++++++-------------------------
>  server/char-device.h  |  58 ++++++++++++++-------------
>  server/reds-private.h |   2 +-
>  server/reds.c         |  34 ++++++++--------
>  server/reds.h         |   3 +-
>  server/smartcard.c    |  40 +++++++++----------
>  server/smartcard.h    |   2 +-
>  server/spicevmc.c     |  57 ++++++++++++++-------------
>  8 files changed, 155 insertions(+), 148 deletions(-)
> 
> diff --git a/server/char-device.c b/server/char-device.c
> index ea1fb17..0ee833f 100644
> --- a/server/char-device.c
> +++ b/server/char-device.c
> @@ -33,7 +33,7 @@
>  typedef struct SpiceCharDeviceClientState SpiceCharDeviceClientState;
>  struct SpiceCharDeviceClientState {
>      RingItem link;
> -    SpiceCharDeviceState *dev;
> +    RedCharDevice *dev;
>      RedClient *client;
>      int do_flow_control;
>      uint64_t num_client_tokens;
> @@ -74,6 +74,7 @@ struct RedCharDevicePrivate {
>      SpiceServer *reds;
>  };
>  
> +/* typedef'ed as RedCharDevice */
>  struct SpiceCharDeviceState {
>      struct RedCharDevicePrivate priv[1];
>  };
> @@ -87,8 +88,8 @@ enum {
>  
>  /* Holding references for avoiding access violation if the char device was
>   * destroyed during a callback */
> -static void spice_char_device_state_ref(SpiceCharDeviceState *char_dev);
> -static void spice_char_device_state_unref(SpiceCharDeviceState *char_dev);
> +static void spice_char_device_state_ref(RedCharDevice *char_dev);
> +static void spice_char_device_state_unref(RedCharDevice *char_dev);
>  static void red_char_device_write_buffer_unref(RedCharDeviceWriteBuffer
>  *write_buf);
>  
>  static void spice_char_dev_write_retry(void *opaque);
> @@ -99,27 +100,27 @@ typedef struct RedCharDeviceMsgToClientItem {
>  } RedCharDeviceMsgToClientItem;
>  
>  static RedCharDeviceMsgToClient *
> -spice_char_device_read_one_msg_from_device(SpiceCharDeviceState *dev)
> +spice_char_device_read_one_msg_from_device(RedCharDevice *dev)
>  {
>     return dev->priv->cbs.read_one_msg_from_device(dev->priv->sin,
>     dev->priv->opaque);
>  }
>  
>  static RedCharDeviceMsgToClient *
> -spice_char_device_ref_msg_to_client(SpiceCharDeviceState *dev,
> +spice_char_device_ref_msg_to_client(RedCharDevice *dev,
>                                      RedCharDeviceMsgToClient *msg)
>  {
>     return dev->priv->cbs.ref_msg_to_client(msg, dev->priv->opaque);
>  }
>  
>  static void
> -spice_char_device_unref_msg_to_client(SpiceCharDeviceState *dev,
> +spice_char_device_unref_msg_to_client(RedCharDevice *dev,
>                                        RedCharDeviceMsgToClient *msg)
>  {
>     dev->priv->cbs.unref_msg_to_client(msg, dev->priv->opaque);
>  }
>  
>  static void
> -spice_char_device_send_msg_to_client(SpiceCharDeviceState *dev,
> +spice_char_device_send_msg_to_client(RedCharDevice *dev,
>                                       RedCharDeviceMsgToClient *msg,
>                                       RedClient *client)
>  {
> @@ -127,7 +128,7 @@ spice_char_device_send_msg_to_client(SpiceCharDeviceState
> *dev,
>  }
>  
>  static void
> -spice_char_device_send_tokens_to_client(SpiceCharDeviceState *dev,
> +spice_char_device_send_tokens_to_client(RedCharDevice *dev,
>                                          RedClient *client,
>                                          uint32_t tokens)
>  {
> @@ -135,7 +136,7 @@
> spice_char_device_send_tokens_to_client(SpiceCharDeviceState *dev,
>  }
>  
>  static void
> -spice_char_device_on_free_self_token(SpiceCharDeviceState *dev)
> +spice_char_device_on_free_self_token(RedCharDevice *dev)
>  {
>     if (dev->priv->cbs.on_free_self_token != NULL) {
>         dev->priv->cbs.on_free_self_token(dev->priv->opaque);
> @@ -143,7 +144,7 @@ spice_char_device_on_free_self_token(SpiceCharDeviceState
> *dev)
>  }
>  
>  static void
> -spice_char_device_remove_client(SpiceCharDeviceState *dev, RedClient
> *client)
> +spice_char_device_remove_client(RedCharDevice *dev, RedClient *client)
>  {
>     dev->priv->cbs.remove_client(client, dev->priv->opaque);
>  }
> @@ -169,7 +170,7 @@ static void write_buffers_queue_free(Ring *write_queue)
>      }
>  }
>  
> -static void spice_char_device_write_buffer_pool_add(SpiceCharDeviceState
> *dev,
> +static void spice_char_device_write_buffer_pool_add(RedCharDevice *dev,
>                                                      RedCharDeviceWriteBuffer
>                                                      *buf)
>  {
>      if (buf->refs == 1 &&
> @@ -186,7 +187,7 @@ static void
> spice_char_device_write_buffer_pool_add(SpiceCharDeviceState *dev,
>      red_char_device_write_buffer_unref(buf);
>  }
>  
> -static void spice_char_device_client_send_queue_free(SpiceCharDeviceState
> *dev,
> +static void spice_char_device_client_send_queue_free(RedCharDevice *dev,
>                                                       SpiceCharDeviceClientState
>                                                       *dev_client)
>  {
>      spice_debug("send_queue_empty %d",
>      ring_is_empty(&dev_client->send_queue));
> @@ -204,7 +205,7 @@ static void
> spice_char_device_client_send_queue_free(SpiceCharDeviceState *dev,
>      dev_client->send_queue_size = 0;
>  }
>  
> -static void spice_char_device_client_free(SpiceCharDeviceState *dev,
> +static void spice_char_device_client_free(RedCharDevice *dev,
>                                            SpiceCharDeviceClientState
>                                            *dev_client)
>  {
>      RingItem *item, *next;
> @@ -241,12 +242,12 @@ static void
> spice_char_device_client_free(SpiceCharDeviceState *dev,
>  
>  static void
>  spice_char_device_handle_client_overflow(SpiceCharDeviceClientState
>  *dev_client)
>  {
> -    SpiceCharDeviceState *dev = dev_client->dev;
> +    RedCharDevice *dev = dev_client->dev;
>      spice_printerr("dev %p client %p ", dev, dev_client);
>      spice_char_device_remove_client(dev, dev_client->client);
>  }
>  
> -static SpiceCharDeviceClientState
> *spice_char_device_client_find(SpiceCharDeviceState *dev,
> +static SpiceCharDeviceClientState
> *spice_char_device_client_find(RedCharDevice *dev,
>                                                                   RedClient
>                                                                   *client)
>  {
>      RingItem *item;
> @@ -278,7 +279,7 @@ static int
> spice_char_device_can_send_to_client(SpiceCharDeviceClientState *dev_
>      return !dev_client->do_flow_control || dev_client->num_send_tokens;
>  }
>  
> -static uint64_t spice_char_device_max_send_tokens(SpiceCharDeviceState *dev)
> +static uint64_t spice_char_device_max_send_tokens(RedCharDevice *dev)
>  {
>      RingItem *item;
>      uint64_t max = 0;
> @@ -303,7 +304,7 @@ static uint64_t
> spice_char_device_max_send_tokens(SpiceCharDeviceState *dev)
>  static void
>  spice_char_device_add_msg_to_client_queue(SpiceCharDeviceClientState
>  *dev_client,
>                                                        RedCharDeviceMsgToClient
>                                                        *msg)
>  {
> -    SpiceCharDeviceState *dev = dev_client->dev;
> +    RedCharDevice *dev = dev_client->dev;
>      RedCharDeviceMsgToClientItem *msg_item;
>  
>      if (dev_client->send_queue_size >= dev_client->max_send_queue_size) {
> @@ -322,7 +323,7 @@ static void
> spice_char_device_add_msg_to_client_queue(SpiceCharDeviceClientState
>      }
>  }
>  
> -static void spice_char_device_send_msg_to_clients(SpiceCharDeviceState *dev,
> +static void spice_char_device_send_msg_to_clients(RedCharDevice *dev,
>                                                    RedCharDeviceMsgToClient
>                                                    *msg)
>  {
>      RingItem *item, *next;
> @@ -343,7 +344,7 @@ static void
> spice_char_device_send_msg_to_clients(SpiceCharDeviceState *dev,
>      }
>  }
>  
> -static int spice_char_device_read_from_device(SpiceCharDeviceState *dev)
> +static int spice_char_device_read_from_device(RedCharDevice *dev)
>  {
>      uint64_t max_send_tokens;
>      int did_read = FALSE;
> @@ -416,7 +417,7 @@ static void
> spice_char_device_client_send_queue_push(SpiceCharDeviceClientState
>  static void
>  spice_char_device_send_to_client_tokens_absorb(SpiceCharDeviceClientState
>  *dev_client,
>                                                             uint32_t tokens)
>  {
> -    SpiceCharDeviceState *dev = dev_client->dev;
> +    RedCharDevice *dev = dev_client->dev;
>      dev_client->num_send_tokens += tokens;
>  
>      if (dev_client->send_queue_size) {
> @@ -435,7 +436,7 @@ static void
> spice_char_device_send_to_client_tokens_absorb(SpiceCharDeviceClient
>      }
>  }
>  
> -void spice_char_device_send_to_client_tokens_add(SpiceCharDeviceState *dev,
> +void spice_char_device_send_to_client_tokens_add(RedCharDevice *dev,
>                                                   RedClient *client,
>                                                   uint32_t tokens)
>  {
> @@ -450,7 +451,7 @@ void
> spice_char_device_send_to_client_tokens_add(SpiceCharDeviceState *dev,
>      spice_char_device_send_to_client_tokens_absorb(dev_client, tokens);
>  }
>  
> -void spice_char_device_send_to_client_tokens_set(SpiceCharDeviceState *dev,
> +void spice_char_device_send_to_client_tokens_set(RedCharDevice *dev,
>                                                   RedClient *client,
>                                                   uint32_t tokens)
>  {
> @@ -471,7 +472,7 @@ void
> spice_char_device_send_to_client_tokens_set(SpiceCharDeviceState *dev,
>   * Writing to the device  *
>  ***************************/
>  
> -static void spice_char_device_client_tokens_add(SpiceCharDeviceState *dev,
> +static void spice_char_device_client_tokens_add(RedCharDevice *dev,
>                                                  SpiceCharDeviceClientState
>                                                  *dev_client,
>                                                  uint32_t num_tokens)
>  {
> @@ -491,7 +492,7 @@ static void
> spice_char_device_client_tokens_add(SpiceCharDeviceState *dev,
>      }
>  }
>  
> -static int spice_char_device_write_to_device(SpiceCharDeviceState *dev)
> +static int spice_char_device_write_to_device(RedCharDevice *dev)
>  {
>      SpiceCharDeviceInterface *sif;
>      int total = 0;
> @@ -566,7 +567,7 @@ static int
> spice_char_device_write_to_device(SpiceCharDeviceState *dev)
>  
>  static void spice_char_dev_write_retry(void *opaque)
>  {
> -    SpiceCharDeviceState *dev = opaque;
> +    RedCharDevice *dev = opaque;
>  
>      if (dev->priv->write_to_dev_timer) {
>          reds_core_timer_cancel(dev->priv->reds,
>          dev->priv->write_to_dev_timer);
> @@ -575,7 +576,7 @@ static void spice_char_dev_write_retry(void *opaque)
>  }
>  
>  static RedCharDeviceWriteBuffer *__spice_char_device_write_buffer_get(
> -    SpiceCharDeviceState *dev, RedClient *client,
> +    RedCharDevice *dev, RedClient *client,
>      int size, int origin, int migrated_data_tokens)
>  {
>      RingItem *item;
> @@ -634,7 +635,7 @@ error:
>      return NULL;
>  }
>  
> -RedCharDeviceWriteBuffer
> *spice_char_device_write_buffer_get(SpiceCharDeviceState *dev,
> +RedCharDeviceWriteBuffer *spice_char_device_write_buffer_get(RedCharDevice
> *dev,
>                                                               RedClient
>                                                               *client,
>                                                               int size)
>  {
> @@ -644,7 +645,7 @@ RedCharDeviceWriteBuffer
> *spice_char_device_write_buffer_get(SpiceCharDeviceStat
>  }
>  
>  RedCharDeviceWriteBuffer
>  *spice_char_device_write_buffer_get_server_no_token(
> -    SpiceCharDeviceState *dev, int size)
> +    RedCharDevice *dev, int size)
>  {
>     return  __spice_char_device_write_buffer_get(dev, NULL, size,
>               WRITE_BUFFER_ORIGIN_SERVER_NO_TOKEN, 0);
> @@ -667,7 +668,7 @@ static void
> red_char_device_write_buffer_unref(RedCharDeviceWriteBuffer *write_b
>          red_char_device_write_buffer_free(write_buf);
>  }
>  
> -void spice_char_device_write_buffer_add(SpiceCharDeviceState *dev,
> +void spice_char_device_write_buffer_add(RedCharDevice *dev,
>                                          RedCharDeviceWriteBuffer *write_buf)
>  {
>      spice_assert(dev);
> @@ -683,7 +684,7 @@ void
> spice_char_device_write_buffer_add(SpiceCharDeviceState *dev,
>      spice_char_device_write_to_device(dev);
>  }
>  
> -void spice_char_device_write_buffer_release(SpiceCharDeviceState *dev,
> +void spice_char_device_write_buffer_release(RedCharDevice *dev,
>                                              RedCharDeviceWriteBuffer
>                                              *write_buf)
>  {
>      int buf_origin = write_buf->origin;
> @@ -718,14 +719,14 @@ void
> spice_char_device_write_buffer_release(SpiceCharDeviceState *dev,
>   * char_device_state management *
>   ********************************/
>  
> -SpiceCharDeviceState *spice_char_device_state_create(SpiceCharDeviceInstance
> *sin,
> -                                                     RedsState *reds,
> -                                                     uint32_t
> client_tokens_interval,
> -                                                     uint32_t self_tokens,
> -
> SpiceCharDeviceCallbacks
> *cbs,
> -                                                     void *opaque)
> +RedCharDevice *spice_char_device_state_create(SpiceCharDeviceInstance *sin,
> +                                              RedsState *reds,
> +                                              uint32_t
> client_tokens_interval,
> +                                              uint32_t self_tokens,
> +                                              SpiceCharDeviceCallbacks *cbs,
> +                                              void *opaque)
>  {
> -    SpiceCharDeviceState *char_dev;
> +    RedCharDevice *char_dev;
>      SpiceCharDeviceInterface *sif;
>  
>      spice_assert(sin);
> @@ -733,7 +734,7 @@ SpiceCharDeviceState
> *spice_char_device_state_create(SpiceCharDeviceInstance *si
>                   cbs->unref_msg_to_client && cbs->send_msg_to_client &&
>                   cbs->send_tokens_to_client && cbs->remove_client);
>  
> -    char_dev = spice_new0(SpiceCharDeviceState, 1);
> +    char_dev = spice_new0(RedCharDevice, 1);
>      char_dev->priv->sin = sin;
>      char_dev->priv->reds = reds;
>      char_dev->priv->cbs = *cbs;
> @@ -760,7 +761,7 @@ SpiceCharDeviceState
> *spice_char_device_state_create(SpiceCharDeviceInstance *si
>      return char_dev;
>  }
>  
> -void spice_char_device_state_reset_dev_instance(SpiceCharDeviceState *state,
> +void spice_char_device_state_reset_dev_instance(RedCharDevice *state,
>                                                  SpiceCharDeviceInstance
>                                                  *sin)
>  {
>      spice_debug("sin %p dev_state %p", sin, state);
> @@ -768,17 +769,17 @@ void
> spice_char_device_state_reset_dev_instance(SpiceCharDeviceState *state,
>      sin->st = state;
>  }
>  
> -void *spice_char_device_state_opaque_get(SpiceCharDeviceState *dev)
> +void *spice_char_device_state_opaque_get(RedCharDevice *dev)
>  {
>      return dev->priv->opaque;
>  }
>  
> -static void spice_char_device_state_ref(SpiceCharDeviceState *char_dev)
> +static void spice_char_device_state_ref(RedCharDevice *char_dev)
>  {
>      char_dev->priv->refs++;
>  }
>  
> -static void spice_char_device_state_unref(SpiceCharDeviceState *char_dev)
> +static void spice_char_device_state_unref(RedCharDevice *char_dev)
>  {
>      /* The refs field protects the char_dev from being deallocated in
>       * case spice_char_device_state_destroy has been called
> @@ -792,7 +793,7 @@ static void
> spice_char_device_state_unref(SpiceCharDeviceState *char_dev)
>      }
>  }
>  
> -void spice_char_device_state_destroy(SpiceCharDeviceState *char_dev)
> +void spice_char_device_state_destroy(RedCharDevice *char_dev)
>  {
>      reds_on_char_device_state_destroy(char_dev->priv->reds, char_dev);
>      if (char_dev->priv->write_to_dev_timer) {
> @@ -848,7 +849,7 @@ static SpiceCharDeviceClientState
> *red_char_device_client_new(RedClient *client,
>      return dev_client;
>  }
>  
> -int spice_char_device_client_add(SpiceCharDeviceState *dev,
> +int spice_char_device_client_add(RedCharDevice *dev,
>                                   RedClient *client,
>                                   int do_flow_control,
>                                   uint32_t max_send_queue_size,
> @@ -882,7 +883,7 @@ int spice_char_device_client_add(SpiceCharDeviceState
> *dev,
>      return TRUE;
>  }
>  
> -void spice_char_device_client_remove(SpiceCharDeviceState *dev,
> +void spice_char_device_client_remove(RedCharDevice *dev,
>                                       RedClient *client)
>  {
>      SpiceCharDeviceClientState *dev_client;
> @@ -908,13 +909,13 @@ void
> spice_char_device_client_remove(SpiceCharDeviceState *dev,
>      }
>  }
>  
> -int spice_char_device_client_exists(SpiceCharDeviceState *dev,
> +int spice_char_device_client_exists(RedCharDevice *dev,
>                                      RedClient *client)
>  {
>      return (spice_char_device_client_find(dev, client) != NULL);
>  }
>  
> -void spice_char_device_start(SpiceCharDeviceState *dev)
> +void spice_char_device_start(RedCharDevice *dev)
>  {
>      spice_debug("dev_state %p", dev);
>      dev->priv->running = TRUE;
> @@ -924,7 +925,7 @@ void spice_char_device_start(SpiceCharDeviceState *dev)
>      spice_char_device_state_unref(dev);
>  }
>  
> -void spice_char_device_stop(SpiceCharDeviceState *dev)
> +void spice_char_device_stop(RedCharDevice *dev)
>  {
>      spice_debug("dev_state %p", dev);
>      dev->priv->running = FALSE;
> @@ -934,7 +935,7 @@ void spice_char_device_stop(SpiceCharDeviceState *dev)
>      }
>  }
>  
> -void spice_char_device_reset(SpiceCharDeviceState *dev)
> +void spice_char_device_reset(RedCharDevice *dev)
>  {
>      RingItem *client_item;
>  
> @@ -966,7 +967,7 @@ void spice_char_device_reset(SpiceCharDeviceState *dev)
>      dev->priv->sin = NULL;
>  }
>  
> -void spice_char_device_wakeup(SpiceCharDeviceState *dev)
> +void spice_char_device_wakeup(RedCharDevice *dev)
>  {
>      spice_char_device_write_to_device(dev);
>      spice_char_device_read_from_device(dev);
> @@ -995,7 +996,7 @@ static void
> migrate_data_marshaller_write_buffer_free(uint8_t *data, void *opaqu
>      red_char_device_write_buffer_unref(write_buf);
>  }
>  
> -void spice_char_device_state_migrate_data_marshall(SpiceCharDeviceState
> *dev,
> +void spice_char_device_state_migrate_data_marshall(RedCharDevice *dev,
>                                                     SpiceMarshaller *m)
>  {
>      SpiceCharDeviceClientState *client_state;
> @@ -1055,7 +1056,7 @@ void
> spice_char_device_state_migrate_data_marshall(SpiceCharDeviceState *dev,
>                  dev, *write_to_dev_size_ptr, *write_to_dev_tokens_ptr);
>  }
>  
> -int spice_char_device_state_restore(SpiceCharDeviceState *dev,
> +int spice_char_device_state_restore(RedCharDevice *dev,
>                                      SpiceMigrateDataCharDevice *mig_data)
>  {
>      SpiceCharDeviceClientState *client_state;
> @@ -1106,7 +1107,7 @@ int
> spice_char_device_state_restore(SpiceCharDeviceState *dev,
>      return TRUE;
>  }
>  
> -SpiceServer* spice_char_device_get_server(SpiceCharDeviceState *dev)
> +SpiceServer* spice_char_device_get_server(RedCharDevice *dev)
>  {
>      return dev->priv->reds;
>  }
> diff --git a/server/char-device.h b/server/char-device.h
> index 1076e07..86bf1b9 100644
> --- a/server/char-device.h
> +++ b/server/char-device.h
> @@ -80,6 +80,8 @@
>   * */
>  
>  struct RedsState;
> +/* SpiceCharDeviceState is public API, but internally we use RedCharDevice
> */
> +typedef struct SpiceCharDeviceState RedCharDevice;
>  
>  /* buffer that is used for writing to the device */
>  typedef struct RedCharDeviceWriteBuffer {
> @@ -129,25 +131,25 @@ typedef struct SpiceCharDeviceCallbacks {
>      void (*remove_client)(RedClient *client, void *opaque);
>  } SpiceCharDeviceCallbacks;
>  
> -SpiceCharDeviceState *spice_char_device_state_create(SpiceCharDeviceInstance
> *sin,
> -                                                     struct RedsState *reds,
> -                                                     uint32_t
> client_tokens_interval,
> -                                                     uint32_t self_tokens,
> -
> SpiceCharDeviceCallbacks
> *cbs,
> -                                                     void *opaque);
> +RedCharDevice *spice_char_device_state_create(SpiceCharDeviceInstance *sin,
> +                                              struct RedsState *reds,
> +                                              uint32_t
> client_tokens_interval,
> +                                              uint32_t self_tokens,
> +                                              SpiceCharDeviceCallbacks *cbs,
> +                                              void *opaque);
>  
> -void spice_char_device_state_reset_dev_instance(SpiceCharDeviceState *dev,
> +void spice_char_device_state_reset_dev_instance(RedCharDevice *dev,
>                                                  SpiceCharDeviceInstance
>                                                  *sin);
> -void spice_char_device_state_destroy(SpiceCharDeviceState *dev);
> +void spice_char_device_state_destroy(RedCharDevice *dev);
>  
> -void *spice_char_device_state_opaque_get(SpiceCharDeviceState *dev);
> +void *spice_char_device_state_opaque_get(RedCharDevice *dev);
>  
>  /* only one client is supported */
> -void spice_char_device_state_migrate_data_marshall(SpiceCharDeviceState
> *dev,
> +void spice_char_device_state_migrate_data_marshall(RedCharDevice *dev,
>                                                    SpiceMarshaller *m);
>  void spice_char_device_state_migrate_data_marshall_empty(SpiceMarshaller
>  *m);
>  
> -int spice_char_device_state_restore(SpiceCharDeviceState *dev,
> +int spice_char_device_state_restore(RedCharDevice *dev,
>                                      SpiceMigrateDataCharDevice *mig_data);
>  
>  /*
> @@ -165,11 +167,11 @@ int
> spice_char_device_state_restore(SpiceCharDeviceState *dev,
>   *
>   *  todo: change AGENT_CONNECT msg to contain tokens count.
>   */
> -void spice_char_device_reset(SpiceCharDeviceState *dev);
> +void spice_char_device_reset(RedCharDevice *dev);
>  
>  /* max_send_queue_size = how many messages we can read from the device and
>  enqueue for this client,
>   * when we have tokens for other clients and no tokens for this one */
> -int spice_char_device_client_add(SpiceCharDeviceState *dev,
> +int spice_char_device_client_add(RedCharDevice *dev,
>                                   RedClient *client,
>                                   int do_flow_control,
>                                   uint32_t max_send_queue_size,
> @@ -177,45 +179,45 @@ int spice_char_device_client_add(SpiceCharDeviceState
> *dev,
>                                   uint32_t num_send_tokens,
>                                   int wait_for_migrate_data);
>  
> -void spice_char_device_client_remove(SpiceCharDeviceState *dev,
> +void spice_char_device_client_remove(RedCharDevice *dev,
>                                       RedClient *client);
> -int spice_char_device_client_exists(SpiceCharDeviceState *dev,
> +int spice_char_device_client_exists(RedCharDevice *dev,
>                                      RedClient *client);
>  
> -void spice_char_device_start(SpiceCharDeviceState *dev);
> -void spice_char_device_stop(SpiceCharDeviceState *dev);
> -SpiceServer* spice_char_device_get_server(SpiceCharDeviceState *dev);
> +void spice_char_device_start(RedCharDevice *dev);
> +void spice_char_device_stop(RedCharDevice *dev);
> +SpiceServer* spice_char_device_get_server(RedCharDevice *dev);
>  
>  /** Read from device **/
>  
> -void spice_char_device_wakeup(SpiceCharDeviceState *dev);
> +void spice_char_device_wakeup(RedCharDevice *dev);
>  
> -void spice_char_device_send_to_client_tokens_add(SpiceCharDeviceState *dev,
> +void spice_char_device_send_to_client_tokens_add(RedCharDevice *dev,
>                                                   RedClient *client,
>                                                   uint32_t tokens);
>  
>  
> -void spice_char_device_send_to_client_tokens_set(SpiceCharDeviceState *dev,
> +void spice_char_device_send_to_client_tokens_set(RedCharDevice *dev,
>                                                   RedClient *client,
>                                                   uint32_t tokens);
>  /** Write to device **/
>  
> -RedCharDeviceWriteBuffer
> *spice_char_device_write_buffer_get(SpiceCharDeviceState *dev,
> +RedCharDeviceWriteBuffer *spice_char_device_write_buffer_get(RedCharDevice
> *dev,
>                                                               RedClient
>                                                               *client, int
>                                                               size);
>  RedCharDeviceWriteBuffer
>  *spice_char_device_write_buffer_get_server_no_token(
> -    SpiceCharDeviceState *dev, int size);
> +    RedCharDevice *dev, int size);
>  
>  /* Either add the buffer to the write queue or release it */
> -void spice_char_device_write_buffer_add(SpiceCharDeviceState *dev,
> +void spice_char_device_write_buffer_add(RedCharDevice *dev,
>                                          RedCharDeviceWriteBuffer
>                                          *write_buf);
> -void spice_char_device_write_buffer_release(SpiceCharDeviceState *dev,
> +void spice_char_device_write_buffer_release(RedCharDevice *dev,
>                                              RedCharDeviceWriteBuffer
>                                              *write_buf);
>  
>  /* api for specific char devices */
>  
> -SpiceCharDeviceState *spicevmc_device_connect(struct RedsState *reds,
> -                                              SpiceCharDeviceInstance *sin,
> -                                              uint8_t channel_type);
> +RedCharDevice *spicevmc_device_connect(struct RedsState *reds,
> +                                       SpiceCharDeviceInstance *sin,
> +                                       uint8_t channel_type);
>  void spicevmc_device_disconnect(struct RedsState *reds,
>                                  SpiceCharDeviceInstance *char_device);
>  
> diff --git a/server/reds-private.h b/server/reds-private.h
> index 560a21b..b78e25d 100644
> --- a/server/reds-private.h
> +++ b/server/reds-private.h
> @@ -58,7 +58,7 @@ enum {
>  };
>  
>  struct VDIPortState {
> -    SpiceCharDeviceState *base;
> +    RedCharDevice *base;
>      uint32_t plug_generation;
>      int client_agent_started;
>  
> diff --git a/server/reds.c b/server/reds.c
> index 1776186..bb96d09 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -171,8 +171,8 @@ static RedsMigTargetClient*
> reds_mig_target_client_find(RedsState *reds, RedClie
>  static void reds_mig_target_client_free(RedsMigTargetClient *mig_client);
>  static void reds_mig_cleanup_wait_disconnect(RedsState *reds);
>  static void reds_mig_remove_wait_disconnect_client(RedsState *reds,
>  RedClient *client);
> -static void reds_char_device_add_state(RedsState *reds, SpiceCharDeviceState
> *st);
> -static void reds_char_device_remove_state(RedsState *reds,
> SpiceCharDeviceState *st);
> +static void reds_add_char_device(RedsState *reds, RedCharDevice *dev);
> +static void reds_remove_char_device(RedsState *reds, RedCharDevice *dev);
>  static void reds_send_mm_time(RedsState *reds);
>  static void reds_on_ic_change(RedsState *reds);
>  static void reds_on_sv_change(RedsState *reds);
> @@ -922,7 +922,7 @@ void reds_fill_channels(RedsState *reds, SpiceMsgChannels
> *channels_info)
>  
>  void reds_on_main_agent_start(RedsState *reds, MainChannelClient *mcc,
>  uint32_t num_tokens)
>  {
> -    SpiceCharDeviceState *dev_state = reds->agent_state.base;
> +    RedCharDevice *dev_state = reds->agent_state.base;
>      RedChannelClient *rcc;
>  
>      if (!reds->vdagent) {
> @@ -1176,7 +1176,7 @@ void reds_marshall_migrate_data(RedsState *reds,
> SpiceMarshaller *m)
>          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 SpiceCharDeviceState
> +                                             (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) */
> @@ -2968,7 +2968,7 @@ void reds_disable_mm_time(RedsState *reds)
>      reds->mm_time_enabled = FALSE;
>  }
>  
> -static SpiceCharDeviceState *attach_to_red_agent(RedsState *reds,
> SpiceCharDeviceInstance *sin)
> +static RedCharDevice *attach_to_red_agent(RedsState *reds,
> SpiceCharDeviceInstance *sin)
>  {
>      VDIPortState *state = &reds->agent_state;
>      SpiceCharDeviceInterface *sif;
> @@ -3056,7 +3056,7 @@ static SpiceCharDeviceState
> *attach_to_red_agent(RedsState *reds, SpiceCharDevic
>  SPICE_GNUC_VISIBLE void
>  spice_server_char_device_wakeup(SpiceCharDeviceInstance* sin)
>  {
>      if (!sin->st) {
> -        spice_warning("no SpiceCharDeviceState attached to instance %p",
> sin);
> +        spice_warning("no RedCharDevice attached to instance %p", sin);
>          return;
>      }
>      spice_char_device_wakeup(sin->st);
> @@ -3081,20 +3081,20 @@ SPICE_GNUC_VISIBLE const char**
> spice_server_char_device_recognized_subtypes(voi
>      return spice_server_char_device_recognized_subtypes_list;
>  }
>  
> -static void reds_char_device_add_state(RedsState *reds, SpiceCharDeviceState
> *st)
> +static void reds_add_char_device(RedsState *reds, RedCharDevice *dev)
>  {
> -    reds->char_devices = g_list_append(reds->char_devices, st);
> +    reds->char_devices = g_list_append(reds->char_devices, dev);
>  }
>  
> -static void reds_char_device_remove_state(RedsState *reds,
> SpiceCharDeviceState *st)
> +static void reds_remove_char_device(RedsState *reds, RedCharDevice *dev)
>  {
> -    g_warn_if_fail(g_list_find(reds->char_devices, st) != NULL);
> -    reds->char_devices = g_list_remove(reds->char_devices, st);
> +    g_warn_if_fail(g_list_find(reds->char_devices, dev) != NULL);
> +    reds->char_devices = g_list_remove(reds->char_devices, dev);
>  }
>  
> -void reds_on_char_device_state_destroy(RedsState *reds, SpiceCharDeviceState
> *dev)
> +void reds_on_char_device_state_destroy(RedsState *reds, RedCharDevice *dev)
>  {
> -    reds_char_device_remove_state(reds, dev);
> +    reds_remove_char_device(reds, dev);
>  }
>  
>  static int spice_server_char_device_add_interface(SpiceServer *reds,
> @@ -3102,7 +3102,7 @@ static int
> spice_server_char_device_add_interface(SpiceServer *reds,
>  {
>      SpiceCharDeviceInstance* char_device =
>              SPICE_CONTAINEROF(sin, SpiceCharDeviceInstance, base);
> -    SpiceCharDeviceState *dev_state = NULL;
> +    RedCharDevice *dev_state = NULL;
>  
>      spice_info("CHAR_DEVICE %s", char_device->subtype);
>      if (strcmp(char_device->subtype, SUBTYPE_VDAGENT) == 0) {
> @@ -3137,7 +3137,7 @@ static int
> spice_server_char_device_add_interface(SpiceServer *reds,
>          if (reds->vm_running) {
>              spice_char_device_start(char_device->st);
>          }
> -        reds_char_device_add_state(reds, char_device->st);
> +        reds_add_char_device(reds, char_device->st);
>      } else {
>          spice_warning("failed to create device state for %s",
>          char_device->subtype);
>          return -1;
> @@ -3976,7 +3976,7 @@ SPICE_GNUC_VISIBLE void
> spice_server_vm_start(SpiceServer *reds)
>  
>      reds->vm_running = TRUE;
>      for (it = reds->char_devices; it != NULL; it = it->next) {
> -        spice_char_device_start((SpiceCharDeviceState *)it->data);
> +        spice_char_device_start(it->data);
>      }
>      reds_on_vm_start(reds);
>  }
> @@ -3987,7 +3987,7 @@ SPICE_GNUC_VISIBLE void
> spice_server_vm_stop(SpiceServer *reds)
>  
>      reds->vm_running = FALSE;
>      for (it = reds->char_devices; it != NULL; it = it->next) {
> -        spice_char_device_stop((SpiceCharDeviceState *)it->data);
> +        spice_char_device_stop(it->data);
>      }
>      reds_on_vm_stop(reds);
>  }
> diff --git a/server/reds.h b/server/reds.h
> index 5966dc3..83618e9 100644
> --- a/server/reds.h
> +++ b/server/reds.h
> @@ -26,6 +26,7 @@
>  
>  #include "common/marshaller.h"
>  #include "common/messages.h"
> +#include "char-device.h"
>  #include "spice.h"
>  #include "red-channel.h"
>  #include "main-dispatcher.h"
> @@ -101,7 +102,7 @@ int reds_on_migrate_dst_set_seamless(RedsState *reds,
> MainChannelClient *mcc, ui
>  void reds_on_client_semi_seamless_migrate_complete(RedsState *reds,
>  RedClient *client);
>  void reds_on_client_seamless_migrate_complete(RedsState *reds, RedClient
>  *client);
>  void reds_on_main_channel_migrate(RedsState *reds, MainChannelClient *mcc);
> -void reds_on_char_device_state_destroy(RedsState *reds, SpiceCharDeviceState
> *dev);
> +void reds_on_char_device_state_destroy(RedsState *reds, RedCharDevice *dev);
>  
>  void reds_set_client_mm_time_latency(RedsState *reds, RedClient *client,
>  uint32_t latency);
>  uint32_t reds_get_streaming_video(const RedsState *reds);
> diff --git a/server/smartcard.c b/server/smartcard.c
> index af282a1..6e32f31 100644
> --- a/server/smartcard.c
> +++ b/server/smartcard.c
> @@ -63,7 +63,7 @@ typedef struct SmartCardChannelClient {
>  } SmartCardChannelClient;
>  
>  struct RedCharDeviceSmartcardPrivate {
> -    SpiceCharDeviceState *chardev_st;
> +    RedCharDevice       *chardev;
>      uint32_t             reader_id;
>      /* read_from_device buffer */
>      uint8_t             *buf;
> @@ -286,12 +286,12 @@ static SmartCardDeviceState
> *smartcard_device_state_new(RedsState *reds, SpiceCh
>      chardev_cbs.remove_client = smartcard_remove_client;
>  
>      st = spice_new0(SmartCardDeviceState, 1);
> -    st->priv->chardev_st = spice_char_device_state_create(sin,
> -                                                    reds,
> -                                                    0, /* tokens interval */
> -                                                    ~0, /* self tokens */
> -                                                    &chardev_cbs,
> -                                                    st);
> +    st->priv->chardev = spice_char_device_state_create(sin,
> +                                                       reds,
> +                                                       0, /* tokens interval
> */
> +                                                       ~0, /* self tokens */
> +                                                       &chardev_cbs,
> +                                                       st);
>      st->priv->reader_id = VSCARD_UNDEFINED_READER_ID;
>      st->priv->reader_added = FALSE;
>      st->priv->buf_size = APDUBufSize + sizeof(VSCMsgHeader);
> @@ -308,7 +308,7 @@ static void
> smartcard_device_state_free(SmartCardDeviceState* st)
>          st->priv->scc->smartcard_state = NULL;
>      }
>      free(st->priv->buf);
> -    spice_char_device_state_destroy(st->priv->chardev_st);
> +    spice_char_device_state_destroy(st->priv->chardev);
>      free(st);
>  }
>  
> @@ -319,7 +319,7 @@ void smartcard_device_disconnect(SpiceCharDeviceInstance
> *char_device)
>      smartcard_device_state_free(st);
>  }
>  
> -SpiceCharDeviceState *smartcard_device_connect(RedsState *reds,
> SpiceCharDeviceInstance *char_device)
> +RedCharDevice *smartcard_device_connect(RedsState *reds,
> SpiceCharDeviceInstance *char_device)
>  {
>      SmartCardDeviceState *st;
>  
> @@ -328,7 +328,7 @@ SpiceCharDeviceState *smartcard_device_connect(RedsState
> *reds, SpiceCharDeviceI
>          smartcard_device_state_free(st);
>          return NULL;
>      }
> -    return st->priv->chardev_st;
> +    return st->priv->chardev;
>  }
>  
>  static void smartcard_char_device_notify_reader_add(SmartCardDeviceState
>  *st)
> @@ -336,7 +336,7 @@ static void
> smartcard_char_device_notify_reader_add(SmartCardDeviceState *st)
>      RedCharDeviceWriteBuffer *write_buf;
>      VSCMsgHeader *vheader;
>  
> -    write_buf = spice_char_device_write_buffer_get(st->priv->chardev_st,
> NULL, sizeof(vheader));
> +    write_buf = spice_char_device_write_buffer_get(st->priv->chardev, NULL,
> sizeof(vheader));
>      if (!write_buf) {
>          spice_error("failed to allocate write buffer");
>          return;
> @@ -358,7 +358,7 @@ static void
> smartcard_char_device_attach_client(SpiceCharDeviceInstance *char_de
>      spice_assert(!scc->smartcard_state && !st->priv->scc);
>      st->priv->scc = scc;
>      scc->smartcard_state = st;
> -    client_added = spice_char_device_client_add(st->priv->chardev_st,
> +    client_added = spice_char_device_client_add(st->priv->chardev,
>                                                  scc->base.client,
>                                                  FALSE, /* no flow control
>                                                  yet */
>                                                  0, /* send queue size */
> @@ -383,7 +383,7 @@ static void
> smartcard_char_device_notify_reader_remove(SmartCardDeviceState *st)
>          spice_debug("reader add was never sent to the device");
>          return;
>      }
> -    write_buf = spice_char_device_write_buffer_get(st->priv->chardev_st,
> NULL, sizeof(vheader));
> +    write_buf = spice_char_device_write_buffer_get(st->priv->chardev, NULL,
> sizeof(vheader));
>      if (!write_buf) {
>          spice_error("failed to allocate write buffer");
>          return;
> @@ -405,7 +405,7 @@ static void
> smartcard_char_device_detach_client(SmartCardChannelClient *scc)
>      }
>      st = scc->smartcard_state;
>      spice_assert(st->priv->scc == scc);
> -    spice_char_device_client_remove(st->priv->chardev_st, scc->base.client);
> +    spice_char_device_client_remove(st->priv->chardev, scc->base.client);
>      scc->smartcard_state = NULL;
>      st->priv->scc = NULL;
>  }
> @@ -434,7 +434,7 @@ static uint8_t
> *smartcard_channel_alloc_msg_rcv_buf(RedChannelClient *rcc,
>          st = scc->smartcard_state;
>          spice_assert(st->priv->scc || scc->smartcard_state);
>          spice_assert(!scc->write_buf);
> -        scc->write_buf =
> spice_char_device_write_buffer_get(st->priv->chardev_st, rcc->client, size);
> +        scc->write_buf =
> spice_char_device_write_buffer_get(st->priv->chardev, rcc->client, size);
>  
>          if (!scc->write_buf) {
>              spice_error("failed to allocate write buffer");
> @@ -460,11 +460,11 @@ static void
> smartcard_channel_release_msg_rcv_buf(RedChannelClient *rcc,
>          spice_assert(!scc->write_buf);
>          free(msg);
>      } else {
> -        SpiceCharDeviceState *dev_st;
> +        RedCharDevice *dev;
>          if (scc->write_buf) { /* msg hasn't been pushed to the guest */
>              spice_assert(scc->write_buf->buf == msg);
> -            dev_st = scc->smartcard_state ?
> scc->smartcard_state->priv->chardev_st : NULL;
> -            spice_char_device_write_buffer_release(dev_st, scc->write_buf);
> +            dev = scc->smartcard_state ? scc->smartcard_state->priv->chardev
> : NULL;
> +            spice_char_device_write_buffer_release(dev, scc->write_buf);
>              scc->write_buf = NULL;
>          }
>      }
> @@ -518,7 +518,7 @@ static void
> smartcard_channel_send_migrate_data(RedChannelClient *rcc,
>          spice_marshaller_add_uint32(m, 0);
>          spice_debug("null char dev state");
>      } else {
> -
> spice_char_device_state_migrate_data_marshall(state->priv->chardev_st,
> m);
> +        spice_char_device_state_migrate_data_marshall(state->priv->chardev,
> m);
>          spice_marshaller_add_uint8(m, state->priv->reader_added);
>          spice_marshaller_add_uint32(m, state->priv->buf_used);
>          m2 = spice_marshaller_get_ptr_submarshaller(m, 0);
> @@ -746,7 +746,7 @@ static int
> smartcard_channel_client_handle_migrate_data(RedChannelClient *rcc,
>      scc->smartcard_state->priv->reader_added = mig_data->reader_added;
>  
>      smartcard_device_state_restore_partial_read(scc->smartcard_state,
>      mig_data);
> -    return
> spice_char_device_state_restore(scc->smartcard_state->priv->chardev_st,
> &mig_data->base);
> +    return
> spice_char_device_state_restore(scc->smartcard_state->priv->chardev,
> &mig_data->base);
>  }
>  
>  static int smartcard_channel_handle_message(RedChannelClient *rcc,
> diff --git a/server/smartcard.h b/server/smartcard.h
> index 32d2367..9900287 100644
> --- a/server/smartcard.h
> +++ b/server/smartcard.h
> @@ -21,7 +21,7 @@
>  /*
>   * connect to smartcard interface, used by smartcard channel
>   */
> -SpiceCharDeviceState *smartcard_device_connect(RedsState *reds,
> SpiceCharDeviceInstance *char_device);
> +RedCharDevice *smartcard_device_connect(RedsState *reds,
> SpiceCharDeviceInstance *char_device);
>  void smartcard_device_disconnect(SpiceCharDeviceInstance *char_device);
>  
>  #endif // __SMART_CARD_H__
> diff --git a/server/spicevmc.c b/server/spicevmc.c
> index f263a3d..36c5daf 100644
> --- a/server/spicevmc.c
> +++ b/server/spicevmc.c
> @@ -54,7 +54,7 @@ typedef struct SpiceVmcPipeItem {
>  typedef struct SpiceVmcState {
>      RedChannel channel; /* Must be the first item */
>      RedChannelClient *rcc;
> -    SpiceCharDeviceState *chardev_st;
> +    RedCharDevice *chardev;
>      SpiceCharDeviceInstance *chardev_sin;
>      SpiceVmcPipeItem *pipe_item;
>      RedCharDeviceWriteBuffer *recv_from_client_buf;
> @@ -220,16 +220,16 @@ static void
> spicevmc_red_channel_client_on_disconnect(RedChannelClient *rcc)
>      state = SPICE_CONTAINEROF(rcc->channel, SpiceVmcState, channel);
>  
>      if (state->recv_from_client_buf) { /* partial message which wasn't
>      pushed to device */
> -        spice_char_device_write_buffer_release(state->chardev_st,
> state->recv_from_client_buf);
> +        spice_char_device_write_buffer_release(state->chardev,
> state->recv_from_client_buf);
>          state->recv_from_client_buf = NULL;
>      }
>  
> -    if (state->chardev_st) {
> -        if (spice_char_device_client_exists(state->chardev_st, rcc->client))
> {
> -            spice_char_device_client_remove(state->chardev_st, rcc->client);
> +    if (state->chardev) {
> +        if (spice_char_device_client_exists(state->chardev, rcc->client)) {
> +            spice_char_device_client_remove(state->chardev, rcc->client);
>          } else {
>              spice_printerr("client %p have already been removed from char
>              dev %p",
> -                           rcc->client, state->chardev_st);
> +                           rcc->client, state->chardev);
>          }
>      }
>  
> @@ -275,7 +275,7 @@ static int
> spicevmc_channel_client_handle_migrate_data(RedChannelClient *rcc,
>          spice_error("bad header");
>          return FALSE;
>      }
> -    return spice_char_device_state_restore(state->chardev_st,
> &mig_data->base);
> +    return spice_char_device_state_restore(state->chardev, &mig_data->base);
>  }
>  
>  static int spicevmc_red_channel_client_handle_message(RedChannelClient *rcc,
> @@ -293,7 +293,7 @@ static int
> spicevmc_red_channel_client_handle_message(RedChannelClient *rcc,
>      case SPICE_MSGC_SPICEVMC_DATA:
>          spice_assert(state->recv_from_client_buf->buf == msg);
>          state->recv_from_client_buf->buf_used = size;
> -        spice_char_device_write_buffer_add(state->chardev_st,
> state->recv_from_client_buf);
> +        spice_char_device_write_buffer_add(state->chardev,
> state->recv_from_client_buf);
>          state->recv_from_client_buf = NULL;
>          break;
>      case SPICE_MSGC_PORT_EVENT:
> @@ -323,7 +323,7 @@ static uint8_t
> *spicevmc_red_channel_alloc_msg_rcv_buf(RedChannelClient *rcc,
>      case SPICE_MSGC_SPICEVMC_DATA:
>          assert(!state->recv_from_client_buf);
>  
> -        state->recv_from_client_buf =
> spice_char_device_write_buffer_get(state->chardev_st,
> +        state->recv_from_client_buf =
> spice_char_device_write_buffer_get(state->chardev,
>                                                                           rcc->client,
>                                                                           size);
>          if (!state->recv_from_client_buf) {
> @@ -350,7 +350,7 @@ static void
> spicevmc_red_channel_release_msg_rcv_buf(RedChannelClient *rcc,
>      switch (type) {
>      case SPICE_MSGC_SPICEVMC_DATA:
>          if (state->recv_from_client_buf) { /* buffer wasn't pushed to device
>          */
> -            spice_char_device_write_buffer_release(state->chardev_st,
> state->recv_from_client_buf);
> +            spice_char_device_write_buffer_release(state->chardev,
> state->recv_from_client_buf);
>              state->recv_from_client_buf = NULL;
>          }
>          break;
> @@ -386,7 +386,7 @@ static void
> spicevmc_red_channel_send_migrate_data(RedChannelClient *rcc,
>      spice_marshaller_add_uint32(m, SPICE_MIGRATE_DATA_SPICEVMC_MAGIC);
>      spice_marshaller_add_uint32(m, SPICE_MIGRATE_DATA_SPICEVMC_VERSION);
>  
> -    spice_char_device_state_migrate_data_marshall(state->chardev_st, m);
> +    spice_char_device_state_migrate_data_marshall(state->chardev, m);
>  }
>  
>  static void spicevmc_red_channel_send_port_init(RedChannelClient *rcc,
> @@ -486,7 +486,7 @@ static void spicevmc_connect(RedChannel *channel,
> RedClient *client,
>          spicevmc_port_send_init(rcc);
>      }
>  
> -    if (!spice_char_device_client_add(state->chardev_st, client, FALSE, 0,
> ~0, ~0,
> +    if (!spice_char_device_client_add(state->chardev, client, FALSE, 0, ~0,
> ~0,
>                                        red_channel_client_is_waiting_for_migrate_data(rcc)))
>                                        {
>          spice_warning("failed to add client to spicevmc");
>          red_channel_client_disconnect(rcc);
> @@ -499,9 +499,9 @@ static void spicevmc_connect(RedChannel *channel,
> RedClient *client,
>      }
>  }
>  
> -SpiceCharDeviceState *spicevmc_device_connect(RedsState *reds,
> -                                              SpiceCharDeviceInstance *sin,
> -                                              uint8_t channel_type)
> +RedCharDevice *spicevmc_device_connect(RedsState *reds,
> +                                       SpiceCharDeviceInstance *sin,
> +                                       uint8_t channel_type)
>  {
>      static uint8_t id[256] = { 0, };
>      SpiceVmcState *state;
> @@ -537,16 +537,16 @@ SpiceCharDeviceState *spicevmc_device_connect(RedsState
> *reds,
>      char_dev_cbs.send_tokens_to_client =
>      spicevmc_char_dev_send_tokens_to_client;
>      char_dev_cbs.remove_client = spicevmc_char_dev_remove_client;
>  
> -    state->chardev_st = spice_char_device_state_create(sin,
> -                                                       reds,
> -                                                       0, /* tokens interval
> */
> -                                                       ~0, /* self tokens */
> -                                                       &char_dev_cbs,
> -                                                       state);
> +    state->chardev = spice_char_device_state_create(sin,
> +                                                    reds,
> +                                                    0, /* tokens interval */
> +                                                    ~0, /* self tokens */
> +                                                    &char_dev_cbs,
> +                                                    state);
>      state->chardev_sin = sin;
>  
>      reds_register_channel(reds, &state->channel);
> -    return state->chardev_st;
> +    return state->chardev;
>  }
>  
>  /* Must be called from RedClient handling thread. */
> @@ -554,13 +554,15 @@ void spicevmc_device_disconnect(RedsState *reds,
> SpiceCharDeviceInstance *sin)
>  {
>      SpiceVmcState *state;
>  
> -    state = (SpiceVmcState *)spice_char_device_state_opaque_get(sin->st);
> +    /* FIXME */
> +    state = (SpiceVmcState
> *)spice_char_device_state_opaque_get((RedCharDevice*)sin->st);
>  
>      if (state->recv_from_client_buf) {
> -        spice_char_device_write_buffer_release(state->chardev_st,
> state->recv_from_client_buf);
> +        spice_char_device_write_buffer_release(state->chardev,
> state->recv_from_client_buf);
>      }
> -    spice_char_device_state_destroy(sin->st);
> -    state->chardev_st = NULL;
> +    /* FIXME */
> +    spice_char_device_state_destroy((RedCharDevice*)sin->st);
> +    state->chardev = NULL;
>      sin->st = NULL;
>  
>      reds_unregister_channel(reds, &state->channel);
> @@ -577,7 +579,8 @@ SPICE_GNUC_VISIBLE void
> spice_server_port_event(SpiceCharDeviceInstance *sin, ui
>          return;
>      }
>  
> -    state = (SpiceVmcState *)spice_char_device_state_opaque_get(sin->st);
> +    /* FIXME */
> +    state = (SpiceVmcState
> *)spice_char_device_state_opaque_get((RedCharDevice*)sin->st);
>      if (event == SPICE_PORT_EVENT_OPENED) {
>          state->port_opened = TRUE;
>      } else if (event == SPICE_PORT_EVENT_CLOSED) {

Acked-by: Frediano Ziglio <fziglio at redhat.com>

Frediano


More information about the Spice-devel mailing list