These two type names are typedefs of eachother, but it's confusing to have two different typenames for the same type throughout the code. Convert everythign to use RedCharDevice. --- This patch should apply to the end of this patch series. Comments? server/char-device.c | 238 +++++++++++++++++++++++++------------------------- server/char-device.h | 108 +++++++++++------------ server/reds-private.h | 2 +- server/reds.c | 142 +++++++++++++++--------------- server/reds.h | 3 +- server/smartcard.c | 46 +++++----- server/smartcard.h | 2 +- server/spicevmc.c | 52 +++++------ 8 files changed, 297 insertions(+), 296 deletions(-) diff --git a/server/char-device.c b/server/char-device.c index 1947890..98c50ab 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; @@ -103,7 +103,7 @@ typedef struct SpiceCharDeviceMsgToClientItem { } SpiceCharDeviceMsgToClientItem; static SpiceCharDeviceMsgToClient * -spice_char_device_read_one_msg_from_device(SpiceCharDeviceState *dev) +red_char_device_read_one_msg_from_device(RedCharDevice *dev) { RedCharDeviceClass *klass = RED_CHAR_DEVICE_GET_CLASS(dev); @@ -111,8 +111,8 @@ spice_char_device_read_one_msg_from_device(SpiceCharDeviceState *dev) } static SpiceCharDeviceMsgToClient * -spice_char_device_ref_msg_to_client(SpiceCharDeviceState *dev, - SpiceCharDeviceMsgToClient *msg) +red_char_device_ref_msg_to_client(RedCharDevice *dev, + SpiceCharDeviceMsgToClient *msg) { RedCharDeviceClass *klass = RED_CHAR_DEVICE_GET_CLASS(dev); @@ -120,8 +120,8 @@ spice_char_device_ref_msg_to_client(SpiceCharDeviceState *dev, } static void -spice_char_device_unref_msg_to_client(SpiceCharDeviceState *dev, - SpiceCharDeviceMsgToClient *msg) +red_char_device_unref_msg_to_client(RedCharDevice *dev, + SpiceCharDeviceMsgToClient *msg) { RedCharDeviceClass *klass = RED_CHAR_DEVICE_GET_CLASS(dev); @@ -129,9 +129,9 @@ spice_char_device_unref_msg_to_client(SpiceCharDeviceState *dev, } static void -spice_char_device_send_msg_to_client(SpiceCharDeviceState *dev, - SpiceCharDeviceMsgToClient *msg, - RedClient *client) +red_char_device_send_msg_to_client(RedCharDevice *dev, + SpiceCharDeviceMsgToClient *msg, + RedClient *client) { RedCharDeviceClass *klass = RED_CHAR_DEVICE_GET_CLASS(dev); @@ -139,9 +139,9 @@ spice_char_device_send_msg_to_client(SpiceCharDeviceState *dev, } static void -spice_char_device_send_tokens_to_client(SpiceCharDeviceState *dev, - RedClient *client, - uint32_t tokens) +red_char_device_send_tokens_to_client(RedCharDevice *dev, + RedClient *client, + uint32_t tokens) { RedCharDeviceClass *klass = RED_CHAR_DEVICE_GET_CLASS(dev); @@ -149,7 +149,7 @@ spice_char_device_send_tokens_to_client(SpiceCharDeviceState *dev, } static void -spice_char_device_on_free_self_token(SpiceCharDeviceState *dev) +red_char_device_on_free_self_token(RedCharDevice *dev) { RedCharDeviceClass *klass = RED_CHAR_DEVICE_GET_CLASS(dev); @@ -159,7 +159,7 @@ spice_char_device_on_free_self_token(SpiceCharDeviceState *dev) } static void -spice_char_device_remove_client(SpiceCharDeviceState *dev, RedClient *client) +red_char_device_remove_client(RedCharDevice *dev, RedClient *client) { RedCharDeviceClass *klass = RED_CHAR_DEVICE_GET_CLASS(dev); @@ -187,8 +187,8 @@ static void write_buffers_queue_free(Ring *write_queue) } } -static void spice_char_device_write_buffer_pool_add(SpiceCharDeviceState *dev, - SpiceCharDeviceWriteBuffer *buf) +static void red_char_device_write_buffer_pool_add(RedCharDevice *dev, + SpiceCharDeviceWriteBuffer *buf) { if (buf->refs == 1 && dev->priv->cur_pool_size < MAX_POOL_SIZE) { @@ -204,8 +204,8 @@ static void spice_char_device_write_buffer_pool_add(SpiceCharDeviceState *dev, spice_char_device_write_buffer_unref(buf); } -static void spice_char_device_client_send_queue_free(SpiceCharDeviceState *dev, - SpiceCharDeviceClientState *dev_client) +static void red_char_device_client_send_queue_free(RedCharDevice *dev, + SpiceCharDeviceClientState *dev_client) { spice_debug("send_queue_empty %d", ring_is_empty(&dev_client->send_queue)); while (!ring_is_empty(&dev_client->send_queue)) { @@ -215,15 +215,15 @@ static void spice_char_device_client_send_queue_free(SpiceCharDeviceState *dev, link); ring_remove(item); - spice_char_device_unref_msg_to_client(dev, msg_item->msg); + red_char_device_unref_msg_to_client(dev, msg_item->msg); free(msg_item); } dev_client->num_send_tokens += dev_client->send_queue_size; dev_client->send_queue_size = 0; } -static void spice_char_device_client_free(SpiceCharDeviceState *dev, - SpiceCharDeviceClientState *dev_client) +static void red_char_device_client_free(RedCharDevice *dev, + SpiceCharDeviceClientState *dev_client) { RingItem *item, *next; @@ -232,7 +232,7 @@ static void spice_char_device_client_free(SpiceCharDeviceState *dev, dev_client->wait_for_tokens_timer = NULL; } - spice_char_device_client_send_queue_free(dev, dev_client); + red_char_device_client_send_queue_free(dev, dev_client); /* remove write buffers that are associated with the client */ spice_debug("write_queue_is_empty %d", ring_is_empty(&dev->priv->write_queue) && !dev->priv->cur_write_buf); @@ -243,7 +243,7 @@ static void spice_char_device_client_free(SpiceCharDeviceState *dev, if (write_buf->origin == WRITE_BUFFER_ORIGIN_CLIENT && write_buf->client == dev_client->client) { ring_remove(item); - spice_char_device_write_buffer_pool_add(dev, write_buf); + red_char_device_write_buffer_pool_add(dev, write_buf); } } @@ -260,13 +260,13 @@ 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); + red_char_device_remove_client(dev, dev_client->client); } -static SpiceCharDeviceClientState *spice_char_device_client_find(SpiceCharDeviceState *dev, - RedClient *client) +static SpiceCharDeviceClientState *red_char_device_client_find(RedCharDevice *dev, + RedClient *client) { RingItem *item; @@ -297,7 +297,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 red_char_device_max_send_tokens(RedCharDevice *dev) { RingItem *item; uint64_t max = 0; @@ -322,7 +322,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, SpiceCharDeviceMsgToClient *msg) { - SpiceCharDeviceState *dev = dev_client->dev; + RedCharDevice *dev = dev_client->dev; SpiceCharDeviceMsgToClientItem *msg_item; if (dev_client->send_queue_size >= dev_client->max_send_queue_size) { @@ -331,7 +331,7 @@ static void spice_char_device_add_msg_to_client_queue(SpiceCharDeviceClientState } msg_item = spice_new0(SpiceCharDeviceMsgToClientItem, 1); - msg_item->msg = spice_char_device_ref_msg_to_client(dev, msg); + msg_item->msg = red_char_device_ref_msg_to_client(dev, msg); ring_add(&dev_client->send_queue, &msg_item->link); dev_client->send_queue_size++; if (!dev_client->wait_for_tokens_started) { @@ -341,8 +341,8 @@ static void spice_char_device_add_msg_to_client_queue(SpiceCharDeviceClientState } } -static void spice_char_device_send_msg_to_clients(SpiceCharDeviceState *dev, - SpiceCharDeviceMsgToClient *msg) +static void red_char_device_send_msg_to_clients(RedCharDevice *dev, + SpiceCharDeviceMsgToClient *msg) { RingItem *item, *next; @@ -353,7 +353,7 @@ static void spice_char_device_send_msg_to_clients(SpiceCharDeviceState *dev, if (spice_char_device_can_send_to_client(dev_client)) { dev_client->num_send_tokens--; spice_assert(ring_is_empty(&dev_client->send_queue)); - spice_char_device_send_msg_to_client(dev, msg, dev_client->client); + red_char_device_send_msg_to_client(dev, msg, dev_client->client); /* don't refer to dev_client anymore, it may have been released */ } else { @@ -362,7 +362,7 @@ static void spice_char_device_send_msg_to_clients(SpiceCharDeviceState *dev, } } -static int spice_char_device_read_from_device(SpiceCharDeviceState *dev) +static int red_char_device_read_from_device(RedCharDevice *dev) { uint64_t max_send_tokens; int did_read = FALSE; @@ -381,7 +381,7 @@ static int spice_char_device_read_from_device(SpiceCharDeviceState *dev) return FALSE; } - max_send_tokens = spice_char_device_max_send_tokens(dev); + max_send_tokens = red_char_device_max_send_tokens(dev); g_object_ref(dev); /* * Reading from the device only in case at least one of the clients have a free token. @@ -390,7 +390,7 @@ static int spice_char_device_read_from_device(SpiceCharDeviceState *dev) while ((max_send_tokens || ring_is_empty(&dev->priv->clients)) && dev->priv->running) { SpiceCharDeviceMsgToClient *msg; - msg = spice_char_device_read_one_msg_from_device(dev); + msg = red_char_device_read_one_msg_from_device(dev); if (!msg) { if (dev->priv->during_read_from_device > 1) { dev->priv->during_read_from_device = 1; @@ -400,8 +400,8 @@ static int spice_char_device_read_from_device(SpiceCharDeviceState *dev) break; } did_read = TRUE; - spice_char_device_send_msg_to_clients(dev, msg); - spice_char_device_unref_msg_to_client(dev, msg); + red_char_device_send_msg_to_clients(dev, msg); + red_char_device_unref_msg_to_client(dev, msg); max_send_tokens--; } dev->priv->during_read_from_device = 0; @@ -423,10 +423,10 @@ static void spice_char_device_client_send_queue_push(SpiceCharDeviceClientState ring_remove(item); dev_client->num_send_tokens--; - spice_char_device_send_msg_to_client(dev_client->dev, - msg_item->msg, - dev_client->client); - spice_char_device_unref_msg_to_client(dev_client->dev, msg_item->msg); + red_char_device_send_msg_to_client(dev_client->dev, + msg_item->msg, + dev_client->client); + red_char_device_unref_msg_to_client(dev_client->dev, msg_item->msg); dev_client->send_queue_size--; free(msg_item); } @@ -435,7 +435,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) { @@ -446,7 +446,7 @@ static void spice_char_device_send_to_client_tokens_absorb(SpiceCharDeviceClient if (spice_char_device_can_send_to_client(dev_client)) { reds_core_timer_cancel(dev->priv->reds, dev_client->wait_for_tokens_timer); dev_client->wait_for_tokens_started = FALSE; - spice_char_device_read_from_device(dev_client->dev); + red_char_device_read_from_device(dev_client->dev); } else if (dev_client->send_queue_size) { reds_core_timer_start(dev->priv->reds, dev_client->wait_for_tokens_timer, SPICE_CHAR_DEVICE_WAIT_TOKENS_TIMEOUT); @@ -454,13 +454,13 @@ static void spice_char_device_send_to_client_tokens_absorb(SpiceCharDeviceClient } } -void spice_char_device_send_to_client_tokens_add(SpiceCharDeviceState *dev, +void red_char_device_send_to_client_tokens_add(RedCharDevice *dev, RedClient *client, uint32_t tokens) { SpiceCharDeviceClientState *dev_client; - dev_client = spice_char_device_client_find(dev, client); + dev_client = red_char_device_client_find(dev, client); if (!dev_client) { spice_error("client wasn't found dev %p client %p", dev, client); @@ -469,13 +469,13 @@ 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 red_char_device_send_to_client_tokens_set(RedCharDevice *dev, RedClient *client, uint32_t tokens) { SpiceCharDeviceClientState *dev_client; - dev_client = spice_char_device_client_find(dev, client); + dev_client = red_char_device_client_find(dev, client); if (!dev_client) { spice_error("client wasn't found dev %p client %p", dev, client); @@ -490,9 +490,9 @@ 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, - SpiceCharDeviceClientState *dev_client, - uint32_t num_tokens) +static void red_char_device_client_tokens_add(RedCharDevice *dev, + SpiceCharDeviceClientState *dev_client, + uint32_t num_tokens) { if (!dev_client->do_flow_control) { return; @@ -506,11 +506,11 @@ static void spice_char_device_client_tokens_add(SpiceCharDeviceState *dev, dev_client->num_client_tokens += dev_client->num_client_tokens_free; dev_client->num_client_tokens_free = 0; - spice_char_device_send_tokens_to_client(dev, dev_client->client, tokens); + red_char_device_send_tokens_to_client(dev, dev_client->client, tokens); } } -static int spice_char_device_write_to_device(SpiceCharDeviceState *dev) +static int red_char_device_write_to_device(RedCharDevice *dev) { SpiceCharDeviceInterface *sif; int total = 0; @@ -561,7 +561,7 @@ static int spice_char_device_write_to_device(SpiceCharDeviceState *dev) if (!write_len) { SpiceCharDeviceWriteBuffer *release_buf = dev->priv->cur_write_buf; dev->priv->cur_write_buf = NULL; - spice_char_device_write_buffer_release(dev, release_buf); + red_char_device_write_buffer_release(dev, release_buf); continue; } dev->priv->cur_write_buf_pos += n; @@ -585,16 +585,16 @@ 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); } - spice_char_device_write_to_device(dev); + red_char_device_write_to_device(dev); } -static SpiceCharDeviceWriteBuffer *__spice_char_device_write_buffer_get( - SpiceCharDeviceState *dev, RedClient *client, +static SpiceCharDeviceWriteBuffer *__red_char_device_write_buffer_get( + RedCharDevice *dev, RedClient *client, int size, int origin, int migrated_data_tokens) { RingItem *item; @@ -622,7 +622,7 @@ static SpiceCharDeviceWriteBuffer *__spice_char_device_write_buffer_get( if (origin == WRITE_BUFFER_ORIGIN_CLIENT) { spice_assert(client); - SpiceCharDeviceClientState *dev_client = spice_char_device_client_find(dev, client); + SpiceCharDeviceClientState *dev_client = red_char_device_client_find(dev, client); if (dev_client) { if (!migrated_data_tokens && dev_client->do_flow_control && !dev_client->num_client_tokens) { @@ -653,19 +653,19 @@ error: return NULL; } -SpiceCharDeviceWriteBuffer *spice_char_device_write_buffer_get(SpiceCharDeviceState *dev, - RedClient *client, - int size) +SpiceCharDeviceWriteBuffer *red_char_device_write_buffer_get(RedCharDevice *dev, + RedClient *client, + int size) { - return __spice_char_device_write_buffer_get(dev, client, size, + return __red_char_device_write_buffer_get(dev, client, size, client ? WRITE_BUFFER_ORIGIN_CLIENT : WRITE_BUFFER_ORIGIN_SERVER, 0); } -SpiceCharDeviceWriteBuffer *spice_char_device_write_buffer_get_server_no_token( - SpiceCharDeviceState *dev, int size) +SpiceCharDeviceWriteBuffer *red_char_device_write_buffer_get_server_no_token( + RedCharDevice *dev, int size) { - return __spice_char_device_write_buffer_get(dev, NULL, size, + return __red_char_device_write_buffer_get(dev, NULL, size, WRITE_BUFFER_ORIGIN_SERVER_NO_TOKEN, 0); } @@ -686,24 +686,24 @@ static void spice_char_device_write_buffer_unref(SpiceCharDeviceWriteBuffer *wri spice_char_device_write_buffer_free(write_buf); } -void spice_char_device_write_buffer_add(SpiceCharDeviceState *dev, - SpiceCharDeviceWriteBuffer *write_buf) +void red_char_device_write_buffer_add(RedCharDevice *dev, + SpiceCharDeviceWriteBuffer *write_buf) { spice_assert(dev); /* caller shouldn't add buffers for client that was removed */ if (write_buf->origin == WRITE_BUFFER_ORIGIN_CLIENT && - !spice_char_device_client_find(dev, write_buf->client)) { + !red_char_device_client_find(dev, write_buf->client)) { spice_printerr("client not found: dev %p client %p", dev, write_buf->client); - spice_char_device_write_buffer_pool_add(dev, write_buf); + red_char_device_write_buffer_pool_add(dev, write_buf); return; } ring_add(&dev->priv->write_queue, &write_buf->link); - spice_char_device_write_to_device(dev); + red_char_device_write_to_device(dev); } -void spice_char_device_write_buffer_release(SpiceCharDeviceState *dev, - SpiceCharDeviceWriteBuffer *write_buf) +void red_char_device_write_buffer_release(RedCharDevice *dev, + SpiceCharDeviceWriteBuffer *write_buf) { int buf_origin = write_buf->origin; uint32_t buf_token_price = write_buf->token_price; @@ -718,18 +718,18 @@ void spice_char_device_write_buffer_release(SpiceCharDeviceState *dev, spice_assert(dev->priv->cur_write_buf != write_buf); - spice_char_device_write_buffer_pool_add(dev, write_buf); + red_char_device_write_buffer_pool_add(dev, write_buf); if (buf_origin == WRITE_BUFFER_ORIGIN_CLIENT) { SpiceCharDeviceClientState *dev_client; spice_assert(client); - dev_client = spice_char_device_client_find(dev, client); + dev_client = red_char_device_client_find(dev, client); /* when a client is removed, we remove all the buffers that are associated with it */ spice_assert(dev_client); - spice_char_device_client_tokens_add(dev, dev_client, buf_token_price); + red_char_device_client_tokens_add(dev, dev_client, buf_token_price); } else if (buf_origin == WRITE_BUFFER_ORIGIN_SERVER) { dev->priv->num_self_tokens++; - spice_char_device_on_free_self_token(dev); + red_char_device_on_free_self_token(dev); } } @@ -737,20 +737,20 @@ void spice_char_device_write_buffer_release(SpiceCharDeviceState *dev, * char_device_state management * ********************************/ -void spice_char_device_state_reset_dev_instance(SpiceCharDeviceState *state, - SpiceCharDeviceInstance *sin) +void red_char_device_reset_dev_instance(RedCharDevice *state, + SpiceCharDeviceInstance *sin) { spice_debug("sin %p dev_state %p", sin, state); state->priv->sin = sin; sin->st = state; } -void *spice_char_device_state_opaque_get(SpiceCharDeviceState *dev) +void *red_char_device_opaque_get(RedCharDevice *dev) { return dev->priv->opaque; } -void spice_char_device_state_destroy(SpiceCharDeviceState *char_dev) +void red_char_device_destroy(RedCharDevice *char_dev) { g_return_if_fail(RED_IS_CHAR_DEVICE(char_dev)); g_object_unref(char_dev); @@ -787,13 +787,13 @@ static SpiceCharDeviceClientState *red_char_device_client_new(RedClient *client, return dev_client; } -int spice_char_device_client_add(SpiceCharDeviceState *dev, - RedClient *client, - int do_flow_control, - uint32_t max_send_queue_size, - uint32_t num_client_tokens, - uint32_t num_send_tokens, - int wait_for_migrate_data) +int red_char_device_client_add(RedCharDevice *dev, + RedClient *client, + int do_flow_control, + uint32_t max_send_queue_size, + uint32_t num_client_tokens, + uint32_t num_send_tokens, + int wait_for_migrate_data) { SpiceCharDeviceClientState *dev_client; @@ -817,27 +817,27 @@ int spice_char_device_client_add(SpiceCharDeviceState *dev, ring_add(&dev->priv->clients, &dev_client->link); dev->priv->num_clients++; /* Now that we have a client, forward any pending device data */ - spice_char_device_wakeup(dev); + red_char_device_wakeup(dev); return TRUE; } -void spice_char_device_client_remove(SpiceCharDeviceState *dev, - RedClient *client) +void red_char_device_client_remove(RedCharDevice *dev, + RedClient *client) { SpiceCharDeviceClientState *dev_client; spice_debug("dev_state %p client %p", dev, client); - dev_client = spice_char_device_client_find(dev, client); + dev_client = red_char_device_client_find(dev, client); if (!dev_client) { spice_error("client wasn't found"); return; } - spice_char_device_client_free(dev, dev_client); + red_char_device_client_free(dev, dev_client); if (dev->priv->wait_for_migrate_data) { spice_assert(dev->priv->num_clients == 0); dev->priv->wait_for_migrate_data = FALSE; - spice_char_device_read_from_device(dev); + red_char_device_read_from_device(dev); } if (dev->priv->num_clients == 0) { @@ -847,23 +847,23 @@ void spice_char_device_client_remove(SpiceCharDeviceState *dev, } } -int spice_char_device_client_exists(SpiceCharDeviceState *dev, +int red_char_device_client_exists(RedCharDevice *dev, RedClient *client) { - return (spice_char_device_client_find(dev, client) != NULL); + return (red_char_device_client_find(dev, client) != NULL); } -void spice_char_device_start(SpiceCharDeviceState *dev) +void red_char_device_start(RedCharDevice *dev) { spice_debug("dev_state %p", dev); dev->priv->running = TRUE; g_object_ref(dev); - while (spice_char_device_write_to_device(dev) || - spice_char_device_read_from_device(dev)); + while (red_char_device_write_to_device(dev) || + red_char_device_read_from_device(dev)); g_object_unref(dev); } -void spice_char_device_stop(SpiceCharDeviceState *dev) +void red_char_device_stop(RedCharDevice *dev) { spice_debug("dev_state %p", dev); dev->priv->running = FALSE; @@ -873,11 +873,11 @@ void spice_char_device_stop(SpiceCharDeviceState *dev) } } -void spice_char_device_reset(SpiceCharDeviceState *dev) +void red_char_device_reset(RedCharDevice *dev) { RingItem *client_item; - spice_char_device_stop(dev); + red_char_device_stop(dev); dev->priv->wait_for_migrate_data = FALSE; spice_debug("dev_state %p", dev); while (!ring_is_empty(&dev->priv->write_queue)) { @@ -887,35 +887,35 @@ void spice_char_device_reset(SpiceCharDeviceState *dev) ring_remove(item); buf = SPICE_CONTAINEROF(item, SpiceCharDeviceWriteBuffer, link); /* tracking the tokens */ - spice_char_device_write_buffer_release(dev, buf); + red_char_device_write_buffer_release(dev, buf); } if (dev->priv->cur_write_buf) { SpiceCharDeviceWriteBuffer *release_buf = dev->priv->cur_write_buf; dev->priv->cur_write_buf = NULL; - spice_char_device_write_buffer_release(dev, release_buf); + red_char_device_write_buffer_release(dev, release_buf); } RING_FOREACH(client_item, &dev->priv->clients) { SpiceCharDeviceClientState *dev_client; dev_client = SPICE_CONTAINEROF(client_item, SpiceCharDeviceClientState, link); - spice_char_device_client_send_queue_free(dev, dev_client); + red_char_device_client_send_queue_free(dev, dev_client); } dev->priv->sin = NULL; } -void spice_char_device_wakeup(SpiceCharDeviceState *dev) +void red_char_device_wakeup(RedCharDevice *dev) { - spice_char_device_write_to_device(dev); - spice_char_device_read_from_device(dev); + red_char_device_write_to_device(dev); + red_char_device_read_from_device(dev); } /************* * Migration * * **********/ -void spice_char_device_state_migrate_data_marshall_empty(SpiceMarshaller *m) +void red_char_device_migrate_data_marshall_empty(SpiceMarshaller *m) { SpiceMigrateDataCharDevice *mig_data; @@ -934,8 +934,8 @@ static void migrate_data_marshaller_write_buffer_free(uint8_t *data, void *opaqu spice_char_device_write_buffer_unref(write_buf); } -void spice_char_device_state_migrate_data_marshall(SpiceCharDeviceState *dev, - SpiceMarshaller *m) +void red_char_device_migrate_data_marshall(RedCharDevice *dev, + SpiceMarshaller *m) { SpiceCharDeviceClientState *client_state; RingItem *item; @@ -994,8 +994,8 @@ 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, - SpiceMigrateDataCharDevice *mig_data) +int red_char_device_restore(RedCharDevice *dev, + SpiceMigrateDataCharDevice *mig_data) { SpiceCharDeviceClientState *client_state; uint32_t client_tokens_window; @@ -1024,12 +1024,12 @@ int spice_char_device_state_restore(SpiceCharDeviceState *dev, if (mig_data->write_size > 0) { if (mig_data->write_num_client_tokens) { dev->priv->cur_write_buf = - __spice_char_device_write_buffer_get(dev, client_state->client, + __red_char_device_write_buffer_get(dev, client_state->client, mig_data->write_size, WRITE_BUFFER_ORIGIN_CLIENT, mig_data->write_num_client_tokens); } else { dev->priv->cur_write_buf = - __spice_char_device_write_buffer_get(dev, NULL, + __red_char_device_write_buffer_get(dev, NULL, mig_data->write_size, WRITE_BUFFER_ORIGIN_SERVER, 0); } /* the first write buffer contains all the data that was saved for migration */ @@ -1040,12 +1040,12 @@ int spice_char_device_state_restore(SpiceCharDeviceState *dev, dev->priv->cur_write_buf_pos = dev->priv->cur_write_buf->buf; } dev->priv->wait_for_migrate_data = FALSE; - spice_char_device_write_to_device(dev); - spice_char_device_read_from_device(dev); + red_char_device_write_to_device(dev); + red_char_device_read_from_device(dev); return TRUE; } -SpiceServer* spice_char_device_get_server(SpiceCharDeviceState *dev) +SpiceServer* red_char_device_get_server(RedCharDevice *dev) { return dev->priv->reds; } @@ -1176,7 +1176,7 @@ red_char_device_finalize(GObject *object) SpiceCharDeviceClientState *dev_client; dev_client = SPICE_CONTAINEROF(item, SpiceCharDeviceClientState, link); - spice_char_device_client_free(self, dev_client); + red_char_device_client_free(self, dev_client); } self->priv->running = FALSE; diff --git a/server/char-device.h b/server/char-device.h index b59e6f0..bb32649 100644 --- a/server/char-device.h +++ b/server/char-device.h @@ -89,18 +89,18 @@ GType red_char_device_get_type(void) G_GNUC_CONST; * How to use the api: * ================== * device attached: create new object instantiating a RedCharDevice child class - * device detached: call spice_char_device_state_destroy/reset + * device detached: call red_char_device_destroy/reset * - * client connected and associated with a device: spice_char_device_client_add - * client disconnected: spice_char_device_client_remove + * client connected and associated with a device: red_char_device_client_add + * client disconnected: red_char_device_client_remove * * Writing to the device * --------------------- * Write the data into SpiceCharDeviceWriteBuffer: - * call spice_char_device_write_buffer_get in order to get an appropriate buffer. - * call spice_char_device_write_buffer_add in order to push the buffer to the write queue. + * call red_char_device_write_buffer_get in order to get an appropriate buffer. + * call red_char_device_write_buffer_add in order to push the buffer to the write queue. * If you choose not to push the buffer to the device, call - * spice_char_device_write_buffer_release + * red_char_device_write_buffer_release * * reading from the device * ----------------------- @@ -112,12 +112,12 @@ GType red_char_device_get_type(void) G_GNUC_CONST; * * calls triggered from the device (qemu): * -------------------------------------- - * spice_char_device_start - * spice_char_device_stop - * spice_char_device_wakeup (for reading from the device) + * red_char_device_start + * red_char_device_stop + * red_char_device_wakeup (for reading from the device) */ /* refcounting is used to protect the char_dev from being deallocated in - * case spice_char_device_state_destroy has been called + * case red_char_device_destroy has been called * during a callback, and we might still access the char_dev afterwards. */ @@ -159,19 +159,19 @@ typedef struct SpiceCharDeviceWriteBuffer { uint32_t refs; } SpiceCharDeviceWriteBuffer; -void spice_char_device_state_reset_dev_instance(SpiceCharDeviceState *dev, - SpiceCharDeviceInstance *sin); -void spice_char_device_state_destroy(SpiceCharDeviceState *dev); +void red_char_device_reset_dev_instance(RedCharDevice *dev, + SpiceCharDeviceInstance *sin); +void red_char_device_destroy(RedCharDevice *dev); -void *spice_char_device_state_opaque_get(SpiceCharDeviceState *dev); +void *red_char_device_opaque_get(RedCharDevice *dev); /* only one client is supported */ -void spice_char_device_state_migrate_data_marshall(SpiceCharDeviceState *dev, - SpiceMarshaller *m); -void spice_char_device_state_migrate_data_marshall_empty(SpiceMarshaller *m); +void red_char_device_migrate_data_marshall(RedCharDevice *dev, + SpiceMarshaller *m); +void red_char_device_migrate_data_marshall_empty(SpiceMarshaller *m); -int spice_char_device_state_restore(SpiceCharDeviceState *dev, - SpiceMigrateDataCharDevice *mig_data); +int red_char_device_restore(RedCharDevice *dev, + SpiceMigrateDataCharDevice *mig_data); /* * Resets write/read queues, and moves that state to being stopped. @@ -188,57 +188,57 @@ 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 red_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, - RedClient *client, - int do_flow_control, - uint32_t max_send_queue_size, - uint32_t num_client_tokens, - uint32_t num_send_tokens, - int wait_for_migrate_data); - -void spice_char_device_client_remove(SpiceCharDeviceState *dev, - RedClient *client); -int spice_char_device_client_exists(SpiceCharDeviceState *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); +int red_char_device_client_add(RedCharDevice *dev, + RedClient *client, + int do_flow_control, + uint32_t max_send_queue_size, + uint32_t num_client_tokens, + uint32_t num_send_tokens, + int wait_for_migrate_data); + +void red_char_device_client_remove(RedCharDevice *dev, + RedClient *client); +int red_char_device_client_exists(RedCharDevice *dev, + RedClient *client); + +void red_char_device_start(RedCharDevice *dev); +void red_char_device_stop(RedCharDevice *dev); +SpiceServer* red_char_device_get_server(RedCharDevice *dev); /** Read from device **/ -void spice_char_device_wakeup(SpiceCharDeviceState *dev); +void red_char_device_wakeup(RedCharDevice *dev); -void spice_char_device_send_to_client_tokens_add(SpiceCharDeviceState *dev, - RedClient *client, - uint32_t tokens); +void red_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, - RedClient *client, - uint32_t tokens); +void red_char_device_send_to_client_tokens_set(RedCharDevice *dev, + RedClient *client, + uint32_t tokens); /** Write to device **/ -SpiceCharDeviceWriteBuffer *spice_char_device_write_buffer_get(SpiceCharDeviceState *dev, - RedClient *client, int size); -SpiceCharDeviceWriteBuffer *spice_char_device_write_buffer_get_server_no_token( - SpiceCharDeviceState *dev, int size); +SpiceCharDeviceWriteBuffer *red_char_device_write_buffer_get(RedCharDevice *dev, + RedClient *client, int size); +SpiceCharDeviceWriteBuffer *red_char_device_write_buffer_get_server_no_token( + RedCharDevice *dev, int size); /* Either add the buffer to the write queue or release it */ -void spice_char_device_write_buffer_add(SpiceCharDeviceState *dev, - SpiceCharDeviceWriteBuffer *write_buf); -void spice_char_device_write_buffer_release(SpiceCharDeviceState *dev, - SpiceCharDeviceWriteBuffer *write_buf); +void red_char_device_write_buffer_add(RedCharDevice *dev, + SpiceCharDeviceWriteBuffer *write_buf); +void red_char_device_write_buffer_release(RedCharDevice *dev, + SpiceCharDeviceWriteBuffer *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 b3dac6d..97c689b 100644 --- a/server/reds-private.h +++ b/server/reds-private.h @@ -128,7 +128,7 @@ struct RedsState { SpiceTimer *mig_timer; int vm_running; - GList *char_devices; /* list of SpiceCharDeviceState */ + GList *char_devices; /* list of RedCharDevice */ int seamless_migration_enabled; /* command line arg */ SSL_CTX *ctx; diff --git a/server/reds.c b/server/reds.c index 3d83841..ebb3c00 100644 --- a/server/reds.c +++ b/server/reds.c @@ -253,8 +253,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); @@ -518,7 +518,7 @@ static void reds_reset_vdp(RedsState *reds) SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS)) { state->priv->agent_attached = FALSE; } else { - spice_char_device_reset(RED_CHAR_DEVICE(state)); + red_char_device_reset(RED_CHAR_DEVICE(state)); } sif = spice_char_device_get_interface(reds->vdagent); @@ -569,8 +569,8 @@ void reds_client_disconnect(RedsState *reds, RedClient *client) if (reds->agent_state->priv->agent_attached) { /* note that vdagent might be NULL, if the vdagent was once * up and than was removed */ - if (spice_char_device_client_exists(RED_CHAR_DEVICE(reds->agent_state), client)) { - spice_char_device_client_remove(RED_CHAR_DEVICE(reds->agent_state), client); + if (red_char_device_client_exists(RED_CHAR_DEVICE(reds->agent_state), client)) { + red_char_device_client_remove(RED_CHAR_DEVICE(reds->agent_state), client); } } @@ -588,7 +588,7 @@ void reds_client_disconnect(RedsState *reds, RedClient *client) uint32_t total_msg_size; total_msg_size = sizeof(VDIChunkHeader) + sizeof(VDAgentMessage); - char_dev_buf = spice_char_device_write_buffer_get_server_no_token( + char_dev_buf = red_char_device_write_buffer_get_server_no_token( RED_CHAR_DEVICE(reds->agent_state), total_msg_size); char_dev_buf->buf_used = total_msg_size; internal_buf = (VDInternalBuf *)char_dev_buf->buf; @@ -599,8 +599,8 @@ void reds_client_disconnect(RedsState *reds, RedClient *client) internal_buf->header.opaque = 0; internal_buf->header.size = 0; - spice_char_device_write_buffer_add(RED_CHAR_DEVICE(reds->agent_state), - char_dev_buf); + red_char_device_write_buffer_add(RED_CHAR_DEVICE(reds->agent_state), + char_dev_buf); } /* Reset write filter to start with clean state on client reconnect */ @@ -780,7 +780,7 @@ static void vdi_port_read_buf_unref(VDIReadBuf *buf) necessary. Note that since we can be called from spice_char_device_wakeup this can cause recursion, but we have protection for that */ if (buf->state->priv->agent_attached) { - spice_char_device_wakeup(RED_CHAR_DEVICE(buf->state)); + red_char_device_wakeup(RED_CHAR_DEVICE(buf->state)); } } } @@ -926,9 +926,9 @@ void reds_handle_agent_mouse_event(RedsState *reds, const VDAgentMouseState *mou total_msg_size = sizeof(VDIChunkHeader) + sizeof(VDAgentMessage) + sizeof(VDAgentMouseState); - char_dev_buf = spice_char_device_write_buffer_get(RED_CHAR_DEVICE(reds->agent_state), - NULL, - total_msg_size); + char_dev_buf = red_char_device_write_buffer_get(RED_CHAR_DEVICE(reds->agent_state), + NULL, + total_msg_size); if (!char_dev_buf) { reds->pending_mouse_event = TRUE; @@ -947,7 +947,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; - spice_char_device_write_buffer_add(RED_CHAR_DEVICE(reds->agent_state), char_dev_buf); + red_char_device_write_buffer_add(RED_CHAR_DEVICE(reds->agent_state), char_dev_buf); } int reds_get_n_channels(RedsState *reds) @@ -1003,13 +1003,13 @@ 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 = RED_CHAR_DEVICE(reds->agent_state); + RedCharDevice *dev = RED_CHAR_DEVICE(reds->agent_state); RedChannelClient *rcc; if (!reds->vdagent) { return; } - spice_assert(reds->vdagent->st && reds->vdagent->st == dev_state); + spice_assert(reds->vdagent->st && reds->vdagent->st == dev); rcc = main_channel_client_get_base(mcc); reds->agent_state->priv->client_agent_started = TRUE; /* @@ -1019,16 +1019,16 @@ void reds_on_main_agent_start(RedsState *reds, MainChannelClient *mcc, uint32_t * and vice versa, the sending from the server to the client won't have * flow control, but will have no other problem. */ - if (!spice_char_device_client_exists(dev_state, rcc->client)) { + if (!red_char_device_client_exists(dev, rcc->client)) { int client_added; - client_added = spice_char_device_client_add(dev_state, - rcc->client, - TRUE, /* flow control */ - REDS_VDI_PORT_NUM_RECEIVE_BUFFS, - REDS_AGENT_WINDOW_SIZE, - num_tokens, - red_channel_client_is_waiting_for_migrate_data(rcc)); + client_added = red_char_device_client_add(dev, + rcc->client, + TRUE, /* flow control */ + REDS_VDI_PORT_NUM_RECEIVE_BUFFS, + REDS_AGENT_WINDOW_SIZE, + num_tokens, + red_channel_client_is_waiting_for_migrate_data(rcc)); if (!client_added) { spice_warning("failed to add client to agent"); @@ -1036,9 +1036,9 @@ void reds_on_main_agent_start(RedsState *reds, MainChannelClient *mcc, uint32_t return; } } else { - spice_char_device_send_to_client_tokens_set(dev_state, - rcc->client, - num_tokens); + red_char_device_send_to_client_tokens_set(dev, + rcc->client, + num_tokens); } agent_msg_filter_config(&reds->agent_state->priv->write_filter, reds->agent_copypaste, @@ -1053,9 +1053,9 @@ void reds_on_main_agent_tokens(RedsState *reds, MainChannelClient *mcc, uint32_t return; } spice_assert(reds->vdagent->st); - spice_char_device_send_to_client_tokens_add(reds->vdagent->st, - main_channel_client_get_base(mcc)->client, - num_tokens); + red_char_device_send_to_client_tokens_add(reds->vdagent->st, + main_channel_client_get_base(mcc)->client, + num_tokens); } uint8_t *reds_get_agent_data_buffer(RedsState *reds, MainChannelClient *mcc, size_t size) @@ -1076,9 +1076,9 @@ uint8_t *reds_get_agent_data_buffer(RedsState *reds, MainChannelClient *mcc, siz spice_assert(dev_state->priv->recv_from_client_buf == NULL); client = main_channel_client_get_base(mcc)->client; - dev_state->priv->recv_from_client_buf = spice_char_device_write_buffer_get(RED_CHAR_DEVICE(dev_state), - client, - size + sizeof(VDIChunkHeader)); + dev_state->priv->recv_from_client_buf = red_char_device_write_buffer_get(RED_CHAR_DEVICE(dev_state), + client, + size + sizeof(VDIChunkHeader)); dev_state->priv->recv_from_client_buf_pushed = FALSE; return dev_state->priv->recv_from_client_buf->buf + sizeof(VDIChunkHeader); } @@ -1094,8 +1094,8 @@ void reds_release_agent_data_buffer(RedsState *reds, uint8_t *buf) spice_assert(buf == dev_state->priv->recv_from_client_buf->buf + sizeof(VDIChunkHeader)); if (!dev_state->priv->recv_from_client_buf_pushed) { - spice_char_device_write_buffer_release(RED_CHAR_DEVICE(reds->agent_state), - dev_state->priv->recv_from_client_buf); + red_char_device_write_buffer_release(RED_CHAR_DEVICE(reds->agent_state), + dev_state->priv->recv_from_client_buf); } dev_state->priv->recv_from_client_buf = NULL; dev_state->priv->recv_from_client_buf_pushed = FALSE; @@ -1166,7 +1166,7 @@ void reds_on_main_agent_data(RedsState *reds, MainChannelClient *mcc, void *mess dev_state->priv->recv_from_client_buf->buf_used = sizeof(VDIChunkHeader) + size; dev_state->priv->recv_from_client_buf_pushed = TRUE; - spice_char_device_write_buffer_add(RED_CHAR_DEVICE(reds->agent_state), dev_state->priv->recv_from_client_buf); + red_char_device_write_buffer_add(RED_CHAR_DEVICE(reds->agent_state), dev_state->priv->recv_from_client_buf); } void reds_on_main_migrate_connected(RedsState *reds, int seamless) @@ -1262,7 +1262,7 @@ void reds_marshall_migrate_data(RedsState *reds, SpiceMarshaller *m) there is no need to track the client tokens (see reds_reset_vdp) */ spice_assert(!agent_state->priv->agent_attached); - spice_char_device_state_migrate_data_marshall_empty(m); + red_char_device_migrate_data_marshall_empty(m); null_agent_mig_data = spice_marshaller_reserve_space(m, sizeof(SpiceMigrateDataMain) - sizeof(SpiceMigrateDataCharDevice)); @@ -1272,7 +1272,7 @@ void reds_marshall_migrate_data(RedsState *reds, SpiceMarshaller *m) return; } - spice_char_device_state_migrate_data_marshall(RED_CHAR_DEVICE(reds->agent_state), m); + red_char_device_migrate_data_marshall(RED_CHAR_DEVICE(reds->agent_state), m); spice_marshaller_add_uint8(m, reds->agent_state->priv->client_agent_started); mig_data.agent2client.chunk_header = agent_state->priv->vdi_chunk_header; @@ -1392,7 +1392,7 @@ static int reds_agent_state_restore(RedsState *reds, SpiceMigrateDataMain *mig_d agent_state->priv->read_filter.discard_all, agent_state->priv->read_filter.msg_data_to_read, agent_state->priv->read_filter.result); - return spice_char_device_state_restore(RED_CHAR_DEVICE(agent_state), &mig_data->agent_base); + return red_char_device_restore(RED_CHAR_DEVICE(agent_state), &mig_data->agent_base); } /* @@ -1441,8 +1441,8 @@ int reds_handle_migrate_data(RedsState *reds, MainChannelClient *mcc, spice_debug("agent was not attached on the source host"); if (reds->vdagent) { /* spice_char_device_client_remove disables waiting for migration data */ - spice_char_device_client_remove(RED_CHAR_DEVICE(agent_state), - main_channel_client_get_base(mcc)->client); + red_char_device_client_remove(RED_CHAR_DEVICE(agent_state), + main_channel_client_get_base(mcc)->client); main_channel_push_agent_connected(reds->main_channel); } } @@ -3050,13 +3050,13 @@ 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; if (state->priv->agent_attached) { - spice_char_device_state_reset_dev_instance(RED_CHAR_DEVICE(state), sin); + red_char_device_reset_dev_instance(RED_CHAR_DEVICE(state), sin); } else { state->priv->agent_attached = TRUE; g_object_set(G_OBJECT(state), "sin", sin, NULL); @@ -3086,16 +3086,16 @@ static SpiceCharDeviceState *attach_to_red_agent(RedsState *reds, SpiceCharDevic * 2.b If this happens second ==> we already have spice migrate data * then restore state */ - if (!spice_char_device_client_exists(RED_CHAR_DEVICE(state), reds_get_client(reds))) { + if (!red_char_device_client_exists(RED_CHAR_DEVICE(state), reds_get_client(reds))) { int client_added; - client_added = spice_char_device_client_add(RED_CHAR_DEVICE(state), - reds_get_client(reds), - TRUE, /* flow control */ - REDS_VDI_PORT_NUM_RECEIVE_BUFFS, - REDS_AGENT_WINDOW_SIZE, - ~0, - TRUE); + client_added = red_char_device_client_add(RED_CHAR_DEVICE(state), + reds_get_client(reds), + TRUE, /* flow control */ + REDS_VDI_PORT_NUM_RECEIVE_BUFFS, + REDS_AGENT_WINDOW_SIZE, + ~0, + TRUE); if (!client_added) { spice_warning("failed to add client to agent"); @@ -3125,10 +3125,10 @@ 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); + red_char_device_wakeup(sin->st); } #define SUBTYPE_VDAGENT "vdagent" @@ -3150,20 +3150,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, @@ -3171,7 +3171,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 = NULL; spice_info("CHAR_DEVICE %s", char_device->subtype); if (strcmp(char_device->subtype, SUBTYPE_VDAGENT) == 0) { @@ -3179,34 +3179,34 @@ static int spice_server_char_device_add_interface(SpiceServer *reds, spice_warning("vdagent already attached"); return -1; } - dev_state = attach_to_red_agent(reds, char_device); + dev = attach_to_red_agent(reds, char_device); } #ifdef USE_SMARTCARD else if (strcmp(char_device->subtype, SUBTYPE_SMARTCARD) == 0) { - if (!(dev_state = smartcard_device_connect(reds, char_device))) { + if (!(dev = smartcard_device_connect(reds, char_device))) { return -1; } } #endif else if (strcmp(char_device->subtype, SUBTYPE_USBREDIR) == 0) { - dev_state = spicevmc_device_connect(reds, char_device, SPICE_CHANNEL_USBREDIR); + dev = spicevmc_device_connect(reds, char_device, SPICE_CHANNEL_USBREDIR); } else if (strcmp(char_device->subtype, SUBTYPE_PORT) == 0) { if (strcmp(char_device->portname, "org.spice-space.webdav.0") == 0) { - dev_state = spicevmc_device_connect(reds, char_device, SPICE_CHANNEL_WEBDAV); + dev = spicevmc_device_connect(reds, char_device, SPICE_CHANNEL_WEBDAV); } else { - dev_state = spicevmc_device_connect(reds, char_device, SPICE_CHANNEL_PORT); + dev = spicevmc_device_connect(reds, char_device, SPICE_CHANNEL_PORT); } } - if (dev_state) { + if (dev) { spice_assert(char_device->st); /* setting the char_device state to "started" for backward compatibily with * qemu releases that don't call spice api for start/stop (not implemented yet) */ if (reds->vm_running) { - spice_char_device_start(char_device->st); + red_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; @@ -3366,7 +3366,7 @@ SPICE_GNUC_VISIBLE int spice_server_remove_interface(SpiceBaseInstance *sin) snd_detach_record(SPICE_CONTAINEROF(sin, SpiceRecordInstance, base)); } else if (strcmp(interface->type, SPICE_INTERFACE_CHAR_DEVICE) == 0) { SpiceCharDeviceInstance *char_device = SPICE_CONTAINEROF(sin, SpiceCharDeviceInstance, base); - reds = spice_char_device_get_server(char_device->st); + reds = red_char_device_get_server(char_device->st); spice_server_char_device_remove_interface(reds, sin); } else { spice_warning("VD_INTERFACE_REMOVING unsupported"); @@ -4020,7 +4020,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); + red_char_device_start(it->data); } reds_on_vm_start(reds); } @@ -4031,7 +4031,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); + red_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 3d40f59..228e2b9 100644 --- a/server/smartcard.c +++ b/server/smartcard.c @@ -238,7 +238,7 @@ MsgItem *smartcard_char_device_on_message_from_device(SmartCardDeviceState *stat static int smartcard_char_device_add_to_readers(RedsState *reds, SpiceCharDeviceInstance *char_device) { - SmartCardDeviceState *state = spice_char_device_state_opaque_get(char_device->st); + SmartCardDeviceState *state = red_char_device_opaque_get(char_device->st); if (g_smartcard_readers.num >= SMARTCARD_MAX_READERS) { return -1; @@ -263,7 +263,7 @@ static SpiceCharDeviceInstance *smartcard_readers_get_unattached(void) SmartCardDeviceState* state; for (i = 0; i < g_smartcard_readers.num; ++i) { - state = spice_char_device_state_opaque_get(g_smartcard_readers.sin[i]->st); + state = red_char_device_opaque_get(g_smartcard_readers.sin[i]->st); if (!state->priv->scc) { return g_smartcard_readers.sin[i]; } @@ -294,7 +294,7 @@ void smartcard_device_disconnect(SpiceCharDeviceInstance *char_device) g_object_unref(char_device); } -SpiceCharDeviceState *smartcard_device_connect(RedsState *reds, SpiceCharDeviceInstance *char_device) +RedCharDevice *smartcard_device_connect(RedsState *reds, SpiceCharDeviceInstance *char_device) { SmartCardDeviceState *st; @@ -311,7 +311,7 @@ static void smartcard_char_device_notify_reader_add(SmartCardDeviceState *st) SpiceCharDeviceWriteBuffer *write_buf; VSCMsgHeader *vheader; - write_buf = spice_char_device_write_buffer_get(RED_CHAR_DEVICE(st), NULL, sizeof(vheader)); + write_buf = red_char_device_write_buffer_get(RED_CHAR_DEVICE(st), NULL, sizeof(vheader)); if (!write_buf) { spice_error("failed to allocate write buffer"); return; @@ -327,20 +327,20 @@ static void smartcard_char_device_notify_reader_add(SmartCardDeviceState *st) static void smartcard_char_device_attach_client(SpiceCharDeviceInstance *char_device, SmartCardChannelClient *scc) { - SmartCardDeviceState *st = spice_char_device_state_opaque_get(char_device->st); + SmartCardDeviceState *st = red_char_device_opaque_get(char_device->st); int client_added; spice_assert(!scc->smartcard_state && !st->priv->scc); st->priv->scc = scc; scc->smartcard_state = st; - client_added = spice_char_device_client_add(RED_CHAR_DEVICE(st), - scc->base.client, - FALSE, /* no flow control yet */ - 0, /* send queue size */ - ~0, - ~0, - red_channel_client_is_waiting_for_migrate_data( - &scc->base)); + client_added = red_char_device_client_add(RED_CHAR_DEVICE(st), + scc->base.client, + FALSE, /* no flow control yet */ + 0, /* send queue size */ + ~0, + ~0, + red_channel_client_is_waiting_for_migrate_data( + &scc->base)); if (!client_added) { spice_warning("failed"); st->priv->scc = NULL; @@ -358,7 +358,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(RED_CHAR_DEVICE(st), NULL, sizeof(vheader)); + write_buf = red_char_device_write_buffer_get(RED_CHAR_DEVICE(st), NULL, sizeof(vheader)); if (!write_buf) { spice_error("failed to allocate write buffer"); return; @@ -380,7 +380,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, scc->base.client); + red_char_device_client_remove(RED_CHAR_DEVICE(st), scc->base.client); scc->smartcard_state = NULL; st->priv->scc = NULL; } @@ -409,7 +409,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(RED_CHAR_DEVICE(st), rcc->client, size); + scc->write_buf = red_char_device_write_buffer_get(RED_CHAR_DEVICE(st), rcc->client, size); if (!scc->write_buf) { spice_error("failed to allocate write buffer"); @@ -437,7 +437,7 @@ static void smartcard_channel_release_msg_rcv_buf(RedChannelClient *rcc, } else { if (scc->write_buf) { /* msg hasn't been pushed to the guest */ spice_assert(scc->write_buf->buf == msg); - spice_char_device_write_buffer_release(RED_CHAR_DEVICE(scc->smartcard_state), scc->write_buf); + red_char_device_write_buffer_release(RED_CHAR_DEVICE(scc->smartcard_state), scc->write_buf); scc->write_buf = NULL; } } @@ -485,13 +485,13 @@ static void smartcard_channel_send_migrate_data(RedChannelClient *rcc, spice_marshaller_add_uint32(m, SPICE_MIGRATE_DATA_SMARTCARD_VERSION); if (!state) { - spice_char_device_state_migrate_data_marshall_empty(m); + red_char_device_migrate_data_marshall_empty(m); spice_marshaller_add_uint8(m, 0); spice_marshaller_add_uint32(m, 0); spice_marshaller_add_uint32(m, 0); spice_debug("null char dev state"); } else { - spice_char_device_state_migrate_data_marshall(RED_CHAR_DEVICE(state), m); + red_char_device_migrate_data_marshall(RED_CHAR_DEVICE(state), 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); @@ -601,7 +601,7 @@ static void smartcard_remove_reader(SmartCardChannelClient *scc, uint32_t reader return; } - state = spice_char_device_state_opaque_get(char_device->st); + state = red_char_device_opaque_get(char_device->st); if (state->priv->reader_added == FALSE) { smartcard_push_error(&scc->base, reader_id, VSC_GENERAL_ERROR); @@ -642,7 +642,7 @@ static void smartcard_channel_write_to_reader(SpiceCharDeviceWriteBuffer *write_ spice_assert(vheader->reader_id <= g_smartcard_readers.num); sin = g_smartcard_readers.sin[vheader->reader_id]; - st = (SmartCardDeviceState *)spice_char_device_state_opaque_get(sin->st); + st = (SmartCardDeviceState *)red_char_device_opaque_get(sin->st); spice_assert(!st->priv->scc || st == st->priv->scc->smartcard_state); /* protocol requires messages to be in network endianess */ vheader->type = htonl(vheader->type); @@ -651,7 +651,7 @@ static void smartcard_channel_write_to_reader(SpiceCharDeviceWriteBuffer *write_ write_buf->buf_used = actual_length + sizeof(VSCMsgHeader); /* pushing the buffer to the write queue; It will be released * when it will be fully consumed by the device */ - spice_char_device_write_buffer_add(sin->st, write_buf); + red_char_device_write_buffer_add(sin->st, write_buf); if (st->priv->scc && write_buf == st->priv->scc->write_buf) { st->priv->scc->write_buf = NULL; } @@ -719,7 +719,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(RED_CHAR_DEVICE(scc->smartcard_state), &mig_data->base); + return red_char_device_restore(RED_CHAR_DEVICE(scc->smartcard_state), &mig_data->base); } static int smartcard_channel_handle_message(RedChannelClient *rcc, diff --git a/server/smartcard.h b/server/smartcard.h index 4b00433..d266ce2 100644 --- a/server/smartcard.h +++ b/server/smartcard.h @@ -49,7 +49,7 @@ GType red_char_device_smartcard_get_type(void) G_GNUC_CONST; /* * 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 3c446a4..0d53285 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; SpiceCharDeviceWriteBuffer *recv_from_client_buf; uint8_t port_opened; @@ -255,16 +255,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); + red_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 (red_char_device_client_exists(state->chardev, rcc->client)) { + red_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); } } @@ -310,7 +310,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 red_char_device_restore(state->chardev, &mig_data->base); } static int spicevmc_red_channel_client_handle_message(RedChannelClient *rcc, @@ -328,7 +328,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); + red_char_device_write_buffer_add(state->chardev, state->recv_from_client_buf); state->recv_from_client_buf = NULL; break; case SPICE_MSGC_PORT_EVENT: @@ -358,9 +358,9 @@ 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, - rcc->client, - size); + state->recv_from_client_buf = red_char_device_write_buffer_get(state->chardev, + rcc->client, + size); if (!state->recv_from_client_buf) { spice_error("failed to allocate write buffer"); return NULL; @@ -385,7 +385,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); + red_char_device_write_buffer_release(state->chardev, state->recv_from_client_buf); state->recv_from_client_buf = NULL; } break; @@ -421,7 +421,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); + red_char_device_migrate_data_marshall(state->chardev, m); } static void spicevmc_red_channel_send_port_init(RedChannelClient *rcc, @@ -521,8 +521,8 @@ 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, - red_channel_client_is_waiting_for_migrate_data(rcc))) { + if (!red_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); return; @@ -534,9 +534,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; @@ -564,11 +564,11 @@ SpiceCharDeviceState *spicevmc_device_connect(RedsState *reds, client_cbs.connect = spicevmc_connect; red_channel_register_client_cbs(&state->channel, &client_cbs, NULL); - state->chardev_st = red_char_device_spicevmc_new(sin, reds, state); + state->chardev = red_char_device_spicevmc_new(sin, reds, 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. */ @@ -576,13 +576,13 @@ void spicevmc_device_disconnect(RedsState *reds, SpiceCharDeviceInstance *sin) { SpiceVmcState *state; - state = (SpiceVmcState *)spice_char_device_state_opaque_get(sin->st); + state = (SpiceVmcState *)red_char_device_opaque_get(sin->st); if (state->recv_from_client_buf) { - spice_char_device_write_buffer_release(state->chardev_st, state->recv_from_client_buf); + red_char_device_write_buffer_release(state->chardev, state->recv_from_client_buf); } - spice_char_device_state_destroy(sin->st); - state->chardev_st = NULL; + red_char_device_destroy(sin->st); + state->chardev = NULL; sin->st = NULL; reds_unregister_channel(reds, &state->channel); @@ -594,11 +594,11 @@ SPICE_GNUC_VISIBLE void spice_server_port_event(SpiceCharDeviceInstance *sin, ui SpiceVmcState *state; if (sin->st == NULL) { - spice_warning("no SpiceCharDeviceState attached to instance %p", sin); + spice_warning("no RedCharDevice attached to instance %p", sin); return; } - state = (SpiceVmcState *)spice_char_device_state_opaque_get(sin->st); + state = (SpiceVmcState *)red_char_device_opaque_get(sin->st); if (event == SPICE_PORT_EVENT_OPENED) { state->port_opened = TRUE; } else if (event == SPICE_PORT_EVENT_CLOSED) { -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel