summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2015-02-11 17:11:02 -0600
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-02-23 23:00:46 +0100
commitcd9845478328c00254919e73da7cb0141c96b4fc (patch)
tree20acfc29002be7c48188725f84d5571c9ac68bc9
parent23d60783ddb060a5a452ff2fd45e2f5601a06ded (diff)
downloadspice-cd9845478328c00254919e73da7cb0141c96b4fc.tar.gz
spice-cd9845478328c00254919e73da7cb0141c96b4fc.tar.xz
spice-cd9845478328c00254919e73da7cb0141c96b4fc.zip
Remove use of global 'reds' from AgentMsgFilter
-rw-r--r--server/agent-msg-filter.c7
-rw-r--r--server/agent-msg-filter.h11
-rw-r--r--server/reds.c14
3 files changed, 22 insertions, 10 deletions
diff --git a/server/agent-msg-filter.c b/server/agent-msg-filter.c
index 1ddeb814..6e1e645f 100644
--- a/server/agent-msg-filter.c
+++ b/server/agent-msg-filter.c
@@ -28,11 +28,14 @@
#include "red-dispatcher.h"
void agent_msg_filter_init(struct AgentMsgFilter *filter,
- int copy_paste, int file_xfer, int discard_all)
+ gboolean copy_paste, gboolean file_xfer,
+ gboolean use_client_monitors_config,
+ int discard_all)
{
memset(filter, 0, sizeof(*filter));
filter->copy_paste_enabled = copy_paste;
filter->file_xfer_enabled = file_xfer;
+ filter->use_client_monitors_config = use_client_monitors_config;
filter->discard_all = discard_all;
}
@@ -93,7 +96,7 @@ data_to_read:
}
break;
case VD_AGENT_MONITORS_CONFIG:
- if (reds_use_client_monitors_config(reds)) {
+ if (filter->use_client_monitors_config) {
filter->result = AGENT_MSG_FILTER_MONITORS_CONFIG;
} else {
filter->result = AGENT_MSG_FILTER_OK;
diff --git a/server/agent-msg-filter.h b/server/agent-msg-filter.h
index 92aabced..c04face8 100644
--- a/server/agent-msg-filter.h
+++ b/server/agent-msg-filter.h
@@ -35,13 +35,16 @@ enum {
typedef struct AgentMsgFilter {
int msg_data_to_read;
int result;
- int copy_paste_enabled;
- int file_xfer_enabled;
- int discard_all;
+ gboolean copy_paste_enabled;
+ gboolean file_xfer_enabled;
+ gboolean use_client_monitors_config;
+ gboolean discard_all;
} AgentMsgFilter;
void agent_msg_filter_init(struct AgentMsgFilter *filter,
- int copy_paste, int file_xfer, int discard_all);
+ gboolean copy_paste, gboolean file_xfer,
+ gboolean use_client_monitors_config,
+ gboolean discard_all);
int agent_msg_filter_process_data(struct AgentMsgFilter *filter,
uint8_t *data, uint32_t len);
diff --git a/server/reds.c b/server/reds.c
index 6c97a55b..b9252cfa 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -353,7 +353,8 @@ static void reds_reset_vdp(RedsState *reds)
}
/* Reset read filter to start with clean state when the agent reconnects */
agent_msg_filter_init(&state->read_filter, reds->agent_copypaste,
- reds->agent_file_xfer, TRUE);
+ reds->agent_file_xfer,
+ reds_use_client_monitors_config(reds), TRUE);
/* Throw away pending chunks from the current (if any) and future
* messages written by the client.
* TODO: client should clear its agent messages queue when the agent
@@ -467,7 +468,8 @@ void reds_client_disconnect(RedsState *reds, RedClient *client)
/* Reset write filter to start with clean state on client reconnect */
agent_msg_filter_init(&reds->agent_state.write_filter, reds->agent_copypaste,
- reds->agent_file_xfer, TRUE);
+ reds->agent_file_xfer,
+ reds_use_client_monitors_config(reds), TRUE);
/* Throw away pending chunks from the current (if any) and future
* messages read from the agent */
@@ -3095,6 +3097,8 @@ SPICE_GNUC_VISIBLE int spice_server_add_interface(SpiceServer *s,
qxl->st->qif = SPICE_CONTAINEROF(interface, QXLInterface, base);
qxl->st->dispatcher = red_dispatcher_new(s, qxl, calc_compression_level(s));
s->dispatchers = g_list_prepend(s->dispatchers, qxl->st->dispatcher);
+ s->agent_state.write_filter.use_client_monitors_config = reds_use_client_monitors_config(s);
+ s->agent_state.read_filter.use_client_monitors_config = reds_use_client_monitors_config(s);
} else if (strcmp(interface->type, SPICE_INTERFACE_TABLET) == 0) {
SpiceTabletInstance *tablet = SPICE_CONTAINEROF(sin, SpiceTabletInstance, base);
@@ -3199,9 +3203,11 @@ static void reds_init_vd_agent_resources(RedsState *reds)
ring_init(&state->read_bufs);
agent_msg_filter_init(&state->write_filter, reds->agent_copypaste,
- reds->agent_file_xfer, TRUE);
+ reds->agent_file_xfer,
+ reds_use_client_monitors_config(reds), TRUE);
agent_msg_filter_init(&state->read_filter, reds->agent_copypaste,
- reds->agent_file_xfer, TRUE);
+ reds->agent_file_xfer,
+ reds_use_client_monitors_config(reds), TRUE);
state->read_state = VDI_PORT_READ_STATE_READ_HEADER;
state->receive_pos = (uint8_t *)&state->vdi_chunk_header;