diff options
author | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2008-02-03 23:04:04 +0000 |
---|---|---|
committer | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2008-02-03 23:04:04 +0000 |
commit | 0c700edaba47a6b388089494d644c4ca85b248d1 (patch) | |
tree | 5ecc7a884593cef035b479f2a3ffcf8e00b656c1 /epan | |
parent | ef625890aab324946c97dfa26357049e3377c25a (diff) | |
download | wireshark-0c700edaba47a6b388089494d644c4ca85b248d1.tar.gz |
Add mapping for s1ap_r8.
svn path=/trunk/; revision=24264
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-catapult-dct2000.c | 79 |
1 files changed, 50 insertions, 29 deletions
diff --git a/epan/dissectors/packet-catapult-dct2000.c b/epan/dissectors/packet-catapult-dct2000.c index 8e6a097679..e036b47bc6 100644 --- a/epan/dissectors/packet-catapult-dct2000.c +++ b/epan/dissectors/packet-catapult-dct2000.c @@ -327,7 +327,6 @@ static gboolean find_sctpprim_variant1_data_offset(tvbuff_t *tvb, int *data_offs offset += 2; continue; - case 0x09: /* ipv4Address */ *dest_addr_offset = offset; *dest_addr_length = 4; @@ -371,6 +370,7 @@ static gboolean find_sctpprim_variant3_data_offset(tvbuff_t *tvb, int *data_offs case 0x0400: /* SendDataReq */ case 0x6200: /* DataInd */ break; + default: return FALSE; } @@ -378,7 +378,6 @@ static gboolean find_sctpprim_variant3_data_offset(tvbuff_t *tvb, int *data_offs /* Overall length field is next 2 bytes */ offset += 2; - /* Rx/Tx ops have different formats */ /*****************/ @@ -555,10 +554,11 @@ static gboolean find_sctpprim_variant3_data_offset(tvbuff_t *tvb, int *data_offs -/* Look up dissector by protocol name. Fix up known name mis-matches. */ +/* Look up dissector by protocol name. Fix up known name mis-matches. + This includes exact matches and prefixes (e.g. "diameter_rx" -> "diameter") */ dissector_handle_t look_for_dissector(char *protocol_name) { - /* Use known aliases... */ + /* Use known aliases and protocol name prefixes */ if (strcmp(protocol_name, "tbcp") == 0) { return find_dissector("rtcp"); @@ -623,11 +623,15 @@ dissector_handle_t look_for_dissector(char *protocol_name) return find_dissector("sabp"); } else - if (strncmp(protocol_name, "wtp", strlen("wtp")) == 0) + if (strcmp(protocol_name, "wtp") == 0) { return find_dissector("wtp-udp"); } - + else + if (strncmp(protocol_name, "s1ap", strlen("s1ap")) == 0) + { + return find_dissector("s1ap"); + } /* Try for an exact match */ else @@ -719,6 +723,8 @@ void attach_fp_info(packet_info *pinfo, gboolean received, const char *protocol_ } else { + /* Really shouldn't get here */ + DISSECTOR_ASSERT_NOT_REACHED(); return; } @@ -924,44 +930,54 @@ dissect_catapult_dct2000(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* Context Name */ context_length = tvb_strsize(tvb, offset); - proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_context, tvb, - offset, context_length, FALSE); + if (dct2000_tree) { + proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_context, tvb, + offset, context_length, FALSE); + } offset += context_length; /* Context port number */ port_number = tvb_get_guint8(tvb, offset); - proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_port_number, tvb, + if (dct2000_tree) { + proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_port_number, tvb, offset, 1, FALSE); + } offset++; /* Timestamp in file */ timestamp_start = offset; timestamp_length = tvb_strsize(tvb, offset); - proto_tree_add_double_format_value(dct2000_tree, hf_catapult_dct2000_timestamp, tvb, - offset, timestamp_length, - atof(tvb_format_text(tvb, offset, timestamp_length)), - "%s", tvb_format_text(tvb, offset, timestamp_length-1)); + if (dct2000_tree) { + proto_tree_add_double_format_value(dct2000_tree, hf_catapult_dct2000_timestamp, tvb, + offset, timestamp_length, + atof(tvb_format_text(tvb, offset, timestamp_length)), + "%s", tvb_format_text(tvb, offset, timestamp_length-1)); + } offset += timestamp_length; /* DCT2000 protocol name */ protocol_start = offset; protocol_length = tvb_strsize(tvb, offset); - proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_protocol, tvb, - offset, protocol_length, FALSE); + if (dct2000_tree) { + proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_protocol, tvb, + offset, protocol_length, FALSE); + } offset += protocol_length; /* Protocol Variant */ variant_start = offset; variant_length = tvb_strsize(tvb, offset); - proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_variant, tvb, - offset, variant_length, FALSE); + if (dct2000_tree) { + proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_variant, tvb, + offset, variant_length, FALSE); + } offset += variant_length; /* Outhdr (shown as string) */ outhdr_start = offset; outhdr_length = tvb_strsize(tvb, offset); - if (outhdr_length > 1) + if ((outhdr_length > 1) && dct2000_tree) { proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_outhdr, tvb, offset, outhdr_length, FALSE); @@ -971,16 +987,20 @@ dissect_catapult_dct2000(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* Direction */ direction = tvb_get_guint8(tvb, offset); - proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_direction, tvb, - offset, 1, FALSE); + if (dct2000_tree) { + proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_direction, tvb, + offset, 1, FALSE); + } offset++; /* Read frame encapsulation set by wiretap */ - proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_encap, tvb, offset, 1, FALSE); + if (dct2000_tree) { + proto_tree_add_item(dct2000_tree, hf_catapult_dct2000_encap, tvb, offset, 1, FALSE); + } encap = tvb_get_guint8(tvb, offset); offset++; - if (tree) + if (dct2000_tree) { /* Set selection length of dct2000 tree */ proto_item_set_len(dct2000_tree, offset); @@ -1391,7 +1411,6 @@ dissect_catapult_dct2000(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) break; - default: /* !! If get here, there is a mismatch between this dissector and the wiretap module catapult_dct2000.c !! @@ -1401,7 +1420,7 @@ dissect_catapult_dct2000(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } - /* Try appropriate dissector, if selected */ + /* Try appropriate dissector, if one has been selected */ if (protocol_handle != 0) { /* Dissect the remainder of the frame using chosen protocol handle */ @@ -1435,10 +1454,12 @@ dissect_catapult_dct2000(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) else { /* Show number of dissected bytes */ - proto_item *ti = proto_tree_add_uint(dct2000_tree, - hf_catapult_dct2000_dissected_length, - tvb, 0, 0, tvb_reported_length(tvb)-offset); - PROTO_ITEM_SET_GENERATED(ti); + if (dct2000_tree) { + proto_item *ti = proto_tree_add_uint(dct2000_tree, + hf_catapult_dct2000_dissected_length, + tvb, 0, 0, tvb_reported_length(tvb)-offset); + PROTO_ITEM_SET_GENERATED(ti); + } } } @@ -1603,7 +1624,7 @@ void proto_register_catapult_dct2000(void) { &hf_catapult_dct2000_ipprim_conn_id, { "Conn Id", "dct2000.ipprim.conn-id", FT_UINT16, BASE_DEC, NULL, 0x0, - "IPPrim Connection ID", HFILL + "IPPrim TCP Connection ID", HFILL } }, |