From cd02af56a1e39c66b44fd7957aff3b7b77a59e9d Mon Sep 17 00:00:00 2001 From: Michael Mann Date: Fri, 8 Aug 2014 09:19:29 -0400 Subject: Eliminate (almost all) proto_tree_add_text calls from ASN.1 dissectors. This mostly involved adding expert info capabilities to many of the dissectors so that they could correctly flag error conditions. Only remaining proto_tree_add_text calls are in H248.cnf, which has a convoluted way of using hf_ data to make its tree. Change-Id: I6412150c2ec1977d7fa38f3f0ed416680bdfb141 Reviewed-on: https://code.wireshark.org/review/3500 Petri-Dish: Michael Mann Reviewed-by: Michael Mann --- asn1/acse/packet-acse-template.c | 18 ++- asn1/ansi_map/packet-ansi_map-template.c | 76 ++++++++---- asn1/ansi_tcap/packet-ansi_tcap-template.c | 18 ++- asn1/atn-ulcs/packet-atn-ulcs-template.c | 15 ++- asn1/charging_ase/charging_ase.cnf | 2 +- asn1/charging_ase/packet-charging_ase-template.c | 11 ++ asn1/cmip/packet-cmip-template.c | 16 ++- asn1/dap/dap.cnf | 2 +- asn1/dap/packet-dap-template.c | 11 ++ asn1/disp/packet-disp-template.c | 33 +++-- asn1/dop/packet-dop-template.c | 24 ++-- asn1/dsp/packet-dsp-template.c | 28 ++++- asn1/ftam/packet-ftam-template.c | 12 +- asn1/goose/packet-goose-template.c | 4 +- asn1/gprscdr/gprscdr.cnf | 2 +- asn1/gprscdr/packet-gprscdr-template.c | 11 ++ asn1/gsm_map/gsm_map.cnf | 17 +-- asn1/gsm_map/packet-gsm_map-template.c | 24 ++-- asn1/h225/h225.cnf | 9 +- asn1/h225/packet-h225-template.c | 4 + asn1/h245/h245.cnf | 40 ++++-- asn1/h245/packet-h245-template.c | 5 + asn1/h248/packet-h248-template.c | 11 +- asn1/h450/packet-h450-template.c | 20 ++- asn1/h460/packet-h460-template.c | 2 - asn1/idmp/packet-idmp-template.c | 13 +- asn1/inap/inap.cnf | 7 +- asn1/inap/packet-inap-template.c | 2 + asn1/isdn-sup/packet-isdn-sup-template.c | 26 ++-- asn1/kerberos/kerberos.cnf | 2 +- asn1/kerberos/packet-kerberos-template.c | 22 ++-- asn1/ldap/ldap.cnf | 10 +- asn1/ldap/packet-ldap-template.c | 92 ++++++-------- asn1/lte-rrc/lte-rrc.cnf | 19 ++- asn1/lte-rrc/packet-lte-rrc-template.c | 20 +++ asn1/mms/packet-mms-template.c | 4 +- asn1/p1/packet-p1-template.c | 8 +- asn1/pkcs12/packet-pkcs12-template.c | 15 ++- asn1/pres/packet-pres-template.c | 22 ++-- asn1/q932/packet-q932-template.c | 36 ++++-- asn1/qsig/packet-qsig-template.c | 21 +++- asn1/ros/packet-ros-template.c | 19 ++- asn1/ros/ros.cnf | 27 +++-- asn1/snmp/packet-snmp-template.c | 82 ++++++------- asn1/snmp/packet-snmp-template.h | 2 +- asn1/snmp/snmp.cnf | 9 +- asn1/spnego/packet-spnego-template.c | 22 +++- asn1/sv/packet-sv-template.c | 4 +- asn1/t38/packet-t38-template.c | 17 ++- asn1/t38/t38.cnf | 4 +- asn1/tcap/packet-tcap-template.c | 9 +- epan/dissectors/packet-acse.c | 26 ++-- epan/dissectors/packet-ansi_map.c | 86 ++++++++----- epan/dissectors/packet-ansi_tcap.c | 28 +++-- epan/dissectors/packet-atn-ulcs.c | 19 ++- epan/dissectors/packet-charging_ase.c | 23 +++- epan/dissectors/packet-cmip.c | 32 +++-- epan/dissectors/packet-dap.c | 31 +++-- epan/dissectors/packet-disp.c | 45 ++++--- epan/dissectors/packet-dop.c | 32 +++-- epan/dissectors/packet-dsp.c | 40 ++++-- epan/dissectors/packet-ftam.c | 22 +++- epan/dissectors/packet-goose.c | 14 ++- epan/dissectors/packet-gprscdr.c | 23 +++- epan/dissectors/packet-gsm_map.c | 147 ++++++++++++----------- epan/dissectors/packet-h225.c | 33 +++-- epan/dissectors/packet-h245.c | 145 ++++++++++++---------- epan/dissectors/packet-h248.c | 17 ++- epan/dissectors/packet-h450.c | 38 ++++-- epan/dissectors/packet-h460.c | 6 +- epan/dissectors/packet-idmp.c | 23 ++-- epan/dissectors/packet-inap.c | 35 +++--- epan/dissectors/packet-isdn-sup.c | 38 ++++-- epan/dissectors/packet-kerberos.c | 32 ++--- epan/dissectors/packet-ldap.c | 114 ++++++++---------- epan/dissectors/packet-lte-rrc.c | 49 +++++--- epan/dissectors/packet-mms.c | 10 +- epan/dissectors/packet-p1.c | 22 ++-- epan/dissectors/packet-pkcs12.c | 27 +++-- epan/dissectors/packet-pktc.c | 4 +- epan/dissectors/packet-pres.c | 24 ++-- epan/dissectors/packet-q932.c | 46 ++++--- epan/dissectors/packet-qsig.c | 39 ++++-- epan/dissectors/packet-ros.c | 80 +++++++----- epan/dissectors/packet-snmp.c | 107 ++++++++--------- epan/dissectors/packet-snmp.h | 2 +- epan/dissectors/packet-spnego.c | 32 +++-- epan/dissectors/packet-sv.c | 10 +- epan/dissectors/packet-t38.c | 43 ++++--- epan/dissectors/packet-tcap.c | 21 ++-- 90 files changed, 1566 insertions(+), 928 deletions(-) diff --git a/asn1/acse/packet-acse-template.c b/asn1/acse/packet-acse-template.c index 2f700fa2eb..37bc5e6f06 100644 --- a/asn1/acse/packet-acse-template.c +++ b/asn1/acse/packet-acse-template.c @@ -69,12 +69,15 @@ int proto_clacse = -1; #include "packet-acse-hf.c" +static gint hf_acse_user_data = -1; /* Initialize the subtree pointers */ static gint ett_acse = -1; #include "packet-acse-ett.c" static expert_field ei_acse_dissector_not_available = EI_INIT; +static expert_field ei_acse_malformed = EI_INIT; +static expert_field ei_acse_invalid_oid = EI_INIT; static const char *object_identifier_id; /* indirect_reference, used to pick up the signalling so we know what @@ -173,9 +176,8 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d /* first, try to check length */ /* do we have at least 2 bytes */ if (!tvb_bytes_exist(tvb, 0, 2)){ - proto_tree_add_text(parent_tree, tvb, offset, - tvb_reported_length_remaining(tvb,offset), - "User data"); + proto_tree_add_item(parent_tree, hf_acse_user_data, tvb, offset, + tvb_reported_length_remaining(tvb,offset), ENC_NA); return 0; /* no, it isn't a ACSE PDU */ } @@ -208,7 +210,7 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d oid=find_oid_by_pres_ctx_id(pinfo, indir_ref); if(oid){ if(strcmp(oid, ACSE_APDU_OID) == 0){ - proto_tree_add_text(parent_tree, tvb, offset, -1, + proto_tree_add_expert_format(parent_tree, pinfo, &ei_acse_invalid_oid, tvb, offset, -1, "Invalid OID: %s", ACSE_APDU_OID); THROW(ReportedBoundsError); } @@ -249,7 +251,7 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d int old_offset=offset; offset = dissect_acse_ACSE_apdu(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset ){ - proto_tree_add_text(tree, tvb, offset, -1,"Malformed packet"); + proto_tree_add_expert(tree, pinfo, &ei_acse_malformed, tvb, offset, -1); break; } } @@ -263,6 +265,10 @@ void proto_register_acse(void) { /* List of fields */ static hf_register_info hf[] = { + { &hf_acse_user_data, + { "User data", "acse.user_data", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, #include "packet-acse-hfarr.c" }; @@ -274,6 +280,8 @@ void proto_register_acse(void) { static ei_register_info ei[] = { { &ei_acse_dissector_not_available, { "acse.dissector_not_available", PI_UNDECODED, PI_WARN, "Dissector is not available", EXPFILL }}, + { &ei_acse_malformed, { "acse._malformed", PI_MALFORMED, PI_ERROR, "Malformed packet", EXPFILL }}, + { &ei_acse_invalid_oid, { "acse.invalid_oid", PI_UNDECODED, PI_WARN, "Invalid OID", EXPFILL }}, }; expert_module_t* expert_acse; diff --git a/asn1/ansi_map/packet-ansi_map-template.c b/asn1/ansi_map/packet-ansi_map-template.c index fd6f548636..709e154e11 100644 --- a/asn1/ansi_map/packet-ansi_map-template.c +++ b/asn1/ansi_map/packet-ansi_map-template.c @@ -87,6 +87,7 @@ #include #include #include +#include #include #include #include @@ -320,6 +321,10 @@ static int hf_ansi_map_winoperationscapability_pos = -1; static int hf_ansi_map_PACA_Level = -1; static int hf_ansi_map_pacaindicator_pa = -1; +static int hf_ansi_map_point_code = -1; +static int hf_ansi_map_SSN = -1; +static int hf_ansi_map_win_trigger_list = -1; + #include "packet-ansi_map-hf.c" /* Initialize the subtree pointers */ @@ -354,6 +359,10 @@ static gint ett_sms_originationrestrictions = -1; #include "packet-ansi_map-ett.c" +static expert_field ei_ansi_map_nr_not_used = EI_INIT; +static expert_field ei_ansi_map_unknown_invokeData_blob = EI_INIT; +static expert_field ei_ansi_map_no_data = EI_INIT; + /* Global variables */ static dissector_table_t is637_tele_id_dissector_table; /* IS-637 Teleservice ID */ static dissector_table_t is683_dissector_table; /* IS-683-A (OTA) */ @@ -649,7 +658,7 @@ dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre } static void -dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ +dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ guint8 octet , octet_len; guint8 b1,b2,b3,b4; @@ -713,7 +722,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * case 3:/* Data Numbering (ITU-T Rec. X.121) (not used in this Standard). */ case 4:/* Telex Numbering (ITU-T Rec. F.69) (not used in this Standard). */ case 5:/* Maritime Mobile Numbering (not used in this Standard). */ - proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used"); + proto_tree_add_expert(subtree, pinfo, &ei_ansi_map_nr_not_used, tvb, offset, -1); break; case 2:/* Telephony Numbering (ITU-T Rec. E.164,E.163). */ case 6:/* Land Mobile Numbering (ITU-T Rec. E.212) */ @@ -755,10 +764,10 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * /* Point Code Network Number octet 4 */ b3 = tvb_get_guint8(tvb,offset); offset++; + proto_tree_add_bytes_format_value(subtree, hf_ansi_map_point_code, tvb, offset-3, 3, NULL, "%u-%u-%u", b3, b2, b1); /* Subsystem Number (SSN) octet 5 */ b4 = tvb_get_guint8(tvb,offset); - proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u SSN %u", - b3, b2, b1, b4); + proto_tree_add_item(subtree, hf_ansi_map_SSN, tvb, offset, 1, ENC_NA); proto_item_append_text(actx->created_item, " - Point Code %u-%u-%u SSN %u", b3, b2, b1, b4); break; default: @@ -768,7 +777,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * case 14:/* Internet Protocol (IP) Address. */ break; default: - proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used"); + proto_tree_add_expert(subtree, pinfo, &ei_ansi_map_nr_not_used, tvb, offset, -1); break; } @@ -2243,7 +2252,7 @@ dissect_ansi_map_pc_ssn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree int offset = 0; proto_tree *subtree; - guint8 b1,b2,b3,b4; + guint8 b1,b2,b3; subtree = proto_item_add_subtree(actx->created_item, ett_billingid); @@ -2259,11 +2268,8 @@ dissect_ansi_map_pc_ssn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree /* Point Code Network Number octet 4 */ b3 = tvb_get_guint8(tvb,offset); offset++; - /* Subsystem Number (SSN) octet 5 */ - b4 = tvb_get_guint8(tvb,offset); - proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u SSN %u", - b3, b2, b1, b4); - + proto_tree_add_bytes_format_value(subtree, hf_ansi_map_point_code, tvb, offset-3, 3, NULL, "%u-%u-%u", b3, b2, b1); + proto_tree_add_item(subtree, hf_ansi_map_SSN, tvb, offset, 1, ENC_NA); } /* 6.5.2.94 PilotBillingID */ static void @@ -3647,23 +3653,23 @@ dissect_ansi_map_win_trigger_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_t octet = tvb_get_guint8(tvb,offset); switch (octet){ case 0xdc: - proto_tree_add_text(subtree, tvb, offset, 1, "TDP-R's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "TDP-R's armed"); j=0; break; case 0xdd: - proto_tree_add_text(subtree, tvb, offset, 1, "TDP-N's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "TDP-N's armed"); j=0; break; case 0xde: - proto_tree_add_text(subtree, tvb, offset, 1, "EDP-R's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "EDP-R's armed"); j=0; break; case 0xdf: - proto_tree_add_text(subtree, tvb, offset, 1, "EDP-N's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "EDP-N's armed"); j=0; break; default: - proto_tree_add_text(subtree, tvb, offset, 1, "[%u] (%u) %s",j,octet,val_to_str_ext(octet, &ansi_map_TriggerType_vals_ext, "Unknown TriggerType (%u)")); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "[%u] (%u) %s",j,octet,val_to_str_ext(octet, &ansi_map_TriggerType_vals_ext, "Unknown TriggerType (%u)")); j++; break; } @@ -3696,7 +3702,7 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_FacilitiesDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesDirective); break; case 3: /*Mobile On Channel*/ - proto_tree_add_text(tree, tvb, offset, -1, "[Carries no data]"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_no_data, tvb, offset, -1); break; case 4: /*Handoff Back*/ offset = dissect_ansi_map_HandoffBack(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffBack); @@ -3741,16 +3747,16 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_FeatureRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_featureRequest); break; case 18: /*Reserved 18 (Service Profile Request, IS-41-C)*/ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(18 (Service Profile Request, IS-41-C)"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Unknown invokeData blob(18 (Service Profile Request, IS-41-C)"); break; case 19: /*Reserved 19 (Service Profile Directive, IS-41-C)*/ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(19 Service Profile Directive, IS-41-C)"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Unknown invokeData blob(19 Service Profile Directive, IS-41-C)"); break; case 20: /*Unreliable Roamer Data Directive*/ offset = dissect_ansi_map_UnreliableRoamerDataDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_unreliableRoamerDataDirective); break; case 21: /*Reserved 21 (Call Data Request, IS-41-C)*/ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(Reserved 21 (Call Data Request, IS-41-C)"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Unknown invokeData blob(Reserved 21 (Call Data Request, IS-41-C)"); break; case 22: /*MS Inactive*/ offset = dissect_ansi_map_MSInactive(TRUE, tvb, offset, actx, tree, hf_ansi_map_mSInactive); @@ -3810,7 +3816,7 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_AuthenticationStatusReport(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationStatusReport); break; case 41: /*Reserved 41*/ - proto_tree_add_text(tree, tvb, offset, -1, "Reserved 41, Unknown invokeData blob"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Reserved 41, Unknown invokeData blob"); break; case 42: /*Information Directive*/ offset = dissect_ansi_map_InformationDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_informationDirective); @@ -4035,7 +4041,7 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_QualificationRequest2(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequest2); break; default: - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1); opCodeKnown = FALSE; break; } @@ -4112,7 +4118,7 @@ static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ break; case 26: /*Flash Request*/ /* No data */ - proto_tree_add_text(tree, tvb, offset, -1, "No Data"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_no_data, tvb, offset, -1); break; case 27: /*Authentication Directive*/ offset = dissect_ansi_map_AuthenticationDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationDirectiveRes); @@ -4306,7 +4312,7 @@ static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_QualificationRequest2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequest2Res); break; default: - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1); opCodeKnown = FALSE; break; } @@ -5270,6 +5276,18 @@ void proto_register_ansi_map(void) { { "PACA Level", "ansi_map.PACA_Level", FT_UINT8, BASE_DEC, VALS(ansi_map_PACA_Level_vals), 0x1e, NULL, HFILL }}, + { &hf_ansi_map_point_code, + { "Point Code", "ansi_map.point_code", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL }}, + { &hf_ansi_map_SSN, + { "SSN", "ansi_map.SSN", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + { &hf_ansi_map_win_trigger_list, + { "WIN trigger list", "ansi_map.win_trigger_list", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, #include "packet-ansi_map-hfarr.c" }; @@ -5307,6 +5325,14 @@ void proto_register_ansi_map(void) { #include "packet-ansi_map-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_ansi_map_nr_not_used, { "ansi_map.nr_not_used", PI_PROTOCOL, PI_WARN, "This Number plan should not have been used", EXPFILL }}, + { &ei_ansi_map_unknown_invokeData_blob, { "ansi_map.unknown_invokeData_blob", PI_PROTOCOL, PI_WARN, "Unknown invokeData blob", EXPFILL }}, + { &ei_ansi_map_no_data, { "ansi_map.no_data", PI_PROTOCOL, PI_NOTE, "Carries no data", EXPFILL }}, + }; + + expert_module_t* expert_ansi_map; + static const enum_val_t ansi_map_response_matching_type_values[] = { {"Only Transaction ID will be used in Invoke/response matching", "Transaction ID only", 0}, {"Transaction ID and Source will be used in Invoke/response matching", "Transaction ID and Source", 1}, @@ -5319,6 +5345,8 @@ void proto_register_ansi_map(void) { /* Register fields and subtrees */ proto_register_field_array(proto_ansi_map, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_ansi_map = expert_register_protocol(proto_ansi_map); + expert_register_field_array(expert_ansi_map, ei, array_length(ei)); new_register_dissector("ansi_map", dissect_ansi_map, proto_ansi_map); diff --git a/asn1/ansi_tcap/packet-ansi_tcap-template.c b/asn1/ansi_tcap/packet-ansi_tcap-template.c index 439a64cafa..c13df91e61 100644 --- a/asn1/ansi_tcap/packet-ansi_tcap-template.c +++ b/asn1/ansi_tcap/packet-ansi_tcap-template.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -71,6 +72,8 @@ static gint ett_otid = -1; static gint ett_dtid = -1; static gint ett_ansi_tcap_stat = -1; +static expert_field ei_ansi_tcap_dissector_not_implemented = EI_INIT; + static struct tcapsrt_info_t * gp_tcapsrt_info; static gboolean tcap_subdissector_used=FALSE; @@ -321,22 +324,20 @@ find_tcap_subdissector(tvbuff_t *tvb, asn1_ctx_t *actx, proto_tree *tree){ guint8 family = (ansi_tcap_private.d.OperationCode_national & 0x7f00)>>8; guint8 specifier = (guint8)(ansi_tcap_private.d.OperationCode_national & 0xff); if(!dissector_try_uint(ansi_tcap_national_opcode_table, ansi_tcap_private.d.OperationCode_national, tvb, actx->pinfo, tcap_top_tree)){ - item = proto_tree_add_text(tree, tvb, 0, -1, + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_tcap_dissector_not_implemented, tvb, 0, -1, "Dissector for ANSI TCAP NATIONAL code:0x%x(Family %u, Specifier %u) \n" "not implemented. Contact Wireshark developers if you want this supported(Spec required)", ansi_tcap_private.d.OperationCode_national, family, specifier); - PROTO_ITEM_SET_GENERATED(item); return FALSE; } return TRUE; }else if(ansi_tcap_private.d.OperationCode == 1){ /* private */ if((ansi_tcap_private.d.OperationCode_private & 0x0900) != 0x0900){ - item = proto_tree_add_text(tree, tvb, 0, -1, + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_tcap_dissector_not_implemented, tvb, 0, -1, "Dissector for ANSI TCAP PRIVATE code:%u not implemented.\n" "Contact Wireshark developers if you want this supported(Spec required)", ansi_tcap_private.d.OperationCode_private); - PROTO_ITEM_SET_GENERATED(item); return FALSE; } } @@ -503,6 +504,12 @@ proto_register_ansi_tcap(void) #include "packet-ansi_tcap-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_ansi_tcap_dissector_not_implemented, { "ansi_tcap.dissector_not_implemented", PI_UNDECODED, PI_WARN, "Dissector not implemented", EXPFILL }}, + }; + + expert_module_t* expert_ansi_tcap; + static const enum_val_t ansi_tcap_response_matching_type_values[] = { {"Only Transaction ID will be used in Invoke/response matching", "Transaction ID only", 0}, {"Transaction ID and Source will be used in Invoke/response matching", "Transaction ID and Source", 1}, @@ -510,7 +517,6 @@ proto_register_ansi_tcap(void) {NULL, NULL, -1} }; - /* Register the protocol name and description */ proto_ansi_tcap = proto_register_protocol(PNAME, PSNAME, PFNAME); register_dissector("ansi_tcap", dissect_ansi_tcap, proto_ansi_tcap); @@ -520,6 +526,8 @@ proto_register_ansi_tcap(void) /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_ansi_tcap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_ansi_tcap = expert_register_protocol(proto_ansi_tcap); + expert_register_field_array(expert_ansi_tcap, ei, array_length(ei)); ansi_tcap_module = prefs_register_protocol(proto_ansi_tcap, proto_reg_handoff_ansi_tcap); diff --git a/asn1/atn-ulcs/packet-atn-ulcs-template.c b/asn1/atn-ulcs/packet-atn-ulcs-template.c index 37322a3a0c..51e51d545c 100644 --- a/asn1/atn-ulcs/packet-atn-ulcs-template.c +++ b/asn1/atn-ulcs/packet-atn-ulcs-template.c @@ -293,6 +293,7 @@ const value_string atn_ses_type[] = #define ATN_PRES_PROTO "ICAO Doc9705 ULCS Presentation (ISO 8822/8823-1:1994)" static int hf_atn_pres_err = -1; +static int hf_atn_pres_pdu_type = -1; static gint ett_atn_pres = -1; #define ATN_SES_PRES_MASK 0xf803 @@ -676,13 +677,11 @@ dissect_atn_ulcs( /* need session context to identify PPDU type */ /* note: */ - /* it is *unfeasible* to use proto_tree_add_item here: */ - /* presentation type is always the same constant but its type */ - /* is implicitly determined by preceding session context */ - proto_tree_add_text(atn_ulcs_tree, + proto_tree_add_uint_format(atn_ulcs_tree, hf_atn_pres_pdu_type, tvb, offset, 1, + value_ses_pres, "%s (0x%02x)", val_to_str( value_ses_pres & ATN_SES_PRES_MASK , atn_pres_vals, "?"), value_pres); @@ -839,6 +838,14 @@ void proto_register_atn_ulcs (void) PRES_CPR_ER_MASK, NULL, HFILL}}, + { &hf_atn_pres_pdu_type, + { "PDU type", "atn-ulcs.pres.pdu_type", + FT_UINT8, + BASE_HEX, + NULL, + ATN_SES_PRES_MASK, + NULL, + HFILL}}, }; static gint *ett[] = { diff --git a/asn1/charging_ase/charging_ase.cnf b/asn1/charging_ase/charging_ase.cnf index 0e41bcee4c..6a520e4b53 100644 --- a/asn1/charging_ase/charging_ase.cnf +++ b/asn1/charging_ase/charging_ase.cnf @@ -11,6 +11,6 @@ ChargingMessageType #.FN_BODY ExtensionField/value - proto_tree_add_text(tree, tvb, offset, -1, "Extensions not dissected"); + proto_tree_add_expert(tree, actx->pinfo, &ei_charging_ase_extensions_not_dissected, tvb, offset, -1); return tvb_length(tvb); #.END diff --git a/asn1/charging_ase/packet-charging_ase-template.c b/asn1/charging_ase/packet-charging_ase-template.c index 7b378801d7..23a2dd24ba 100644 --- a/asn1/charging_ase/packet-charging_ase-template.c +++ b/asn1/charging_ase/packet-charging_ase-template.c @@ -25,6 +25,7 @@ #include #include +#include #include #include "packet-ber.h" @@ -45,6 +46,8 @@ static int proto_charging_ase = -1; static int ett_charging_ase = -1; #include "packet-charging_ase-ett.c" +static expert_field ei_charging_ase_extensions_not_dissected = EI_INIT; + static dissector_handle_t charging_ase_handle; #include "packet-charging_ase-fn.c" @@ -79,10 +82,18 @@ proto_register_charging_ase(void) #include "packet-charging_ase-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_charging_ase_extensions_not_dissected, { "charging_ase.extensions_not_dissected", PI_UNDECODED, PI_WARN, "Extensions not dissected", EXPFILL }}, + }; + + expert_module_t* expert_charging_ase; + proto_charging_ase = proto_register_protocol(PNAME, PSNAME, PFNAME); proto_register_field_array(proto_charging_ase, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_charging_ase = expert_register_protocol(proto_charging_ase); + expert_register_field_array(expert_charging_ase, ei, array_length(ei)); } /* The registration hand-off routine */ diff --git a/asn1/cmip/packet-cmip-template.c b/asn1/cmip/packet-cmip-template.c index 12b2d057e2..0c6a105a97 100644 --- a/asn1/cmip/packet-cmip-template.c +++ b/asn1/cmip/packet-cmip-template.c @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -60,6 +61,8 @@ static int hf_ObjectClass = -1; static gint ett_cmip = -1; #include "packet-cmip-ett.c" +static expert_field ei_wrong_spdu_type = EI_INIT; + static guint32 opcode; /* Dissector table */ @@ -110,8 +113,8 @@ dissect_cmip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d session = (struct SESSION_DATA_STRUCTURE*)data; if(session->spdu_type == 0 ) { - proto_tree_add_text(parent_tree, tvb, 0, -1, - "Internal error:wrong spdu type %x from session dissector.",session->spdu_type); + proto_tree_add_expert_format(parent_tree, pinfo, &ei_wrong_spdu_type, tvb, 0, -1, + "Internal error: wrong spdu type %x from session dissector.", session->spdu_type); return 0; } @@ -190,6 +193,12 @@ void proto_register_cmip(void) { #include "packet-cmip-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_wrong_spdu_type, { "cmip.wrong_spdu_type", PI_PROTOCOL, PI_ERROR, "Internal error: wrong spdu type", EXPFILL }}, + }; + + expert_module_t* expert_cmip; + /* Register protocol */ proto_cmip = proto_register_protocol(PNAME, PSNAME, PFNAME); new_register_dissector("cmip", dissect_cmip, proto_cmip); @@ -197,6 +206,9 @@ void proto_register_cmip(void) { /* Register fields and subtrees */ proto_register_field_array(proto_cmip, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_cmip = expert_register_protocol(proto_cmip); + expert_register_field_array(expert_cmip, ei, array_length(ei)); + #include "packet-cmip-dis-tab.c" oid_add_from_string("discriminatorId(1)","2.9.3.2.7.1"); diff --git a/asn1/dap/dap.cnf b/asn1/dap/dap.cnf index beb03f0dac..d3a386359e 100644 --- a/asn1/dap/dap.cnf +++ b/asn1/dap/dap.cnf @@ -264,7 +264,7 @@ OPERATION.&ResultType if(len == 0) { /* its an empty set - i.e anonymous (assuming version is DEFAULTed) */ - proto_tree_add_text(tree, tvb, offset, -1,"Anonymous"); + proto_tree_add_expert(tree, actx->pinfo, &ei_dap_anonymous, tvb, offset, -1); col_append_str(actx->pinfo->cinfo, COL_INFO, " anonymous"); diff --git a/asn1/dap/packet-dap-template.c b/asn1/dap/packet-dap-template.c index 32a008216e..d2888c7edb 100644 --- a/asn1/dap/packet-dap-template.c +++ b/asn1/dap/packet-dap-template.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -68,6 +69,8 @@ static int proto_dap = -1; static gint ett_dap = -1; #include "packet-dap-ett.c" +static expert_field ei_dap_anonymous = EI_INIT; + #include "packet-dap-val.h" #include "packet-dap-table.c" /* operation and error codes */ @@ -102,7 +105,13 @@ void proto_register_dap(void) { &ett_dap, #include "packet-dap-ettarr.c" }; + + static ei_register_info ei[] = { + { &ei_dap_anonymous, { "dap.anonymous", PI_PROTOCOL, PI_NOTE, "Anonymous", EXPFILL }}, + }; + module_t *dap_module; + expert_module_t* expert_dap; /* Register protocol */ proto_dap = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -110,6 +119,8 @@ void proto_register_dap(void) { /* Register fields and subtrees */ proto_register_field_array(proto_dap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_dap = expert_register_protocol(proto_dap); + expert_register_field_array(expert_dap, ei, array_length(ei)); /* Register our configuration options for DAP, particularly our port */ diff --git a/asn1/disp/packet-disp-template.c b/asn1/disp/packet-disp-template.c index 20201b69ce..13c2245772 100644 --- a/asn1/disp/packet-disp-template.c +++ b/asn1/disp/packet-disp-template.c @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -68,6 +69,11 @@ static int proto_disp = -1; static gint ett_disp = -1; #include "packet-disp-ett.c" +static expert_field ei_disp_unsupported_opcode = EI_INIT; +static expert_field ei_disp_unsupported_errcode = EI_INIT; +static expert_field ei_disp_unsupported_pdu = EI_INIT; +static expert_field ei_disp_zero_pdu = EI_INIT; + #include "packet-disp-fn.c" /* @@ -128,8 +134,8 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d disp_op_name = "Coordinate-Shadow-Update-Argument"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_disp_unsupported_opcode, tvb, offset, -1, + "Unsupported DISP opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -148,8 +154,8 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d disp_op_name = "Coordinate-Shadow-Update-Result"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_disp_unsupported_opcode, tvb, offset, -1, + "Unsupported DISP opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -160,13 +166,13 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d disp_op_name = "Shadow-Error"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP errcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_disp_unsupported_errcode, tvb, offset, -1, + "Unsupported DISP errcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_disp_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -177,7 +183,7 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d old_offset=offset; offset=(*disp_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DISP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_disp_zero_pdu, tvb, offset, -1); break; } } @@ -201,7 +207,16 @@ void proto_register_disp(void) { &ett_disp, #include "packet-disp-ettarr.c" }; + + static ei_register_info ei[] = { + { &ei_disp_unsupported_opcode, { "disp.unsupported_opcode", PI_UNDECODED, PI_WARN, "Unsupported DISP opcode", EXPFILL }}, + { &ei_disp_unsupported_errcode, { "disp.unsupported_errcode", PI_UNDECODED, PI_WARN, "Unsupported DISP errcode", EXPFILL }}, + { &ei_disp_unsupported_pdu, { "disp.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported DISP PDU", EXPFILL }}, + { &ei_disp_zero_pdu, { "disp.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte DISP PDU", EXPFILL }}, + }; + module_t *disp_module; + expert_module_t* expert_disp; /* Register protocol */ proto_disp = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -210,6 +225,8 @@ void proto_register_disp(void) { /* Register fields and subtrees */ proto_register_field_array(proto_disp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_disp = expert_register_protocol(proto_disp); + expert_register_field_array(expert_disp, ei, array_length(ei)); /* Register our configuration options for DISP, particularly our port */ diff --git a/asn1/dop/packet-dop-template.c b/asn1/dop/packet-dop-template.c index f26c14ea18..6d13570e87 100644 --- a/asn1/dop/packet-dop-template.c +++ b/asn1/dop/packet-dop-template.c @@ -71,6 +71,10 @@ static gint ett_dop_unknown = -1; #include "packet-dop-ett.c" static expert_field ei_dop_unknown_binding_parameter = EI_INIT; +static expert_field ei_dop_unsupported_opcode = EI_INIT; +static expert_field ei_dop_unsupported_errcode = EI_INIT; +static expert_field ei_dop_unsupported_pdu = EI_INIT; +static expert_field ei_dop_zero_pdu = EI_INIT; /* Dissector table */ static dissector_table_t dop_dissector_table; @@ -169,8 +173,8 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dop_op_name = "Modify-Operational-Binding-Argument"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Argument opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dop_unsupported_opcode, tvb, offset, -1, + "Unsupported DOP Argument opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -189,8 +193,8 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dop_op_name = "Modify-Operational-Binding-Result"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Result opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dop_unsupported_opcode, tvb, offset, -1, + "Unsupported DOP Result opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -201,13 +205,13 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dop_op_name = "Operational-Binding-Error"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Error opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dop_unsupported_errcode, tvb, offset, -1, + "Unsupported DOP Error opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dop_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -218,7 +222,7 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da old_offset=offset; offset=(*dop_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DOP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dop_zero_pdu, tvb, offset, -1); break; } } @@ -247,6 +251,10 @@ void proto_register_dop(void) { static ei_register_info ei[] = { { &ei_dop_unknown_binding_parameter, { "dop.unknown_binding_parameter", PI_UNDECODED, PI_WARN, "Unknown binding-parameter", EXPFILL }}, + { &ei_dop_unsupported_opcode, { "dop.unsupported_opcode", PI_UNDECODED, PI_WARN, "Unsupported DOP opcode", EXPFILL }}, + { &ei_dop_unsupported_errcode, { "dop.unsupported_errcode", PI_UNDECODED, PI_WARN, "Unsupported DOP errcode", EXPFILL }}, + { &ei_dop_unsupported_pdu, { "dop.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported DOP PDU", EXPFILL }}, + { &ei_dop_zero_pdu, { "dop.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte DOP PDU", EXPFILL }}, }; expert_module_t* expert_dop; diff --git a/asn1/dsp/packet-dsp-template.c b/asn1/dsp/packet-dsp-template.c index b0ebba4412..f6adf54b08 100644 --- a/asn1/dsp/packet-dsp-template.c +++ b/asn1/dsp/packet-dsp-template.c @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -62,6 +63,11 @@ static int proto_dsp = -1; static gint ett_dsp = -1; #include "packet-dsp-ett.c" +static expert_field ei_dsp_unsupported_opcode = EI_INIT; +static expert_field ei_dsp_unsupported_errcode = EI_INIT; +static expert_field ei_dsp_unsupported_pdu = EI_INIT; +static expert_field ei_dsp_zero_pdu = EI_INIT; + #include "packet-dsp-fn.c" /* @@ -146,8 +152,8 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dsp_op_name = "ChainedModify-DN-Argument"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dsp_unsupported_opcode, tvb, offset, -1, + "Unsupported DSP opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -190,7 +196,7 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dsp_op_name = "ChainedModify-DN-Result"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP opcode"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_unsupported_opcode, tvb, offset, -1); break; } break; @@ -233,12 +239,12 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dsp_op_name = "DSA-Referral"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP errcode"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_unsupported_errcode, tvb, offset, -1); break; } break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -249,7 +255,7 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da old_offset=offset; offset=(*dsp_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DSP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_zero_pdu, tvb, offset, -1); break; } } @@ -273,7 +279,15 @@ void proto_register_dsp(void) { &ett_dsp, #include "packet-dsp-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_dsp_unsupported_opcode, { "dsp.unsupported_opcode", PI_UNDECODED, PI_WARN, "Unsupported DSP opcode", EXPFILL }}, + { &ei_dsp_unsupported_errcode, { "dsp.unsupported_errcode", PI_UNDECODED, PI_WARN, "Unsupported DSP errcode", EXPFILL }}, + { &ei_dsp_unsupported_pdu, { "dsp.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported DSP PDU", EXPFILL }}, + { &ei_dsp_zero_pdu, { "dsp.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte DSP PDU", EXPFILL }}, + }; + module_t *dsp_module; + expert_module_t* expert_dsp; /* Register protocol */ proto_dsp = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -283,6 +297,8 @@ void proto_register_dsp(void) { /* Register fields and subtrees */ proto_register_field_array(proto_dsp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_dsp = expert_register_protocol(proto_dsp); + expert_register_field_array(expert_dsp, ei, array_length(ei)); /* Register our configuration options for DSP, particularly our port */ diff --git a/asn1/ftam/packet-ftam-template.c b/asn1/ftam/packet-ftam-template.c index 3c34b69f2b..7e72f40dff 100644 --- a/asn1/ftam/packet-ftam-template.c +++ b/asn1/ftam/packet-ftam-template.c @@ -30,6 +30,7 @@ #include #include +#include #include #include @@ -59,6 +60,8 @@ static int hf_ftam_unstructured_binary = -1; /* ISO FTAM unstructured static gint ett_ftam = -1; #include "packet-ftam-ett.c" +static expert_field ei_ftam_zero_pdu = EI_INIT; + #include "packet-ftam-fn.c" /* @@ -104,7 +107,7 @@ dissect_ftam(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset=offset; offset=dissect_ftam_PDU(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte FTAM PDU"); + proto_tree_add_expert(tree, pinfo, &ei_ftam_zero_pdu, tvb, offset, -1); break; } } @@ -131,6 +134,11 @@ void proto_register_ftam(void) { &ett_ftam, #include "packet-ftam-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_ftam_zero_pdu, { "ftam.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte FTAM PDU", EXPFILL }}, + }; + + expert_module_t* expert_ftam; /* Register protocol */ proto_ftam = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -138,6 +146,8 @@ void proto_register_ftam(void) { /* Register fields and subtrees */ proto_register_field_array(proto_ftam, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_ftam = expert_register_protocol(proto_ftam); + expert_register_field_array(expert_ftam, ei, array_length(ei)); } diff --git a/asn1/goose/packet-goose-template.c b/asn1/goose/packet-goose-template.c index 6f550225ef..7a80be3a92 100644 --- a/asn1/goose/packet-goose-template.c +++ b/asn1/goose/packet-goose-template.c @@ -47,6 +47,7 @@ static int hf_goose_reserve1 = -1; static int hf_goose_reserve2 = -1; static expert_field ei_goose_mal_utctime = EI_INIT; +static expert_field ei_goose_zero_pdu = EI_INIT; #include "packet-goose-hf.c" @@ -97,7 +98,7 @@ dissect_goose(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset = offset; offset = dissect_goose_GOOSEpdu(FALSE, tvb, offset, &asn1_ctx , tree, -1); if (offset == old_offset) { - proto_tree_add_text(tree, tvb, offset, -1, "Internal error, zero-byte GOOSE PDU"); + proto_tree_add_expert(tree, pinfo, &ei_goose_zero_pdu, tvb, offset, -1); return; } } @@ -134,6 +135,7 @@ void proto_register_goose(void) { static ei_register_info ei[] = { { &ei_goose_mal_utctime, { "goose.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed UTCTime encoding", EXPFILL }}, + { &ei_goose_zero_pdu, { "goose.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte GOOSE PDU", EXPFILL }}, }; expert_module_t* expert_goose; diff --git a/asn1/gprscdr/gprscdr.cnf b/asn1/gprscdr/gprscdr.cnf index 4166d69882..d060f16635 100644 --- a/asn1/gprscdr/gprscdr.cnf +++ b/asn1/gprscdr/gprscdr.cnf @@ -51,7 +51,7 @@ GPRSRecord #.FN_BODY ManagementExtension/information - proto_tree_add_text(tree, tvb, offset, -1, "Not dissected"); + proto_tree_add_expert(tree, actx->pinfo, &ei_gprscdr_not_dissected, tvb, offset, -1); #.FN_BODY TimeStamp VAL_PTR = ¶meter_tvb /* diff --git a/asn1/gprscdr/packet-gprscdr-template.c b/asn1/gprscdr/packet-gprscdr-template.c index b68433ca8d..ab90fe9602 100644 --- a/asn1/gprscdr/packet-gprscdr-template.c +++ b/asn1/gprscdr/packet-gprscdr-template.c @@ -25,6 +25,7 @@ #include #include +#include #include #include "packet-ber.h" @@ -48,6 +49,8 @@ static int ett_gprscdr_timestamp = -1; static int ett_gprscdr_plmn_id = -1; #include "packet-gprscdr-ett.c" +static expert_field ei_gprscdr_not_dissected = EI_INIT; + static const value_string gprscdr_daylight_saving_time_vals[] = { {0, "No adjustment"}, {1, "+1 hour adjustment for Daylight Saving Time"}, @@ -77,10 +80,18 @@ proto_register_gprscdr(void) #include "packet-gprscdr-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_gprscdr_not_dissected, { "gprscdr.not_dissected", PI_UNDECODED, PI_WARN, "Not dissected", EXPFILL }}, + }; + + expert_module_t* expert_gprscdr; + proto_gprscdr = proto_register_protocol(PNAME, PSNAME, PFNAME); proto_register_field_array(proto_gprscdr, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_gprscdr = expert_register_protocol(proto_gprscdr); + expert_register_field_array(expert_gprscdr, ei, array_length(ei)); } /* The registration hand-off routine */ diff --git a/asn1/gsm_map/gsm_map.cnf b/asn1/gsm_map/gsm_map.cnf index a187e7a70f..5824c7bb48 100644 --- a/asn1/gsm_map/gsm_map.cnf +++ b/asn1/gsm_map/gsm_map.cnf @@ -228,11 +228,12 @@ MAP-DialoguePDU B "0.4.0.0.1.1.1.1" "map-DialogueAS" #.FN_PARS PrivateExtension/extId FN_VARIANT = _str VAL_PTR = &obj_id #.FN_BODY PrivateExtension/extType - proto_tree_add_text(tree, tvb, offset, -1, "Extension Data"); + proto_tree *ext_tree; + ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gsm_map_extention_data, NULL, "Extension Data"); if (obj_id){ - offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, tree, NULL); + offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, ext_tree, NULL); }else{ - call_dissector(data_handle, tvb, actx->pinfo, tree); + call_dissector(data_handle, tvb, actx->pinfo, ext_tree); offset = tvb_length_remaining(tvb,offset); } @@ -535,15 +536,15 @@ actx->pinfo->p2p_dir = P2P_DIR_RECV; switch(sms_encoding){ case SMS_ENCODING_7BIT: case SMS_ENCODING_7BIT_LANG: - proto_tree_add_text(tree, parameter_tvb , 0, length, "USSD String: %%s", tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_3GPP_TS_23_038_7BITS|ENC_NA)); + proto_tree_add_string(tree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_3GPP_TS_23_038_7BITS|ENC_NA)); break; case SMS_ENCODING_8BIT: /* XXX - ASCII, or some extended ASCII? */ - proto_tree_add_text(tree, parameter_tvb , 0, length, "USSD String: %%s", tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_ASCII|ENC_NA)); + proto_tree_add_string(tree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_ASCII|ENC_NA)); break; case SMS_ENCODING_UCS2: case SMS_ENCODING_UCS2_LANG: - proto_tree_add_text(tree, parameter_tvb , 0, length, "USSD String: %%s", tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_UCS_2|ENC_BIG_ENDIAN)); + proto_tree_add_string(tree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_UCS_2|ENC_BIG_ENDIAN)); break; default: break; @@ -741,7 +742,7 @@ if (!actx->value_ptr) /* TODO: There may be more than one IE */ break; default: - proto_tree_add_text(subtree, (tvbuff_t*)actx->value_ptr, 0, length, "If you want this decoded send the packet to Wireshark-dev"); + proto_tree_add_expert(subtree, actx->pinfo, &ei_gsm_map_undecoded, (tvbuff_t*)actx->value_ptr, 0, length); break; }/* switch(octet) */ break; @@ -821,7 +822,7 @@ if (!actx->value_ptr) /* TODO: There may be more than one IE */ break; default: - proto_tree_add_text(subtree, (tvbuff_t*)actx->value_ptr, 0, length, "If you want this decoded send the packet to Wireshark-dev"); + proto_tree_add_expert(subtree, actx->pinfo, &ei_gsm_map_undecoded, (tvbuff_t*)actx->value_ptr, 0, length); break; }/* switch(octet) */ break; diff --git a/asn1/gsm_map/packet-gsm_map-template.c b/asn1/gsm_map/packet-gsm_map-template.c index f507161db0..601e20691e 100644 --- a/asn1/gsm_map/packet-gsm_map-template.c +++ b/asn1/gsm_map/packet-gsm_map-template.c @@ -150,6 +150,7 @@ static int hf_gsm_map_ericsson_locationInformation_rat = -1; static int hf_gsm_map_ericsson_locationInformation_lac = -1; static int hf_gsm_map_ericsson_locationInformation_ci = -1; static int hf_gsm_map_ericsson_locationInformation_sac = -1; +static int hf_gsm_map_ussd_string = -1; #include "packet-gsm_map-hf.c" @@ -179,6 +180,7 @@ static gint ett_gsm_map_GeographicalInformation = -1; static gint ett_gsm_map_apn_str = -1; static gint ett_gsm_map_LocationNumber = -1; static gint ett_gsm_map_ericsson_locationInformation = -1; +static gint ett_gsm_map_extention_data = -1; #include "packet-gsm_map-ett.c" @@ -186,6 +188,7 @@ static expert_field ei_gsm_map_unknown_sequence3 = EI_INIT; static expert_field ei_gsm_map_unknown_sequence = EI_INIT; static expert_field ei_gsm_map_unknown_parameter = EI_INIT; static expert_field ei_gsm_map_unknown_invokeData = EI_INIT; +static expert_field ei_gsm_map_undecoded = EI_INIT; static dissector_handle_t gsm_sms_handle; /* SMS TPDU */ static dissector_handle_t data_handle; @@ -411,7 +414,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ octet = tvb_get_guint8(tvb,offset); switch (octet){ case 0: - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Maximum SDU size/Reserved"); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_qos_max_sdu, tvb, offset, 1, octet, "Reserved"); break; case 0x93: value = 1502; @@ -430,7 +433,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ value = octet * 10; proto_tree_add_uint(subtree, hf_gsm_map_qos_max_sdu, tvb, offset, 1, value); }else{ - proto_tree_add_text(subtree, tvb, offset, 1, "Maximum SDU size value 0x%x not defined in TS 24.008",octet); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_qos_max_sdu, tvb, offset, 1, octet, "0x%x not defined in TS 24.008", octet); } } offset++; @@ -438,7 +441,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ /* Maximum bit rate for uplink, octet 8 */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Maximum bit rate for uplink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_max_brate_ulink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_max_brate_ulink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -446,7 +449,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ /* Maximum bit rate for downlink, octet 9 (see 3GPP TS 23.107) */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Maximum bit rate for downlink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_max_brate_dlink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_max_brate_dlink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -468,7 +471,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Guaranteed bit rate for uplink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_guaranteed_max_brate_ulink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_guaranteed_max_brate_ulink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -479,7 +482,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Guaranteed bit rate for downlink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_guaranteed_max_brate_dlink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_guaranteed_max_brate_dlink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -1550,7 +1553,7 @@ static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset, break; case 61: /*unstructuredSS-Notify*/ /* TRUE ? */ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_gsm_map_unknown_invokeData, tvb, offset, -1, "Unknown returnResultData blob"); break; case 62: /*AnyTimeSubscriptionInterrogation*/ offset=dissect_gsm_map_ms_AnyTimeSubscriptionInterrogationRes(FALSE, tvb, offset, actx, tree, -1); @@ -2888,6 +2891,11 @@ void proto_register_gsm_map(void) { { "SAC", "gsm_map.ericsson.locationInformation.sac", FT_UINT16, BASE_DEC_HEX, NULL, 0, "Service Area Code", HFILL }}, + { &hf_gsm_map_ussd_string, + { "USSD String", "gsm_map.ussd_string", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + #include "packet-gsm_map-hfarr.c" }; @@ -2919,6 +2927,7 @@ void proto_register_gsm_map(void) { &ett_gsm_map_apn_str, &ett_gsm_map_LocationNumber, &ett_gsm_map_ericsson_locationInformation, + &ett_gsm_map_extention_data, #include "packet-gsm_map-ettarr.c" }; @@ -2928,6 +2937,7 @@ void proto_register_gsm_map(void) { { &ei_gsm_map_unknown_sequence, { "gsm_map.unknown.sequence", PI_UNDECODED, PI_ERROR, "Unknown or not implemented sequence", EXPFILL }}, { &ei_gsm_map_unknown_parameter, { "gsm_map.unknown.parameter", PI_UNDECODED, PI_ERROR, "Unknown or not implemented parameter", EXPFILL }}, { &ei_gsm_map_unknown_invokeData, { "gsm_map.unknown.invokeData", PI_MALFORMED, PI_WARN, "Unknown invokeData", EXPFILL }}, + { &ei_gsm_map_undecoded, { "gsm_map.undecoded", PI_UNDECODED, PI_WARN, "If you want this decoded send the packet to Wireshark-dev", EXPFILL }}, }; static const enum_val_t application_context_modes[] = { diff --git a/asn1/h225/h225.cnf b/asn1/h225/h225.cnf index 2bece14afe..b34a6dee49 100644 --- a/asn1/h225/h225.cnf +++ b/asn1/h225/h225.cnf @@ -666,12 +666,13 @@ H221NonStandard/manufacturerCode VAL_PTR = &manufacturerCode #.FN_HDR GenericIdentifier gef_ctx_t *gefx; + proto_item* ti; #.FN_FTR gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG GenericIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/ gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h225_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree, actx); } actx->private_data = gefx; /* subdissector could overwrite it */ @@ -699,11 +700,13 @@ H221NonStandard/manufacturerCode VAL_PTR = &manufacturerCode #.FN_BODY Content/raw VAL_PTR = &value_tvb tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h225_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } #.END diff --git a/asn1/h225/packet-h225-template.c b/asn1/h225/packet-h225-template.c index 74b01aa89e..c2aa870d64 100644 --- a/asn1/h225/packet-h225-template.c +++ b/asn1/h225/packet-h225-template.c @@ -101,6 +101,7 @@ static int hf_h225_ras_req_frame = -1; static int hf_h225_ras_rsp_frame = -1; static int hf_h225_ras_dup = -1; static int hf_h225_ras_deltatime = -1; +static int hf_h225_debug_dissector_try_string = -1; #include "packet-h225-hf.c" @@ -226,6 +227,9 @@ void proto_register_h225(void) { { &hf_h225_ras_deltatime, { "RAS Service Response Time", "h225.ras.timedelta", FT_RELATIVE_TIME, BASE_NONE, NULL, 0, "Timedelta between RAS-Request and RAS-Response", HFILL }}, + { &hf_h225_debug_dissector_try_string, + { "*** DEBUG dissector_try_string", "h225.debug.dissector_try_string", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, #include "packet-h225-hfarr.c" }; diff --git a/asn1/h245/h245.cnf b/asn1/h245/h245.cnf index 4368d27621..77ccec4a1a 100644 --- a/asn1/h245/h245.cnf +++ b/asn1/h245/h245.cnf @@ -633,7 +633,6 @@ if (h245_pi != NULL) if (gefx) { gefx->subid = wmem_strdup_printf(wmem_packet_scope(), "%%u", subMessageIdentifer); gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG CapabilityIdentifier: %%s", gef_ctx_get(actx->private_data)->key);*/ } if (hf_index == hf_h245_subMessageIdentifier_standard) { @@ -689,13 +688,15 @@ if (h245_pi != NULL) tvbuff_t *value_tvb; gef_ctx_t *parent_gefx; gef_ctx_t *gefx; + proto_item* ti; parent_gefx = gef_ctx_get(actx->private_data); actx->private_data = gef_ctx_alloc(parent_gefx, "nonCollapsingRaw"); %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } actx->private_data = parent_gefx; @@ -712,12 +713,14 @@ if (h245_pi != NULL) #.FN_HDR CapabilityIdentifier gef_ctx_t *gefx; + proto_item* ti; + #.FN_FTR gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG CapabilityIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/ gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree, actx); } actx->private_data = gefx; /* subdissector could overwrite it */ @@ -742,12 +745,13 @@ if (h245_pi != NULL) #---------------------------------------------------------------------------------------- #.FN_HDR ParameterIdentifier gef_ctx_t *gefx; + proto_item* ti; #.FN_FTR gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG ParameterIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/ gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree, actx); } actx->private_data = gefx; /* subdissector could overwrite it */ @@ -767,6 +771,7 @@ if (h245_pi != NULL) guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); @@ -774,7 +779,8 @@ if (h245_pi != NULL) buf = wmem_new(actx->pinfo->pool, guint8); buf[0] = value; value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint8), sizeof(guint8)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(%(ACTX)s->pinfo, value_tvb, "booleanArray"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } @@ -784,6 +790,7 @@ if (h245_pi != NULL) guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); @@ -791,7 +798,8 @@ if (h245_pi != NULL) buf = (guint8 *)wmem_new(actx->pinfo->pool, guint16); phton16(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint16), sizeof(guint16)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsignedMin"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } @@ -801,6 +809,7 @@ if (h245_pi != NULL) guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); @@ -808,7 +817,8 @@ if (h245_pi != NULL) buf = (guint8 *)wmem_new(actx->pinfo->pool, guint16); phton16(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint16), sizeof(guint16)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsignedMax"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } @@ -818,6 +828,7 @@ if (h245_pi != NULL) guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); @@ -825,7 +836,8 @@ if (h245_pi != NULL) buf = (guint8 *)wmem_new(actx->pinfo->pool, guint32); phton32(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint32), sizeof(guint32)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsigned32Min"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } @@ -835,6 +847,7 @@ if (h245_pi != NULL) guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); @@ -842,7 +855,8 @@ if (h245_pi != NULL) buf = (guint8 *)wmem_new(actx->pinfo->pool, guint32); phton32(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint32), sizeof(guint32)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsigned32Max"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } @@ -850,11 +864,13 @@ if (h245_pi != NULL) #.FN_BODY ParameterValue/octetString VAL_PTR = &value_tvb tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; %(DEFAULT_BODY)s gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); } #.END diff --git a/asn1/h245/packet-h245-template.c b/asn1/h245/packet-h245-template.c index 5fd7a7ae60..96035d73f9 100644 --- a/asn1/h245/packet-h245-template.c +++ b/asn1/h245/packet-h245-template.c @@ -79,6 +79,8 @@ static int hf_h245Manufacturer = -1; static int hf_h245_subMessageIdentifier_standard = -1; static int h245_tap = -1; static int h245dg_tap = -1; +static int hf_h245_debug_dissector_try_string = -1; + h245_packet_info *h245_pi=NULL; static gboolean h245_reassembly = TRUE; @@ -476,6 +478,9 @@ void proto_register_h245(void) { { "subMessageIdentifier", "h245.subMessageIdentifier.standard", FT_UINT32, BASE_DEC, VALS(h245_h239subMessageIdentifier_vals), 0, NULL, HFILL }}, + { &hf_h245_debug_dissector_try_string, + { "*** DEBUG dissector_try_string", "h245.debug.dissector_try_string", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, #include "packet-h245-hfarr.c" }; diff --git a/asn1/h248/packet-h248-template.c b/asn1/h248/packet-h248-template.c index a6a5127032..2d8fb1a664 100644 --- a/asn1/h248/packet-h248-template.c +++ b/asn1/h248/packet-h248-template.c @@ -93,6 +93,7 @@ static gcp_hf_ett_t h248_arrel = {{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1}}; static expert_field ei_h248_errored_command = EI_INIT; static expert_field ei_h248_transactionId64 = EI_INIT; static expert_field ei_h248_context_id64 = EI_INIT; +static expert_field ei_h248_octet_string_expected = EI_INIT; static dissector_table_t subdissector_table; @@ -1199,7 +1200,8 @@ static int dissect_h248_PropertyID(gboolean implicit_tag _U_, tvbuff_t *tvb, int if( (ber_class!=BER_CLASS_UNI) ||(tag!=BER_UNI_TAG_OCTETSTRING) ){ - proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2, + "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); return end_offset; } @@ -1281,7 +1283,8 @@ static int dissect_h248_SigParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb, if( (ber_class!=BER_CLASS_UNI) ||(tag!=BER_UNI_TAG_OCTETSTRING) ){ - proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2, + "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); return end_offset; } @@ -1359,7 +1362,8 @@ static int dissect_h248_EventParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb if( (ber_class!=BER_CLASS_UNI) ||(tag!=BER_UNI_TAG_OCTETSTRING) ){ - proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2, + "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); return end_offset; } @@ -1598,6 +1602,7 @@ void proto_register_h248(void) { { &ei_h248_errored_command, { "h248.errored_command", PI_RESPONSE_CODE, PI_WARN, "Errored Command", EXPFILL }}, { &ei_h248_transactionId64, { "h248.transactionId.error", PI_MALFORMED, PI_WARN, "Transaction ID invalid", EXPFILL }}, { &ei_h248_context_id64, { "h248.contextId.error", PI_MALFORMED, PI_WARN, "Context ID invalid", EXPFILL }}, + { &ei_h248_octet_string_expected, { "h248.octet_string_expected", PI_PROTOCOL, PI_WARN, "H.248 BER Error: OctetString expected", EXPFILL }}, }; expert_module_t* expert_h248; diff --git a/asn1/h450/packet-h450-template.c b/asn1/h450/packet-h450-template.c index 89a9313c1c..4516578eff 100644 --- a/asn1/h450/packet-h450-template.c +++ b/asn1/h450/packet-h450-template.c @@ -30,6 +30,7 @@ #include #include +#include #include @@ -55,6 +56,10 @@ static int hf_h450_error = -1; /* Initialize the subtree pointers */ #include "packet-h450-ett.c" +static expert_field ei_h450_unsupported_arg_type = EI_INIT; +static expert_field ei_h450_unsupported_result_type = EI_INIT; +static expert_field ei_h450_unsupported_error_type = EI_INIT; + static const value_string h450_str_operation[] = { #include "packet-h450-table10.c" { 0, NULL} @@ -149,7 +154,7 @@ dissect_h450_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->arg_pdu(tvb, pinfo, tree, NULL); else if (tvb_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(tree, tvb, offset, -1, "UNSUPPORTED ARGUMENT TYPE (H.450)"); + proto_tree_add_expert(tree, pinfo, &ei_h450_unsupported_arg_type, tvb, offset, -1); offset += tvb_length_remaining(tvb, offset); } @@ -194,7 +199,7 @@ dissect_h450_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->res_pdu(tvb, pinfo, tree, NULL); else if (tvb_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(tree, tvb, offset, -1, "UNSUPPORTED RESULT TYPE (H.450)"); + proto_tree_add_expert(tree, pinfo, &ei_h450_unsupported_result_type, tvb, offset, -1); offset += tvb_length_remaining(tvb, offset); } @@ -239,7 +244,7 @@ dissect_h450_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = err_ptr->err_pdu(tvb, pinfo, tree, NULL); else if (tvb_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(tree, tvb, offset, -1, "UNSUPPORTED ERROR TYPE (H.450)"); + proto_tree_add_expert(tree, pinfo, &ei_h450_unsupported_error_type, tvb, offset, -1); offset += tvb_length_remaining(tvb, offset); } @@ -265,6 +270,13 @@ void proto_register_h450(void) { #include "packet-h450-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_h450_unsupported_arg_type, { "h450.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (H.450)", EXPFILL }}, + { &ei_h450_unsupported_result_type, { "h450.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (H.450)", EXPFILL }}, + { &ei_h450_unsupported_error_type, { "h450.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (H.450)", EXPFILL }}, + }; + + expert_module_t* expert_h450; /* Register protocol */ proto_h450 = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -272,6 +284,8 @@ void proto_register_h450(void) { /* Register fields and subtrees */ proto_register_field_array(proto_h450, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_h450 = expert_register_protocol(proto_h450); + expert_register_field_array(expert_h450, ei, array_length(ei)); rose_ctx_init(&h450_rose_ctx); diff --git a/asn1/h460/packet-h460-template.c b/asn1/h460/packet-h460-template.c index de77b1b747..29e472af4e 100644 --- a/asn1/h460/packet-h460-template.c +++ b/asn1/h460/packet-h460-template.c @@ -229,9 +229,7 @@ dissect_h460_name(tvbuff_t *tvb _U_, packet_info *pinfo, proto_tree *tree, void DISSECTOR_ASSERT(actx); if (tree) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: %s", pinfo->match_string);*/ ftr = find_ftr(pinfo->match_string); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: ftr %s", (ftr)?ftr->name:"-none-");*/ if (ftr) { proto_item_append_text(actx->created_item, " - %s", ftr->name); proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name); diff --git a/asn1/idmp/packet-idmp-template.c b/asn1/idmp/packet-idmp-template.c index a908b4b7ce..4a04124506 100644 --- a/asn1/idmp/packet-idmp-template.c +++ b/asn1/idmp/packet-idmp-template.c @@ -81,6 +81,7 @@ static int hf_idmp_fragment_error = -1; static int hf_idmp_fragment_count = -1; static int hf_idmp_reassembled_in = -1; static int hf_idmp_reassembled_length = -1; +static int hf_idmp_segment_data = -1; static gint ett_idmp_fragment = -1; static gint ett_idmp_fragments = -1; @@ -197,9 +198,7 @@ static int dissect_idmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr idmp_length, !idmp_final); if(fd_head && fd_head->next) { - proto_tree_add_text(tree, tvb, offset, (idmp_length) ? -1 : 0, - "IDMP segment data (%u byte%s)", idmp_length, - plurality(idmp_length, "", "s")); + proto_tree_add_item(tree, hf_idmp_segment_data, tvb, offset, (idmp_length) ? -1 : 0, ENC_NA); if (idmp_final) { /* This is the last segment */ @@ -219,9 +218,8 @@ static int dissect_idmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr col_append_fstr(pinfo->cinfo, COL_INFO, " [IDMP fragment, %u byte%s, IDMP reassembly not enabled]", idmp_length, plurality(idmp_length, "", "s")); - proto_tree_add_text(tree, tvb, offset, (idmp_length) ? -1 : 0, - "IDMP segment data (%u byte%s) (IDMP reassembly not enabled)", idmp_length, - plurality(idmp_length, "", "s")); + proto_tree_add_bytes_format_value(tree, hf_idmp_segment_data, tvb, offset, (idmp_length) ? -1 : 0, + NULL, "(IDMP reassembly not enabled)"); } } /* not reassembling - just dissect */ @@ -310,6 +308,9 @@ void proto_register_idmp(void) { &hf_idmp_reassembled_length, { "Reassembled IDMP length", "idmp.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x00, "The total length of the reassembled payload", HFILL } }, + { &hf_idmp_segment_data, + { "IDMP segment data", "idmp.segment_data", FT_BYTES, BASE_NONE, + NULL, 0x00, NULL, HFILL } }, #include "packet-idmp-hfarr.c" }; diff --git a/asn1/inap/inap.cnf b/asn1/inap/inap.cnf index 6cb607ff5a..cee51492f6 100644 --- a/asn1/inap/inap.cnf +++ b/asn1/inap/inap.cnf @@ -212,11 +212,12 @@ static const inap_err_t inap_err_tab[] = { #.FN_PARS Code/global FN_VARIANT = _str VAL_PTR = &obj_id #.FN_BODY ExtensionField/value - proto_tree_add_text(tree, tvb, offset, -1, "Extension Data"); + proto_tree *ext_tree; + ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_inap_extention_data, NULL, "Extension Data"); if (obj_id){ - offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, tree, NULL); + offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, ext_tree, NULL); }else{ - call_dissector(data_handle, tvb, actx->pinfo, tree); + call_dissector(data_handle, tvb, actx->pinfo, ext_tree); offset = tvb_length_remaining(tvb,offset); } diff --git a/asn1/inap/packet-inap-template.c b/asn1/inap/packet-inap-template.c index 43b9184ec1..b1651f4bb9 100644 --- a/asn1/inap/packet-inap-template.c +++ b/asn1/inap/packet-inap-template.c @@ -79,6 +79,7 @@ static int inap_opcode_type; static gint ett_inap = -1; static gint ett_inapisup_parameter = -1; static gint ett_inap_HighLayerCompatibility = -1; +static gint ett_inap_extention_data = -1; #include "packet-inap-ett.c" static expert_field ei_inap_unknown_invokeData = EI_INIT; @@ -214,6 +215,7 @@ void proto_register_inap(void) { &ett_inap, &ett_inapisup_parameter, &ett_inap_HighLayerCompatibility, + &ett_inap_extention_data, #include "packet-inap-ettarr.c" }; diff --git a/asn1/isdn-sup/packet-isdn-sup-template.c b/asn1/isdn-sup/packet-isdn-sup-template.c index 235b3595f0..68333e5792 100644 --- a/asn1/isdn-sup/packet-isdn-sup-template.c +++ b/asn1/isdn-sup/packet-isdn-sup-template.c @@ -27,7 +27,7 @@ #include #include - +#include #include "packet-ber.h" @@ -91,6 +91,9 @@ static gint ett_isdn_sup = -1; #include "packet-isdn-sup-ett.c" +static expert_field ei_isdn_sup_unsupported_arg_type = EI_INIT; +static expert_field ei_isdn_sup_unsupported_result_type = EI_INIT; +static expert_field ei_isdn_sup_unsupported_error_type = EI_INIT; /* Preference settings default */ @@ -177,7 +180,7 @@ dissect_isdn_sup_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * offset = op_ptr->arg_pdu(tvb, pinfo, isdn_sup_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(isdn_sup_tree, tvb, offset, -1, "UNSUPPORTED ARGUMENT TYPE (ETSI Sup)"); + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1); offset += tvb_reported_length_remaining(tvb, offset); } @@ -226,7 +229,7 @@ dissect_isdn_sup_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * offset = op_ptr->res_pdu(tvb, pinfo, isdn_sup_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(isdn_sup_tree, tvb, offset, -1, "UNSUPPORTED RESULT TYPE (ETSI sup)"); + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_result_type, tvb, offset, -1); offset += tvb_reported_length_remaining(tvb, offset); } @@ -276,7 +279,7 @@ dissect_isdn_sup_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * offset = err_ptr->err_pdu(tvb, pinfo, isdn_sup_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(isdn_sup_tree, tvb, offset, -1, "UNSUPPORTED ERROR TYPE (ETSI sup)"); + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1); offset += tvb_reported_length_remaining(tvb, offset); } @@ -352,11 +355,20 @@ void proto_register_isdn_sup(void) { #include "packet-isdn-sup-ettarr.c" }; - /* Register fields and subtrees */ - proto_register_field_array(proto_isdn_sup, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + static ei_register_info ei[] = { + { &ei_isdn_sup_unsupported_arg_type, { "isdn_sup.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (ETSI sup)", EXPFILL }}, + { &ei_isdn_sup_unsupported_result_type, { "isdn_sup.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (ETSI sup)", EXPFILL }}, + { &ei_isdn_sup_unsupported_error_type, { "isdn_sup.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (ETSI sup)", EXPFILL }}, + }; + + expert_module_t* expert_isdn_sup; /* Register protocol */ proto_isdn_sup = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_isdn_sup, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + expert_isdn_sup = expert_register_protocol(proto_isdn_sup); + expert_register_field_array(expert_isdn_sup, ei, array_length(ei)); } diff --git a/asn1/kerberos/kerberos.cnf b/asn1/kerberos/kerberos.cnf index e142d6ca8b..4059cb9b89 100644 --- a/asn1/kerberos/kerberos.cnf +++ b/asn1/kerberos/kerberos.cnf @@ -202,7 +202,7 @@ guint32 msgtype; address_str = tvb_ip6_to_str(tvb, offset); break; default: - proto_tree_add_text(tree, tvb, offset, len, "KRB Address: I dont know how to parse this type of address yet"); + proto_tree_add_expert(tree, actx->pinfo, &ei_kerberos_address, tvb, offset, len); address_str = NULL; } diff --git a/asn1/kerberos/packet-kerberos-template.c b/asn1/kerberos/packet-kerberos-template.c index fda91937d8..e1a21854c6 100644 --- a/asn1/kerberos/packet-kerberos-template.c +++ b/asn1/kerberos/packet-kerberos-template.c @@ -147,6 +147,8 @@ static gint ett_krb_recordmark = -1; #include "packet-kerberos-ett.c" static expert_field ei_kerberos_decrypted_keytype = EI_INIT; +static expert_field ei_kerberos_address = EI_INIT; +static expert_field ei_krb_gssapi_dlglen = EI_INIT; static dissector_handle_t krb4_handle=NULL; @@ -348,7 +350,7 @@ read_keytab_file(const char *filename) guint8 * -decrypt_krb5_data(proto_tree *tree, packet_info *pinfo, +decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, int usage, tvbuff_t *cryptotvb, int keytype, @@ -398,7 +400,6 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo, "Decrypted keytype %d in frame %u using %s", ek->keytype, pinfo->fd->num, ek->key_origin); - proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin); /* return a private g_malloced blob to the caller */ user_data=data.data; if (datalen) { @@ -544,8 +545,10 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo, if((ret == 0) && (length>0)){ char *user_data; -printf("woohoo decrypted keytype:%d in frame:%u\n", ek->keytype, pinfo->fd->num); - proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin); + expert_add_info_format(pinfo, NULL, &ei_kerberos_decrypted_keytype, + "Decrypted keytype %d in frame %u using %s", + ek->keytype, pinfo->fd->num, ek->key_origin); + krb5_crypto_destroy(krb5_ctx, crypto); /* return a private g_malloced blob to the caller */ user_data=g_memdup(data.data, data.length); @@ -1591,7 +1594,8 @@ dissect_krb5_rfc1964_checksum(asn1_ctx_t *actx _U_, proto_tree *tree, tvbuff_t * offset += 2; if(dlglen!=tvb_reported_length_remaining(tvb, offset)){ - proto_tree_add_text(tree, tvb, 0, 0, "Error: DlgLen:%d is not the same as number of bytes remaining:%d", dlglen, tvb_captured_length_remaining(tvb, offset)); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_krb_gssapi_dlglen, tvb, 0, 0, + "Error: DlgLen:%d is not the same as number of bytes remaining:%d", dlglen, tvb_captured_length_remaining(tvb, offset)); return offset; } @@ -1778,16 +1782,14 @@ void show_krb_recordmark(proto_tree *tree, tvbuff_t *tvb, gint start, guint32 krb_rm) { gint rec_len; - proto_item *rm_item; proto_tree *rm_tree; if (tree == NULL) return; rec_len = kerberos_rm_to_reclen(krb_rm); - rm_item = proto_tree_add_text(tree, tvb, start, 4, - "Record Mark: %u %s", rec_len, plurality(rec_len, "byte", "bytes")); - rm_tree = proto_item_add_subtree(rm_item, ett_krb_recordmark); + rm_tree = proto_tree_add_subtree_format(tree, tvb, start, 4, ett_krb_recordmark, NULL, + "Record Mark: %u %s", rec_len, plurality(rec_len, "byte", "bytes")); proto_tree_add_boolean(rm_tree, hf_krb_rm_reserved, tvb, start, 4, krb_rm); proto_tree_add_uint(rm_tree, hf_krb_rm_reclen, tvb, start, 4, krb_rm); } @@ -1955,6 +1957,8 @@ void proto_register_kerberos(void) { static ei_register_info ei[] = { { &ei_kerberos_decrypted_keytype, { "kerberos.decrypted_keytype", PI_SECURITY, PI_CHAT, "Decryted keytype", EXPFILL }}, + { &ei_kerberos_address, { "kerberos.address.unknown", PI_UNDECODED, PI_WARN, "KRB Address: I dont know how to parse this type of address yet", EXPFILL }}, + { &ei_krb_gssapi_dlglen, { "kerberos.gssapi.dlglen.error", PI_MALFORMED, PI_ERROR, "DlgLen is not the same as number of bytes remaining", EXPFILL }}, }; expert_module_t* expert_krb; diff --git a/asn1/ldap/ldap.cnf b/asn1/ldap/ldap.cnf index f4938c5622..4e4623badf 100644 --- a/asn1/ldap/ldap.cnf +++ b/asn1/ldap/ldap.cnf @@ -794,19 +794,19 @@ offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, &v ett_ldap_DirSyncFlagsSubEntry, NULL, "%s: 0x%08x", hfinfo->name, val); if (val & 0x1) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Object_Security"); + proto_tree_add_boolean(subtree, hf_ldap_object_security_flag, tvb, otheroffset+1, len, TRUE); } if (val & 0x800) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Ancestor_First"); + proto_tree_add_boolean(subtree, hf_ldap_ancestor_first_flag, tvb, otheroffset+1, len, TRUE); } if (val & 0x2000) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Public_Data_Only"); + proto_tree_add_boolean(subtree, hf_ldap_public_data_only_flag, tvb, otheroffset+1, len, TRUE); } if (val & 0x80000000) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Incremental_Value"); + proto_tree_add_boolean(subtree, hf_ldap_incremental_value_flag, tvb, otheroffset+1, len, TRUE); } } else { - proto_tree_add_text(tree, tvb, otheroffset+len, len, "%s: 0", hfinfo->name); + proto_tree_add_uint(tree, hf_index, tvb, otheroffset+len, len, 0); } #.FN_BODY SearchResultReference diff --git a/asn1/ldap/packet-ldap-template.c b/asn1/ldap/packet-ldap-template.c index 597d66d6d0..06b13dcfd8 100644 --- a/asn1/ldap/packet-ldap-template.c +++ b/asn1/ldap/packet-ldap-template.c @@ -186,6 +186,12 @@ static int hf_ldap_AccessMask_ADS_DELETE_TREE = -1; static int hf_ldap_AccessMask_ADS_LIST_OBJECT = -1; static int hf_ldap_AccessMask_ADS_CONTROL_ACCESS = -1; static int hf_ldap_LDAPMessage_PDU = -1; +static int hf_ldap_object_security_flag = -1; +static int hf_ldap_ancestor_first_flag = -1; +static int hf_ldap_public_data_only_flag = -1; +static int hf_ldap_incremental_value_flag = -1; +static int hf_ldap_oid = -1; +static int hf_ldap_gssapi_encrypted_payload = -1; #include "packet-ldap-hf.c" @@ -1269,12 +1275,7 @@ static void sasl_len - ver_len, plurality(sasl_len - ver_len, "", "s")); - if (sasl_tree) { - proto_tree_add_text(sasl_tree, gssapi_tvb, ver_len, -1, - "GSS-API Encrypted payload (%d byte%s)", - sasl_len - ver_len, - plurality(sasl_len - ver_len, "", "s")); - } + proto_tree_add_item(sasl_tree, hf_ldap_gssapi_encrypted_payload, gssapi_tvb, ver_len, -1, ENC_NA); } } } else { @@ -1676,58 +1677,21 @@ dissect_ldap_oid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) oidname=oid_resolved_from_string(oid); if(oidname){ - proto_tree_add_text(tree, tvb, 0, tvb_captured_length(tvb), "OID: %s (%s)",oid,oidname); + proto_tree_add_string_format_value(tree, hf_ldap_oid, tvb, 0, tvb_captured_length(tvb), oid, "%s (%s)",oid,oidname); } else { - proto_tree_add_text(tree, tvb, 0, tvb_captured_length(tvb), "OID: %s",oid); + proto_tree_add_string(tree, hf_ldap_oid, tvb, 0, tvb_captured_length(tvb), oid); } } #define LDAP_ACCESSMASK_ADS_CREATE_CHILD 0x00000001 -static const true_false_string ldap_AccessMask_ADS_CREATE_CHILD_tfs = { - "ADS CREATE CHILD is SET", - "Ads create child is NOT set", -}; - #define LDAP_ACCESSMASK_ADS_DELETE_CHILD 0x00000002 -static const true_false_string ldap_AccessMask_ADS_DELETE_CHILD_tfs = { - "ADS DELETE CHILD is SET", - "Ads delete child is NOT set", -}; #define LDAP_ACCESSMASK_ADS_LIST 0x00000004 -static const true_false_string ldap_AccessMask_ADS_LIST_tfs = { - "ADS LIST is SET", - "Ads list is NOT set", -}; #define LDAP_ACCESSMASK_ADS_SELF_WRITE 0x00000008 -static const true_false_string ldap_AccessMask_ADS_SELF_WRITE_tfs = { - "ADS SELF WRITE is SET", - "Ads self write is NOT set", -}; #define LDAP_ACCESSMASK_ADS_READ_PROP 0x00000010 -static const true_false_string ldap_AccessMask_ADS_READ_PROP_tfs = { - "ADS READ PROP is SET", - "Ads read prop is NOT set", -}; #define LDAP_ACCESSMASK_ADS_WRITE_PROP 0x00000020 -static const true_false_string ldap_AccessMask_ADS_WRITE_PROP_tfs = { - "ADS WRITE PROP is SET", - "Ads write prop is NOT set", -}; #define LDAP_ACCESSMASK_ADS_DELETE_TREE 0x00000040 -static const true_false_string ldap_AccessMask_ADS_DELETE_TREE_tfs = { - "ADS DELETE TREE is SET", - "Ads delete tree is NOT set", -}; #define LDAP_ACCESSMASK_ADS_LIST_OBJECT 0x00000080 -static const true_false_string ldap_AccessMask_ADS_LIST_OBJECT_tfs = { - "ADS LIST OBJECT is SET", - "Ads list object is NOT set", -}; #define LDAP_ACCESSMASK_ADS_CONTROL_ACCESS 0x00000100 -static const true_false_string ldap_AccessMask_ADS_CONTROL_ACCESS_tfs = { - "ADS CONTROL ACCESS is SET", - "Ads control access is NOT set", -}; static void ldap_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) @@ -2208,35 +2172,55 @@ void proto_register_ldap(void) { NULL, 0, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_CREATE_CHILD, - { "Create Child", "ldap.AccessMask.ADS_CREATE_CHILD", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_CREATE_CHILD_tfs), LDAP_ACCESSMASK_ADS_CREATE_CHILD, NULL, HFILL }}, + { "Ads Create Child", "ldap.AccessMask.ADS_CREATE_CHILD", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_CREATE_CHILD, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_DELETE_CHILD, - { "Delete Child", "ldap.AccessMask.ADS_DELETE_CHILD", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_DELETE_CHILD_tfs), LDAP_ACCESSMASK_ADS_DELETE_CHILD, NULL, HFILL }}, + { "Ads Delete Child", "ldap.AccessMask.ADS_DELETE_CHILD", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_DELETE_CHILD, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_LIST, - { "List", "ldap.AccessMask.ADS_LIST", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_LIST_tfs), LDAP_ACCESSMASK_ADS_LIST, NULL, HFILL }}, + { "Ads List", "ldap.AccessMask.ADS_LIST", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_LIST, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_SELF_WRITE, - { "Self Write", "ldap.AccessMask.ADS_SELF_WRITE", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_SELF_WRITE_tfs), LDAP_ACCESSMASK_ADS_SELF_WRITE, NULL, HFILL }}, + { "Ads Self Write", "ldap.AccessMask.ADS_SELF_WRITE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_SELF_WRITE, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_READ_PROP, - { "Read Prop", "ldap.AccessMask.ADS_READ_PROP", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_READ_PROP_tfs), LDAP_ACCESSMASK_ADS_READ_PROP, NULL, HFILL }}, + { "Ads Read Prop", "ldap.AccessMask.ADS_READ_PROP", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_READ_PROP, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_WRITE_PROP, - { "Write Prop", "ldap.AccessMask.ADS_WRITE_PROP", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_WRITE_PROP_tfs), LDAP_ACCESSMASK_ADS_WRITE_PROP, NULL, HFILL }}, + { "Ads Write Prop", "ldap.AccessMask.ADS_WRITE_PROP", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_WRITE_PROP, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_DELETE_TREE, - { "Delete Tree", "ldap.AccessMask.ADS_DELETE_TREE", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_DELETE_TREE_tfs), LDAP_ACCESSMASK_ADS_DELETE_TREE, NULL, HFILL }}, + { "Ads Delete Tree", "ldap.AccessMask.ADS_DELETE_TREE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_DELETE_TREE, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_LIST_OBJECT, - { "List Object", "ldap.AccessMask.ADS_LIST_OBJECT", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_LIST_OBJECT_tfs), LDAP_ACCESSMASK_ADS_LIST_OBJECT, NULL, HFILL }}, + { "Ads List Object", "ldap.AccessMask.ADS_LIST_OBJECT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_LIST_OBJECT, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_CONTROL_ACCESS, - { "Control Access", "ldap.AccessMask.ADS_CONTROL_ACCESS", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_CONTROL_ACCESS_tfs), LDAP_ACCESSMASK_ADS_CONTROL_ACCESS, NULL, HFILL }}, + { "Ads Control Access", "ldap.AccessMask.ADS_CONTROL_ACCESS", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_CONTROL_ACCESS, NULL, HFILL }}, { &hf_ldap_LDAPMessage_PDU, { "LDAPMessage", "ldap.LDAPMessage_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_ldap_object_security_flag, + { "Flag Object_Security", "ldap.object_security_flag", FT_BOOLEAN, 32, NULL, 0x00000001, NULL, HFILL }}, + + { &hf_ldap_ancestor_first_flag, + { "Flag Ancestor_First", "ldap.ancestor_first_flag", FT_BOOLEAN, 32, NULL, 0x00000800, NULL, HFILL }}, + + { &hf_ldap_public_data_only_flag, + { "Flag Public_Data_Only", "ldap.public_data_only_flag", FT_BOOLEAN, 32, NULL, 0x00002000, NULL, HFILL }}, + + { &hf_ldap_incremental_value_flag, + { "Flag Incremental_Value", "ldap.incremental_value_flag", FT_BOOLEAN, 32, NULL, 0x80000000, NULL, HFILL }}, + + { &hf_ldap_oid, + { "OID", "ldap.oid", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, + + { &hf_ldap_gssapi_encrypted_payload, + { "GSS-API Encrypted payload", "ldap.gssapi_encrypted_payload", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, + #include "packet-ldap-hfarr.c" }; diff --git a/asn1/lte-rrc/lte-rrc.cnf b/asn1/lte-rrc/lte-rrc.cnf index f8e11dfa30..bf3d57f5d6 100644 --- a/asn1/lte-rrc/lte-rrc.cnf +++ b/asn1/lte-rrc/lte-rrc.cnf @@ -359,8 +359,8 @@ if(ue_cap_tvb){ bits = tvb_get_bits64(async_system_time_tvb, 0, 49, ENC_BIG_ENDIAN); ts.secs = (time_t)((bits*8)/1228800) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */ ts.nsecs = (int)(((bits%153600)*8*1000000000)/1228800); - proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "CDMA time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_UTC, FALSE)); - proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_LOCAL, TRUE)); + proto_tree_add_time(subtree, hf_lte_rrc_cdma_time, async_system_time_tvb, 0, -1, &ts); + proto_tree_add_time(subtree, hf_lte_rrc_local_time, async_system_time_tvb, 0, -1,&ts); } #.FN_BODY SystemTimeInfoCDMA2000/cdma-SystemTime/synchronousSystemTime VAL_PTR=&sync_system_time_tvb @@ -376,8 +376,8 @@ if(ue_cap_tvb){ bits = tvb_get_bits64(sync_system_time_tvb, 0, 39, ENC_BIG_ENDIAN); ts.secs = (time_t)(bits/100) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */ ts.nsecs = (int)(bits%100)*10000000; - proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "CDMA time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_UTC, FALSE)); - proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_LOCAL, TRUE)); + proto_tree_add_time(subtree, hf_lte_rrc_cdma_time, sync_system_time_tvb, 0, -1, &ts); + proto_tree_add_time(subtree, hf_lte_rrc_local_time, sync_system_time_tvb, 0, -1, &ts); } #.FN_BODY CellInfoUTRA-FDD-r9/utra-BCCH-Container-r9 VAL_PTR = &utra_bcch_cont_tvb @@ -489,12 +489,13 @@ NeighCellConfig TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lte_rrc_neighCellCon %(DEFAULT_BODY)s #.FN_FTR AbsoluteTimeInfo-r10 if (abs_time_info_tvb) { - const gchar *str; + const gchar *str, *hf_str; proto_tree *subtree; subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_absTimeInfo); str = tvb_bcd_dig_to_wmem_packet_str(abs_time_info_tvb, 0, 6, NULL, FALSE); - proto_tree_add_text(subtree, abs_time_info_tvb, 0, 6, "%c%c-%c%c-%c%c %c%c:%c%c:%c%c", str[0], str[1], + hf_str = wmem_strdup_printf(wmem_packet_scope(), "%c%c-%c%c-%c%c %c%c:%c%c:%c%c", str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7], str[8], str[9], str[10], str[11]); + proto_tree_add_string(subtree, hf_lte_rrc_absolute_time, abs_time_info_tvb, 0, 6, hf_str); } #.TYPE_ATTR @@ -687,10 +688,8 @@ SystemInformationBlockType16-r11/timeInfo-r11/timeInfoUTC-r11 TYPE = FT_UINT64 subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo); ts.secs = (time_t)(timeInfo/100)-2208988800U; /* epoch is 00:00:00 (midnight) UTC on 1900-01-01 */ ts.nsecs = (int)(timeInfo%100)*10000000; - proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, - "UTC time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_UTC, FALSE)); - proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, - "Local time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_LOCAL, TRUE)); + proto_tree_add_time(subtree, hf_lte_rrc_utc_time, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, &ts); + proto_tree_add_time(subtree, hf_lte_rrc_local_time, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, &ts); #.FN_BODY RRCConnectionReject-r8-IEs/waitTime %(DEFAULT_BODY)s diff --git a/asn1/lte-rrc/packet-lte-rrc-template.c b/asn1/lte-rrc/packet-lte-rrc-template.c index 2b2bd33da3..7f2916939b 100644 --- a/asn1/lte-rrc/packet-lte-rrc-template.c +++ b/asn1/lte-rrc/packet-lte-rrc-template.c @@ -189,6 +189,10 @@ static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit1 = -1; static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit2 = -1; static int hf_lte_rrc_sr_config_periodicity = -1; static int hf_lte_rrc_sr_config_subframe_offset = -1; +static int hf_lte_rrc_cdma_time = -1; +static int hf_lte_rrc_utc_time = -1; +static int hf_lte_rrc_local_time = -1; +static int hf_lte_rrc_absolute_time = -1; /* Initialize the subtree pointers */ static int ett_lte_rrc = -1; @@ -2832,6 +2836,22 @@ void proto_register_lte_rrc(void) { { "Subframe Offset", "lte-rrc.sr_SubframeOffset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_lte_rrc_cdma_time, + { "CDMA time", "lte-rrc.cdma_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL }}, + { &hf_lte_rrc_utc_time, + { "UTC time", "lte-rrc.utc_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL }}, + { &hf_lte_rrc_local_time, + { "Local time", "lte-rrc.local_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL }}, + { &hf_lte_rrc_absolute_time, + { "Absolute time", "lte-rrc.absolute_time", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL }}, }; /* List of subtrees */ diff --git a/asn1/mms/packet-mms-template.c b/asn1/mms/packet-mms-template.c index 338d16ad2c..22fd240fd4 100644 --- a/asn1/mms/packet-mms-template.c +++ b/asn1/mms/packet-mms-template.c @@ -51,6 +51,7 @@ static gint ett_mms = -1; static expert_field ei_mms_mal_timeofday_encoding = EI_INIT; static expert_field ei_mms_mal_utctime_encoding = EI_INIT; +static expert_field ei_mms_zero_pdu = EI_INIT; #include "packet-mms-fn.c" @@ -78,7 +79,7 @@ dissect_mms(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset=offset; offset=dissect_mms_MMSpdu(FALSE, tvb, offset, &asn1_ctx , tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte MMS PDU"); + proto_tree_add_expert(tree, pinfo, &ei_mms_zero_pdu, tvb, offset, -1); break; } } @@ -103,6 +104,7 @@ void proto_register_mms(void) { static ei_register_info ei[] = { { &ei_mms_mal_timeofday_encoding, { "mms.malformed.timeofday_encoding", PI_MALFORMED, PI_WARN, "BER Error: malformed TimeOfDay encoding", EXPFILL }}, { &ei_mms_mal_utctime_encoding, { "mms.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed IEC61850 UTCTime encoding", EXPFILL }}, + { &ei_mms_zero_pdu, { "mms.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte MMS PDU", EXPFILL }}, }; expert_module_t* expert_mms; diff --git a/asn1/p1/packet-p1-template.c b/asn1/p1/packet-p1-template.c index 63a5b8462d..4c5825adf8 100644 --- a/asn1/p1/packet-p1-template.c +++ b/asn1/p1/packet-p1-template.c @@ -78,6 +78,8 @@ static expert_field ei_p1_unknown_extension_attribute_type = EI_INIT; static expert_field ei_p1_unknown_standard_extension = EI_INIT; static expert_field ei_p1_unknown_built_in_content_type = EI_INIT; static expert_field ei_p1_unknown_tokendata_type = EI_INIT; +static expert_field ei_p1_unsupported_pdu = EI_INIT; +static expert_field ei_p1_zero_pdu = EI_INIT; /* Dissector tables */ static dissector_table_t p1_extension_dissector_table; @@ -271,7 +273,7 @@ dissect_p1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* dat hf_p1_index = hf_p1_MTS_APDU_PDU; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported P1 PDU"); + proto_tree_add_expert(tree, pinfo, &ei_p1_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -281,7 +283,7 @@ dissect_p1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* dat old_offset=offset; offset=(*p1_dissector)(FALSE, tvb, offset, &asn1_ctx , tree, hf_p1_index); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte P1 PDU"); + proto_tree_add_expert(tree, pinfo, &ei_p1_zero_pdu, tvb, offset, -1); break; } } @@ -335,6 +337,8 @@ void proto_register_p1(void) { { &ei_p1_unknown_standard_extension, { "p1.unknown.standard_extension", PI_UNDECODED, PI_WARN, "Unknown standard-extension", EXPFILL }}, { &ei_p1_unknown_built_in_content_type, { "p1.unknown.built_in_content_type", PI_UNDECODED, PI_WARN, "P1 Unknown Content (unknown built-in content-type)", EXPFILL }}, { &ei_p1_unknown_tokendata_type, { "p1.unknown.tokendata_type", PI_UNDECODED, PI_WARN, "Unknown tokendata-type", EXPFILL }}, + { &ei_p1_unsupported_pdu, { "p1.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported P1 PDU", EXPFILL }}, + { &ei_p1_zero_pdu, { "p1.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte P1 PDU", EXPFILL }}, }; expert_module_t* expert_p1; diff --git a/asn1/pkcs12/packet-pkcs12-template.c b/asn1/pkcs12/packet-pkcs12-template.c index 113b4fb046..bdfe126978 100644 --- a/asn1/pkcs12/packet-pkcs12-template.c +++ b/asn1/pkcs12/packet-pkcs12-template.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -65,6 +66,9 @@ static int proto_pkcs12 = -1; static int hf_pkcs12_X509Certificate_PDU = -1; static gint ett_decrypted_pbe = -1; +static expert_field ei_pkcs12_octet_string_expected = EI_INIT; + + static const char *object_identifier_id = NULL; static int iteration_count = 0; static tvbuff_t *salt = NULL; @@ -418,7 +422,7 @@ static void dissect_AuthenticatedSafe_OCTETSTRING_PDU(tvbuff_t *tvb, packet_info if((offset = strip_octet_string(tvb)) > 0) dissect_pkcs12_AuthenticatedSafe(FALSE, tvb, offset, &asn1_ctx, tree, hf_pkcs12_AuthenticatedSafe_PDU); else - proto_tree_add_text(tree, tvb, 0, 1, "BER Error: OCTET STRING expected"); + proto_tree_add_expert(tree, pinfo, &ei_pkcs12_octet_string_expected, tvb, 0, 1); } static void dissect_SafeContents_OCTETSTRING_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -441,7 +445,7 @@ static void dissect_X509Certificate_OCTETSTRING_PDU(tvbuff_t *tvb, packet_info * if((offset = strip_octet_string(tvb)) > 0) dissect_x509af_Certificate(FALSE, tvb, offset, &asn1_ctx, tree, hf_pkcs12_X509Certificate_PDU); else - proto_tree_add_text(tree, tvb, 0, 1, "BER Error: OCTET STRING expected"); + proto_tree_add_expert(tree, pinfo, &ei_pkcs12_octet_string_expected, tvb, 0, 1); } /*--- proto_register_pkcs12 ----------------------------------------------*/ @@ -461,7 +465,12 @@ void proto_register_pkcs12(void) { &ett_decrypted_pbe, #include "packet-pkcs12-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_pkcs12_octet_string_expected, { "pkcs12.octet_string_expected", PI_PROTOCOL, PI_WARN, "BER Error: OCTET STRING expected", EXPFILL }}, + }; + module_t *pkcs12_module; + expert_module_t* expert_pkcs12; /* Register protocol */ proto_pkcs12 = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -469,6 +478,8 @@ void proto_register_pkcs12(void) { /* Register fields and subtrees */ proto_register_field_array(proto_pkcs12, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_pkcs12 = expert_register_protocol(proto_pkcs12); + expert_register_field_array(expert_pkcs12, ei, array_length(ei)); /* Register preferences */ pkcs12_module = prefs_register_protocol(proto_pkcs12, NULL); diff --git a/asn1/pres/packet-pres-template.c b/asn1/pres/packet-pres-template.c index 07dda48452..3b9a86a344 100644 --- a/asn1/pres/packet-pres-template.c +++ b/asn1/pres/packet-pres-template.c @@ -97,6 +97,8 @@ static gint ett_pres = -1; #include "packet-pres-ett.c" static expert_field ei_pres_dissector_not_available = EI_INIT; +static expert_field ei_pres_wrong_spdu_type = EI_INIT; +static expert_field ei_pres_invalid_offset = EI_INIT; UAT_DEC_CB_DEF(pres_users, ctx_id, pres_user_t) UAT_CSTRING_CB_DEF(pres_users, oid, pres_user_t) @@ -238,14 +240,13 @@ dissect_ppdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, st /* do we have spdu type from the session dissector? */ if( local_session == NULL ){ - proto_tree_add_text(tree, tvb, offset, -1, - "Internal error:can't get spdu type from session dissector."); + proto_tree_add_expert(tree, pinfo, &ei_pres_wrong_spdu_type, tvb, offset, -1); return 0; } session = local_session; if(session->spdu_type == 0 ){ - proto_tree_add_text(tree, tvb, offset, -1, + proto_tree_add_expert_format(tree, pinfo, &ei_pres_wrong_spdu_type, tvb, offset, -1, "Internal error:wrong spdu type %x from session dissector.",session->spdu_type); return 0; } @@ -305,8 +306,8 @@ dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d /* do we have at least 4 bytes */ if (!tvb_bytes_exist(tvb, 0, 4)){ if (session && session->spdu_type != SES_MAJOR_SYNC_POINT) { - proto_tree_add_text(parent_tree, tvb, offset, - tvb_reported_length_remaining(tvb,offset),"User data"); + proto_tree_add_item(parent_tree, hf_pres_user_data, tvb, offset, + tvb_reported_length_remaining(tvb,offset), ENC_NA); return 0; /* no, it isn't a presentation PDU */ } } @@ -348,8 +349,8 @@ dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d if (oid) { call_ber_oid_callback (oid, tvb, offset, pinfo, parent_tree, session); } else { - proto_tree_add_text(parent_tree, tvb, offset, - tvb_reported_length_remaining(tvb,offset),"User data"); + proto_tree_add_item(parent_tree, hf_pres_user_data, tvb, offset, + tvb_reported_length_remaining(tvb,offset), ENC_NA); } return tvb_captured_length(tvb); } @@ -358,8 +359,8 @@ dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d old_offset = offset; offset = dissect_ppdu(tvb, offset, pinfo, parent_tree, session); if(offset <= old_offset){ - proto_tree_add_text(parent_tree, tvb, offset, -1,"Invalid offset"); - THROW(ReportedBoundsError); + proto_tree_add_expert(parent_tree, pinfo, &ei_pres_invalid_offset, tvb, offset, -1); + break; } } @@ -393,7 +394,6 @@ void proto_register_pres(void) { FT_UINT32, BASE_DEC, VALS(pres_Typed_data_type_vals), 0, NULL, HFILL }}, - #include "packet-pres-hfarr.c" }; @@ -405,6 +405,8 @@ void proto_register_pres(void) { static ei_register_info ei[] = { { &ei_pres_dissector_not_available, { "pres.dissector_not_available", PI_UNDECODED, PI_WARN, "Dissector is not available", EXPFILL }}, + { &ei_pres_wrong_spdu_type, { "pres.wrong_spdu_type", PI_PROTOCOL, PI_WARN, "Internal error:can't get spdu type from session dissector", EXPFILL }}, + { &ei_pres_invalid_offset, { "pres.invalid_offset", PI_MALFORMED, PI_ERROR, "Internal error:can't get spdu type from session dissector", EXPFILL }}, }; static uat_field_t users_flds[] = { diff --git a/asn1/q932/packet-q932-template.c b/asn1/q932/packet-q932-template.c index 8fe66eac00..e1cf733d6d 100644 --- a/asn1/q932/packet-q932-template.c +++ b/asn1/q932/packet-q932-template.c @@ -24,6 +24,7 @@ #include "config.h" #include +#include #include #include #include @@ -51,6 +52,12 @@ static gint ett_q932 = -1; static gint ett_q932_ie = -1; #include "packet-q932-ett.c" +static expert_field ei_q932_dse_not_supported = EI_INIT; +static expert_field ei_q932_acse_not_supported = EI_INIT; +static expert_field ei_q932_unknown_component = EI_INIT; +static expert_field ei_q932_asn1_encoded = EI_INIT; + + /* Preferences */ /* ROSE context */ @@ -179,12 +186,12 @@ dissect_q932_facility_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr case 17 : /* abort */ offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "DSE APDU (not supported)"); + proto_tree_add_expert(tree, pinfo, &ei_q932_dse_not_supported, tvb, offset, len); break; default: offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "Unknown Component"); + proto_tree_add_expert(tree, pinfo, &ei_q932_unknown_component, tvb, offset, len); } break; case BER_CLASS_APP: @@ -197,18 +204,18 @@ dissect_q932_facility_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr case 4 : /* abrt */ offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "ACSE APDU (not supported)"); + proto_tree_add_expert(tree, pinfo, &ei_q932_acse_not_supported, tvb, offset, len); break; default: offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "Unknown Component"); + proto_tree_add_expert(tree, pinfo, &ei_q932_unknown_component, tvb, offset, len); } break; default: offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "Unknown Component"); + proto_tree_add_expert(tree, pinfo, &ei_q932_unknown_component, tvb, offset, len); } offset = eoffset; } @@ -216,10 +223,11 @@ dissect_q932_facility_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr /*--- dissect_q932_ni_ie -------------------------------------------------------*/ static void -dissect_q932_ni_ie(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int length) { +dissect_q932_ni_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int length) { int remain = length; guint8 octet = 0; guint32 value = 0; + proto_item* ti; while ((remain > 0) && !(octet & 0x80)) { octet = tvb_get_guint8(tvb, offset++); @@ -227,10 +235,10 @@ dissect_q932_ni_ie(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree value <<= 7; value |= octet & 0x7F; } - proto_tree_add_uint(tree, hf_q932_nd, tvb, offset - (length - remain), length - remain, value); + ti = proto_tree_add_uint(tree, hf_q932_nd, tvb, offset - (length - remain), length - remain, value); if (remain > 0) { - proto_tree_add_text(tree, tvb, offset - remain, remain, "ASN.1 Encoded Data Structure(NOT IMPLEMENTED): %s", tvb_bytes_to_ep_str(tvb, offset - remain, remain)); + expert_add_info(pinfo, ti, &ei_q932_asn1_encoded); } } @@ -308,7 +316,15 @@ void proto_register_q932(void) { #include "packet-q932-ettarr.c" }; - module_t *q932_module; + static ei_register_info ei[] = { + { &ei_q932_dse_not_supported, { "q932.dse_not_supported", PI_UNDECODED, PI_WARN, "DSE APDU (not supported)", EXPFILL }}, + { &ei_q932_acse_not_supported, { "q932.acse_not_supported", PI_UNDECODED, PI_WARN, "ACSE APDU (not supported)", EXPFILL }}, + { &ei_q932_unknown_component, { "q932.unknown_component", PI_UNDECODED, PI_WARN, "Unknown Component", EXPFILL }}, + { &ei_q932_asn1_encoded, { "q932.asn1_encoded", PI_UNDECODED, PI_WARN, "ASN.1 Encoded Data Structure(NOT IMPLEMENTED)", EXPFILL }}, + }; + + module_t *q932_module; + expert_module_t* expert_q932; static const enum_val_t facility_encoding[] = { {"Facility as QSIG", "Dissect facility as QSIG", 0}, @@ -323,6 +339,8 @@ void proto_register_q932(void) { /* Register fields and subtrees */ proto_register_field_array(proto_q932, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_q932 = expert_register_protocol(proto_q932); + expert_register_field_array(expert_q932, ei, array_length(ei)); rose_ctx_init(&q932_rose_ctx); diff --git a/asn1/qsig/packet-qsig-template.c b/asn1/qsig/packet-qsig-template.c index cad737acff..304ab88d02 100644 --- a/asn1/qsig/packet-qsig-template.c +++ b/asn1/qsig/packet-qsig-template.c @@ -24,6 +24,7 @@ #include "config.h" #include +#include #include #include @@ -308,6 +309,10 @@ static gint ett_qsig_unknown_extension = -1; #include "packet-qsig-ett.c" static gint ett_cnq_PSS1InformationElement = -1; +static expert_field ei_qsig_unsupported_arg_type = EI_INIT; +static expert_field ei_qsig_unsupported_result_type = EI_INIT; +static expert_field ei_qsig_unsupported_error_type = EI_INIT; + /* Preferences */ /* Subdissectors */ @@ -420,7 +425,7 @@ dissect_qsig_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->arg_pdu(tvb, pinfo, qsig_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(qsig_tree, tvb, offset, -1, "UNSUPPORTED ARGUMENT TYPE (QSIG)"); + proto_tree_add_expert(tree, pinfo, &ei_qsig_unsupported_error_type, tvb, offset, -1); offset += tvb_captured_length_remaining(tvb, offset); } @@ -474,7 +479,7 @@ dissect_qsig_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->res_pdu(tvb, pinfo, qsig_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(qsig_tree, tvb, offset, -1, "UNSUPPORTED RESULT TYPE (QSIG)"); + proto_tree_add_expert(tree, pinfo, &ei_qsig_unsupported_result_type, tvb, offset, -1); offset += tvb_captured_length_remaining(tvb, offset); } @@ -523,7 +528,7 @@ dissect_qsig_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = err_ptr->err_pdu(tvb, pinfo, qsig_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(qsig_tree, tvb, offset, -1, "UNSUPPORTED ERROR TYPE (QSIG)"); + proto_tree_add_expert(tree, pinfo, &ei_qsig_unsupported_error_type, tvb, offset, -1); offset += tvb_captured_length_remaining(tvb, offset); } @@ -668,12 +673,22 @@ void proto_register_qsig(void) { &ett_cnq_PSS1InformationElement, }; + static ei_register_info ei[] = { + { &ei_qsig_unsupported_arg_type, { "qsig.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (QSIG)", EXPFILL }}, + { &ei_qsig_unsupported_result_type, { "qsig.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (QSIG)", EXPFILL }}, + { &ei_qsig_unsupported_error_type, { "qsig.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (QSIG)", EXPFILL }}, + }; + + expert_module_t* expert_qsig; + /* Register protocol and dissector */ proto_qsig = proto_register_protocol(PNAME, PSNAME, PFNAME); /* Register fields and subtrees */ proto_register_field_array(proto_qsig, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_qsig = expert_register_protocol(proto_qsig); + expert_register_field_array(expert_qsig, ei, array_length(ei)); /* Register dissector tables */ extension_dissector_table = register_dissector_table("qsig.ext", "QSIG Extension", FT_STRING, BASE_NONE); diff --git a/asn1/ros/packet-ros-template.c b/asn1/ros/packet-ros-template.c index 849b4346f9..cdfa73e3cb 100644 --- a/asn1/ros/packet-ros-template.c +++ b/asn1/ros/packet-ros-template.c @@ -75,6 +75,15 @@ static int hf_ros_time = -1; /* Initialize the subtree pointers */ static gint ett_ros = -1; +static gint ett_ros_unknown = -1; +static gint ett_ros_invoke_argument = -1; +static gint ett_ros_return_result = -1; +static gint ett_ros_bind_invoke = -1; +static gint ett_ros_bind_result = -1; +static gint ett_ros_bind_error = -1; +static gint ett_ros_unbind_invoke = -1; +static gint ett_ros_unbind_result = -1; +static gint ett_ros_unbind_error = -1; #include "packet-ros-ett.c" static expert_field ei_ros_dissector_oid_not_implemented = EI_INIT; @@ -84,7 +93,6 @@ static dissector_table_t ros_oid_dissector_table=NULL; static GHashTable *oid_table=NULL; static GHashTable *protocol_table=NULL; -static gint ett_ros_unknown = -1; void register_ros_oid_dissector_handle(const char *oid, dissector_handle_t dissector, int proto _U_, const char *name, gboolean uses_rtse) @@ -483,6 +491,15 @@ void proto_register_ros(void) { static gint *ett[] = { &ett_ros, &ett_ros_unknown, + &ett_ros_invoke_argument, + &ett_ros_return_result, + &ett_ros_bind_invoke, + &ett_ros_bind_result, + &ett_ros_bind_error, + &ett_ros_unbind_invoke, + &ett_ros_unbind_result, + &ett_ros_unbind_error, + #include "packet-ros-ettarr.c" }; diff --git a/asn1/ros/ros.cnf b/asn1/ros/ros.cnf index e6ca8bd1e3..8511a8e20b 100644 --- a/asn1/ros/ros.cnf +++ b/asn1/ros/ros.cnf @@ -28,12 +28,13 @@ Reject/problem/returnResult rejectResult #.FN_BODY Invoke/argument char *oid; + proto_tree* subtree; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "invoke argument"); + subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_ros_invoke_argument, NULL, "invoke argument"); - ros_match_call_response(tvb, actx->pinfo, tree, invokeid, TRUE); + ros_match_call_response(tvb, actx->pinfo, subtree, invokeid, TRUE); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -45,12 +46,13 @@ Reject/problem/returnResult rejectResult #.FN_BODY ReturnResult/result/result char *oid; + proto_tree* subtree; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "return result"); + subtree = proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_return_result, NULL, "return result"); - ros_match_call_response(tvb, actx->pinfo, tree, invokeid, FALSE); + ros_match_call_response(tvb, actx->pinfo, subtree, invokeid, FALSE); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -62,12 +64,13 @@ Reject/problem/returnResult rejectResult #.FN_BODY ReturnError/parameter char *oid; + proto_tree* subtree; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "return result"); + subtree = proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_return_result, NULL, "return result"); - ros_match_call_response(tvb, actx->pinfo, tree, invokeid, FALSE); + ros_match_call_response(tvb, actx->pinfo, subtree, invokeid, FALSE); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -82,7 +85,7 @@ Reject/problem/returnResult rejectResult struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "bind-invoke"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_bind_result, NULL, "bind-invoke"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -95,7 +98,7 @@ Reject/problem/returnResult rejectResult struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "bind-result"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_bind_result, NULL, "bind-result"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -108,7 +111,7 @@ Reject/problem/returnResult rejectResult struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "bind-error"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_bind_error, NULL, "bind-error"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -122,7 +125,7 @@ Reject/problem/returnResult rejectResult struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "unbind-invoke"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_unbind_invoke, NULL, "unbind-invoke"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -136,7 +139,7 @@ Reject/problem/returnResult rejectResult struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "unbind-result"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_unbind_result, NULL, "unbind-result"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -149,7 +152,7 @@ Reject/problem/returnResult rejectResult struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "unbind-error"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_unbind_error, NULL, "unbind-error"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ diff --git a/asn1/snmp/packet-snmp-template.c b/asn1/snmp/packet-snmp-template.c index 971c90bb7b..838e1fac70 100644 --- a/asn1/snmp/packet-snmp-template.c +++ b/asn1/snmp/packet-snmp-template.c @@ -229,6 +229,7 @@ static int hf_snmp_objectname = -1; static int hf_snmp_scalar_instance_index = -1; static int hf_snmp_var_bind_str = -1; +static int hf_snmp_agentid_trailer = -1; #include "packet-snmp-hf.c" @@ -278,6 +279,9 @@ static expert_field ei_snmp_integral_value0 = EI_INIT; static expert_field ei_snmp_missing_mib = EI_INIT; static expert_field ei_snmp_varbind_wrong_length_value = EI_INIT; static expert_field ei_snmp_varbind_wrong_class_tag = EI_INIT; +static expert_field ei_snmp_rfc1910_non_conformant = EI_INIT; +static expert_field ei_snmp_rfc3411_non_conformant = EI_INIT; +static expert_field ei_snmp_version_unknown = EI_INIT; static const true_false_string auth_flags = { "OK", @@ -681,14 +685,12 @@ dissect_snmp_VarBind(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pi_value = proto_tree_add_item(pt_varbind,hf_snmp_unSpecified,tvb,value_offset,value_len,ENC_NA); goto set_label; } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"A scalar should have one instance sub-id this one has none"); - expert_add_info(actx->pinfo, pi, &ei_snmp_no_instance_subid); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_no_instance_subid,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"A scalar should have only one instance sub-id this has: %d",oid_left); - expert_add_info(actx->pinfo, pi, &ei_snmp_wrong_num_of_subids); + proto_tree_add_expert_format(pt_name,actx->pinfo,&ei_snmp_wrong_num_of_subids,tvb,0,0,"A scalar should have only one instance sub-id this has: %d",oid_left); oid_info_is_ok = FALSE; goto indexing_done; } @@ -711,16 +713,14 @@ dissect_snmp_VarBind(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, guint suboid_len; if (key_start >= oid_matched+oid_left) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"index sub-oid shorter than expected"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_suboid_too_short); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_suboid_too_short,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } switch(k->key_type) { case OID_KEY_TYPE_WRONG: { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"OID instaces not handled, if you want this implemented please contact the wireshark developers"); - expert_add_info(actx->pinfo, pi, &ei_snmp_unimplemented_instance_index); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_unimplemented_instance_index,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } @@ -751,15 +751,13 @@ show_oid_index: suboid = &(subids[key_start]); if( suboid_len == 0 ) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"an index sub-oid OID cannot be 0 bytes long!"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_suboid_len0); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_suboid_len0,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } if( key_len < suboid_len ) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"index sub-oid should not be longer than remaining oid size"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_suboid_too_long); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_suboid_too_long,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } @@ -805,8 +803,7 @@ show_oid_index: } if( key_len < buf_len ) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"index string should not be longer than remaining oid size"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_string_too_long); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_string_too_long,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } @@ -847,20 +844,17 @@ show_oid_index: } goto indexing_done; } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"We do not know how to handle this OID, if you want this implemented please contact the wireshark developers"); - expert_add_info(actx->pinfo, pi, &ei_snmp_unimplemented_instance_index); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_unimplemented_instance_index,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"The COLUMS's parent is not a ROW. This is a BUG! please contact the wireshark developers."); - expert_add_info(actx->pinfo, pi, &ei_snmp_column_parent_not_row); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_column_parent_not_row,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } default: { -/* proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"This kind OID should have no value"); - expert_add_info_format(actx->pinfo, pi, PI_MALFORMED, PI_WARN, "This kind OID should have no value"); */ +/* proto_tree_add_expert (pt_name,actx->pinfo,PI_MALFORMED, PI_WARN,tvb,0,0,"This kind OID should have no value"); */ oid_info_is_ok = FALSE; goto indexing_done; } @@ -981,8 +975,7 @@ indexing_done: */ if (value_len > 9 || tvb_get_guint8(tvb, value_offset) != 0) { /* It is. Fail. */ - pi_value = proto_tree_add_text(pt_varbind,tvb,value_offset,value_len,"Integral value too large"); - expert_add_info(actx->pinfo, pi_value, &ei_snmp_uint_too_large); + proto_tree_add_expert_format(pt_varbind,actx->pinfo,&ei_snmp_uint_too_large,tvb,value_offset,value_len,"Integral value too large"); goto already_added; } /* Cheat and skip the leading 0 byte */ @@ -992,8 +985,7 @@ indexing_done: /* * For now, just reject these. */ - pi_value = proto_tree_add_text(pt_varbind,tvb,value_offset,value_len,"Integral value too large or too small"); - expert_add_info(actx->pinfo, pi_value, &ei_snmp_int_too_large); + proto_tree_add_expert_format(pt_varbind,actx->pinfo,&ei_snmp_int_too_large,tvb,value_offset,value_len,"Integral value too large or too small"); goto already_added; } } else if (value_len == 0) { @@ -1007,8 +999,7 @@ indexing_done: */ header_field_info *hfinfo = proto_registrar_get_nth(hfid); if (hfinfo->type == FT_UINT64 || hfinfo->type == FT_INT64) { - pi_value = proto_tree_add_text(pt_varbind,tvb,value_offset,value_len,"Integral value is zero-length"); - expert_add_info(actx->pinfo, pi_value, &ei_snmp_integral_value0); + proto_tree_add_expert_format(pt_varbind,actx->pinfo,&ei_snmp_integral_value0,tvb,value_offset,value_len,"Integral value is zero-length"); goto already_added; } } @@ -1132,7 +1123,7 @@ static const value_string snmp_engineid_cisco_type_vals[] = { * or historic RFC 1910 (AgentID) */ int -dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len) +dissect_snmp_engineid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int len) { proto_item *item = NULL; guint8 conformance, format; @@ -1159,13 +1150,12 @@ dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len) case SNMP_ENGINEID_RFC1910: /* 12-byte AgentID w/ 8-byte trailer */ if (len_remain==8) { - proto_tree_add_text(tree, tvb, offset, 8, "AgentID Trailer: 0x%s", - tvb_bytes_to_ep_str(tvb, offset, 8)); - offset+=8; - len_remain-=8; + proto_tree_add_item(tree, hf_snmp_agentid_trailer, tvb, offset, 8, ENC_NA); + offset+=8; + len_remain-=8; } else { - proto_tree_add_text(tree, tvb, offset, len_remain, ""); - return offset; + proto_tree_add_expert(tree, pinfo, &ei_snmp_rfc1910_non_conformant, tvb, offset, len_remain); + return offset; } break; @@ -1250,7 +1240,7 @@ dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len) } if (len_remain>0) { - proto_tree_add_text(tree, tvb, offset, len_remain, ""); + proto_tree_add_expert(tree, pinfo, &ei_snmp_rfc3411_non_conformant, tvb, offset, len_remain); offset+=len_remain; } return offset; @@ -2018,11 +2008,9 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo, col_set_str(pinfo->cinfo, COL_PROTOCOL, proto_get_protocol_short_name(find_protocol_by_id(proto))); - if (tree) { - item = proto_tree_add_item(tree, proto, tvb, start_offset, + item = proto_tree_add_item(tree, proto, tvb, start_offset, message_length, ENC_BIG_ENDIAN); - snmp_tree = proto_item_add_subtree(item, ett); - } + snmp_tree = proto_item_add_subtree(item, ett); switch (version) { case 0: /* v1 */ @@ -2042,7 +2030,7 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo, * if this is SNMP-over-TCP, our caller thinks there's * nothing left to dissect. */ - proto_tree_add_text(snmp_tree, tvb, offset, -1,"Unknown version"); + expert_add_info(pinfo, item, &ei_snmp_version_unknown); return length_remaining; break; } @@ -2442,6 +2430,9 @@ void proto_register_snmp(void) { { &hf_snmp_var_bind_str, { "Variable-binding-string", "snmp.var-bind_str", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_snmp_agentid_trailer, { + "AgentID Trailer", "snmp.agentid_trailer", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, #include "packet-snmp-hfarr.c" @@ -2464,7 +2455,7 @@ void proto_register_snmp(void) { }; static ei_register_info ei[] = { { &ei_snmp_failed_decrypted_data_pdu, { "snmp.failed_decrypted_data_pdu", PI_MALFORMED, PI_WARN, "Failed to decrypt encryptedPDU", EXPFILL }}, - { &ei_snmp_decrypted_data_bad_formatted, { "snmp.decrypted_data_bad_formatted", PI_MALFORMED, PI_WARN, "Decrypted data not formatted as expected", EXPFILL }}, + { &ei_snmp_decrypted_data_bad_formatted, { "snmp.decrypted_data_bad_formatted", PI_MALFORMED, PI_WARN, "Decrypted data not formatted as expected, wrong key?", EXPFILL }}, { &ei_snmp_verify_authentication_error, { "snmp.verify_authentication_error", PI_MALFORMED, PI_ERROR, "Error while verifying Message authenticity", EXPFILL }}, { &ei_snmp_authentication_ok, { "snmp.authentication_ok", PI_CHECKSUM, PI_CHAT, "SNMP Authentication OK", EXPFILL }}, { &ei_snmp_authentication_error, { "snmp.authentication_error", PI_CHECKSUM, PI_WARN, "SNMP Authentication Error", EXPFILL }}, @@ -2479,10 +2470,10 @@ void proto_register_snmp(void) { { &ei_snmp_no_instance_subid, { "snmp.no_instance_subid", PI_MALFORMED, PI_WARN, "No instance sub-id in scalar value", EXPFILL }}, { &ei_snmp_wrong_num_of_subids, { "snmp.wrong_num_of_subids", PI_MALFORMED, PI_WARN, "Wrong number of instance sub-ids in scalar value", EXPFILL }}, { &ei_snmp_index_suboid_too_short, { "snmp.index_suboid_too_short", PI_MALFORMED, PI_WARN, "index sub-oid shorter than expected", EXPFILL }}, - { &ei_snmp_unimplemented_instance_index, { "snmp.unimplemented_instance_index", PI_UNDECODED, PI_WARN, "Unimplemented instance index", EXPFILL }}, - { &ei_snmp_index_suboid_len0, { "snmp.ndex_suboid_len0", PI_MALFORMED, PI_WARN, "index sub-oid OID with len=0", EXPFILL }}, - { &ei_snmp_index_suboid_too_long, { "snmp.index_suboid_too_long", PI_MALFORMED, PI_WARN, "index sub-oid longer than remaining oid size", EXPFILL }}, - { &ei_snmp_index_string_too_long, { "snmp.index_string_too_long", PI_MALFORMED, PI_WARN, "index string longer than remaining oid size", EXPFILL }}, + { &ei_snmp_unimplemented_instance_index, { "snmp.unimplemented_instance_index", PI_UNDECODED, PI_WARN, "OID instaces not handled, if you want this implemented please contact the wireshark developers", EXPFILL }}, + { &ei_snmp_index_suboid_len0, { "snmp.ndex_suboid_len0", PI_MALFORMED, PI_WARN, "an index sub-oid OID cannot be 0 bytes long!", EXPFILL }}, + { &ei_snmp_index_suboid_too_long, { "snmp.index_suboid_too_long", PI_MALFORMED, PI_WARN, "index sub-oid should not be longer than remaining oid size", EXPFILL }}, + { &ei_snmp_index_string_too_long, { "snmp.index_string_too_long", PI_MALFORMED, PI_WARN, "index string should not be longer than remaining oid size", EXPFILL }}, { &ei_snmp_column_parent_not_row, { "snmp.column_parent_not_row", PI_MALFORMED, PI_ERROR, "COLUMS's parent is not a ROW", EXPFILL }}, { &ei_snmp_uint_too_large, { "snmp.uint_too_large", PI_UNDECODED, PI_NOTE, "Unsigned integer value > 2^64 - 1", EXPFILL }}, { &ei_snmp_int_too_large, { "snmp.int_too_large", PI_UNDECODED, PI_NOTE, "Signed integer value > 2^63 - 1 or <= -2^63", EXPFILL }}, @@ -2490,6 +2481,9 @@ void proto_register_snmp(void) { { &ei_snmp_missing_mib, { "snmp.missing_mib", PI_UNDECODED, PI_NOTE, "Unresolved value, Missing MIB", EXPFILL }}, { &ei_snmp_varbind_wrong_length_value, { "snmp.varbind.wrong_length_value", PI_MALFORMED, PI_WARN, "Wrong length for SNMP VarBind/value", EXPFILL }}, { &ei_snmp_varbind_wrong_class_tag, { "snmp.varbind.wrong_class_tag", PI_MALFORMED, PI_WARN, "Wrong class/tag for SNMP VarBind/value", EXPFILL }}, + { &ei_snmp_rfc1910_non_conformant, { "snmp.rfc1910_non_conformant", PI_PROTOCOL, PI_WARN, "Data not conforming to RFC1910", EXPFILL }}, + { &ei_snmp_rfc3411_non_conformant, { "snmp.rfc3411_non_conformant", PI_PROTOCOL, PI_WARN, "Data not conforming to RFC3411", EXPFILL }}, + { &ei_snmp_version_unknown, { "snmp.version.unknown", PI_PROTOCOL, PI_WARN, "Unknown version", EXPFILL }}, }; diff --git a/asn1/snmp/packet-snmp-template.h b/asn1/snmp/packet-snmp-template.h index aeb3824497..3ade802264 100644 --- a/asn1/snmp/packet-snmp-template.h +++ b/asn1/snmp/packet-snmp-template.h @@ -91,7 +91,7 @@ struct _snmp_usm_params_t { */ extern guint dissect_snmp_pdu(tvbuff_t *, int, packet_info *, proto_tree *tree, int, gint, gboolean); -extern int dissect_snmp_engineid(proto_tree *, tvbuff_t *, int, int); +extern int dissect_snmp_engineid(proto_tree *, packet_info *, tvbuff_t *, int, int); /*#include "packet-snmp-exp.h"*/ diff --git a/asn1/snmp/snmp.cnf b/asn1/snmp/snmp.cnf index f30b6c1464..b0c342a69e 100644 --- a/asn1/snmp/snmp.cnf +++ b/asn1/snmp/snmp.cnf @@ -90,7 +90,7 @@ gint pdu_type=-1; &usm_p.engine_tvb); if (usm_p.engine_tvb) { proto_tree* engine_tree = proto_item_add_subtree(%(ACTX)s->created_item,ett_engineid); - dissect_snmp_engineid(engine_tree, usm_p.engine_tvb, 0, tvb_length_remaining(usm_p.engine_tvb,0)); + dissect_snmp_engineid(engine_tree, actx->pinfo, usm_p.engine_tvb, 0, tvb_length_remaining(usm_p.engine_tvb,0)); } #.FN_BODY SnmpEngineID @@ -100,7 +100,7 @@ gint pdu_type=-1; ¶m_tvb); if (param_tvb) { proto_tree* engine_tree = proto_item_add_subtree(%(ACTX)s->created_item,ett_engineid); - dissect_snmp_engineid(engine_tree, param_tvb, 0, tvb_length_remaining(param_tvb,0)); + dissect_snmp_engineid(engine_tree, actx->pinfo, param_tvb, 0, tvb_length_remaining(param_tvb,0)); } #.FN_PARS UsmSecurityParameters/msgUserName @@ -139,10 +139,7 @@ gint pdu_type=-1; proto_tree* decrypted_tree; if (! check_ScopedPdu(cleartext_tvb)) { - proto_item* cause = proto_tree_add_text(encryptedpdu_tree, cleartext_tvb, 0, -1, - "Decrypted data not formatted as expected, wrong key?"); - - expert_add_info(actx->pinfo, cause, &ei_snmp_decrypted_data_bad_formatted); + proto_tree_add_expert(encryptedpdu_tree, actx->pinfo, &ei_snmp_decrypted_data_bad_formatted, cleartext_tvb, 0, -1); col_set_str(actx->pinfo->cinfo, COL_INFO, "encryptedPDU: Decrypted data not formatted as expected"); diff --git a/asn1/spnego/packet-spnego-template.c b/asn1/spnego/packet-spnego-template.c index 56d2610c1c..f0f80789ca 100644 --- a/asn1/spnego/packet-spnego-template.c +++ b/asn1/spnego/packet-spnego-template.c @@ -36,6 +36,7 @@ #include #include +#include #include #include "packet-dcerpc.h" #include "packet-gssapi.h" @@ -95,6 +96,9 @@ static gint ett_spnego_krb5_cfx_flags = -1; #include "packet-spnego-ett.c" +static expert_field ei_spnego_decrypted_keytype = EI_INIT; +static expert_field ei_spnego_unknown_header = EI_INIT; + /* * Unfortunately, we have to have forward declarations of thess, * as the code generated by asn2wrs includes a call before the @@ -262,7 +266,7 @@ dissect_spnego_krb5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) return; default: - proto_tree_add_text(subtree, tvb, offset, 0, + proto_tree_add_expert_format(subtree, pinfo, &ei_spnego_unknown_header, tvb, offset, 0, "Unknown header (class=%d, pc=%d, tag=%d)", ber_class, pc, tag); goto done; @@ -567,7 +571,7 @@ decrypt_arcfour(packet_info *pinfo, #if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS) static void -decrypt_gssapi_krb_arcfour_wrap(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int keytype) +decrypt_gssapi_krb_arcfour_wrap(proto_tree *tree _U_, packet_info *pinfo, tvbuff_t *tvb, int keytype) { int ret; enc_key_t *ek; @@ -613,7 +617,10 @@ decrypt_gssapi_krb_arcfour_wrap(proto_tree *tree, packet_info *pinfo, tvbuff_t * ek->keytype ); if (ret >= 0) { - proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin); + expert_add_info_format(pinfo, NULL, &ei_spnego_decrypted_keytype, + "Decrypted keytype %d in frame %u using %s", + ek->keytype, pinfo->fd->num, ek->key_origin); + pinfo->gssapi_decrypted_tvb=tvb_new_child_real_data(tvb, output_message_buffer, ret, ret); @@ -1414,6 +1421,13 @@ void proto_register_spnego(void) { #include "packet-spnego-ettarr.c" }; + static ei_register_info ei[] = { + { &ei_spnego_decrypted_keytype, { "spnego.decrypted_keytype", PI_SECURITY, PI_CHAT, "Decryted keytype", EXPFILL }}, + { &ei_spnego_unknown_header, { "spnego.unknown_header", PI_PROTOCOL, PI_WARN, "Unknown header", EXPFILL }}, + }; + + expert_module_t* expert_spnego; + /* Register protocol */ proto_spnego = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -1429,6 +1443,8 @@ void proto_register_spnego(void) { /* Register fields and subtrees */ proto_register_field_array(proto_spnego, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_spnego = expert_register_protocol(proto_spnego); + expert_register_field_array(expert_spnego, ei, array_length(ei)); } diff --git a/asn1/sv/packet-sv-template.c b/asn1/sv/packet-sv-template.c index 2af3318772..877034e6ab 100644 --- a/asn1/sv/packet-sv-template.c +++ b/asn1/sv/packet-sv-template.c @@ -108,6 +108,7 @@ static int ett_phsmeas_q = -1; #include "packet-sv-ett.c" static expert_field ei_sv_mal_utctime = EI_INIT; +static expert_field ei_sv_zero_pdu = EI_INIT; #if 0 static const value_string sv_q_validity_vals[] = { @@ -228,7 +229,7 @@ dissect_sv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset = offset; offset = dissect_sv_SampledValues(FALSE, tvb, offset, &asn1_ctx , tree, -1); if (offset == old_offset) { - proto_tree_add_text(tree, tvb, offset, -1, "Internal error, zero-byte SV PDU"); + proto_tree_add_expert(tree, pinfo, &ei_sv_zero_pdu, tvb, offset, -1); break; } } @@ -314,6 +315,7 @@ void proto_register_sv(void) { static ei_register_info ei[] = { { &ei_sv_mal_utctime, { "sv.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed UTCTime encoding", EXPFILL }}, + { &ei_sv_zero_pdu, { "sv.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte SV PDU", EXPFILL }}, }; expert_module_t* expert_sv; diff --git a/asn1/t38/packet-t38-template.c b/asn1/t38/packet-t38-template.c index 40363bb83a..0a719463be 100644 --- a/asn1/t38/packet-t38-template.c +++ b/asn1/t38/packet-t38-template.c @@ -144,6 +144,8 @@ static gint ett_t38_setup = -1; static gint ett_data_fragment = -1; static gint ett_data_fragments = -1; +static expert_field ei_t38_malformed = EI_INIT; + static gboolean primary_part = TRUE; static guint32 seq_number = 0; @@ -541,10 +543,8 @@ dissect_t38_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset = dissect_UDPTLPacket_PDU(tvb, pinfo, tr, NULL); if (tvb_length_remaining(tvb,offset)>0){ - if (tr){ - proto_tree_add_text(tr, tvb, offset, tvb_reported_length_remaining(tvb, offset), + proto_tree_add_expert_format(tr, pinfo, &ei_t38_malformed, tvb, offset, tvb_reported_length_remaining(tvb, offset), "[MALFORMED PACKET or wrong preference settings]"); - } col_append_str(pinfo->cinfo, COL_INFO, " [Malformed?]"); } } @@ -587,10 +587,8 @@ dissect_t38_tcp_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if(tvb_length_remaining(tvb,offset)>0){ if(t38_tpkt_usage == T38_TPKT_ALWAYS){ - if(tr){ - proto_tree_add_text(tr, tvb, offset, tvb_reported_length_remaining(tvb, offset), + proto_tree_add_expert_format(tr, pinfo, &ei_t38_malformed, tvb, offset, tvb_reported_length_remaining(tvb, offset), "[MALFORMED PACKET or wrong preference settings]"); - } col_append_str(pinfo->cinfo, COL_INFO, " [Malformed?]"); break; }else { @@ -722,11 +720,18 @@ proto_register_t38(void) &ett_data_fragments }; + static ei_register_info ei[] = { + { &ei_t38_malformed, { "t38.malformed", PI_MALFORMED, PI_ERROR, "Malformed packet", EXPFILL }}, + }; + module_t *t38_module; + expert_module_t* expert_t38; proto_t38 = proto_register_protocol("T.38", "T.38", "t38"); proto_register_field_array(proto_t38, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_t38 = expert_register_protocol(proto_t38); + expert_register_field_array(expert_t38, ei, array_length(ei)); register_dissector("t38", dissect_t38, proto_t38); /* Init reassemble tables for HDLC */ diff --git a/asn1/t38/t38.cnf b/asn1/t38/t38.cnf index 719d1d0d3c..3a0ab1f7f8 100644 --- a/asn1/t38/t38.cnf +++ b/asn1/t38/t38.cnf @@ -129,10 +129,8 @@ VAL_PTR=&Data_Field_field_type_value if (new_tvb) call_dissector_with_data((t30_hdlc_handle) ? t30_hdlc_handle : data_handle, new_tvb, actx->pinfo, tree, t38_info); } } else { - if(tree){ - proto_tree_add_text(tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), + proto_tree_add_expert_format(tree, actx->pinfo, &ei_t38_malformed, tvb, offset, tvb_reported_length_remaining(tvb, offset), "[RECEIVED END OF FRAGMENT W/OUT ANY FRAGMENT DATA]"); - } col_append_str(actx->pinfo->cinfo, COL_INFO, " [Malformed?]"); actx->pinfo->fragmented = save_fragmented; } diff --git a/asn1/tcap/packet-tcap-template.c b/asn1/tcap/packet-tcap-template.c index 815242f6ac..90bd10724a 100644 --- a/asn1/tcap/packet-tcap-template.c +++ b/asn1/tcap/packet-tcap-template.c @@ -50,6 +50,7 @@ static int hf_tcap_tag = -1; static int hf_tcap_length = -1; static int hf_tcap_data = -1; static int hf_tcap_tid = -1; +static int hf_tcap_constructor_eoc=-1; int hf_tcapsrt_SessionId=-1; int hf_tcapsrt_Duplicate=-1; @@ -2091,12 +2092,18 @@ proto_register_tcap(void) { "Data", "tcap.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, { &hf_tcap_tid, { "Transaction Id", "tcap.tid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } }, + { &hf_tcap_constructor_eoc, + { "CONSTRUCTOR EOC", "tcap.constructor_eoc", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL } + }, /* Tcap Service Response Time */ { &hf_tcapsrt_SessionId, { "Session Id", @@ -2287,7 +2294,7 @@ dissect_tcap_param(asn1_ctx_t *actx, proto_tree *tree, tvbuff_t *tvb, int offset } if (ind_field) - proto_tree_add_text(subtree, tvb, offset+len-2, 2, "CONSTRUCTOR EOC"); + proto_tree_add_item(subtree, hf_tcap_constructor_eoc, tvb, offset+len-2, 2, ENC_BIG_ENDIAN); offset += len; } diff --git a/epan/dissectors/packet-acse.c b/epan/dissectors/packet-acse.c index b7a7643542..07d7cbf216 100644 --- a/epan/dissectors/packet-acse.c +++ b/epan/dissectors/packet-acse.c @@ -190,6 +190,7 @@ static int hf_acse_ACSE_requirements_nested_association = -1; /*--- End of included file: packet-acse-hf.c ---*/ #line 72 "../../asn1/acse/packet-acse-template.c" +static gint hf_acse_user_data = -1; /* Initialize the subtree pointers */ static gint ett_acse = -1; @@ -233,9 +234,11 @@ static gint ett_acse_Authentication_value_other = -1; static gint ett_acse_Authentication_value = -1; /*--- End of included file: packet-acse-ett.c ---*/ -#line 76 "../../asn1/acse/packet-acse-template.c" +#line 77 "../../asn1/acse/packet-acse-template.c" static expert_field ei_acse_dissector_not_available = EI_INIT; +static expert_field ei_acse_malformed = EI_INIT; +static expert_field ei_acse_invalid_oid = EI_INIT; static const char *object_identifier_id; /* indirect_reference, used to pick up the signalling so we know what @@ -1678,7 +1681,7 @@ dissect_acse_AE_title(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _ /*--- End of included file: packet-acse-fn.c ---*/ -#line 152 "../../asn1/acse/packet-acse-template.c" +#line 155 "../../asn1/acse/packet-acse-template.c" /* @@ -1703,9 +1706,8 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d /* first, try to check length */ /* do we have at least 2 bytes */ if (!tvb_bytes_exist(tvb, 0, 2)){ - proto_tree_add_text(parent_tree, tvb, offset, - tvb_reported_length_remaining(tvb,offset), - "User data"); + proto_tree_add_item(parent_tree, hf_acse_user_data, tvb, offset, + tvb_reported_length_remaining(tvb,offset), ENC_NA); return 0; /* no, it isn't a ACSE PDU */ } @@ -1738,7 +1740,7 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d oid=find_oid_by_pres_ctx_id(pinfo, indir_ref); if(oid){ if(strcmp(oid, ACSE_APDU_OID) == 0){ - proto_tree_add_text(parent_tree, tvb, offset, -1, + proto_tree_add_expert_format(parent_tree, pinfo, &ei_acse_invalid_oid, tvb, offset, -1, "Invalid OID: %s", ACSE_APDU_OID); THROW(ReportedBoundsError); } @@ -1779,7 +1781,7 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d int old_offset=offset; offset = dissect_acse_ACSE_apdu(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset ){ - proto_tree_add_text(tree, tvb, offset, -1,"Malformed packet"); + proto_tree_add_expert(tree, pinfo, &ei_acse_malformed, tvb, offset, -1); break; } } @@ -1793,6 +1795,10 @@ void proto_register_acse(void) { /* List of fields */ static hf_register_info hf[] = { + { &hf_acse_user_data, + { "User data", "acse.user_data", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, /*--- Included file: packet-acse-hfarr.c ---*/ #line 1 "../../asn1/acse/packet-acse-hfarr.c" @@ -2226,7 +2232,7 @@ void proto_register_acse(void) { NULL, HFILL }}, /*--- End of included file: packet-acse-hfarr.c ---*/ -#line 267 "../../asn1/acse/packet-acse-template.c" +#line 273 "../../asn1/acse/packet-acse-template.c" }; /* List of subtrees */ @@ -2272,11 +2278,13 @@ void proto_register_acse(void) { &ett_acse_Authentication_value, /*--- End of included file: packet-acse-ettarr.c ---*/ -#line 273 "../../asn1/acse/packet-acse-template.c" +#line 279 "../../asn1/acse/packet-acse-template.c" }; static ei_register_info ei[] = { { &ei_acse_dissector_not_available, { "acse.dissector_not_available", PI_UNDECODED, PI_WARN, "Dissector is not available", EXPFILL }}, + { &ei_acse_malformed, { "acse._malformed", PI_MALFORMED, PI_ERROR, "Malformed packet", EXPFILL }}, + { &ei_acse_invalid_oid, { "acse.invalid_oid", PI_UNDECODED, PI_WARN, "Invalid OID", EXPFILL }}, }; expert_module_t* expert_acse; diff --git a/epan/dissectors/packet-ansi_map.c b/epan/dissectors/packet-ansi_map.c index af6cc499cf..b88d0692cf 100644 --- a/epan/dissectors/packet-ansi_map.c +++ b/epan/dissectors/packet-ansi_map.c @@ -95,6 +95,7 @@ #include #include #include +#include #include #include #include @@ -328,6 +329,10 @@ static int hf_ansi_map_winoperationscapability_pos = -1; static int hf_ansi_map_PACA_Level = -1; static int hf_ansi_map_pacaindicator_pa = -1; +static int hf_ansi_map_point_code = -1; +static int hf_ansi_map_SSN = -1; +static int hf_ansi_map_win_trigger_list = -1; + /*--- Included file: packet-ansi_map-hf.c ---*/ #line 1 "../../asn1/ansi_map/packet-ansi_map-hf.c" @@ -880,7 +885,7 @@ static int hf_ansi_map_interSystemSMSDeliveryPointToPointRes = -1; /* InterSyst static int hf_ansi_map_qualificationRequest2Res = -1; /* QualificationRequest2Res */ /*--- End of included file: packet-ansi_map-hf.c ---*/ -#line 324 "../../asn1/ansi_map/packet-ansi_map-template.c" +#line 329 "../../asn1/ansi_map/packet-ansi_map-template.c" /* Initialize the subtree pointers */ static gint ett_ansi_map = -1; @@ -1140,7 +1145,11 @@ static gint ett_ansi_map_InvokeData = -1; static gint ett_ansi_map_ReturnData = -1; /*--- End of included file: packet-ansi_map-ett.c ---*/ -#line 356 "../../asn1/ansi_map/packet-ansi_map-template.c" +#line 361 "../../asn1/ansi_map/packet-ansi_map-template.c" + +static expert_field ei_ansi_map_nr_not_used = EI_INIT; +static expert_field ei_ansi_map_unknown_invokeData_blob = EI_INIT; +static expert_field ei_ansi_map_no_data = EI_INIT; /* Global variables */ static dissector_table_t is637_tele_id_dissector_table; /* IS-637 Teleservice ID */ @@ -1437,7 +1446,7 @@ dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre } static void -dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ +dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, asn1_ctx_t *actx _U_){ guint8 octet , octet_len; guint8 b1,b2,b3,b4; @@ -1501,7 +1510,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * case 3:/* Data Numbering (ITU-T Rec. X.121) (not used in this Standard). */ case 4:/* Telex Numbering (ITU-T Rec. F.69) (not used in this Standard). */ case 5:/* Maritime Mobile Numbering (not used in this Standard). */ - proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used"); + proto_tree_add_expert(subtree, pinfo, &ei_ansi_map_nr_not_used, tvb, offset, -1); break; case 2:/* Telephony Numbering (ITU-T Rec. E.164,E.163). */ case 6:/* Land Mobile Numbering (ITU-T Rec. E.212) */ @@ -1543,10 +1552,10 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * /* Point Code Network Number octet 4 */ b3 = tvb_get_guint8(tvb,offset); offset++; + proto_tree_add_bytes_format_value(subtree, hf_ansi_map_point_code, tvb, offset-3, 3, NULL, "%u-%u-%u", b3, b2, b1); /* Subsystem Number (SSN) octet 5 */ b4 = tvb_get_guint8(tvb,offset); - proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u SSN %u", - b3, b2, b1, b4); + proto_tree_add_item(subtree, hf_ansi_map_SSN, tvb, offset, 1, ENC_NA); proto_item_append_text(actx->created_item, " - Point Code %u-%u-%u SSN %u", b3, b2, b1, b4); break; default: @@ -1556,7 +1565,7 @@ dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree * case 14:/* Internet Protocol (IP) Address. */ break; default: - proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used"); + proto_tree_add_expert(subtree, pinfo, &ei_ansi_map_nr_not_used, tvb, offset, -1); break; } @@ -3031,7 +3040,7 @@ dissect_ansi_map_pc_ssn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree int offset = 0; proto_tree *subtree; - guint8 b1,b2,b3,b4; + guint8 b1,b2,b3; subtree = proto_item_add_subtree(actx->created_item, ett_billingid); @@ -3047,11 +3056,8 @@ dissect_ansi_map_pc_ssn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree /* Point Code Network Number octet 4 */ b3 = tvb_get_guint8(tvb,offset); offset++; - /* Subsystem Number (SSN) octet 5 */ - b4 = tvb_get_guint8(tvb,offset); - proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u SSN %u", - b3, b2, b1, b4); - + proto_tree_add_bytes_format_value(subtree, hf_ansi_map_point_code, tvb, offset-3, 3, NULL, "%u-%u-%u", b3, b2, b1); + proto_tree_add_item(subtree, hf_ansi_map_SSN, tvb, offset, 1, ENC_NA); } /* 6.5.2.94 PilotBillingID */ static void @@ -15466,7 +15472,7 @@ dissect_ansi_map_ReturnData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of /*--- End of included file: packet-ansi_map-fn.c ---*/ -#line 3630 "../../asn1/ansi_map/packet-ansi_map-template.c" +#line 3636 "../../asn1/ansi_map/packet-ansi_map-template.c" /* * 6.5.2.dk N.S0013-0 v 1.0,X.S0004-550-E v1.0 2.301 @@ -15487,23 +15493,23 @@ dissect_ansi_map_win_trigger_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_t octet = tvb_get_guint8(tvb,offset); switch (octet){ case 0xdc: - proto_tree_add_text(subtree, tvb, offset, 1, "TDP-R's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "TDP-R's armed"); j=0; break; case 0xdd: - proto_tree_add_text(subtree, tvb, offset, 1, "TDP-N's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "TDP-N's armed"); j=0; break; case 0xde: - proto_tree_add_text(subtree, tvb, offset, 1, "EDP-R's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "EDP-R's armed"); j=0; break; case 0xdf: - proto_tree_add_text(subtree, tvb, offset, 1, "EDP-N's armed"); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "EDP-N's armed"); j=0; break; default: - proto_tree_add_text(subtree, tvb, offset, 1, "[%u] (%u) %s",j,octet,val_to_str_ext(octet, &ansi_map_TriggerType_vals_ext, "Unknown TriggerType (%u)")); + proto_tree_add_uint_format(subtree, hf_ansi_map_win_trigger_list, tvb, offset, 1, octet, "[%u] (%u) %s",j,octet,val_to_str_ext(octet, &ansi_map_TriggerType_vals_ext, "Unknown TriggerType (%u)")); j++; break; } @@ -15536,7 +15542,7 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_FacilitiesDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesDirective); break; case 3: /*Mobile On Channel*/ - proto_tree_add_text(tree, tvb, offset, -1, "[Carries no data]"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_no_data, tvb, offset, -1); break; case 4: /*Handoff Back*/ offset = dissect_ansi_map_HandoffBack(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffBack); @@ -15581,16 +15587,16 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_FeatureRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_featureRequest); break; case 18: /*Reserved 18 (Service Profile Request, IS-41-C)*/ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(18 (Service Profile Request, IS-41-C)"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Unknown invokeData blob(18 (Service Profile Request, IS-41-C)"); break; case 19: /*Reserved 19 (Service Profile Directive, IS-41-C)*/ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(19 Service Profile Directive, IS-41-C)"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Unknown invokeData blob(19 Service Profile Directive, IS-41-C)"); break; case 20: /*Unreliable Roamer Data Directive*/ offset = dissect_ansi_map_UnreliableRoamerDataDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_unreliableRoamerDataDirective); break; case 21: /*Reserved 21 (Call Data Request, IS-41-C)*/ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(Reserved 21 (Call Data Request, IS-41-C)"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Unknown invokeData blob(Reserved 21 (Call Data Request, IS-41-C)"); break; case 22: /*MS Inactive*/ offset = dissect_ansi_map_MSInactive(TRUE, tvb, offset, actx, tree, hf_ansi_map_mSInactive); @@ -15650,7 +15656,7 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_AuthenticationStatusReport(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationStatusReport); break; case 41: /*Reserved 41*/ - proto_tree_add_text(tree, tvb, offset, -1, "Reserved 41, Unknown invokeData blob"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1, "Reserved 41, Unknown invokeData blob"); break; case 42: /*Information Directive*/ offset = dissect_ansi_map_InformationDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_informationDirective); @@ -15875,7 +15881,7 @@ static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_QualificationRequest2(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequest2); break; default: - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1); opCodeKnown = FALSE; break; } @@ -15952,7 +15958,7 @@ static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ break; case 26: /*Flash Request*/ /* No data */ - proto_tree_add_text(tree, tvb, offset, -1, "No Data"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_no_data, tvb, offset, -1); break; case 27: /*Authentication Directive*/ offset = dissect_ansi_map_AuthenticationDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationDirectiveRes); @@ -16146,7 +16152,7 @@ static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ offset = dissect_ansi_map_QualificationRequest2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequest2Res); break; default: - proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + proto_tree_add_expert(tree, actx->pinfo, &ei_ansi_map_unknown_invokeData_blob, tvb, offset, -1); opCodeKnown = FALSE; break; } @@ -17110,6 +17116,18 @@ void proto_register_ansi_map(void) { { "PACA Level", "ansi_map.PACA_Level", FT_UINT8, BASE_DEC, VALS(ansi_map_PACA_Level_vals), 0x1e, NULL, HFILL }}, + { &hf_ansi_map_point_code, + { "Point Code", "ansi_map.point_code", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL }}, + { &hf_ansi_map_SSN, + { "SSN", "ansi_map.SSN", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + { &hf_ansi_map_win_trigger_list, + { "WIN trigger list", "ansi_map.win_trigger_list", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, /*--- Included file: packet-ansi_map-hfarr.c ---*/ @@ -19304,7 +19322,7 @@ void proto_register_ansi_map(void) { NULL, HFILL }}, /*--- End of included file: packet-ansi_map-hfarr.c ---*/ -#line 5275 "../../asn1/ansi_map/packet-ansi_map-template.c" +#line 5293 "../../asn1/ansi_map/packet-ansi_map-template.c" }; /* List of subtrees */ @@ -19565,9 +19583,17 @@ void proto_register_ansi_map(void) { &ett_ansi_map_ReturnData, /*--- End of included file: packet-ansi_map-ettarr.c ---*/ -#line 5308 "../../asn1/ansi_map/packet-ansi_map-template.c" +#line 5326 "../../asn1/ansi_map/packet-ansi_map-template.c" }; + static ei_register_info ei[] = { + { &ei_ansi_map_nr_not_used, { "ansi_map.nr_not_used", PI_PROTOCOL, PI_WARN, "This Number plan should not have been used", EXPFILL }}, + { &ei_ansi_map_unknown_invokeData_blob, { "ansi_map.unknown_invokeData_blob", PI_PROTOCOL, PI_WARN, "Unknown invokeData blob", EXPFILL }}, + { &ei_ansi_map_no_data, { "ansi_map.no_data", PI_PROTOCOL, PI_NOTE, "Carries no data", EXPFILL }}, + }; + + expert_module_t* expert_ansi_map; + static const enum_val_t ansi_map_response_matching_type_values[] = { {"Only Transaction ID will be used in Invoke/response matching", "Transaction ID only", 0}, {"Transaction ID and Source will be used in Invoke/response matching", "Transaction ID and Source", 1}, @@ -19580,6 +19606,8 @@ void proto_register_ansi_map(void) { /* Register fields and subtrees */ proto_register_field_array(proto_ansi_map, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_ansi_map = expert_register_protocol(proto_ansi_map); + expert_register_field_array(expert_ansi_map, ei, array_length(ei)); new_register_dissector("ansi_map", dissect_ansi_map, proto_ansi_map); diff --git a/epan/dissectors/packet-ansi_tcap.c b/epan/dissectors/packet-ansi_tcap.c index b850febaec..0735243b2e 100644 --- a/epan/dissectors/packet-ansi_tcap.c +++ b/epan/dissectors/packet-ansi_tcap.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -124,7 +125,7 @@ static int hf_ansi_tcap_paramSequence = -1; /* T_paramSequence */ static int hf_ansi_tcap_paramSet = -1; /* T_paramSet */ /*--- End of included file: packet-ansi_tcap-hf.c ---*/ -#line 64 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" +#line 65 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" /* Initialize the subtree pointers */ static gint ett_tcap = -1; @@ -135,6 +136,8 @@ static gint ett_otid = -1; static gint ett_dtid = -1; static gint ett_ansi_tcap_stat = -1; +static expert_field ei_ansi_tcap_dissector_not_implemented = EI_INIT; + static struct tcapsrt_info_t * gp_tcapsrt_info; static gboolean tcap_subdissector_used=FALSE; @@ -170,7 +173,7 @@ static gint ett_ansi_tcap_T_paramSequence = -1; static gint ett_ansi_tcap_T_paramSet = -1; /*--- End of included file: packet-ansi_tcap-ett.c ---*/ -#line 83 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" +#line 86 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" #define MAX_SSN 254 @@ -412,22 +415,20 @@ find_tcap_subdissector(tvbuff_t *tvb, asn1_ctx_t *actx, proto_tree *tree){ guint8 family = (ansi_tcap_private.d.OperationCode_national & 0x7f00)>>8; guint8 specifier = (guint8)(ansi_tcap_private.d.OperationCode_national & 0xff); if(!dissector_try_uint(ansi_tcap_national_opcode_table, ansi_tcap_private.d.OperationCode_national, tvb, actx->pinfo, tcap_top_tree)){ - item = proto_tree_add_text(tree, tvb, 0, -1, + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_tcap_dissector_not_implemented, tvb, 0, -1, "Dissector for ANSI TCAP NATIONAL code:0x%x(Family %u, Specifier %u) \n" "not implemented. Contact Wireshark developers if you want this supported(Spec required)", ansi_tcap_private.d.OperationCode_national, family, specifier); - PROTO_ITEM_SET_GENERATED(item); return FALSE; } return TRUE; }else if(ansi_tcap_private.d.OperationCode == 1){ /* private */ if((ansi_tcap_private.d.OperationCode_private & 0x0900) != 0x0900){ - item = proto_tree_add_text(tree, tvb, 0, -1, + proto_tree_add_expert_format(tree, actx->pinfo, &ei_ansi_tcap_dissector_not_implemented, tvb, 0, -1, "Dissector for ANSI TCAP PRIVATE code:%u not implemented.\n" "Contact Wireshark developers if you want this supported(Spec required)", ansi_tcap_private.d.OperationCode_private); - PROTO_ITEM_SET_GENERATED(item); return FALSE; } } @@ -1389,7 +1390,7 @@ dissect_ansi_tcap_PackageType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int /*--- End of included file: packet-ansi_tcap-fn.c ---*/ -#line 358 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" +#line 359 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" @@ -1733,7 +1734,7 @@ proto_register_ansi_tcap(void) NULL, HFILL }}, /*--- End of included file: packet-ansi_tcap-hfarr.c ---*/ -#line 493 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" +#line 494 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" }; /* Setup protocol subtree array */ @@ -1771,9 +1772,15 @@ proto_register_ansi_tcap(void) &ett_ansi_tcap_T_paramSet, /*--- End of included file: packet-ansi_tcap-ettarr.c ---*/ -#line 504 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" +#line 505 "../../asn1/ansi_tcap/packet-ansi_tcap-template.c" }; + static ei_register_info ei[] = { + { &ei_ansi_tcap_dissector_not_implemented, { "ansi_tcap.dissector_not_implemented", PI_UNDECODED, PI_WARN, "Dissector not implemented", EXPFILL }}, + }; + + expert_module_t* expert_ansi_tcap; + static const enum_val_t ansi_tcap_response_matching_type_values[] = { {"Only Transaction ID will be used in Invoke/response matching", "Transaction ID only", 0}, {"Transaction ID and Source will be used in Invoke/response matching", "Transaction ID and Source", 1}, @@ -1781,7 +1788,6 @@ proto_register_ansi_tcap(void) {NULL, NULL, -1} }; - /* Register the protocol name and description */ proto_ansi_tcap = proto_register_protocol(PNAME, PSNAME, PFNAME); register_dissector("ansi_tcap", dissect_ansi_tcap, proto_ansi_tcap); @@ -1791,6 +1797,8 @@ proto_register_ansi_tcap(void) /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_ansi_tcap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_ansi_tcap = expert_register_protocol(proto_ansi_tcap); + expert_register_field_array(expert_ansi_tcap, ei, array_length(ei)); ansi_tcap_module = prefs_register_protocol(proto_ansi_tcap, proto_reg_handoff_ansi_tcap); diff --git a/epan/dissectors/packet-atn-ulcs.c b/epan/dissectors/packet-atn-ulcs.c index bc3334e448..2c6ad90512 100644 --- a/epan/dissectors/packet-atn-ulcs.c +++ b/epan/dissectors/packet-atn-ulcs.c @@ -1690,6 +1690,7 @@ const value_string atn_ses_type[] = #define ATN_PRES_PROTO "ICAO Doc9705 ULCS Presentation (ISO 8822/8823-1:1994)" static int hf_atn_pres_err = -1; +static int hf_atn_pres_pdu_type = -1; static gint ett_atn_pres = -1; #define ATN_SES_PRES_MASK 0xf803 @@ -2073,13 +2074,11 @@ dissect_atn_ulcs( /* need session context to identify PPDU type */ /* note: */ - /* it is *unfeasible* to use proto_tree_add_item here: */ - /* presentation type is always the same constant but its type */ - /* is implicitly determined by preceding session context */ - proto_tree_add_text(atn_ulcs_tree, + proto_tree_add_uint_format(atn_ulcs_tree, hf_atn_pres_pdu_type, tvb, offset, 1, + value_ses_pres, "%s (0x%02x)", val_to_str( value_ses_pres & ATN_SES_PRES_MASK , atn_pres_vals, "?"), value_pres); @@ -2482,7 +2481,7 @@ void proto_register_atn_ulcs (void) NULL, HFILL }}, /*--- End of included file: packet-atn-ulcs-hfarr.c ---*/ -#line 796 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c" +#line 795 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c" {&hf_atn_ses_type, { "SPDU Type", "atn-ulcs.ses.type", @@ -2529,6 +2528,14 @@ void proto_register_atn_ulcs (void) PRES_CPR_ER_MASK, NULL, HFILL}}, + { &hf_atn_pres_pdu_type, + { "PDU type", "atn-ulcs.pres.pdu_type", + FT_UINT8, + BASE_HEX, + NULL, + ATN_SES_PRES_MASK, + NULL, + HFILL}}, }; static gint *ett[] = { @@ -2562,7 +2569,7 @@ void proto_register_atn_ulcs (void) &ett_atn_ulcs_AttributeTypeAndValue, /*--- End of included file: packet-atn-ulcs-ettarr.c ---*/ -#line 846 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c" +#line 853 "../../asn1/atn-ulcs/packet-atn-ulcs-template.c" &ett_atn_ses, &ett_atn_pres, &ett_atn_acse, diff --git a/epan/dissectors/packet-charging_ase.c b/epan/dissectors/packet-charging_ase.c index f3418a4e94..41d9c23478 100644 --- a/epan/dissectors/packet-charging_ase.c +++ b/epan/dissectors/packet-charging_ase.c @@ -33,6 +33,7 @@ #include #include +#include #include #include "packet-ber.h" @@ -115,7 +116,7 @@ static int hf_charging_ase_T_tariffControlIndicators_non_cyclicTariff = -1; static int hf_charging_ase_T_tariffControlIndicators_01_non_cyclicTariff = -1; /*--- End of included file: packet-charging_ase-hf.c ---*/ -#line 44 "../../asn1/charging_ase/packet-charging_ase-template.c" +#line 45 "../../asn1/charging_ase/packet-charging_ase-template.c" static int ett_charging_ase = -1; @@ -153,7 +154,9 @@ static gint ett_charging_ase_T_tariffControlIndicators_01 = -1; static gint ett_charging_ase_ChargingReferenceIdentification = -1; /*--- End of included file: packet-charging_ase-ett.c ---*/ -#line 47 "../../asn1/charging_ase/packet-charging_ase-template.c" +#line 48 "../../asn1/charging_ase/packet-charging_ase-template.c" + +static expert_field ei_charging_ase_extensions_not_dissected = EI_INIT; static dissector_handle_t charging_ase_handle; @@ -534,7 +537,7 @@ static int dissect_charging_ase_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 13 "../../asn1/charging_ase/charging_ase.cnf" - proto_tree_add_text(tree, tvb, offset, -1, "Extensions not dissected"); + proto_tree_add_expert(tree, actx->pinfo, &ei_charging_ase_extensions_not_dissected, tvb, offset, -1); return tvb_length(tvb); @@ -839,7 +842,7 @@ int dissect_charging_ase_ChargingMessageType_PDU(tvbuff_t *tvb _U_, packet_info /*--- End of included file: packet-charging_ase-fn.c ---*/ -#line 51 "../../asn1/charging_ase/packet-charging_ase-template.c" +#line 54 "../../asn1/charging_ase/packet-charging_ase-template.c" static void dissect_charging_ase(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -1111,7 +1114,7 @@ proto_register_charging_ase(void) NULL, HFILL }}, /*--- End of included file: packet-charging_ase-hfarr.c ---*/ -#line 74 "../../asn1/charging_ase/packet-charging_ase-template.c" +#line 77 "../../asn1/charging_ase/packet-charging_ase-template.c" }; /* List of subtrees */ @@ -1152,13 +1155,21 @@ proto_register_charging_ase(void) &ett_charging_ase_ChargingReferenceIdentification, /*--- End of included file: packet-charging_ase-ettarr.c ---*/ -#line 80 "../../asn1/charging_ase/packet-charging_ase-template.c" +#line 83 "../../asn1/charging_ase/packet-charging_ase-template.c" }; + static ei_register_info ei[] = { + { &ei_charging_ase_extensions_not_dissected, { "charging_ase.extensions_not_dissected", PI_UNDECODED, PI_WARN, "Extensions not dissected", EXPFILL }}, + }; + + expert_module_t* expert_charging_ase; + proto_charging_ase = proto_register_protocol(PNAME, PSNAME, PFNAME); proto_register_field_array(proto_charging_ase, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_charging_ase = expert_register_protocol(proto_charging_ase); + expert_register_field_array(expert_charging_ase, ei, array_length(ei)); } /* The registration hand-off routine */ diff --git a/epan/dissectors/packet-cmip.c b/epan/dissectors/packet-cmip.c index dd075150e1..c6681e03b3 100644 --- a/epan/dissectors/packet-cmip.c +++ b/epan/dissectors/packet-cmip.c @@ -33,6 +33,7 @@ #include #include +#include #include #include @@ -343,7 +344,7 @@ static int hf_cmip_T_daysOfWeek_friday = -1; static int hf_cmip_T_daysOfWeek_saturday = -1; /*--- End of included file: packet-cmip-hf.c ---*/ -#line 58 "../../asn1/cmip/packet-cmip-template.c" +#line 59 "../../asn1/cmip/packet-cmip-template.c" /* Initialize the subtree pointers */ static gint ett_cmip = -1; @@ -473,7 +474,9 @@ static gint ett_cmip_T_modificationList = -1; static gint ett_cmip_T_modificationList_item = -1; /*--- End of included file: packet-cmip-ett.c ---*/ -#line 62 "../../asn1/cmip/packet-cmip-template.c" +#line 63 "../../asn1/cmip/packet-cmip-template.c" + +static expert_field ei_wrong_spdu_type = EI_INIT; static guint32 opcode; @@ -532,7 +535,7 @@ static const value_string cmip_error_code_vals[] = { /*--- End of included file: packet-cmip-table.c ---*/ -#line 69 "../../asn1/cmip/packet-cmip-template.c" +#line 72 "../../asn1/cmip/packet-cmip-template.c" static int opcode_type; #define OPCODE_INVOKE 1 @@ -644,7 +647,7 @@ static const char *objectclass_identifier_id; #define noInvokeId NULL /*--- End of included file: packet-cmip-val.h ---*/ -#line 92 "../../asn1/cmip/packet-cmip-template.c" +#line 95 "../../asn1/cmip/packet-cmip-template.c" /*--- Included file: packet-cmip-fn.c ---*/ #line 1 "../../asn1/cmip/packet-cmip-fn.c" @@ -4366,7 +4369,7 @@ static void dissect_WeekMask_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, prot /*--- End of included file: packet-cmip-fn.c ---*/ -#line 93 "../../asn1/cmip/packet-cmip-template.c" +#line 96 "../../asn1/cmip/packet-cmip-template.c" @@ -4387,8 +4390,8 @@ dissect_cmip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d session = (struct SESSION_DATA_STRUCTURE*)data; if(session->spdu_type == 0 ) { - proto_tree_add_text(parent_tree, tvb, 0, -1, - "Internal error:wrong spdu type %x from session dissector.",session->spdu_type); + proto_tree_add_expert_format(parent_tree, pinfo, &ei_wrong_spdu_type, tvb, 0, -1, + "Internal error: wrong spdu type %x from session dissector.", session->spdu_type); return 0; } @@ -5563,7 +5566,7 @@ void proto_register_cmip(void) { NULL, HFILL }}, /*--- End of included file: packet-cmip-hfarr.c ---*/ -#line 185 "../../asn1/cmip/packet-cmip-template.c" +#line 188 "../../asn1/cmip/packet-cmip-template.c" }; /* List of subtrees */ @@ -5695,9 +5698,15 @@ void proto_register_cmip(void) { &ett_cmip_T_modificationList_item, /*--- End of included file: packet-cmip-ettarr.c ---*/ -#line 191 "../../asn1/cmip/packet-cmip-template.c" +#line 194 "../../asn1/cmip/packet-cmip-template.c" + }; + + static ei_register_info ei[] = { + { &ei_wrong_spdu_type, { "cmip.wrong_spdu_type", PI_PROTOCOL, PI_ERROR, "Internal error: wrong spdu type", EXPFILL }}, }; + expert_module_t* expert_cmip; + /* Register protocol */ proto_cmip = proto_register_protocol(PNAME, PSNAME, PFNAME); new_register_dissector("cmip", dissect_cmip, proto_cmip); @@ -5705,6 +5714,9 @@ void proto_register_cmip(void) { /* Register fields and subtrees */ proto_register_field_array(proto_cmip, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_cmip = expert_register_protocol(proto_cmip); + expert_register_field_array(expert_cmip, ei, array_length(ei)); + /*--- Included file: packet-cmip-dis-tab.c ---*/ #line 1 "../../asn1/cmip/packet-cmip-dis-tab.c" @@ -5781,7 +5793,7 @@ void proto_register_cmip(void) { /*--- End of included file: packet-cmip-dis-tab.c ---*/ -#line 201 "../../asn1/cmip/packet-cmip-template.c" +#line 213 "../../asn1/cmip/packet-cmip-template.c" oid_add_from_string("discriminatorId(1)","2.9.3.2.7.1"); attribute_id_dissector_table = register_dissector_table("cmip.attribute_id", "CMIP Attribute Id", FT_UINT32, BASE_DEC); diff --git a/epan/dissectors/packet-dap.c b/epan/dissectors/packet-dap.c index 12da234f02..c05e810db7 100644 --- a/epan/dissectors/packet-dap.c +++ b/epan/dissectors/packet-dap.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -480,7 +481,7 @@ static int hf_dap_SearchControlOptions_separateFamilyMembers = -1; static int hf_dap_SearchControlOptions_searchFamily = -1; /*--- End of included file: packet-dap-hf.c ---*/ -#line 66 "../../asn1/dap/packet-dap-template.c" +#line 67 "../../asn1/dap/packet-dap-template.c" /* Initialize the subtree pointers */ static gint ett_dap = -1; @@ -659,7 +660,9 @@ static gint ett_dap_UpdateError = -1; static gint ett_dap_T_signedUpdateError = -1; /*--- End of included file: packet-dap-ett.c ---*/ -#line 70 "../../asn1/dap/packet-dap-template.c" +#line 71 "../../asn1/dap/packet-dap-template.c" + +static expert_field ei_dap_anonymous = EI_INIT; /*--- Included file: packet-dap-val.h ---*/ @@ -684,7 +687,7 @@ static gint ett_dap_T_signedUpdateError = -1; #define id_errcode_dsaReferral 9 /*--- End of included file: packet-dap-val.h ---*/ -#line 72 "../../asn1/dap/packet-dap-template.c" +#line 75 "../../asn1/dap/packet-dap-template.c" /*--- Included file: packet-dap-table.c ---*/ @@ -722,7 +725,7 @@ static const value_string dap_err_code_string_vals[] = { /*--- End of included file: packet-dap-table.c ---*/ -#line 74 "../../asn1/dap/packet-dap-template.c" +#line 77 "../../asn1/dap/packet-dap-template.c" /*--- Included file: packet-dap-fn.c ---*/ @@ -2064,7 +2067,7 @@ dissect_dap_DirectoryBindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, if(len == 0) { /* its an empty set - i.e anonymous (assuming version is DEFAULTed) */ - proto_tree_add_text(tree, tvb, offset, -1,"Anonymous"); + proto_tree_add_expert(tree, actx->pinfo, &ei_dap_anonymous, tvb, offset, -1); col_append_str(actx->pinfo->cinfo, COL_INFO, " anonymous"); @@ -4772,7 +4775,7 @@ static int dissect_UpdateError_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pr /*--- End of included file: packet-dap-fn.c ---*/ -#line 76 "../../asn1/dap/packet-dap-template.c" +#line 79 "../../asn1/dap/packet-dap-template.c" /*--- Included file: packet-dap-table11.c ---*/ @@ -4804,7 +4807,7 @@ static const ros_opr_t dap_opr_tab[] = { /*--- End of included file: packet-dap-table11.c ---*/ -#line 78 "../../asn1/dap/packet-dap-template.c" +#line 81 "../../asn1/dap/packet-dap-template.c" /*--- Included file: packet-dap-table21.c ---*/ #line 1 "../../asn1/dap/packet-dap-table21.c" @@ -4833,7 +4836,7 @@ static const ros_err_t dap_err_tab[] = { /*--- End of included file: packet-dap-table21.c ---*/ -#line 79 "../../asn1/dap/packet-dap-template.c" +#line 82 "../../asn1/dap/packet-dap-template.c" static const ros_info_t dap_ros_info = { "DAP", @@ -6473,7 +6476,7 @@ void proto_register_dap(void) { NULL, HFILL }}, /*--- End of included file: packet-dap-hfarr.c ---*/ -#line 98 "../../asn1/dap/packet-dap-template.c" +#line 101 "../../asn1/dap/packet-dap-template.c" }; /* List of subtrees */ @@ -6654,9 +6657,15 @@ void proto_register_dap(void) { &ett_dap_T_signedUpdateError, /*--- End of included file: packet-dap-ettarr.c ---*/ -#line 104 "../../asn1/dap/packet-dap-template.c" +#line 107 "../../asn1/dap/packet-dap-template.c" }; + + static ei_register_info ei[] = { + { &ei_dap_anonymous, { "dap.anonymous", PI_PROTOCOL, PI_NOTE, "Anonymous", EXPFILL }}, + }; + module_t *dap_module; + expert_module_t* expert_dap; /* Register protocol */ proto_dap = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -6664,6 +6673,8 @@ void proto_register_dap(void) { /* Register fields and subtrees */ proto_register_field_array(proto_dap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_dap = expert_register_protocol(proto_dap); + expert_register_field_array(expert_dap, ei, array_length(ei)); /* Register our configuration options for DAP, particularly our port */ diff --git a/epan/dissectors/packet-disp.c b/epan/dissectors/packet-disp.c index 1e8e829faf..9034bef96e 100644 --- a/epan/dissectors/packet-disp.c +++ b/epan/dissectors/packet-disp.c @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -182,7 +183,7 @@ static int hf_disp_signedShadowError = -1; /* T_signedShadowError */ static int hf_disp_shadowError = -1; /* ShadowErrorData */ /*--- End of included file: packet-disp-hf.c ---*/ -#line 66 "../../asn1/disp/packet-disp-template.c" +#line 67 "../../asn1/disp/packet-disp-template.c" /* Initialize the subtree pointers */ static gint ett_disp = -1; @@ -245,7 +246,12 @@ static gint ett_disp_ShadowError = -1; static gint ett_disp_T_signedShadowError = -1; /*--- End of included file: packet-disp-ett.c ---*/ -#line 70 "../../asn1/disp/packet-disp-template.c" +#line 71 "../../asn1/disp/packet-disp-template.c" + +static expert_field ei_disp_unsupported_opcode = EI_INIT; +static expert_field ei_disp_unsupported_errcode = EI_INIT; +static expert_field ei_disp_unsupported_pdu = EI_INIT; +static expert_field ei_disp_zero_pdu = EI_INIT; /*--- Included file: packet-disp-fn.c ---*/ @@ -1471,7 +1477,7 @@ static void dissect_ShadowingAgreementInfo_PDU(tvbuff_t *tvb _U_, packet_info *p /*--- End of included file: packet-disp-fn.c ---*/ -#line 72 "../../asn1/disp/packet-disp-template.c" +#line 78 "../../asn1/disp/packet-disp-template.c" /* * Dissect DISP PDUs inside a ROS PDUs @@ -1531,8 +1537,8 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d disp_op_name = "Coordinate-Shadow-Update-Argument"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_disp_unsupported_opcode, tvb, offset, -1, + "Unsupported DISP opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -1551,8 +1557,8 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d disp_op_name = "Coordinate-Shadow-Update-Result"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_disp_unsupported_opcode, tvb, offset, -1, + "Unsupported DISP opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -1563,13 +1569,13 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d disp_op_name = "Shadow-Error"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP errcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_disp_unsupported_errcode, tvb, offset, -1, + "Unsupported DISP errcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_disp_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -1580,7 +1586,7 @@ dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d old_offset=offset; offset=(*disp_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DISP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_disp_zero_pdu, tvb, offset, -1); break; } } @@ -2029,7 +2035,7 @@ void proto_register_disp(void) { "ShadowErrorData", HFILL }}, /*--- End of included file: packet-disp-hfarr.c ---*/ -#line 197 "../../asn1/disp/packet-disp-template.c" +#line 203 "../../asn1/disp/packet-disp-template.c" }; /* List of subtrees */ @@ -2094,9 +2100,18 @@ void proto_register_disp(void) { &ett_disp_T_signedShadowError, /*--- End of included file: packet-disp-ettarr.c ---*/ -#line 203 "../../asn1/disp/packet-disp-template.c" +#line 209 "../../asn1/disp/packet-disp-template.c" }; + + static ei_register_info ei[] = { + { &ei_disp_unsupported_opcode, { "disp.unsupported_opcode", PI_UNDECODED, PI_WARN, "Unsupported DISP opcode", EXPFILL }}, + { &ei_disp_unsupported_errcode, { "disp.unsupported_errcode", PI_UNDECODED, PI_WARN, "Unsupported DISP errcode", EXPFILL }}, + { &ei_disp_unsupported_pdu, { "disp.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported DISP PDU", EXPFILL }}, + { &ei_disp_zero_pdu, { "disp.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte DISP PDU", EXPFILL }}, + }; + module_t *disp_module; + expert_module_t* expert_disp; /* Register protocol */ proto_disp = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -2105,6 +2120,8 @@ void proto_register_disp(void) { /* Register fields and subtrees */ proto_register_field_array(proto_disp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_disp = expert_register_protocol(proto_disp); + expert_register_field_array(expert_disp, ei, array_length(ei)); /* Register our configuration options for DISP, particularly our port */ @@ -2133,7 +2150,7 @@ void proto_reg_handoff_disp(void) { /*--- End of included file: packet-disp-dis-tab.c ---*/ -#line 231 "../../asn1/disp/packet-disp-template.c" +#line 248 "../../asn1/disp/packet-disp-template.c" /* APPLICATION CONTEXT */ diff --git a/epan/dissectors/packet-dop.c b/epan/dissectors/packet-dop.c index def700ece0..d340a8db66 100644 --- a/epan/dissectors/packet-dop.c +++ b/epan/dissectors/packet-dop.c @@ -347,6 +347,10 @@ static gint ett_dop_GrantsAndDenials = -1; #line 72 "../../asn1/dop/packet-dop-template.c" static expert_field ei_dop_unknown_binding_parameter = EI_INIT; +static expert_field ei_dop_unsupported_opcode = EI_INIT; +static expert_field ei_dop_unsupported_errcode = EI_INIT; +static expert_field ei_dop_unsupported_pdu = EI_INIT; +static expert_field ei_dop_zero_pdu = EI_INIT; /* Dissector table */ static dissector_table_t dop_dissector_table; @@ -2015,7 +2019,7 @@ static void dissect_ACIItem_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto /*--- End of included file: packet-dop-fn.c ---*/ -#line 87 "../../asn1/dop/packet-dop-template.c" +#line 91 "../../asn1/dop/packet-dop-template.c" static int call_dop_oid_callback(const char *base_string, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, const char *col_info, void* data) @@ -2101,8 +2105,8 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dop_op_name = "Modify-Operational-Binding-Argument"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Argument opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dop_unsupported_opcode, tvb, offset, -1, + "Unsupported DOP Argument opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -2121,8 +2125,8 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dop_op_name = "Modify-Operational-Binding-Result"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Result opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dop_unsupported_opcode, tvb, offset, -1, + "Unsupported DOP Result opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -2133,13 +2137,13 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dop_op_name = "Operational-Binding-Error"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Error opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dop_unsupported_errcode, tvb, offset, -1, + "Unsupported DOP Error opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dop_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -2150,7 +2154,7 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da old_offset=offset; offset=(*dop_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DOP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dop_zero_pdu, tvb, offset, -1); break; } } @@ -2932,7 +2936,7 @@ void proto_register_dop(void) { NULL, HFILL }}, /*--- End of included file: packet-dop-hfarr.c ---*/ -#line 239 "../../asn1/dop/packet-dop-template.c" +#line 243 "../../asn1/dop/packet-dop-template.c" }; /* List of subtrees */ @@ -3011,11 +3015,15 @@ void proto_register_dop(void) { &ett_dop_GrantsAndDenials, /*--- End of included file: packet-dop-ettarr.c ---*/ -#line 246 "../../asn1/dop/packet-dop-template.c" +#line 250 "../../asn1/dop/packet-dop-template.c" }; static ei_register_info ei[] = { { &ei_dop_unknown_binding_parameter, { "dop.unknown_binding_parameter", PI_UNDECODED, PI_WARN, "Unknown binding-parameter", EXPFILL }}, + { &ei_dop_unsupported_opcode, { "dop.unsupported_opcode", PI_UNDECODED, PI_WARN, "Unsupported DOP opcode", EXPFILL }}, + { &ei_dop_unsupported_errcode, { "dop.unsupported_errcode", PI_UNDECODED, PI_WARN, "Unsupported DOP errcode", EXPFILL }}, + { &ei_dop_unsupported_pdu, { "dop.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported DOP PDU", EXPFILL }}, + { &ei_dop_zero_pdu, { "dop.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte DOP PDU", EXPFILL }}, }; expert_module_t* expert_dop; @@ -3074,7 +3082,7 @@ void proto_reg_handoff_dop(void) { /*--- End of included file: packet-dop-dis-tab.c ---*/ -#line 286 "../../asn1/dop/packet-dop-template.c" +#line 294 "../../asn1/dop/packet-dop-template.c" /* APPLICATION CONTEXT */ oid_add_from_string("id-ac-directory-operational-binding-management","2.5.3.3"); diff --git a/epan/dissectors/packet-dsp.c b/epan/dissectors/packet-dsp.c index 89ceeee9e2..6bd024d670 100644 --- a/epan/dissectors/packet-dsp.c +++ b/epan/dissectors/packet-dsp.c @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -206,7 +207,7 @@ static int hf_dsp_signed = -1; /* BOOLEAN */ static int hf_dsp_other = -1; /* EXTERNAL */ /*--- End of included file: packet-dsp-hf.c ---*/ -#line 60 "../../asn1/dsp/packet-dsp-template.c" +#line 61 "../../asn1/dsp/packet-dsp-template.c" /* Initialize the subtree pointers */ static gint ett_dsp = -1; @@ -286,7 +287,12 @@ static gint ett_dsp_AuthenticationLevel = -1; static gint ett_dsp_T_basicLevels = -1; /*--- End of included file: packet-dsp-ett.c ---*/ -#line 64 "../../asn1/dsp/packet-dsp-template.c" +#line 65 "../../asn1/dsp/packet-dsp-template.c" + +static expert_field ei_dsp_unsupported_opcode = EI_INIT; +static expert_field ei_dsp_unsupported_errcode = EI_INIT; +static expert_field ei_dsp_unsupported_pdu = EI_INIT; +static expert_field ei_dsp_zero_pdu = EI_INIT; /*--- Included file: packet-dsp-fn.c ---*/ @@ -1682,7 +1688,7 @@ static void dissect_DitBridgeKnowledge_PDU(tvbuff_t *tvb _U_, packet_info *pinfo /*--- End of included file: packet-dsp-fn.c ---*/ -#line 66 "../../asn1/dsp/packet-dsp-template.c" +#line 72 "../../asn1/dsp/packet-dsp-template.c" /* * Dissect X518 PDUs inside a ROS PDUs @@ -1766,8 +1772,8 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dsp_op_name = "ChainedModify-DN-Argument"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP opcode (%d)", - session->ros_op & ROS_OP_OPCODE_MASK); + proto_tree_add_expert_format(tree, pinfo, &ei_dsp_unsupported_opcode, tvb, offset, -1, + "Unsupported DSP opcode (%d)", session->ros_op & ROS_OP_OPCODE_MASK); break; } break; @@ -1810,7 +1816,7 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dsp_op_name = "ChainedModify-DN-Result"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP opcode"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_unsupported_opcode, tvb, offset, -1); break; } break; @@ -1853,12 +1859,12 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da dsp_op_name = "DSA-Referral"; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP errcode"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_unsupported_errcode, tvb, offset, -1); break; } break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -1869,7 +1875,7 @@ dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* da old_offset=offset; offset=(*dsp_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DSP PDU"); + proto_tree_add_expert(tree, pinfo, &ei_dsp_zero_pdu, tvb, offset, -1); break; } } @@ -2438,7 +2444,7 @@ void proto_register_dsp(void) { "EXTERNAL", HFILL }}, /*--- End of included file: packet-dsp-hfarr.c ---*/ -#line 269 "../../asn1/dsp/packet-dsp-template.c" +#line 275 "../../asn1/dsp/packet-dsp-template.c" }; /* List of subtrees */ @@ -2520,9 +2526,17 @@ void proto_register_dsp(void) { &ett_dsp_T_basicLevels, /*--- End of included file: packet-dsp-ettarr.c ---*/ -#line 275 "../../asn1/dsp/packet-dsp-template.c" +#line 281 "../../asn1/dsp/packet-dsp-template.c" }; + static ei_register_info ei[] = { + { &ei_dsp_unsupported_opcode, { "dsp.unsupported_opcode", PI_UNDECODED, PI_WARN, "Unsupported DSP opcode", EXPFILL }}, + { &ei_dsp_unsupported_errcode, { "dsp.unsupported_errcode", PI_UNDECODED, PI_WARN, "Unsupported DSP errcode", EXPFILL }}, + { &ei_dsp_unsupported_pdu, { "dsp.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported DSP PDU", EXPFILL }}, + { &ei_dsp_zero_pdu, { "dsp.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte DSP PDU", EXPFILL }}, + }; + module_t *dsp_module; + expert_module_t* expert_dsp; /* Register protocol */ proto_dsp = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -2532,6 +2546,8 @@ void proto_register_dsp(void) { /* Register fields and subtrees */ proto_register_field_array(proto_dsp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_dsp = expert_register_protocol(proto_dsp); + expert_register_field_array(expert_dsp, ei, array_length(ei)); /* Register our configuration options for DSP, particularly our port */ @@ -2561,7 +2577,7 @@ void proto_reg_handoff_dsp(void) { /*--- End of included file: packet-dsp-dis-tab.c ---*/ -#line 305 "../../asn1/dsp/packet-dsp-template.c" +#line 321 "../../asn1/dsp/packet-dsp-template.c" /* APPLICATION CONTEXT */ diff --git a/epan/dissectors/packet-ftam.c b/epan/dissectors/packet-ftam.c index a84d0e1667..f0ebe155a4 100644 --- a/epan/dissectors/packet-ftam.c +++ b/epan/dissectors/packet-ftam.c @@ -38,6 +38,7 @@ #include #include +#include #include #include @@ -481,7 +482,7 @@ static int hf_ftam_Attribute_Names_read_l8gal_qualifiCatiOnS = -1; static int hf_ftam_Attribute_Names_read_private_use = -1; /*--- End of included file: packet-ftam-hf.c ---*/ -#line 57 "../../asn1/ftam/packet-ftam-template.c" +#line 58 "../../asn1/ftam/packet-ftam-template.c" /* Initialize the subtree pointers */ static gint ett_ftam = -1; @@ -652,7 +653,9 @@ static gint ett_ftam_Attribute_Names = -1; static gint ett_ftam_AE_title = -1; /*--- End of included file: packet-ftam-ett.c ---*/ -#line 61 "../../asn1/ftam/packet-ftam-template.c" +#line 62 "../../asn1/ftam/packet-ftam-template.c" + +static expert_field ei_ftam_zero_pdu = EI_INIT; /*--- Included file: packet-ftam-fn.c ---*/ @@ -4736,7 +4739,7 @@ dissect_ftam_PDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, a /*--- End of included file: packet-ftam-fn.c ---*/ -#line 63 "../../asn1/ftam/packet-ftam-template.c" +#line 66 "../../asn1/ftam/packet-ftam-template.c" /* * Dissect FTAM unstructured text @@ -4781,7 +4784,7 @@ dissect_ftam(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset=offset; offset=dissect_ftam_PDU(FALSE, tvb, offset, &asn1_ctx, tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte FTAM PDU"); + proto_tree_add_expert(tree, pinfo, &ei_ftam_zero_pdu, tvb, offset, -1); break; } } @@ -6461,7 +6464,7 @@ void proto_register_ftam(void) { NULL, HFILL }}, /*--- End of included file: packet-ftam-hfarr.c ---*/ -#line 127 "../../asn1/ftam/packet-ftam-template.c" +#line 130 "../../asn1/ftam/packet-ftam-template.c" }; /* List of subtrees */ @@ -6634,15 +6637,22 @@ void proto_register_ftam(void) { &ett_ftam_AE_title, /*--- End of included file: packet-ftam-ettarr.c ---*/ -#line 133 "../../asn1/ftam/packet-ftam-template.c" +#line 136 "../../asn1/ftam/packet-ftam-template.c" + }; + static ei_register_info ei[] = { + { &ei_ftam_zero_pdu, { "ftam.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte FTAM PDU", EXPFILL }}, }; + expert_module_t* expert_ftam; + /* Register protocol */ proto_ftam = proto_register_protocol(PNAME, PSNAME, PFNAME); register_dissector("ftam", dissect_ftam, proto_ftam); /* Register fields and subtrees */ proto_register_field_array(proto_ftam, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_ftam = expert_register_protocol(proto_ftam); + expert_register_field_array(expert_ftam, ei, array_length(ei)); } diff --git a/epan/dissectors/packet-goose.c b/epan/dissectors/packet-goose.c index 8f922f8f79..08fac1f3b3 100644 --- a/epan/dissectors/packet-goose.c +++ b/epan/dissectors/packet-goose.c @@ -55,6 +55,7 @@ static int hf_goose_reserve1 = -1; static int hf_goose_reserve2 = -1; static expert_field ei_goose_mal_utctime = EI_INIT; +static expert_field ei_goose_zero_pdu = EI_INIT; /*--- Included file: packet-goose-hf.c ---*/ @@ -120,7 +121,7 @@ static int hf_goose_mMSString = -1; /* MMSString */ static int hf_goose_utc_time = -1; /* UtcTime */ /*--- End of included file: packet-goose-hf.c ---*/ -#line 52 "../../asn1/goose/packet-goose-template.c" +#line 53 "../../asn1/goose/packet-goose-template.c" /* Initialize the subtree pointers */ static int ett_goose = -1; @@ -147,7 +148,7 @@ static gint ett_goose_SEQUENCE_OF_Data = -1; static gint ett_goose_Data = -1; /*--- End of included file: packet-goose-ett.c ---*/ -#line 57 "../../asn1/goose/packet-goose-template.c" +#line 58 "../../asn1/goose/packet-goose-template.c" /*--- Included file: packet-goose-fn.c ---*/ @@ -704,7 +705,7 @@ dissect_goose_GOOSEpdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset /*--- End of included file: packet-goose-fn.c ---*/ -#line 59 "../../asn1/goose/packet-goose-template.c" +#line 60 "../../asn1/goose/packet-goose-template.c" /* * Dissect GOOSE PDUs inside a PPDU. @@ -746,7 +747,7 @@ dissect_goose(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset = offset; offset = dissect_goose_GOOSEpdu(FALSE, tvb, offset, &asn1_ctx , tree, -1); if (offset == old_offset) { - proto_tree_add_text(tree, tvb, offset, -1, "Internal error, zero-byte GOOSE PDU"); + proto_tree_add_expert(tree, pinfo, &ei_goose_zero_pdu, tvb, offset, -1); return; } } @@ -1013,7 +1014,7 @@ void proto_register_goose(void) { "UtcTime", HFILL }}, /*--- End of included file: packet-goose-hfarr.c ---*/ -#line 127 "../../asn1/goose/packet-goose-template.c" +#line 128 "../../asn1/goose/packet-goose-template.c" }; /* List of subtrees */ @@ -1041,11 +1042,12 @@ void proto_register_goose(void) { &ett_goose_Data, /*--- End of included file: packet-goose-ettarr.c ---*/ -#line 133 "../../asn1/goose/packet-goose-template.c" +#line 134 "../../asn1/goose/packet-goose-template.c" }; static ei_register_info ei[] = { { &ei_goose_mal_utctime, { "goose.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed UTCTime encoding", EXPFILL }}, + { &ei_goose_zero_pdu, { "goose.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte GOOSE PDU", EXPFILL }}, }; expert_module_t* expert_goose; diff --git a/epan/dissectors/packet-gprscdr.c b/epan/dissectors/packet-gprscdr.c index dfdbd36c3c..f384d95ed5 100644 --- a/epan/dissectors/packet-gprscdr.c +++ b/epan/dissectors/packet-gprscdr.c @@ -33,6 +33,7 @@ #include #include +#include #include #include "packet-ber.h" @@ -335,7 +336,7 @@ static int hf_gprscdr_ServiceConditionChange_tAIChange = -1; static int hf_gprscdr_ServiceConditionChange_userLocationChange = -1; /*--- End of included file: packet-gprscdr-hf.c ---*/ -#line 45 "../../asn1/gprscdr/packet-gprscdr-template.c" +#line 46 "../../asn1/gprscdr/packet-gprscdr-template.c" static int ett_gprscdr = -1; static int ett_gprscdr_timestamp = -1; @@ -400,7 +401,9 @@ static gint ett_gprscdr_TWANUserLocationInfo = -1; static gint ett_gprscdr_UserCSGInformation = -1; /*--- End of included file: packet-gprscdr-ett.c ---*/ -#line 50 "../../asn1/gprscdr/packet-gprscdr-template.c" +#line 51 "../../asn1/gprscdr/packet-gprscdr-template.c" + +static expert_field ei_gprscdr_not_dissected = EI_INIT; static const value_string gprscdr_daylight_saving_time_vals[] = { {0, "No adjustment"}, @@ -597,7 +600,7 @@ static int dissect_gprscdr_T_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 53 "../../asn1/gprscdr/gprscdr.cnf" - proto_tree_add_text(tree, tvb, offset, -1, "Not dissected"); + proto_tree_add_expert(tree, actx->pinfo, &ei_gprscdr_not_dissected, tvb, offset, -1); @@ -2936,7 +2939,7 @@ int dissect_gprscdr_GPRSRecord_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pr /*--- End of included file: packet-gprscdr-fn.c ---*/ -#line 60 "../../asn1/gprscdr/packet-gprscdr-template.c" +#line 63 "../../asn1/gprscdr/packet-gprscdr-template.c" @@ -4071,7 +4074,7 @@ proto_register_gprscdr(void) NULL, HFILL }}, /*--- End of included file: packet-gprscdr-hfarr.c ---*/ -#line 70 "../../asn1/gprscdr/packet-gprscdr-template.c" +#line 73 "../../asn1/gprscdr/packet-gprscdr-template.c" }; /* List of subtrees */ @@ -4139,13 +4142,21 @@ proto_register_gprscdr(void) &ett_gprscdr_UserCSGInformation, /*--- End of included file: packet-gprscdr-ettarr.c ---*/ -#line 78 "../../asn1/gprscdr/packet-gprscdr-template.c" +#line 81 "../../asn1/gprscdr/packet-gprscdr-template.c" }; + static ei_register_info ei[] = { + { &ei_gprscdr_not_dissected, { "gprscdr.not_dissected", PI_UNDECODED, PI_WARN, "Not dissected", EXPFILL }}, + }; + + expert_module_t* expert_gprscdr; + proto_gprscdr = proto_register_protocol(PNAME, PSNAME, PFNAME); proto_register_field_array(proto_gprscdr, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_gprscdr = expert_register_protocol(proto_gprscdr); + expert_register_field_array(expert_gprscdr, ei, array_length(ei)); } /* The registration hand-off routine */ diff --git a/epan/dissectors/packet-gsm_map.c b/epan/dissectors/packet-gsm_map.c index 8ad7158e7a..c088555138 100644 --- a/epan/dissectors/packet-gsm_map.c +++ b/epan/dissectors/packet-gsm_map.c @@ -158,6 +158,7 @@ static int hf_gsm_map_ericsson_locationInformation_rat = -1; static int hf_gsm_map_ericsson_locationInformation_lac = -1; static int hf_gsm_map_ericsson_locationInformation_ci = -1; static int hf_gsm_map_ericsson_locationInformation_sac = -1; +static int hf_gsm_map_ussd_string = -1; /*--- Included file: packet-gsm_map-hf.c ---*/ @@ -1896,7 +1897,7 @@ static int hf_NokiaMAP_Extensions_AccessSubscriptionListExt_item = -1; /* Acces static int hf_NokiaMAP_Extensions_AllowedServiceData_amr_wb_allowed = -1; /*--- End of included file: packet-gsm_map-hf.c ---*/ -#line 155 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 156 "../../asn1/gsm_map/packet-gsm_map-template.c" /* Initialize the subtree pointers */ static gint ett_gsm_map = -1; @@ -1924,6 +1925,7 @@ static gint ett_gsm_map_GeographicalInformation = -1; static gint ett_gsm_map_apn_str = -1; static gint ett_gsm_map_LocationNumber = -1; static gint ett_gsm_map_ericsson_locationInformation = -1; +static gint ett_gsm_map_extention_data = -1; /*--- Included file: packet-gsm_map-ett.c ---*/ @@ -2602,12 +2604,13 @@ static gint ett_NokiaMAP_Extensions_AccessSubscriptionListExt = -1; static gint ett_NokiaMAP_Extensions_AllowedServiceData = -1; /*--- End of included file: packet-gsm_map-ett.c ---*/ -#line 184 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 186 "../../asn1/gsm_map/packet-gsm_map-template.c" static expert_field ei_gsm_map_unknown_sequence3 = EI_INIT; static expert_field ei_gsm_map_unknown_sequence = EI_INIT; static expert_field ei_gsm_map_unknown_parameter = EI_INIT; static expert_field ei_gsm_map_unknown_invokeData = EI_INIT; +static expert_field ei_gsm_map_undecoded = EI_INIT; static dissector_handle_t gsm_sms_handle; /* SMS TPDU */ static dissector_handle_t data_handle; @@ -2833,7 +2836,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ octet = tvb_get_guint8(tvb,offset); switch (octet){ case 0: - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Maximum SDU size/Reserved"); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_qos_max_sdu, tvb, offset, 1, octet, "Reserved"); break; case 0x93: value = 1502; @@ -2852,7 +2855,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ value = octet * 10; proto_tree_add_uint(subtree, hf_gsm_map_qos_max_sdu, tvb, offset, 1, value); }else{ - proto_tree_add_text(subtree, tvb, offset, 1, "Maximum SDU size value 0x%x not defined in TS 24.008",octet); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_qos_max_sdu, tvb, offset, 1, octet, "0x%x not defined in TS 24.008", octet); } } offset++; @@ -2860,7 +2863,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ /* Maximum bit rate for uplink, octet 8 */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Maximum bit rate for uplink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_max_brate_ulink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_max_brate_ulink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -2868,7 +2871,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ /* Maximum bit rate for downlink, octet 9 (see 3GPP TS 23.107) */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Maximum bit rate for downlink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_max_brate_dlink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_max_brate_dlink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -2890,7 +2893,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Guaranteed bit rate for uplink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_guaranteed_max_brate_ulink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_guaranteed_max_brate_ulink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -2901,7 +2904,7 @@ dissect_gsm_map_ext_qos_subscribed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_ */ octet = tvb_get_guint8(tvb,offset); if (octet == 0 ){ - proto_tree_add_text(subtree, tvb, offset, 1, "Subscribed Guaranteed bit rate for downlink/Reserved" ); + proto_tree_add_uint_format_value(subtree, hf_gsm_map_guaranteed_max_brate_dlink, tvb, offset, 1, octet, "Reserved" ); }else{ proto_tree_add_uint(subtree, hf_gsm_map_guaranteed_max_brate_dlink, tvb, offset, 1, gsm_map_calc_bitrate(octet)); } @@ -3344,11 +3347,12 @@ dissect_gsm_map_T_extId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_gsm_map_T_extType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 231 "../../asn1/gsm_map/gsm_map.cnf" - proto_tree_add_text(tree, tvb, offset, -1, "Extension Data"); + proto_tree *ext_tree; + ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gsm_map_extention_data, NULL, "Extension Data"); if (obj_id){ - offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, tree, NULL); + offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, ext_tree, NULL); }else{ - call_dissector(data_handle, tvb, actx->pinfo, tree); + call_dissector(data_handle, tvb, actx->pinfo, ext_tree); offset = tvb_length_remaining(tvb,offset); } @@ -3458,7 +3462,7 @@ dissect_gsm_map_SLR_ArgExtensionContainer(gboolean implicit_tag _U_, tvbuff_t *t int dissect_gsm_map_TBCD_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 257 "../../asn1/gsm_map/gsm_map.cnf" +#line 258 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; const char *digit_str; @@ -3493,7 +3497,7 @@ dissect_gsm_map_DiameterIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i int dissect_gsm_map_AddressString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 244 "../../asn1/gsm_map/gsm_map.cnf" +#line 245 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -3563,7 +3567,7 @@ dissect_gsm_map_ProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off static int dissect_gsm_map_SignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 361 "../../asn1/gsm_map/gsm_map.cnf" +#line 362 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -3587,7 +3591,7 @@ static const ber_sequence_t gsm_map_ExternalSignalInfo_sequence[] = { int dissect_gsm_map_ExternalSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 785 "../../asn1/gsm_map/gsm_map.cnf" +#line 786 "../../asn1/gsm_map/gsm_map.cnf" /* -- Information about the internal structure is given in -- clause 7.6.9. @@ -3629,7 +3633,7 @@ if (!actx->value_ptr) /* TODO: There may be more than one IE */ break; default: - proto_tree_add_text(subtree, (tvbuff_t*)actx->value_ptr, 0, length, "If you want this decoded send the packet to Wireshark-dev"); + proto_tree_add_expert(subtree, actx->pinfo, &ei_gsm_map_undecoded, (tvbuff_t*)actx->value_ptr, 0, length); break; }/* switch(octet) */ break; @@ -3725,7 +3729,7 @@ dissect_gsm_map_AccessNetworkProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb static int dissect_gsm_map_LongSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 278 "../../asn1/gsm_map/gsm_map.cnf" +#line 279 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint8 octet; @@ -3803,7 +3807,7 @@ dissect_gsm_map_AlertingPattern(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in int dissect_gsm_map_GSN_Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 610 "../../asn1/gsm_map/gsm_map.cnf" +#line 611 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint8 octet; @@ -3954,7 +3958,7 @@ dissect_gsm_map_HLR_List(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse int dissect_gsm_map_GlobalCellId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 865 "../../asn1/gsm_map/gsm_map.cnf" +#line 866 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -4231,7 +4235,7 @@ dissect_gsm_map_TA_Id(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _ int dissect_gsm_map_RAIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 634 "../../asn1/gsm_map/gsm_map.cnf" +#line 635 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -4279,7 +4283,7 @@ dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(gboolean implicit_tag _U_ int dissect_gsm_map_LAIFixedLength(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 646 "../../asn1/gsm_map/gsm_map.cnf" +#line 647 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -4405,7 +4409,7 @@ dissect_gsm_map_EMLPP_Info(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off static int dissect_gsm_map_Ext_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 488 "../../asn1/gsm_map/gsm_map.cnf" +#line 489 "../../asn1/gsm_map/gsm_map.cnf" /* Note Ext-SS-Status can have more than one byte */ tvbuff_t *parameter_tvb; @@ -4538,7 +4542,7 @@ dissect_gsm_map_ss_RegisterSS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int dissect_gsm_map_ss_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 468 "../../asn1/gsm_map/gsm_map.cnf" +#line 469 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint8 octet; @@ -4572,7 +4576,7 @@ dissect_gsm_map_ss_ForwardingOptions(gboolean implicit_tag _U_, tvbuff_t *tvb _U offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, NULL); -#line 553 "../../asn1/gsm_map/gsm_map.cnf" +#line 554 "../../asn1/gsm_map/gsm_map.cnf" proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,ENC_BIG_ENDIAN); @@ -4891,7 +4895,7 @@ dissect_gsm_map_ss_InterrogateSS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U int dissect_gsm_map_ss_USSD_DataCodingScheme(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 511 "../../asn1/gsm_map/gsm_map.cnf" +#line 512 "../../asn1/gsm_map/gsm_map.cnf" /*The structure of the USSD-DataCodingScheme is defined by * the Cell Broadcast Data Coding Scheme as described in * TS 3GPP TS 23.038 @@ -4917,7 +4921,7 @@ dissect_gsm_map_ss_USSD_DataCodingScheme(gboolean implicit_tag _U_, tvbuff_t *tv int dissect_gsm_map_ss_USSD_String(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 526 "../../asn1/gsm_map/gsm_map.cnf" +#line 527 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; guint length; @@ -4932,15 +4936,15 @@ dissect_gsm_map_ss_USSD_String(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int switch(sms_encoding){ case SMS_ENCODING_7BIT: case SMS_ENCODING_7BIT_LANG: - proto_tree_add_text(tree, parameter_tvb , 0, length, "USSD String: %s", tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_3GPP_TS_23_038_7BITS|ENC_NA)); + proto_tree_add_string(tree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_3GPP_TS_23_038_7BITS|ENC_NA)); break; case SMS_ENCODING_8BIT: /* XXX - ASCII, or some extended ASCII? */ - proto_tree_add_text(tree, parameter_tvb , 0, length, "USSD String: %s", tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_ASCII|ENC_NA)); + proto_tree_add_string(tree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_ASCII|ENC_NA)); break; case SMS_ENCODING_UCS2: case SMS_ENCODING_UCS2_LANG: - proto_tree_add_text(tree, parameter_tvb , 0, length, "USSD String: %s", tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_UCS_2|ENC_BIG_ENDIAN)); + proto_tree_add_string(tree, hf_gsm_map_ussd_string, parameter_tvb, 0, length, tvb_get_string_enc(wmem_packet_scope(), parameter_tvb, 0, length, ENC_UCS_2|ENC_BIG_ENDIAN)); break; default: break; @@ -5366,7 +5370,7 @@ static const ber_sequence_t gsm_map_er_SM_DeliveryFailureCause_sequence[] = { static int dissect_gsm_map_er_SM_DeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 368 "../../asn1/gsm_map/gsm_map.cnf" +#line 369 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ guint8 oct; offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -6297,7 +6301,7 @@ dissect_gsm_map_sm_RoutingInfoForSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb static int dissect_gsm_map_sm_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 337 "../../asn1/gsm_map/gsm_map.cnf" +#line 338 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_IMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6311,7 +6315,7 @@ dissect_gsm_map_sm_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs static int dissect_gsm_map_sm_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 341 "../../asn1/gsm_map/gsm_map.cnf" +#line 342 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_LMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6325,7 +6329,7 @@ dissect_gsm_map_sm_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs static int dissect_gsm_map_sm_T_serviceCentreAddressDA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 357 "../../asn1/gsm_map/gsm_map.cnf" +#line 358 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6365,7 +6369,7 @@ dissect_gsm_map_sm_SM_RP_DA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_gsm_map_sm_T_msisdn(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 349 "../../asn1/gsm_map/gsm_map.cnf" +#line 350 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_ISDN_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6379,7 +6383,7 @@ actx->pinfo->p2p_dir = P2P_DIR_RECV; static int dissect_gsm_map_sm_T_serviceCentreAddressOA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 325 "../../asn1/gsm_map/gsm_map.cnf" +#line 326 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -6444,7 +6448,7 @@ static const ber_sequence_t gsm_map_sm_MO_ForwardSM_Arg_sequence[] = { static int dissect_gsm_map_sm_MO_ForwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 396 "../../asn1/gsm_map/gsm_map.cnf" +#line 397 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -6472,7 +6476,7 @@ static const ber_sequence_t gsm_map_sm_MO_ForwardSM_Res_sequence[] = { static int dissect_gsm_map_sm_MO_ForwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 408 "../../asn1/gsm_map/gsm_map.cnf" +#line 409 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -6507,7 +6511,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_Arg_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 420 "../../asn1/gsm_map/gsm_map.cnf" +#line 421 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -6535,7 +6539,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_Res_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 432 "../../asn1/gsm_map/gsm_map.cnf" +#line 433 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -6709,7 +6713,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_VGCS_Arg_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_VGCS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 444 "../../asn1/gsm_map/gsm_map.cnf" +#line 445 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -6766,7 +6770,7 @@ static const ber_sequence_t gsm_map_sm_MT_ForwardSM_VGCS_Res_sequence[] = { static int dissect_gsm_map_sm_MT_ForwardSM_VGCS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 456 "../../asn1/gsm_map/gsm_map.cnf" +#line 457 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -8145,7 +8149,7 @@ dissect_gsm_map_ms_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t * static int dissect_gsm_map_ms_LocationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 926 "../../asn1/gsm_map/gsm_map.cnf" +#line 927 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; const char *digit_str; @@ -8829,7 +8833,7 @@ dissect_gsm_map_ms_SGSN_Capability(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, static int dissect_gsm_map_ms_APN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 899 "../../asn1/gsm_map/gsm_map.cnf" +#line 900 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; int length, name_len, tmp; @@ -9080,7 +9084,7 @@ dissect_gsm_map_ms_UpdateGprsLocationRes(gboolean implicit_tag _U_, tvbuff_t *tv static int dissect_gsm_map_ms_IntegrityProtectionInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 682 "../../asn1/gsm_map/gsm_map.cnf" +#line 683 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; asn1_ctx_t asn1_ctx; @@ -9103,7 +9107,7 @@ dissect_gsm_map_ms_IntegrityProtectionInformation(gboolean implicit_tag _U_, tvb static int dissect_gsm_map_ms_EncryptionInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 694 "../../asn1/gsm_map/gsm_map.cnf" +#line 695 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; asn1_ctx_t asn1_ctx; @@ -9188,7 +9192,7 @@ dissect_gsm_map_ms_AllowedUMTS_Algorithms(gboolean implicit_tag _U_, tvbuff_t *t static int dissect_gsm_map_ms_RadioResourceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 658 "../../asn1/gsm_map/gsm_map.cnf" +#line 659 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -9259,7 +9263,7 @@ dissect_gsm_map_ms_BSSMAP_ServiceHandover(gboolean implicit_tag _U_, tvbuff_t *t static int dissect_gsm_map_ms_RANAP_ServiceHandover(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 670 "../../asn1/gsm_map/gsm_map.cnf" +#line 671 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; asn1_ctx_t asn1_ctx; @@ -10194,7 +10198,7 @@ static int dissect_gsm_map_ms_T_forwardingOptions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_gsm_map_ms_Ext_ForwOptions(implicit_tag, tvb, offset, actx, tree, hf_index); -#line 559 "../../asn1/gsm_map/gsm_map.cnf" +#line 560 "../../asn1/gsm_map/gsm_map.cnf" proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,ENC_BIG_ENDIAN); @@ -11357,7 +11361,7 @@ dissect_gsm_map_ms_VlrCamelSubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t static int dissect_gsm_map_ms_PDP_Type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 567 "../../asn1/gsm_map/gsm_map.cnf" +#line 568 "../../asn1/gsm_map/gsm_map.cnf" guint8 pdp_type_org; tvbuff_t *parameter_tvb; @@ -11390,7 +11394,7 @@ dissect_gsm_map_ms_PDP_Type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of int dissect_gsm_map_ms_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 589 "../../asn1/gsm_map/gsm_map.cnf" +#line 590 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; @@ -11412,7 +11416,7 @@ dissect_gsm_map_ms_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int dissect_gsm_map_ms_Ext_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 600 "../../asn1/gsm_map/gsm_map.cnf" +#line 601 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; @@ -15607,7 +15611,7 @@ dissect_gsm_map_lcs_ProvideSubscriberLocation_Arg(gboolean implicit_tag _U_, tvb int dissect_gsm_map_lcs_Ext_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 877 "../../asn1/gsm_map/gsm_map.cnf" +#line 878 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; @@ -17036,7 +17040,7 @@ static const ber_sequence_t gsm_old_Bss_APDU_sequence[] = { static int dissect_gsm_old_Bss_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 707 "../../asn1/gsm_map/gsm_map.cnf" +#line 708 "../../asn1/gsm_map/gsm_map.cnf" guint8 octet; guint8 length; tvbuff_t *next_tvb; @@ -17076,7 +17080,7 @@ if (!actx->value_ptr) /* TODO: There may be more than one IE */ break; default: - proto_tree_add_text(subtree, (tvbuff_t*)actx->value_ptr, 0, length, "If you want this decoded send the packet to Wireshark-dev"); + proto_tree_add_expert(subtree, actx->pinfo, &ei_gsm_map_undecoded, (tvbuff_t*)actx->value_ptr, 0, length); break; }/* switch(octet) */ break; @@ -17619,7 +17623,7 @@ dissect_gsm_old_PlmnContainer(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int static int dissect_gsm_old_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 329 "../../asn1/gsm_map/gsm_map.cnf" +#line 330 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_IMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -17633,7 +17637,7 @@ dissect_gsm_old_T_imsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_gsm_old_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 333 "../../asn1/gsm_map/gsm_map.cnf" +#line 334 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_LMSI(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -17647,7 +17651,7 @@ dissect_gsm_old_T_lmsi(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_gsm_old_T_serviceCentreAddressDA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 353 "../../asn1/gsm_map/gsm_map.cnf" +#line 354 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -17687,7 +17691,7 @@ dissect_gsm_old_SM_RP_DAold(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_gsm_old_T_msisdn(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 345 "../../asn1/gsm_map/gsm_map.cnf" +#line 346 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_RECV; offset = dissect_gsm_map_ISDN_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -17701,7 +17705,7 @@ actx->pinfo->p2p_dir = P2P_DIR_RECV; static int dissect_gsm_old_T_serviceCentreAddressOA(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 321 "../../asn1/gsm_map/gsm_map.cnf" +#line 322 "../../asn1/gsm_map/gsm_map.cnf" actx->pinfo->p2p_dir = P2P_DIR_SENT; offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -17746,7 +17750,7 @@ static const ber_sequence_t gsm_old_ForwardSM_Arg_sequence[] = { static int dissect_gsm_old_ForwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 380 "../../asn1/gsm_map/gsm_map.cnf" +#line 381 "../../asn1/gsm_map/gsm_map.cnf" /* dissect_gsm_map_SignalInfo will return parameter_tvb in actx */ offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, @@ -18617,7 +18621,7 @@ dissect_gsm_ss_LCS_PeriodicLocationCancellationArg(gboolean implicit_tag _U_, tv static int dissect_gsm_map_ericsson_T_locationInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 955 "../../asn1/gsm_map/gsm_map.cnf" +#line 956 "../../asn1/gsm_map/gsm_map.cnf" tvbuff_t *parameter_tvb; proto_tree *subtree; guint8 rat; @@ -20266,7 +20270,7 @@ dissect_NokiaMAP_Extensions_AllowedServiceData(gboolean implicit_tag _U_, tvbuff /*--- End of included file: packet-gsm_map-fn.c ---*/ -#line 847 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 850 "../../asn1/gsm_map/packet-gsm_map-template.c" /* Specific translation for MAP V3 */ const value_string gsm_map_V1V2_opr_code_strings[] = { @@ -20488,7 +20492,7 @@ const value_string gsm_map_opr_code_strings[] = { /* Unknown or empty loop list OPERATION */ /*--- End of included file: packet-gsm_map-table.c ---*/ -#line 858 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 861 "../../asn1/gsm_map/packet-gsm_map-template.c" { 0, NULL } }; @@ -20705,7 +20709,7 @@ static const value_string gsm_map_err_code_string_vals[] = { /* Unknown or empty loop list OPERATION */ /*--- End of included file: packet-gsm_map-table.c ---*/ -#line 864 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 867 "../../asn1/gsm_map/packet-gsm_map-template.c" { 0, NULL } }; #endif @@ -21395,7 +21399,7 @@ static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset, break; case 61: /*unstructuredSS-Notify*/ /* TRUE ? */ - proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnResultData blob"); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_gsm_map_unknown_invokeData, tvb, offset, -1, "Unknown returnResultData blob"); break; case 62: /*AnyTimeSubscriptionInterrogation*/ offset=dissect_gsm_map_ms_AnyTimeSubscriptionInterrogationRes(FALSE, tvb, offset, actx, tree, -1); @@ -22733,6 +22737,11 @@ void proto_register_gsm_map(void) { { "SAC", "gsm_map.ericsson.locationInformation.sac", FT_UINT16, BASE_DEC_HEX, NULL, 0, "Service Area Code", HFILL }}, + { &hf_gsm_map_ussd_string, + { "USSD String", "gsm_map.ussd_string", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + /*--- Included file: packet-gsm_map-hfarr.c ---*/ @@ -29504,7 +29513,7 @@ void proto_register_gsm_map(void) { NULL, HFILL }}, /*--- End of included file: packet-gsm_map-hfarr.c ---*/ -#line 2893 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 2901 "../../asn1/gsm_map/packet-gsm_map-template.c" }; /* List of subtrees */ @@ -29534,6 +29543,7 @@ void proto_register_gsm_map(void) { &ett_gsm_map_apn_str, &ett_gsm_map_LocationNumber, &ett_gsm_map_ericsson_locationInformation, + &ett_gsm_map_extention_data, /*--- Included file: packet-gsm_map-ettarr.c ---*/ @@ -30212,7 +30222,7 @@ void proto_register_gsm_map(void) { &ett_NokiaMAP_Extensions_AllowedServiceData, /*--- End of included file: packet-gsm_map-ettarr.c ---*/ -#line 2924 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 2933 "../../asn1/gsm_map/packet-gsm_map-template.c" }; static ei_register_info ei[] = { @@ -30220,6 +30230,7 @@ void proto_register_gsm_map(void) { { &ei_gsm_map_unknown_sequence, { "gsm_map.unknown.sequence", PI_UNDECODED, PI_ERROR, "Unknown or not implemented sequence", EXPFILL }}, { &ei_gsm_map_unknown_parameter, { "gsm_map.unknown.parameter", PI_UNDECODED, PI_ERROR, "Unknown or not implemented parameter", EXPFILL }}, { &ei_gsm_map_unknown_invokeData, { "gsm_map.unknown.invokeData", PI_MALFORMED, PI_WARN, "Unknown invokeData", EXPFILL }}, + { &ei_gsm_map_undecoded, { "gsm_map.undecoded", PI_UNDECODED, PI_WARN, "If you want this decoded send the packet to Wireshark-dev", EXPFILL }}, }; static const enum_val_t application_context_modes[] = { @@ -30314,7 +30325,7 @@ void proto_register_gsm_map(void) { /*--- End of included file: packet-gsm_map-dis-tab.c ---*/ -#line 2960 "../../asn1/gsm_map/packet-gsm_map-template.c" +#line 2970 "../../asn1/gsm_map/packet-gsm_map-template.c" oid_add_from_string("ericsson-gsm-Map-Ext","1.2.826.0.1249.58.1.0" ); oid_add_from_string("accessTypeNotAllowed-id","1.3.12.2.1107.3.66.1.2"); /*oid_add_from_string("map-ac networkLocUp(1) version3(3)","0.4.0.0.1.0.1.3" ); diff --git a/epan/dissectors/packet-h225.c b/epan/dissectors/packet-h225.c index 12076b34e2..103dc9b340 100644 --- a/epan/dissectors/packet-h225.c +++ b/epan/dissectors/packet-h225.c @@ -109,6 +109,7 @@ static int hf_h225_ras_req_frame = -1; static int hf_h225_ras_rsp_frame = -1; static int hf_h225_ras_dup = -1; static int hf_h225_ras_deltatime = -1; +static int hf_h225_debug_dissector_try_string = -1; /*--- Included file: packet-h225-hf.c ---*/ @@ -885,7 +886,7 @@ static int hf_h225_stopped = -1; /* NULL */ static int hf_h225_notAvailable = -1; /* NULL */ /*--- End of included file: packet-h225-hf.c ---*/ -#line 106 "../../asn1/h225/packet-h225-template.c" +#line 107 "../../asn1/h225/packet-h225-template.c" /* Initialize the subtree pointers */ static gint ett_h225 = -1; @@ -1133,7 +1134,7 @@ static gint ett_h225_ServiceControlResponse = -1; static gint ett_h225_T_result = -1; /*--- End of included file: packet-h225-ett.c ---*/ -#line 110 "../../asn1/h225/packet-h225-template.c" +#line 111 "../../asn1/h225/packet-h225-template.c" /* Preferences */ static guint h225_tls_port = TLS_PORT_CS; @@ -1891,7 +1892,7 @@ dissect_h225_PartyNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ static int dissect_h225_TBCD_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 717 "../../asn1/h225/h225.cnf" +#line 720 "../../asn1/h225/h225.cnf" int min_len, max_len; gboolean has_extension; @@ -3677,7 +3678,7 @@ dissect_h225_CircuitIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_h225_T_standard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 681 "../../asn1/h225/h225.cnf" +#line 682 "../../asn1/h225/h225.cnf" guint32 value_int = (guint32)-1; gef_ctx_t *gefx; @@ -3695,7 +3696,7 @@ dissect_h225_T_standard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, static int dissect_h225_T_oid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 690 "../../asn1/h225/h225.cnf" +#line 691 "../../asn1/h225/h225.cnf" const gchar *oid_str = NULL; gef_ctx_t *gefx; @@ -3727,17 +3728,18 @@ int dissect_h225_GenericIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 668 "../../asn1/h225/h225.cnf" gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h225_GenericIdentifier, GenericIdentifier_choice, NULL); -#line 670 "../../asn1/h225/h225.cnf" +#line 671 "../../asn1/h225/h225.cnf" gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG GenericIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/ gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h225_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree, actx); } actx->private_data = gefx; /* subdissector could overwrite it */ @@ -3749,16 +3751,18 @@ dissect_h225_GenericIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac static int dissect_h225_T_raw(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 700 "../../asn1/h225/h225.cnf" +#line 701 "../../asn1/h225/h225.cnf" tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, &value_tvb); gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h225_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } @@ -7510,7 +7514,7 @@ static int dissect_RasMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro /*--- End of included file: packet-h225-fn.c ---*/ -#line 134 "../../asn1/h225/packet-h225-template.c" +#line 135 "../../asn1/h225/packet-h225-template.c" /* Forward declaration we need below */ @@ -7606,6 +7610,9 @@ void proto_register_h225(void) { { &hf_h225_ras_deltatime, { "RAS Service Response Time", "h225.ras.timedelta", FT_RELATIVE_TIME, BASE_NONE, NULL, 0, "Timedelta between RAS-Request and RAS-Response", HFILL }}, + { &hf_h225_debug_dissector_try_string, + { "*** DEBUG dissector_try_string", "h225.debug.dissector_try_string", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, /*--- Included file: packet-h225-hfarr.c ---*/ @@ -10692,7 +10699,7 @@ void proto_register_h225(void) { NULL, HFILL }}, /*--- End of included file: packet-h225-hfarr.c ---*/ -#line 231 "../../asn1/h225/packet-h225-template.c" +#line 235 "../../asn1/h225/packet-h225-template.c" }; /* List of subtrees */ @@ -10942,7 +10949,7 @@ void proto_register_h225(void) { &ett_h225_T_result, /*--- End of included file: packet-h225-ettarr.c ---*/ -#line 237 "../../asn1/h225/packet-h225-template.c" +#line 241 "../../asn1/h225/packet-h225-template.c" }; module_t *h225_module; diff --git a/epan/dissectors/packet-h245.c b/epan/dissectors/packet-h245.c index b8c0bc9bcd..0ad29819f9 100644 --- a/epan/dissectors/packet-h245.c +++ b/epan/dissectors/packet-h245.c @@ -87,6 +87,8 @@ static int hf_h245Manufacturer = -1; static int hf_h245_subMessageIdentifier_standard = -1; static int h245_tap = -1; static int h245dg_tap = -1; +static int hf_h245_debug_dissector_try_string = -1; + h245_packet_info *h245_pi=NULL; static gboolean h245_reassembly = TRUE; @@ -215,7 +217,7 @@ typedef enum _IndicationMessage_enum { } IndicationMessage_enum; /*--- End of included file: packet-h245-val.h ---*/ -#line 88 "../../asn1/h245/packet-h245-template.c" +#line 90 "../../asn1/h245/packet-h245-template.c" static const value_string h245_RequestMessage_short_vals[] = { { RequestMessage_nonStandard , "NSM" }, @@ -1920,7 +1922,7 @@ static int hf_h245_encrypted = -1; /* OCTET_STRING */ static int hf_h245_encryptedAlphanumeric = -1; /* EncryptedAlphanumeric */ /*--- End of included file: packet-h245-hf.c ---*/ -#line 386 "../../asn1/h245/packet-h245-template.c" +#line 388 "../../asn1/h245/packet-h245-template.c" /* Initialize the subtree pointers */ static int ett_h245 = -1; @@ -2421,7 +2423,7 @@ static gint ett_h245_FlowControlIndication = -1; static gint ett_h245_MobileMultilinkReconfigurationIndication = -1; /*--- End of included file: packet-h245-ett.c ---*/ -#line 391 "../../asn1/h245/packet-h245-template.c" +#line 393 "../../asn1/h245/packet-h245-template.c" /* Forward declarations */ static int dissect_h245_MultimediaSystemControlMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); @@ -2509,7 +2511,7 @@ static const per_sequence_t H221NonStandardID_sequence[] = { static int dissect_h245_H221NonStandardID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 966 "../../asn1/h245/h245.cnf" +#line 982 "../../asn1/h245/h245.cnf" t35CountryCode = 0; t35Extension = 0; manufacturerCode = 0; @@ -2517,7 +2519,7 @@ dissect_h245_H221NonStandardID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h245_H221NonStandardID, H221NonStandardID_sequence); -#line 970 "../../asn1/h245/h245.cnf" +#line 986 "../../asn1/h245/h245.cnf" h221NonStandard = ((t35CountryCode * 256) + t35Extension) * 65536 + manufacturerCode; proto_tree_add_uint(tree, hf_h245Manufacturer, tvb, (offset>>3)-4, 4, h221NonStandard); @@ -2539,7 +2541,7 @@ static const per_choice_t NonStandardIdentifier_choice[] = { static int dissect_h245_NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 947 "../../asn1/h245/h245.cnf" +#line 963 "../../asn1/h245/h245.cnf" gint32 value; nsiOID = ""; @@ -2568,7 +2570,7 @@ dissect_h245_NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t static int dissect_h245_T_nsd_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 981 "../../asn1/h245/h245.cnf" +#line 997 "../../asn1/h245/h245.cnf" tvbuff_t *next_tvb = NULL; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -2591,7 +2593,7 @@ static const per_sequence_t NonStandardParameter_sequence[] = { static int dissect_h245_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 979 "../../asn1/h245/h245.cnf" +#line 995 "../../asn1/h245/h245.cnf" nsp_handle = NULL; offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -3544,7 +3546,7 @@ dissect_h245_T_t38fax(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p static int dissect_h245_T_standardOid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 727 "../../asn1/h245/h245.cnf" +#line 730 "../../asn1/h245/h245.cnf" const gchar *standard_oid_str = NULL; gef_ctx_t *gefx; @@ -3604,19 +3606,21 @@ static const per_choice_t CapabilityIdentifier_choice[] = { static int dissect_h245_CapabilityIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 714 "../../asn1/h245/h245.cnf" +#line 715 "../../asn1/h245/h245.cnf" gef_ctx_t *gefx; + proto_item* ti; + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h245_CapabilityIdentifier, CapabilityIdentifier_choice, NULL); -#line 716 "../../asn1/h245/h245.cnf" +#line 719 "../../asn1/h245/h245.cnf" gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG CapabilityIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/ gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree, actx); } actx->private_data = gefx; /* subdissector could overwrite it */ @@ -3638,7 +3642,7 @@ dissect_h245_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t static int dissect_h245_T_standard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 757 "../../asn1/h245/h245.cnf" +#line 761 "../../asn1/h245/h245.cnf" guint32 value_int = (guint32)-1; gef_ctx_t *gefx; @@ -3671,19 +3675,20 @@ static const per_choice_t ParameterIdentifier_choice[] = { static int dissect_h245_ParameterIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 744 "../../asn1/h245/h245.cnf" +#line 747 "../../asn1/h245/h245.cnf" gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h245_ParameterIdentifier, ParameterIdentifier_choice, NULL); -#line 746 "../../asn1/h245/h245.cnf" +#line 750 "../../asn1/h245/h245.cnf" gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG ParameterIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/ gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree, actx); } actx->private_data = gefx; /* subdissector could overwrite it */ @@ -3695,11 +3700,12 @@ dissect_h245_ParameterIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t * static int dissect_h245_T_booleanArray(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 766 "../../asn1/h245/h245.cnf" +#line 770 "../../asn1/h245/h245.cnf" guint32 value; guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, &value, FALSE); @@ -3709,7 +3715,8 @@ dissect_h245_T_booleanArray(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx buf = wmem_new(actx->pinfo->pool, guint8); buf[0] = value; value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint8), sizeof(guint8)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(actx->pinfo, value_tvb, "booleanArray"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } @@ -3722,11 +3729,12 @@ dissect_h245_T_booleanArray(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_h245_T_unsignedMin(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 783 "../../asn1/h245/h245.cnf" +#line 789 "../../asn1/h245/h245.cnf" guint32 value; guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 65535U, &value, FALSE); @@ -3736,7 +3744,8 @@ dissect_h245_T_unsignedMin(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ buf = (guint8 *)wmem_new(actx->pinfo->pool, guint16); phton16(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint16), sizeof(guint16)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(actx->pinfo, value_tvb, "unsignedMin"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } @@ -3749,11 +3758,12 @@ dissect_h245_T_unsignedMin(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ static int dissect_h245_T_unsignedMax(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 800 "../../asn1/h245/h245.cnf" +#line 808 "../../asn1/h245/h245.cnf" guint32 value; guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 65535U, &value, FALSE); @@ -3763,7 +3773,8 @@ dissect_h245_T_unsignedMax(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ buf = (guint8 *)wmem_new(actx->pinfo->pool, guint16); phton16(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint16), sizeof(guint16)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(actx->pinfo, value_tvb, "unsignedMax"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } @@ -3776,11 +3787,12 @@ dissect_h245_T_unsignedMax(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _ static int dissect_h245_T_unsigned32Min(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 817 "../../asn1/h245/h245.cnf" +#line 827 "../../asn1/h245/h245.cnf" guint32 value; guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4294967295U, &value, FALSE); @@ -3790,7 +3802,8 @@ dissect_h245_T_unsigned32Min(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx buf = (guint8 *)wmem_new(actx->pinfo->pool, guint32); phton32(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint32), sizeof(guint32)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(actx->pinfo, value_tvb, "unsigned32Min"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } @@ -3803,11 +3816,12 @@ dissect_h245_T_unsigned32Min(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_h245_T_unsigned32Max(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 834 "../../asn1/h245/h245.cnf" +#line 846 "../../asn1/h245/h245.cnf" guint32 value; guint8 *buf; tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4294967295U, &value, FALSE); @@ -3817,7 +3831,8 @@ dissect_h245_T_unsigned32Max(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx buf = (guint8 *)wmem_new(actx->pinfo->pool, guint32); phton32(buf, value); value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint32), sizeof(guint32)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); add_new_data_source(actx->pinfo, value_tvb, "unsigned32Max"); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } @@ -3830,16 +3845,18 @@ dissect_h245_T_unsigned32Max(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_h245_T_octetString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 851 "../../asn1/h245/h245.cnf" +#line 865 "../../asn1/h245/h245.cnf" tvbuff_t *value_tvb; gef_ctx_t *gefx; + proto_item* ti; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, FALSE, &value_tvb); gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } @@ -3927,7 +3944,7 @@ dissect_h245_GenericParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int dissect_h245_T_collapsing_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 671 "../../asn1/h245/h245.cnf" +#line 670 "../../asn1/h245/h245.cnf" gef_ctx_t *parent_gefx; parent_gefx = gef_ctx_get(actx->private_data); @@ -3935,7 +3952,7 @@ dissect_h245_T_collapsing_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac offset = dissect_h245_GenericParameter(tvb, offset, actx, tree, hf_index); -#line 676 "../../asn1/h245/h245.cnf" +#line 675 "../../asn1/h245/h245.cnf" actx->private_data = parent_gefx; return offset; @@ -3958,7 +3975,7 @@ dissect_h245_T_collapsing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_h245_T_nonCollapsing_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 680 "../../asn1/h245/h245.cnf" +#line 679 "../../asn1/h245/h245.cnf" gef_ctx_t *parent_gefx; parent_gefx = gef_ctx_get(actx->private_data); @@ -3966,7 +3983,7 @@ dissect_h245_T_nonCollapsing_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t offset = dissect_h245_GenericParameter(tvb, offset, actx, tree, hf_index); -#line 685 "../../asn1/h245/h245.cnf" +#line 684 "../../asn1/h245/h245.cnf" actx->private_data = parent_gefx; return offset; @@ -3989,10 +4006,11 @@ dissect_h245_T_nonCollapsing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_h245_T_nonCollapsingRaw(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 689 "../../asn1/h245/h245.cnf" +#line 688 "../../asn1/h245/h245.cnf" tvbuff_t *value_tvb; gef_ctx_t *parent_gefx; gef_ctx_t *gefx; + proto_item* ti; parent_gefx = gef_ctx_get(actx->private_data); actx->private_data = gef_ctx_alloc(parent_gefx, "nonCollapsingRaw"); @@ -4001,7 +4019,8 @@ dissect_h245_T_nonCollapsingRaw(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *a gefx = gef_ctx_get(actx->private_data); if (gefx) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/ + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + PROTO_ITEM_SET_HIDDEN(ti); dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree, actx); } actx->private_data = parent_gefx; @@ -4023,14 +4042,14 @@ static const per_sequence_t GenericCapability_sequence[] = { static int dissect_h245_GenericCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 664 "../../asn1/h245/h245.cnf" +#line 663 "../../asn1/h245/h245.cnf" void *priv_data = actx->private_data; actx->private_data = gef_ctx_alloc(NULL, "GenericCapability"); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h245_GenericCapability, GenericCapability_sequence); -#line 667 "../../asn1/h245/h245.cnf" +#line 666 "../../asn1/h245/h245.cnf" actx->private_data = priv_data; return offset; @@ -4219,7 +4238,7 @@ dissect_h245_T_payloadDescriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t * static int dissect_h245_T_rtpPayloadType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 932 "../../asn1/h245/h245.cnf" +#line 948 "../../asn1/h245/h245.cnf" unsigned int pt; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, @@ -4243,7 +4262,7 @@ static const per_sequence_t RTPPayloadType_sequence[] = { static int dissect_h245_RTPPayloadType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 924 "../../asn1/h245/h245.cnf" +#line 940 "../../asn1/h245/h245.cnf" rfc_number = 0; offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, @@ -6649,7 +6668,6 @@ dissect_h245_T_subMessageIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_ if (gefx) { gefx->subid = wmem_strdup_printf(wmem_packet_scope(), "%u", subMessageIdentifer); gef_ctx_update_key(gef_ctx_get(actx->private_data)); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG CapabilityIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/ } if (hf_index == hf_h245_subMessageIdentifier_standard) { @@ -6665,7 +6683,7 @@ dissect_h245_T_subMessageIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_ static int dissect_h245_T_messageContent_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 646 "../../asn1/h245/h245.cnf" +#line 645 "../../asn1/h245/h245.cnf" gef_ctx_t *parent_gefx; parent_gefx = gef_ctx_get(actx->private_data); @@ -6673,7 +6691,7 @@ dissect_h245_T_messageContent_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t offset = dissect_h245_GenericParameter(tvb, offset, actx, tree, hf_index); -#line 651 "../../asn1/h245/h245.cnf" +#line 650 "../../asn1/h245/h245.cnf" actx->private_data = parent_gefx; return offset; @@ -6726,13 +6744,13 @@ dissect_h245_GenericMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_h245_GenericInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 656 "../../asn1/h245/h245.cnf" +#line 655 "../../asn1/h245/h245.cnf" void *priv_data = actx->private_data; actx->private_data = gef_ctx_alloc(NULL, "GenericInformation"); offset = dissect_h245_GenericMessage(tvb, offset, actx, tree, hf_index); -#line 659 "../../asn1/h245/h245.cnf" +#line 658 "../../asn1/h245/h245.cnf" actx->private_data = priv_data; return offset; @@ -7231,7 +7249,7 @@ static const per_choice_t DataType_choice[] = { static int dissect_h245_DataType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1007 "../../asn1/h245/h245.cnf" +#line 1023 "../../asn1/h245/h245.cnf" gint choice_index; offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, @@ -7969,7 +7987,7 @@ dissect_h245_V76LogicalChannelParameters(tvbuff_t *tvb _U_, int offset _U_, asn1 static int dissect_h245_Ipv4_network(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 866 "../../asn1/h245/h245.cnf" +#line 882 "../../asn1/h245/h245.cnf" tvbuff_t *value_tvb; offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, @@ -7989,7 +8007,7 @@ dissect_h245_Ipv4_network(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U static int dissect_h245_TsapIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 877 "../../asn1/h245/h245.cnf" +#line 893 "../../asn1/h245/h245.cnf" guint32 tsapIdentifier; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, @@ -8246,13 +8264,13 @@ dissect_h245_TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int dissect_h245_T_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 896 "../../asn1/h245/h245.cnf" +#line 912 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = &upcoming_channel->media_addr; offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index); -#line 900 "../../asn1/h245/h245.cnf" +#line 916 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = NULL; @@ -8263,13 +8281,13 @@ dissect_h245_T_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx static int dissect_h245_T_mediaControlChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 914 "../../asn1/h245/h245.cnf" +#line 930 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = &upcoming_channel->media_control_addr; offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index); -#line 918 "../../asn1/h245/h245.cnf" +#line 934 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = NULL; @@ -8661,14 +8679,14 @@ static const per_sequence_t EncryptionSync_sequence[] = { static int dissect_h245_EncryptionSync(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 706 "../../asn1/h245/h245.cnf" +#line 707 "../../asn1/h245/h245.cnf" void *priv_data = actx->private_data; actx->private_data = gef_ctx_alloc(NULL, "EncryptionSync"); offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h245_EncryptionSync, EncryptionSync_sequence); -#line 709 "../../asn1/h245/h245.cnf" +#line 710 "../../asn1/h245/h245.cnf" actx->private_data = priv_data; return offset; @@ -10948,13 +10966,13 @@ dissect_h245_OLC_ack_reverseLogicalChannelParameters(tvbuff_t *tvb _U_, int offs static int dissect_h245_Ack_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 887 "../../asn1/h245/h245.cnf" +#line 903 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = &upcoming_channel->media_addr; offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index); -#line 891 "../../asn1/h245/h245.cnf" +#line 907 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = NULL; @@ -10965,13 +10983,13 @@ dissect_h245_Ack_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int dissect_h245_Ack_mediaControlChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 905 "../../asn1/h245/h245.cnf" +#line 921 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = &upcoming_channel->media_control_addr; offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index); -#line 909 "../../asn1/h245/h245.cnf" +#line 925 "../../asn1/h245/h245.cnf" if (upcoming_channel) upcoming_channel->upcoming_addr = NULL; @@ -14226,7 +14244,7 @@ dissect_h245_FunctionNotSupportedCause(tvbuff_t *tvb _U_, int offset _U_, asn1_c static int dissect_h245_T_returnedFunction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 990 "../../asn1/h245/h245.cnf" +#line 1006 "../../asn1/h245/h245.cnf" tvbuff_t *next_tvb = NULL; proto_item *item; proto_tree *subtree; @@ -14487,7 +14505,7 @@ static void dissect_OpenLogicalChannel_PDU(tvbuff_t *tvb _U_, packet_info *pinfo /*--- End of included file: packet-h245-fn.c ---*/ -#line 400 "../../asn1/h245/packet-h245-template.c" +#line 402 "../../asn1/h245/packet-h245-template.c" static void dissect_h245(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) @@ -14567,6 +14585,9 @@ void proto_register_h245(void) { { "subMessageIdentifier", "h245.subMessageIdentifier.standard", FT_UINT32, BASE_DEC, VALS(h245_h239subMessageIdentifier_vals), 0, NULL, HFILL }}, + { &hf_h245_debug_dissector_try_string, + { "*** DEBUG dissector_try_string", "h245.debug.dissector_try_string", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, /*--- Included file: packet-h245-hfarr.c ---*/ @@ -20181,7 +20202,7 @@ void proto_register_h245(void) { NULL, HFILL }}, /*--- End of included file: packet-h245-hfarr.c ---*/ -#line 481 "../../asn1/h245/packet-h245-template.c" +#line 486 "../../asn1/h245/packet-h245-template.c" }; /* List of subtrees */ @@ -20684,7 +20705,7 @@ void proto_register_h245(void) { &ett_h245_MobileMultilinkReconfigurationIndication, /*--- End of included file: packet-h245-ettarr.c ---*/ -#line 488 "../../asn1/h245/packet-h245-template.c" +#line 493 "../../asn1/h245/packet-h245-template.c" }; module_t *h245_module; diff --git a/epan/dissectors/packet-h248.c b/epan/dissectors/packet-h248.c index df1cf437d3..8e7e7f0cc3 100644 --- a/epan/dissectors/packet-h248.c +++ b/epan/dissectors/packet-h248.c @@ -568,6 +568,7 @@ static gint ett_h248_SigParameterV1 = -1; static expert_field ei_h248_errored_command = EI_INIT; static expert_field ei_h248_transactionId64 = EI_INIT; static expert_field ei_h248_context_id64 = EI_INIT; +static expert_field ei_h248_octet_string_expected = EI_INIT; static dissector_table_t subdissector_table; @@ -1674,7 +1675,8 @@ static int dissect_h248_PropertyID(gboolean implicit_tag _U_, tvbuff_t *tvb, int if( (ber_class!=BER_CLASS_UNI) ||(tag!=BER_UNI_TAG_OCTETSTRING) ){ - proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2, + "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); return end_offset; } @@ -1756,7 +1758,8 @@ static int dissect_h248_SigParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb, if( (ber_class!=BER_CLASS_UNI) ||(tag!=BER_UNI_TAG_OCTETSTRING) ){ - proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2, + "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); return end_offset; } @@ -1834,7 +1837,8 @@ static int dissect_h248_EventParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb if( (ber_class!=BER_CLASS_UNI) ||(tag!=BER_UNI_TAG_OCTETSTRING) ){ - proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2, + "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag); return end_offset; } @@ -5381,7 +5385,7 @@ dissect_h248_ValueV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U /*--- End of included file: packet-h248-fn.c ---*/ -#line 1412 "../../asn1/h248/packet-h248-template.c" +#line 1416 "../../asn1/h248/packet-h248-template.c" static void dissect_h248_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { dissect_tpkt_encap(tvb, pinfo, tree, h248_desegment, h248_handle); @@ -6803,7 +6807,7 @@ void proto_register_h248(void) { NULL, HFILL }}, /*--- End of included file: packet-h248-hfarr.c ---*/ -#line 1577 "../../asn1/h248/packet-h248-template.c" +#line 1581 "../../asn1/h248/packet-h248-template.c" GCP_HF_ARR_ELEMS("h248",h248_arrel) @@ -6969,13 +6973,14 @@ void proto_register_h248(void) { &ett_h248_SigParameterV1, /*--- End of included file: packet-h248-ettarr.c ---*/ -#line 1595 "../../asn1/h248/packet-h248-template.c" +#line 1599 "../../asn1/h248/packet-h248-template.c" }; static ei_register_info ei[] = { { &ei_h248_errored_command, { "h248.errored_command", PI_RESPONSE_CODE, PI_WARN, "Errored Command", EXPFILL }}, { &ei_h248_transactionId64, { "h248.transactionId.error", PI_MALFORMED, PI_WARN, "Transaction ID invalid", EXPFILL }}, { &ei_h248_context_id64, { "h248.contextId.error", PI_MALFORMED, PI_WARN, "Context ID invalid", EXPFILL }}, + { &ei_h248_octet_string_expected, { "h248.octet_string_expected", PI_PROTOCOL, PI_WARN, "H.248 BER Error: OctetString expected", EXPFILL }}, }; expert_module_t* expert_h248; diff --git a/epan/dissectors/packet-h450.c b/epan/dissectors/packet-h450.c index 1c1920b9d8..66df7f3e69 100644 --- a/epan/dissectors/packet-h450.c +++ b/epan/dissectors/packet-h450.c @@ -38,6 +38,7 @@ #include #include +#include #include @@ -447,7 +448,7 @@ static int hf_h450_12_ssMWICallbackCall = -1; /* NULL */ static int hf_h450_12_ssCISilentMonitorPermitted = -1; /* NULL */ /*--- End of included file: packet-h450-hf.c ---*/ -#line 54 "../../asn1/h450/packet-h450-template.c" +#line 55 "../../asn1/h450/packet-h450-template.c" /* Initialize the subtree pointers */ @@ -625,7 +626,11 @@ static gint ett_h450_12_FeatureValues = -1; static gint ett_h450_12_FeatureControl = -1; /*--- End of included file: packet-h450-ett.c ---*/ -#line 57 "../../asn1/h450/packet-h450-template.c" +#line 58 "../../asn1/h450/packet-h450-template.c" + +static expert_field ei_h450_unsupported_arg_type = EI_INIT; +static expert_field ei_h450_unsupported_result_type = EI_INIT; +static expert_field ei_h450_unsupported_error_type = EI_INIT; static const value_string h450_str_operation[] = { @@ -728,7 +733,7 @@ static const value_string h450_str_operation[] = { { 85, "cmnInform" }, /*--- End of included file: packet-h450-table10.c ---*/ -#line 60 "../../asn1/h450/packet-h450-template.c" +#line 65 "../../asn1/h450/packet-h450-template.c" { 0, NULL} }; @@ -816,7 +821,7 @@ static const value_string h450_str_error[] = { /* Unknown or empty loop list ERROR */ /*--- End of included file: packet-h450-table20.c ---*/ -#line 65 "../../asn1/h450/packet-h450-template.c" +#line 70 "../../asn1/h450/packet-h450-template.c" { 0, NULL} }; @@ -4481,7 +4486,7 @@ static int dissect_h450_12_CmnArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, /*--- End of included file: packet-h450-fn.c ---*/ -#line 74 "../../asn1/h450/packet-h450-template.c" +#line 79 "../../asn1/h450/packet-h450-template.c" typedef struct _h450_op_t { gint32 opcode; @@ -4590,7 +4595,7 @@ static const h450_op_t h450_op_tab[] = { /* cmnInform */ { 85, dissect_h450_12_CmnArg_PDU, NULL }, /*--- End of included file: packet-h450-table11.c ---*/ -#line 83 "../../asn1/h450/packet-h450-template.c" +#line 88 "../../asn1/h450/packet-h450-template.c" }; typedef struct _h450_err_t { @@ -4682,7 +4687,7 @@ static const h450_err_t h450_err_tab[] = { /* Unknown or empty loop list ERROR */ /*--- End of included file: packet-h450-table21.c ---*/ -#line 92 "../../asn1/h450/packet-h450-template.c" +#line 97 "../../asn1/h450/packet-h450-template.c" }; static const h450_op_t *get_op(gint32 opcode) { @@ -4743,7 +4748,7 @@ dissect_h450_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->arg_pdu(tvb, pinfo, tree, NULL); else if (tvb_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(tree, tvb, offset, -1, "UNSUPPORTED ARGUMENT TYPE (H.450)"); + proto_tree_add_expert(tree, pinfo, &ei_h450_unsupported_arg_type, tvb, offset, -1); offset += tvb_length_remaining(tvb, offset); } @@ -4788,7 +4793,7 @@ dissect_h450_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->res_pdu(tvb, pinfo, tree, NULL); else if (tvb_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(tree, tvb, offset, -1, "UNSUPPORTED RESULT TYPE (H.450)"); + proto_tree_add_expert(tree, pinfo, &ei_h450_unsupported_result_type, tvb, offset, -1); offset += tvb_length_remaining(tvb, offset); } @@ -4833,7 +4838,7 @@ dissect_h450_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = err_ptr->err_pdu(tvb, pinfo, tree, NULL); else if (tvb_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(tree, tvb, offset, -1, "UNSUPPORTED ERROR TYPE (H.450)"); + proto_tree_add_expert(tree, pinfo, &ei_h450_unsupported_error_type, tvb, offset, -1); offset += tvb_length_remaining(tvb, offset); } @@ -6284,7 +6289,7 @@ void proto_register_h450(void) { NULL, HFILL }}, /*--- End of included file: packet-h450-hfarr.c ---*/ -#line 261 "../../asn1/h450/packet-h450-template.c" +#line 266 "../../asn1/h450/packet-h450-template.c" }; /* List of subtrees */ @@ -6464,9 +6469,16 @@ void proto_register_h450(void) { &ett_h450_12_FeatureControl, /*--- End of included file: packet-h450-ettarr.c ---*/ -#line 266 "../../asn1/h450/packet-h450-template.c" +#line 271 "../../asn1/h450/packet-h450-template.c" + }; + + static ei_register_info ei[] = { + { &ei_h450_unsupported_arg_type, { "h450.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (H.450)", EXPFILL }}, + { &ei_h450_unsupported_result_type, { "h450.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (H.450)", EXPFILL }}, + { &ei_h450_unsupported_error_type, { "h450.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (H.450)", EXPFILL }}, }; + expert_module_t* expert_h450; /* Register protocol */ proto_h450 = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -6474,6 +6486,8 @@ void proto_register_h450(void) { /* Register fields and subtrees */ proto_register_field_array(proto_h450, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_h450 = expert_register_protocol(proto_h450); + expert_register_field_array(expert_h450, ei, array_length(ei)); rose_ctx_init(&h450_rose_ctx); diff --git a/epan/dissectors/packet-h460.c b/epan/dissectors/packet-h460.c index d4a63e0794..0e15a8043d 100644 --- a/epan/dissectors/packet-h460.c +++ b/epan/dissectors/packet-h460.c @@ -2141,9 +2141,7 @@ dissect_h460_name(tvbuff_t *tvb _U_, packet_info *pinfo, proto_tree *tree, void DISSECTOR_ASSERT(actx); if (tree) { - /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: %s", pinfo->match_string);*/ ftr = find_ftr(pinfo->match_string); - /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: ftr %s", (ftr)?ftr->name:"-none-");*/ if (ftr) { proto_item_append_text(actx->created_item, " - %s", ftr->name); proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name); @@ -2876,7 +2874,7 @@ void proto_register_h460(void) { "UnicastAddress", HFILL }}, /*--- End of included file: packet-h460-hfarr.c ---*/ -#line 253 "../../asn1/h460/packet-h460-template.c" +#line 251 "../../asn1/h460/packet-h460-template.c" }; /* List of subtrees */ @@ -2975,7 +2973,7 @@ void proto_register_h460(void) { &ett_h460_21_TransmitCapabilities, /*--- End of included file: packet-h460-ettarr.c ---*/ -#line 258 "../../asn1/h460/packet-h460-template.c" +#line 256 "../../asn1/h460/packet-h460-template.c" }; /* Register protocol */ diff --git a/epan/dissectors/packet-idmp.c b/epan/dissectors/packet-idmp.c index f27c393b55..5a16b18e84 100644 --- a/epan/dissectors/packet-idmp.c +++ b/epan/dissectors/packet-idmp.c @@ -89,6 +89,7 @@ static int hf_idmp_fragment_error = -1; static int hf_idmp_fragment_count = -1; static int hf_idmp_reassembled_in = -1; static int hf_idmp_reassembled_length = -1; +static int hf_idmp_segment_data = -1; static gint ett_idmp_fragment = -1; static gint ett_idmp_fragments = -1; @@ -172,7 +173,7 @@ static int hf_idmp_present = -1; /* INTEGER */ static int hf_idmp_absent = -1; /* NULL */ /*--- End of included file: packet-idmp-hf.c ---*/ -#line 131 "../../asn1/idmp/packet-idmp-template.c" +#line 132 "../../asn1/idmp/packet-idmp-template.c" /* Initialize the subtree pointers */ static gint ett_idmp = -1; @@ -191,7 +192,7 @@ static gint ett_idmp_Code = -1; static gint ett_idmp_InvokeId = -1; /*--- End of included file: packet-idmp-ett.c ---*/ -#line 135 "../../asn1/idmp/packet-idmp-template.c" +#line 136 "../../asn1/idmp/packet-idmp-template.c" /*--- Included file: packet-idmp-fn.c ---*/ @@ -619,7 +620,7 @@ dissect_idmp_IDM_PDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U /*--- End of included file: packet-idmp-fn.c ---*/ -#line 137 "../../asn1/idmp/packet-idmp-template.c" +#line 138 "../../asn1/idmp/packet-idmp-template.c" void register_idmp_protocol_info(const char *oid, const ros_info_t *rinfo, int proto _U_, const char *name) @@ -683,9 +684,7 @@ static int dissect_idmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr idmp_length, !idmp_final); if(fd_head && fd_head->next) { - proto_tree_add_text(tree, tvb, offset, (idmp_length) ? -1 : 0, - "IDMP segment data (%u byte%s)", idmp_length, - plurality(idmp_length, "", "s")); + proto_tree_add_item(tree, hf_idmp_segment_data, tvb, offset, (idmp_length) ? -1 : 0, ENC_NA); if (idmp_final) { /* This is the last segment */ @@ -705,9 +704,8 @@ static int dissect_idmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tr col_append_fstr(pinfo->cinfo, COL_INFO, " [IDMP fragment, %u byte%s, IDMP reassembly not enabled]", idmp_length, plurality(idmp_length, "", "s")); - proto_tree_add_text(tree, tvb, offset, (idmp_length) ? -1 : 0, - "IDMP segment data (%u byte%s) (IDMP reassembly not enabled)", idmp_length, - plurality(idmp_length, "", "s")); + proto_tree_add_bytes_format_value(tree, hf_idmp_segment_data, tvb, offset, (idmp_length) ? -1 : 0, + NULL, "(IDMP reassembly not enabled)"); } } /* not reassembling - just dissect */ @@ -796,6 +794,9 @@ void proto_register_idmp(void) { &hf_idmp_reassembled_length, { "Reassembled IDMP length", "idmp.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x00, "The total length of the reassembled payload", HFILL } }, + { &hf_idmp_segment_data, + { "IDMP segment data", "idmp.segment_data", FT_BYTES, BASE_NONE, + NULL, 0x00, NULL, HFILL } }, /*--- Included file: packet-idmp-hfarr.c ---*/ @@ -930,7 +931,7 @@ void proto_register_idmp(void) NULL, HFILL }}, /*--- End of included file: packet-idmp-hfarr.c ---*/ -#line 315 "../../asn1/idmp/packet-idmp-template.c" +#line 316 "../../asn1/idmp/packet-idmp-template.c" }; /* List of subtrees */ @@ -953,7 +954,7 @@ void proto_register_idmp(void) &ett_idmp_InvokeId, /*--- End of included file: packet-idmp-ettarr.c ---*/ -#line 323 "../../asn1/idmp/packet-idmp-template.c" +#line 324 "../../asn1/idmp/packet-idmp-template.c" }; module_t *idmp_module; diff --git a/epan/dissectors/packet-inap.c b/epan/dissectors/packet-inap.c index f51d72d441..bae5513738 100644 --- a/epan/dissectors/packet-inap.c +++ b/epan/dissectors/packet-inap.c @@ -1050,6 +1050,7 @@ static int inap_opcode_type; static gint ett_inap = -1; static gint ett_inapisup_parameter = -1; static gint ett_inap_HighLayerCompatibility = -1; +static gint ett_inap_extention_data = -1; /*--- Included file: packet-inap-ett.c ---*/ #line 1 "../../asn1/inap/packet-inap-ett.c" @@ -1291,7 +1292,7 @@ static gint ett_inap_T_problem_01 = -1; static gint ett_inap_InvokeId = -1; /*--- End of included file: packet-inap-ett.c ---*/ -#line 83 "../../asn1/inap/packet-inap-template.c" +#line 84 "../../asn1/inap/packet-inap-template.c" static expert_field ei_inap_unknown_invokeData = EI_INIT; static expert_field ei_inap_unknown_returnResultData = EI_INIT; @@ -1421,7 +1422,7 @@ static const value_string inap_err_code_string_vals[] = { /*--- End of included file: packet-inap-table.c ---*/ -#line 89 "../../asn1/inap/packet-inap-template.c" +#line 90 "../../asn1/inap/packet-inap-template.c" const value_string inap_general_problem_strings[] = { {0,"General Problem Unrecognized Component"}, @@ -1516,11 +1517,12 @@ dissect_inap_Code(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, static int dissect_inap_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 215 "../../asn1/inap/inap.cnf" - proto_tree_add_text(tree, tvb, offset, -1, "Extension Data"); + proto_tree *ext_tree; + ext_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_inap_extention_data, NULL, "Extension Data"); if (obj_id){ - offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, tree, NULL); + offset=call_ber_oid_callback(obj_id, tvb, offset, actx->pinfo, ext_tree, NULL); }else{ - call_dissector(data_handle, tvb, actx->pinfo, tree); + call_dissector(data_handle, tvb, actx->pinfo, ext_tree); offset = tvb_length_remaining(tvb,offset); } @@ -2195,7 +2197,7 @@ dissect_inap_BCSMEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_inap_T_bearerCap(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 247 "../../asn1/inap/inap.cnf" +#line 248 "../../asn1/inap/inap.cnf" tvbuff_t *parameter_tvb; @@ -2350,7 +2352,7 @@ dissect_inap_CalledPartyBusinessGroupID(gboolean implicit_tag _U_, tvbuff_t *tvb static int dissect_inap_CalledPartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 226 "../../asn1/inap/inap.cnf" +#line 227 "../../asn1/inap/inap.cnf" tvbuff_t *parameter_tvb; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -2401,7 +2403,7 @@ dissect_inap_CallingPartyBusinessGroupID(gboolean implicit_tag _U_, tvbuff_t *tv static int dissect_inap_CallingPartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 236 "../../asn1/inap/inap.cnf" +#line 237 "../../asn1/inap/inap.cnf" tvbuff_t *parameter_tvb; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -4539,7 +4541,7 @@ dissect_inap_GlobalCallReference(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i int dissect_inap_HighLayerCompatibility(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 289 "../../asn1/inap/inap.cnf" +#line 290 "../../asn1/inap/inap.cnf" /* * -- Indicates the teleservice. For encoding, DSS1 (Q.931) is used. */ @@ -4713,7 +4715,7 @@ dissect_inap_NumberingPlan(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off static int dissect_inap_OriginalCalledPartyID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 269 "../../asn1/inap/inap.cnf" +#line 270 "../../asn1/inap/inap.cnf" tvbuff_t *parameter_tvb; @@ -4776,7 +4778,7 @@ dissect_inap_Reason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_ static int dissect_inap_RedirectingPartyID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 279 "../../asn1/inap/inap.cnf" +#line 280 "../../asn1/inap/inap.cnf" tvbuff_t *parameter_tvb; @@ -4797,7 +4799,7 @@ dissect_inap_RedirectingPartyID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in int dissect_inap_RedirectionInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 258 "../../asn1/inap/inap.cnf" +#line 259 "../../asn1/inap/inap.cnf" tvbuff_t *parameter_tvb; @@ -8981,7 +8983,7 @@ static int dissect_PAR_taskRefused_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_ /*--- End of included file: packet-inap-fn.c ---*/ -#line 103 "../../asn1/inap/packet-inap-template.c" +#line 104 "../../asn1/inap/packet-inap-template.c" /* TC-Invokable OPERATION ::= {activateServiceFiltering | activityTest | analysedInformation | @@ -9331,7 +9333,7 @@ static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,a /*--- End of included file: packet-inap-table2.c ---*/ -#line 124 "../../asn1/inap/packet-inap-template.c" +#line 125 "../../asn1/inap/packet-inap-template.c" static guint8 inap_pdu_type = 0; @@ -11657,7 +11659,7 @@ void proto_register_inap(void) { "InvokeId_present", HFILL }}, /*--- End of included file: packet-inap-hfarr.c ---*/ -#line 205 "../../asn1/inap/packet-inap-template.c" +#line 206 "../../asn1/inap/packet-inap-template.c" }; @@ -11670,6 +11672,7 @@ void proto_register_inap(void) { &ett_inap, &ett_inapisup_parameter, &ett_inap_HighLayerCompatibility, + &ett_inap_extention_data, /*--- Included file: packet-inap-ettarr.c ---*/ #line 1 "../../asn1/inap/packet-inap-ettarr.c" @@ -11911,7 +11914,7 @@ void proto_register_inap(void) { &ett_inap_InvokeId, /*--- End of included file: packet-inap-ettarr.c ---*/ -#line 218 "../../asn1/inap/packet-inap-template.c" +#line 220 "../../asn1/inap/packet-inap-template.c" }; static ei_register_info ei[] = { diff --git a/epan/dissectors/packet-isdn-sup.c b/epan/dissectors/packet-isdn-sup.c index e4ebb171bc..1fc58092ef 100644 --- a/epan/dissectors/packet-isdn-sup.c +++ b/epan/dissectors/packet-isdn-sup.c @@ -35,7 +35,7 @@ #include #include - +#include #include "packet-ber.h" @@ -404,6 +404,9 @@ static gint ett_isdn_sup_Call_T_FPHArg = -1; /*--- End of included file: packet-isdn-sup-ett.c ---*/ #line 93 "../../asn1/isdn-sup/packet-isdn-sup-template.c" +static expert_field ei_isdn_sup_unsupported_arg_type = EI_INIT; +static expert_field ei_isdn_sup_unsupported_result_type = EI_INIT; +static expert_field ei_isdn_sup_unsupported_error_type = EI_INIT; /* Preference settings default */ @@ -2498,7 +2501,7 @@ static int dissect_Call_T_FPHArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, /*--- End of included file: packet-isdn-sup-fn.c ---*/ -#line 100 "../../asn1/isdn-sup/packet-isdn-sup-template.c" +#line 103 "../../asn1/isdn-sup/packet-isdn-sup-template.c" static const isdn_sup_op_t isdn_sup_op_tab[] = { @@ -2535,7 +2538,7 @@ static const isdn_sup_op_t isdn_sup_op_tab[] = { /* userUserService */ { 1, dissect_UserUserServiceArg_PDU, NULL }, /*--- End of included file: packet-isdn-sup-table11.c ---*/ -#line 103 "../../asn1/isdn-sup/packet-isdn-sup-template.c" +#line 106 "../../asn1/isdn-sup/packet-isdn-sup-template.c" }; @@ -2550,7 +2553,7 @@ static const isdn_sup_global_op_t isdn_sup_global_op_tab[] = { /* call-T-FPH */ { fPHOID".4", dissect_Call_T_FPHArg_PDU, NULL }, /*--- End of included file: packet-isdn-sup-table31.c ---*/ -#line 109 "../../asn1/isdn-sup/packet-isdn-sup-template.c" +#line 112 "../../asn1/isdn-sup/packet-isdn-sup-template.c" }; static const isdn_sup_err_t isdn_sup_err_tab[] = { @@ -2589,7 +2592,7 @@ static const isdn_sup_err_t isdn_sup_err_tab[] = { /* rejectedByTheUser */ { 2, NULL }, /*--- End of included file: packet-isdn-sup-table21.c ---*/ -#line 113 "../../asn1/isdn-sup/packet-isdn-sup-template.c" +#line 116 "../../asn1/isdn-sup/packet-isdn-sup-template.c" }; @@ -2657,7 +2660,7 @@ dissect_isdn_sup_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * offset = op_ptr->arg_pdu(tvb, pinfo, isdn_sup_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(isdn_sup_tree, tvb, offset, -1, "UNSUPPORTED ARGUMENT TYPE (ETSI Sup)"); + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1); offset += tvb_reported_length_remaining(tvb, offset); } @@ -2706,7 +2709,7 @@ dissect_isdn_sup_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * offset = op_ptr->res_pdu(tvb, pinfo, isdn_sup_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(isdn_sup_tree, tvb, offset, -1, "UNSUPPORTED RESULT TYPE (ETSI sup)"); + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_result_type, tvb, offset, -1); offset += tvb_reported_length_remaining(tvb, offset); } @@ -2756,7 +2759,7 @@ dissect_isdn_sup_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * offset = err_ptr->err_pdu(tvb, pinfo, isdn_sup_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(isdn_sup_tree, tvb, offset, -1, "UNSUPPORTED ERROR TYPE (ETSI sup)"); + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1); offset += tvb_reported_length_remaining(tvb, offset); } @@ -3451,7 +3454,7 @@ void proto_register_isdn_sup(void) { NULL, HFILL }}, /*--- End of included file: packet-isdn-sup-hfarr.c ---*/ -#line 346 "../../asn1/isdn-sup/packet-isdn-sup-template.c" +#line 349 "../../asn1/isdn-sup/packet-isdn-sup-template.c" }; /* List of subtrees */ @@ -3527,14 +3530,23 @@ void proto_register_isdn_sup(void) { &ett_isdn_sup_Call_T_FPHArg, /*--- End of included file: packet-isdn-sup-ettarr.c ---*/ -#line 353 "../../asn1/isdn-sup/packet-isdn-sup-template.c" +#line 356 "../../asn1/isdn-sup/packet-isdn-sup-template.c" }; - /* Register fields and subtrees */ - proto_register_field_array(proto_isdn_sup, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + static ei_register_info ei[] = { + { &ei_isdn_sup_unsupported_arg_type, { "isdn_sup.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (ETSI sup)", EXPFILL }}, + { &ei_isdn_sup_unsupported_result_type, { "isdn_sup.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (ETSI sup)", EXPFILL }}, + { &ei_isdn_sup_unsupported_error_type, { "isdn_sup.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (ETSI sup)", EXPFILL }}, + }; + + expert_module_t* expert_isdn_sup; /* Register protocol */ proto_isdn_sup = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_isdn_sup, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + expert_isdn_sup = expert_register_protocol(proto_isdn_sup); + expert_register_field_array(expert_isdn_sup, ei, array_length(ei)); } diff --git a/epan/dissectors/packet-kerberos.c b/epan/dissectors/packet-kerberos.c index 2fe4602b7f..1550ecd5d6 100644 --- a/epan/dissectors/packet-kerberos.c +++ b/epan/dissectors/packet-kerberos.c @@ -382,6 +382,8 @@ static gint ett_kerberos_ChangePasswdData = -1; #line 148 "../../asn1/kerberos/packet-kerberos-template.c" static expert_field ei_kerberos_decrypted_keytype = EI_INIT; +static expert_field ei_kerberos_address = EI_INIT; +static expert_field ei_krb_gssapi_dlglen = EI_INIT; static dissector_handle_t krb4_handle=NULL; @@ -406,7 +408,7 @@ static gboolean gbl_do_col_info; #define KERBEROS_ADDR_TYPE_IPV6 24 /*--- End of included file: packet-kerberos-val.h ---*/ -#line 159 "../../asn1/kerberos/packet-kerberos-template.c" +#line 161 "../../asn1/kerberos/packet-kerberos-template.c" static void call_kerberos_callbacks(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int tag, kerberos_callbacks *cb) @@ -599,7 +601,7 @@ read_keytab_file(const char *filename) guint8 * -decrypt_krb5_data(proto_tree *tree, packet_info *pinfo, +decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, int usage, tvbuff_t *cryptotvb, int keytype, @@ -649,7 +651,6 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo, "Decrypted keytype %d in frame %u using %s", ek->keytype, pinfo->fd->num, ek->key_origin); - proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin); /* return a private g_malloced blob to the caller */ user_data=data.data; if (datalen) { @@ -795,8 +796,10 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo, if((ret == 0) && (length>0)){ char *user_data; -printf("woohoo decrypted keytype:%d in frame:%u\n", ek->keytype, pinfo->fd->num); - proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin); + expert_add_info_format(pinfo, NULL, &ei_kerberos_decrypted_keytype, + "Decrypted keytype %d in frame %u using %s", + ek->keytype, pinfo->fd->num, ek->key_origin); + krb5_crypto_destroy(krb5_ctx, crypto); /* return a private g_malloced blob to the caller */ user_data=g_memdup(data.data, data.length); @@ -1842,7 +1845,8 @@ dissect_krb5_rfc1964_checksum(asn1_ctx_t *actx _U_, proto_tree *tree, tvbuff_t * offset += 2; if(dlglen!=tvb_reported_length_remaining(tvb, offset)){ - proto_tree_add_text(tree, tvb, 0, 0, "Error: DlgLen:%d is not the same as number of bytes remaining:%d", dlglen, tvb_captured_length_remaining(tvb, offset)); + proto_tree_add_expert_format(tree, actx->pinfo, &ei_krb_gssapi_dlglen, tvb, 0, 0, + "Error: DlgLen:%d is not the same as number of bytes remaining:%d", dlglen, tvb_captured_length_remaining(tvb, offset)); return offset; } @@ -2476,7 +2480,7 @@ dissect_kerberos_T_address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off address_str = tvb_ip6_to_str(tvb, offset); break; default: - proto_tree_add_text(tree, tvb, offset, len, "KRB Address: I dont know how to parse this type of address yet"); + proto_tree_add_expert(tree, actx->pinfo, &ei_kerberos_address, tvb, offset, len); address_str = NULL; } @@ -3905,7 +3909,7 @@ dissect_kerberos_ChangePasswdData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, /*--- End of included file: packet-kerberos-fn.c ---*/ -#line 1648 "../../asn1/kerberos/packet-kerberos-template.c" +#line 1652 "../../asn1/kerberos/packet-kerberos-template.c" /* Make wrappers around exported functions for now */ int @@ -4039,16 +4043,14 @@ void show_krb_recordmark(proto_tree *tree, tvbuff_t *tvb, gint start, guint32 krb_rm) { gint rec_len; - proto_item *rm_item; proto_tree *rm_tree; if (tree == NULL) return; rec_len = kerberos_rm_to_reclen(krb_rm); - rm_item = proto_tree_add_text(tree, tvb, start, 4, - "Record Mark: %u %s", rec_len, plurality(rec_len, "byte", "bytes")); - rm_tree = proto_item_add_subtree(rm_item, ett_krb_recordmark); + rm_tree = proto_tree_add_subtree_format(tree, tvb, start, 4, ett_krb_recordmark, NULL, + "Record Mark: %u %s", rec_len, plurality(rec_len, "byte", "bytes")); proto_tree_add_boolean(rm_tree, hf_krb_rm_reserved, tvb, start, 4, krb_rm); proto_tree_add_uint(rm_tree, hf_krb_rm_reclen, tvb, start, 4, krb_rm); } @@ -4861,7 +4863,7 @@ void proto_register_kerberos(void) { NULL, HFILL }}, /*--- End of included file: packet-kerberos-hfarr.c ---*/ -#line 1947 "../../asn1/kerberos/packet-kerberos-template.c" +#line 1949 "../../asn1/kerberos/packet-kerberos-template.c" }; /* List of subtrees */ @@ -4926,11 +4928,13 @@ void proto_register_kerberos(void) { &ett_kerberos_ChangePasswdData, /*--- End of included file: packet-kerberos-ettarr.c ---*/ -#line 1954 "../../asn1/kerberos/packet-kerberos-template.c" +#line 1956 "../../asn1/kerberos/packet-kerberos-template.c" }; static ei_register_info ei[] = { { &ei_kerberos_decrypted_keytype, { "kerberos.decrypted_keytype", PI_SECURITY, PI_CHAT, "Decryted keytype", EXPFILL }}, + { &ei_kerberos_address, { "kerberos.address.unknown", PI_UNDECODED, PI_WARN, "KRB Address: I dont know how to parse this type of address yet", EXPFILL }}, + { &ei_krb_gssapi_dlglen, { "kerberos.gssapi.dlglen.error", PI_MALFORMED, PI_ERROR, "DlgLen is not the same as number of bytes remaining", EXPFILL }}, }; expert_module_t* expert_krb; diff --git a/epan/dissectors/packet-ldap.c b/epan/dissectors/packet-ldap.c index 2bbd138f9a..ade52b0f73 100644 --- a/epan/dissectors/packet-ldap.c +++ b/epan/dissectors/packet-ldap.c @@ -194,6 +194,12 @@ static int hf_ldap_AccessMask_ADS_DELETE_TREE = -1; static int hf_ldap_AccessMask_ADS_LIST_OBJECT = -1; static int hf_ldap_AccessMask_ADS_CONTROL_ACCESS = -1; static int hf_ldap_LDAPMessage_PDU = -1; +static int hf_ldap_object_security_flag = -1; +static int hf_ldap_ancestor_first_flag = -1; +static int hf_ldap_public_data_only_flag = -1; +static int hf_ldap_incremental_value_flag = -1; +static int hf_ldap_oid = -1; +static int hf_ldap_gssapi_encrypted_payload = -1; /*--- Included file: packet-ldap-hf.c ---*/ @@ -341,7 +347,7 @@ static int hf_ldap_graceAuthNsRemaining = -1; /* INTEGER_0_maxInt */ static int hf_ldap_error = -1; /* T_error */ /*--- End of included file: packet-ldap-hf.c ---*/ -#line 191 "../../asn1/ldap/packet-ldap-template.c" +#line 197 "../../asn1/ldap/packet-ldap-template.c" /* Initialize the subtree pointers */ static gint ett_ldap = -1; @@ -413,7 +419,7 @@ static gint ett_ldap_PasswordPolicyResponseValue = -1; static gint ett_ldap_T_warning = -1; /*--- End of included file: packet-ldap-ett.c ---*/ -#line 203 "../../asn1/ldap/packet-ldap-template.c" +#line 209 "../../asn1/ldap/packet-ldap-template.c" static expert_field ei_ldap_exceeded_filter_length = EI_INIT; static expert_field ei_ldap_too_many_filter_elements = EI_INIT; @@ -3435,19 +3441,19 @@ dissect_ldap_DirSyncFlags(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs ett_ldap_DirSyncFlagsSubEntry, NULL, "%s: 0x%08x", hfinfo->name, val); if (val & 0x1) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Object_Security"); + proto_tree_add_boolean(subtree, hf_ldap_object_security_flag, tvb, otheroffset+1, len, TRUE); } if (val & 0x800) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Ancestor_First"); + proto_tree_add_boolean(subtree, hf_ldap_ancestor_first_flag, tvb, otheroffset+1, len, TRUE); } if (val & 0x2000) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Public_Data_Only"); + proto_tree_add_boolean(subtree, hf_ldap_public_data_only_flag, tvb, otheroffset+1, len, TRUE); } if (val & 0x80000000) { - proto_tree_add_text(subtree, tvb, otheroffset+1, len, "Flag Incremental_Value"); + proto_tree_add_boolean(subtree, hf_ldap_incremental_value_flag, tvb, otheroffset+1, len, TRUE); } } else { - proto_tree_add_text(tree, tvb, otheroffset+len, len, "%s: 0", hfinfo->name); + proto_tree_add_uint(tree, hf_index, tvb, otheroffset+len, len, 0); } @@ -3797,7 +3803,7 @@ static void dissect_PasswordPolicyResponseValue_PDU(tvbuff_t *tvb _U_, packet_in /*--- End of included file: packet-ldap-fn.c ---*/ -#line 885 "../../asn1/ldap/packet-ldap-template.c" +#line 891 "../../asn1/ldap/packet-ldap-template.c" static int dissect_LDAPMessage_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, ldap_conv_info_t *ldap_info) { int offset = 0; @@ -4185,12 +4191,7 @@ static void sasl_len - ver_len, plurality(sasl_len - ver_len, "", "s")); - if (sasl_tree) { - proto_tree_add_text(sasl_tree, gssapi_tvb, ver_len, -1, - "GSS-API Encrypted payload (%d byte%s)", - sasl_len - ver_len, - plurality(sasl_len - ver_len, "", "s")); - } + proto_tree_add_item(sasl_tree, hf_ldap_gssapi_encrypted_payload, gssapi_tvb, ver_len, -1, ENC_NA); } } } else { @@ -4592,58 +4593,21 @@ dissect_ldap_oid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) oidname=oid_resolved_from_string(oid); if(oidname){ - proto_tree_add_text(tree, tvb, 0, tvb_captured_length(tvb), "OID: %s (%s)",oid,oidname); + proto_tree_add_string_format_value(tree, hf_ldap_oid, tvb, 0, tvb_captured_length(tvb), oid, "%s (%s)",oid,oidname); } else { - proto_tree_add_text(tree, tvb, 0, tvb_captured_length(tvb), "OID: %s",oid); + proto_tree_add_string(tree, hf_ldap_oid, tvb, 0, tvb_captured_length(tvb), oid); } } #define LDAP_ACCESSMASK_ADS_CREATE_CHILD 0x00000001 -static const true_false_string ldap_AccessMask_ADS_CREATE_CHILD_tfs = { - "ADS CREATE CHILD is SET", - "Ads create child is NOT set", -}; - #define LDAP_ACCESSMASK_ADS_DELETE_CHILD 0x00000002 -static const true_false_string ldap_AccessMask_ADS_DELETE_CHILD_tfs = { - "ADS DELETE CHILD is SET", - "Ads delete child is NOT set", -}; #define LDAP_ACCESSMASK_ADS_LIST 0x00000004 -static const true_false_string ldap_AccessMask_ADS_LIST_tfs = { - "ADS LIST is SET", - "Ads list is NOT set", -}; #define LDAP_ACCESSMASK_ADS_SELF_WRITE 0x00000008 -static const true_false_string ldap_AccessMask_ADS_SELF_WRITE_tfs = { - "ADS SELF WRITE is SET", - "Ads self write is NOT set", -}; #define LDAP_ACCESSMASK_ADS_READ_PROP 0x00000010 -static const true_false_string ldap_AccessMask_ADS_READ_PROP_tfs = { - "ADS READ PROP is SET", - "Ads read prop is NOT set", -}; #define LDAP_ACCESSMASK_ADS_WRITE_PROP 0x00000020 -static const true_false_string ldap_AccessMask_ADS_WRITE_PROP_tfs = { - "ADS WRITE PROP is SET", - "Ads write prop is NOT set", -}; #define LDAP_ACCESSMASK_ADS_DELETE_TREE 0x00000040 -static const true_false_string ldap_AccessMask_ADS_DELETE_TREE_tfs = { - "ADS DELETE TREE is SET", - "Ads delete tree is NOT set", -}; #define LDAP_ACCESSMASK_ADS_LIST_OBJECT 0x00000080 -static const true_false_string ldap_AccessMask_ADS_LIST_OBJECT_tfs = { - "ADS LIST OBJECT is SET", - "Ads list object is NOT set", -}; #define LDAP_ACCESSMASK_ADS_CONTROL_ACCESS 0x00000100 -static const true_false_string ldap_AccessMask_ADS_CONTROL_ACCESS_tfs = { - "ADS CONTROL ACCESS is SET", - "Ads control access is NOT set", -}; static void ldap_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) @@ -5124,35 +5088,55 @@ void proto_register_ldap(void) { NULL, 0, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_CREATE_CHILD, - { "Create Child", "ldap.AccessMask.ADS_CREATE_CHILD", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_CREATE_CHILD_tfs), LDAP_ACCESSMASK_ADS_CREATE_CHILD, NULL, HFILL }}, + { "Ads Create Child", "ldap.AccessMask.ADS_CREATE_CHILD", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_CREATE_CHILD, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_DELETE_CHILD, - { "Delete Child", "ldap.AccessMask.ADS_DELETE_CHILD", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_DELETE_CHILD_tfs), LDAP_ACCESSMASK_ADS_DELETE_CHILD, NULL, HFILL }}, + { "Ads Delete Child", "ldap.AccessMask.ADS_DELETE_CHILD", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_DELETE_CHILD, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_LIST, - { "List", "ldap.AccessMask.ADS_LIST", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_LIST_tfs), LDAP_ACCESSMASK_ADS_LIST, NULL, HFILL }}, + { "Ads List", "ldap.AccessMask.ADS_LIST", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_LIST, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_SELF_WRITE, - { "Self Write", "ldap.AccessMask.ADS_SELF_WRITE", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_SELF_WRITE_tfs), LDAP_ACCESSMASK_ADS_SELF_WRITE, NULL, HFILL }}, + { "Ads Self Write", "ldap.AccessMask.ADS_SELF_WRITE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_SELF_WRITE, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_READ_PROP, - { "Read Prop", "ldap.AccessMask.ADS_READ_PROP", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_READ_PROP_tfs), LDAP_ACCESSMASK_ADS_READ_PROP, NULL, HFILL }}, + { "Ads Read Prop", "ldap.AccessMask.ADS_READ_PROP", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_READ_PROP, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_WRITE_PROP, - { "Write Prop", "ldap.AccessMask.ADS_WRITE_PROP", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_WRITE_PROP_tfs), LDAP_ACCESSMASK_ADS_WRITE_PROP, NULL, HFILL }}, + { "Ads Write Prop", "ldap.AccessMask.ADS_WRITE_PROP", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_WRITE_PROP, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_DELETE_TREE, - { "Delete Tree", "ldap.AccessMask.ADS_DELETE_TREE", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_DELETE_TREE_tfs), LDAP_ACCESSMASK_ADS_DELETE_TREE, NULL, HFILL }}, + { "Ads Delete Tree", "ldap.AccessMask.ADS_DELETE_TREE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_DELETE_TREE, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_LIST_OBJECT, - { "List Object", "ldap.AccessMask.ADS_LIST_OBJECT", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_LIST_OBJECT_tfs), LDAP_ACCESSMASK_ADS_LIST_OBJECT, NULL, HFILL }}, + { "Ads List Object", "ldap.AccessMask.ADS_LIST_OBJECT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_LIST_OBJECT, NULL, HFILL }}, { &hf_ldap_AccessMask_ADS_CONTROL_ACCESS, - { "Control Access", "ldap.AccessMask.ADS_CONTROL_ACCESS", FT_BOOLEAN, 32, TFS(&ldap_AccessMask_ADS_CONTROL_ACCESS_tfs), LDAP_ACCESSMASK_ADS_CONTROL_ACCESS, NULL, HFILL }}, + { "Ads Control Access", "ldap.AccessMask.ADS_CONTROL_ACCESS", FT_BOOLEAN, 32, TFS(&tfs_set_notset), LDAP_ACCESSMASK_ADS_CONTROL_ACCESS, NULL, HFILL }}, { &hf_ldap_LDAPMessage_PDU, { "LDAPMessage", "ldap.LDAPMessage_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_ldap_object_security_flag, + { "Flag Object_Security", "ldap.object_security_flag", FT_BOOLEAN, 32, NULL, 0x00000001, NULL, HFILL }}, + + { &hf_ldap_ancestor_first_flag, + { "Flag Ancestor_First", "ldap.ancestor_first_flag", FT_BOOLEAN, 32, NULL, 0x00000800, NULL, HFILL }}, + + { &hf_ldap_public_data_only_flag, + { "Flag Public_Data_Only", "ldap.public_data_only_flag", FT_BOOLEAN, 32, NULL, 0x00002000, NULL, HFILL }}, + + { &hf_ldap_incremental_value_flag, + { "Flag Incremental_Value", "ldap.incremental_value_flag", FT_BOOLEAN, 32, NULL, 0x80000000, NULL, HFILL }}, + + { &hf_ldap_oid, + { "OID", "ldap.oid", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, + + { &hf_ldap_gssapi_encrypted_payload, + { "GSS-API Encrypted payload", "ldap.gssapi_encrypted_payload", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, + /*--- Included file: packet-ldap-hfarr.c ---*/ #line 1 "../../asn1/ldap/packet-ldap-hfarr.c" @@ -5722,7 +5706,7 @@ void proto_register_ldap(void) { NULL, HFILL }}, /*--- End of included file: packet-ldap-hfarr.c ---*/ -#line 2241 "../../asn1/ldap/packet-ldap-template.c" +#line 2225 "../../asn1/ldap/packet-ldap-template.c" }; /* List of subtrees */ @@ -5796,7 +5780,7 @@ void proto_register_ldap(void) { &ett_ldap_T_warning, /*--- End of included file: packet-ldap-ettarr.c ---*/ -#line 2255 "../../asn1/ldap/packet-ldap-template.c" +#line 2239 "../../asn1/ldap/packet-ldap-template.c" }; /* UAT for header fields */ static uat_field_t custom_attribute_types_uat_fields[] = { @@ -5962,7 +5946,7 @@ proto_reg_handoff_ldap(void) /*--- End of included file: packet-ldap-dis-tab.c ---*/ -#line 2404 "../../asn1/ldap/packet-ldap-template.c" +#line 2388 "../../asn1/ldap/packet-ldap-template.c" } diff --git a/epan/dissectors/packet-lte-rrc.c b/epan/dissectors/packet-lte-rrc.c index 5c91cb51c1..059bd85a6b 100644 --- a/epan/dissectors/packet-lte-rrc.c +++ b/epan/dissectors/packet-lte-rrc.c @@ -2465,6 +2465,10 @@ static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit1 = -1; static int hf_lte_rrc_interBandTDD_CA_WithDifferentConfig_bit2 = -1; static int hf_lte_rrc_sr_config_periodicity = -1; static int hf_lte_rrc_sr_config_subframe_offset = -1; +static int hf_lte_rrc_cdma_time = -1; +static int hf_lte_rrc_utc_time = -1; +static int hf_lte_rrc_local_time = -1; +static int hf_lte_rrc_absolute_time = -1; /* Initialize the subtree pointers */ static int ett_lte_rrc = -1; @@ -3574,7 +3578,7 @@ static gint ett_lte_rrc_CandidateCellInfoList_r10 = -1; static gint ett_lte_rrc_CandidateCellInfo_r10 = -1; /*--- End of included file: packet-lte-rrc-ett.c ---*/ -#line 197 "../../asn1/lte-rrc/packet-lte-rrc-template.c" +#line 201 "../../asn1/lte-rrc/packet-lte-rrc-template.c" static gint ett_lte_rrc_featureGroupIndicators = -1; static gint ett_lte_rrc_featureGroupIndRel9Add = -1; @@ -8583,8 +8587,8 @@ dissect_lte_rrc_T_synchronousSystemTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ bits = tvb_get_bits64(sync_system_time_tvb, 0, 39, ENC_BIG_ENDIAN); ts.secs = (time_t)(bits/100) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */ ts.nsecs = (int)(bits%100)*10000000; - proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "CDMA time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_UTC, FALSE)); - proto_tree_add_text(subtree, sync_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_LOCAL, TRUE)); + proto_tree_add_time(subtree, hf_lte_rrc_cdma_time, sync_system_time_tvb, 0, -1, &ts); + proto_tree_add_time(subtree, hf_lte_rrc_local_time, sync_system_time_tvb, 0, -1, &ts); } return offset; @@ -8608,8 +8612,8 @@ dissect_lte_rrc_T_asynchronousSystemTime(tvbuff_t *tvb _U_, int offset _U_, asn1 bits = tvb_get_bits64(async_system_time_tvb, 0, 49, ENC_BIG_ENDIAN); ts.secs = (time_t)((bits*8)/1228800) + 315964800; /* CDMA2000 epoch is 00:00:00 (midnight) UTC on 1980-01-06 */ ts.nsecs = (int)(((bits%153600)*8*1000000000)/1228800); - proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "CDMA time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_UTC, FALSE)); - proto_tree_add_text(subtree, async_system_time_tvb, 0, -1, "Local time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_LOCAL, TRUE)); + proto_tree_add_time(subtree, hf_lte_rrc_cdma_time, async_system_time_tvb, 0, -1, &ts); + proto_tree_add_time(subtree, hf_lte_rrc_local_time, async_system_time_tvb, 0, -1,&ts); } return offset; @@ -10285,10 +10289,8 @@ dissect_lte_rrc_T_timeInfoUTC_r11(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_timeInfo); ts.secs = (time_t)(timeInfo/100)-2208988800U; /* epoch is 00:00:00 (midnight) UTC on 1900-01-01 */ ts.nsecs = (int)(timeInfo%100)*10000000; - proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, - "UTC time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_UTC, FALSE)); - proto_tree_add_text(subtree, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, - "Local time: %s", abs_time_to_str(wmem_packet_scope(), &ts, ABSOLUTE_TIME_LOCAL, TRUE)); + proto_tree_add_time(subtree, hf_lte_rrc_utc_time, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, &ts); + proto_tree_add_time(subtree, hf_lte_rrc_local_time, tvb, old_offset>>3, (old_offset&0x07) ? 6 : 5, &ts); return offset; } @@ -25031,12 +25033,13 @@ dissect_lte_rrc_AbsoluteTimeInfo_r10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx if (abs_time_info_tvb) { - const gchar *str; + const gchar *str, *hf_str; proto_tree *subtree; subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_absTimeInfo); str = tvb_bcd_dig_to_wmem_packet_str(abs_time_info_tvb, 0, 6, NULL, FALSE); - proto_tree_add_text(subtree, abs_time_info_tvb, 0, 6, "%c%c-%c%c-%c%c %c%c:%c%c:%c%c", str[0], str[1], + hf_str = wmem_strdup_printf(wmem_packet_scope(), "%c%c-%c%c-%c%c %c%c:%c%c:%c%c", str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7], str[8], str[9], str[10], str[11]); + proto_tree_add_string(subtree, hf_lte_rrc_absolute_time, abs_time_info_tvb, 0, 6, hf_str); } return offset; @@ -35344,7 +35347,7 @@ static int dissect_UEAssistanceInformation_r11_PDU(tvbuff_t *tvb _U_, packet_inf /*--- End of included file: packet-lte-rrc-fn.c ---*/ -#line 2255 "../../asn1/lte-rrc/packet-lte-rrc-template.c" +#line 2259 "../../asn1/lte-rrc/packet-lte-rrc-template.c" static void dissect_lte_rrc_DL_CCCH(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -44152,7 +44155,7 @@ void proto_register_lte_rrc(void) { NULL, HFILL }}, /*--- End of included file: packet-lte-rrc-hfarr.c ---*/ -#line 2402 "../../asn1/lte-rrc/packet-lte-rrc-template.c" +#line 2406 "../../asn1/lte-rrc/packet-lte-rrc-template.c" { &hf_lte_rrc_eutra_cap_feat_group_ind_1, { "Indicator 1", "lte-rrc.eutra_cap_feat_group_ind_1", @@ -44586,6 +44589,22 @@ void proto_register_lte_rrc(void) { { "Subframe Offset", "lte-rrc.sr_SubframeOffset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_lte_rrc_cdma_time, + { "CDMA time", "lte-rrc.cdma_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL }}, + { &hf_lte_rrc_utc_time, + { "UTC time", "lte-rrc.utc_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL }}, + { &hf_lte_rrc_local_time, + { "Local time", "lte-rrc.local_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL }}, + { &hf_lte_rrc_absolute_time, + { "Absolute time", "lte-rrc.absolute_time", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL }}, }; /* List of subtrees */ @@ -45696,7 +45715,7 @@ void proto_register_lte_rrc(void) { &ett_lte_rrc_CandidateCellInfo_r10, /*--- End of included file: packet-lte-rrc-ettarr.c ---*/ -#line 2841 "../../asn1/lte-rrc/packet-lte-rrc-template.c" +#line 2861 "../../asn1/lte-rrc/packet-lte-rrc-template.c" &ett_lte_rrc_featureGroupIndicators, &ett_lte_rrc_featureGroupIndRel9Add, @@ -45765,7 +45784,7 @@ void proto_register_lte_rrc(void) { /*--- End of included file: packet-lte-rrc-dis-reg.c ---*/ -#line 2894 "../../asn1/lte-rrc/packet-lte-rrc-template.c" +#line 2914 "../../asn1/lte-rrc/packet-lte-rrc-template.c" register_init_routine(<e_rrc_init_protocol); } diff --git a/epan/dissectors/packet-mms.c b/epan/dissectors/packet-mms.c index 22070c6211..509423577c 100644 --- a/epan/dissectors/packet-mms.c +++ b/epan/dissectors/packet-mms.c @@ -944,6 +944,7 @@ static gint ett_mms_FileAttributes = -1; static expert_field ei_mms_mal_timeofday_encoding = EI_INIT; static expert_field ei_mms_mal_utctime_encoding = EI_INIT; +static expert_field ei_mms_zero_pdu = EI_INIT; /*--- Included file: packet-mms-fn.c ---*/ @@ -7047,7 +7048,7 @@ dissect_mms_MMSpdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, /*--- End of included file: packet-mms-fn.c ---*/ -#line 56 "../../asn1/mms/packet-mms-template.c" +#line 57 "../../asn1/mms/packet-mms-template.c" /* * Dissect MMS PDUs inside a PPDU. @@ -7073,7 +7074,7 @@ dissect_mms(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset=offset; offset=dissect_mms_MMSpdu(FALSE, tvb, offset, &asn1_ctx , tree, -1); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte MMS PDU"); + proto_tree_add_expert(tree, pinfo, &ei_mms_zero_pdu, tvb, offset, -1); break; } } @@ -9755,7 +9756,7 @@ void proto_register_mms(void) { NULL, HFILL }}, /*--- End of included file: packet-mms-hfarr.c ---*/ -#line 95 "../../asn1/mms/packet-mms-template.c" +#line 96 "../../asn1/mms/packet-mms-template.c" }; /* List of subtrees */ @@ -9974,12 +9975,13 @@ void proto_register_mms(void) { &ett_mms_FileAttributes, /*--- End of included file: packet-mms-ettarr.c ---*/ -#line 101 "../../asn1/mms/packet-mms-template.c" +#line 102 "../../asn1/mms/packet-mms-template.c" }; static ei_register_info ei[] = { { &ei_mms_mal_timeofday_encoding, { "mms.malformed.timeofday_encoding", PI_MALFORMED, PI_WARN, "BER Error: malformed TimeOfDay encoding", EXPFILL }}, { &ei_mms_mal_utctime_encoding, { "mms.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed IEC61850 UTCTime encoding", EXPFILL }}, + { &ei_mms_zero_pdu, { "mms.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte MMS PDU", EXPFILL }}, }; expert_module_t* expert_mms; diff --git a/epan/dissectors/packet-p1.c b/epan/dissectors/packet-p1.c index f7fe6d70b7..ad4d907b16 100644 --- a/epan/dissectors/packet-p1.c +++ b/epan/dissectors/packet-p1.c @@ -842,6 +842,8 @@ static expert_field ei_p1_unknown_extension_attribute_type = EI_INIT; static expert_field ei_p1_unknown_standard_extension = EI_INIT; static expert_field ei_p1_unknown_built_in_content_type = EI_INIT; static expert_field ei_p1_unknown_tokendata_type = EI_INIT; +static expert_field ei_p1_unsupported_pdu = EI_INIT; +static expert_field ei_p1_zero_pdu = EI_INIT; /* Dissector tables */ static dissector_table_t p1_extension_dissector_table; @@ -892,7 +894,7 @@ static const value_string p3_err_code_string_vals[] = { /*--- End of included file: packet-p1-table.c ---*/ -#line 88 "../../asn1/p1/packet-p1-template.c" +#line 90 "../../asn1/p1/packet-p1-template.c" typedef struct p1_address_ctx { gboolean do_address; @@ -8188,7 +8190,7 @@ static void dissect_SecurityClassification_PDU(tvbuff_t *tvb _U_, packet_info *p /*--- End of included file: packet-p1-fn.c ---*/ -#line 149 "../../asn1/p1/packet-p1-template.c" +#line 151 "../../asn1/p1/packet-p1-template.c" /*--- Included file: packet-p1-table11.c ---*/ @@ -8220,7 +8222,7 @@ static const ros_opr_t p3_opr_tab[] = { /*--- End of included file: packet-p1-table11.c ---*/ -#line 151 "../../asn1/p1/packet-p1-template.c" +#line 153 "../../asn1/p1/packet-p1-template.c" /*--- Included file: packet-p1-table21.c ---*/ #line 1 "../../asn1/p1/packet-p1-table21.c" @@ -8265,7 +8267,7 @@ static const ros_err_t p3_err_tab[] = { /*--- End of included file: packet-p1-table21.c ---*/ -#line 152 "../../asn1/p1/packet-p1-template.c" +#line 154 "../../asn1/p1/packet-p1-template.c" static const ros_info_t p3_ros_info = { "P3", @@ -8388,7 +8390,7 @@ dissect_p1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* dat hf_p1_index = hf_p1_MTS_APDU_PDU; break; default: - proto_tree_add_text(tree, tvb, offset, -1,"Unsupported P1 PDU"); + proto_tree_add_expert(tree, pinfo, &ei_p1_unsupported_pdu, tvb, offset, -1); return tvb_captured_length(tvb); } @@ -8398,7 +8400,7 @@ dissect_p1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* dat old_offset=offset; offset=(*p1_dissector)(FALSE, tvb, offset, &asn1_ctx , tree, hf_p1_index); if(offset == old_offset){ - proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte P1 PDU"); + proto_tree_add_expert(tree, pinfo, &ei_p1_zero_pdu, tvb, offset, -1); break; } } @@ -10692,7 +10694,7 @@ void proto_register_p1(void) { NULL, HFILL }}, /*--- End of included file: packet-p1-hfarr.c ---*/ -#line 318 "../../asn1/p1/packet-p1-template.c" +#line 320 "../../asn1/p1/packet-p1-template.c" }; /* List of subtrees */ @@ -10891,7 +10893,7 @@ void proto_register_p1(void) { &ett_p1_SEQUENCE_SIZE_1_ub_recipients_OF_PerRecipientProbeSubmissionFields, /*--- End of included file: packet-p1-ettarr.c ---*/ -#line 331 "../../asn1/p1/packet-p1-template.c" +#line 333 "../../asn1/p1/packet-p1-template.c" }; static ei_register_info ei[] = { @@ -10899,6 +10901,8 @@ void proto_register_p1(void) { { &ei_p1_unknown_standard_extension, { "p1.unknown.standard_extension", PI_UNDECODED, PI_WARN, "Unknown standard-extension", EXPFILL }}, { &ei_p1_unknown_built_in_content_type, { "p1.unknown.built_in_content_type", PI_UNDECODED, PI_WARN, "P1 Unknown Content (unknown built-in content-type)", EXPFILL }}, { &ei_p1_unknown_tokendata_type, { "p1.unknown.tokendata_type", PI_UNDECODED, PI_WARN, "Unknown tokendata-type", EXPFILL }}, + { &ei_p1_unsupported_pdu, { "p1.unsupported_pdu", PI_UNDECODED, PI_WARN, "Unsupported P1 PDU", EXPFILL }}, + { &ei_p1_zero_pdu, { "p1.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte P1 PDU", EXPFILL }}, }; expert_module_t* expert_p1; @@ -11095,7 +11099,7 @@ void proto_reg_handoff_p1(void) { /*--- End of included file: packet-p1-dis-tab.c ---*/ -#line 377 "../../asn1/p1/packet-p1-template.c" +#line 381 "../../asn1/p1/packet-p1-template.c" /* APPLICATION CONTEXT */ diff --git a/epan/dissectors/packet-pkcs12.c b/epan/dissectors/packet-pkcs12.c index 97e72680f6..11d70e31a7 100644 --- a/epan/dissectors/packet-pkcs12.c +++ b/epan/dissectors/packet-pkcs12.c @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -73,6 +74,9 @@ static int proto_pkcs12 = -1; static int hf_pkcs12_X509Certificate_PDU = -1; static gint ett_decrypted_pbe = -1; +static expert_field ei_pkcs12_octet_string_expected = EI_INIT; + + static const char *object_identifier_id = NULL; static int iteration_count = 0; static tvbuff_t *salt = NULL; @@ -142,7 +146,7 @@ static int hf_pkcs12_encryptionScheme = -1; /* AlgorithmIdentifier */ static int hf_pkcs12_messageAuthScheme = -1; /* AlgorithmIdentifier */ /*--- End of included file: packet-pkcs12-hf.c ---*/ -#line 79 "../../asn1/pkcs12/packet-pkcs12-template.c" +#line 83 "../../asn1/pkcs12/packet-pkcs12-template.c" /* Initialize the subtree pointers */ @@ -170,7 +174,7 @@ static gint ett_pkcs12_PBES2Params = -1; static gint ett_pkcs12_PBMAC1Params = -1; /*--- End of included file: packet-pkcs12-ett.c ---*/ -#line 82 "../../asn1/pkcs12/packet-pkcs12-template.c" +#line 86 "../../asn1/pkcs12/packet-pkcs12-template.c" static void append_oid(proto_tree *tree, const char *oid) { @@ -1133,7 +1137,7 @@ static void dissect_PBMAC1Params_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, /*--- End of included file: packet-pkcs12-fn.c ---*/ -#line 390 "../../asn1/pkcs12/packet-pkcs12-template.c" +#line 394 "../../asn1/pkcs12/packet-pkcs12-template.c" static int strip_octet_string(tvbuff_t *tvb) { @@ -1165,7 +1169,7 @@ static void dissect_AuthenticatedSafe_OCTETSTRING_PDU(tvbuff_t *tvb, packet_info if((offset = strip_octet_string(tvb)) > 0) dissect_pkcs12_AuthenticatedSafe(FALSE, tvb, offset, &asn1_ctx, tree, hf_pkcs12_AuthenticatedSafe_PDU); else - proto_tree_add_text(tree, tvb, 0, 1, "BER Error: OCTET STRING expected"); + proto_tree_add_expert(tree, pinfo, &ei_pkcs12_octet_string_expected, tvb, 0, 1); } static void dissect_SafeContents_OCTETSTRING_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -1188,7 +1192,7 @@ static void dissect_X509Certificate_OCTETSTRING_PDU(tvbuff_t *tvb, packet_info * if((offset = strip_octet_string(tvb)) > 0) dissect_x509af_Certificate(FALSE, tvb, offset, &asn1_ctx, tree, hf_pkcs12_X509Certificate_PDU); else - proto_tree_add_text(tree, tvb, 0, 1, "BER Error: OCTET STRING expected"); + proto_tree_add_expert(tree, pinfo, &ei_pkcs12_octet_string_expected, tvb, 0, 1); } /*--- proto_register_pkcs12 ----------------------------------------------*/ @@ -1421,7 +1425,7 @@ void proto_register_pkcs12(void) { "AlgorithmIdentifier", HFILL }}, /*--- End of included file: packet-pkcs12-hfarr.c ---*/ -#line 457 "../../asn1/pkcs12/packet-pkcs12-template.c" +#line 461 "../../asn1/pkcs12/packet-pkcs12-template.c" }; /* List of subtrees */ @@ -1452,9 +1456,14 @@ void proto_register_pkcs12(void) { &ett_pkcs12_PBMAC1Params, /*--- End of included file: packet-pkcs12-ettarr.c ---*/ -#line 463 "../../asn1/pkcs12/packet-pkcs12-template.c" +#line 467 "../../asn1/pkcs12/packet-pkcs12-template.c" }; + static ei_register_info ei[] = { + { &ei_pkcs12_octet_string_expected, { "pkcs12.octet_string_expected", PI_PROTOCOL, PI_WARN, "BER Error: OCTET STRING expected", EXPFILL }}, + }; + module_t *pkcs12_module; + expert_module_t* expert_pkcs12; /* Register protocol */ proto_pkcs12 = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -1462,6 +1471,8 @@ void proto_register_pkcs12(void) { /* Register fields and subtrees */ proto_register_field_array(proto_pkcs12, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_pkcs12 = expert_register_protocol(proto_pkcs12); + expert_register_field_array(expert_pkcs12, ei, array_length(ei)); /* Register preferences */ pkcs12_module = prefs_register_protocol(proto_pkcs12, NULL); @@ -1513,7 +1524,7 @@ void proto_reg_handoff_pkcs12(void) { /*--- End of included file: packet-pkcs12-dis-tab.c ---*/ -#line 495 "../../asn1/pkcs12/packet-pkcs12-template.c" +#line 506 "../../asn1/pkcs12/packet-pkcs12-template.c" register_ber_oid_dissector("1.2.840.113549.1.9.22.1", dissect_X509Certificate_OCTETSTRING_PDU, proto_pkcs12, "x509Certificate"); diff --git a/epan/dissectors/packet-pktc.c b/epan/dissectors/packet-pktc.c index a4ec15e102..74de47fb98 100644 --- a/epan/dissectors/packet-pktc.c +++ b/epan/dissectors/packet-pktc.c @@ -172,7 +172,7 @@ static const value_string pktc_mtafqdn_msgtype_vals[] = { }; static int -dissect_pktc_app_specific_data(packet_info *pinfo _U_, proto_tree *parent_tree, tvbuff_t *tvb, int offset, guint8 doi, guint8 kmmid) +dissect_pktc_app_specific_data(packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, guint8 doi, guint8 kmmid) { int old_offset=offset; proto_tree *tree; @@ -200,7 +200,7 @@ dissect_pktc_app_specific_data(packet_info *pinfo _U_, proto_tree *parent_tree, /* snmpEngineID */ engineid_item = proto_tree_add_item(tree, hf_pktc_snmpEngineID, tvb, offset, len, ENC_NA); engineid_tree = proto_item_add_subtree(engineid_item, ett_pktc_engineid); - dissect_snmp_engineid(engineid_tree, tvb, offset, len); + dissect_snmp_engineid(engineid_tree, pinfo, tvb, offset, len); offset+=len; /* boots */ diff --git a/epan/dissectors/packet-pres.c b/epan/dissectors/packet-pres.c index 4ba5f560e9..b86c6cbf5c 100644 --- a/epan/dissectors/packet-pres.c +++ b/epan/dissectors/packet-pres.c @@ -229,6 +229,8 @@ static gint ett_pres_UD_type = -1; #line 98 "../../asn1/pres/packet-pres-template.c" static expert_field ei_pres_dissector_not_available = EI_INIT; +static expert_field ei_pres_wrong_spdu_type = EI_INIT; +static expert_field ei_pres_invalid_offset = EI_INIT; UAT_DEC_CB_DEF(pres_users, ctx_id, pres_user_t) UAT_CSTRING_CB_DEF(pres_users, oid, pres_user_t) @@ -1358,7 +1360,7 @@ static void dissect_UD_type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto /*--- End of included file: packet-pres-fn.c ---*/ -#line 225 "../../asn1/pres/packet-pres-template.c" +#line 227 "../../asn1/pres/packet-pres-template.c" /* @@ -1375,14 +1377,13 @@ dissect_ppdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, st /* do we have spdu type from the session dissector? */ if( local_session == NULL ){ - proto_tree_add_text(tree, tvb, offset, -1, - "Internal error:can't get spdu type from session dissector."); + proto_tree_add_expert(tree, pinfo, &ei_pres_wrong_spdu_type, tvb, offset, -1); return 0; } session = local_session; if(session->spdu_type == 0 ){ - proto_tree_add_text(tree, tvb, offset, -1, + proto_tree_add_expert_format(tree, pinfo, &ei_pres_wrong_spdu_type, tvb, offset, -1, "Internal error:wrong spdu type %x from session dissector.",session->spdu_type); return 0; } @@ -1442,8 +1443,8 @@ dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d /* do we have at least 4 bytes */ if (!tvb_bytes_exist(tvb, 0, 4)){ if (session && session->spdu_type != SES_MAJOR_SYNC_POINT) { - proto_tree_add_text(parent_tree, tvb, offset, - tvb_reported_length_remaining(tvb,offset),"User data"); + proto_tree_add_item(parent_tree, hf_pres_user_data, tvb, offset, + tvb_reported_length_remaining(tvb,offset), ENC_NA); return 0; /* no, it isn't a presentation PDU */ } } @@ -1485,8 +1486,8 @@ dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d if (oid) { call_ber_oid_callback (oid, tvb, offset, pinfo, parent_tree, session); } else { - proto_tree_add_text(parent_tree, tvb, offset, - tvb_reported_length_remaining(tvb,offset),"User data"); + proto_tree_add_item(parent_tree, hf_pres_user_data, tvb, offset, + tvb_reported_length_remaining(tvb,offset), ENC_NA); } return tvb_captured_length(tvb); } @@ -1495,8 +1496,8 @@ dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d old_offset = offset; offset = dissect_ppdu(tvb, offset, pinfo, parent_tree, session); if(offset <= old_offset){ - proto_tree_add_text(parent_tree, tvb, offset, -1,"Invalid offset"); - THROW(ReportedBoundsError); + proto_tree_add_expert(parent_tree, pinfo, &ei_pres_invalid_offset, tvb, offset, -1); + break; } } @@ -1531,7 +1532,6 @@ void proto_register_pres(void) { NULL, HFILL }}, - /*--- Included file: packet-pres-hfarr.c ---*/ #line 1 "../../asn1/pres/packet-pres-hfarr.c" { &hf_pres_UD_type_PDU, @@ -1896,6 +1896,8 @@ void proto_register_pres(void) { static ei_register_info ei[] = { { &ei_pres_dissector_not_available, { "pres.dissector_not_available", PI_UNDECODED, PI_WARN, "Dissector is not available", EXPFILL }}, + { &ei_pres_wrong_spdu_type, { "pres.wrong_spdu_type", PI_PROTOCOL, PI_WARN, "Internal error:can't get spdu type from session dissector", EXPFILL }}, + { &ei_pres_invalid_offset, { "pres.invalid_offset", PI_MALFORMED, PI_ERROR, "Internal error:can't get spdu type from session dissector", EXPFILL }}, }; static uat_field_t users_flds[] = { diff --git a/epan/dissectors/packet-q932.c b/epan/dissectors/packet-q932.c index 72a8a40fde..202e429ffd 100644 --- a/epan/dissectors/packet-q932.c +++ b/epan/dissectors/packet-q932.c @@ -32,6 +32,7 @@ #include "config.h" #include +#include #include #include #include @@ -94,7 +95,7 @@ static int hf_q932_destinationEntity = -1; /* EntityType */ static int hf_q932_destinationEntityAddress = -1; /* AddressInformation */ /*--- End of included file: packet-q932-hf.c ---*/ -#line 48 "../../asn1/q932/packet-q932-template.c" +#line 49 "../../asn1/q932/packet-q932-template.c" /* Initialize the subtree pointers */ static gint ett_q932 = -1; @@ -117,7 +118,13 @@ static gint ett_q932_UserSpecifiedSubaddress = -1; static gint ett_q932_NetworkFacilityExtension_U = -1; /*--- End of included file: packet-q932-ett.c ---*/ -#line 53 "../../asn1/q932/packet-q932-template.c" +#line 54 "../../asn1/q932/packet-q932-template.c" + +static expert_field ei_q932_dse_not_supported = EI_INIT; +static expert_field ei_q932_acse_not_supported = EI_INIT; +static expert_field ei_q932_unknown_component = EI_INIT; +static expert_field ei_q932_asn1_encoded = EI_INIT; + /* Preferences */ @@ -644,7 +651,7 @@ static void dissect_InterpretationComponent_PDU(tvbuff_t *tvb _U_, packet_info * /*--- End of included file: packet-q932-fn.c ---*/ -#line 134 "../../asn1/q932/packet-q932-template.c" +#line 141 "../../asn1/q932/packet-q932-template.c" /*--- dissect_q932_facility_ie -------------------------------------------------------*/ static void @@ -693,12 +700,12 @@ dissect_q932_facility_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr case 17 : /* abort */ offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "DSE APDU (not supported)"); + proto_tree_add_expert(tree, pinfo, &ei_q932_dse_not_supported, tvb, offset, len); break; default: offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "Unknown Component"); + proto_tree_add_expert(tree, pinfo, &ei_q932_unknown_component, tvb, offset, len); } break; case BER_CLASS_APP: @@ -711,18 +718,18 @@ dissect_q932_facility_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr case 4 : /* abrt */ offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "ACSE APDU (not supported)"); + proto_tree_add_expert(tree, pinfo, &ei_q932_acse_not_supported, tvb, offset, len); break; default: offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "Unknown Component"); + proto_tree_add_expert(tree, pinfo, &ei_q932_unknown_component, tvb, offset, len); } break; default: offset = dissect_ber_identifier(pinfo, tree, tvb, hoffset, NULL, NULL, NULL); offset = dissect_ber_length(pinfo, tree, tvb, offset, NULL, NULL); - proto_tree_add_text(tree, tvb, offset, len, "Unknown Component"); + proto_tree_add_expert(tree, pinfo, &ei_q932_unknown_component, tvb, offset, len); } offset = eoffset; } @@ -730,10 +737,11 @@ dissect_q932_facility_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr /*--- dissect_q932_ni_ie -------------------------------------------------------*/ static void -dissect_q932_ni_ie(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int length) { +dissect_q932_ni_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int length) { int remain = length; guint8 octet = 0; guint32 value = 0; + proto_item* ti; while ((remain > 0) && !(octet & 0x80)) { octet = tvb_get_guint8(tvb, offset++); @@ -741,10 +749,10 @@ dissect_q932_ni_ie(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree value <<= 7; value |= octet & 0x7F; } - proto_tree_add_uint(tree, hf_q932_nd, tvb, offset - (length - remain), length - remain, value); + ti = proto_tree_add_uint(tree, hf_q932_nd, tvb, offset - (length - remain), length - remain, value); if (remain > 0) { - proto_tree_add_text(tree, tvb, offset - remain, remain, "ASN.1 Encoded Data Structure(NOT IMPLEMENTED): %s", tvb_bytes_to_ep_str(tvb, offset - remain, remain)); + expert_add_info(pinfo, ti, &ei_q932_asn1_encoded); } } @@ -965,7 +973,7 @@ void proto_register_q932(void) { "AddressInformation", HFILL }}, /*--- End of included file: packet-q932-hfarr.c ---*/ -#line 302 "../../asn1/q932/packet-q932-template.c" +#line 310 "../../asn1/q932/packet-q932-template.c" }; /* List of subtrees */ @@ -990,10 +998,18 @@ void proto_register_q932(void) { &ett_q932_NetworkFacilityExtension_U, /*--- End of included file: packet-q932-ettarr.c ---*/ -#line 309 "../../asn1/q932/packet-q932-template.c" +#line 317 "../../asn1/q932/packet-q932-template.c" + }; + + static ei_register_info ei[] = { + { &ei_q932_dse_not_supported, { "q932.dse_not_supported", PI_UNDECODED, PI_WARN, "DSE APDU (not supported)", EXPFILL }}, + { &ei_q932_acse_not_supported, { "q932.acse_not_supported", PI_UNDECODED, PI_WARN, "ACSE APDU (not supported)", EXPFILL }}, + { &ei_q932_unknown_component, { "q932.unknown_component", PI_UNDECODED, PI_WARN, "Unknown Component", EXPFILL }}, + { &ei_q932_asn1_encoded, { "q932.asn1_encoded", PI_UNDECODED, PI_WARN, "ASN.1 Encoded Data Structure(NOT IMPLEMENTED)", EXPFILL }}, }; - module_t *q932_module; + module_t *q932_module; + expert_module_t* expert_q932; static const enum_val_t facility_encoding[] = { {"Facility as QSIG", "Dissect facility as QSIG", 0}, @@ -1008,6 +1024,8 @@ void proto_register_q932(void) { /* Register fields and subtrees */ proto_register_field_array(proto_q932, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_q932 = expert_register_protocol(proto_q932); + expert_register_field_array(expert_q932, ei, array_length(ei)); rose_ctx_init(&q932_rose_ctx); diff --git a/epan/dissectors/packet-qsig.c b/epan/dissectors/packet-qsig.c index 80b66f805c..080c50a474 100644 --- a/epan/dissectors/packet-qsig.c +++ b/epan/dissectors/packet-qsig.c @@ -32,6 +32,7 @@ #include "config.h" #include +#include #include #include @@ -488,7 +489,7 @@ static const value_string qsig_str_operation[] = { { 120, "mIDMailboxID" }, /*--- End of included file: packet-qsig-table10.c ---*/ -#line 271 "../../asn1/qsig/packet-qsig-template.c" +#line 272 "../../asn1/qsig/packet-qsig-template.c" { 0, NULL} }; @@ -681,7 +682,7 @@ static const value_string qsig_str_error[] = { { 1008, "unspecified" }, /*--- End of included file: packet-qsig-table20.c ---*/ -#line 276 "../../asn1/qsig/packet-qsig-template.c" +#line 277 "../../asn1/qsig/packet-qsig-template.c" { 0, NULL} }; @@ -1576,7 +1577,7 @@ static int hf_qsig_mid_multipleExtension = -1; /* SEQUENCE_OF_Extension */ static int hf_qsig_mid_multipleExtension_item = -1; /* Extension */ /*--- End of included file: packet-qsig-hf.c ---*/ -#line 292 "../../asn1/qsig/packet-qsig-template.c" +#line 293 "../../asn1/qsig/packet-qsig-template.c" static int *hf_qsig_ie_type_arr[] = { NULL, @@ -2036,9 +2037,13 @@ static gint ett_qsig_mid_MIDExtensions = -1; static gint ett_qsig_mid_SEQUENCE_OF_Extension = -1; /*--- End of included file: packet-qsig-ett.c ---*/ -#line 309 "../../asn1/qsig/packet-qsig-template.c" +#line 310 "../../asn1/qsig/packet-qsig-template.c" static gint ett_cnq_PSS1InformationElement = -1; +static expert_field ei_qsig_unsupported_arg_type = EI_INIT; +static expert_field ei_qsig_unsupported_result_type = EI_INIT; +static expert_field ei_qsig_unsupported_error_type = EI_INIT; + /* Preferences */ /* Subdissectors */ @@ -11926,7 +11931,7 @@ static int dissect_qsig_mid_Extension_PDU(tvbuff_t *tvb _U_, packet_info *pinfo /*--- End of included file: packet-qsig-fn.c ---*/ -#line 325 "../../asn1/qsig/packet-qsig-template.c" +#line 330 "../../asn1/qsig/packet-qsig-template.c" typedef struct _qsig_op_t { gint32 opcode; @@ -12148,7 +12153,7 @@ static const qsig_op_t qsig_op_tab[] = { /* mIDMailboxID */ { 120, dissect_qsig_mid_MIDMailboxIDArg_PDU, dissect_qsig_mid_MIDDummyRes_PDU }, /*--- End of included file: packet-qsig-table11.c ---*/ -#line 334 "../../asn1/qsig/packet-qsig-template.c" +#line 339 "../../asn1/qsig/packet-qsig-template.c" }; typedef struct _qsig_err_t { @@ -12345,7 +12350,7 @@ static const qsig_err_t qsig_err_tab[] = { /* unspecified */ { 1008, dissect_qsig_mid_Extension_PDU }, /*--- End of included file: packet-qsig-table21.c ---*/ -#line 343 "../../asn1/qsig/packet-qsig-template.c" +#line 348 "../../asn1/qsig/packet-qsig-template.c" }; static const qsig_op_t *get_op(gint32 opcode) { @@ -12426,7 +12431,7 @@ dissect_qsig_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->arg_pdu(tvb, pinfo, qsig_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(qsig_tree, tvb, offset, -1, "UNSUPPORTED ARGUMENT TYPE (QSIG)"); + proto_tree_add_expert(tree, pinfo, &ei_qsig_unsupported_error_type, tvb, offset, -1); offset += tvb_captured_length_remaining(tvb, offset); } @@ -12480,7 +12485,7 @@ dissect_qsig_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = op_ptr->res_pdu(tvb, pinfo, qsig_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(qsig_tree, tvb, offset, -1, "UNSUPPORTED RESULT TYPE (QSIG)"); + proto_tree_add_expert(tree, pinfo, &ei_qsig_unsupported_result_type, tvb, offset, -1); offset += tvb_captured_length_remaining(tvb, offset); } @@ -12529,7 +12534,7 @@ dissect_qsig_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data offset = err_ptr->err_pdu(tvb, pinfo, qsig_tree, NULL); else if (tvb_reported_length_remaining(tvb, offset) > 0) { - proto_tree_add_text(qsig_tree, tvb, offset, -1, "UNSUPPORTED ERROR TYPE (QSIG)"); + proto_tree_add_expert(tree, pinfo, &ei_qsig_unsupported_error_type, tvb, offset, -1); offset += tvb_captured_length_remaining(tvb, offset); } @@ -15900,7 +15905,7 @@ void proto_register_qsig(void) { NULL, HFILL }}, /*--- End of included file: packet-qsig-hfarr.c ---*/ -#line 660 "../../asn1/qsig/packet-qsig-template.c" +#line 665 "../../asn1/qsig/packet-qsig-template.c" }; /* List of subtrees */ @@ -16351,16 +16356,26 @@ void proto_register_qsig(void) { &ett_qsig_mid_SEQUENCE_OF_Extension, /*--- End of included file: packet-qsig-ettarr.c ---*/ -#line 668 "../../asn1/qsig/packet-qsig-template.c" +#line 673 "../../asn1/qsig/packet-qsig-template.c" &ett_cnq_PSS1InformationElement, }; + static ei_register_info ei[] = { + { &ei_qsig_unsupported_arg_type, { "qsig.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (QSIG)", EXPFILL }}, + { &ei_qsig_unsupported_result_type, { "qsig.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (QSIG)", EXPFILL }}, + { &ei_qsig_unsupported_error_type, { "qsig.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (QSIG)", EXPFILL }}, + }; + + expert_module_t* expert_qsig; + /* Register protocol and dissector */ proto_qsig = proto_register_protocol(PNAME, PSNAME, PFNAME); /* Register fields and subtrees */ proto_register_field_array(proto_qsig, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_qsig = expert_register_protocol(proto_qsig); + expert_register_field_array(expert_qsig, ei, array_length(ei)); /* Register dissector tables */ extension_dissector_table = register_dissector_table("qsig.ext", "QSIG Extension", FT_STRING, BASE_NONE); diff --git a/epan/dissectors/packet-ros.c b/epan/dissectors/packet-ros.c index 7788d17e91..60a4b504ff 100644 --- a/epan/dissectors/packet-ros.c +++ b/epan/dissectors/packet-ros.c @@ -115,6 +115,15 @@ static int hf_ros_global = -1; /* OBJECT_IDENTIFIER */ /* Initialize the subtree pointers */ static gint ett_ros = -1; +static gint ett_ros_unknown = -1; +static gint ett_ros_invoke_argument = -1; +static gint ett_ros_return_result = -1; +static gint ett_ros_bind_invoke = -1; +static gint ett_ros_bind_result = -1; +static gint ett_ros_bind_error = -1; +static gint ett_ros_unbind_invoke = -1; +static gint ett_ros_unbind_result = -1; +static gint ett_ros_unbind_error = -1; /*--- Included file: packet-ros-ett.c ---*/ #line 1 "../../asn1/ros/packet-ros-ett.c" @@ -129,7 +138,7 @@ static gint ett_ros_InvokeId = -1; static gint ett_ros_Code = -1; /*--- End of included file: packet-ros-ett.c ---*/ -#line 79 "../../asn1/ros/packet-ros-template.c" +#line 88 "../../asn1/ros/packet-ros-template.c" static expert_field ei_ros_dissector_oid_not_implemented = EI_INIT; static expert_field ei_ros_unknown_ros_pdu = EI_INIT; @@ -138,7 +147,6 @@ static dissector_table_t ros_oid_dissector_table=NULL; static GHashTable *oid_table=NULL; static GHashTable *protocol_table=NULL; -static gint ett_ros_unknown = -1; void register_ros_oid_dissector_handle(const char *oid, dissector_handle_t dissector, int proto _U_, const char *name, gboolean uses_rtse) @@ -491,12 +499,13 @@ static int dissect_ros_T_argument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 30 "../../asn1/ros/ros.cnf" char *oid; + proto_tree* subtree; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "invoke argument"); + subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_ros_invoke_argument, NULL, "invoke argument"); - ros_match_call_response(tvb, actx->pinfo, tree, invokeid, TRUE); + ros_match_call_response(tvb, actx->pinfo, subtree, invokeid, TRUE); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -532,14 +541,15 @@ dissect_ros_Invoke(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, static int dissect_ros_OperationResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 47 "../../asn1/ros/ros.cnf" +#line 48 "../../asn1/ros/ros.cnf" char *oid; + proto_tree* subtree; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "return result"); + subtree = proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_return_result, NULL, "return result"); - ros_match_call_response(tvb, actx->pinfo, tree, invokeid, FALSE); + ros_match_call_response(tvb, actx->pinfo, subtree, invokeid, FALSE); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -598,14 +608,15 @@ dissect_ros_ErrorCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _ static int dissect_ros_T_parameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 64 "../../asn1/ros/ros.cnf" +#line 66 "../../asn1/ros/ros.cnf" char *oid; + proto_tree* subtree; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "return result"); + subtree = proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_return_result, NULL, "return result"); - ros_match_call_response(tvb, actx->pinfo, tree, invokeid, FALSE); + ros_match_call_response(tvb, actx->pinfo, subtree, invokeid, FALSE); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -647,7 +658,7 @@ static const value_string ros_GeneralProblem_vals[] = { static int dissect_ros_GeneralProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 168 "../../asn1/ros/ros.cnf" +#line 171 "../../asn1/ros/ros.cnf" guint32 problem; offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -677,7 +688,7 @@ static const value_string ros_InvokeProblem_vals[] = { static int dissect_ros_InvokeProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 178 "../../asn1/ros/ros.cnf" +#line 181 "../../asn1/ros/ros.cnf" guint32 problem; offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -702,7 +713,7 @@ static const value_string ros_ReturnResultProblem_vals[] = { static int dissect_ros_ReturnResultProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 188 "../../asn1/ros/ros.cnf" +#line 191 "../../asn1/ros/ros.cnf" guint32 problem; offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -729,7 +740,7 @@ static const value_string ros_ReturnErrorProblem_vals[] = { static int dissect_ros_ReturnErrorProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 198 "../../asn1/ros/ros.cnf" +#line 201 "../../asn1/ros/ros.cnf" guint32 problem; offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -788,7 +799,7 @@ dissect_ros_Reject(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, static int dissect_ros_T_reject(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 161 "../../asn1/ros/ros.cnf" +#line 164 "../../asn1/ros/ros.cnf" col_set_str(actx->pinfo->cinfo, COL_INFO, "Reject"); offset = dissect_ros_Reject(implicit_tag, tvb, offset, actx, tree, hf_index); @@ -802,12 +813,12 @@ dissect_ros_T_reject(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U static int dissect_ros_T_bind_invoke(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 81 "../../asn1/ros/ros.cnf" +#line 84 "../../asn1/ros/ros.cnf" char *oid; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "bind-invoke"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_bind_result, NULL, "bind-invoke"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -824,12 +835,12 @@ dissect_ros_T_bind_invoke(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs static int dissect_ros_T_bind_result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 94 "../../asn1/ros/ros.cnf" +#line 97 "../../asn1/ros/ros.cnf" char *oid; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "bind-result"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_bind_result, NULL, "bind-result"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -846,12 +857,12 @@ dissect_ros_T_bind_result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs static int dissect_ros_T_bind_error(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 107 "../../asn1/ros/ros.cnf" +#line 110 "../../asn1/ros/ros.cnf" char *oid; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "bind-error"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_bind_error, NULL, "bind-error"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -869,12 +880,12 @@ dissect_ros_T_bind_error(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse static int dissect_ros_T_unbind_invoke(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 121 "../../asn1/ros/ros.cnf" +#line 124 "../../asn1/ros/ros.cnf" char *oid; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "unbind-invoke"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_unbind_invoke, NULL, "unbind-invoke"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -892,12 +903,12 @@ dissect_ros_T_unbind_invoke(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_ros_T_unbind_result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 135 "../../asn1/ros/ros.cnf" +#line 138 "../../asn1/ros/ros.cnf" char *oid; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "unbind-result"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_unbind_result, NULL, "unbind-result"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -914,12 +925,12 @@ dissect_ros_T_unbind_result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of static int dissect_ros_T_unbind_error(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 148 "../../asn1/ros/ros.cnf" +#line 151 "../../asn1/ros/ros.cnf" char *oid; struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE *)actx->private_data; /* not sure what the length should be - -1 for now */ - proto_tree_add_text(tree, tvb, offset,-1, "unbind-error"); + proto_tree_add_subtree(tree, tvb, offset,-1, ett_ros_unbind_error, NULL, "unbind-error"); if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id))) { /* this should be ROS! */ @@ -1003,7 +1014,7 @@ dissect_ros_Code(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, a /*--- End of included file: packet-ros-fn.c ---*/ -#line 371 "../../asn1/ros/packet-ros-template.c" +#line 379 "../../asn1/ros/packet-ros-template.c" /* * Dissect ROS PDUs inside a PPDU. @@ -1225,13 +1236,22 @@ void proto_register_ros(void) { "OBJECT_IDENTIFIER", HFILL }}, /*--- End of included file: packet-ros-hfarr.c ---*/ -#line 480 "../../asn1/ros/packet-ros-template.c" +#line 488 "../../asn1/ros/packet-ros-template.c" }; /* List of subtrees */ static gint *ett[] = { &ett_ros, &ett_ros_unknown, + &ett_ros_invoke_argument, + &ett_ros_return_result, + &ett_ros_bind_invoke, + &ett_ros_bind_result, + &ett_ros_bind_error, + &ett_ros_unbind_invoke, + &ett_ros_unbind_result, + &ett_ros_unbind_error, + /*--- Included file: packet-ros-ettarr.c ---*/ #line 1 "../../asn1/ros/packet-ros-ettarr.c" @@ -1246,7 +1266,7 @@ void proto_register_ros(void) { &ett_ros_Code, /*--- End of included file: packet-ros-ettarr.c ---*/ -#line 487 "../../asn1/ros/packet-ros-template.c" +#line 504 "../../asn1/ros/packet-ros-template.c" }; static ei_register_info ei[] = { diff --git a/epan/dissectors/packet-snmp.c b/epan/dissectors/packet-snmp.c index 1052a83f56..a92c44f4e3 100644 --- a/epan/dissectors/packet-snmp.c +++ b/epan/dissectors/packet-snmp.c @@ -237,6 +237,7 @@ static int hf_snmp_objectname = -1; static int hf_snmp_scalar_instance_index = -1; static int hf_snmp_var_bind_str = -1; +static int hf_snmp_agentid_trailer = -1; /*--- Included file: packet-snmp-hf.c ---*/ @@ -308,7 +309,7 @@ static int hf_snmp_priority = -1; /* INTEGER_M1_2147483647 */ static int hf_snmp_operation = -1; /* T_operation */ /*--- End of included file: packet-snmp-hf.c ---*/ -#line 234 "../../asn1/snmp/packet-snmp-template.c" +#line 235 "../../asn1/snmp/packet-snmp-template.c" static int hf_smux_version = -1; static int hf_smux_pdutype = -1; @@ -351,7 +352,7 @@ static gint ett_snmp_SimpleOpen_U = -1; static gint ett_snmp_RReqPDU_U = -1; /*--- End of included file: packet-snmp-ett.c ---*/ -#line 253 "../../asn1/snmp/packet-snmp-template.c" +#line 254 "../../asn1/snmp/packet-snmp-template.c" static expert_field ei_snmp_failed_decrypted_data_pdu = EI_INIT; static expert_field ei_snmp_decrypted_data_bad_formatted = EI_INIT; @@ -380,6 +381,9 @@ static expert_field ei_snmp_integral_value0 = EI_INIT; static expert_field ei_snmp_missing_mib = EI_INIT; static expert_field ei_snmp_varbind_wrong_length_value = EI_INIT; static expert_field ei_snmp_varbind_wrong_class_tag = EI_INIT; +static expert_field ei_snmp_rfc1910_non_conformant = EI_INIT; +static expert_field ei_snmp_rfc3411_non_conformant = EI_INIT; +static expert_field ei_snmp_version_unknown = EI_INIT; static const true_false_string auth_flags = { "OK", @@ -783,14 +787,12 @@ dissect_snmp_VarBind(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pi_value = proto_tree_add_item(pt_varbind,hf_snmp_unSpecified,tvb,value_offset,value_len,ENC_NA); goto set_label; } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"A scalar should have one instance sub-id this one has none"); - expert_add_info(actx->pinfo, pi, &ei_snmp_no_instance_subid); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_no_instance_subid,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"A scalar should have only one instance sub-id this has: %d",oid_left); - expert_add_info(actx->pinfo, pi, &ei_snmp_wrong_num_of_subids); + proto_tree_add_expert_format(pt_name,actx->pinfo,&ei_snmp_wrong_num_of_subids,tvb,0,0,"A scalar should have only one instance sub-id this has: %d",oid_left); oid_info_is_ok = FALSE; goto indexing_done; } @@ -813,16 +815,14 @@ dissect_snmp_VarBind(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, guint suboid_len; if (key_start >= oid_matched+oid_left) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"index sub-oid shorter than expected"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_suboid_too_short); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_suboid_too_short,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } switch(k->key_type) { case OID_KEY_TYPE_WRONG: { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"OID instaces not handled, if you want this implemented please contact the wireshark developers"); - expert_add_info(actx->pinfo, pi, &ei_snmp_unimplemented_instance_index); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_unimplemented_instance_index,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } @@ -853,15 +853,13 @@ show_oid_index: suboid = &(subids[key_start]); if( suboid_len == 0 ) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"an index sub-oid OID cannot be 0 bytes long!"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_suboid_len0); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_suboid_len0,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } if( key_len < suboid_len ) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"index sub-oid should not be longer than remaining oid size"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_suboid_too_long); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_suboid_too_long,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } @@ -907,8 +905,7 @@ show_oid_index: } if( key_len < buf_len ) { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"index string should not be longer than remaining oid size"); - expert_add_info(actx->pinfo, pi, &ei_snmp_index_string_too_long); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_index_string_too_long,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } @@ -949,20 +946,17 @@ show_oid_index: } goto indexing_done; } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"We do not know how to handle this OID, if you want this implemented please contact the wireshark developers"); - expert_add_info(actx->pinfo, pi, &ei_snmp_unimplemented_instance_index); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_unimplemented_instance_index,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } } else { - proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"The COLUMS's parent is not a ROW. This is a BUG! please contact the wireshark developers."); - expert_add_info(actx->pinfo, pi, &ei_snmp_column_parent_not_row); + proto_tree_add_expert(pt_name,actx->pinfo,&ei_snmp_column_parent_not_row,tvb,0,0); oid_info_is_ok = FALSE; goto indexing_done; } default: { -/* proto_item* pi = proto_tree_add_text(pt_name,tvb,0,0,"This kind OID should have no value"); - expert_add_info_format(actx->pinfo, pi, PI_MALFORMED, PI_WARN, "This kind OID should have no value"); */ +/* proto_tree_add_expert (pt_name,actx->pinfo,PI_MALFORMED, PI_WARN,tvb,0,0,"This kind OID should have no value"); */ oid_info_is_ok = FALSE; goto indexing_done; } @@ -1083,8 +1077,7 @@ indexing_done: */ if (value_len > 9 || tvb_get_guint8(tvb, value_offset) != 0) { /* It is. Fail. */ - pi_value = proto_tree_add_text(pt_varbind,tvb,value_offset,value_len,"Integral value too large"); - expert_add_info(actx->pinfo, pi_value, &ei_snmp_uint_too_large); + proto_tree_add_expert_format(pt_varbind,actx->pinfo,&ei_snmp_uint_too_large,tvb,value_offset,value_len,"Integral value too large"); goto already_added; } /* Cheat and skip the leading 0 byte */ @@ -1094,8 +1087,7 @@ indexing_done: /* * For now, just reject these. */ - pi_value = proto_tree_add_text(pt_varbind,tvb,value_offset,value_len,"Integral value too large or too small"); - expert_add_info(actx->pinfo, pi_value, &ei_snmp_int_too_large); + proto_tree_add_expert_format(pt_varbind,actx->pinfo,&ei_snmp_int_too_large,tvb,value_offset,value_len,"Integral value too large or too small"); goto already_added; } } else if (value_len == 0) { @@ -1109,8 +1101,7 @@ indexing_done: */ header_field_info *hfinfo = proto_registrar_get_nth(hfid); if (hfinfo->type == FT_UINT64 || hfinfo->type == FT_INT64) { - pi_value = proto_tree_add_text(pt_varbind,tvb,value_offset,value_len,"Integral value is zero-length"); - expert_add_info(actx->pinfo, pi_value, &ei_snmp_integral_value0); + proto_tree_add_expert_format(pt_varbind,actx->pinfo,&ei_snmp_integral_value0,tvb,value_offset,value_len,"Integral value is zero-length"); goto already_added; } } @@ -1234,7 +1225,7 @@ static const value_string snmp_engineid_cisco_type_vals[] = { * or historic RFC 1910 (AgentID) */ int -dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len) +dissect_snmp_engineid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int offset, int len) { proto_item *item = NULL; guint8 conformance, format; @@ -1261,13 +1252,12 @@ dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len) case SNMP_ENGINEID_RFC1910: /* 12-byte AgentID w/ 8-byte trailer */ if (len_remain==8) { - proto_tree_add_text(tree, tvb, offset, 8, "AgentID Trailer: 0x%s", - tvb_bytes_to_ep_str(tvb, offset, 8)); - offset+=8; - len_remain-=8; + proto_tree_add_item(tree, hf_snmp_agentid_trailer, tvb, offset, 8, ENC_NA); + offset+=8; + len_remain-=8; } else { - proto_tree_add_text(tree, tvb, offset, len_remain, ""); - return offset; + proto_tree_add_expert(tree, pinfo, &ei_snmp_rfc1910_non_conformant, tvb, offset, len_remain); + return offset; } break; @@ -1352,7 +1342,7 @@ dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len) } if (len_remain>0) { - proto_tree_add_text(tree, tvb, offset, len_remain, ""); + proto_tree_add_expert(tree, pinfo, &ei_snmp_rfc3411_non_conformant, tvb, offset, len_remain); offset+=len_remain; } return offset; @@ -2488,7 +2478,7 @@ dissect_snmp_SnmpEngineID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs ¶m_tvb); if (param_tvb) { proto_tree* engine_tree = proto_item_add_subtree(actx->created_item,ett_engineid); - dissect_snmp_engineid(engine_tree, param_tvb, 0, tvb_length_remaining(param_tvb,0)); + dissect_snmp_engineid(engine_tree, actx->pinfo, param_tvb, 0, tvb_length_remaining(param_tvb,0)); } @@ -2506,7 +2496,7 @@ dissect_snmp_T_msgAuthoritativeEngineID(gboolean implicit_tag _U_, tvbuff_t *tvb &usm_p.engine_tvb); if (usm_p.engine_tvb) { proto_tree* engine_tree = proto_item_add_subtree(actx->created_item,ett_engineid); - dissect_snmp_engineid(engine_tree, usm_p.engine_tvb, 0, tvb_length_remaining(usm_p.engine_tvb,0)); + dissect_snmp_engineid(engine_tree, actx->pinfo, usm_p.engine_tvb, 0, tvb_length_remaining(usm_p.engine_tvb,0)); } @@ -2602,7 +2592,7 @@ dissect_snmp_INTEGER_484_2147483647(gboolean implicit_tag _U_, tvbuff_t *tvb _U_ static int dissect_snmp_T_msgFlags(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 216 "../../asn1/snmp/snmp.cnf" +#line 213 "../../asn1/snmp/snmp.cnf" tvbuff_t *parameter_tvb = NULL; offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, @@ -2657,7 +2647,7 @@ dissect_snmp_HeaderData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset static int dissect_snmp_T_msgSecurityParameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 164 "../../asn1/snmp/snmp.cnf" +#line 161 "../../asn1/snmp/snmp.cnf" switch(MsgSecurityModel){ case SNMP_SEC_USM: /* 3 */ @@ -2723,10 +2713,7 @@ dissect_snmp_T_encryptedPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of proto_tree* decrypted_tree; if (! check_ScopedPdu(cleartext_tvb)) { - proto_item* cause = proto_tree_add_text(encryptedpdu_tree, cleartext_tvb, 0, -1, - "Decrypted data not formatted as expected, wrong key?"); - - expert_add_info(actx->pinfo, cause, &ei_snmp_decrypted_data_bad_formatted); + proto_tree_add_expert(encryptedpdu_tree, actx->pinfo, &ei_snmp_decrypted_data_bad_formatted, cleartext_tvb, 0, -1); col_set_str(actx->pinfo->cinfo, COL_INFO, "encryptedPDU: Decrypted data not formatted as expected"); @@ -2785,7 +2772,7 @@ dissect_snmp_SNMPv3Message(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, SNMPv3Message_sequence, hf_index, ett_snmp_SNMPv3Message); -#line 179 "../../asn1/snmp/snmp.cnf" +#line 176 "../../asn1/snmp/snmp.cnf" if( usm_p.authenticated && usm_p.user_assoc @@ -3097,7 +3084,7 @@ static void dissect_SMUX_PDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro /*--- End of included file: packet-snmp-fn.c ---*/ -#line 1886 "../../asn1/snmp/packet-snmp-template.c" +#line 1876 "../../asn1/snmp/packet-snmp-template.c" guint @@ -3233,11 +3220,9 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo, col_set_str(pinfo->cinfo, COL_PROTOCOL, proto_get_protocol_short_name(find_protocol_by_id(proto))); - if (tree) { - item = proto_tree_add_item(tree, proto, tvb, start_offset, + item = proto_tree_add_item(tree, proto, tvb, start_offset, message_length, ENC_BIG_ENDIAN); - snmp_tree = proto_item_add_subtree(item, ett); - } + snmp_tree = proto_item_add_subtree(item, ett); switch (version) { case 0: /* v1 */ @@ -3257,7 +3242,7 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo, * if this is SNMP-over-TCP, our caller thinks there's * nothing left to dissect. */ - proto_tree_add_text(snmp_tree, tvb, offset, -1,"Unknown version"); + expert_add_info(pinfo, item, &ei_snmp_version_unknown); return length_remaining; break; } @@ -3657,6 +3642,9 @@ void proto_register_snmp(void) { { &hf_snmp_var_bind_str, { "Variable-binding-string", "snmp.var-bind_str", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_snmp_agentid_trailer, { + "AgentID Trailer", "snmp.agentid_trailer", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, @@ -3924,7 +3912,7 @@ void proto_register_snmp(void) { NULL, HFILL }}, /*--- End of included file: packet-snmp-hfarr.c ---*/ -#line 2448 "../../asn1/snmp/packet-snmp-template.c" +#line 2439 "../../asn1/snmp/packet-snmp-template.c" }; /* List of subtrees */ @@ -3964,11 +3952,11 @@ void proto_register_snmp(void) { &ett_snmp_RReqPDU_U, /*--- End of included file: packet-snmp-ettarr.c ---*/ -#line 2464 "../../asn1/snmp/packet-snmp-template.c" +#line 2455 "../../asn1/snmp/packet-snmp-template.c" }; static ei_register_info ei[] = { { &ei_snmp_failed_decrypted_data_pdu, { "snmp.failed_decrypted_data_pdu", PI_MALFORMED, PI_WARN, "Failed to decrypt encryptedPDU", EXPFILL }}, - { &ei_snmp_decrypted_data_bad_formatted, { "snmp.decrypted_data_bad_formatted", PI_MALFORMED, PI_WARN, "Decrypted data not formatted as expected", EXPFILL }}, + { &ei_snmp_decrypted_data_bad_formatted, { "snmp.decrypted_data_bad_formatted", PI_MALFORMED, PI_WARN, "Decrypted data not formatted as expected, wrong key?", EXPFILL }}, { &ei_snmp_verify_authentication_error, { "snmp.verify_authentication_error", PI_MALFORMED, PI_ERROR, "Error while verifying Message authenticity", EXPFILL }}, { &ei_snmp_authentication_ok, { "snmp.authentication_ok", PI_CHECKSUM, PI_CHAT, "SNMP Authentication OK", EXPFILL }}, { &ei_snmp_authentication_error, { "snmp.authentication_error", PI_CHECKSUM, PI_WARN, "SNMP Authentication Error", EXPFILL }}, @@ -3983,10 +3971,10 @@ void proto_register_snmp(void) { { &ei_snmp_no_instance_subid, { "snmp.no_instance_subid", PI_MALFORMED, PI_WARN, "No instance sub-id in scalar value", EXPFILL }}, { &ei_snmp_wrong_num_of_subids, { "snmp.wrong_num_of_subids", PI_MALFORMED, PI_WARN, "Wrong number of instance sub-ids in scalar value", EXPFILL }}, { &ei_snmp_index_suboid_too_short, { "snmp.index_suboid_too_short", PI_MALFORMED, PI_WARN, "index sub-oid shorter than expected", EXPFILL }}, - { &ei_snmp_unimplemented_instance_index, { "snmp.unimplemented_instance_index", PI_UNDECODED, PI_WARN, "Unimplemented instance index", EXPFILL }}, - { &ei_snmp_index_suboid_len0, { "snmp.ndex_suboid_len0", PI_MALFORMED, PI_WARN, "index sub-oid OID with len=0", EXPFILL }}, - { &ei_snmp_index_suboid_too_long, { "snmp.index_suboid_too_long", PI_MALFORMED, PI_WARN, "index sub-oid longer than remaining oid size", EXPFILL }}, - { &ei_snmp_index_string_too_long, { "snmp.index_string_too_long", PI_MALFORMED, PI_WARN, "index string longer than remaining oid size", EXPFILL }}, + { &ei_snmp_unimplemented_instance_index, { "snmp.unimplemented_instance_index", PI_UNDECODED, PI_WARN, "OID instaces not handled, if you want this implemented please contact the wireshark developers", EXPFILL }}, + { &ei_snmp_index_suboid_len0, { "snmp.ndex_suboid_len0", PI_MALFORMED, PI_WARN, "an index sub-oid OID cannot be 0 bytes long!", EXPFILL }}, + { &ei_snmp_index_suboid_too_long, { "snmp.index_suboid_too_long", PI_MALFORMED, PI_WARN, "index sub-oid should not be longer than remaining oid size", EXPFILL }}, + { &ei_snmp_index_string_too_long, { "snmp.index_string_too_long", PI_MALFORMED, PI_WARN, "index string should not be longer than remaining oid size", EXPFILL }}, { &ei_snmp_column_parent_not_row, { "snmp.column_parent_not_row", PI_MALFORMED, PI_ERROR, "COLUMS's parent is not a ROW", EXPFILL }}, { &ei_snmp_uint_too_large, { "snmp.uint_too_large", PI_UNDECODED, PI_NOTE, "Unsigned integer value > 2^64 - 1", EXPFILL }}, { &ei_snmp_int_too_large, { "snmp.int_too_large", PI_UNDECODED, PI_NOTE, "Signed integer value > 2^63 - 1 or <= -2^63", EXPFILL }}, @@ -3994,6 +3982,9 @@ void proto_register_snmp(void) { { &ei_snmp_missing_mib, { "snmp.missing_mib", PI_UNDECODED, PI_NOTE, "Unresolved value, Missing MIB", EXPFILL }}, { &ei_snmp_varbind_wrong_length_value, { "snmp.varbind.wrong_length_value", PI_MALFORMED, PI_WARN, "Wrong length for SNMP VarBind/value", EXPFILL }}, { &ei_snmp_varbind_wrong_class_tag, { "snmp.varbind.wrong_class_tag", PI_MALFORMED, PI_WARN, "Wrong class/tag for SNMP VarBind/value", EXPFILL }}, + { &ei_snmp_rfc1910_non_conformant, { "snmp.rfc1910_non_conformant", PI_PROTOCOL, PI_WARN, "Data not conforming to RFC1910", EXPFILL }}, + { &ei_snmp_rfc3411_non_conformant, { "snmp.rfc3411_non_conformant", PI_PROTOCOL, PI_WARN, "Data not conforming to RFC3411", EXPFILL }}, + { &ei_snmp_version_unknown, { "snmp.version.unknown", PI_PROTOCOL, PI_WARN, "Unknown version", EXPFILL }}, }; diff --git a/epan/dissectors/packet-snmp.h b/epan/dissectors/packet-snmp.h index de7e313306..d2497873cb 100644 --- a/epan/dissectors/packet-snmp.h +++ b/epan/dissectors/packet-snmp.h @@ -99,7 +99,7 @@ struct _snmp_usm_params_t { */ extern guint dissect_snmp_pdu(tvbuff_t *, int, packet_info *, proto_tree *tree, int, gint, gboolean); -extern int dissect_snmp_engineid(proto_tree *, tvbuff_t *, int, int); +extern int dissect_snmp_engineid(proto_tree *, packet_info *, tvbuff_t *, int, int); /*#include "packet-snmp-exp.h"*/ diff --git a/epan/dissectors/packet-spnego.c b/epan/dissectors/packet-spnego.c index 97a5b1f7d1..fb34849e20 100644 --- a/epan/dissectors/packet-spnego.c +++ b/epan/dissectors/packet-spnego.c @@ -44,6 +44,7 @@ #include #include +#include #include #include "packet-dcerpc.h" #include "packet-gssapi.h" @@ -116,7 +117,7 @@ static int hf_spnego_ContextFlags_confFlag = -1; static int hf_spnego_ContextFlags_integFlag = -1; /*--- End of included file: packet-spnego-hf.c ---*/ -#line 83 "../../asn1/spnego/packet-spnego-template.c" +#line 84 "../../asn1/spnego/packet-spnego-template.c" /* Global variables */ static const char *MechType_oid; @@ -143,7 +144,10 @@ static gint ett_spnego_NegTokenTarg = -1; static gint ett_spnego_InitialContextToken_U = -1; /*--- End of included file: packet-spnego-ett.c ---*/ -#line 97 "../../asn1/spnego/packet-spnego-template.c" +#line 98 "../../asn1/spnego/packet-spnego-template.c" + +static expert_field ei_spnego_decrypted_keytype = EI_INIT; +static expert_field ei_spnego_unknown_header = EI_INIT; /* * Unfortunately, we have to have forward declarations of thess, @@ -559,7 +563,7 @@ dissect_spnego_InitialContextToken(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, /*--- End of included file: packet-spnego-fn.c ---*/ -#line 111 "../../asn1/spnego/packet-spnego-template.c" +#line 115 "../../asn1/spnego/packet-spnego-template.c" /* * This is the SPNEGO KRB5 dissector. It is not true KRB5, but some ASN.1 * wrapped blob with an OID, USHORT token ID, and a Ticket, that is also @@ -714,7 +718,7 @@ dissect_spnego_krb5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) return; default: - proto_tree_add_text(subtree, tvb, offset, 0, + proto_tree_add_expert_format(subtree, pinfo, &ei_spnego_unknown_header, tvb, offset, 0, "Unknown header (class=%d, pc=%d, tag=%d)", ber_class, pc, tag); goto done; @@ -1019,7 +1023,7 @@ decrypt_arcfour(packet_info *pinfo, #if defined(HAVE_HEIMDAL_KERBEROS) || defined(HAVE_MIT_KERBEROS) static void -decrypt_gssapi_krb_arcfour_wrap(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int keytype) +decrypt_gssapi_krb_arcfour_wrap(proto_tree *tree _U_, packet_info *pinfo, tvbuff_t *tvb, int keytype) { int ret; enc_key_t *ek; @@ -1065,7 +1069,10 @@ decrypt_gssapi_krb_arcfour_wrap(proto_tree *tree, packet_info *pinfo, tvbuff_t * ek->keytype ); if (ret >= 0) { - proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin); + expert_add_info_format(pinfo, NULL, &ei_spnego_decrypted_keytype, + "Decrypted keytype %d in frame %u using %s", + ek->keytype, pinfo->fd->num, ek->key_origin); + pinfo->gssapi_decrypted_tvb=tvb_new_child_real_data(tvb, output_message_buffer, ret, ret); @@ -1950,7 +1957,7 @@ void proto_register_spnego(void) { NULL, HFILL }}, /*--- End of included file: packet-spnego-hfarr.c ---*/ -#line 1405 "../../asn1/spnego/packet-spnego-template.c" +#line 1412 "../../asn1/spnego/packet-spnego-template.c" }; /* List of subtrees */ @@ -1973,9 +1980,16 @@ void proto_register_spnego(void) { &ett_spnego_InitialContextToken_U, /*--- End of included file: packet-spnego-ettarr.c ---*/ -#line 1415 "../../asn1/spnego/packet-spnego-template.c" +#line 1422 "../../asn1/spnego/packet-spnego-template.c" }; + static ei_register_info ei[] = { + { &ei_spnego_decrypted_keytype, { "spnego.decrypted_keytype", PI_SECURITY, PI_CHAT, "Decryted keytype", EXPFILL }}, + { &ei_spnego_unknown_header, { "spnego.unknown_header", PI_PROTOCOL, PI_WARN, "Unknown header", EXPFILL }}, + }; + + expert_module_t* expert_spnego; + /* Register protocol */ proto_spnego = proto_register_protocol(PNAME, PSNAME, PFNAME); @@ -1991,6 +2005,8 @@ void proto_register_spnego(void) { /* Register fields and subtrees */ proto_register_field_array(proto_spnego, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_spnego = expert_register_protocol(proto_spnego); + expert_register_field_array(expert_spnego, ei, array_length(ei)); } diff --git a/epan/dissectors/packet-sv.c b/epan/dissectors/packet-sv.c index ab0ee9e81d..b906d9990e 100644 --- a/epan/dissectors/packet-sv.c +++ b/epan/dissectors/packet-sv.c @@ -143,6 +143,7 @@ static gint ett_sv_ASDU = -1; #line 109 "../../asn1/sv/packet-sv-template.c" static expert_field ei_sv_mal_utctime = EI_INIT; +static expert_field ei_sv_zero_pdu = EI_INIT; #if 0 static const value_string sv_q_validity_vals[] = { @@ -435,7 +436,7 @@ dissect_sv_SampledValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse /*--- End of included file: packet-sv-fn.c ---*/ -#line 189 "../../asn1/sv/packet-sv-template.c" +#line 190 "../../asn1/sv/packet-sv-template.c" /* * Dissect SV PDUs inside a PPDU. @@ -478,7 +479,7 @@ dissect_sv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) old_offset = offset; offset = dissect_sv_SampledValues(FALSE, tvb, offset, &asn1_ctx , tree, -1); if (offset == old_offset) { - proto_tree_add_text(tree, tvb, offset, -1, "Internal error, zero-byte SV PDU"); + proto_tree_add_expert(tree, pinfo, &ei_sv_zero_pdu, tvb, offset, -1); break; } } @@ -608,7 +609,7 @@ void proto_register_sv(void) { NULL, HFILL }}, /*--- End of included file: packet-sv-hfarr.c ---*/ -#line 305 "../../asn1/sv/packet-sv-template.c" +#line 306 "../../asn1/sv/packet-sv-template.c" }; /* List of subtrees */ @@ -625,11 +626,12 @@ void proto_register_sv(void) { &ett_sv_ASDU, /*--- End of included file: packet-sv-ettarr.c ---*/ -#line 313 "../../asn1/sv/packet-sv-template.c" +#line 314 "../../asn1/sv/packet-sv-template.c" }; static ei_register_info ei[] = { { &ei_sv_mal_utctime, { "sv.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed UTCTime encoding", EXPFILL }}, + { &ei_sv_zero_pdu, { "sv.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte SV PDU", EXPFILL }}, }; expert_module_t* expert_sv; diff --git a/epan/dissectors/packet-t38.c b/epan/dissectors/packet-t38.c index 07e81d9fcc..baf2a6163b 100644 --- a/epan/dissectors/packet-t38.c +++ b/epan/dissectors/packet-t38.c @@ -189,6 +189,8 @@ static gint ett_t38_setup = -1; static gint ett_data_fragment = -1; static gint ett_data_fragments = -1; +static expert_field ei_t38_malformed = EI_INIT; + static gboolean primary_part = TRUE; static guint32 seq_number = 0; @@ -647,10 +649,8 @@ dissect_t38_T_field_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ if (new_tvb) call_dissector_with_data((t30_hdlc_handle) ? t30_hdlc_handle : data_handle, new_tvb, actx->pinfo, tree, t38_info); } } else { - if(tree){ - proto_tree_add_text(tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), + proto_tree_add_expert_format(tree, actx->pinfo, &ei_t38_malformed, tvb, offset, tvb_reported_length_remaining(tvb, offset), "[RECEIVED END OF FRAGMENT W/OUT ANY FRAGMENT DATA]"); - } col_append_str(actx->pinfo->cinfo, COL_INFO, " [Malformed?]"); actx->pinfo->fragmented = save_fragmented; } @@ -673,7 +673,7 @@ dissect_t38_T_field_type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ static int dissect_t38_T_field_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 153 "../../asn1/t38/t38.cnf" +#line 151 "../../asn1/t38/t38.cnf" tvbuff_t *value_tvb = NULL; guint32 value_len; @@ -684,7 +684,7 @@ dissect_t38_T_field_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ -#line 160 "../../asn1/t38/t38.cnf" +#line 158 "../../asn1/t38/t38.cnf" if (primary_part){ if(value_len < 8){ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "[%s]", @@ -812,7 +812,7 @@ dissect_t38_T_seq_number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 65535U, &seq_number, FALSE); -#line 240 "../../asn1/t38/t38.cnf" +#line 238 "../../asn1/t38/t38.cnf" /* info for tap */ if (primary_part) t38_info->seq_num = seq_number; @@ -826,12 +826,12 @@ dissect_t38_T_seq_number(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ static int dissect_t38_T_primary_ifp_packet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 248 "../../asn1/t38/t38.cnf" +#line 246 "../../asn1/t38/t38.cnf" primary_part = TRUE; offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, dissect_t38_IFPPacket); -#line 250 "../../asn1/t38/t38.cnf" +#line 248 "../../asn1/t38/t38.cnf" /* if is a valid t38 packet, add to tap */ if (p_t38_packet_conv && (!actx->pinfo->flags.in_error_pkt) && ((gint32) seq_number != p_t38_packet_conv_info->last_seqnum)) tap_queue_packet(t38_tap, actx->pinfo, t38_info); @@ -925,14 +925,14 @@ static const per_choice_t T_error_recovery_choice[] = { static int dissect_t38_T_error_recovery(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 258 "../../asn1/t38/t38.cnf" +#line 256 "../../asn1/t38/t38.cnf" primary_part = FALSE; offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_t38_T_error_recovery, T_error_recovery_choice, NULL); -#line 260 "../../asn1/t38/t38.cnf" +#line 258 "../../asn1/t38/t38.cnf" primary_part = TRUE; return offset; @@ -948,7 +948,7 @@ static const per_sequence_t UDPTLPacket_sequence[] = { static int dissect_t38_UDPTLPacket(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 234 "../../asn1/t38/t38.cnf" +#line 232 "../../asn1/t38/t38.cnf" /* Initialize to something else than data type */ Data_Field_field_type_value = 1; @@ -979,7 +979,7 @@ static int dissect_UDPTLPacket_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pr /*--- End of included file: packet-t38-fn.c ---*/ -#line 394 "../../asn1/t38/packet-t38-template.c" +#line 396 "../../asn1/t38/packet-t38-template.c" /* initialize the tap t38_info and the conversation */ static void @@ -1130,10 +1130,8 @@ dissect_t38_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset = dissect_UDPTLPacket_PDU(tvb, pinfo, tr, NULL); if (tvb_length_remaining(tvb,offset)>0){ - if (tr){ - proto_tree_add_text(tr, tvb, offset, tvb_reported_length_remaining(tvb, offset), + proto_tree_add_expert_format(tr, pinfo, &ei_t38_malformed, tvb, offset, tvb_reported_length_remaining(tvb, offset), "[MALFORMED PACKET or wrong preference settings]"); - } col_append_str(pinfo->cinfo, COL_INFO, " [Malformed?]"); } } @@ -1176,10 +1174,8 @@ dissect_t38_tcp_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if(tvb_length_remaining(tvb,offset)>0){ if(t38_tpkt_usage == T38_TPKT_ALWAYS){ - if(tr){ - proto_tree_add_text(tr, tvb, offset, tvb_reported_length_remaining(tvb, offset), + proto_tree_add_expert_format(tr, pinfo, &ei_t38_malformed, tvb, offset, tvb_reported_length_remaining(tvb, offset), "[MALFORMED PACKET or wrong preference settings]"); - } col_append_str(pinfo->cinfo, COL_INFO, " [Malformed?]"); break; }else { @@ -1335,7 +1331,7 @@ proto_register_t38(void) "OCTET_STRING", HFILL }}, /*--- End of included file: packet-t38-hfarr.c ---*/ -#line 673 "../../asn1/t38/packet-t38-template.c" +#line 671 "../../asn1/t38/packet-t38-template.c" { &hf_t38_setup, { "Stream setup", "t38.setup", FT_STRING, BASE_NONE, NULL, 0x0, "Stream setup, method and frame number", HFILL }}, @@ -1396,17 +1392,24 @@ proto_register_t38(void) &ett_t38_T_fec_data, /*--- End of included file: packet-t38-ettarr.c ---*/ -#line 720 "../../asn1/t38/packet-t38-template.c" +#line 718 "../../asn1/t38/packet-t38-template.c" &ett_t38_setup, &ett_data_fragment, &ett_data_fragments }; + static ei_register_info ei[] = { + { &ei_t38_malformed, { "t38.malformed", PI_MALFORMED, PI_ERROR, "Malformed packet", EXPFILL }}, + }; + module_t *t38_module; + expert_module_t* expert_t38; proto_t38 = proto_register_protocol("T.38", "T.38", "t38"); proto_register_field_array(proto_t38, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_t38 = expert_register_protocol(proto_t38); + expert_register_field_array(expert_t38, ei, array_length(ei)); register_dissector("t38", dissect_t38, proto_t38); /* Init reassemble tables for HDLC */ diff --git a/epan/dissectors/packet-tcap.c b/epan/dissectors/packet-tcap.c index 60a8068cdc..d1578b240d 100644 --- a/epan/dissectors/packet-tcap.c +++ b/epan/dissectors/packet-tcap.c @@ -58,6 +58,7 @@ static int hf_tcap_tag = -1; static int hf_tcap_length = -1; static int hf_tcap_data = -1; static int hf_tcap_tid = -1; +static int hf_tcap_constructor_eoc=-1; int hf_tcapsrt_SessionId=-1; int hf_tcapsrt_Duplicate=-1; @@ -137,7 +138,7 @@ static int hf_tcap_AARQ_protocol_version_version1 = -1; static int hf_tcap_AARE_protocol_version_version1 = -1; /*--- End of included file: packet-tcap-hf.c ---*/ -#line 61 "../../asn1/tcap/packet-tcap-template.c" +#line 62 "../../asn1/tcap/packet-tcap-template.c" /* Initialize the subtree pointers */ static gint ett_tcap = -1; @@ -192,7 +193,7 @@ static gint ett_tcap_ABRT_user_information = -1; static gint ett_tcap_Associate_source_diagnostic = -1; /*--- End of included file: packet-tcap-ett.c ---*/ -#line 77 "../../asn1/tcap/packet-tcap-template.c" +#line 78 "../../asn1/tcap/packet-tcap-template.c" /* When several Tcap components are received in a single TCAP message, we have to use several buffers for the stored parameters @@ -1420,7 +1421,7 @@ static void dissect_DialoguePDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, p /*--- End of included file: packet-tcap-fn.c ---*/ -#line 157 "../../asn1/tcap/packet-tcap-template.c" +#line 158 "../../asn1/tcap/packet-tcap-template.c" /* * DEBUG functions @@ -3341,7 +3342,7 @@ proto_reg_handoff_tcap(void) /*--- End of included file: packet-tcap-dis-tab.c ---*/ -#line 2070 "../../asn1/tcap/packet-tcap-template.c" +#line 2071 "../../asn1/tcap/packet-tcap-template.c" } static void init_tcap(void); @@ -3366,12 +3367,18 @@ proto_register_tcap(void) { "Data", "tcap.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } + }, { &hf_tcap_tid, { "Transaction Id", "tcap.tid", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } }, + { &hf_tcap_constructor_eoc, + { "CONSTRUCTOR EOC", "tcap.constructor_eoc", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL } + }, /* Tcap Service Response Time */ { &hf_tcapsrt_SessionId, { "Session Id", @@ -3672,7 +3679,7 @@ proto_register_tcap(void) NULL, HFILL }}, /*--- End of included file: packet-tcap-hfarr.c ---*/ -#line 2132 "../../asn1/tcap/packet-tcap-template.c" +#line 2139 "../../asn1/tcap/packet-tcap-template.c" }; /* Setup protocol subtree array */ @@ -3721,7 +3728,7 @@ proto_register_tcap(void) &ett_tcap_Associate_source_diagnostic, /*--- End of included file: packet-tcap-ettarr.c ---*/ -#line 2142 "../../asn1/tcap/packet-tcap-template.c" +#line 2149 "../../asn1/tcap/packet-tcap-template.c" }; /*static enum_val_t tcap_options[] = { @@ -3870,7 +3877,7 @@ dissect_tcap_param(asn1_ctx_t *actx, proto_tree *tree, tvbuff_t *tvb, int offset } if (ind_field) - proto_tree_add_text(subtree, tvb, offset+len-2, 2, "CONSTRUCTOR EOC"); + proto_tree_add_item(subtree, hf_tcap_constructor_eoc, tvb, offset+len-2, 2, ENC_BIG_ENDIAN); offset += len; } -- cgit v1.2.3