diff options
author | Michael Mann <mmann78@netscape.net> | 2013-09-01 13:05:27 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-09-01 13:05:27 +0000 |
commit | e597acdc4827ef62bc9597fdd248366411533a36 (patch) | |
tree | 623ebd116586704afd1eeb6ccdeb733b78b014d9 /epan/dissectors/packet-etv.c | |
parent | 7dbc052d782ae6e186262e7db68e2e90b5a3cc9b (diff) |
Batch of filterable expert info.
svn path=/trunk/; revision=51625
Diffstat (limited to 'epan/dissectors/packet-etv.c')
-rw-r--r-- | epan/dissectors/packet-etv.c | 62 |
1 files changed, 47 insertions, 15 deletions
diff --git a/epan/dissectors/packet-etv.c b/epan/dissectors/packet-etv.c index b3cb08819c..0cf8a68101 100644 --- a/epan/dissectors/packet-etv.c +++ b/epan/dissectors/packet-etv.c @@ -44,9 +44,19 @@ static dissector_handle_t dsmcc_handle; static int hf_etv_dii_filter_info = -1; static int hf_etv_dii_reserved = -1; +static expert_field ei_etv_dii_invalid_section_syntax_indicator = EI_INIT; +static expert_field ei_etv_dii_invalid_section_length = EI_INIT; +static expert_field ei_etv_dii_invalid_reserved_bits = EI_INIT; +static expert_field ei_etv_dii_filter_info = EI_INIT; + static int hf_etv_ddb_filter_info = -1; static int hf_etv_ddb_reserved = -1; +static expert_field ei_etv_ddb_invalid_section_syntax_indicator = EI_INIT; +static expert_field ei_etv_ddb_invalid_section_length = EI_INIT; +static expert_field ei_etv_ddb_invalid_reserved_bits = EI_INIT; +static expert_field ei_etv_ddb_filter_info = EI_INIT; + static gint ett_etv = -1; static gint ett_etv_payload = -1; @@ -55,7 +65,9 @@ static gint ett_etv_payload = -1; static void dissect_etv_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int proto, - int hf_filter_info, int hf_reserved ) + int hf_filter_info, int hf_reserved, + expert_field* ei_section_syntax_indicator, expert_field* ei_reserved, + expert_field* ei_section_length, expert_field* ei_filter_info) { tvbuff_t *sub_tvb; guint offset = 0; @@ -80,8 +92,7 @@ dissect_etv_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int prot msg_error = items[PACKET_MPEG_SECT_PI__SSI]; PROTO_ITEM_SET_GENERATED(msg_error); - expert_add_info_format(pinfo, msg_error, PI_MALFORMED, PI_ERROR, - "Invalid section_syntax_indicator (should be 0)"); + expert_add_info(pinfo, msg_error, ei_section_syntax_indicator); } if (4 != reserved) { @@ -89,8 +100,7 @@ dissect_etv_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int prot msg_error = items[PACKET_MPEG_SECT_PI__RESERVED]; PROTO_ITEM_SET_GENERATED(msg_error); - expert_add_info_format(pinfo, msg_error, PI_MALFORMED, PI_ERROR, - "Invalid reserved1 bits (should all be 100)"); + expert_add_info(pinfo, msg_error, ei_reserved); } col_append_fstr(pinfo->cinfo, COL_INFO, ", Length: %u", sect_len); @@ -100,8 +110,7 @@ dissect_etv_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int prot msg_error = items[PACKET_MPEG_SECT_PI__LENGTH]; PROTO_ITEM_SET_GENERATED(msg_error); - expert_add_info_format(pinfo, msg_error, PI_MALFORMED, PI_ERROR, - "Invalid section_length (must not exceed 1021)"); + expert_add_info(pinfo, msg_error, ei_section_length); } filter_info = tvb_get_ntohs(tvb, offset); @@ -109,14 +118,12 @@ dissect_etv_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int prot proto_item_append_text(ti, " Filter=0x%x", filter_info); pi = proto_tree_add_item(etv_tree, hf_filter_info, tvb, offset, 2, ENC_BIG_ENDIAN); if ((proto_etv_dii == proto) && (0xFBFB != filter_info)) { - PROTO_ITEM_SET_GENERATED(pi); - expert_add_info_format(pinfo, pi, PI_MALFORMED, PI_ERROR, + expert_add_info_format_text(pinfo, pi, ei_filter_info, "Invalid filter_info value (must be 0xFBFB)"); } else if ((proto_etv_ddb == proto) && ((filter_info < 1) || (0xfbef < filter_info))) { - PROTO_ITEM_SET_GENERATED(pi); - expert_add_info_format(pinfo, pi, PI_MALFORMED, PI_ERROR, + expert_add_info_format_text(pinfo, pi, ei_filter_info, "Invalid filter_info value (must be [0x0001-0xFBEF] inclusive)"); } offset += 2; @@ -124,8 +131,7 @@ dissect_etv_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int prot reserved2 = tvb_get_guint8(tvb, offset); pi = proto_tree_add_item(etv_tree, hf_reserved, tvb, offset, 1, ENC_BIG_ENDIAN); if (0 != reserved2) { - PROTO_ITEM_SET_GENERATED(pi); - expert_add_info_format(pinfo, pi, PI_MALFORMED, PI_ERROR, + expert_add_info_format_text(pinfo, pi, ei_reserved, "Invalid reserved2 bits (should all be 0)"); } offset += 1; @@ -144,8 +150,11 @@ dissect_etv_ddb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { col_set_str(pinfo->cinfo, COL_PROTOCOL, "ETV-DDB"); col_set_str(pinfo->cinfo, COL_INFO, "ETV DDB"); + dissect_etv_common(tvb, pinfo, tree, proto_etv_ddb, hf_etv_ddb_filter_info, - hf_etv_ddb_reserved); + hf_etv_ddb_reserved, &ei_etv_ddb_invalid_section_syntax_indicator, + &ei_etv_ddb_invalid_reserved_bits, &ei_etv_ddb_invalid_section_length, + &ei_etv_ddb_filter_info); } @@ -155,7 +164,9 @@ dissect_etv_dii(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) col_set_str(pinfo->cinfo, COL_PROTOCOL, "ETV-DII"); col_set_str(pinfo->cinfo, COL_INFO, "ETV DII"); dissect_etv_common(tvb, pinfo, tree, proto_etv_dii, hf_etv_dii_filter_info, - hf_etv_dii_reserved); + hf_etv_dii_reserved, &ei_etv_dii_invalid_section_syntax_indicator, + &ei_etv_dii_invalid_reserved_bits, &ei_etv_dii_invalid_section_length, + &ei_etv_dii_filter_info); } @@ -191,12 +202,33 @@ proto_register_etv(void) &ett_etv_payload }; + static ei_register_info ei_ddb[] = { + { &ei_etv_ddb_invalid_section_syntax_indicator, { "etv-ddb.invalid_section_syntax_indicator", PI_MALFORMED, PI_ERROR, "Invalid section_syntax_indicator (should be 0)", EXPFILL }}, + { &ei_etv_ddb_invalid_reserved_bits, { "etv-ddb.invalid_reserved_bits", PI_MALFORMED, PI_ERROR, "Invalid reserved bits", EXPFILL }}, + { &ei_etv_ddb_invalid_section_length, { "etv-ddb.invalid_section_length", PI_MALFORMED, PI_ERROR, "Invalid section_length (must not exceed 1021)", EXPFILL }}, + { &ei_etv_ddb_filter_info, { "etv-ddb.filter_info.invalid", PI_MALFORMED, PI_ERROR, "Invalid filter info", EXPFILL }}, + }; + + static ei_register_info ei_dii[] = { + { &ei_etv_dii_invalid_section_syntax_indicator, { "etv-dii.invalid_section_syntax_indicator", PI_MALFORMED, PI_ERROR, "Invalid section_syntax_indicator (should be 0)", EXPFILL }}, + { &ei_etv_dii_invalid_reserved_bits, { "etv-dii.invalid_reserved_bits", PI_MALFORMED, PI_ERROR, "Invalid reserved bits", EXPFILL }}, + { &ei_etv_dii_invalid_section_length, { "etv-dii.invalid_section_length", PI_MALFORMED, PI_ERROR, "Invalid section_length (must not exceed 1021)", EXPFILL }}, + { &ei_etv_dii_filter_info, { "etv-dii.filter_info.invalid", PI_MALFORMED, PI_ERROR, "Invalid filter info", EXPFILL }}, + }; + + expert_module_t* expert_etv_dii; + expert_module_t* expert_etv_ddb; + proto_etv_dii = proto_register_protocol("ETV-AM DII Section", "ETV-AM DII", "etv-dii"); proto_etv_ddb = proto_register_protocol("ETV-AM DDB Section", "ETV-AM DDB", "etv-ddb"); proto_register_field_array(proto_etv_dii, hf_dii, array_length(hf_dii)); proto_register_field_array(proto_etv_ddb, hf_ddb, array_length(hf_ddb)); proto_register_subtree_array(ett, array_length(ett)); + expert_etv_dii = expert_register_protocol(proto_etv_dii); + expert_register_field_array(expert_etv_dii, ei_dii, array_length(ei_dii)); + expert_etv_ddb = expert_register_protocol(proto_etv_ddb); + expert_register_field_array(expert_etv_ddb, ei_ddb, array_length(ei_ddb)); } |