diff --git a/server/red-channel-client-private.h b/server/red-channel-client-private.h index d01cdbdb..5d29f320 100644 --- a/server/red-channel-client-private.h +++ b/server/red-channel-client-private.h @@ -41,7 +41,6 @@ typedef struct RedChannelClientConnectivityMonitor { } RedChannelClientConnectivityMonitor; typedef struct OutgoingHandler { - OutgoingHandlerInterface *cb; void *opaque; struct iovec vec_buf[IOV_MAX]; int vec_size; diff --git a/server/red-channel-client.c b/server/red-channel-client.c index 7201e81e..615ee15d 100644 --- a/server/red-channel-client.c +++ b/server/red-channel-client.c @@ -272,7 +272,6 @@ static void red_channel_client_constructed(GObject *object) self->priv->incoming.cb = red_channel_get_incoming_handler(self->priv->channel); self->priv->outgoing.opaque = self; - self->priv->outgoing.cb = red_channel_get_outgoing_handler(self->priv->channel); self->priv->outgoing.pos = 0; self->priv->outgoing.size = 0; @@ -373,7 +372,7 @@ RedChannel* red_channel_client_get_channel(RedChannelClient *rcc) return rcc->priv->channel; } -void red_channel_client_on_output(void *opaque, int n) +static void red_channel_client_data_sent(void *opaque, int n) { RedChannelClient *rcc = opaque; RedChannel *channel = red_channel_client_get_channel(rcc); @@ -394,15 +393,15 @@ void red_channel_client_on_input(void *opaque, int n) } } -int red_channel_client_get_out_msg_size(void *opaque) +static int red_channel_client_get_out_msg_size(void *opaque) { RedChannelClient *rcc = RED_CHANNEL_CLIENT(opaque); return rcc->priv->send_data.size; } -void red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, - int *vec_size, int pos) +static void red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, + int *vec_size, int pos) { RedChannelClient *rcc = RED_CHANNEL_CLIENT(opaque); @@ -410,7 +409,7 @@ void red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, vec, IOV_MAX, pos); } -void red_channel_client_on_out_block(void *opaque) +static void red_channel_client_set_blocked(void *opaque) { SpiceCoreInterfaceInternal *core; RedChannelClient *rcc = RED_CHANNEL_CLIENT(opaque); @@ -550,7 +549,7 @@ static void red_channel_client_restore_main_sender(RedChannelClient *rcc) rcc->priv->send_data.header.data = rcc->priv->send_data.main.header_data; } -void red_channel_client_on_out_msg_done(void *opaque) +static void red_channel_client_msg_sent(void *opaque) { RedChannelClient *rcc = RED_CHANNEL_CLIENT(opaque); int fd; @@ -1011,33 +1010,33 @@ static void red_peer_handle_outgoing(RedsStream *stream, OutgoingHandler *handle if (handler->size == 0) { handler->vec = handler->vec_buf; - handler->size = handler->cb->get_msg_size(handler->opaque); + handler->size = red_channel_client_get_out_msg_size(handler->opaque); if (!handler->size) { // nothing to be sent return; } } for (;;) { - handler->cb->prepare(handler->opaque, handler->vec, &handler->vec_size, handler->pos); + red_channel_client_prepare_out_msg(handler->opaque, handler->vec, &handler->vec_size, handler->pos); n = reds_stream_writev(stream, handler->vec, handler->vec_size); if (n == -1) { switch (errno) { case EAGAIN: - handler->cb->on_block(handler->opaque); + red_channel_client_set_blocked(handler->opaque); return; case EINTR: continue; case EPIPE: - handler->cb->on_error(handler->opaque); + red_channel_client_disconnect(handler->opaque); return; default: spice_printerr("%s", strerror(errno)); - handler->cb->on_error(handler->opaque); + red_channel_client_disconnect(handler->opaque); return; } } else { handler->pos += n; - handler->cb->on_output(handler->opaque, n); + red_channel_client_data_sent(handler->opaque, n); if (handler->pos == handler->size) { // finished writing data /* reset handler before calling on_msg_done, since it * can trigger another call to red_peer_handle_outgoing (when @@ -1045,7 +1044,7 @@ static void red_peer_handle_outgoing(RedsStream *stream, OutgoingHandler *handle handler->vec = handler->vec_buf; handler->pos = 0; handler->size = 0; - handler->cb->on_msg_done(handler->opaque); + red_channel_client_msg_sent(handler->opaque); return; } } diff --git a/server/red-channel-client.h b/server/red-channel-client.h index d54e7dd3..9e2bf731 100644 --- a/server/red-channel-client.h +++ b/server/red-channel-client.h @@ -175,13 +175,7 @@ void red_channel_client_disconnect_if_pending_send(RedChannelClient *rcc); RedChannel* red_channel_client_get_channel(RedChannelClient *rcc); -void red_channel_client_on_output(void *opaque, int n); void red_channel_client_on_input(void *opaque, int n); -int red_channel_client_get_out_msg_size(void *opaque); -void red_channel_client_prepare_out_msg(void *opaque, struct iovec *vec, - int *vec_size, int pos); -void red_channel_client_on_out_block(void *opaque); -void red_channel_client_on_out_msg_done(void *opaque); void red_channel_client_semi_seamless_migration_complete(RedChannelClient *rcc); void red_channel_client_init_outgoing_messages_window(RedChannelClient *rcc); diff --git a/server/red-channel.c b/server/red-channel.c index 14f46087..7e58006f 100644 --- a/server/red-channel.c +++ b/server/red-channel.c @@ -93,7 +93,6 @@ struct RedChannelPrivate void *data; - OutgoingHandlerInterface outgoing_cb; IncomingHandlerInterface incoming_cb; ClientCbs client_cbs; @@ -334,13 +333,6 @@ red_channel_init(RedChannel *self) self->priv->incoming_cb.on_error = (on_incoming_error_proc)red_channel_client_default_peer_on_error; self->priv->incoming_cb.on_input = red_channel_client_on_input; - self->priv->outgoing_cb.get_msg_size = red_channel_client_get_out_msg_size; - self->priv->outgoing_cb.prepare = red_channel_client_prepare_out_msg; - self->priv->outgoing_cb.on_block = red_channel_client_on_out_block; - self->priv->outgoing_cb.on_error = - (on_outgoing_error_proc)red_channel_client_default_peer_on_error; - self->priv->outgoing_cb.on_msg_done = red_channel_client_on_out_msg_done; - self->priv->outgoing_cb.on_output = red_channel_client_on_output; self->priv->client_cbs.connect = red_channel_client_default_connect; self->priv->client_cbs.disconnect = red_channel_client_default_disconnect; @@ -791,11 +783,6 @@ IncomingHandlerInterface* red_channel_get_incoming_handler(RedChannel *self) return &self->priv->incoming_cb; } -OutgoingHandlerInterface* red_channel_get_outgoing_handler(RedChannel *self) -{ - return &self->priv->outgoing_cb; -} - void red_channel_reset_thread_id(RedChannel *self) { self->priv->thread_id = pthread_self(); diff --git a/server/red-channel.h b/server/red-channel.h index 83382b63..63a68cfd 100644 --- a/server/red-channel.h +++ b/server/red-channel.h @@ -77,23 +77,6 @@ typedef struct IncomingHandlerInterface { on_input_proc on_input; } IncomingHandlerInterface; -typedef int (*get_outgoing_msg_size_proc)(void *opaque); -typedef void (*prepare_outgoing_proc)(void *opaque, struct iovec *vec, int *vec_size, int pos); -typedef void (*on_outgoing_error_proc)(void *opaque); -typedef void (*on_outgoing_block_proc)(void *opaque); -typedef void (*on_outgoing_msg_done_proc)(void *opaque); -typedef void (*on_output_proc)(void *opaque, int n); - -typedef struct OutgoingHandlerInterface { - get_outgoing_msg_size_proc get_msg_size; - prepare_outgoing_proc prepare; - on_outgoing_error_proc on_error; - on_outgoing_block_proc on_block; - on_outgoing_msg_done_proc on_msg_done; - on_output_proc on_output; -} OutgoingHandlerInterface; -/* Red Channel interface */ - typedef struct RedChannel RedChannel; typedef struct RedChannelClient RedChannelClient; typedef struct RedClient RedClient; @@ -301,10 +284,9 @@ void red_channel_send_item(RedChannel *self, RedChannelClient *rcc, RedPipeItem void red_channel_reset_thread_id(RedChannel *self); StatNodeRef red_channel_get_stat_node(RedChannel *channel); -/* FIXME: do these even need to be in RedChannel? It's really only used in +/* FIXME: does this even need to be in RedChannel? It's really only used in * RedChannelClient. Needs refactoring */ IncomingHandlerInterface* red_channel_get_incoming_handler(RedChannel *self); -OutgoingHandlerInterface* red_channel_get_outgoing_handler(RedChannel *self); const RedChannelCapabilities* red_channel_get_local_capabilities(RedChannel *self);