Hey, Not fully sure about adding data to spice.proto which is exclusively used by the dissector, could get a bit confusing. Do you have any idea if these new protocol bits could be used by spice-gtk/spice-server for agent message parsing, or will it always be limited to wireshark use for some reason ? Christophe On Tue, Jul 21, 2015 at 05:46:17PM +0100, Frediano Ziglio wrote: > Before was dump as raw data > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > spice.proto | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 120 insertions(+), 8 deletions(-) > > diff --git a/spice.proto b/spice.proto > index fe0eb34..880a8be 100644 > --- a/spice.proto > +++ b/spice.proto > @@ -212,6 +212,124 @@ struct DstInfo { > uint8 *cert_subject_data[cert_subject_size] @zero_terminated @marshall @ws("data", data) @ws_type(BYTES); > } @ctype(SpiceMigrationDstInfo); > > +enum32 agent_type { > + MOUSE_STATE = 1, > + MONITORS_CONFIG, > + REPLY, > + CLIPBOARD, > + DISPLAY_CONFIG, > + ANNOUNCE_CAPABILITIES, > + CLIPBOARD_GRAB, > + CLIPBOARD_REQUEST, > + CLIPBOARD_RELEASE, > + FILE_XFER_START, > + FILE_XFER_STATUS, > + FILE_XFER_DATA, > + CLIENT_DISCONNECTED, > + END_MESSAGE > +} @ws("Agent message type", agent_message_type) @prefix(VS_AGENT_); > + > +flags16 mouse_button_mask { > + LEFT, > + MIDDLE, > + RIGHT > +} @ws("Mouse button state", button_state) @ws_base(DEC); > + > +struct AgentMouseState { > + Point point; > + mouse_button_mask buttons_state; > + uint8 display_id @ws("Mouse display ID", mouse_display_id); > +}; > + > +struct AgentMonitorConfig { > + uint32 height @ws("Height", agent_monitor_height); > + uint32 width @ws("Width", agent_monitor_width); > + uint32 depth @ws("Depth", agent_monitor_depth); > + uint32 x @ws("x", agent_monitor_x); > + uint32 y @ws("y", agent_monitor_y); > +} @ws_txt_n("Monitor Config #%u", INDEX); > + > +enum32 agent_reply_error { > + SUCCESS = 0, > + ERROR > +} @prefix(WSVD_AGENT_) @ws("Error", vd_agent_reply_error); > + > +flags32 agent_caps { > + MOUSE_STATE @ws("Mouse State", vd_agent_cap_mouse_state), > + MONITORS_CONFIG @ws("Monitors config", vd_agent_cap_monitors_config), > + REPLY @ws("Reply", vd_agent_cap_reply), > + CLIPBOARD @ws("Clipboard", vd_agent_cap_clipboard), > + DISPLAY_CONFIG @ws("Display config", vd_agent_cap_display_config), > + CLIPBOARD_BY_DEMAND @ws("Clipboard by demand", vd_agent_cap_clipboard_by_demand), > + CLIPBOARD_SELECTION @ws("Clipboard selection", vd_agent_cap_clipboard_selection), > + SPARSE_MONITORS_CONFIG @ws("Sparse monitors config", vd_agent_cap_sparse_monitors_config), > + GUEST_LINEEND_LF @ws("Guest line-end LF", vd_agent_cap_guest_lineend_lf), > + GUEST_LINEEND_CRL @ws("Guest line-end CRLF", vd_agent_cap_guest_lineend_crlf) > +} @prefix(WSVD_AGENT_CAP_); > + > +struct AgentMonitorsConfig { > + uint32 num_monitors @ws("Number of monitors", agent_num_monitors); > + uint32 use_position @ws("Use position", vd_agent_monitors_config_flag_use_pos) @ws_type(BOOLEAN); > + AgentMonitorConfig configs[num_monitors]; > +}; > + > +struct AgentReply { > + uint32 type @ws("Type", vd_agent_reply_type); > + agent_reply_error error; > +}; > + > +struct AgentCapabilities { > + uint32 request @ws("Request", vd_agent_caps_request); > + agent_caps reply; > +}; > + > +struct AgentClipboardGrab { > + uint8 selection @ws("Agent clipboard selection", main_agent_clipboard_selection); > + uint8 reserved[3]; > +}; > + > +enum32 agent_clipboard_type { > + NONE = 0, > + UTF8_TEXT, > + IMAGE_PNG, > + IMAGE_BMP, > + IMAGE_TIFF, > + IMAGE_JPG > +} @ws("Agent clipboard type", main_agent_clipboard_type) @prefix(WSVD_AGENT_CLIPBOARD_); > + > +struct AgentClipboardRequest { > + uint8 selection @ws("Agent clipboard selection", main_agent_clipboard_selection); > + uint8 reserved[3]; > + agent_clipboard_type type; > +}; > + > +message AgentData { > + uint32 protocol @ws("Agent protocol version", main_agent_protocol); > + agent_type type; > + uint64 opaque @ws("Agent opaque", main_agent_opaque); > + uint32 size @ws("Agent message size", main_agent_size); > + switch (type) { > + case MOUSE_STATE: > + AgentMouseState mouse_state; > + case MONITORS_CONFIG: > + AgentMonitorsConfig monitors_config; > + case REPLY: > + AgentReply reply; > + case CLIPBOARD: > + Data text; > + case DISPLAY_CONFIG: > + uint32 config; > + case ANNOUNCE_CAPABILITIES: > + AgentCapabilities capabilities; > + case CLIPBOARD_GRAB: > + AgentClipboardGrab grab; > + case CLIPBOARD_REQUEST: > + AgentClipboardRequest request; > + case CLIPBOARD_RELEASE: > + Empty release; > + } u @anon; > +}; > + > channel MainChannel : BaseChannel { > server: > message { > @@ -251,7 +369,7 @@ channel MainChannel : BaseChannel { > link_err error_code @ws("spice ERROR", error_code); > } @ctype(SpiceMsgMainAgentDisconnect) agent_disconnected; > > - Data agent_data; > + Data agent_data @ws_as(AgentData); > > message { > uint32 num_tokens @ws("Agent token", main_agent_token); > @@ -308,7 +426,7 @@ channel MainChannel : BaseChannel { > uint32 num_tokens @ws("Agent tokens", main_agent_tokens); > } agent_start; > > - Data agent_data; > + Data agent_data @ws_as(AgentData); > > message { > uint32 num_tokens @ws("Agent token", main_agent_token); > @@ -970,12 +1088,6 @@ enum8 mouse_button { > DOWN, > }; > > -flags16 mouse_button_mask { > - LEFT, > - MIDDLE, > - RIGHT > -} @ws("Mouse button state", button_state) @ws_base(DEC); > - > struct WSMousePosition { > Point pt; > mouse_button_mask buttons_state; > -- > 2.1.0 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
pgpGrcBCj1Z4m.pgp
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel