forked from osmocom/wireshark
From Kai Blin:
Dissect SuperPackedPlayer struct and packet type 29 and Correctly dissect type 02, 05 and 07 packets. svn path=/trunk/; revision=24491
This commit is contained in:
parent
a6958ba14b
commit
dd971ab222
|
@ -105,7 +105,6 @@ static int hf_dplay_flags_no_sess_desc_changes = -1;
|
|||
/* special fields, to be phased out in favour for more detailed information */
|
||||
static int hf_dplay_data_type_0f = -1;
|
||||
static int hf_dplay_data_type_1a = -1;
|
||||
static int hf_dplay_data_type_29 = -1;
|
||||
|
||||
/* Session description structure fields */
|
||||
static int hf_dplay_sess_desc_length = -1;
|
||||
|
@ -122,20 +121,84 @@ static int hf_dplay_sess_desc_user_2 = -1;
|
|||
static int hf_dplay_sess_desc_user_3 = -1;
|
||||
static int hf_dplay_sess_desc_user_4 = -1;
|
||||
|
||||
/* SuperPackedPlayer structure fields */
|
||||
static int hf_dplay_spp_size = -1;
|
||||
static int hf_dplay_spp_flags = -1;
|
||||
static int hf_dplay_spp_flags_sysplayer = -1;
|
||||
static int hf_dplay_spp_flags_nameserver = -1;
|
||||
static int hf_dplay_spp_flags_in_group = -1;
|
||||
static int hf_dplay_spp_flags_sending = -1;
|
||||
static int hf_dplay_spp_id = -1;
|
||||
static int hf_dplay_spp_player_info_mask = -1;
|
||||
static int hf_dplay_spp_have_short_name = -1;
|
||||
static int hf_dplay_spp_have_long_name = -1;
|
||||
static int hf_dplay_spp_sp_length_type = -1;
|
||||
static int hf_dplay_spp_pd_length_type = -1;
|
||||
static int hf_dplay_spp_player_count_type = -1;
|
||||
static int hf_dplay_spp_have_parent_id = -1;
|
||||
static int hf_dplay_spp_shortcut_count_type = -1;
|
||||
static int hf_dplay_spp_dialect = -1;
|
||||
static int hf_dplay_spp_sys_player_id = -1;
|
||||
static int hf_dplay_spp_short_name = -1;
|
||||
static int hf_dplay_spp_long_name = -1;
|
||||
static int hf_dplay_spp_player_data_length = -1;
|
||||
static int hf_dplay_spp_player_data = -1;
|
||||
static int hf_dplay_spp_sp_data_length = -1;
|
||||
static int hf_dplay_spp_sp_data = -1;
|
||||
static int hf_dplay_spp_player_count = -1;
|
||||
static int hf_dplay_spp_player_id = -1;
|
||||
static int hf_dplay_spp_parent_id = -1;
|
||||
static int hf_dplay_spp_shortcut_count = -1;
|
||||
static int hf_dplay_spp_shortcut_id = -1;
|
||||
#define DPLAY_SPP_FLAG_SYSPLAYER 0x01
|
||||
#define DPLAY_SPP_FLAG_NAMESERVER 0x02
|
||||
#define DPLAY_SPP_FLAG_IN_GROUP 0x04
|
||||
#define DPLAY_SPP_FLAG_SENDING 0x08
|
||||
|
||||
/* SecurityDesc structure fields */
|
||||
static int hf_dplay_sd_size = -1;
|
||||
static int hf_dplay_sd_flags = -1;
|
||||
static int hf_dplay_sd_sspi = -1;
|
||||
static int hf_dplay_sd_capi = -1;
|
||||
static int hf_dplay_sd_capi_type = -1;
|
||||
static int hf_dplay_sd_enc_alg = -1;
|
||||
|
||||
/* Message Type 0x0001 data fields */
|
||||
static int hf_dplay_type_01_name_offset = -1;
|
||||
static int hf_dplay_type_01_game_name = -1;
|
||||
|
||||
/* Message Type 0x0002 data fields */
|
||||
static int hf_dplay_type_02_game_guid = -1;
|
||||
static int hf_dplay_type_02_ignored = -1;
|
||||
static int hf_dplay_type_02_password_offset = -1;
|
||||
static int hf_dplay_type_02_flags = -1;
|
||||
static int hf_dplay_type_02_password = -1;
|
||||
static int hf_enum_sess_flag_join = -1;
|
||||
static int hf_enum_sess_flag_all = -1;
|
||||
static int hf_enum_sess_flag_passwd = -1;
|
||||
#define DPLAY_ENUM_SESS_FLAG_JOIN 0x0001
|
||||
#define DPLAY_ENUM_SESS_FLAG_ALL 0x0002
|
||||
#define DPLAY_ENUM_SESS_FLAG_PASSWD 0x0040
|
||||
|
||||
/* Message Type 0x0005 data fields */
|
||||
static int hf_dplay_type_05_request = -1;
|
||||
static int hf_dplay_type_05_flags = -1;
|
||||
static int hf_dplay_type_05_system_player = -1;
|
||||
static int hf_dplay_type_05_name_server = -1;
|
||||
static int hf_dplay_type_05_local = -1;
|
||||
static int hf_dplay_type_05_unknown = -1; /* unknown, but always set */
|
||||
static int hf_dplay_type_05_secure = -1;
|
||||
#define DPLAY_TYPE05_FLAG_SYSPLAYER 0x001
|
||||
#define DPLAY_TYPE05_FLAG_NAMESERVER 0x002
|
||||
#define DPLAY_TYPE05_FLAG_LOCAL 0x004
|
||||
#define DPLAY_TYPE05_FLAG_UNKNOWN 0x008
|
||||
#define DPLAY_TYPE05_FLAG_SECURE 0x200
|
||||
|
||||
/* Message Type 0x0007 data fields */
|
||||
static int hf_dplay_type_07_dpid = -1;
|
||||
static int hf_dplay_type_07_padding = -1;
|
||||
static int hf_dplay_type_07_sspi_offset = -1;
|
||||
static int hf_dplay_type_07_capi_offset = -1;
|
||||
static int hf_dplay_type_07_hresult = -1;
|
||||
static int hf_dplay_type_07_sspi = -1;
|
||||
static int hf_dplay_type_07_capi = -1;
|
||||
|
||||
/* Message Type 0x0008 data fields */
|
||||
static int hf_dplay_type_08_padding_1 = -1; /* 4 bytes */
|
||||
|
@ -176,7 +239,6 @@ static int hf_dplay_type_0e_dpid_1 = -1; /* 4 bytes */
|
|||
static int hf_dplay_type_0e_dpid_2 = -1; /* 4 bytes */
|
||||
static int hf_dplay_type_0e_padding_2 = -1; /* 8 bytes */
|
||||
|
||||
|
||||
/* Message Type 0x0013 data fields */
|
||||
static int hf_dplay_type_13_padding_1 = -1; /* 4 bytes */
|
||||
static int hf_dplay_type_13_dpid_1 = -1; /* 4 bytes */
|
||||
|
@ -212,51 +274,15 @@ static int hf_dplay_type_16_data = -1;
|
|||
static int hf_dplay_type_17_data = -1;
|
||||
|
||||
/* Message Type 0x0029 data fields */
|
||||
static int hf_dplay_type_29_unknown_uint32_01 = -1; /* seems to always be 3 */
|
||||
static int hf_dplay_type_29_message_end_type = -1; /* mostly 0, alternative packet ending on 1 */
|
||||
static int hf_dplay_type_29_unknown_uint32_03 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_04 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_05 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_06 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_07 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_08 = -1;
|
||||
static int hf_dplay_type_29_magic_16_bytes = -1;
|
||||
static int hf_dplay_type_29_dpid_1 = -1;
|
||||
static int hf_dplay_type_29_unknown_3 = -1;
|
||||
static int hf_dplay_type_29_player_count = -1;
|
||||
static int hf_dplay_type_29_group_count = -1;
|
||||
static int hf_dplay_type_29_packed_offset = -1;
|
||||
static int hf_dplay_type_29_shortcut_count = -1;
|
||||
static int hf_dplay_type_29_description_offset = -1;
|
||||
static int hf_dplay_type_29_name_offset = -1;
|
||||
static int hf_dplay_type_29_password_offset = -1;
|
||||
static int hf_dplay_type_29_game_name = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_10 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_11 = -1;
|
||||
static int hf_dplay_type_29_dpid_2 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_12 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_13 = -1;
|
||||
static int hf_dplay_type_29_saddr_field_len_1 = -1;
|
||||
static int hf_dplay_type_29_saddr_af_1 = -1;
|
||||
static int hf_dplay_type_29_saddr_port_1 = -1;
|
||||
static int hf_dplay_type_29_saddr_ip_1 = -1;
|
||||
static int hf_dplay_type_29_saddr_padd_1 = -1;
|
||||
static int hf_dplay_type_29_saddr_af_2 = -1;
|
||||
static int hf_dplay_type_29_saddr_port_2 = -1;
|
||||
static int hf_dplay_type_29_saddr_ip_2 = -1;
|
||||
static int hf_dplay_type_29_saddr_padd_2 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_14 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_15 = -1;
|
||||
static int hf_dplay_type_29_dpid_3 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_16 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_17 = -1;
|
||||
static int hf_dplay_type_29_saddr_field_len_2 = -1;
|
||||
static int hf_dplay_type_29_saddr_af_3 = -1;
|
||||
static int hf_dplay_type_29_saddr_port_3 = -1;
|
||||
static int hf_dplay_type_29_saddr_ip_3 = -1;
|
||||
static int hf_dplay_type_29_saddr_padd_3 = -1;
|
||||
static int hf_dplay_type_29_saddr_af_4 = -1;
|
||||
static int hf_dplay_type_29_saddr_port_4 = -1;
|
||||
static int hf_dplay_type_29_saddr_ip_4 = -1;
|
||||
static int hf_dplay_type_29_saddr_padd_4 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_18 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_19= -1;
|
||||
static int hf_dplay_type_29_dpid_4 = -1;
|
||||
static int hf_dplay_type_29_unknown_uint32_20 = -1;
|
||||
static int hf_dplay_type_29_dpid_5 = -1;
|
||||
static int hf_dplay_type_29_password = -1;
|
||||
|
||||
/* Message Type 0x002e data fields */
|
||||
static int hf_dplay_type_2e_padding_1 = -1;
|
||||
|
@ -311,14 +337,15 @@ static gint ett_dplay_data = -1;
|
|||
static gint ett_dplay_enc_packet = -1;
|
||||
static gint ett_dplay_flags = -1;
|
||||
static gint ett_dplay_sess_desc_flags = -1;
|
||||
static gint ett_dplay_spp_flags = -1;
|
||||
static gint ett_dplay_spp_info_mask = -1;
|
||||
static gint ett_dplay_type02_flags = -1;
|
||||
static gint ett_dplay_type05_flags = -1;
|
||||
static gint ett_dplay_type08_saddr1 = -1;
|
||||
static gint ett_dplay_type08_saddr2 = -1;
|
||||
static gint ett_dplay_type13_saddr1 = -1;
|
||||
static gint ett_dplay_type13_saddr2 = -1;
|
||||
static gint ett_dplay_type29_saddr1 = -1;
|
||||
static gint ett_dplay_type29_saddr2 = -1;
|
||||
static gint ett_dplay_type29_saddr3 = -1;
|
||||
static gint ett_dplay_type29_saddr4 = -1;
|
||||
static gint ett_dplay_type29_spp = -1;
|
||||
static gint ett_dplay_type2e_saddr1 = -1;
|
||||
static gint ett_dplay_type2e_saddr2 = -1;
|
||||
static gint ett_dplay_type38_saddr1 = -1;
|
||||
|
@ -401,18 +428,31 @@ static const value_string dplay_token_val[] = {
|
|||
{ 0xfab, "Remote Message" },
|
||||
{ 0xcab, "Forwarded Message" },
|
||||
{ 0xbab, "Server Message" },
|
||||
{ 0 , NULL },
|
||||
};
|
||||
|
||||
static const value_string dplay_type05_request[] = {
|
||||
{ 0x00000008, "eight"},
|
||||
{ 0x00000009, "nine"},
|
||||
{ 0 , NULL},
|
||||
static const value_string dplay_spp_length_val[] = {
|
||||
{ 0x0, "Not present" },
|
||||
{ 0x1, "One byte" },
|
||||
{ 0x2, "Two bytes" },
|
||||
{ 0x3, "Four bytes" },
|
||||
{ 0 , NULL},
|
||||
};
|
||||
|
||||
static const value_string dplay_type29_end_type[] = {
|
||||
{ 0x00000000, "sockaddr"},
|
||||
{ 0x00000001, "DPID"},
|
||||
{ 0 , NULL},
|
||||
static const value_string dplay_enc_alg_val[] = {
|
||||
{ 0x0000, "Default" },
|
||||
{ 0x6611, "AES" },
|
||||
{ 0x6603, "3DES" },
|
||||
{ 0x6601, "DES" },
|
||||
{ 0x6602, "RC2" },
|
||||
{ 0x6801, "RC4" },
|
||||
{ 0 , NULL },
|
||||
};
|
||||
|
||||
static const value_string yes_no_val[] = {
|
||||
{ 0x0, "No" },
|
||||
{ 0x1, "Yes" },
|
||||
{ 0 , NULL },
|
||||
};
|
||||
|
||||
static const true_false_string tfs_dplay_flag = {
|
||||
|
@ -529,6 +569,146 @@ static gint dissect_session_desc(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
|||
return offset;
|
||||
}
|
||||
|
||||
static gint spp_get_value(guint32 length_type, tvbuff_t *tvb, gint offset, guint32 *value)
|
||||
{
|
||||
gint len = 0;
|
||||
|
||||
*value = 0;
|
||||
|
||||
switch (length_type) {
|
||||
case 1:
|
||||
len = 1;
|
||||
*value = tvb_get_guint8(tvb, offset);
|
||||
break;
|
||||
case 2:
|
||||
len = 2;
|
||||
*value = tvb_get_letohs(tvb, offset);
|
||||
break;
|
||||
case 3:
|
||||
len = 4;
|
||||
*value = tvb_get_letohl(tvb, offset);
|
||||
break;
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static gint dissect_dplay_super_packed_player(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
||||
{
|
||||
guint32 flags, is_sysplayer, info_mask;
|
||||
guint32 have_short_name, have_long_name, sp_length_type, pd_length_type;
|
||||
guint32 player_count_type, have_parent_id, shortcut_count_type;
|
||||
guint32 player_data_length, sp_data_length, player_count, shortcut_count;
|
||||
proto_item *flags_item = NULL, *im_item = NULL;
|
||||
proto_tree *flags_tree = NULL, *im_tree = NULL;
|
||||
gint len;
|
||||
|
||||
proto_tree_add_item(tree, hf_dplay_spp_size, tvb, offset, 4, TRUE); offset += 4;
|
||||
|
||||
flags = tvb_get_letohl(tvb, offset);
|
||||
is_sysplayer = flags & 0x00000001;
|
||||
flags_item = proto_tree_add_item(tree, hf_dplay_spp_flags, tvb, offset, 4, TRUE);
|
||||
flags_tree = proto_item_add_subtree(flags_item, ett_dplay_spp_flags);
|
||||
proto_tree_add_boolean(flags_tree, hf_dplay_spp_flags_sending, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flags_tree, hf_dplay_spp_flags_in_group, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flags_tree, hf_dplay_spp_flags_nameserver, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flags_tree, hf_dplay_spp_flags_sysplayer, tvb, offset, 4, flags);
|
||||
offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_spp_id, tvb, offset, 4, TRUE); offset += 4;
|
||||
|
||||
info_mask = tvb_get_letohl(tvb, offset);
|
||||
|
||||
have_short_name = info_mask & 0x00000001;
|
||||
have_long_name = (info_mask & 0x00000002) >> 1;
|
||||
sp_length_type = (info_mask & 0x0000000c) >> 2;
|
||||
pd_length_type = (info_mask & 0x00000030) >> 4;
|
||||
player_count_type = (info_mask & 0x000000c0) >> 6;
|
||||
have_parent_id = (info_mask & 0x00000100) >> 8;
|
||||
shortcut_count_type = (info_mask & 0x00000600) >> 9;
|
||||
|
||||
im_item = proto_tree_add_item(tree, hf_dplay_spp_player_info_mask, tvb, offset, 4, TRUE);
|
||||
|
||||
im_tree = proto_item_add_subtree(im_item, ett_dplay_spp_info_mask);
|
||||
proto_tree_add_uint(im_tree, hf_dplay_spp_have_short_name, tvb, offset, 4, have_short_name);
|
||||
proto_tree_add_uint(im_tree, hf_dplay_spp_have_long_name, tvb, offset, 4, have_long_name);
|
||||
proto_tree_add_uint(im_tree, hf_dplay_spp_sp_length_type, tvb, offset, 4, sp_length_type);
|
||||
proto_tree_add_uint(im_tree, hf_dplay_spp_pd_length_type, tvb, offset, 4, pd_length_type);
|
||||
proto_tree_add_uint(im_tree, hf_dplay_spp_player_count_type, tvb, offset, 4, player_count_type);
|
||||
proto_tree_add_uint(im_tree, hf_dplay_spp_have_parent_id, tvb, offset, 4, have_parent_id);
|
||||
proto_tree_add_uint(im_tree, hf_dplay_spp_shortcut_count_type, tvb, offset, 4, shortcut_count_type);
|
||||
offset+=4;
|
||||
|
||||
if (is_sysplayer) {
|
||||
proto_tree_add_item(tree, hf_dplay_spp_dialect, tvb, offset, 4, TRUE);
|
||||
} else {
|
||||
proto_tree_add_item(tree, hf_dplay_spp_sys_player_id, tvb, offset, 4, FALSE);
|
||||
}
|
||||
offset += 4;
|
||||
|
||||
if (have_short_name) {
|
||||
offset = display_unicode_string(tree, hf_dplay_spp_short_name, tvb, offset);
|
||||
}
|
||||
|
||||
if (have_long_name) {
|
||||
offset = display_unicode_string(tree, hf_dplay_spp_long_name, tvb, offset);
|
||||
}
|
||||
|
||||
if (pd_length_type) {
|
||||
len = spp_get_value(pd_length_type, tvb, offset, &player_data_length);
|
||||
proto_tree_add_item(tree, hf_dplay_spp_player_data_length, tvb, offset, len, TRUE);
|
||||
offset += len;
|
||||
proto_tree_add_item(tree, hf_dplay_spp_player_data, tvb, offset, player_data_length, FALSE);
|
||||
offset += player_data_length;
|
||||
}
|
||||
|
||||
if (sp_length_type) {
|
||||
len = spp_get_value(sp_length_type, tvb, offset, &sp_data_length);
|
||||
proto_tree_add_item(tree, hf_dplay_spp_sp_data_length, tvb, offset, len, TRUE);
|
||||
offset += len;
|
||||
proto_tree_add_item(tree, hf_dplay_spp_sp_data, tvb, offset, sp_data_length, FALSE);
|
||||
offset += sp_data_length;
|
||||
}
|
||||
|
||||
if (player_count_type) {
|
||||
guint32 i;
|
||||
|
||||
len = spp_get_value(player_count_type, tvb, offset, &player_count);
|
||||
proto_tree_add_item(tree, hf_dplay_spp_player_count, tvb, offset, len, TRUE);
|
||||
offset += len;
|
||||
for (i=0; i < player_count; ++i) {
|
||||
proto_tree_add_item(tree, hf_dplay_spp_player_id, tvb, offset, 4, FALSE); offset += 4;
|
||||
}
|
||||
}
|
||||
|
||||
if (have_parent_id) {
|
||||
proto_tree_add_item(tree, hf_dplay_spp_parent_id, tvb, offset, 4, FALSE); offset += 4;
|
||||
}
|
||||
|
||||
if (shortcut_count_type) {
|
||||
guint32 i;
|
||||
|
||||
len = spp_get_value(shortcut_count_type, tvb, offset, &shortcut_count);
|
||||
proto_tree_add_item(tree, hf_dplay_spp_shortcut_count, tvb, offset, len, TRUE);
|
||||
offset += len;
|
||||
for (i=0; i < shortcut_count; ++i) {
|
||||
proto_tree_add_item(tree, hf_dplay_spp_shortcut_id, tvb, offset, 4, FALSE); offset += 4;
|
||||
}
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
static gint dissect_security_desc(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_dplay_sd_size, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_sd_flags, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_sd_sspi, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_sd_capi, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_sd_capi_type, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_sd_enc_alg, tvb, offset, 4, TRUE); offset += 4;
|
||||
return offset;
|
||||
}
|
||||
|
||||
static gint dissect_dplay_header(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
||||
{
|
||||
guint32 mixed, size, token;
|
||||
|
@ -563,21 +743,70 @@ static gint dissect_type01_message(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
|||
|
||||
static gint dissect_type02_message(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
||||
{
|
||||
guint32 passwd_offset;
|
||||
guint32 flags;
|
||||
proto_item *flags_item = NULL;
|
||||
proto_tree *flags_tree = NULL;
|
||||
|
||||
passwd_offset = tvb_get_letohl(tvb, offset + 16);
|
||||
flags = tvb_get_letohl(tvb, offset + 20);
|
||||
|
||||
proto_tree_add_item(tree, hf_dplay_type_02_game_guid, tvb, offset, 16, FALSE); offset += 16;
|
||||
proto_tree_add_item(tree, hf_dplay_type_02_ignored, tvb, offset, 8, FALSE);
|
||||
proto_tree_add_item(tree, hf_dplay_type_02_password_offset, tvb, offset, 4, TRUE); offset += 4;
|
||||
|
||||
flags_item = proto_tree_add_item(tree, hf_dplay_type_02_flags, tvb, offset, 4, TRUE);
|
||||
flags_tree = proto_item_add_subtree(flags_item, ett_dplay_type02_flags);
|
||||
proto_tree_add_boolean(flags_tree, hf_enum_sess_flag_passwd, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flags_tree, hf_enum_sess_flag_all, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flags_tree, hf_enum_sess_flag_join, tvb, offset, 4, flags);
|
||||
offset += 4;
|
||||
|
||||
if (passwd_offset != 0) {
|
||||
offset = display_unicode_string(tree, hf_dplay_type_02_password, tvb, offset);
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
static gint dissect_type05_message(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_dplay_type_05_request, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_item *flag_item;
|
||||
proto_item *flag_tree;
|
||||
guint32 flags;
|
||||
|
||||
flags = tvb_get_letohl(tvb, offset);
|
||||
flag_item = proto_tree_add_item(tree, hf_dplay_type_05_flags, tvb, offset, 4, TRUE);
|
||||
flag_tree = proto_item_add_subtree(flag_item, ett_dplay_type05_flags);
|
||||
proto_tree_add_boolean(flag_tree, hf_dplay_type_05_secure, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flag_tree, hf_dplay_type_05_unknown, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flag_tree, hf_dplay_type_05_local, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flag_tree, hf_dplay_type_05_name_server, tvb, offset, 4, flags);
|
||||
proto_tree_add_boolean(flag_tree, hf_dplay_type_05_system_player, tvb, offset, 4, flags);
|
||||
offset += 4;
|
||||
return offset;
|
||||
}
|
||||
|
||||
static gint dissect_type07_message(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
||||
{
|
||||
guint32 sspi_offset, capi_offset;
|
||||
|
||||
proto_tree_add_item(tree, hf_dplay_type_07_dpid, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_07_padding, tvb, offset, 36, FALSE); offset += 36;
|
||||
offset = dissect_security_desc(tree, tvb, offset);
|
||||
|
||||
sspi_offset = tvb_get_letohl(tvb, offset);
|
||||
proto_tree_add_item(tree, hf_dplay_type_07_sspi_offset, tvb, offset, 4, TRUE); offset += 4;
|
||||
|
||||
capi_offset = tvb_get_letohl(tvb, offset);
|
||||
proto_tree_add_item(tree, hf_dplay_type_07_capi_offset, tvb, offset, 4, TRUE); offset += 4;
|
||||
|
||||
proto_tree_add_item(tree, hf_dplay_type_07_hresult, tvb, offset, 4, TRUE); offset += 4;
|
||||
|
||||
if (sspi_offset) {
|
||||
offset = display_unicode_string(tree, hf_dplay_type_07_sspi, tvb, offset);
|
||||
}
|
||||
|
||||
if (capi_offset) {
|
||||
offset = display_unicode_string(tree, hf_dplay_type_07_capi, tvb, offset);
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
@ -766,84 +995,54 @@ static gint dissect_type1a_message(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
|||
|
||||
static gint dissect_type29_message(proto_tree *tree, tvbuff_t *tvb, gint offset)
|
||||
{
|
||||
proto_item *first_saddr_item = NULL,
|
||||
*second_saddr_item = NULL, *third_saddr_item = NULL,
|
||||
*fourth_saddr_item = NULL;
|
||||
proto_tree *first_saddr_tree = NULL,
|
||||
*second_saddr_tree = NULL, *third_saddr_tree = NULL,
|
||||
*fourth_saddr_tree = NULL;
|
||||
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_01, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_message_end_type, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_03, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_04, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_05, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_06, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_07, tvb, offset, 4, TRUE); offset += 4;
|
||||
offset = dissect_session_desc(tree, tvb, offset);
|
||||
guint32 password_offset = tvb_get_letohl(tvb, offset + 24);
|
||||
gint player_count, group_count, shortcut_count;
|
||||
gint i;
|
||||
|
||||
player_count = tvb_get_letohl(tvb, offset);
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_player_count, tvb, offset, 4, TRUE); offset += 4;
|
||||
group_count = tvb_get_letohl(tvb, offset);
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_group_count, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_packed_offset, tvb, offset, 4, TRUE); offset += 4;
|
||||
shortcut_count = tvb_get_letohl(tvb, offset);
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_shortcut_count, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_description_offset, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_name_offset, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_password_offset, tvb, offset, 4, TRUE); offset += 4;
|
||||
offset = dissect_session_desc(tree, tvb, offset);
|
||||
offset = display_unicode_string(tree, hf_dplay_type_29_game_name, tvb, offset);
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_10, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_11, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_dpid_2, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_12, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_13, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_saddr_field_len_1, tvb, offset, 1, FALSE); offset += 1;
|
||||
|
||||
first_saddr_item = proto_tree_add_text(tree, tvb, offset, 16,
|
||||
"DirectPlay message type 0x0029 s_addr_in structure 1");
|
||||
first_saddr_tree = proto_item_add_subtree(first_saddr_item, ett_dplay_type29_saddr1);
|
||||
if (password_offset != 0) {
|
||||
offset = display_unicode_string(tree, hf_dplay_type_29_password, tvb, offset);
|
||||
}
|
||||
|
||||
proto_tree_add_item(first_saddr_tree, hf_dplay_type_29_saddr_af_1, tvb, offset, 2, TRUE); offset += 2;
|
||||
proto_tree_add_item(first_saddr_tree, hf_dplay_type_29_saddr_port_1, tvb, offset, 2, FALSE); offset += 2;
|
||||
proto_tree_add_item(first_saddr_tree, hf_dplay_type_29_saddr_ip_1, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(first_saddr_tree, hf_dplay_type_29_saddr_padd_1, tvb, offset, 8, FALSE); offset += 8;
|
||||
for (i=0; i < player_count; ++i) {
|
||||
proto_item *spp_item;
|
||||
proto_tree *spp_tree;
|
||||
|
||||
second_saddr_item = proto_tree_add_text(tree, tvb, offset, 16,
|
||||
"DirectPlay message type 0x0029 s_addr_in structure 2");
|
||||
second_saddr_tree = proto_item_add_subtree(second_saddr_item, ett_dplay_type29_saddr2);
|
||||
spp_item = proto_tree_add_text(tree, tvb, offset, 0, "Player %d", i);
|
||||
spp_tree = proto_item_add_subtree(spp_item, ett_dplay_type29_spp);
|
||||
offset = dissect_dplay_super_packed_player(spp_tree, tvb, offset);
|
||||
}
|
||||
|
||||
proto_tree_add_item(second_saddr_tree, hf_dplay_type_29_saddr_af_2, tvb, offset, 2, TRUE); offset += 2;
|
||||
proto_tree_add_item(second_saddr_tree, hf_dplay_type_29_saddr_port_2, tvb, offset, 2, FALSE); offset += 2;
|
||||
proto_tree_add_item(second_saddr_tree, hf_dplay_type_29_saddr_ip_2, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(second_saddr_tree, hf_dplay_type_29_saddr_padd_2, tvb, offset, 8, FALSE); offset += 8;
|
||||
for (i=0; i < group_count; ++i) {
|
||||
proto_item *spp_item;
|
||||
proto_tree *spp_tree;
|
||||
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_14, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_15, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_dpid_3, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_16, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_17, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_saddr_field_len_2, tvb, offset, 1, FALSE); offset += 1;
|
||||
spp_item = proto_tree_add_text(tree, tvb, offset, 0, "Group %d", i);
|
||||
spp_tree = proto_item_add_subtree(spp_item, ett_dplay_type29_spp);
|
||||
offset = dissect_dplay_super_packed_player(spp_tree, tvb, offset);
|
||||
}
|
||||
|
||||
third_saddr_item = proto_tree_add_text(tree, tvb, offset, 16,
|
||||
"DirectPlay message type 0x0029 s_addr_in structure 3");
|
||||
third_saddr_tree = proto_item_add_subtree(third_saddr_item,
|
||||
ett_dplay_type29_saddr3);
|
||||
for (i=0; i < shortcut_count; ++i) {
|
||||
proto_item *spp_item;
|
||||
proto_tree *spp_tree;
|
||||
|
||||
proto_tree_add_item(third_saddr_tree, hf_dplay_type_29_saddr_af_3, tvb, offset, 2, TRUE); offset += 2;
|
||||
proto_tree_add_item(third_saddr_tree, hf_dplay_type_29_saddr_port_3, tvb, offset, 2, FALSE); offset += 2;
|
||||
proto_tree_add_item(third_saddr_tree, hf_dplay_type_29_saddr_ip_3, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(third_saddr_tree, hf_dplay_type_29_saddr_padd_3, tvb, offset, 8, FALSE); offset += 8;
|
||||
spp_item = proto_tree_add_text(tree, tvb, offset, 0, "Shortcut %d", i);
|
||||
spp_tree = proto_item_add_subtree(spp_item, ett_dplay_type29_spp);
|
||||
offset = dissect_dplay_super_packed_player(spp_tree, tvb, offset);
|
||||
}
|
||||
|
||||
fourth_saddr_item = proto_tree_add_text(tree, tvb, offset, 16,
|
||||
"DirectPlay message type 0x0029 s_addr_in structure 4");
|
||||
fourth_saddr_tree = proto_item_add_subtree(fourth_saddr_item,
|
||||
ett_dplay_type29_saddr4);
|
||||
|
||||
proto_tree_add_item(fourth_saddr_tree, hf_dplay_type_29_saddr_af_4, tvb, offset, 2, TRUE); offset += 2;
|
||||
proto_tree_add_item(fourth_saddr_tree, hf_dplay_type_29_saddr_port_4, tvb, offset, 2, FALSE); offset += 2;
|
||||
proto_tree_add_item(fourth_saddr_tree, hf_dplay_type_29_saddr_ip_4, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(fourth_saddr_tree, hf_dplay_type_29_saddr_padd_4, tvb, offset, 8, FALSE); offset += 8;
|
||||
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_18, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_19, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_dpid_4, tvb, offset, 4, FALSE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_unknown_uint32_20, tvb, offset, 4, TRUE); offset += 4;
|
||||
proto_tree_add_item(tree, hf_dplay_type_29_dpid_5, tvb, offset, 4, FALSE); offset += 4;
|
||||
|
||||
/* still some parts missing here */
|
||||
proto_tree_add_item(tree, hf_dplay_data_type_29, tvb, offset, -1, FALSE);
|
||||
/* here we parse another saddr_field_len and two saddr structs */
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
@ -1145,9 +1344,6 @@ void proto_register_dplay()
|
|||
{ &hf_dplay_data_type_1a,
|
||||
{ "DirectPlay data for type 1a messages", "dplay.data.type_1a", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_data_type_29,
|
||||
{ "DirectPlay data for type 29 messages", "dplay.data.type_29", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
|
||||
/* Session Desc structure fields */
|
||||
{ &hf_dplay_sess_desc_flags,
|
||||
|
@ -1247,6 +1443,112 @@ void proto_register_dplay()
|
|||
{ "Session description user defined 4", "dplay.sess_desc.user_4", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
|
||||
/* SuperPackedPlayer structure fields */
|
||||
{ &hf_dplay_spp_size,
|
||||
{ "SuperPackedPlayer size", "dplay.spp.size", FT_UINT32, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_flags,
|
||||
{ "SuperPackedPlayer flags", "dplay.spp.flags", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_flags_sysplayer,
|
||||
{ "is system player", "dplay.spp.flags.sysplayer", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_SPP_FLAG_SYSPLAYER, "", HFILL}},
|
||||
{ &hf_dplay_spp_flags_nameserver,
|
||||
{ "is name server", "dplay.spp.flags.nameserver", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_SPP_FLAG_NAMESERVER, "", HFILL}},
|
||||
{ &hf_dplay_spp_flags_in_group,
|
||||
{ "in group", "dplay.spp.flags.in_group", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_SPP_FLAG_IN_GROUP, "", HFILL}},
|
||||
{ &hf_dplay_spp_flags_sending,
|
||||
{ "sending player on local machine", "dplay.spp.flags.sending", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_SPP_FLAG_SENDING, "", HFILL}},
|
||||
{ &hf_dplay_spp_id,
|
||||
{ "SuperPackedPlayer ID", "dplay.spp.id", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_player_info_mask,
|
||||
{ "SuperPackedPlayer player info mask", "dplay.spp.pim", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_have_short_name,
|
||||
{ "SuperPackedPlayer have short name", "dplay.spp.pim.short_name", FT_UINT32, BASE_HEX,
|
||||
VALS(yes_no_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_have_long_name,
|
||||
{ "SuperPackedPlayer have long name", "dplay.spp.pim.long_name", FT_UINT32, BASE_HEX,
|
||||
VALS(yes_no_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_sp_length_type,
|
||||
{ "SuperPackedPlayer service provider length info", "dplay.spp.pim.sp_length", FT_UINT32, BASE_HEX,
|
||||
VALS(dplay_spp_length_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_pd_length_type,
|
||||
{ "SuperPackedPlayer player data length info", "dplay.spp.pim.pd_length", FT_UINT32, BASE_HEX,
|
||||
VALS(dplay_spp_length_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_player_count_type,
|
||||
{ "SuperPackedPlayer player count info", "dplay.spp.pim.player_count", FT_UINT32, BASE_HEX,
|
||||
VALS(dplay_spp_length_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_have_parent_id,
|
||||
{ "SuperPackedPlayer have parent ID", "dplay.spp.pim.parent_id", FT_UINT32, BASE_HEX,
|
||||
VALS(yes_no_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_shortcut_count_type,
|
||||
{ "SuperPackedPlayer shortcut count info", "dplay.spp.pim.shortcut_count", FT_UINT32, BASE_HEX,
|
||||
VALS(dplay_spp_length_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_dialect,
|
||||
{ "SuperPackedPlayer dialect version", "dplay.spp.dialect", FT_UINT32, BASE_HEX,
|
||||
VALS(&dplay_proto_dialect_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_sys_player_id,
|
||||
{ "SuperPackedPlayer system player ID", "dplay.spp.sysplayer_id", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_short_name,
|
||||
{ "SuperPackedPlayer short name", "dplay.spp.short_name", FT_STRING, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_long_name,
|
||||
{ "SuperPackedPlayer long name", "dplay.spp.short_name", FT_STRING, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_player_data_length,
|
||||
{ "SuperPackedPlayer player data length", "dplay.spp.pd_length", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_player_data,
|
||||
{ "SuperPackedPlayer player data", "dplay.spp.player_data", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_sp_data_length,
|
||||
{ "SuperPackedPlayer service provider data length", "dplay.spp.sp_data_length", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_sp_data,
|
||||
{ "SuperPackedPlayer service provider data", "dplay.spp.sp_data", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_player_count,
|
||||
{ "SuperPackedPlayer player count", "dplay.spp.player_count", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_player_id,
|
||||
{ "SuperPackedPlayer player ID", "dplay.spp.player_id", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_parent_id,
|
||||
{ "SuperPackedPlayer parent ID", "dplay.spp.parent_id", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_shortcut_count,
|
||||
{ "SuperPackedPlayer shortcut count", "dplay.spp.shortcut_count", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_spp_shortcut_id,
|
||||
{ "SuperPackedPlayer shortcut ID", "dplay.spp.shortcut_id", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
|
||||
/* Data fields for SecDesc struct */
|
||||
{ &hf_dplay_sd_size,
|
||||
{ "SecDesc struct size", "dplay.sd.size", FT_UINT32, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_sd_flags,
|
||||
{ "SecDesc flags", "dplay.sd.flags", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_sd_sspi,
|
||||
{ "SecDesc SSPI provider ptr", "dplay.sd.sspi", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_sd_capi,
|
||||
{ "SecDesc CAPI provider ptr", "dplay.sd.capi", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_sd_capi_type,
|
||||
{ "SecDesc CAPI provider type", "dplay.sd.capi_type", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_sd_enc_alg,
|
||||
{ "SecDesc encryption algorithm" , "dplay.sd.enc_alg", FT_UINT32, BASE_HEX,
|
||||
VALS(dplay_enc_alg_val), 0x0, "", HFILL}},
|
||||
|
||||
/* Data fields for message type 0x0001 */
|
||||
{ &hf_dplay_type_01_name_offset,
|
||||
{ "Enum Session Reply name offset", "dplay.type_01.name_offs", FT_UINT32, BASE_DEC,
|
||||
|
@ -1259,21 +1561,63 @@ void proto_register_dplay()
|
|||
{ &hf_dplay_type_02_game_guid,
|
||||
{ "DirectPlay game GUID", "dplay.type02.game.guid", FT_GUID, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_02_ignored,
|
||||
{ "DirectPlay message type 0x0002 ignored", "dplay.type02.ignored", FT_BYTES, BASE_HEX,
|
||||
{ &hf_dplay_type_02_password_offset,
|
||||
{ "Enum Sessions password offset", "dplay.type02.password_offset", FT_UINT32, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_02_flags,
|
||||
{ "Enum Session flags", "dplay.type02.flags", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_02_password,
|
||||
{ "Session password", "dplay.type02.password", FT_STRING, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_enum_sess_flag_join,
|
||||
{ "Enumerate joinable sessions", "dplay.type02.joinable", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_ENUM_SESS_FLAG_JOIN, "Joinable", HFILL}},
|
||||
{ &hf_enum_sess_flag_all,
|
||||
{ "Enumerate all sessions", "dplay.type02.all", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_ENUM_SESS_FLAG_ALL, "All", HFILL}},
|
||||
{ &hf_enum_sess_flag_passwd,
|
||||
{ "Enumerate sessions requiring a password", "dplay.type02.pw_req", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_ENUM_SESS_FLAG_PASSWD, "Password", HFILL}},
|
||||
|
||||
/* Data fields for message type 0x0005 */
|
||||
{ &hf_dplay_type_05_request,
|
||||
{ "DirectPlay ID request", "dplay.type_05.request", FT_UINT32, BASE_HEX,
|
||||
VALS(dplay_type05_request), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_05_flags,
|
||||
{ "Player ID request flags", "dplay.type_05.flags", FT_UINT32, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_05_system_player,
|
||||
{ "is system player", "dplay.type_05.flags.sys_player", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_TYPE05_FLAG_SYSPLAYER, "", HFILL}},
|
||||
{ &hf_dplay_type_05_name_server,
|
||||
{ "is name server", "dplay.type_05.flags.name_server", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_TYPE05_FLAG_NAMESERVER, "", HFILL}},
|
||||
{ &hf_dplay_type_05_local,
|
||||
{ "is local player", "dplay.type_05.flags.local", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_TYPE05_FLAG_LOCAL, "", HFILL}},
|
||||
{ &hf_dplay_type_05_unknown,
|
||||
{ "unknown", "dplay.type_05.flags.unknown", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_TYPE05_FLAG_UNKNOWN, "", HFILL}},
|
||||
{ &hf_dplay_type_05_secure,
|
||||
{ "is secure session", "dplay.type_05.flags.secure", FT_BOOLEAN, 32,
|
||||
TFS(&tfs_dplay_flag), DPLAY_TYPE05_FLAG_SECURE, "", HFILL}},
|
||||
|
||||
/* Data fields for message type 0x0007 */
|
||||
{ &hf_dplay_type_07_dpid,
|
||||
{ "DirectPlay ID", "dplay.type_07.dpid", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_07_padding,
|
||||
{ "DirectPlay message type 0x0007 padding", "dplay.type_07.padding", FT_BYTES, BASE_HEX,
|
||||
{ &hf_dplay_type_07_sspi_offset,
|
||||
{ "SSPI provider offset", "dplay.type_07.sspi_offset", FT_UINT32, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_07_capi_offset,
|
||||
{ "CAPI provider offset", "dplay.type_07.capi_offset", FT_UINT32, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_07_hresult,
|
||||
{ "Request player HRESULT", "dplay.type_07.hresult", FT_UINT32, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_07_sspi,
|
||||
{ "SSPI provider", "dplay.type_07.sspi", FT_STRING, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_07_capi,
|
||||
{ "CAPI provider", "dplay.type_07.capi", FT_STRING, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
|
||||
/* Data fields for message type 0x0008 */
|
||||
|
@ -1464,140 +1808,32 @@ void proto_register_dplay()
|
|||
NULL, 0x0, "", HFILL}},
|
||||
|
||||
/* Data fields for message type 0x0029 */
|
||||
{ &hf_dplay_type_29_unknown_uint32_01,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 1 (3)", "dplay.type_29.unknown_uint32_01", FT_UINT32,
|
||||
{ &hf_dplay_type_29_player_count,
|
||||
{ "SuperEnumPlayers Reply player count", "dplay.type_29.player_count", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_message_end_type,
|
||||
{ "DirectPlay message type 0x0029 message end type", "dplay.type_29.msg_end_type", FT_UINT32,
|
||||
BASE_DEC, VALS(dplay_type29_end_type), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_03,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 3", "dplay.type_29.unknown_uint32_03", FT_UINT32,
|
||||
{ &hf_dplay_type_29_group_count,
|
||||
{ "SuperEnumPlayers Reply group count", "dplay.type_29.group_count", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_04,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 4 (0)", "dplay.type_29.unknown_uint32_04", FT_UINT32,
|
||||
{ &hf_dplay_type_29_packed_offset,
|
||||
{ "SuperEnumPlayers Reply packed offset", "dplay.type_29.packed_offset", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_05,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 5 (36)", "dplay.type_29.unknown_uint32_05", FT_UINT32,
|
||||
{ &hf_dplay_type_29_shortcut_count,
|
||||
{ "SuperEnumPlayers Reply shortcut count", "dplay.type_29.shortcut_count", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_06,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 6 (116)", "dplay.type_29.unknown_uint32_06", FT_UINT32,
|
||||
{ &hf_dplay_type_29_description_offset,
|
||||
{ "SuperEnumPlayers Reply description offset", "dplay.type_29.desc_offset", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_07,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 7 (0)", "dplay.type_29.unknown_uint32_07", FT_UINT32,
|
||||
{ &hf_dplay_type_29_name_offset,
|
||||
{ "SuperEnumPlayers Reply name offset", "dplay.type_29.name_offset", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_08,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 8 (80)", "dplay.type_29.unknown_uint32_08", FT_UINT32,
|
||||
{ &hf_dplay_type_29_password_offset,
|
||||
{ "SuperEnumPlayers Reply password offset", "dplay.type_29.pass_offset", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_magic_16_bytes,
|
||||
{ "DirectPlay message type 0x0029 magic 16 bytes", "dplay.type_29.magic_16_bytes", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_dpid_1,
|
||||
{ "DirectPlay message type 0x0029 DPID", "dplay.type_29.dpid", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_3,
|
||||
{ "DirectPlay message type 0x0029 unknown 3", "dplay.type_29.unknown_3", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_game_name,
|
||||
{ "DirectPlay message type 0x0029 game name", "dplay.type_29.game_name", FT_STRING, BASE_NONE,
|
||||
{ "SuperEnumPlayers Reply game name", "dplay.type_29.game_name", FT_STRING, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_10,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 10", "dplay.type_29.unknown_uint32_10", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_11,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 11", "dplay.type_29.unknown_uint32_11", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_dpid_2,
|
||||
{ "DirectPlay message type 0x0029 DPID", "dplay.type_29.dpid", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_12,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 12 (4)", "dplay.type_29.unknown_uint32_12", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_13,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 13 (14)", "dplay.type_29.unknown_uint32_13", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_field_len_1,
|
||||
{ "DirectPlay message type 0x0029 saddr field len 1", "dplay.type_29.saddr_field_len_1", FT_UINT8,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_af_1,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in address family 1", "dplay.type_29.saddr.af_1", FT_UINT16,
|
||||
BASE_DEC, VALS(dplay_af_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_port_1,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in port 1", "dplay.type_29.saddr.port_1", FT_UINT16, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_ip_1,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in ip 1", "dplay.type_29.saddr.ip_1", FT_IPv4, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_padd_1,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in padding 1", "dplay.type_29.saddr.padd_1", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_af_2,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in address family 2", "dplay.type_29.saddr.af_2", FT_UINT16,
|
||||
BASE_DEC, VALS(dplay_af_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_port_2,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in port 2", "dplay.type_29.saddr.port_2", FT_UINT16, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_ip_2,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in ip 2", "dplay.type_29.saddr.ip_2", FT_IPv4, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_padd_2,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in padding 2", "dplay.type_29.saddr.padd_2", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_14,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 14 (16)", "dplay.type_29.unknown_uint32_14", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_15,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 15 (15)", "dplay.type_29.unknown_uint32_15", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_dpid_3,
|
||||
{ "DirectPlay message type 0x0029 DPID", "dplay.type_29.dpid", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_16,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 16 (4)", "dplay.type_29.unknown_uint32_16", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_17,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 17 (14)", "dplay.type_29.unknown_uint32_17", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_field_len_2,
|
||||
{ "DirectPlay message type 0x0029 saddr field len 2", "dplay.type_29.saddr_field_len_2", FT_UINT8,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_af_3,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in address family 3", "dplay.type_29.saddr.af_3", FT_UINT16,
|
||||
BASE_DEC, VALS(dplay_af_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_port_3,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in port 3", "dplay.type_29.saddr.port_3", FT_UINT16, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_ip_3,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in ip 3", "dplay.type_29.saddr.ip_3", FT_IPv4, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_padd_3,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in padding 3", "dplay.type_29.saddr.padd_3", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_af_4,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in address family 4", "dplay.type_29.saddr.af_4", FT_UINT16,
|
||||
BASE_DEC, VALS(dplay_af_val), 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_port_4,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in port 4", "dplay.type_29.saddr.port_4", FT_UINT16, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_ip_4,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in ip 4", "dplay.type_29.saddr.ip42", FT_IPv4, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_saddr_padd_4,
|
||||
{ "DirectPlay message type 0x0029 s_addr_in padding 4", "dplay.type_29.saddr.padd_4", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_18,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 18 (16)", "dplay.type_29.unknown_uint32_18", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_19,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 19 (15)", "dplay.type_29.unknown_uint32_19", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_dpid_4,
|
||||
{ "DirectPlay message type 0x0029 DPID", "dplay.type_29.dpid_4", FT_BYTES, BASE_HEX,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_unknown_uint32_20,
|
||||
{ "DirectPlay message type 0x0029 unknown uint32 20", "dplay.type_29.unknown_uint32_20", FT_UINT32,
|
||||
BASE_DEC, NULL, 0x0, "", HFILL}},
|
||||
{ &hf_dplay_type_29_dpid_5,
|
||||
{ "DirectPlay message type 0x0029 DPID", "dplay.type_29.dpid_5", FT_BYTES, BASE_HEX,
|
||||
{ &hf_dplay_type_29_password,
|
||||
{ "SuperEnumPlayers Reply Password", "dplay.type_29.password", FT_STRING, BASE_NONE,
|
||||
NULL, 0x0, "", HFILL}},
|
||||
|
||||
/* Data fields for message type 0x002e */
|
||||
|
@ -1732,14 +1968,15 @@ void proto_register_dplay()
|
|||
&ett_dplay_flags,
|
||||
&ett_dplay_enc_packet,
|
||||
&ett_dplay_sess_desc_flags,
|
||||
&ett_dplay_spp_flags,
|
||||
&ett_dplay_spp_info_mask,
|
||||
&ett_dplay_type02_flags,
|
||||
&ett_dplay_type05_flags,
|
||||
&ett_dplay_type08_saddr1,
|
||||
&ett_dplay_type08_saddr2,
|
||||
&ett_dplay_type13_saddr1,
|
||||
&ett_dplay_type13_saddr2,
|
||||
&ett_dplay_type29_saddr1,
|
||||
&ett_dplay_type29_saddr2,
|
||||
&ett_dplay_type29_saddr3,
|
||||
&ett_dplay_type29_saddr4,
|
||||
&ett_dplay_type29_spp,
|
||||
&ett_dplay_type2e_saddr1,
|
||||
&ett_dplay_type2e_saddr2,
|
||||
&ett_dplay_type38_saddr1,
|
||||
|
|
Loading…
Reference in New Issue