config_socket is configuring the client stream socket. As is responsibility of RedChannelClient to handle the stream it make more sense to have the function in this object. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/common-graphics-channel.c | 8 +++----- server/common-graphics-channel.h | 2 +- server/dcc.c | 8 ++++++-- server/dcc.h | 1 - server/display-channel.c | 1 - server/red-channel-client.c | 14 +++++++++++++- server/red-channel-client.h | 2 ++ server/red-channel.c | 11 ----------- server/red-channel.h | 2 -- server/sound.c | 6 +++--- 10 files changed, 28 insertions(+), 27 deletions(-) diff --git a/server/common-graphics-channel.c b/server/common-graphics-channel.c index 394a68e..b98276f 100644 --- a/server/common-graphics-channel.c +++ b/server/common-graphics-channel.c @@ -120,7 +120,7 @@ common_graphics_channel_set_property(GObject *object, } } -int common_channel_config_socket(RedChannelClient *rcc) +bool common_channel_client_config_socket(RedChannelClient *rcc) { RedClient *client = red_channel_client_get_client(rcc); MainChannelClient *mcc = red_client_get_main(client); @@ -147,7 +147,7 @@ int common_channel_config_socket(RedChannelClient *rcc) red_channel_client_ack_set_client_window(rcc, is_low_bandwidth ? WIDE_CLIENT_ACK_WINDOW : NARROW_CLIENT_ACK_WINDOW); - return TRUE; + return true; } @@ -155,15 +155,12 @@ static void common_graphics_channel_class_init(CommonGraphicsChannelClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); - RedChannelClass *channel_class = RED_CHANNEL_CLASS(klass); g_type_class_add_private(klass, sizeof(CommonGraphicsChannelPrivate)); object_class->get_property = common_graphics_channel_get_property; object_class->set_property = common_graphics_channel_set_property; - channel_class->config_socket = common_channel_config_socket; - g_object_class_install_property(object_class, PROP_QXL, g_param_spec_pointer("qxl", @@ -208,6 +205,7 @@ common_graphics_channel_client_class_init(CommonGraphicsChannelClientClass *klas g_type_class_add_private(klass, sizeof(CommonGraphicsChannelClientPrivate)); + client_class->config_socket = common_channel_client_config_socket; client_class->alloc_recv_buf = common_alloc_recv_buf; client_class->release_recv_buf = common_release_recv_buf; } diff --git a/server/common-graphics-channel.h b/server/common-graphics-channel.h index bdcb2c8..5f45c2c 100644 --- a/server/common-graphics-channel.h +++ b/server/common-graphics-channel.h @@ -25,7 +25,7 @@ G_BEGIN_DECLS -int common_channel_config_socket(RedChannelClient *rcc); +bool common_channel_client_config_socket(RedChannelClient *rcc); #define COMMON_CLIENT_TIMEOUT (NSEC_PER_SEC * 30) diff --git a/server/dcc.c b/server/dcc.c index 6413126..2747494 100644 --- a/server/dcc.c +++ b/server/dcc.c @@ -41,6 +41,7 @@ enum }; static void on_display_video_codecs_update(GObject *gobject, GParamSpec *pspec, gpointer user_data); +static bool dcc_config_socket(RedChannelClient *rcc); static void display_channel_client_get_property(GObject *object, @@ -124,12 +125,15 @@ static void display_channel_client_class_init(DisplayChannelClientClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); + RedChannelClientClass *client_class = RED_CHANNEL_CLIENT_CLASS(klass); object_class->get_property = display_channel_client_get_property; object_class->set_property = display_channel_client_set_property; object_class->constructed = display_channel_client_constructed; object_class->finalize = display_channel_client_finalize; + client_class->config_socket = dcc_config_socket; + g_object_class_install_property(object_class, PROP_IMAGE_COMPRESSION, g_param_spec_enum("image-compression", @@ -1417,14 +1421,14 @@ void dcc_set_max_stream_bit_rate(DisplayChannelClient *dcc, uint64_t rate) dcc->priv->streams_max_bit_rate = rate; } -int dcc_config_socket(RedChannelClient *rcc) +static bool dcc_config_socket(RedChannelClient *rcc) { RedClient *client = red_channel_client_get_client(rcc); MainChannelClient *mcc = red_client_get_main(client); DISPLAY_CHANNEL_CLIENT(rcc)->is_low_bandwidth = main_channel_client_is_low_bandwidth(mcc); - return common_channel_config_socket(rcc); + return common_channel_client_config_socket(rcc); } gboolean dcc_is_low_bandwidth(DisplayChannelClient *dcc) diff --git a/server/dcc.h b/server/dcc.h index 31e25b5..cc4f456 100644 --- a/server/dcc.h +++ b/server/dcc.h @@ -197,7 +197,6 @@ uint32_t dcc_get_max_stream_latency(DisplayChannelClient *dcc); void dcc_set_max_stream_latency(DisplayChannelClient *dcc, uint32_t latency); uint64_t dcc_get_max_stream_bit_rate(DisplayChannelClient *dcc); void dcc_set_max_stream_bit_rate(DisplayChannelClient *dcc, uint64_t rate); -int dcc_config_socket(RedChannelClient *rcc); gboolean dcc_is_low_bandwidth(DisplayChannelClient *dcc); GArray *dcc_get_preferred_video_codecs_for_encoding(DisplayChannelClient *dcc); diff --git a/server/display-channel.c b/server/display-channel.c index 67a77ef..ed3bc7f 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -2237,7 +2237,6 @@ display_channel_class_init(DisplayChannelClass *klass) channel_class->handle_migrate_flush_mark = handle_migrate_flush_mark; channel_class->handle_migrate_data = handle_migrate_data; channel_class->handle_migrate_data_get_serial = handle_migrate_data_get_serial; - channel_class->config_socket = dcc_config_socket; g_object_class_install_property(object_class, PROP_N_SURFACES, diff --git a/server/red-channel-client.c b/server/red-channel-client.c index 807a61f..0782b8e 100644 --- a/server/red-channel-client.c +++ b/server/red-channel-client.c @@ -158,6 +158,7 @@ static const SpiceDataHeaderOpaque mini_header_wrapper; static void red_channel_client_clear_sent_item(RedChannelClient *rcc); static void red_channel_client_initable_interface_init(GInitableIface *iface); static void red_channel_client_set_message_serial(RedChannelClient *channel, uint64_t); +static bool red_channel_client_config_socket(RedChannelClient *rcc); /* * When an error occurs over a channel, we treat it as a warning @@ -931,7 +932,7 @@ static gboolean red_channel_client_initable_init(GInitable *initable, SpiceCoreInterfaceInternal *core; RedChannelClient *self = RED_CHANNEL_CLIENT(initable); - if (!red_channel_config_socket(self->priv->channel, self)) { + if (!red_channel_client_config_socket(self)) { g_set_error_literal(&local_error, SPICE_SERVER_ERROR, SPICE_SERVER_ERROR_FAILED, @@ -1053,6 +1054,17 @@ void red_channel_client_shutdown(RedChannelClient *rcc) } } +static bool red_channel_client_config_socket(RedChannelClient *rcc) +{ + RedChannelClientClass *klass = RED_CHANNEL_CLIENT_GET_CLASS(rcc); + + if (!klass->config_socket) { + return true; + } + + return klass->config_socket(rcc); +} + static uint8_t *red_channel_client_alloc_msg_buf(RedChannelClient *rcc, uint16_t type, uint32_t size) { diff --git a/server/red-channel-client.h b/server/red-channel-client.h index 397216d..7d945df 100644 --- a/server/red-channel-client.h +++ b/server/red-channel-client.h @@ -169,6 +169,8 @@ struct RedChannelClientClass { GObjectClass parent_class; + /* configure socket connected to the client */ + bool (*config_socket)(RedChannelClient *rcc); uint8_t *(*alloc_recv_buf)(RedChannelClient *channel, uint16_t type, uint32_t size); void (*release_recv_buf)(RedChannelClient *channel, uint16_t type, uint32_t size, uint8_t *msg); }; diff --git a/server/red-channel.c b/server/red-channel.c index 8ae6ece..1f05ebb 100644 --- a/server/red-channel.c +++ b/server/red-channel.c @@ -709,17 +709,6 @@ SpiceCoreInterfaceInternal* red_channel_get_core_interface(RedChannel *channel) return channel->priv->core; } -int red_channel_config_socket(RedChannel *self, RedChannelClient *rcc) -{ - RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self); - - if (!klass->config_socket) { - return TRUE; - } - - return klass->config_socket(rcc); -} - void red_channel_on_disconnect(RedChannel *self, RedChannelClient *rcc) { RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self); diff --git a/server/red-channel.h b/server/red-channel.h index 44282f6..ed09905 100644 --- a/server/red-channel.h +++ b/server/red-channel.h @@ -115,7 +115,6 @@ struct RedChannelClass * callbacks that are triggered from channel client stream events. * They are called from the thread that listen to the stream events. */ - channel_configure_socket_proc config_socket; channel_disconnect_proc on_disconnect; channel_send_pipe_item_proc send_item; channel_handle_migrate_flush_mark_proc handle_migrate_flush_mark; @@ -224,7 +223,6 @@ struct RedsState* red_channel_get_server(RedChannel *channel); SpiceCoreInterfaceInternal* red_channel_get_core_interface(RedChannel *channel); /* channel callback function */ -int red_channel_config_socket(RedChannel *self, RedChannelClient *rcc); void red_channel_on_disconnect(RedChannel *self, RedChannelClient *rcc); void red_channel_send_item(RedChannel *self, RedChannelClient *rcc, RedPipeItem *item); void red_channel_reset_thread_id(RedChannel *self); diff --git a/server/sound.c b/server/sound.c index 118f439..11d9bc9 100644 --- a/server/sound.c +++ b/server/sound.c @@ -732,7 +732,7 @@ static void record_channel_send_item(RedChannelClient *rcc, G_GNUC_UNUSED RedPip snd_send(client); } -static int snd_channel_config_socket(RedChannelClient *rcc) +static bool snd_channel_client_config_socket(RedChannelClient *rcc) { int delay_val; #ifdef SO_PRIORITY @@ -767,7 +767,7 @@ static int snd_channel_config_socket(RedChannelClient *rcc) } } - return TRUE; + return true; } static void snd_channel_on_disconnect(RedChannelClient *rcc) @@ -1332,7 +1332,6 @@ snd_channel_class_init(SndChannelClass *klass) object_class->finalize = snd_channel_finalize; - channel_class->config_socket = snd_channel_config_socket; channel_class->on_disconnect = snd_channel_on_disconnect; } @@ -1486,6 +1485,7 @@ snd_channel_client_class_init(SndChannelClientClass *klass) { RedChannelClientClass *client_class = RED_CHANNEL_CLIENT_CLASS(klass); + client_class->config_socket = snd_channel_client_config_socket; client_class->alloc_recv_buf = snd_channel_client_alloc_recv_buf; client_class->release_recv_buf = snd_channel_client_release_recv_buf; } -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel