From Yaniv Kaul:

Enhance the Spice dissector to deal with VM name and UUID messages.

https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6971

svn path=/trunk/; revision=41686
This commit is contained in:
Anders Broman 2012-03-20 16:03:30 +00:00
parent b959e9cd74
commit dc9a5254f4
1 changed files with 42 additions and 1 deletions

View File

@ -171,7 +171,10 @@ static const value_string playback_mode_vals[] = {
/* main channel */ /* main channel */
#define SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE 0 #define SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE 0
#define SPICE_MAIN_CAP_VM_NAME_UUID 1
#define SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE_MASK (1 << SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE) #define SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE_MASK (1 << SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE)
#define SPICE_MAIN_CAP_VM_NAME_UUID_MASK (1 << SPICE_MAIN_CAP_VM_NAME_UUID)
/* main channel server messages */ /* main channel server messages */
#define SPICE_MAIN_MIGRATE_BEGIN 101 #define SPICE_MAIN_MIGRATE_BEGIN 101
#define SPICE_MAIN_MIGRATE_CANCEL 102 #define SPICE_MAIN_MIGRATE_CANCEL 102
@ -183,6 +186,10 @@ static const value_string playback_mode_vals[] = {
#define SPICE_MAIN_AGENT_DISCONNECTED 108 #define SPICE_MAIN_AGENT_DISCONNECTED 108
#define SPICE_MAIN_AGENT_DATA 109 #define SPICE_MAIN_AGENT_DATA 109
#define SPICE_MAIN_AGENT_TOKEN 110 #define SPICE_MAIN_AGENT_TOKEN 110
#define SPICE_MAIN_MIGRATE_SWITCH_HOST 111
#define SPICE_MAIN_MIGRATE_END 112
#define SPICE_MAIN_NAME 113
#define SPICE_MAIN_UUID 114
static const value_string main_server_message_types[] = { static const value_string main_server_message_types[] = {
{ SPICE_MAIN_MIGRATE_BEGIN, "Server MIGRATE_BEGIN" }, { SPICE_MAIN_MIGRATE_BEGIN, "Server MIGRATE_BEGIN" },
@ -195,6 +202,10 @@ static const value_string main_server_message_types[] = {
{ SPICE_MAIN_AGENT_DISCONNECTED, "Server AGENT_DISCONNECTED" }, { SPICE_MAIN_AGENT_DISCONNECTED, "Server AGENT_DISCONNECTED" },
{ SPICE_MAIN_AGENT_DATA, "Server AGENT_DATA" }, { SPICE_MAIN_AGENT_DATA, "Server AGENT_DATA" },
{ SPICE_MAIN_AGENT_TOKEN, "Server AGENT_TOKEN" }, { SPICE_MAIN_AGENT_TOKEN, "Server AGENT_TOKEN" },
{ SPICE_MAIN_MIGRATE_SWITCH_HOST, "Server MIGRATE_SWITCH_HOST" },
{ SPICE_MAIN_MIGRATE_END, "Server MIGRATE_END" },
{ SPICE_MAIN_NAME, "Server VM_NAME" },
{ SPICE_MAIN_UUID, "Server VM_UUID" },
{ 0, NULL } { 0, NULL }
}; };
@ -879,6 +890,7 @@ static int hf_ticket_client = -1;
static int hf_auth_select_client = -1; static int hf_auth_select_client = -1;
static int hf_ticket_server = -1; static int hf_ticket_server = -1;
static int hf_main_cap_semi_migrate = -1; static int hf_main_cap_semi_migrate = -1;
static int hf_main_cap_vm_name_uuid = -1;
static int hf_display_cap = -1; static int hf_display_cap = -1;
static int hf_inputs_cap = -1; static int hf_inputs_cap = -1;
static int hf_cursor_cap = -1; static int hf_cursor_cap = -1;
@ -983,6 +995,8 @@ static int hf_spice_sasl_auth_result = -1;
static int hf_playback_cap_celt = -1; static int hf_playback_cap_celt = -1;
static int hf_playback_cap_volume = -1; static int hf_playback_cap_volume = -1;
static int hf_record_cap_celt = -1; static int hf_record_cap_celt = -1;
static int hf_vm_uuid = -1;
static int hf_vm_name = -1;
static dissector_handle_t jpeg_handle; static dissector_handle_t jpeg_handle;
@ -2370,7 +2384,7 @@ dissect_spice_agent_message(tvbuff_t *tvb, proto_tree *tree, const guint32 messa
static guint32 static guint32
dissect_spice_main_server(tvbuff_t *tvb, proto_tree *tree, const guint16 message_type, guint32 offset) dissect_spice_main_server(tvbuff_t *tvb, proto_tree *tree, const guint16 message_type, guint32 offset)
{ {
guint32 num_channels, i, agent_msg_type, agent_msg_len; guint32 num_channels, i, agent_msg_type, agent_msg_len, name_len;
guint8 channel_type; guint8 channel_type;
switch(message_type) { switch(message_type) {
@ -2392,6 +2406,17 @@ dissect_spice_main_server(tvbuff_t *tvb, proto_tree *tree, const guint16 message
proto_tree_add_item(tree, hf_ram_hint, tvb, offset, 4, ENC_LITTLE_ENDIAN); proto_tree_add_item(tree, hf_ram_hint, tvb, offset, 4, ENC_LITTLE_ENDIAN);
offset += 4; offset += 4;
break; break;
case SPICE_MAIN_NAME:
name_len = tvb_get_letohl(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 4, "Name length (bytes): %u", name_len);
offset += 4;
proto_tree_add_item(tree, hf_vm_name, tvb, offset, name_len, ENC_NA);
offset += name_len;
break;
case SPICE_MAIN_UUID:
proto_tree_add_item(tree, hf_vm_uuid, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
break;
case SPICE_MAIN_CHANNELS_LIST: case SPICE_MAIN_CHANNELS_LIST:
num_channels = tvb_get_letohl(tvb, offset); num_channels = tvb_get_letohl(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 4, "Number of channels: %u", num_channels); proto_tree_add_text(tree, tvb, offset, 4, "Number of channels: %u", num_channels);
@ -2801,6 +2826,7 @@ dissect_spice_link_capabilities(tvbuff_t *tvb, proto_tree *tree, guint32 offset,
ti = proto_tree_add_item(tree, hf_common_cap_byte1, tvb, offset, 4, ENC_LITTLE_ENDIAN); ti = proto_tree_add_item(tree, hf_common_cap_byte1, tvb, offset, 4, ENC_LITTLE_ENDIAN);
cap_tree = proto_item_add_subtree(ti, ett_cap_tree); cap_tree = proto_item_add_subtree(ti, ett_cap_tree);
proto_tree_add_boolean(cap_tree, hf_main_cap_semi_migrate, tvb, offset, 4, val); proto_tree_add_boolean(cap_tree, hf_main_cap_semi_migrate, tvb, offset, 4, val);
proto_tree_add_boolean(cap_tree, hf_main_cap_vm_name_uuid, tvb, offset, 4, val); /*Note: only relevant for client. TODO: dissect only for client */
break; break;
default: default:
break; break;
@ -3507,6 +3533,11 @@ proto_register_spice(void)
FT_BOOLEAN, 3, TFS(&tfs_set_notset), SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE_MASK, FT_BOOLEAN, 3, TFS(&tfs_set_notset), SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE_MASK,
NULL, HFILL } NULL, HFILL }
}, },
{ &hf_main_cap_vm_name_uuid,
{ "VM name and UUID messages capability", "spice.main_cap_vm_name_uuid",
FT_BOOLEAN, 3, TFS(&tfs_set_notset), SPICE_MAIN_CAP_VM_NAME_UUID_MASK,
NULL, HFILL }
},
{ &hf_display_cap, { &hf_display_cap,
{ "Display channelcapability", "spice.display_cap", { "Display channelcapability", "spice.display_cap",
FT_UINT32, BASE_DEC, NULL, 0x0, FT_UINT32, BASE_DEC, NULL, 0x0,
@ -3976,6 +4007,16 @@ proto_register_spice(void)
{ "Authentication result", "spice.sasl_auth_result", { "Authentication result", "spice.sasl_auth_result",
FT_UINT8, BASE_DEC, VALS(spice_sasl_auth_result_vs), 0x0, FT_UINT8, BASE_DEC, VALS(spice_sasl_auth_result_vs), 0x0,
NULL, HFILL } NULL, HFILL }
},
{ &hf_vm_uuid,
{ "VM UUID", "spice.vm_uuid",
FT_GUID, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_vm_name,
{ "VM Name", "spice.vm_name",
FT_STRINGZ, BASE_NONE, NULL, 0x0,
NULL, HFILL }
} }
}; };