From cd9845478328c00254919e73da7cb0141c96b4fc Mon Sep 17 00:00:00 2001 From: Jonathon Jongsma Date: Wed, 11 Feb 2015 17:11:02 -0600 Subject: Remove use of global 'reds' from AgentMsgFilter --- server/agent-msg-filter.c | 7 +++++-- server/agent-msg-filter.h | 11 +++++++---- server/reds.c | 14 ++++++++++---- 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; -- cgit