diff options
Diffstat (limited to 'server/reds.c')
-rw-r--r-- | server/reds.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/server/reds.c b/server/reds.c index d0adcaa0..3d5fb7e9 100644 --- a/server/reds.c +++ b/server/reds.c @@ -731,8 +731,22 @@ static void reds_update_mouse_mode(RedsState *reds) } } +static void reds_push_agent_features(RedsState *reds) +{ + if (reds->config == NULL) { + return; + } + + if (reds_main_channel_connected(reds)) { + uint32_t flags = (reds->config->agent_copypaste ? SPICE_AGENT_FEATURE_COPY_PASTE : 0) | + (reds->config->agent_file_xfer ? SPICE_AGENT_FEATURE_FILE_TRANSFER : 0); + main_channel_push_agent_features(reds->main_channel, flags); + } +} + static void reds_update_agent_properties(RedsState *reds) { + reds_push_agent_features(reds); if (reds->agent_dev == NULL || reds->config == NULL) { return; } @@ -1840,6 +1854,8 @@ static void reds_handle_main_link(RedsState *reds, RedLinkInfo *link) main_channel_client_push_name(mcc, reds->config->spice_name); if (reds->config->spice_uuid_is_set) main_channel_client_push_uuid(mcc, reds->config->spice_uuid); + /* inform new client about agent features */ + reds_push_agent_features(reds); } else { reds_mig_target_client_add(reds, client); } |