The packet id seems to be only 16 bits. The "extra" 4 bits

may be a subtype or additional information for the type.

svn path=/trunk/; revision=44415
This commit is contained in:
Jörg Mayer 2012-08-10 08:08:50 +00:00
parent c6289587ed
commit f86358dc69
1 changed files with 27 additions and 17 deletions

View File

@ -51,12 +51,13 @@ static int proto_skype = -1;
/* ett handles */ /* ett handles */
static int ett_skype = -1; static int ett_skype = -1;
#define SKYPE_SOM_TYPE_MASK 0x00000F #define SKYPE_SOM_UNK_MASK 0xF0
#define SKYPE_SOM_ID_MASK 0xFFFFF0 #define SKYPE_SOM_TYPE_MASK 0x0F
/* hf elements */ /* hf elements */
/* Start of Message */ /* Start of Message */
static int hf_skype_som_id = -1; static int hf_skype_som_id = -1;
static int hf_skype_som_unk = -1;
static int hf_skype_som_type = -1; static int hf_skype_som_type = -1;
/* Message body */ /* Message body */
/* Payload */ /* Payload */
@ -95,7 +96,7 @@ typedef enum {
SKYPE_TYPE_NAT_INFO = 5, SKYPE_TYPE_NAT_INFO = 5,
SKYPE_TYPE_NAT_REPEAT = 7, SKYPE_TYPE_NAT_REPEAT = 7,
SKYPE_TYPE_AUDIO = 0xd, SKYPE_TYPE_AUDIO = 0xd,
SKYPE_TYPE_UNKNOWN = 0xf, SKYPE_TYPE_UNKNOWN_F = 0xf,
} skype_type_t; } skype_type_t;
@ -105,7 +106,7 @@ static const value_string skype_type_vals[] = {
{ SKYPE_TYPE_NAT_INFO , "NAT info" }, { SKYPE_TYPE_NAT_INFO , "NAT info" },
{ SKYPE_TYPE_NAT_REPEAT,"NAT repeat" }, { SKYPE_TYPE_NAT_REPEAT,"NAT repeat" },
{ SKYPE_TYPE_AUDIO, "Audio" }, { SKYPE_TYPE_AUDIO, "Audio" },
{ SKYPE_TYPE_UNKNOWN , "Unknown" }, { SKYPE_TYPE_UNKNOWN_F, "Unknown_F" },
{ 0, NULL } { 0, NULL }
}; };
@ -117,17 +118,19 @@ dissect_skype(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree *skype_tree = NULL; proto_tree *skype_tree = NULL;
guint32 offset = 0; guint32 offset = 0;
guint32 packet_length; guint32 packet_length;
guint8 packet_type; guint8 packet_type, packet_unk;
packet_type = tvb_get_guint8(tvb, 2) & SKYPE_SOM_TYPE_MASK; packet_type = tvb_get_guint8(tvb, 2) & SKYPE_SOM_TYPE_MASK;
packet_unk = (tvb_get_guint8(tvb, 2) & SKYPE_SOM_UNK_MASK) >> 4;
packet_length = tvb_length(tvb); packet_length = tvb_length(tvb);
if (check_col(pinfo->cinfo, COL_PROTOCOL)) col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_SHORT_NAME);
col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_SHORT_NAME); col_add_str(pinfo->cinfo, COL_INFO, val_to_str(packet_type,
if (check_col(pinfo->cinfo, COL_INFO)) skype_type_vals, "Type 0x%1x"));
col_add_str(pinfo->cinfo, COL_INFO, val_to_str(packet_type, if (packet_unk) {
skype_type_vals, "Type 0x%02x")); col_append_fstr(pinfo->cinfo, COL_INFO, " Unk: %1x", packet_unk);
}
if (tree) { if (tree) {
/* Start of message dissection */ /* Start of message dissection */
@ -135,11 +138,14 @@ dissect_skype(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
ENC_NA); ENC_NA);
skype_tree = proto_item_add_subtree(ti, ett_skype); skype_tree = proto_item_add_subtree(ti, ett_skype);
proto_tree_add_item(skype_tree, hf_skype_som_id, tvb, offset, 3, proto_tree_add_item(skype_tree, hf_skype_som_id, tvb, offset, 2,
ENC_BIG_ENDIAN); ENC_BIG_ENDIAN);
proto_tree_add_item(skype_tree, hf_skype_som_type, tvb, offset, 3, offset += 2;
ENC_BIG_ENDIAN); proto_tree_add_item(skype_tree, hf_skype_som_unk, tvb, offset, 1,
offset += 3; ENC_NA);
proto_tree_add_item(skype_tree, hf_skype_som_type, tvb, offset, 1,
ENC_NA);
offset += 1;
/* Body dissection */ /* Body dissection */
switch (packet_type) { switch (packet_type) {
@ -193,7 +199,7 @@ dissect_skype(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
ENC_NA); ENC_NA);
offset = packet_length; offset = packet_length;
break; break;
case SKYPE_TYPE_UNKNOWN: case SKYPE_TYPE_UNKNOWN_F:
proto_tree_add_item(skype_tree, hf_skype_unknown_f_unk1, tvb, offset, -1, proto_tree_add_item(skype_tree, hf_skype_unknown_f_unk1, tvb, offset, -1,
ENC_NA); ENC_NA);
offset = packet_length; offset = packet_length;
@ -255,8 +261,12 @@ proto_register_skype(void)
/* Start of message fields */ /* Start of message fields */
{ &hf_skype_som_id, { &hf_skype_som_id,
{ "ID", "skype.som.id", FT_UINT24, BASE_HEX, NULL, { "ID", "skype.som.id", FT_UINT16, BASE_HEX, NULL,
SKYPE_SOM_ID_MASK, "Message ID", HFILL }}, 0x0, "Message ID", HFILL }},
{ &hf_skype_som_unk,
{ "Unknown", "skype.som.unk", FT_UINT8, BASE_HEX, NULL,
SKYPE_SOM_UNK_MASK, NULL, HFILL }},
{ &hf_skype_som_type, { &hf_skype_som_type,
{ "Type", "skype.som.type", FT_UINT8, BASE_HEX, VALS(skype_type_vals), { "Type", "skype.som.type", FT_UINT8, BASE_HEX, VALS(skype_type_vals),