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:
parent
c6289587ed
commit
f86358dc69
|
@ -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),
|
||||||
|
|
Loading…
Reference in New Issue