Remove use of global 'reds' from AgentMsgFilter

Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
This commit is contained in:
Jonathon Jongsma 2015-02-11 17:11:02 -06:00 committed by Frediano Ziglio
parent 4ac21bc649
commit 1f21008060
3 changed files with 22 additions and 10 deletions

View File

@ -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;

View File

@ -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);

View File

@ -407,7 +407,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
@ -521,7 +522,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 */
@ -3212,6 +3214,8 @@ SPICE_GNUC_VISIBLE int spice_server_add_interface(SpiceServer *s,
red_dispatcher_init(qxl);
dispatcher = qxl->st->dispatcher;
reds->dispatchers = g_list_prepend(reds->dispatchers, dispatcher);
reds->agent_state.write_filter.use_client_monitors_config = reds_use_client_monitors_config(reds);
reds->agent_state.read_filter.use_client_monitors_config = reds_use_client_monitors_config(reds);
/* this function has to be called after the dispatcher is on the list
* as QXLInstance clients expect the dispatcher to be on the list when
@ -3317,9 +3321,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;