mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-27 15:45:54 +00:00
AgentMsgFilter needs to know whether monitors config messages need to be
filtered or not. This used to be done from within
agent_msg_filter_config() using the global RedsState, but this got more
tricky as it was removed.
A first attempt a1e62fa5ae caused crashes on qemu startup with
"qemu-system-x86_64 -spice port=5900" (without -vga qxl). A second
attempt added a RedsState* argument to agent_msg_filter_config() which
in my opinion is not really nice from a layering point of view.
This new attempt makes sure AgentMsgFilter state is correct when the
filter is set to stop discarding all data, which allows to remove direct
use of RedsState from within AgentMsgFilter.
Acked-by: Frediano Ziglio <fziglio@redhat.com>
55 lines
1.8 KiB
C
55 lines
1.8 KiB
C
/*
|
|
Copyright (C) 2011 Red Hat, Inc.
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
Red Hat Authors:
|
|
hdegoede@redhat.com
|
|
*/
|
|
|
|
#ifndef _H_AGENT_MSG_FILTER
|
|
#define _H_AGENT_MSG_FILTER
|
|
|
|
#include <spice/vd_agent.h>
|
|
|
|
/* Possible return values for agent_msg_filter_process_data */
|
|
enum {
|
|
AGENT_MSG_FILTER_OK,
|
|
AGENT_MSG_FILTER_DISCARD,
|
|
AGENT_MSG_FILTER_PROTO_ERROR,
|
|
AGENT_MSG_FILTER_MONITORS_CONFIG,
|
|
AGENT_MSG_FILTER_END
|
|
};
|
|
|
|
typedef struct AgentMsgFilter {
|
|
int msg_data_to_read;
|
|
int result;
|
|
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,
|
|
gboolean copy_paste, gboolean file_xfer,
|
|
gboolean use_client_monitors_config,
|
|
gboolean discard_all);
|
|
void agent_msg_filter_config(struct AgentMsgFilter *filter,
|
|
gboolean copy_paste, gboolean file_xfer,
|
|
gboolean use_client_monitors_config);
|
|
int agent_msg_filter_process_data(struct AgentMsgFilter *filter,
|
|
uint8_t *data, uint32_t len);
|
|
|
|
#endif
|