> > spice_server_set_channel_security() is already mostly doing that. We can > make its code more generic, and introduce a red_channel_get_name() > method. This method will then be used to make debug messages more > readable by showing the actual channel name rather than its type as > an int. > --- > server/red-channel.c | 5 +++++ > server/red-channel.h | 2 ++ > server/reds.c | 28 +++++++--------------------- > server/utils.c | 35 +++++++++++++++++++++++++++++++++++ > server/utils.h | 3 +++ > 5 files changed, 52 insertions(+), 21 deletions(-) > > diff --git a/server/red-channel.c b/server/red-channel.c > index 9736c54b1..4e5aba474 100644 > --- a/server/red-channel.c > +++ b/server/red-channel.c > @@ -460,6 +460,11 @@ int red_channel_is_connected(RedChannel *channel) > return channel && channel->priv->clients; > } > > +const char *red_channel_get_name(RedChannel *channel) > +{ > + return red_channel_type_to_str(channel->priv->type); > +} > + > void red_channel_remove_client(RedChannel *channel, RedChannelClient *rcc) > { > GList *link; > diff --git a/server/red-channel.h b/server/red-channel.h > index e0fe94fec..861887ed4 100644 > --- a/server/red-channel.h > +++ b/server/red-channel.h > @@ -128,6 +128,8 @@ struct RedChannelClass > > GType red_channel_get_type(void) G_GNUC_CONST; > > +const char *red_channel_get_name(RedChannel *channel); > + > void red_channel_add_client(RedChannel *channel, RedChannelClient *rcc); > void red_channel_remove_client(RedChannel *channel, RedChannelClient *rcc); > > diff --git a/server/reds.c b/server/reds.c > index 6c8e06959..39890ff18 100644 > --- a/server/reds.c > +++ b/server/reds.c > @@ -3975,32 +3975,18 @@ SPICE_GNUC_VISIBLE int > spice_server_set_zlib_glz_compression(SpiceServer *s, spi > > SPICE_GNUC_VISIBLE int spice_server_set_channel_security(SpiceServer *s, > const char *channel, int security) > { > - static const char *const names[] = { > - [ SPICE_CHANNEL_MAIN ] = "main", > - [ SPICE_CHANNEL_DISPLAY ] = "display", > - [ SPICE_CHANNEL_INPUTS ] = "inputs", > - [ SPICE_CHANNEL_CURSOR ] = "cursor", > - [ SPICE_CHANNEL_PLAYBACK ] = "playback", > - [ SPICE_CHANNEL_RECORD ] = "record", > -#ifdef USE_SMARTCARD > - [ SPICE_CHANNEL_SMARTCARD] = "smartcard", > -#endif > - [ SPICE_CHANNEL_USBREDIR ] = "usbredir", > - [ SPICE_CHANNEL_WEBDAV ] = "webdav", > - }; > - int i; > - > + int type; > if (channel == NULL) { > s->config->default_channel_security = security; > return 0; > } > - for (i = 0; i < SPICE_N_ELEMENTS(names); i++) { > - if (names[i] && strcmp(names[i], channel) == 0) { > - reds_set_one_channel_security(s, i, security); > - return 0; > - } > + type = red_channel_name_to_type(channel); > + if (type == -1) { > + return -1; > } > - return -1; > + > + reds_set_one_channel_security(s, type, security); > + return 0; > } > > /* very obsolete and old function, retain only for ABI */ > diff --git a/server/utils.c b/server/utils.c > index 66df86ff4..d5d3c175a 100644 > --- a/server/utils.c > +++ b/server/utils.c > @@ -19,6 +19,7 @@ > #endif > > #include <glib.h> > +#include <spice/enums.h> > #include "utils.h" > > int rgb32_data_has_alpha(int width, int height, size_t stride, > @@ -48,3 +49,37 @@ int rgb32_data_has_alpha(int width, int height, size_t > stride, > *all_set_out = has_alpha; > return has_alpha; > } > + > +static const char *const channel_names[] = { > + [ SPICE_CHANNEL_MAIN ] = "main", > + [ SPICE_CHANNEL_DISPLAY ] = "display", > + [ SPICE_CHANNEL_INPUTS ] = "inputs", > + [ SPICE_CHANNEL_CURSOR ] = "cursor", > + [ SPICE_CHANNEL_PLAYBACK ] = "playback", > + [ SPICE_CHANNEL_RECORD ] = "record", > +#ifdef USE_SMARTCARD > + [ SPICE_CHANNEL_SMARTCARD] = "smartcard", > +#endif Not a regression. Is it worth having the #ifdef ? SPICE_CHANNEL_SMARTCARD is always defined. > + [ SPICE_CHANNEL_USBREDIR ] = "usbredir", > + [ SPICE_CHANNEL_WEBDAV ] = "webdav", > +}; > + > +const char *red_channel_type_to_str(int type) > +{ > + g_return_val_if_fail(type >= 0, NULL); > + g_return_val_if_fail(type < G_N_ELEMENTS(channel_names), NULL); Do we want to log these? As far as I know these macro does logging. Currently looks like a regression. > + > + return channel_names[type]; > +} > + > +int red_channel_name_to_type(const char *name) > +{ > + int i; > + > + for (i = 0; i < G_N_ELEMENTS(channel_names); i++) { > + if (g_strcmp0(channel_names[i], name) == 0) { > + return i; > + } > + } > + return -1; > +} > diff --git a/server/utils.h b/server/utils.h > index ec2db2c90..3f735754d 100644 > --- a/server/utils.h > +++ b/server/utils.h > @@ -74,4 +74,7 @@ static inline red_time_t spice_get_monotonic_time_ms(void) > int rgb32_data_has_alpha(int width, int height, size_t stride, > uint8_t *data, int *all_set_out); > > +const char *red_channel_type_to_str(int type); > +int red_channel_name_to_type(const char *name); > + > #endif /* UTILS_H_ */ Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel