summaryrefslogtreecommitdiff
path: root/server/reds.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/reds.c')
-rw-r--r--server/reds.c16
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);
}