aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-per.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2015-09-01 22:14:47 -0400
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2015-09-02 05:15:41 +0000
commit59453fb54bc9277926d7156c60e25571e59006d2 (patch)
tree97c20c038ebb5d1cb8896ee806c97db750169333 /epan/dissectors/packet-per.c
parentc41a833d0342261bb5817305bf6be40bb8624163 (diff)
Eliminate proto_tree_add_text from packet-per.c
Change-Id: I67f572129821fb00e4478a30bfd4a52287b8b1a1 Reviewed-on: https://code.wireshark.org/review/10350 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-per.c')
-rw-r--r--epan/dissectors/packet-per.c65
1 files changed, 56 insertions, 9 deletions
diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c
index 35b2e4028f..9248dc8b05 100644
--- a/epan/dissectors/packet-per.c
+++ b/epan/dissectors/packet-per.c
@@ -68,6 +68,11 @@ static int hf_per_octet_aligned = -1; /* T_octet_aligned */
static int hf_per_arbitrary = -1; /* T_arbitrary */
static int hf_per_integer_length = -1; /* Show integer length if "show internal per fields" */
/* static int hf_per_debug_pos = -1; */
+static int hf_per_internal_range = -1;
+static int hf_per_internal_num_bits = -1;
+static int hf_per_internal_bitstring = -1;
+static int hf_per_internal_min = -1;
+static int hf_per_internal_value = -1;
static gint ett_per_open_type = -1;
static gint ett_per_containing = -1;
@@ -83,6 +88,10 @@ static expert_field ei_per_sequence_extension_unknown = EI_INIT;
static expert_field ei_per_encoding_error = EI_INIT;
static expert_field ei_per_oid_not_implemented = EI_INIT;
static expert_field ei_per_undecoded = EI_INIT;
+static expert_field ei_per_field_not_integer = EI_INIT;
+static expert_field ei_per_external_type = EI_INIT;
+static expert_field ei_per_open_type = EI_INIT;
+static expert_field ei_per_dissect_per_constrained_sequence_of = EI_INIT;
static dissector_table_t per_oid_dissector_table = NULL;
@@ -239,7 +248,7 @@ dissect_per_open_type_internal(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx,
break;
}
} else {
- actx->created_item = proto_tree_add_text(tree, tvb, offset>>3, BLEN(offset, end_offset), "Unknown Open Type");
+ actx->created_item = proto_tree_add_expert(tree, actx->pinfo, &ei_per_open_type, tvb, offset>>3, BLEN(offset, end_offset));
}
return end_offset;
@@ -867,7 +876,7 @@ DEBUG_ENTRY("dissect_per_constrained_sequence_of");
* followed by the component values
* TODO: Handle extension
*/
- proto_tree_add_text(parent_tree, tvb, (offset>>3), 1, "dissect_per_constrained_sequence_of with extension is not handled");
+ proto_tree_add_expert(parent_tree, actx->pinfo, &ei_per_dissect_per_constrained_sequence_of, tvb, (offset>>3), 1);
}
}
@@ -1108,7 +1117,8 @@ dissect_per_integer(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree
} else if (IS_FT_UINT(hfi->type)) {
it=proto_tree_add_uint(tree, hf_index, tvb, (offset>>3)-(length+1), length+1, val);
} else {
- proto_tree_add_text(tree, tvb, (offset>>3)-(length+1), length+1, "Field is not an integer: %s", hfi->abbrev);
+ proto_tree_add_expert_format(tree, actx->pinfo, &ei_per_field_not_integer, tvb, (offset>>3)-(length+1), length+1,
+ "Field is not an integer: %s", hfi->abbrev);
REPORT_DISSECTOR_BUG("PER integer field that's not an FT_INT* or FT_UINT*");
}
@@ -1161,7 +1171,8 @@ dissect_per_integer64b(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tr
} else if (IS_FT_UINT(hfi->type)) {
it=proto_tree_add_uint64(tree, hf_index, tvb, (offset>>3)-(length+1), length+1, val);
} else {
- proto_tree_add_text(tree, tvb, (offset>>3)-(length+1), length+1, "Field is not an integer: %s", hfi->abbrev);
+ proto_tree_add_expert_format(tree, actx->pinfo, &ei_per_field_not_integer, tvb, (offset>>3)-(length+1), length+1,
+ "Field is not an integer: %s", hfi->abbrev);
REPORT_DISSECTOR_BUG("PER integer field that's not an FT_INT* or FT_UINT*");
}
@@ -1285,7 +1296,11 @@ DEBUG_ENTRY("dissect_per_constrained_integer");
if (display_internal_per_fields){
str = decode_bits_in_field((offset&0x07),num_bits,val);
- proto_tree_add_text(tree, tvb, val_start,val_length,"MIN %u Range = %u Bitfield length %u, %s: %s value: %u",min, range, num_bits, hfi->name, str, val+min);
+ proto_tree_add_uint(tree, hf_per_internal_min, tvb, val_start,val_length, min);
+ proto_tree_add_uint64(tree, hf_per_internal_range, tvb, val_start, val_length, range);
+ proto_tree_add_uint(tree, hf_per_internal_num_bits, tvb, val_start, val_length, num_bits);
+ proto_tree_add_string(tree, hf_per_internal_bitstring, tvb, val_start, val_length, str);
+ proto_tree_add_uint_format(tree, hf_per_internal_value, tvb, val_start, val_length, val+min, "%s: value: %u", hfi->name, val+min);
}
/* The actual value */
val+=min;
@@ -1484,8 +1499,11 @@ DEBUG_ENTRY("dissect_per_constrained_integer_64b");
str[str_index] = '\0'; /* Terminate string */
val_start = (offset-num_bits)>>3; val_length = length;
val+=min;
- if (display_internal_per_fields)
- proto_tree_add_text(tree, tvb, val_start,val_length,"Range = (%" G_GINT64_MODIFIER "u) Bitfield length %u, %s",range, num_bits, str);
+ if (display_internal_per_fields) {
+ proto_tree_add_uint64(tree, hf_per_internal_range, tvb, val_start, val_length, range);
+ proto_tree_add_uint(tree, hf_per_internal_num_bits, tvb, val_start,val_length, num_bits);
+ proto_tree_add_string(tree, hf_per_internal_bitstring, tvb, val_start, val_length, str);
+ }
} else if(range==256){
/* 10.5.7.2 */
@@ -2468,7 +2486,7 @@ dissect_per_T_octet_aligned(tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_t
if (actx->external.u.per.type_cb) {
actx->external.u.per.type_cb(actx->external.octet_aligned, 0, actx, tree, actx->external.hf_index);
} else {
- actx->created_item = proto_tree_add_text(tree, actx->external.octet_aligned, 0, -1, "Unknown EXTERNAL Type");
+ actx->created_item = proto_tree_add_expert(tree, actx->pinfo, &ei_per_external_type, actx->external.octet_aligned, 0, -1);
}
}
return offset;
@@ -2485,7 +2503,7 @@ dissect_per_T_arbitrary(tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree
if (actx->external.u.per.type_cb) {
actx->external.u.per.type_cb(actx->external.arbitrary, 0, actx, tree, actx->external.hf_index);
} else {
- actx->created_item = proto_tree_add_text(tree, actx->external.arbitrary, 0, -1, "Unknown EXTERNAL Type");
+ actx->created_item = proto_tree_add_expert(tree, actx->pinfo, &ei_per_external_type, actx->external.arbitrary, 0, -1);
}
}
return offset;
@@ -2680,7 +2698,28 @@ proto_register_per(void)
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
#endif
+ { &hf_per_internal_range,
+ { "Range", "per.internal.range",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_per_internal_num_bits,
+ { "Bitfield length", "per.internal.num_bits",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_per_internal_bitstring,
+ { "arbitrary", "per.internal.bitstring",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_per_internal_min,
+ { "MIN", "per.internal.min",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_per_internal_value,
+ { "Value", "per.internal.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
};
+
static gint *ett[] = {
&ett_per_open_type,
&ett_per_containing,
@@ -2705,6 +2744,14 @@ proto_register_per(void)
{ "per.error.oid_not_implemented", PI_UNDECODED, PI_WARN, "PER: Dissector for OID not implemented. Contact Wireshark developers if you want this supported", EXPFILL }},
{ &ei_per_undecoded,
{ "per.error.undecoded", PI_UNDECODED, PI_WARN, "PER: Something unknown here", EXPFILL }},
+ { &ei_per_field_not_integer,
+ { "per.field_not_integer", PI_PROTOCOL, PI_ERROR, "Field is not an integer", EXPFILL }},
+ { &ei_per_external_type,
+ { "per.external_type.unknown", PI_PROTOCOL, PI_WARN, "Unknown EXTERNAL Type", EXPFILL }},
+ { &ei_per_open_type,
+ { "per.open_type.unknown", PI_PROTOCOL, PI_WARN, "Unknown Open Type", EXPFILL }},
+ { &ei_per_dissect_per_constrained_sequence_of,
+ { "per.dissect_per_constrained_sequence_of", PI_UNDECODED, PI_WARN, "dissect_per_constrained_sequence_of with extension is not handled", EXPFILL }},
};
module_t *per_module;