diff options
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/Makefile.common | 16 | ||||
-rw-r--r-- | epan/dissectors/packet-pres.c | 455 | ||||
-rw-r--r-- | epan/dissectors/packet-ros.c | 948 | ||||
-rw-r--r-- | epan/dissectors/packet-ros.h | 68 | ||||
-rw-r--r-- | epan/dissectors/packet-rtse.c | 989 | ||||
-rw-r--r-- | epan/dissectors/packet-rtse.h | 49 | ||||
-rw-r--r-- | epan/dissectors/packet-s4406.c | 948 | ||||
-rw-r--r-- | epan/dissectors/packet-s4406.h | 38 | ||||
-rw-r--r-- | epan/dissectors/packet-ses.h | 1 | ||||
-rw-r--r-- | epan/dissectors/packet-x411.c | 8441 | ||||
-rw-r--r-- | epan/dissectors/packet-x411.h | 52 | ||||
-rw-r--r-- | epan/dissectors/packet-x420.c | 2600 | ||||
-rw-r--r-- | epan/dissectors/packet-x420.h | 44 |
13 files changed, 14223 insertions, 426 deletions
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common index eff37f9144..7b73ce78e2 100644 --- a/epan/dissectors/Makefile.common +++ b/epan/dissectors/Makefile.common @@ -493,6 +493,7 @@ DISSECTOR_SRC = \ packet-rmt-fec.c \ packet-rmt-lct.c \ packet-rmt-norm.c \ + packet-ros.c \ packet-rpc.c \ packet-rpl.c \ packet-rquota.c \ @@ -503,10 +504,12 @@ DISSECTOR_SRC = \ packet-rtcp.c \ packet-rtp-events.c \ packet-rtp.c \ - packet-rtps.c \ + packet-rtps.c \ + packet-rtse.c \ packet-rtsp.c \ packet-rwall.c \ - packet-rx.c \ + packet-rx.c \ + packet-s4406.c \ packet-sadmind.c \ packet-sap.c \ packet-sccp.c \ @@ -601,6 +604,8 @@ DISSECTOR_SRC = \ packet-x11.c \ packet-x25.c \ packet-x29.c \ + packet-x411.c \ + packet-x420.c \ packet-x509af.c \ packet-x509ce.c \ packet-x509if.c \ @@ -801,6 +806,7 @@ DISSECTOR_INCLUDES = \ packet-rmt-fec.h \ packet-rmt-lct.h \ packet-rmt-norm.h \ + packet-ros.h \ packet-rpc.h \ packet-rquota.h \ packet-rsvp.h \ @@ -808,8 +814,10 @@ DISSECTOR_INCLUDES = \ packet-rtp.h \ packet-rtps.h \ packet-rtp-events.h \ + packet-rtse.h \ packet-rwall.h \ - packet-rx.h \ + packet-rx.h \ + packet-s4406.c \ packet-scsi.h \ packet-sctp.h \ packet-sdp.h \ @@ -847,6 +855,8 @@ DISSECTOR_INCLUDES = \ packet-wtp.h \ packet-x11-keysym.h \ packet-x11-keysymdef.h \ + packet-x411.h \ + packet-x420.h \ packet-x509af.h \ packet-x509ce.h \ packet-x509if.h \ diff --git a/epan/dissectors/packet-pres.c b/epan/dissectors/packet-pres.c index 9c32238720..996e44c0e7 100644 --- a/epan/dissectors/packet-pres.c +++ b/epan/dissectors/packet-pres.c @@ -46,6 +46,7 @@ #include "packet-ber.h" #include "packet-ses.h" #include "packet-pres.h" +#include "packet-rtse.h" #define PNAME "ISO 8823 OSI Presentation Protocol" @@ -78,24 +79,6 @@ static GHashTable *pres_ctx_oid_table = NULL; /*--- Included file: packet-pres-hf.c ---*/ -static int hf_pres_checkpointSize = -1; /* INTEGER */ -static int hf_pres_windowSize = -1; /* INTEGER */ -static int hf_pres_dialogueMode = -1; /* T_dialogueMode */ -static int hf_pres_connectionDataRQ = -1; /* ConnectionData */ -static int hf_pres_applicationProtocol = -1; /* INTEGER */ -static int hf_pres_connectionDataAC = -1; /* ConnectionData */ -static int hf_pres_refuseReason = -1; /* RefuseReason */ -static int hf_pres_userDataRJ = -1; /* OPEN */ -static int hf_pres_abortReason = -1; /* AbortReason */ -static int hf_pres_reflectedParameter = -1; /* BIT_STRING */ -static int hf_pres_userdataAB = -1; /* OPEN */ -static int hf_pres_open = -1; /* OPEN */ -static int hf_pres_recover = -1; /* SessionConnectionIdentifier */ -static int hf_pres_callingSSuserReference = -1; /* CallingSSuserReference */ -static int hf_pres_commonReference = -1; /* CommonReference */ -static int hf_pres_additionalReferenceInformation = -1; /* AdditionalReferenceInformation */ -static int hf_pres_t61String = -1; /* T61String */ -static int hf_pres_octetString = -1; /* OCTET_STRING */ static int hf_pres_mode_selector = -1; /* Mode_selector */ static int hf_pres_x410_mode_parameters = -1; /* RTORQapdu */ static int hf_pres_normal_mode_parameters = -1; /* T_normal_mode_parameters */ @@ -183,13 +166,6 @@ static gint ett_pres = -1; /*--- Included file: packet-pres-ett.c ---*/ -static gint ett_pres_RTORQapdu = -1; -static gint ett_pres_RTOACapdu = -1; -static gint ett_pres_RTORJapdu = -1; -static gint ett_pres_RTABapdu = -1; -static gint ett_pres_ConnectionData = -1; -static gint ett_pres_SessionConnectionIdentifier = -1; -static gint ett_pres_CallingSSuserReference = -1; static gint ett_pres_CP_type = -1; static gint ett_pres_T_normal_mode_parameters = -1; static gint ett_pres_T_extensions = -1; @@ -291,332 +267,17 @@ find_oid_by_pres_ctx_id(packet_info *pinfo _U_, guint32 idx) /*--- Fields for imported types ---*/ - - - -static int -dissect_pres_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_checkpointSize_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_pres_checkpointSize); -} -static int dissect_windowSize_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_pres_windowSize); -} -static int dissect_applicationProtocol_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_pres_applicationProtocol); -} - - -static const value_string pres_T_dialogueMode_vals[] = { - { 0, "monologue" }, - { 1, "twa" }, - { 0, NULL } -}; - - -static int -dissect_pres_T_dialogueMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_dialogueMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_T_dialogueMode(TRUE, tvb, offset, pinfo, tree, hf_pres_dialogueMode); -} - - - -static int -dissect_pres_OPEN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { -/* FIX ME*/ - - - return offset; -} -static int dissect_userDataRJ(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_OPEN(FALSE, tvb, offset, pinfo, tree, hf_pres_userDataRJ); -} -static int dissect_userdataAB(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_OPEN(FALSE, tvb, offset, pinfo, tree, hf_pres_userdataAB); -} -static int dissect_open(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_OPEN(FALSE, tvb, offset, pinfo, tree, hf_pres_open); -} - - - -static int -dissect_pres_T61String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, - pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_t61String(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_T61String(FALSE, tvb, offset, pinfo, tree, hf_pres_t61String); -} - - - -static int -dissect_pres_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_octetString(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_pres_octetString); -} -static int dissect_octet_aligned_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_pres_octet_aligned); -} - - -static const value_string pres_CallingSSuserReference_vals[] = { - { 0, "t61String" }, - { 1, "octetString" }, - { 0, NULL } -}; - -static const ber_choice_t CallingSSuserReference_choice[] = { - { 0, BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_t61String }, - { 1, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_octetString }, - { 0, 0, 0, 0, NULL } -}; - -static int -dissect_pres_CallingSSuserReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_choice(pinfo, tree, tvb, offset, - CallingSSuserReference_choice, hf_index, ett_pres_CallingSSuserReference, - NULL); - - return offset; -} -static int dissect_callingSSuserReference(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_CallingSSuserReference(FALSE, tvb, offset, pinfo, tree, hf_pres_callingSSuserReference); -} - - - -static int -dissect_pres_CommonReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime, - pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_commonReference(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_CommonReference(FALSE, tvb, offset, pinfo, tree, hf_pres_commonReference); -} - - - -static int -dissect_pres_AdditionalReferenceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, - pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_additionalReferenceInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_AdditionalReferenceInformation(TRUE, tvb, offset, pinfo, tree, hf_pres_additionalReferenceInformation); -} - - -static const ber_sequence_t SessionConnectionIdentifier_sequence[] = { - { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_callingSSuserReference }, - { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_commonReference }, - { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additionalReferenceInformation_impl }, - { 0, 0, 0, NULL } -}; - -static int -dissect_pres_SessionConnectionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, - SessionConnectionIdentifier_sequence, hf_index, ett_pres_SessionConnectionIdentifier); - - return offset; -} -static int dissect_recover_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_SessionConnectionIdentifier(TRUE, tvb, offset, pinfo, tree, hf_pres_recover); -} - - -static const value_string pres_ConnectionData_vals[] = { - { 0, "open" }, - { 1, "recover" }, - { 0, NULL } -}; - -static const ber_choice_t ConnectionData_choice[] = { - { 0, BER_CLASS_CON, 0, 0, dissect_open }, - { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_recover_impl }, - { 0, 0, 0, 0, NULL } -}; - -static int -dissect_pres_ConnectionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_choice(pinfo, tree, tvb, offset, - ConnectionData_choice, hf_index, ett_pres_ConnectionData, - NULL); - - return offset; -} -static int dissect_connectionDataRQ(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_ConnectionData(FALSE, tvb, offset, pinfo, tree, hf_pres_connectionDataRQ); -} -static int dissect_connectionDataAC(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_ConnectionData(FALSE, tvb, offset, pinfo, tree, hf_pres_connectionDataAC); -} - - -static const ber_sequence_t RTORQapdu_set[] = { - { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_checkpointSize_impl }, - { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_windowSize_impl }, - { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dialogueMode_impl }, - { BER_CLASS_CON, 3, BER_FLAGS_NOTCHKTAG, dissect_connectionDataRQ }, - { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_applicationProtocol_impl }, - { 0, 0, 0, NULL } -}; - -static int -dissect_pres_RTORQapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, - RTORQapdu_set, hf_index, ett_pres_RTORQapdu); - - return offset; -} static int dissect_x410_mode_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_RTORQapdu(TRUE, tvb, offset, pinfo, tree, hf_pres_x410_mode_parameters); -} - - -static const ber_sequence_t RTOACapdu_set[] = { - { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_checkpointSize_impl }, - { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_windowSize_impl }, - { BER_CLASS_CON, 2, BER_FLAGS_NOTCHKTAG, dissect_connectionDataAC }, - { 0, 0, 0, NULL } -}; - -static int -dissect_pres_RTOACapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, - RTOACapdu_set, hf_index, ett_pres_RTOACapdu); - - return offset; + return dissect_rtse_RTORQapdu(TRUE, tvb, offset, pinfo, tree, hf_pres_x410_mode_parameters); } static int dissect_cPR_PPDU_x400_mode_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_RTOACapdu(TRUE, tvb, offset, pinfo, tree, hf_pres_cPR_PPDU_x400_mode_parameters); -} - - -static const value_string pres_RefuseReason_vals[] = { - { 0, "rtsBusy" }, - { 1, "cannotRecover" }, - { 2, "validationFailure" }, - { 3, "unacceptableDialogueMode" }, - { 0, NULL } -}; - - -static int -dissect_pres_RefuseReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_refuseReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_RefuseReason(TRUE, tvb, offset, pinfo, tree, hf_pres_refuseReason); -} - - -static const ber_sequence_t RTORJapdu_set[] = { - { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_refuseReason_impl }, - { BER_CLASS_CON, 1, 0, dissect_userDataRJ }, - { 0, 0, 0, NULL } -}; - -static int -dissect_pres_RTORJapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, - RTORJapdu_set, hf_index, ett_pres_RTORJapdu); - - return offset; + return dissect_rtse_RTOACapdu(TRUE, tvb, offset, pinfo, tree, hf_pres_cPR_PPDU_x400_mode_parameters); } static int dissect_cPU_PPDU_x400_mode_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_RTORJapdu(FALSE, tvb, offset, pinfo, tree, hf_pres_cPU_PPDU_x400_mode_parameters); -} - - -static const value_string pres_AbortReason_vals[] = { - { 0, "localSystemProblem" }, - { 1, "invalidParameter" }, - { 2, "unrecognizedActivity" }, - { 3, "temporaryProblem" }, - { 4, "protocolError" }, - { 5, "permanentProblem" }, - { 6, "userError" }, - { 7, "transferCompleted" }, - { 0, NULL } -}; - - -static int -dissect_pres_AbortReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, - NULL); - - return offset; -} -static int dissect_abortReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_AbortReason(TRUE, tvb, offset, pinfo, tree, hf_pres_abortReason); -} - - - -static int -dissect_pres_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, - NULL, hf_index, -1, - NULL); - - return offset; -} -static int dissect_reflectedParameter_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_BIT_STRING(TRUE, tvb, offset, pinfo, tree, hf_pres_reflectedParameter); -} -static int dissect_arbitrary_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_BIT_STRING(TRUE, tvb, offset, pinfo, tree, hf_pres_arbitrary); -} - - -static const ber_sequence_t RTABapdu_set[] = { - { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_abortReason_impl }, - { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reflectedParameter_impl }, - { BER_CLASS_CON, 2, 0, dissect_userdataAB }, - { 0, 0, 0, NULL } -}; - -static int -dissect_pres_RTABapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { - offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, - RTABapdu_set, hf_index, ett_pres_RTABapdu); - - return offset; + return dissect_rtse_RTORJapdu(FALSE, tvb, offset, pinfo, tree, hf_pres_cPU_PPDU_x400_mode_parameters); } static int dissect_aRU_PPDU_x400_mode_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { - return dissect_pres_RTABapdu(FALSE, tvb, offset, pinfo, tree, hf_pres_aRU_PPDU_x400_mode_parameters); + return dissect_rtse_RTABapdu(FALSE, tvb, offset, pinfo, tree, hf_pres_aRU_PPDU_x400_mode_parameters); } @@ -969,6 +630,33 @@ static int dissect_single_ASN1_type_impl(packet_info *pinfo, proto_tree *tree, t } + +static int +dissect_pres_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_octet_aligned_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_pres_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_pres_octet_aligned); +} + + + +static int +dissect_pres_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + NULL, hf_index, -1, + NULL); + + return offset; +} +static int dissect_arbitrary_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_pres_BIT_STRING(TRUE, tvb, offset, pinfo, tree, hf_pres_arbitrary); +} + + static const value_string pres_T_presentation_data_values_vals[] = { { 0, "single-ASN1-type" }, { 1, "octet-aligned" }, @@ -1794,78 +1482,6 @@ void proto_register_pres(void) { /*--- Included file: packet-pres-hfarr.c ---*/ - { &hf_pres_checkpointSize, - { "checkpointSize", "pres.checkpointSize", - FT_INT32, BASE_DEC, NULL, 0, - "", HFILL }}, - { &hf_pres_windowSize, - { "windowSize", "pres.windowSize", - FT_INT32, BASE_DEC, NULL, 0, - "", HFILL }}, - { &hf_pres_dialogueMode, - { "dialogueMode", "pres.dialogueMode", - FT_INT32, BASE_DEC, VALS(pres_T_dialogueMode_vals), 0, - "RTORQapdu/dialogueMode", HFILL }}, - { &hf_pres_connectionDataRQ, - { "connectionDataRQ", "pres.connectionDataRQ", - FT_UINT32, BASE_DEC, VALS(pres_ConnectionData_vals), 0, - "RTORQapdu/connectionDataRQ", HFILL }}, - { &hf_pres_applicationProtocol, - { "applicationProtocol", "pres.applicationProtocol", - FT_INT32, BASE_DEC, NULL, 0, - "RTORQapdu/applicationProtocol", HFILL }}, - { &hf_pres_connectionDataAC, - { "connectionDataAC", "pres.connectionDataAC", - FT_UINT32, BASE_DEC, VALS(pres_ConnectionData_vals), 0, - "RTOACapdu/connectionDataAC", HFILL }}, - { &hf_pres_refuseReason, - { "refuseReason", "pres.refuseReason", - FT_INT32, BASE_DEC, VALS(pres_RefuseReason_vals), 0, - "RTORJapdu/refuseReason", HFILL }}, - { &hf_pres_userDataRJ, - { "userDataRJ", "pres.userDataRJ", - FT_NONE, BASE_NONE, NULL, 0, - "RTORJapdu/userDataRJ", HFILL }}, - { &hf_pres_abortReason, - { "abortReason", "pres.abortReason", - FT_INT32, BASE_DEC, VALS(pres_AbortReason_vals), 0, - "RTABapdu/abortReason", HFILL }}, - { &hf_pres_reflectedParameter, - { "reflectedParameter", "pres.reflectedParameter", - FT_BYTES, BASE_HEX, NULL, 0, - "RTABapdu/reflectedParameter", HFILL }}, - { &hf_pres_userdataAB, - { "userdataAB", "pres.userdataAB", - FT_NONE, BASE_NONE, NULL, 0, - "RTABapdu/userdataAB", HFILL }}, - { &hf_pres_open, - { "open", "pres.open", - FT_NONE, BASE_NONE, NULL, 0, - "ConnectionData/open", HFILL }}, - { &hf_pres_recover, - { "recover", "pres.recover", - FT_NONE, BASE_NONE, NULL, 0, - "ConnectionData/recover", HFILL }}, - { &hf_pres_callingSSuserReference, - { "callingSSuserReference", "pres.callingSSuserReference", - FT_UINT32, BASE_DEC, VALS(pres_CallingSSuserReference_vals), 0, - "SessionConnectionIdentifier/callingSSuserReference", HFILL }}, - { &hf_pres_commonReference, - { "commonReference", "pres.commonReference", - FT_STRING, BASE_NONE, NULL, 0, - "SessionConnectionIdentifier/commonReference", HFILL }}, - { &hf_pres_additionalReferenceInformation, - { "additionalReferenceInformation", "pres.additionalReferenceInformation", - FT_STRING, BASE_NONE, NULL, 0, - "SessionConnectionIdentifier/additionalReferenceInformation", HFILL }}, - { &hf_pres_t61String, - { "t61String", "pres.t61String", - FT_STRING, BASE_NONE, NULL, 0, - "CallingSSuserReference/t61String", HFILL }}, - { &hf_pres_octetString, - { "octetString", "pres.octetString", - FT_BYTES, BASE_HEX, NULL, 0, - "CallingSSuserReference/octetString", HFILL }}, { &hf_pres_mode_selector, { "mode-selector", "pres.mode_selector", FT_NONE, BASE_NONE, NULL, 0, @@ -2181,13 +1797,6 @@ void proto_register_pres(void) { /*--- Included file: packet-pres-ettarr.c ---*/ - &ett_pres_RTORQapdu, - &ett_pres_RTOACapdu, - &ett_pres_RTORJapdu, - &ett_pres_RTABapdu, - &ett_pres_ConnectionData, - &ett_pres_SessionConnectionIdentifier, - &ett_pres_CallingSSuserReference, &ett_pres_CP_type, &ett_pres_T_normal_mode_parameters, &ett_pres_T_extensions, diff --git a/epan/dissectors/packet-ros.c b/epan/dissectors/packet-ros.c new file mode 100644 index 0000000000..c2ac071bdb --- /dev/null +++ b/epan/dissectors/packet-ros.c @@ -0,0 +1,948 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-ros.c */ +/* ../../tools/asn2eth.py -X -b -e -p ros -c ros.cnf -s packet-ros-template ros.asn */ + +/* Input file: packet-ros-template.c */ + +/* packet-ros_asn1.c + * Routines for ROS packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/conversation.h> + +#include <stdio.h> +#include <string.h> + +#include "packet-ber.h" +#include "packet-pres.h" +#include "packet-ros.h" + +#define PNAME "X.880 OSI Remote Operations Service" +#define PSNAME "ROS" +#define PFNAME "ros" + +/* Initialize the protocol and registered fields */ +int proto_ros = -1; + +static struct SESSION_DATA_STRUCTURE* session = NULL; + +static proto_tree *top_tree=NULL; +static guint32 opcode; + + +/*--- Included file: packet-ros-hf.c ---*/ + +static int hf_ros_invoke = -1; /* Invoke */ +static int hf_ros_returnResult = -1; /* ReturnResult */ +static int hf_ros_returnError = -1; /* ReturnError */ +static int hf_ros_reject = -1; /* Reject */ +static int hf_ros_bind_invoke = -1; /* T_bind_invoke */ +static int hf_ros_bind_result = -1; /* T_bind_result */ +static int hf_ros_bind_error = -1; /* T_bind_error */ +static int hf_ros_unbind_invoke = -1; /* T_unbind_invoke */ +static int hf_ros_unbind_result = -1; /* T_unbind_result */ +static int hf_ros_unbind_error = -1; /* T_unbind_error */ +static int hf_ros_invokeId = -1; /* InvokeId */ +static int hf_ros_linkedId = -1; /* INTEGER */ +static int hf_ros_opcode = -1; /* INTEGER */ +static int hf_ros_argument = -1; /* T_argument */ +static int hf_ros_result = -1; /* T_result */ +static int hf_ros_result1 = -1; /* T_result1 */ +static int hf_ros_errcode = -1; /* INTEGER */ +static int hf_ros_parameter = -1; /* T_parameter */ +static int hf_ros_problem = -1; /* T_problem */ +static int hf_ros_general = -1; /* GeneralProblem */ +static int hf_ros_invoke1 = -1; /* InvokeProblem */ +static int hf_ros_returnResult1 = -1; /* ReturnResultProblem */ +static int hf_ros_returnError1 = -1; /* ReturnErrorProblem */ +static int hf_ros_present = -1; /* INTEGER */ +static int hf_ros_absent = -1; /* NULL */ +static int hf_ros_local = -1; /* INTEGER */ +static int hf_ros_global = -1; /* OBJECT_IDENTIFIER */ + +/*--- End of included file: packet-ros-hf.c ---*/ + + +/* Initialize the subtree pointers */ +static gint ett_ros = -1; + +/*--- Included file: packet-ros-ett.c ---*/ + +static gint ett_ros_ROS = -1; +static gint ett_ros_Invoke = -1; +static gint ett_ros_ReturnResult = -1; +static gint ett_ros_T_result = -1; +static gint ett_ros_ReturnError = -1; +static gint ett_ros_Reject = -1; +static gint ett_ros_T_problem = -1; +static gint ett_ros_InvokeId = -1; +static gint ett_ros_Code = -1; + +/*--- End of included file: packet-ros-ett.c ---*/ + + +static dissector_table_t ros_oid_dissector_table=NULL; +static GHashTable *oid_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) +{ + dissector_add_string("ros.oid", oid, dissector); + g_hash_table_insert(oid_table, (gpointer)oid, (gpointer)name); +} + +static int +call_ros_oid_callback(const char *oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) +{ + tvbuff_t *next_tvb; + + next_tvb = tvb_new_subset(tvb, offset, tvb_length_remaining(tvb, offset), tvb_reported_length_remaining(tvb, offset)); + if(!dissector_try_string(ros_oid_dissector_table, oid, next_tvb, pinfo, tree)){ + proto_item *item=NULL; + proto_tree *next_tree=NULL; + + item=proto_tree_add_text(tree, next_tvb, 0, tvb_length_remaining(tvb, offset), "RTSE: Dissector for OID:%s not implemented. Contact Ethereal developers if you want this supported", oid); + if(item){ + next_tree=proto_item_add_subtree(item, ett_ros_unknown); + } + dissect_unknown_ber(pinfo, next_tvb, offset, next_tree); + } + + /*XXX until we change the #.REGISTER signature for _PDU()s + * into new_dissector_t we have to do this kludge with + * manually step past the content in the ANY type. + */ + offset+=tvb_length_remaining(tvb, offset); + + return offset; +} + + +/*--- Included file: packet-ros-fn.c ---*/ + +/*--- Fields for imported types ---*/ + + + + +static int +dissect_ros_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_linkedId_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_ros_linkedId); +} +static int dissect_opcode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_ros_opcode); +} +static int dissect_errcode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_ros_errcode); +} +static int dissect_present(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_ros_present); +} +static int dissect_local(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_ros_local); +} + + + +static int +dissect_ros_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index); + + return offset; +} +static int dissect_absent(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_NULL(FALSE, tvb, offset, pinfo, tree, hf_ros_absent); +} + + +const value_string ros_InvokeId_vals[] = { + { 0, "present" }, + { 1, "absent" }, + { 0, NULL } +}; + +static const ber_choice_t InvokeId_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_present }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_absent }, + { 0, 0, 0, 0, NULL } +}; + +int +dissect_ros_InvokeId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + InvokeId_choice, hf_index, ett_ros_InvokeId, + NULL); + + return offset; +} +static int dissect_invokeId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_InvokeId(FALSE, tvb, offset, pinfo, tree, hf_ros_invokeId); +} + + + +static int +dissect_ros_T_argument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "invoke argument"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_INVOKE | ROS_OP_ARGUMENT); + /* now add the opcode */ + session->ros_op |= opcode; + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + return offset; +} +static int dissect_argument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_argument(FALSE, tvb, offset, pinfo, tree, hf_ros_argument); +} + + +static const ber_sequence_t Invoke_sequence[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_linkedId_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_opcode }, + { BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_argument }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ros_Invoke(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Invoke_sequence, hf_index, ett_ros_Invoke); + + return offset; +} +static int dissect_invoke_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_Invoke(TRUE, tvb, offset, pinfo, tree, hf_ros_invoke); +} + + + +static int +dissect_ros_T_result1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "return result"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_INVOKE | ROS_OP_RESULT); + /* now add the opcode */ + session->ros_op |= opcode; + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + return offset; +} +static int dissect_result1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_result1(FALSE, tvb, offset, pinfo, tree, hf_ros_result1); +} + + +static const ber_sequence_t T_result_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_opcode }, + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_result1 }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ros_T_result(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_result_sequence, hf_index, ett_ros_T_result); + + return offset; +} +static int dissect_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_result(FALSE, tvb, offset, pinfo, tree, hf_ros_result); +} + + +static const ber_sequence_t ReturnResult_sequence[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_result }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ros_ReturnResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReturnResult_sequence, hf_index, ett_ros_ReturnResult); + + return offset; +} +static int dissect_returnResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_ReturnResult(TRUE, tvb, offset, pinfo, tree, hf_ros_returnResult); +} + + + +static int +dissect_ros_T_parameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "return result"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_INVOKE | ROS_OP_ERROR); + /* now add the opcode (really the errode) */ + session->ros_op |= opcode; + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + + return offset; +} +static int dissect_parameter(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_parameter(FALSE, tvb, offset, pinfo, tree, hf_ros_parameter); +} + + +static const ber_sequence_t ReturnError_sequence[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_errcode }, + { BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_parameter }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ros_ReturnError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReturnError_sequence, hf_index, ett_ros_ReturnError); + + return offset; +} +static int dissect_returnError_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_ReturnError(TRUE, tvb, offset, pinfo, tree, hf_ros_returnError); +} + + +static const value_string ros_GeneralProblem_vals[] = { + { 0, "unrecognizedPDU" }, + { 1, "mistypedPDU" }, + { 2, "badlyStructuredPDU" }, + { 0, NULL } +}; + + +static int +dissect_ros_GeneralProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_general_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_GeneralProblem(TRUE, tvb, offset, pinfo, tree, hf_ros_general); +} + + +static const value_string ros_InvokeProblem_vals[] = { + { 0, "duplicateInvocation" }, + { 1, "unrecognizedOperation" }, + { 2, "mistypedArgument" }, + { 3, "resourceLimitation" }, + { 4, "releaseInProgress" }, + { 5, "unrecognizedLinkedId" }, + { 6, "linkedResponseUnexpected" }, + { 7, "unexpectedLinkedOperation" }, + { 0, NULL } +}; + + +static int +dissect_ros_InvokeProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_invoke1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_InvokeProblem(TRUE, tvb, offset, pinfo, tree, hf_ros_invoke1); +} + + +static const value_string ros_ReturnResultProblem_vals[] = { + { 0, "unrecognizedInvocation" }, + { 1, "resultResponseUnexpected" }, + { 2, "mistypedResult" }, + { 0, NULL } +}; + + +static int +dissect_ros_ReturnResultProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_returnResult1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_ReturnResultProblem(TRUE, tvb, offset, pinfo, tree, hf_ros_returnResult1); +} + + +static const value_string ros_ReturnErrorProblem_vals[] = { + { 0, "unrecognizedInvocation" }, + { 1, "errorResponseUnexpected" }, + { 2, "unrecognizedError" }, + { 3, "unexpectedError" }, + { 4, "mistypedParameter" }, + { 0, NULL } +}; + + +static int +dissect_ros_ReturnErrorProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_returnError1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_ReturnErrorProblem(TRUE, tvb, offset, pinfo, tree, hf_ros_returnError1); +} + + +static const value_string ros_T_problem_vals[] = { + { 0, "general" }, + { 1, "invoke" }, + { 2, "returnResult" }, + { 3, "returnError" }, + { 0, NULL } +}; + +static const ber_choice_t T_problem_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_general_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_invoke1_impl }, + { 2, BER_CLASS_CON, 2, 0, dissect_returnResult1_impl }, + { 3, BER_CLASS_CON, 3, 0, dissect_returnError1_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_ros_T_problem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_problem_choice, hf_index, ett_ros_T_problem, + NULL); + + return offset; +} +static int dissect_problem(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_problem(FALSE, tvb, offset, pinfo, tree, hf_ros_problem); +} + + +static const ber_sequence_t Reject_sequence[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_problem }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ros_Reject(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Reject_sequence, hf_index, ett_ros_Reject); + + return offset; +} +static int dissect_reject_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_Reject(TRUE, tvb, offset, pinfo, tree, hf_ros_reject); +} + + + +static int +dissect_ros_T_bind_invoke(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "bind-invoke"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_BIND | ROS_OP_ARGUMENT); + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + return offset; +} +static int dissect_bind_invoke_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_bind_invoke(TRUE, tvb, offset, pinfo, tree, hf_ros_bind_invoke); +} + + + +static int +dissect_ros_T_bind_result(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "bind-result"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_BIND | ROS_OP_RESULT); + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + return offset; +} +static int dissect_bind_result_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_bind_result(TRUE, tvb, offset, pinfo, tree, hf_ros_bind_result); +} + + + +static int +dissect_ros_T_bind_error(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "bind-error"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_BIND | ROS_OP_ERROR); + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + + return offset; +} +static int dissect_bind_error_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_bind_error(TRUE, tvb, offset, pinfo, tree, hf_ros_bind_error); +} + + + +static int +dissect_ros_T_unbind_invoke(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "unbind-invoke"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_UNBIND | ROS_OP_ARGUMENT); + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + + return offset; +} +static int dissect_unbind_invoke_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_unbind_invoke(TRUE, tvb, offset, pinfo, tree, hf_ros_unbind_invoke); +} + + + +static int +dissect_ros_T_unbind_result(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "unbind-result"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_UNBIND | ROS_OP_RESULT); + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + + return offset; +} +static int dissect_unbind_result_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_unbind_result(TRUE, tvb, offset, pinfo, tree, hf_ros_unbind_result); +} + + + +static int +dissect_ros_T_unbind_error(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + /* not sure what the length should be - -1 for now */ + proto_tree_add_text(tree, tvb, offset,-1, "unbind-error"); + + if(session && session->pres_ctx_id && (oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id))) { + /* this should be ROS! */ + session->ros_op = (ROS_OP_UNBIND | ROS_OP_ERROR); + offset = call_ros_oid_callback(oid, tvb, offset, pinfo, top_tree); + } + + return offset; +} +static int dissect_unbind_error_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_T_unbind_error(TRUE, tvb, offset, pinfo, tree, hf_ros_unbind_error); +} + + +static const value_string ros_ROS_vals[] = { + { 1, "invoke" }, + { 2, "returnResult" }, + { 3, "returnError" }, + { 4, "reject" }, + { 16, "bind-invoke" }, + { 17, "bind-result" }, + { 18, "bind-error" }, + { 19, "unbind-invoke" }, + { 20, "unbind-result" }, + { 21, "unbind-error" }, + { 0, NULL } +}; + +static const ber_choice_t ROS_choice[] = { + { 1, BER_CLASS_CON, 1, 0, dissect_invoke_impl }, + { 2, BER_CLASS_CON, 2, 0, dissect_returnResult_impl }, + { 3, BER_CLASS_CON, 3, 0, dissect_returnError_impl }, + { 4, BER_CLASS_CON, 4, 0, dissect_reject_impl }, + { 16, BER_CLASS_CON, 16, 0, dissect_bind_invoke_impl }, + { 17, BER_CLASS_CON, 17, 0, dissect_bind_result_impl }, + { 18, BER_CLASS_CON, 18, 0, dissect_bind_error_impl }, + { 19, BER_CLASS_CON, 19, 0, dissect_unbind_invoke_impl }, + { 20, BER_CLASS_CON, 20, 0, dissect_unbind_result_impl }, + { 21, BER_CLASS_CON, 21, 0, dissect_unbind_error_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_ros_ROS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ROS_choice, hf_index, ett_ros_ROS, + NULL); + + return offset; +} + + +static const value_string ros_RejectProblem_vals[] = { + { 0, "general-unrecognizedPDU" }, + { 1, "general-mistypedPDU" }, + { 2, "general-badlyStructuredPDU" }, + { 10, "invoke-duplicateInvocation" }, + { 11, "invoke-unrecognizedOperation" }, + { 12, "invoke-mistypedArgument" }, + { 13, "invoke-resourceLimitation" }, + { 14, "invoke-releaseInProgress" }, + { 15, "invoke-unrecognizedLinkedId" }, + { 16, "invoke-linkedResponseUnexpected" }, + { 17, "invoke-unexpectedLinkedOperation" }, + { 20, "returnResult-unrecognizedInvocation" }, + { 21, "returnResult-resultResponseUnexpected" }, + { 22, "returnResult-mistypedResult" }, + { 30, "returnError-unrecognizedInvocation" }, + { 31, "returnError-errorResponseUnexpected" }, + { 32, "returnError-unrecognizedError" }, + { 33, "returnError-unexpectedError" }, + { 34, "returnError-mistypedParameter" }, + { 0, NULL } +}; + + +static int +dissect_ros_RejectProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_ros_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_global(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ros_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_ros_global); +} + + +const value_string ros_Code_vals[] = { + { 0, "local" }, + { 1, "global" }, + { 0, NULL } +}; + +static const ber_choice_t Code_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_local }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_global }, + { 0, 0, 0, 0, NULL } +}; + +int +dissect_ros_Code(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + Code_choice, hf_index, ett_ros_Code, + NULL); + + return offset; +} + + + +static int +dissect_ros_Priority(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +/*--- End of included file: packet-ros-fn.c ---*/ + + + +/* +* Dissect ROS PDUs inside a PPDU. +*/ +static void +dissect_ros(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) +{ + int offset = 0; + int old_offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + + /* save parent_tree so subdissectors can create new top nodes */ + top_tree=parent_tree; + + /* do we have application context from the acse dissector? */ + if( !pinfo->private_data ){ + if(parent_tree){ + proto_tree_add_text(parent_tree, tvb, offset, -1, + "Internal error:can't get application context from ACSE dissector."); + } + return ; + } else { + session = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) ); + + } + + if(parent_tree){ + item = proto_tree_add_item(parent_tree, proto_ros, tvb, 0, -1, FALSE); + tree = proto_item_add_subtree(item, ett_ros); + } + if (check_col(pinfo->cinfo, COL_PROTOCOL)) + col_set_str(pinfo->cinfo, COL_PROTOCOL, "ROS"); + if (check_col(pinfo->cinfo, COL_INFO)) + col_clear(pinfo->cinfo, COL_INFO); + + while (tvb_reported_length_remaining(tvb, offset) > 0){ + old_offset=offset; + offset=dissect_ros_ROS(FALSE, tvb, offset, pinfo , tree, -1); + if(offset == old_offset){ + proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte ROS PDU"); + offset = tvb_length(tvb); + break; + } + } +} + + +/*--- proto_register_ros -------------------------------------------*/ +void proto_register_ros(void) { + + /* List of fields */ + static hf_register_info hf[] = + { + +/*--- Included file: packet-ros-hfarr.c ---*/ + + { &hf_ros_invoke, + { "invoke", "ros.invoke", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/invoke", HFILL }}, + { &hf_ros_returnResult, + { "returnResult", "ros.returnResult", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/returnResult", HFILL }}, + { &hf_ros_returnError, + { "returnError", "ros.returnError", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/returnError", HFILL }}, + { &hf_ros_reject, + { "reject", "ros.reject", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/reject", HFILL }}, + { &hf_ros_bind_invoke, + { "bind-invoke", "ros.bind_invoke", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/bind-invoke", HFILL }}, + { &hf_ros_bind_result, + { "bind-result", "ros.bind_result", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/bind-result", HFILL }}, + { &hf_ros_bind_error, + { "bind-error", "ros.bind_error", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/bind-error", HFILL }}, + { &hf_ros_unbind_invoke, + { "unbind-invoke", "ros.unbind_invoke", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/unbind-invoke", HFILL }}, + { &hf_ros_unbind_result, + { "unbind-result", "ros.unbind_result", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/unbind-result", HFILL }}, + { &hf_ros_unbind_error, + { "unbind-error", "ros.unbind_error", + FT_NONE, BASE_NONE, NULL, 0, + "ROS/unbind-error", HFILL }}, + { &hf_ros_invokeId, + { "invokeId", "ros.invokeId", + FT_UINT32, BASE_DEC, VALS(ros_InvokeId_vals), 0, + "", HFILL }}, + { &hf_ros_linkedId, + { "linkedId", "ros.linkedId", + FT_INT32, BASE_DEC, NULL, 0, + "Invoke/linkedId", HFILL }}, + { &hf_ros_opcode, + { "opcode", "ros.opcode", + FT_INT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_ros_argument, + { "argument", "ros.argument", + FT_NONE, BASE_NONE, NULL, 0, + "Invoke/argument", HFILL }}, + { &hf_ros_result, + { "result", "ros.result", + FT_NONE, BASE_NONE, NULL, 0, + "ReturnResult/result", HFILL }}, + { &hf_ros_result1, + { "result", "ros.result", + FT_NONE, BASE_NONE, NULL, 0, + "ReturnResult/result/result", HFILL }}, + { &hf_ros_errcode, + { "errcode", "ros.errcode", + FT_INT32, BASE_DEC, NULL, 0, + "ReturnError/errcode", HFILL }}, + { &hf_ros_parameter, + { "parameter", "ros.parameter", + FT_NONE, BASE_NONE, NULL, 0, + "ReturnError/parameter", HFILL }}, + { &hf_ros_problem, + { "problem", "ros.problem", + FT_UINT32, BASE_DEC, VALS(ros_T_problem_vals), 0, + "Reject/problem", HFILL }}, + { &hf_ros_general, + { "general", "ros.general", + FT_INT32, BASE_DEC, VALS(ros_GeneralProblem_vals), 0, + "Reject/problem/general", HFILL }}, + { &hf_ros_invoke1, + { "invoke", "ros.invoke", + FT_INT32, BASE_DEC, VALS(ros_InvokeProblem_vals), 0, + "Reject/problem/invoke", HFILL }}, + { &hf_ros_returnResult1, + { "returnResult", "ros.returnResult", + FT_INT32, BASE_DEC, VALS(ros_ReturnResultProblem_vals), 0, + "Reject/problem/returnResult", HFILL }}, + { &hf_ros_returnError1, + { "returnError", "ros.returnError", + FT_INT32, BASE_DEC, VALS(ros_ReturnErrorProblem_vals), 0, + "Reject/problem/returnError", HFILL }}, + { &hf_ros_present, + { "present", "ros.present", + FT_INT32, BASE_DEC, NULL, 0, + "InvokeId/present", HFILL }}, + { &hf_ros_absent, + { "absent", "ros.absent", + FT_NONE, BASE_NONE, NULL, 0, + "InvokeId/absent", HFILL }}, + { &hf_ros_local, + { "local", "ros.local", + FT_INT32, BASE_DEC, NULL, 0, + "Code/local", HFILL }}, + { &hf_ros_global, + { "global", "ros.global", + FT_STRING, BASE_NONE, NULL, 0, + "Code/global", HFILL }}, + +/*--- End of included file: packet-ros-hfarr.c ---*/ + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_ros, + &ett_ros_unknown, + +/*--- Included file: packet-ros-ettarr.c ---*/ + + &ett_ros_ROS, + &ett_ros_Invoke, + &ett_ros_ReturnResult, + &ett_ros_T_result, + &ett_ros_ReturnError, + &ett_ros_Reject, + &ett_ros_T_problem, + &ett_ros_InvokeId, + &ett_ros_Code, + +/*--- End of included file: packet-ros-ettarr.c ---*/ + + }; + + /* Register protocol */ + proto_ros = proto_register_protocol(PNAME, PSNAME, PFNAME); + register_dissector("ros", dissect_ros, proto_ros); + /* Register fields and subtrees */ + proto_register_field_array(proto_ros, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + ros_oid_dissector_table = register_dissector_table("ros.oid", "ROS OID Dissectors", FT_STRING, BASE_NONE); + oid_table=g_hash_table_new(g_str_hash, g_str_equal); +} + + +/*--- proto_reg_handoff_ros --- */ +void proto_reg_handoff_ros(void) { +} diff --git a/epan/dissectors/packet-ros.h b/epan/dissectors/packet-ros.h new file mode 100644 index 0000000000..e7e44adbd1 --- /dev/null +++ b/epan/dissectors/packet-ros.h @@ -0,0 +1,68 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-ros.h */ +/* ../../tools/asn2eth.py -X -b -e -p ros -c ros.cnf -s packet-ros-template ros.asn */ + +/* Input file: packet-ros-template.h */ + +/* packet-ros.h + * Routines for ROS packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_ROS_H +#define PACKET_ROS_H + + +/*--- Included file: packet-ros-exp.h ---*/ + +extern const value_string ros_InvokeId_vals[]; +extern const value_string ros_Code_vals[]; +int dissect_ros_InvokeId(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_ros_Code(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); + +/*--- End of included file: packet-ros-exp.h ---*/ + + +# include "packet-ses.h" + +/* for use in the SESSION_DATA_STRUCTURE ros_op argument + top byte indicates ROS invocation + bottom three bytes indicate operation code */ + +# define ROS_OP_MASK 0xff000000 + +# define ROS_OP_ARGUMENT 0x10000000 +# define ROS_OP_RESULT 0x20000000 +# define ROS_OP_ERROR 0x30000000 +# define ROS_OP_REJECT 0x40000000 + +# define ROS_OP_BIND 0x01000000 +# define ROS_OP_UNBIND 0x02000000 +# define ROS_OP_INVOKE 0x03000000 + +# define ROS_OP_OPCODE_MASK (~ROS_OP_MASK) + +void register_ros_oid_dissector_handle(const char *oid, dissector_handle_t dissector, int proto _U_, const char *name); + +#endif /* PACKET_ROS_H */ diff --git a/epan/dissectors/packet-rtse.c b/epan/dissectors/packet-rtse.c new file mode 100644 index 0000000000..23f9338a5a --- /dev/null +++ b/epan/dissectors/packet-rtse.c @@ -0,0 +1,989 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-rtse.c */ +/* ../../tools/asn2eth.py -X -b -e -p rtse -c rtse.cnf -s packet-rtse-template rtse.asn */ + +/* Input file: packet-rtse-template.c */ + +/* packet-rtse_asn1.c + * Routines for RTSE packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/conversation.h> + +#include <stdio.h> +#include <string.h> + +#include "packet-ber.h" +#include "packet-pres.h" +#include "packet-acse.h" +#include "packet-ros.h" +#include "packet-rtse.h" + +#define PNAME "X.228 OSI Reliable Transfer Service" +#define PSNAME "RTSE" +#define PFNAME "rtse" + +/* Initialize the protocol and registered fields */ +int proto_rtse = -1; + +static struct SESSION_DATA_STRUCTURE* session = NULL; + +static char object_identifier_id[MAX_OID_STR_LEN]; +/* indirect_reference, used to pick up the signalling so we know what + kind of data is transferred in SES_DATA_TRANSFER_PDUs */ +static guint32 indir_ref=0; +static guint32 app_proto=0; + +static proto_tree *top_tree=NULL; + +static int dissect_rtse_EXTERNAL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_); + + + +/*--- Included file: packet-rtse-hf.c ---*/ + +static int hf_rtse_rtorq_apdu = -1; /* RTORQapdu */ +static int hf_rtse_rtoac_apdu = -1; /* RTOACapdu */ +static int hf_rtse_rtorj_apdu = -1; /* RTORJapdu */ +static int hf_rtse_rttp_apdu = -1; /* RTTPapdu */ +static int hf_rtse_rttr_apdu = -1; /* RTTRapdu */ +static int hf_rtse_rtab_apdu = -1; /* RTABapdu */ +static int hf_rtse_checkpointSize = -1; /* INTEGER */ +static int hf_rtse_windowSize = -1; /* INTEGER */ +static int hf_rtse_dialogueMode = -1; /* T_dialogueMode */ +static int hf_rtse_connectionDataRQ = -1; /* ConnectionData */ +static int hf_rtse_applicationProtocol = -1; /* T_applicationProtocol */ +static int hf_rtse_connectionDataAC = -1; /* ConnectionData */ +static int hf_rtse_refuseReason = -1; /* RefuseReason */ +static int hf_rtse_userDataRJ = -1; /* T_userDataRJ */ +static int hf_rtse_abortReason = -1; /* AbortReason */ +static int hf_rtse_reflectedParameter = -1; /* BIT_STRING */ +static int hf_rtse_userdataAB = -1; /* T_userdataAB */ +static int hf_rtse_open = -1; /* T_open */ +static int hf_rtse_recover = -1; /* SessionConnectionIdentifier */ +static int hf_rtse_callingSSuserReference = -1; /* CallingSSuserReference */ +static int hf_rtse_commonReference = -1; /* CommonReference */ +static int hf_rtse_additionalReferenceInformation = -1; /* AdditionalReferenceInformation */ +static int hf_rtse_t61String = -1; /* T61String */ +static int hf_rtse_octetString = -1; /* OCTET_STRING */ +static int hf_rtse_direct_reference = -1; /* OBJECT_IDENTIFIER */ +static int hf_rtse_indirect_reference = -1; /* T_indirect_reference */ +static int hf_rtse_data_value_descriptor = -1; /* ObjectDescriptor */ +static int hf_rtse_encoding = -1; /* T_encoding */ +static int hf_rtse_single_ASN1_type = -1; /* T_single_ASN1_type */ +static int hf_rtse_octet_aligned = -1; /* OCTET_STRING */ +static int hf_rtse_arbitrary = -1; /* BIT_STRING */ + +/*--- End of included file: packet-rtse-hf.c ---*/ + + +/* Initialize the subtree pointers */ +static gint ett_rtse = -1; + +/*--- Included file: packet-rtse-ett.c ---*/ + +static gint ett_rtse_RTSE_apdus = -1; +static gint ett_rtse_RTORQapdu = -1; +static gint ett_rtse_RTOACapdu = -1; +static gint ett_rtse_RTORJapdu = -1; +static gint ett_rtse_RTABapdu = -1; +static gint ett_rtse_ConnectionData = -1; +static gint ett_rtse_SessionConnectionIdentifier = -1; +static gint ett_rtse_CallingSSuserReference = -1; +static gint ett_rtse_EXTERNAL = -1; +static gint ett_rtse_T_encoding = -1; + +/*--- End of included file: packet-rtse-ett.c ---*/ + + + +static dissector_table_t rtse_oid_dissector_table=NULL; +static GHashTable *oid_table=NULL; +static gint ett_rtse_unknown = -1; + +void +register_rtse_oid_dissector_handle(const char *oid, dissector_handle_t dissector, int proto _U_, const char *name) +{ + dissector_add_string("rtse.oid", oid, dissector); + g_hash_table_insert(oid_table, (gpointer)oid, (gpointer)name); +} + +static int +call_rtse_oid_callback(const char *oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) +{ + tvbuff_t *next_tvb; + + next_tvb = tvb_new_subset(tvb, offset, tvb_length_remaining(tvb, offset), tvb_reported_length_remaining(tvb, offset)); + if(!dissector_try_string(rtse_oid_dissector_table, oid, next_tvb, pinfo, tree)){ + proto_item *item=NULL; + proto_tree *next_tree=NULL; + + item=proto_tree_add_text(tree, next_tvb, 0, tvb_length_remaining(tvb, offset), "RTSE: Dissector for OID:%s not implemented. Contact Ethereal developers if you want this supported", oid); + if(item){ + next_tree=proto_item_add_subtree(item, ett_rtse_unknown); + } + dissect_unknown_ber(pinfo, next_tvb, offset, next_tree); + } + + /*XXX until we change the #.REGISTER signature for _PDU()s + * into new_dissector_t we have to do this kludge with + * manually step past the content in the ANY type. + */ + offset+=tvb_length_remaining(tvb, offset); + + return offset; +} + + +/*--- Included file: packet-rtse-fn.c ---*/ + +/*--- Fields for imported types ---*/ + + + + +static int +dissect_rtse_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_checkpointSize_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_rtse_checkpointSize); +} +static int dissect_windowSize_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_rtse_windowSize); +} + + +static const value_string rtse_T_dialogueMode_vals[] = { + { 0, "monologue" }, + { 1, "twa" }, + { 0, NULL } +}; + + +static int +dissect_rtse_T_dialogueMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_dialogueMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_dialogueMode(TRUE, tvb, offset, pinfo, tree, hf_rtse_dialogueMode); +} + + + +static int +dissect_rtse_T_open(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + char *oid = NULL; + + switch(app_proto) { + case 1: /* mts-transfer-protocol-1984 */ + oid = "applicationProtocol.1"; + break; + case 12: /* mts-transfer-protocol */ + oid = "applicationProtocol.12"; + break; + default: + if(session && session->pres_ctx_id) + oid = find_oid_by_pres_ctx_id(pinfo, session->pres_ctx_id); + break; + } + + if(!oid) /* XXX: problem here is we haven't decoded the applicationProtocol yet - so we make assumptions! */ + oid = "applicationProtocol.12"; + + if(oid) { + + offset = call_rtse_oid_callback(oid, tvb, offset, pinfo, top_tree ? top_tree : tree); + } + + /* else XXX: need to flag we can't find the presentation context */ + + + return offset; +} +static int dissect_open(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_open(FALSE, tvb, offset, pinfo, tree, hf_rtse_open); +} + + + +static int +dissect_rtse_T61String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_t61String(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T61String(FALSE, tvb, offset, pinfo, tree, hf_rtse_t61String); +} + + + +static int +dissect_rtse_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_octetString(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_rtse_octetString); +} +static int dissect_octet_aligned_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_rtse_octet_aligned); +} + + +static const value_string rtse_CallingSSuserReference_vals[] = { + { 0, "t61String" }, + { 1, "octetString" }, + { 0, NULL } +}; + +static const ber_choice_t CallingSSuserReference_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_t61String }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_octetString }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_rtse_CallingSSuserReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + CallingSSuserReference_choice, hf_index, ett_rtse_CallingSSuserReference, + NULL); + + return offset; +} +static int dissect_callingSSuserReference(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_CallingSSuserReference(FALSE, tvb, offset, pinfo, tree, hf_rtse_callingSSuserReference); +} + + + +static int +dissect_rtse_CommonReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_commonReference(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_CommonReference(FALSE, tvb, offset, pinfo, tree, hf_rtse_commonReference); +} + + + +static int +dissect_rtse_AdditionalReferenceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_additionalReferenceInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_AdditionalReferenceInformation(TRUE, tvb, offset, pinfo, tree, hf_rtse_additionalReferenceInformation); +} + + +static const ber_sequence_t SessionConnectionIdentifier_sequence[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_callingSSuserReference }, + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_commonReference }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additionalReferenceInformation_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_rtse_SessionConnectionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SessionConnectionIdentifier_sequence, hf_index, ett_rtse_SessionConnectionIdentifier); + + return offset; +} +static int dissect_recover_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_SessionConnectionIdentifier(TRUE, tvb, offset, pinfo, tree, hf_rtse_recover); +} + + +static const value_string rtse_ConnectionData_vals[] = { + { 0, "open" }, + { 1, "recover" }, + { 0, NULL } +}; + +static const ber_choice_t ConnectionData_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_open }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_recover_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_rtse_ConnectionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ConnectionData_choice, hf_index, ett_rtse_ConnectionData, + NULL); + + return offset; +} +static int dissect_connectionDataRQ(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_ConnectionData(FALSE, tvb, offset, pinfo, tree, hf_rtse_connectionDataRQ); +} +static int dissect_connectionDataAC(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_ConnectionData(FALSE, tvb, offset, pinfo, tree, hf_rtse_connectionDataAC); +} + + +static const value_string rtse_T_applicationProtocol_vals[] = { + { 12, "mts-transfer-protocol" }, + { 1, "mts-transfer-protocol-1984" }, + { 0, NULL } +}; + + +static int +dissect_rtse_T_applicationProtocol(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset = dissect_ber_integer(TRUE, pinfo, tree, tvb, offset, hf_index, &app_proto); + + + return offset; +} +static int dissect_applicationProtocol_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_applicationProtocol(TRUE, tvb, offset, pinfo, tree, hf_rtse_applicationProtocol); +} + + +static const ber_sequence_t RTORQapdu_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_checkpointSize_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_windowSize_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dialogueMode_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_NOTCHKTAG, dissect_connectionDataRQ }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_applicationProtocol_impl }, + { 0, 0, 0, NULL } +}; + +int +dissect_rtse_RTORQapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + if(session = (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data)) + session->ros_op = (ROS_OP_BIND | ROS_OP_ARGUMENT); + + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RTORQapdu_set, hf_index, ett_rtse_RTORQapdu); + + + + return offset; +} +static int dissect_rtorq_apdu_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_RTORQapdu(TRUE, tvb, offset, pinfo, tree, hf_rtse_rtorq_apdu); +} + + +static const ber_sequence_t RTOACapdu_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_checkpointSize_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_windowSize_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_NOTCHKTAG, dissect_connectionDataAC }, + { 0, 0, 0, NULL } +}; + +int +dissect_rtse_RTOACapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + if(session = (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data)) + session->ros_op = (ROS_OP_BIND | ROS_OP_RESULT); + + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RTOACapdu_set, hf_index, ett_rtse_RTOACapdu); + + + + return offset; +} +static int dissect_rtoac_apdu_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_RTOACapdu(TRUE, tvb, offset, pinfo, tree, hf_rtse_rtoac_apdu); +} + + +static const value_string rtse_RefuseReason_vals[] = { + { 0, "rtsBusy" }, + { 1, "cannotRecover" }, + { 2, "validationFailure" }, + { 3, "unacceptableDialogueMode" }, + { 0, NULL } +}; + + +static int +dissect_rtse_RefuseReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_refuseReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_RefuseReason(TRUE, tvb, offset, pinfo, tree, hf_rtse_refuseReason); +} + + + +static int +dissect_rtse_T_userDataRJ(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/*XXX not implemented yet */ + + + return offset; +} +static int dissect_userDataRJ(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_userDataRJ(FALSE, tvb, offset, pinfo, tree, hf_rtse_userDataRJ); +} + + +static const ber_sequence_t RTORJapdu_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_refuseReason_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_userDataRJ }, + { 0, 0, 0, NULL } +}; + +int +dissect_rtse_RTORJapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RTORJapdu_set, hf_index, ett_rtse_RTORJapdu); + + return offset; +} +static int dissect_rtorj_apdu_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_RTORJapdu(TRUE, tvb, offset, pinfo, tree, hf_rtse_rtorj_apdu); +} + + + +static int +dissect_rtse_RTTPapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_rttp_apdu(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_RTTPapdu(FALSE, tvb, offset, pinfo, tree, hf_rtse_rttp_apdu); +} + + + +static int +dissect_rtse_RTTRapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + tvbuff_t *next_tvb = NULL; + + offset = dissect_ber_octet_string(FALSE, pinfo, tree, tvb, offset, hf_index, &next_tvb); + + if(next_tvb) { + + /* XXX: we should check is this is an EXTERNAL first */ + + /* ROS won't do this for us */ + if(session) + session->ros_op = (ROS_OP_INVOKE | ROS_OP_ARGUMENT); + + offset = dissect_rtse_EXTERNAL(FALSE, next_tvb, 0, pinfo, tree, -1); + + } + + + return offset; +} +static int dissect_rttr_apdu(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_RTTRapdu(FALSE, tvb, offset, pinfo, tree, hf_rtse_rttr_apdu); +} + + +static const value_string rtse_AbortReason_vals[] = { + { 0, "localSystemProblem" }, + { 1, "invalidParameter" }, + { 2, "unrecognizedActivity" }, + { 3, "temporaryProblem" }, + { 4, "protocolError" }, + { 5, "permanentProblem" }, + { 6, "userError" }, + { 7, "transferCompleted" }, + { 0, NULL } +}; + + +static int +dissect_rtse_AbortReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_abortReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_AbortReason(TRUE, tvb, offset, pinfo, tree, hf_rtse_abortReason); +} + + + +static int +dissect_rtse_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + NULL, hf_index, -1, + NULL); + + return offset; +} +static int dissect_reflectedParameter_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_BIT_STRING(TRUE, tvb, offset, pinfo, tree, hf_rtse_reflectedParameter); +} +static int dissect_arbitrary_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_BIT_STRING(TRUE, tvb, offset, pinfo, tree, hf_rtse_arbitrary); +} + + + +static int +dissect_rtse_T_userdataAB(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/*XXX not implemented yet */ + + + return offset; +} +static int dissect_userdataAB(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_userdataAB(FALSE, tvb, offset, pinfo, tree, hf_rtse_userdataAB); +} + + +static const ber_sequence_t RTABapdu_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_abortReason_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reflectedParameter_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_userdataAB }, + { 0, 0, 0, NULL } +}; + +int +dissect_rtse_RTABapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RTABapdu_set, hf_index, ett_rtse_RTABapdu); + + return offset; +} +static int dissect_rtab_apdu_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_RTABapdu(TRUE, tvb, offset, pinfo, tree, hf_rtse_rtab_apdu); +} + + +static const value_string rtse_RTSE_apdus_vals[] = { + { 0, "rtorq-apdu" }, + { 1, "rtoac-apdu" }, + { 2, "rtorj-apdu" }, + { 3, "rttp-apdu" }, + { 4, "rttr-apdu" }, + { 5, "rtab-apdu" }, + { 0, NULL } +}; + +static const ber_choice_t RTSE_apdus_choice[] = { + { 0, BER_CLASS_CON, 16, BER_FLAGS_IMPLTAG, dissect_rtorq_apdu_impl }, + { 1, BER_CLASS_CON, 17, BER_FLAGS_IMPLTAG, dissect_rtoac_apdu_impl }, + { 2, BER_CLASS_CON, 18, BER_FLAGS_IMPLTAG, dissect_rtorj_apdu_impl }, + { 3, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_rttp_apdu }, + { 4, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rttr_apdu }, + { 5, BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_rtab_apdu_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_rtse_RTSE_apdus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + RTSE_apdus_choice, hf_index, ett_rtse_RTSE_apdus, + NULL); + + return offset; +} + + + +static int +dissect_rtse_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_direct_reference(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_rtse_direct_reference); +} + + + +static int +dissect_rtse_T_indirect_reference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + char *oid; + + offset = dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, + hf_rtse_indirect_reference, + &indir_ref); + + /* look up the indirect reference */ + if(oid = find_oid_by_pres_ctx_id(pinfo, indir_ref)) { + strcpy(object_identifier_id, oid); + } + + + + return offset; +} +static int dissect_indirect_reference(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_indirect_reference(FALSE, tvb, offset, pinfo, tree, hf_rtse_indirect_reference); +} + + + +static int +dissect_rtse_ObjectDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_ObjectDescriptor, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_data_value_descriptor(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_ObjectDescriptor(FALSE, tvb, offset, pinfo, tree, hf_rtse_data_value_descriptor); +} + + + +static int +dissect_rtse_T_single_ASN1_type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset=call_rtse_oid_callback(object_identifier_id, tvb, offset, pinfo, top_tree); + + + + return offset; +} +static int dissect_single_ASN1_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_single_ASN1_type(FALSE, tvb, offset, pinfo, tree, hf_rtse_single_ASN1_type); +} + + +static const value_string rtse_T_encoding_vals[] = { + { 0, "single-ASN1-type" }, + { 1, "octet-aligned" }, + { 2, "arbitrary" }, + { 0, NULL } +}; + +static const ber_choice_t T_encoding_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_single_ASN1_type }, + { 1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_octet_aligned_impl }, + { 2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_arbitrary_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_rtse_T_encoding(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_encoding_choice, hf_index, ett_rtse_T_encoding, + NULL); + + return offset; +} +static int dissect_encoding(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_rtse_T_encoding(FALSE, tvb, offset, pinfo, tree, hf_rtse_encoding); +} + + +static const ber_sequence_t EXTERNAL_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_direct_reference }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_indirect_reference }, + { BER_CLASS_UNI, BER_UNI_TAG_ObjectDescriptor, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_data_value_descriptor }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_encoding }, + { 0, 0, 0, NULL } +}; + +static int +dissect_rtse_EXTERNAL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + gint8 class; + gboolean pc, ind_field; + gint32 tag; + guint32 len1; + + /* XXX asn2eth can not yet handle tagged assignment so for the + * time being just remove this tag manually inside the EXTERNAL + * dissector. + */ + offset = get_ber_identifier(tvb, offset, &class, &pc, &tag); + offset = get_ber_length(tree, tvb, offset, &len1, &ind_field); + offset = dissect_ber_sequence(TRUE, pinfo, tree, tvb, offset, + EXTERNAL_sequence, hf_index, ett_rtse_EXTERNAL); + + + return offset; +} + + +/*--- End of included file: packet-rtse-fn.c ---*/ + + +/* +* Dissect RTSE PDUs inside a PPDU. +*/ +static void +dissect_rtse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) +{ + int offset = 0; + int old_offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + + /* save parent_tree so subdissectors can create new top nodes */ + top_tree=parent_tree; + + /* do we have application context from the acse dissector? */ + if( !pinfo->private_data ){ + if(parent_tree){ + proto_tree_add_text(parent_tree, tvb, offset, -1, + "Internal error:can't get application context from ACSE dissector."); + } + return ; + } else { + session = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) ); + + } + + if(parent_tree){ + item = proto_tree_add_item(parent_tree, proto_rtse, tvb, 0, -1, FALSE); + tree = proto_item_add_subtree(item, ett_rtse); + } + if (check_col(pinfo->cinfo, COL_PROTOCOL)) + col_set_str(pinfo->cinfo, COL_PROTOCOL, "RTSE"); + if (check_col(pinfo->cinfo, COL_INFO)) + col_clear(pinfo->cinfo, COL_INFO); + + while (tvb_reported_length_remaining(tvb, offset) > 0){ + old_offset=offset; + offset=dissect_rtse_RTSE_apdus(FALSE, tvb, offset, pinfo , tree, -1); + if(offset == old_offset){ + proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte RTSE PDU"); + offset = tvb_length(tvb); + break; + } + } + + top_tree = NULL; +} + + +/*--- proto_register_rtse -------------------------------------------*/ +void proto_register_rtse(void) { + + /* List of fields */ + static hf_register_info hf[] = + { + +/*--- Included file: packet-rtse-hfarr.c ---*/ + + { &hf_rtse_rtorq_apdu, + { "rtorq-apdu", "rtse.rtorq_apdu", + FT_NONE, BASE_NONE, NULL, 0, + "RTSE-apdus/rtorq-apdu", HFILL }}, + { &hf_rtse_rtoac_apdu, + { "rtoac-apdu", "rtse.rtoac_apdu", + FT_NONE, BASE_NONE, NULL, 0, + "RTSE-apdus/rtoac-apdu", HFILL }}, + { &hf_rtse_rtorj_apdu, + { "rtorj-apdu", "rtse.rtorj_apdu", + FT_NONE, BASE_NONE, NULL, 0, + "RTSE-apdus/rtorj-apdu", HFILL }}, + { &hf_rtse_rttp_apdu, + { "rttp-apdu", "rtse.rttp_apdu", + FT_INT32, BASE_DEC, NULL, 0, + "RTSE-apdus/rttp-apdu", HFILL }}, + { &hf_rtse_rttr_apdu, + { "rttr-apdu", "rtse.rttr_apdu", + FT_BYTES, BASE_HEX, NULL, 0, + "RTSE-apdus/rttr-apdu", HFILL }}, + { &hf_rtse_rtab_apdu, + { "rtab-apdu", "rtse.rtab_apdu", + FT_NONE, BASE_NONE, NULL, 0, + "RTSE-apdus/rtab-apdu", HFILL }}, + { &hf_rtse_checkpointSize, + { "checkpointSize", "rtse.checkpointSize", + FT_INT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_rtse_windowSize, + { "windowSize", "rtse.windowSize", + FT_INT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_rtse_dialogueMode, + { "dialogueMode", "rtse.dialogueMode", + FT_INT32, BASE_DEC, VALS(rtse_T_dialogueMode_vals), 0, + "RTORQapdu/dialogueMode", HFILL }}, + { &hf_rtse_connectionDataRQ, + { "connectionDataRQ", "rtse.connectionDataRQ", + FT_UINT32, BASE_DEC, VALS(rtse_ConnectionData_vals), 0, + "RTORQapdu/connectionDataRQ", HFILL }}, + { &hf_rtse_applicationProtocol, + { "applicationProtocol", "rtse.applicationProtocol", + FT_INT32, BASE_DEC, VALS(rtse_T_applicationProtocol_vals), 0, + "RTORQapdu/applicationProtocol", HFILL }}, + { &hf_rtse_connectionDataAC, + { "connectionDataAC", "rtse.connectionDataAC", + FT_UINT32, BASE_DEC, VALS(rtse_ConnectionData_vals), 0, + "RTOACapdu/connectionDataAC", HFILL }}, + { &hf_rtse_refuseReason, + { "refuseReason", "rtse.refuseReason", + FT_INT32, BASE_DEC, VALS(rtse_RefuseReason_vals), 0, + "RTORJapdu/refuseReason", HFILL }}, + { &hf_rtse_userDataRJ, + { "userDataRJ", "rtse.userDataRJ", + FT_NONE, BASE_NONE, NULL, 0, + "RTORJapdu/userDataRJ", HFILL }}, + { &hf_rtse_abortReason, + { "abortReason", "rtse.abortReason", + FT_INT32, BASE_DEC, VALS(rtse_AbortReason_vals), 0, + "RTABapdu/abortReason", HFILL }}, + { &hf_rtse_reflectedParameter, + { "reflectedParameter", "rtse.reflectedParameter", + FT_BYTES, BASE_HEX, NULL, 0, + "RTABapdu/reflectedParameter", HFILL }}, + { &hf_rtse_userdataAB, + { "userdataAB", "rtse.userdataAB", + FT_NONE, BASE_NONE, NULL, 0, + "RTABapdu/userdataAB", HFILL }}, + { &hf_rtse_open, + { "open", "rtse.open", + FT_NONE, BASE_NONE, NULL, 0, + "ConnectionData/open", HFILL }}, + { &hf_rtse_recover, + { "recover", "rtse.recover", + FT_NONE, BASE_NONE, NULL, 0, + "ConnectionData/recover", HFILL }}, + { &hf_rtse_callingSSuserReference, + { "callingSSuserReference", "rtse.callingSSuserReference", + FT_UINT32, BASE_DEC, VALS(rtse_CallingSSuserReference_vals), 0, + "SessionConnectionIdentifier/callingSSuserReference", HFILL }}, + { &hf_rtse_commonReference, + { "commonReference", "rtse.commonReference", + FT_STRING, BASE_NONE, NULL, 0, + "SessionConnectionIdentifier/commonReference", HFILL }}, + { &hf_rtse_additionalReferenceInformation, + { "additionalReferenceInformation", "rtse.additionalReferenceInformation", + FT_STRING, BASE_NONE, NULL, 0, + "SessionConnectionIdentifier/additionalReferenceInformation", HFILL }}, + { &hf_rtse_t61String, + { "t61String", "rtse.t61String", + FT_STRING, BASE_NONE, NULL, 0, + "CallingSSuserReference/t61String", HFILL }}, + { &hf_rtse_octetString, + { "octetString", "rtse.octetString", + FT_BYTES, BASE_HEX, NULL, 0, + "CallingSSuserReference/octetString", HFILL }}, + { &hf_rtse_direct_reference, + { "direct-reference", "rtse.direct_reference", + FT_STRING, BASE_NONE, NULL, 0, + "EXTERNAL/direct-reference", HFILL }}, + { &hf_rtse_indirect_reference, + { "indirect-reference", "rtse.indirect_reference", + FT_INT32, BASE_DEC, NULL, 0, + "EXTERNAL/indirect-reference", HFILL }}, + { &hf_rtse_data_value_descriptor, + { "data-value-descriptor", "rtse.data_value_descriptor", + FT_STRING, BASE_NONE, NULL, 0, + "EXTERNAL/data-value-descriptor", HFILL }}, + { &hf_rtse_encoding, + { "encoding", "rtse.encoding", + FT_UINT32, BASE_DEC, VALS(rtse_T_encoding_vals), 0, + "EXTERNAL/encoding", HFILL }}, + { &hf_rtse_single_ASN1_type, + { "single-ASN1-type", "rtse.single_ASN1_type", + FT_NONE, BASE_NONE, NULL, 0, + "EXTERNAL/encoding/single-ASN1-type", HFILL }}, + { &hf_rtse_octet_aligned, + { "octet-aligned", "rtse.octet_aligned", + FT_BYTES, BASE_HEX, NULL, 0, + "EXTERNAL/encoding/octet-aligned", HFILL }}, + { &hf_rtse_arbitrary, + { "arbitrary", "rtse.arbitrary", + FT_BYTES, BASE_HEX, NULL, 0, + "EXTERNAL/encoding/arbitrary", HFILL }}, + +/*--- End of included file: packet-rtse-hfarr.c ---*/ + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_rtse, + &ett_rtse_unknown, + +/*--- Included file: packet-rtse-ettarr.c ---*/ + + &ett_rtse_RTSE_apdus, + &ett_rtse_RTORQapdu, + &ett_rtse_RTOACapdu, + &ett_rtse_RTORJapdu, + &ett_rtse_RTABapdu, + &ett_rtse_ConnectionData, + &ett_rtse_SessionConnectionIdentifier, + &ett_rtse_CallingSSuserReference, + &ett_rtse_EXTERNAL, + &ett_rtse_T_encoding, + +/*--- End of included file: packet-rtse-ettarr.c ---*/ + + }; + + /* Register protocol */ + proto_rtse = proto_register_protocol(PNAME, PSNAME, PFNAME); + register_dissector("rtse", dissect_rtse, proto_rtse); + /* Register fields and subtrees */ + proto_register_field_array(proto_rtse, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + rtse_oid_dissector_table = register_dissector_table("rtse.oid", "RTSE OID Dissectors", FT_STRING, BASE_NONE); + oid_table=g_hash_table_new(g_str_hash, g_str_equal); + +} + + +/*--- proto_reg_handoff_rtse --- */ +void proto_reg_handoff_rtse(void) { +} diff --git a/epan/dissectors/packet-rtse.h b/epan/dissectors/packet-rtse.h new file mode 100644 index 0000000000..da644b1848 --- /dev/null +++ b/epan/dissectors/packet-rtse.h @@ -0,0 +1,49 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-rtse.h */ +/* ../../tools/asn2eth.py -X -b -e -p rtse -c rtse.cnf -s packet-rtse-template rtse.asn */ + +/* Input file: packet-rtse-template.h */ + +/* packet-rtse.h + * Routines for RTSE packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_RTSE_H +#define PACKET_RTSE_H + + +/*--- Included file: packet-rtse-exp.h ---*/ + +int dissect_rtse_RTORQapdu(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_rtse_RTOACapdu(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_rtse_RTORJapdu(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_rtse_RTABapdu(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); + +/*--- End of included file: packet-rtse-exp.h ---*/ + + +void register_rtse_oid_dissector_handle(const char *oid, dissector_handle_t dissector, int proto _U_, const char *name); + +#endif /* PACKET_RTSE_H */ diff --git a/epan/dissectors/packet-s4406.c b/epan/dissectors/packet-s4406.c new file mode 100644 index 0000000000..2b4172d093 --- /dev/null +++ b/epan/dissectors/packet-s4406.c @@ -0,0 +1,948 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-s4406.c */ +/* ../../tools/asn2eth.py -X -b -e -p s4406 -c s4406.cnf -s packet-s4406-template s4406.asn */ + +/* Input file: packet-s4406-template.c */ + +/* packet-s4406.c + * Routines for STANAG 4406 (X.400 Military Message Extensions) packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/conversation.h> + +#include <stdio.h> +#include <string.h> + +#include "packet-ber.h" + +#include "packet-x509if.h" + +#include "packet-s4406.h" +#include "packet-x411.h" +#include "packet-x420.h" + +#define PNAME "STANAG 4406 Military Message Extensions" +#define PSNAME "STANAG 4406" +#define PFNAME "MMHS" + +/* Initialize the protocol and registered fields */ +int proto_s4406 = -1; + + +/*--- Included file: packet-s4406-hf.c ---*/ + +static int hf_s4406_ExemptedAddress_PDU = -1; /* ExemptedAddress */ +static int hf_s4406_ExtendedAuthorisationInfo_PDU = -1; /* ExtendedAuthorisationInfo */ +static int hf_s4406_DistributionCodes_PDU = -1; /* DistributionCodes */ +static int hf_s4406_HandlingInstructions_PDU = -1; /* HandlingInstructions */ +static int hf_s4406_MessageInstructions_PDU = -1; /* MessageInstructions */ +static int hf_s4406_CodressMessage_PDU = -1; /* CodressMessage */ +static int hf_s4406_OriginatorReference_PDU = -1; /* OriginatorReference */ +static int hf_s4406_MMHSPrecedence_PDU = -1; /* MMHSPrecedence */ +static int hf_s4406_MessageType_PDU = -1; /* MessageType */ +static int hf_s4406_AddressListDesignator_PDU = -1; /* AddressListDesignator */ +static int hf_s4406_OtherRecipientDesignator_PDU = -1; /* OtherRecipientDesignator */ +static int hf_s4406_PilotInformation_PDU = -1; /* PilotInformation */ +static int hf_s4406_Acp127MessageIdentifier_PDU = -1; /* Acp127MessageIdentifier */ +static int hf_s4406_OriginatorPlad_PDU = -1; /* OriginatorPlad */ +static int hf_s4406_SecurityInformationLabels_PDU = -1; /* SecurityInformationLabels */ +static int hf_s4406_sics = -1; /* SEQUENCE_OF_Sic */ +static int hf_s4406_sics_item = -1; /* Sic */ +static int hf_s4406_dist_Extensions = -1; /* SEQUENCE_OF_DistributionExtensionField */ +static int hf_s4406_dist_Extensions_item = -1; /* DistributionExtensionField */ +static int hf_s4406_dist_type = -1; /* OBJECT_IDENTIFIER */ +static int hf_s4406_dist_value = -1; /* T_dist_value */ +static int hf_s4406_HandlingInstructions_item = -1; /* MilitaryString */ +static int hf_s4406_MessageInstructions_item = -1; /* MilitaryString */ +static int hf_s4406_message_type_type = -1; /* TypeMessage */ +static int hf_s4406_identifier = -1; /* MessageIdentifier */ +static int hf_s4406_address_list_type = -1; /* AddressListType */ +static int hf_s4406_listName = -1; /* ORDescriptor */ +static int hf_s4406_notificationRequest = -1; /* AddressListRequest */ +static int hf_s4406_replyRequest = -1; /* AddressListRequest */ +static int hf_s4406_other_recipient_type = -1; /* OtherRecipientType */ +static int hf_s4406_designator = -1; /* MilitaryString */ +static int hf_s4406_pilotPrecedence = -1; /* MMHSPrecedence */ +static int hf_s4406_pilotRecipient = -1; /* SEQUENCE_OF_ORDescriptor */ +static int hf_s4406_pilotRecipient_item = -1; /* ORDescriptor */ +static int hf_s4406_pilotSecurity = -1; /* SecurityLabel */ +static int hf_s4406_pilotHandling = -1; /* SEQUENCE_OF_MilitaryString */ +static int hf_s4406_pilotHandling_item = -1; /* MilitaryString */ +static int hf_s4406_content_security_label = -1; /* SecurityLabel */ +static int hf_s4406_heading_security_label = -1; /* SecurityLabel */ +static int hf_s4406_body_part_security_labels = -1; /* SEQUENCE_OF_BodyPartSecurityLabel */ +static int hf_s4406_body_part_security_labels_item = -1; /* BodyPartSecurityLabel */ +static int hf_s4406_body_part_security_label = -1; /* SecurityLabel */ +static int hf_s4406_body_part_sequence_number = -1; /* BodyPartSequenceNumber */ + +/*--- End of included file: packet-s4406-hf.c ---*/ + + +/* Initialize the subtree pointers */ +static gint ett_s4406 = -1; + +/*--- Included file: packet-s4406-ett.c ---*/ + +static gint ett_s4406_DistributionCodes = -1; +static gint ett_s4406_SEQUENCE_OF_Sic = -1; +static gint ett_s4406_SEQUENCE_OF_DistributionExtensionField = -1; +static gint ett_s4406_DistributionExtensionField = -1; +static gint ett_s4406_HandlingInstructions = -1; +static gint ett_s4406_MessageInstructions = -1; +static gint ett_s4406_MessageType = -1; +static gint ett_s4406_AddressListDesignator = -1; +static gint ett_s4406_OtherRecipientDesignator = -1; +static gint ett_s4406_PilotInformation = -1; +static gint ett_s4406_SEQUENCE_OF_ORDescriptor = -1; +static gint ett_s4406_SEQUENCE_OF_MilitaryString = -1; +static gint ett_s4406_SecurityInformationLabels = -1; +static gint ett_s4406_SEQUENCE_OF_BodyPartSecurityLabel = -1; +static gint ett_s4406_BodyPartSecurityLabel = -1; + +/*--- End of included file: packet-s4406-ett.c ---*/ + + + +/*--- Included file: packet-s4406-fn.c ---*/ + +/*--- Fields for imported types ---*/ + +static int dissect_listName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_s4406_listName); +} +static int dissect_pilotRecipient_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ORDescriptor(FALSE, tvb, offset, pinfo, tree, hf_s4406_pilotRecipient_item); +} +static int dissect_pilotSecurity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotSecurity); +} +static int dissect_content_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_content_security_label); +} +static int dissect_heading_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_heading_security_label); +} +static int dissect_body_part_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_body_part_security_label); +} + + + +static int +dissect_s4406_ExemptedAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_s4406_ExtendedAuthorisationInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_s4406_Sic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sics_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_Sic(FALSE, tvb, offset, pinfo, tree, hf_s4406_sics_item); +} + + +static const ber_sequence_t SEQUENCE_OF_Sic_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_sics_item }, +}; + +static int +dissect_s4406_SEQUENCE_OF_Sic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_Sic_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_Sic); + + return offset; +} +static int dissect_sics_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_SEQUENCE_OF_Sic(TRUE, tvb, offset, pinfo, tree, hf_s4406_sics); +} + + + +static int +dissect_s4406_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_dist_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_s4406_dist_type); +} + + + +static int +dissect_s4406_T_dist_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/* XXX: not implemented */ + return offset; +} +static int dissect_dist_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_T_dist_value(FALSE, tvb, offset, pinfo, tree, hf_s4406_dist_value); +} + + +static const ber_sequence_t DistributionExtensionField_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_dist_type }, + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_dist_value }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_DistributionExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DistributionExtensionField_sequence, hf_index, ett_s4406_DistributionExtensionField); + + return offset; +} +static int dissect_dist_Extensions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_DistributionExtensionField(FALSE, tvb, offset, pinfo, tree, hf_s4406_dist_Extensions_item); +} + + +static const ber_sequence_t SEQUENCE_OF_DistributionExtensionField_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dist_Extensions_item }, +}; + +static int +dissect_s4406_SEQUENCE_OF_DistributionExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_DistributionExtensionField_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_DistributionExtensionField); + + return offset; +} +static int dissect_dist_Extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_SEQUENCE_OF_DistributionExtensionField(TRUE, tvb, offset, pinfo, tree, hf_s4406_dist_Extensions); +} + + +static const ber_sequence_t DistributionCodes_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sics_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dist_Extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_DistributionCodes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DistributionCodes_set, hf_index, ett_s4406_DistributionCodes); + + return offset; +} + + + +static int +dissect_s4406_MilitaryString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_HandlingInstructions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_MilitaryString(FALSE, tvb, offset, pinfo, tree, hf_s4406_HandlingInstructions_item); +} +static int dissect_MessageInstructions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_MilitaryString(FALSE, tvb, offset, pinfo, tree, hf_s4406_MessageInstructions_item); +} +static int dissect_designator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_MilitaryString(TRUE, tvb, offset, pinfo, tree, hf_s4406_designator); +} +static int dissect_pilotHandling_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_MilitaryString(FALSE, tvb, offset, pinfo, tree, hf_s4406_pilotHandling_item); +} + + +static const ber_sequence_t HandlingInstructions_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_HandlingInstructions_item }, +}; + +static int +dissect_s4406_HandlingInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + HandlingInstructions_sequence_of, hf_index, ett_s4406_HandlingInstructions); + + return offset; +} + + +static const ber_sequence_t MessageInstructions_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_MessageInstructions_item }, +}; + +static int +dissect_s4406_MessageInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + MessageInstructions_sequence_of, hf_index, ett_s4406_MessageInstructions); + + return offset; +} + + + +static int +dissect_s4406_CodressMessage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_s4406_OriginatorReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string s4406_MMHSPrecedence_vals[] = { + { 0, "deferred" }, + { 1, "routine" }, + { 2, "priority" }, + { 3, "immediate" }, + { 4, "flash" }, + { 5, "override" }, + { 16, "ecp" }, + { 17, "critic" }, + { 18, "override" }, + { 0, NULL } +}; + + +static int +dissect_s4406_MMHSPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_pilotPrecedence_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_MMHSPrecedence(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotPrecedence); +} + + +static const value_string s4406_TypeMessage_vals[] = { + { 0, "exercise" }, + { 1, "operation" }, + { 2, "project" }, + { 3, "drill" }, + { 0, NULL } +}; + + +static int +dissect_s4406_TypeMessage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_message_type_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_TypeMessage(TRUE, tvb, offset, pinfo, tree, hf_s4406_message_type_type); +} + + + +static int +dissect_s4406_MessageIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_identifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_MessageIdentifier(TRUE, tvb, offset, pinfo, tree, hf_s4406_identifier); +} + + +static const ber_sequence_t MessageType_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_message_type_type_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_identifier_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_MessageType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageType_set, hf_index, ett_s4406_MessageType); + + return offset; +} + + +static const value_string s4406_AddressListType_vals[] = { + { 0, "primaryAddressList" }, + { 1, "copyAddressList" }, + { 0, NULL } +}; + + +static int +dissect_s4406_AddressListType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_address_list_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_AddressListType(TRUE, tvb, offset, pinfo, tree, hf_s4406_address_list_type); +} + + +static const value_string s4406_AddressListRequest_vals[] = { + { 0, "action" }, + { 1, "info" }, + { 2, "both" }, + { 0, NULL } +}; + + +static int +dissect_s4406_AddressListRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_notificationRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_AddressListRequest(TRUE, tvb, offset, pinfo, tree, hf_s4406_notificationRequest); +} +static int dissect_replyRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_AddressListRequest(TRUE, tvb, offset, pinfo, tree, hf_s4406_replyRequest); +} + + +static const ber_sequence_t AddressListDesignator_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_address_list_type_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_listName_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notificationRequest_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_replyRequest_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_AddressListDesignator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AddressListDesignator_set, hf_index, ett_s4406_AddressListDesignator); + + return offset; +} + + +static const value_string s4406_OtherRecipientType_vals[] = { + { 0, "primary" }, + { 1, "copy" }, + { 0, NULL } +}; + + +static int +dissect_s4406_OtherRecipientType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_other_recipient_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_OtherRecipientType(TRUE, tvb, offset, pinfo, tree, hf_s4406_other_recipient_type); +} + + +static const ber_sequence_t OtherRecipientDesignator_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_other_recipient_type_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_designator_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_OtherRecipientDesignator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OtherRecipientDesignator_set, hf_index, ett_s4406_OtherRecipientDesignator); + + return offset; +} + + +static const ber_sequence_t SEQUENCE_OF_ORDescriptor_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_pilotRecipient_item }, +}; + +static int +dissect_s4406_SEQUENCE_OF_ORDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_ORDescriptor_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_ORDescriptor); + + return offset; +} +static int dissect_pilotRecipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_SEQUENCE_OF_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotRecipient); +} + + +static const ber_sequence_t SEQUENCE_OF_MilitaryString_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_pilotHandling_item }, +}; + +static int +dissect_s4406_SEQUENCE_OF_MilitaryString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_MilitaryString_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_MilitaryString); + + return offset; +} +static int dissect_pilotHandling_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_SEQUENCE_OF_MilitaryString(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotHandling); +} + + +static const ber_sequence_t PilotInformation_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotPrecedence_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotRecipient_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotSecurity_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotHandling_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_PilotInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PilotInformation_sequence, hf_index, ett_s4406_PilotInformation); + + return offset; +} + + + +static int +dissect_s4406_Acp127MessageIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_s4406_OriginatorPlad(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_s4406_BodyPartSequenceNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_body_part_sequence_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_BodyPartSequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_s4406_body_part_sequence_number); +} + + +static const ber_sequence_t BodyPartSecurityLabel_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_body_part_security_label_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_body_part_sequence_number_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_BodyPartSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + BodyPartSecurityLabel_set, hf_index, ett_s4406_BodyPartSecurityLabel); + + return offset; +} +static int dissect_body_part_security_labels_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_BodyPartSecurityLabel(FALSE, tvb, offset, pinfo, tree, hf_s4406_body_part_security_labels_item); +} + + +static const ber_sequence_t SEQUENCE_OF_BodyPartSecurityLabel_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_body_part_security_labels_item }, +}; + +static int +dissect_s4406_SEQUENCE_OF_BodyPartSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_BodyPartSecurityLabel_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_BodyPartSecurityLabel); + + return offset; +} +static int dissect_body_part_security_labels_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_s4406_SEQUENCE_OF_BodyPartSecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_body_part_security_labels); +} + + +static const ber_sequence_t SecurityInformationLabels_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_content_security_label_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_heading_security_label_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_body_part_security_labels_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_s4406_SecurityInformationLabels(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SecurityInformationLabels_sequence, hf_index, ett_s4406_SecurityInformationLabels); + + return offset; +} + +/*--- PDUs ---*/ + +static void dissect_ExemptedAddress_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_ExemptedAddress(FALSE, tvb, 0, pinfo, tree, hf_s4406_ExemptedAddress_PDU); +} +static void dissect_ExtendedAuthorisationInfo_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_ExtendedAuthorisationInfo(FALSE, tvb, 0, pinfo, tree, hf_s4406_ExtendedAuthorisationInfo_PDU); +} +static void dissect_DistributionCodes_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_DistributionCodes(FALSE, tvb, 0, pinfo, tree, hf_s4406_DistributionCodes_PDU); +} +static void dissect_HandlingInstructions_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_HandlingInstructions(FALSE, tvb, 0, pinfo, tree, hf_s4406_HandlingInstructions_PDU); +} +static void dissect_MessageInstructions_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_MessageInstructions(FALSE, tvb, 0, pinfo, tree, hf_s4406_MessageInstructions_PDU); +} +static void dissect_CodressMessage_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_CodressMessage(FALSE, tvb, 0, pinfo, tree, hf_s4406_CodressMessage_PDU); +} +static void dissect_OriginatorReference_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_OriginatorReference(FALSE, tvb, 0, pinfo, tree, hf_s4406_OriginatorReference_PDU); +} +static void dissect_MMHSPrecedence_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_MMHSPrecedence(FALSE, tvb, 0, pinfo, tree, hf_s4406_MMHSPrecedence_PDU); +} +static void dissect_MessageType_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_MessageType(FALSE, tvb, 0, pinfo, tree, hf_s4406_MessageType_PDU); +} +static void dissect_AddressListDesignator_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_AddressListDesignator(FALSE, tvb, 0, pinfo, tree, hf_s4406_AddressListDesignator_PDU); +} +static void dissect_OtherRecipientDesignator_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_OtherRecipientDesignator(FALSE, tvb, 0, pinfo, tree, hf_s4406_OtherRecipientDesignator_PDU); +} +static void dissect_PilotInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_PilotInformation(FALSE, tvb, 0, pinfo, tree, hf_s4406_PilotInformation_PDU); +} +static void dissect_Acp127MessageIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_Acp127MessageIdentifier(FALSE, tvb, 0, pinfo, tree, hf_s4406_Acp127MessageIdentifier_PDU); +} +static void dissect_OriginatorPlad_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_OriginatorPlad(FALSE, tvb, 0, pinfo, tree, hf_s4406_OriginatorPlad_PDU); +} +static void dissect_SecurityInformationLabels_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_s4406_SecurityInformationLabels(FALSE, tvb, 0, pinfo, tree, hf_s4406_SecurityInformationLabels_PDU); +} + + +/*--- End of included file: packet-s4406-fn.c ---*/ + + + + + +/*--- proto_register_s4406 -------------------------------------------*/ +void proto_register_s4406(void) { + + /* List of fields */ + static hf_register_info hf[] = + { + +/*--- Included file: packet-s4406-hfarr.c ---*/ + + { &hf_s4406_ExemptedAddress_PDU, + { "ExemptedAddress", "s4406.ExemptedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "ExemptedAddress", HFILL }}, + { &hf_s4406_ExtendedAuthorisationInfo_PDU, + { "ExtendedAuthorisationInfo", "s4406.ExtendedAuthorisationInfo", + FT_STRING, BASE_NONE, NULL, 0, + "ExtendedAuthorisationInfo", HFILL }}, + { &hf_s4406_DistributionCodes_PDU, + { "DistributionCodes", "s4406.DistributionCodes", + FT_NONE, BASE_NONE, NULL, 0, + "DistributionCodes", HFILL }}, + { &hf_s4406_HandlingInstructions_PDU, + { "HandlingInstructions", "s4406.HandlingInstructions", + FT_UINT32, BASE_DEC, NULL, 0, + "HandlingInstructions", HFILL }}, + { &hf_s4406_MessageInstructions_PDU, + { "MessageInstructions", "s4406.MessageInstructions", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageInstructions", HFILL }}, + { &hf_s4406_CodressMessage_PDU, + { "CodressMessage", "s4406.CodressMessage", + FT_INT32, BASE_DEC, NULL, 0, + "CodressMessage", HFILL }}, + { &hf_s4406_OriginatorReference_PDU, + { "OriginatorReference", "s4406.OriginatorReference", + FT_STRING, BASE_NONE, NULL, 0, + "OriginatorReference", HFILL }}, + { &hf_s4406_MMHSPrecedence_PDU, + { "MMHSPrecedence", "s4406.MMHSPrecedence", + FT_INT32, BASE_DEC, VALS(s4406_MMHSPrecedence_vals), 0, + "MMHSPrecedence", HFILL }}, + { &hf_s4406_MessageType_PDU, + { "MessageType", "s4406.MessageType", + FT_NONE, BASE_NONE, NULL, 0, + "MessageType", HFILL }}, + { &hf_s4406_AddressListDesignator_PDU, + { "AddressListDesignator", "s4406.AddressListDesignator", + FT_NONE, BASE_NONE, NULL, 0, + "AddressListDesignator", HFILL }}, + { &hf_s4406_OtherRecipientDesignator_PDU, + { "OtherRecipientDesignator", "s4406.OtherRecipientDesignator", + FT_NONE, BASE_NONE, NULL, 0, + "OtherRecipientDesignator", HFILL }}, + { &hf_s4406_PilotInformation_PDU, + { "PilotInformation", "s4406.PilotInformation", + FT_NONE, BASE_NONE, NULL, 0, + "PilotInformation", HFILL }}, + { &hf_s4406_Acp127MessageIdentifier_PDU, + { "Acp127MessageIdentifier", "s4406.Acp127MessageIdentifier", + FT_STRING, BASE_NONE, NULL, 0, + "Acp127MessageIdentifier", HFILL }}, + { &hf_s4406_OriginatorPlad_PDU, + { "OriginatorPlad", "s4406.OriginatorPlad", + FT_STRING, BASE_NONE, NULL, 0, + "OriginatorPlad", HFILL }}, + { &hf_s4406_SecurityInformationLabels_PDU, + { "SecurityInformationLabels", "s4406.SecurityInformationLabels", + FT_NONE, BASE_NONE, NULL, 0, + "SecurityInformationLabels", HFILL }}, + { &hf_s4406_sics, + { "sics", "s4406.sics", + FT_UINT32, BASE_DEC, NULL, 0, + "DistributionCodes/sics", HFILL }}, + { &hf_s4406_sics_item, + { "Item", "s4406.sics_item", + FT_STRING, BASE_NONE, NULL, 0, + "DistributionCodes/sics/_item", HFILL }}, + { &hf_s4406_dist_Extensions, + { "dist-Extensions", "s4406.dist_Extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "DistributionCodes/dist-Extensions", HFILL }}, + { &hf_s4406_dist_Extensions_item, + { "Item", "s4406.dist_Extensions_item", + FT_NONE, BASE_NONE, NULL, 0, + "DistributionCodes/dist-Extensions/_item", HFILL }}, + { &hf_s4406_dist_type, + { "dist-type", "s4406.dist_type", + FT_STRING, BASE_NONE, NULL, 0, + "DistributionExtensionField/dist-type", HFILL }}, + { &hf_s4406_dist_value, + { "dist-value", "s4406.dist_value", + FT_NONE, BASE_NONE, NULL, 0, + "DistributionExtensionField/dist-value", HFILL }}, + { &hf_s4406_HandlingInstructions_item, + { "Item", "s4406.HandlingInstructions_item", + FT_STRING, BASE_NONE, NULL, 0, + "HandlingInstructions/_item", HFILL }}, + { &hf_s4406_MessageInstructions_item, + { "Item", "s4406.MessageInstructions_item", + FT_STRING, BASE_NONE, NULL, 0, + "MessageInstructions/_item", HFILL }}, + { &hf_s4406_message_type_type, + { "type", "s4406.type", + FT_INT32, BASE_DEC, VALS(s4406_TypeMessage_vals), 0, + "MessageType/type", HFILL }}, + { &hf_s4406_identifier, + { "identifier", "s4406.identifier", + FT_STRING, BASE_NONE, NULL, 0, + "MessageType/identifier", HFILL }}, + { &hf_s4406_address_list_type, + { "type", "s4406.type", + FT_INT32, BASE_DEC, VALS(s4406_AddressListType_vals), 0, + "AddressListDesignator/type", HFILL }}, + { &hf_s4406_listName, + { "listName", "s4406.listName", + FT_NONE, BASE_NONE, NULL, 0, + "AddressListDesignator/listName", HFILL }}, + { &hf_s4406_notificationRequest, + { "notificationRequest", "s4406.notificationRequest", + FT_INT32, BASE_DEC, VALS(s4406_AddressListRequest_vals), 0, + "AddressListDesignator/notificationRequest", HFILL }}, + { &hf_s4406_replyRequest, + { "replyRequest", "s4406.replyRequest", + FT_INT32, BASE_DEC, VALS(s4406_AddressListRequest_vals), 0, + "AddressListDesignator/replyRequest", HFILL }}, + { &hf_s4406_other_recipient_type, + { "type", "s4406.type", + FT_INT32, BASE_DEC, VALS(s4406_OtherRecipientType_vals), 0, + "OtherRecipientDesignator/type", HFILL }}, + { &hf_s4406_designator, + { "designator", "s4406.designator", + FT_STRING, BASE_NONE, NULL, 0, + "OtherRecipientDesignator/designator", HFILL }}, + { &hf_s4406_pilotPrecedence, + { "pilotPrecedence", "s4406.pilotPrecedence", + FT_INT32, BASE_DEC, VALS(s4406_MMHSPrecedence_vals), 0, + "PilotInformation/pilotPrecedence", HFILL }}, + { &hf_s4406_pilotRecipient, + { "pilotRecipient", "s4406.pilotRecipient", + FT_UINT32, BASE_DEC, NULL, 0, + "PilotInformation/pilotRecipient", HFILL }}, + { &hf_s4406_pilotRecipient_item, + { "Item", "s4406.pilotRecipient_item", + FT_NONE, BASE_NONE, NULL, 0, + "PilotInformation/pilotRecipient/_item", HFILL }}, + { &hf_s4406_pilotSecurity, + { "pilotSecurity", "s4406.pilotSecurity", + FT_NONE, BASE_NONE, NULL, 0, + "PilotInformation/pilotSecurity", HFILL }}, + { &hf_s4406_pilotHandling, + { "pilotHandling", "s4406.pilotHandling", + FT_UINT32, BASE_DEC, NULL, 0, + "PilotInformation/pilotHandling", HFILL }}, + { &hf_s4406_pilotHandling_item, + { "Item", "s4406.pilotHandling_item", + FT_STRING, BASE_NONE, NULL, 0, + "PilotInformation/pilotHandling/_item", HFILL }}, + { &hf_s4406_content_security_label, + { "content-security-label", "s4406.content_security_label", + FT_NONE, BASE_NONE, NULL, 0, + "SecurityInformationLabels/content-security-label", HFILL }}, + { &hf_s4406_heading_security_label, + { "heading-security-label", "s4406.heading_security_label", + FT_NONE, BASE_NONE, NULL, 0, + "SecurityInformationLabels/heading-security-label", HFILL }}, + { &hf_s4406_body_part_security_labels, + { "body-part-security-labels", "s4406.body_part_security_labels", + FT_UINT32, BASE_DEC, NULL, 0, + "SecurityInformationLabels/body-part-security-labels", HFILL }}, + { &hf_s4406_body_part_security_labels_item, + { "Item", "s4406.body_part_security_labels_item", + FT_NONE, BASE_NONE, NULL, 0, + "SecurityInformationLabels/body-part-security-labels/_item", HFILL }}, + { &hf_s4406_body_part_security_label, + { "body-part-security-label", "s4406.body_part_security_label", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPartSecurityLabel/body-part-security-label", HFILL }}, + { &hf_s4406_body_part_sequence_number, + { "body-part-sequence-number", "s4406.body_part_sequence_number", + FT_INT32, BASE_DEC, NULL, 0, + "BodyPartSecurityLabel/body-part-sequence-number", HFILL }}, + +/*--- End of included file: packet-s4406-hfarr.c ---*/ + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_s4406, + +/*--- Included file: packet-s4406-ettarr.c ---*/ + + &ett_s4406_DistributionCodes, + &ett_s4406_SEQUENCE_OF_Sic, + &ett_s4406_SEQUENCE_OF_DistributionExtensionField, + &ett_s4406_DistributionExtensionField, + &ett_s4406_HandlingInstructions, + &ett_s4406_MessageInstructions, + &ett_s4406_MessageType, + &ett_s4406_AddressListDesignator, + &ett_s4406_OtherRecipientDesignator, + &ett_s4406_PilotInformation, + &ett_s4406_SEQUENCE_OF_ORDescriptor, + &ett_s4406_SEQUENCE_OF_MilitaryString, + &ett_s4406_SecurityInformationLabels, + &ett_s4406_SEQUENCE_OF_BodyPartSecurityLabel, + &ett_s4406_BodyPartSecurityLabel, + +/*--- End of included file: packet-s4406-ettarr.c ---*/ + + }; + + /* Register protocol */ + proto_s4406 = proto_register_protocol(PNAME, PSNAME, PFNAME); + + /* Register fields and subtrees */ + proto_register_field_array(proto_s4406, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + +} + + +/*--- proto_reg_handoff_s4406 --- */ +void proto_reg_handoff_s4406(void) { + +/*--- Included file: packet-s4406-dis-tab.c ---*/ + + register_ber_oid_dissector("1.3.26.0.4406.0.2.0", dissect_MMHSPrecedence_PDU, proto_s4406, "primary-precedence"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.1", dissect_MMHSPrecedence_PDU, proto_s4406, "copy-precedence"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.2", dissect_MessageType_PDU, proto_s4406, "message-type"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.3", dissect_AddressListDesignator_PDU, proto_s4406, "address-list-indicator"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.4", dissect_ExemptedAddress_PDU, proto_s4406, "exempted-address"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.5", dissect_ExtendedAuthorisationInfo_PDU, proto_s4406, "extended-authorisation-info"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.6", dissect_DistributionCodes_PDU, proto_s4406, "distribution-codes"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.7", dissect_HandlingInstructions_PDU, proto_s4406, "handling-instructions"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.8", dissect_MessageInstructions_PDU, proto_s4406, "message-instructions"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.9", dissect_CodressMessage_PDU, proto_s4406, "codress-message"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.10", dissect_OriginatorReference_PDU, proto_s4406, "originator-reference"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.11", dissect_OtherRecipientDesignator_PDU, proto_s4406, "other-recipients-indicator"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.12", dissect_PilotInformation_PDU, proto_s4406, "pilot-forwarding-info"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.13", dissect_Acp127MessageIdentifier_PDU, proto_s4406, "acp127-message-identifierr"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.14", dissect_OriginatorPlad_PDU, proto_s4406, "originator-plad"); + register_ber_oid_dissector("1.3.26.0.4406.0.2.17", dissect_SecurityInformationLabels_PDU, proto_s4406, "information-labels"); + + +/*--- End of included file: packet-s4406-dis-tab.c ---*/ + + +} diff --git a/epan/dissectors/packet-s4406.h b/epan/dissectors/packet-s4406.h new file mode 100644 index 0000000000..14caf7ee91 --- /dev/null +++ b/epan/dissectors/packet-s4406.h @@ -0,0 +1,38 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-s4406.h */ +/* ../../tools/asn2eth.py -X -b -e -p s4406 -c s4406.cnf -s packet-s4406-template s4406.asn */ + +/* Input file: packet-s4406-template.h */ + +/* packet-s4406.h + * Routines for X.411 (X.400 Message Transfer) packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_S4406_H +#define PACKET_S4406_H + +/* #include "packet-s4406-exp.h" */ + +#endif /* PACKET_S4406_H */ diff --git a/epan/dissectors/packet-ses.h b/epan/dissectors/packet-ses.h index 2a801c67f3..5055c9b1a2 100644 --- a/epan/dissectors/packet-ses.h +++ b/epan/dissectors/packet-ses.h @@ -195,6 +195,7 @@ struct SESSION_DATA_STRUCTURE guint8 spdu_type; guint8 abort_type; guint8 pres_ctx_id; + guint32 ros_op; }; #define implementation_restriction 0x10 diff --git a/epan/dissectors/packet-x411.c b/epan/dissectors/packet-x411.c new file mode 100644 index 0000000000..0e4bff991f --- /dev/null +++ b/epan/dissectors/packet-x411.c @@ -0,0 +1,8441 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-x411.c */ +/* ../../tools/asn2eth.py -X -b -e -p x411 -c x411.cnf -s packet-x411-template x411.asn */ + +/* Input file: packet-x411-template.c */ + +/* packet-x411.c + * Routines for X.411 (X.400 Message Transfer) packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/conversation.h> + +#include <stdio.h> +#include <string.h> + +#include "packet-ber.h" +#include "packet-acse.h" +#include "packet-ros.h" +#include "packet-rtse.h" + +#include "packet-x509af.h" +#include "packet-x509ce.h" +#include "packet-x509if.h" +#include "packet-x509sat.h" + +#include "packet-x411.h" + +#define PNAME "X.411 OSI Message Transfer Service" +#define PSNAME "X411" +#define PFNAME "x411" + +/* Initialize the protocol and registered fields */ +int proto_x411 = -1; + +static struct SESSION_DATA_STRUCTURE* session = NULL; +static int extension_id = 0; /* integer extension id */ +static char object_identifier_id[BER_MAX_OID_STR_LEN]; /* content type identifier */ +static int +call_x411_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree); + + +/*--- Included file: packet-x411-hf.c ---*/ + +static int hf_x411_InternalTraceInformation_PDU = -1; /* InternalTraceInformation */ +static int hf_x411_TraceInformation_PDU = -1; /* TraceInformation */ +static int hf_x411_RecipientReassignmentProhibited_PDU = -1; /* RecipientReassignmentProhibited */ +static int hf_x411_MTSOriginatorRequestedAlternateRecipient_PDU = -1; /* MTSOriginatorRequestedAlternateRecipient */ +static int hf_x411_DLExpansionProhibited_PDU = -1; /* DLExpansionProhibited */ +static int hf_x411_ConversionWithLossProhibited_PDU = -1; /* ConversionWithLossProhibited */ +static int hf_x411_LatestDeliveryTime_PDU = -1; /* LatestDeliveryTime */ +static int hf_x411_RequestedDeliveryMethod_PDU = -1; /* RequestedDeliveryMethod */ +static int hf_x411_PhysicalForwardingProhibited_PDU = -1; /* PhysicalForwardingProhibited */ +static int hf_x411_PhysicalForwardingAddressRequest_PDU = -1; /* PhysicalForwardingAddressRequest */ +static int hf_x411_PhysicalDeliveryModes_PDU = -1; /* PhysicalDeliveryModes */ +static int hf_x411_RegisteredMailType_PDU = -1; /* RegisteredMailType */ +static int hf_x411_RecipientNumberForAdvice_PDU = -1; /* RecipientNumberForAdvice */ +static int hf_x411_PhysicalRenditionAttributes_PDU = -1; /* PhysicalRenditionAttributes */ +static int hf_x411_OriginatorReturnAddress_PDU = -1; /* OriginatorReturnAddress */ +static int hf_x411_PhysicalDeliveryReportRequest_PDU = -1; /* PhysicalDeliveryReportRequest */ +static int hf_x411_OriginatorCertificate_PDU = -1; /* OriginatorCertificate */ +static int hf_x411_ContentConfidentialityAlgorithmIdentifier_PDU = -1; /* ContentConfidentialityAlgorithmIdentifier */ +static int hf_x411_MessageSecurityLabel_PDU = -1; /* MessageSecurityLabel */ +static int hf_x411_ProofOfSubmissionRequest_PDU = -1; /* ProofOfSubmissionRequest */ +static int hf_x411_ProofOfDeliveryRequest_PDU = -1; /* ProofOfDeliveryRequest */ +static int hf_x411_ContentCorrelator_PDU = -1; /* ContentCorrelator */ +static int hf_x411_RedirectionHistory_PDU = -1; /* RedirectionHistory */ +static int hf_x411_DLExpansionHistory_PDU = -1; /* DLExpansionHistory */ +static int hf_x411_PhysicalForwardingAddress_PDU = -1; /* PhysicalForwardingAddress */ +static int hf_x411_OriginatorAndDLExpansionHistory_PDU = -1; /* OriginatorAndDLExpansionHistory */ +static int hf_x411_ReportingDLName_PDU = -1; /* ReportingDLName */ +static int hf_x411_ReportingMTACertificate_PDU = -1; /* ReportingMTACertificate */ +static int hf_x411_ReportingMTAName_PDU = -1; /* ReportingMTAName */ +static int hf_x411_ExtendedCertificates_PDU = -1; /* ExtendedCertificates */ +static int hf_x411_DLExemptedRecipients_PDU = -1; /* DLExemptedRecipients */ +static int hf_x411_CertificateSelectors_PDU = -1; /* CertificateSelectors */ +static int hf_x411_CommonName_PDU = -1; /* CommonName */ +static int hf_x411_TeletexCommonName_PDU = -1; /* TeletexCommonName */ +static int hf_x411_UniversalCommonName_PDU = -1; /* UniversalCommonName */ +static int hf_x411_TeletexOrganizationName_PDU = -1; /* TeletexOrganizationName */ +static int hf_x411_UniversalOrganizationName_PDU = -1; /* UniversalOrganizationName */ +static int hf_x411_TeletexPersonalName_PDU = -1; /* TeletexPersonalName */ +static int hf_x411_UniversalPersonalName_PDU = -1; /* UniversalPersonalName */ +static int hf_x411_TeletexOrganizationalUnitNames_PDU = -1; /* TeletexOrganizationalUnitNames */ +static int hf_x411_UniversalOrganizationalUnitNames_PDU = -1; /* UniversalOrganizationalUnitNames */ +static int hf_x411_PDSName_PDU = -1; /* PDSName */ +static int hf_x411_PhysicalDeliveryCountryName_PDU = -1; /* PhysicalDeliveryCountryName */ +static int hf_x411_PostalCode_PDU = -1; /* PostalCode */ +static int hf_x411_PhysicalDeliveryOfficeName_PDU = -1; /* PhysicalDeliveryOfficeName */ +static int hf_x411_unauthenticated = -1; /* NULL */ +static int hf_x411_authenticated_argument = -1; /* AuthenticatedArgument */ +static int hf_x411_authenticated_initiator_name = -1; /* MTAName */ +static int hf_x411_initiator_credentials = -1; /* InitiatorCredentials */ +static int hf_x411_security_context = -1; /* SecurityContext */ +static int hf_x411_authenticated_result = -1; /* AuthenticatedResult */ +static int hf_x411_authenticated_responder_name = -1; /* MTAName */ +static int hf_x411_responder_credentials = -1; /* ResponderCredentials */ +static int hf_x411_message = -1; /* Message */ +static int hf_x411_probe = -1; /* Probe */ +static int hf_x411_report = -1; /* Report */ +static int hf_x411_message_envelope = -1; /* MessageTransferEnvelope */ +static int hf_x411_content = -1; /* Content */ +static int hf_x411_report_envelope = -1; /* ReportTransferEnvelope */ +static int hf_x411_report_content = -1; /* ReportTransferContent */ +static int hf_x411_message_identifier = -1; /* MessageIdentifier */ +static int hf_x411_mta_originator_name = -1; /* MTAOriginatorName */ +static int hf_x411_original_encoded_information_types = -1; /* OriginalEncodedInformationTypes */ +static int hf_x411_content_type = -1; /* ContentType */ +static int hf_x411_content_identifier = -1; /* ContentIdentifier */ +static int hf_x411_priority = -1; /* Priority */ +static int hf_x411_per_message_indicators = -1; /* PerMessageIndicators */ +static int hf_x411_deferred_delivery_time = -1; /* DeferredDeliveryTime */ +static int hf_x411_per_domain_bilateral_information = -1; /* SEQUENCE_OF_PerDomainBilateralInformation */ +static int hf_x411_per_domain_bilateral_information_item = -1; /* PerDomainBilateralInformation */ +static int hf_x411_trace_information = -1; /* TraceInformation */ +static int hf_x411_extensions = -1; /* SET_OF_ExtensionField */ +static int hf_x411_extensions_item = -1; /* ExtensionField */ +static int hf_x411_per_recipient_message_fields = -1; /* SEQUENCE_OF_PerRecipientMessageTransferFields */ +static int hf_x411_per_recipient_message_fields_item = -1; /* PerRecipientMessageTransferFields */ +static int hf_x411_recipient_name = -1; /* MTARecipientName */ +static int hf_x411_originally_specified_recipient_number = -1; /* OriginallySpecifiedRecipientNumber */ +static int hf_x411_per_recipient_indicators = -1; /* PerRecipientIndicators */ +static int hf_x411_explicit_conversion = -1; /* ExplicitConversion */ +static int hf_x411_probe_identifier = -1; /* ProbeIdentifier */ +static int hf_x411_content_length = -1; /* ContentLength */ +static int hf_x411_per_recipient_probe_transfer_fields = -1; /* SEQUENCE_OF_PerRecipientProbeTransferFields */ +static int hf_x411_per_recipient_probe_transfer_fields_item = -1; /* PerRecipientProbeTransferFields */ +static int hf_x411_report_identifier = -1; /* ReportIdentifier */ +static int hf_x411_report_destination_name = -1; /* ReportDestinationName */ +static int hf_x411_subject_identifier = -1; /* SubjectIdentifier */ +static int hf_x411_subject_intermediate_trace_information = -1; /* SubjectIntermediateTraceInformation */ +static int hf_x411_returned_content = -1; /* Content */ +static int hf_x411_additional_information = -1; /* AdditionalInformation */ +static int hf_x411_per_recipient_report_fields = -1; /* SEQUENCE_OF_PerRecipientReportTransferFields */ +static int hf_x411_per_recipient_fields_item = -1; /* PerRecipientReportTransferFields */ +static int hf_x411_mta_actual_recipient_name = -1; /* MTAActualRecipientName */ +static int hf_x411_last_trace_information = -1; /* LastTraceInformation */ +static int hf_x411_report_originally_intended_recipient_name = -1; /* MTAOriginallyIntendedRecipientName */ +static int hf_x411_supplementary_information = -1; /* SupplementaryInformation */ +static int hf_x411_country_name = -1; /* CountryName */ +static int hf_x411_bilateral_domain = -1; /* T_domain */ +static int hf_x411_administration_domain_name = -1; /* AdministrationDomainName */ +static int hf_x411_private_domain = -1; /* T_private_domain */ +static int hf_x411_private_domain_identifier = -1; /* PrivateDomainIdentifier */ +static int hf_x411_arrival_time = -1; /* ArrivalTime */ +static int hf_x411_converted_encoded_information_types = -1; /* ConvertedEncodedInformationTypes */ +static int hf_x411_trace_report_type = -1; /* ReportType */ +static int hf_x411_InternalTraceInformation_item = -1; /* InternalTraceInformationElement */ +static int hf_x411_global_domain_identifier = -1; /* GlobalDomainIdentifier */ +static int hf_x411_mta_name = -1; /* MTAName */ +static int hf_x411_mta_supplied_information = -1; /* MTASuppliedInformation */ +static int hf_x411_routing_action = -1; /* RoutingAction */ +static int hf_x411_attempted = -1; /* T_attempted */ +static int hf_x411_mta = -1; /* MTAName */ +static int hf_x411_domain = -1; /* GlobalDomainIdentifier */ +static int hf_x411_deferred_time = -1; /* DeferredTime */ +static int hf_x411_other_actions = -1; /* OtherActions */ +static int hf_x411_TraceInformation_item = -1; /* TraceInformationElement */ +static int hf_x411_domain_supplied_information = -1; /* DomainSuppliedInformation */ +static int hf_x411_attempted_domain = -1; /* GlobalDomainIdentifier */ +static int hf_x411_initiator_name = -1; /* ObjectName */ +static int hf_x411_messages_waiting = -1; /* MessagesWaiting */ +static int hf_x411_responder_name = -1; /* ObjectName */ +static int hf_x411_user_agent = -1; /* ORAddressAndOptionalDirectoryName */ +static int hf_x411_mTA = -1; /* MTAName */ +static int hf_x411_message_store = -1; /* ORAddressAndOptionalDirectoryName */ +static int hf_x411_urgent = -1; /* DeliveryQueue */ +static int hf_x411_normal = -1; /* DeliveryQueue */ +static int hf_x411_non_urgent = -1; /* DeliveryQueue */ +static int hf_x411_messages = -1; /* INTEGER */ +static int hf_x411_delivery_queue_octets = -1; /* INTEGER */ +static int hf_x411_simple = -1; /* Password */ +static int hf_x411_ia5_string = -1; /* IA5String */ +static int hf_x411_octet_string = -1; /* OCTET_STRING */ +static int hf_x411_SecurityContext_item = -1; /* SecurityLabel */ +static int hf_x411_message_submission_envelope = -1; /* MessageSubmissionEnvelope */ +static int hf_x411_message_submission_identifier = -1; /* MessageSubmissionIdentifier */ +static int hf_x411_message_submission_time = -1; /* MessageSubmissionTime */ +static int hf_x411_probe_submission_identifier = -1; /* ProbeSubmissionIdentifier */ +static int hf_x411_probe_submission_time = -1; /* ProbeSubmissionTime */ +static int hf_x411_ImproperlySpecifiedRecipients_item = -1; /* MTSRecipientName */ +static int hf_x411_waiting_operations = -1; /* Operations */ +static int hf_x411_waiting_messages = -1; /* WaitingMessages */ +static int hf_x411_waiting_content_types = -1; /* SET_OF_ContentType */ +static int hf_x411_waiting_content_types_item = -1; /* ContentType */ +static int hf_x411_waiting_encoded_information_types = -1; /* EncodedInformationTypes */ +static int hf_x411_message_delivery_identifier = -1; /* MessageDeliveryIdentifier */ +static int hf_x411_message_delivery_time = -1; /* MessageDeliveryTime */ +static int hf_x411_other_fields = -1; /* OtherMessageDeliveryFields */ +static int hf_x411_recipient_certificate = -1; /* RecipientCertificate */ +static int hf_x411_subject_submission_identifier = -1; /* SubjectSubmissionIdentifier */ +static int hf_x411_per_recipient_report_delivery_fields = -1; /* SEQUENCE_OF_PerRecipientReportDeliveryFields */ +static int hf_x411_per_recipient_report_delivery_fields_item = -1; /* PerRecipientReportDeliveryFields */ +static int hf_x411_empty_result = -1; /* NULL */ +static int hf_x411_restrict = -1; /* BOOLEAN */ +static int hf_x411_permissible_operations = -1; /* Operations */ +static int hf_x411_permissible_maximum_content_length = -1; /* ContentLength */ +static int hf_x411_permissible_lowest_priority = -1; /* Priority */ +static int hf_x411_permissible_content_types = -1; /* ContentTypes */ +static int hf_x411_permissible_encoded_information_types = -1; /* PermissibleEncodedInformationTypes */ +static int hf_x411_permissible_security_context = -1; /* SecurityContext */ +static int hf_x411_refused_argument = -1; /* T_refused_argument */ +static int hf_x411_built_in_argument = -1; /* RefusedArgument */ +static int hf_x411_refused_extension = -1; /* T_refused_extension */ +static int hf_x411_refusal_reason = -1; /* RefusalReason */ +static int hf_x411_user_name = -1; /* UserName */ +static int hf_x411_user_address = -1; /* UserAddress */ +static int hf_x411_deliverable_class = -1; /* SET_OF_DeliverableClass */ +static int hf_x411_deliverable_class_item = -1; /* DeliverableClass */ +static int hf_x411_default_delivery_controls = -1; /* DefaultDeliveryControls */ +static int hf_x411_redirections = -1; /* Redirections */ +static int hf_x411_restricted_delivery = -1; /* RestrictedDelivery */ +static int hf_x411_retrieve_registrations = -1; /* RegistrationTypes */ +static int hf_x411_non_empty_result = -1; /* T_non_empty_result */ +static int hf_x411_registered_information = -1; /* RegisterArgument */ +static int hf_x411_old_credentials = -1; /* Credentials */ +static int hf_x411_new_credentials = -1; /* Credentials */ +static int hf_x411_x121 = -1; /* T_x121 */ +static int hf_x411_x121_address = -1; /* NumericString */ +static int hf_x411_tsap_id = -1; /* PrintableString */ +static int hf_x411_presentation = -1; /* PSAPAddress */ +static int hf_x411_Redirections_item = -1; /* RecipientRedirection */ +static int hf_x411_redirection_classes = -1; /* SET_OF_RedirectionClass */ +static int hf_x411_redirection_classes_item = -1; /* RedirectionClass */ +static int hf_x411_recipient_assigned_alternate_recipient = -1; /* RecipientAssignedAlternateRecipient */ +static int hf_x411_content_types = -1; /* ContentTypes */ +static int hf_x411_maximum_content_length = -1; /* ContentLength */ +static int hf_x411_encoded_information_types_constraints = -1; /* EncodedInformationTypesConstraints */ +static int hf_x411_security_labels = -1; /* SecurityContext */ +static int hf_x411_class_priority = -1; /* SET_OF_Priority */ +static int hf_x411_priority_item = -1; /* Priority */ +static int hf_x411_objects = -1; /* T_objects */ +static int hf_x411_applies_only_to = -1; /* SEQUENCE_OF_Restriction */ +static int hf_x411_applies_only_to_item = -1; /* Restriction */ +static int hf_x411_unacceptable_eits = -1; /* ExtendedEncodedInformationTypes */ +static int hf_x411_acceptable_eits = -1; /* ExtendedEncodedInformationTypes */ +static int hf_x411_exclusively_acceptable_eits = -1; /* ExtendedEncodedInformationTypes */ +static int hf_x411_RestrictedDelivery_item = -1; /* Restriction */ +static int hf_x411_permitted = -1; /* BOOLEAN */ +static int hf_x411_source_type = -1; /* T_source_type */ +static int hf_x411_source_name = -1; /* ExactOrPattern */ +static int hf_x411_exact_match = -1; /* ORName */ +static int hf_x411_pattern_match = -1; /* ORName */ +static int hf_x411_standard_parameters = -1; /* T_standard_parameters */ +static int hf_x411_type_extensions = -1; /* T_extensions */ +static int hf_x411_type_extensions_item = -1; /* T_extensions_item */ +static int hf_x411_mts_originator_name = -1; /* MTSOriginatorName */ +static int hf_x411_per_recipient_message_submission_fields = -1; /* SEQUENCE_OF_PerRecipientMessageSubmissionFields */ +static int hf_x411_per_recipient_message_submission_fields_item = -1; /* PerRecipientMessageSubmissionFields */ +static int hf_x411_submission_recipient_name = -1; /* MTSRecipientName */ +static int hf_x411_originator_report_request = -1; /* OriginatorReportRequest */ +static int hf_x411_per_recipient_probe_submission_fields = -1; /* SEQUENCE_OF_PerRecipientProbeSubmissionFields */ +static int hf_x411_per_recipient_probe_submission_fields_item = -1; /* PerRecipientProbeSubmissionFields */ +static int hf_x411_probe_recipient_name = -1; /* MTSRecipientName */ +static int hf_x411_delivered_content_type = -1; /* DeliveredContentType */ +static int hf_x411_originator_name = -1; /* DeliveredOriginatorName */ +static int hf_x411_delivery_flags = -1; /* DeliveryFlags */ +static int hf_x411_other_recipient_names = -1; /* OtherRecipientNames */ +static int hf_x411_this_recipient_name = -1; /* ThisRecipientName */ +static int hf_x411_originally_intended_recipient_name = -1; /* MTSOriginallyIntendedRecipientName */ +static int hf_x411_actual_recipient_name = -1; /* MTSActualRecipientName */ +static int hf_x411_delivery_report_type = -1; /* ReportType */ +static int hf_x411_delivery = -1; /* DeliveryReport */ +static int hf_x411_non_delivery = -1; /* NonDeliveryReport */ +static int hf_x411_type_of_MTS_user = -1; /* TypeOfMTSUser */ +static int hf_x411_non_delivery_reason_code = -1; /* NonDeliveryReasonCode */ +static int hf_x411_non_delivery_diagnostic_code = -1; /* NonDeliveryDiagnosticCode */ +static int hf_x411_ContentTypes_item = -1; /* ContentType */ +static int hf_x411_built_in = -1; /* BuiltInContentType */ +static int hf_x411_extended = -1; /* ExtendedContentType */ +static int hf_x411_OtherRecipientNames_item = -1; /* OtherRecipientName */ +static int hf_x411_standard_extension = -1; /* INTEGER */ +static int hf_x411_private_extension = -1; /* OBJECT_IDENTIFIER */ +static int hf_x411_extension_type = -1; /* ExtensionType */ +static int hf_x411_criticality = -1; /* Criticality */ +static int hf_x411_extension_value = -1; /* ExtensionValue */ +static int hf_x411_RequestedDeliveryMethod_item = -1; /* RequestedDeliveryMethod_item */ +static int hf_x411_ia5text = -1; /* IA5String */ +static int hf_x411_octets = -1; /* OCTET_STRING */ +static int hf_x411_RedirectionHistory_item = -1; /* Redirection */ +static int hf_x411_intended_recipient_name = -1; /* IntendedRecipientName */ +static int hf_x411_redirection_reason = -1; /* RedirectionReason */ +static int hf_x411_intended_recipient = -1; /* ORAddressAndOptionalDirectoryName */ +static int hf_x411_redirection_time = -1; /* Time */ +static int hf_x411_DLExpansionHistory_item = -1; /* DLExpansion */ +static int hf_x411_dl = -1; /* ORAddressAndOptionalDirectoryName */ +static int hf_x411_dl_expansion_time = -1; /* Time */ +static int hf_x411_OriginatorAndDLExpansionHistory_item = -1; /* OriginatorAndDLExpansion */ +static int hf_x411_originator_or_dl_name = -1; /* ORAddressAndOptionalDirectoryName */ +static int hf_x411_origination_or_expansion_time = -1; /* Time */ +static int hf_x411_report_type = -1; /* T_report_type */ +static int hf_x411_report_type_delivery = -1; /* PerRecipientDeliveryReportFields */ +static int hf_x411_non_delivery_report = -1; /* PerRecipientNonDeliveryReportFields */ +static int hf_x411_mta_directory_name = -1; /* Name */ +static int hf_x411_ExtendedCertificates_item = -1; /* ExtendedCertificate */ +static int hf_x411_directory_entry = -1; /* Name */ +static int hf_x411_certificate = -1; /* Certificates */ +static int hf_x411_DLExemptedRecipients_item = -1; /* ORAddressAndOrDirectoryName */ +static int hf_x411_encryption_recipient = -1; /* CertificateAssertion */ +static int hf_x411_encryption_originator = -1; /* CertificateAssertion */ +static int hf_x411_content_integrity_check = -1; /* CertificateAssertion */ +static int hf_x411_token_signature = -1; /* CertificateAssertion */ +static int hf_x411_message_origin_authentication = -1; /* CertificateAssertion */ +static int hf_x411_local_identifier = -1; /* LocalIdentifier */ +static int hf_x411_numeric = -1; /* NumericString */ +static int hf_x411_printable = -1; /* PrintableString */ +static int hf_x411_built_in_standard_attributes = -1; /* BuiltInStandardAttributes */ +static int hf_x411_built_in_domain_defined_attributes = -1; /* BuiltInDomainDefinedAttributes */ +static int hf_x411_extension_attributes = -1; /* ExtensionAttributes */ +static int hf_x411_directory_name = -1; /* Name */ +static int hf_x411_network_address = -1; /* NetworkAddress */ +static int hf_x411_terminal_identifier = -1; /* TerminalIdentifier */ +static int hf_x411_private_domain_name = -1; /* PrivateDomainName */ +static int hf_x411_organization_name = -1; /* OrganizationName */ +static int hf_x411_numeric_user_identifier = -1; /* NumericUserIdentifier */ +static int hf_x411_personal_name = -1; /* PersonalName */ +static int hf_x411_organizational_unit_names = -1; /* OrganizationalUnitNames */ +static int hf_x411_x121_dcc_code = -1; /* NumericString */ +static int hf_x411_iso_3166_alpha2_code = -1; /* PrintableString */ +static int hf_x411_printable_surname = -1; /* PrintableString */ +static int hf_x411_printable_given_name = -1; /* PrintableString */ +static int hf_x411_printable_initials = -1; /* PrintableString */ +static int hf_x411_printable_generation_qualifier = -1; /* PrintableString */ +static int hf_x411_OrganizationalUnitNames_item = -1; /* OrganizationalUnitName */ +static int hf_x411_BuiltInDomainDefinedAttributes_item = -1; /* BuiltInDomainDefinedAttribute */ +static int hf_x411_printable_type = -1; /* PrintableString */ +static int hf_x411_printable_value = -1; /* PrintableString */ +static int hf_x411_ExtensionAttributes_item = -1; /* ExtensionAttribute */ +static int hf_x411_extension_attribute_type = -1; /* INTEGER */ +static int hf_x411_extension_attribute_value = -1; /* T_extension_attribute_value */ +static int hf_x411_teletex_surname = -1; /* TeletexString */ +static int hf_x411_teletex_given_name = -1; /* TeletexString */ +static int hf_x411_teletex_initials = -1; /* TeletexString */ +static int hf_x411_teletex_generation_qualifier = -1; /* TeletexString */ +static int hf_x411_universal_surname = -1; /* UniversalOrBMPString */ +static int hf_x411_universal_given_name = -1; /* UniversalOrBMPString */ +static int hf_x411_universal_initials = -1; /* UniversalOrBMPString */ +static int hf_x411_universal_generation_qualifier = -1; /* UniversalOrBMPString */ +static int hf_x411_TeletexOrganizationalUnitNames_item = -1; /* TeletexOrganizationalUnitName */ +static int hf_x411_UniversalOrganizationalUnitNames_item = -1; /* UniversalOrganizationalUnitName */ +static int hf_x411_character_encoding = -1; /* T_character_encoding */ +static int hf_x411_two_octets = -1; /* BMPString */ +static int hf_x411_four_octets = -1; /* UniversalString */ +static int hf_x411_iso_639_language_code = -1; /* PrintableString */ +static int hf_x411_numeric_code = -1; /* NumericString */ +static int hf_x411_printable_code = -1; /* PrintableString */ +static int hf_x411_printable_address = -1; /* T_printable_address */ +static int hf_x411_printable_address_item = -1; /* PrintableString */ +static int hf_x411_teletex_string = -1; /* TeletexString */ +static int hf_x411_printable_string = -1; /* PrintableString */ +static int hf_x411_e163_4_address = -1; /* T_e163_4_address */ +static int hf_x411_number = -1; /* NumericString */ +static int hf_x411_sub_address = -1; /* NumericString */ +static int hf_x411_psap_address = -1; /* PresentationAddress */ +static int hf_x411_TeletexDomainDefinedAttributes_item = -1; /* TeletexDomainDefinedAttribute */ +static int hf_x411_type = -1; /* TeletexString */ +static int hf_x411_teletex_value = -1; /* TeletexString */ +static int hf_x411_UniversalDomainDefinedAttributes_item = -1; /* UniversalDomainDefinedAttribute */ +static int hf_x411_universal_type = -1; /* UniversalOrBMPString */ +static int hf_x411_universal_value = -1; /* UniversalOrBMPString */ +static int hf_x411_built_in_encoded_information_types = -1; /* BuiltInEncodedInformationTypes */ +static int hf_x411_g3_facsimile = -1; /* G3FacsimileNonBasicParameters */ +static int hf_x411_teletex = -1; /* TeletexNonBasicParameters */ +static int hf_x411_extended_encoded_information_types = -1; /* ExtendedEncodedInformationTypes */ +static int hf_x411_ExtendedEncodedInformationTypes_item = -1; /* ExtendedEncodedInformationType */ +static int hf_x411_graphic_character_sets = -1; /* TeletexString */ +static int hf_x411_control_character_sets = -1; /* TeletexString */ +static int hf_x411_page_formats = -1; /* OCTET_STRING */ +static int hf_x411_miscellaneous_terminal_capabilities = -1; /* TeletexString */ +static int hf_x411_private_use = -1; /* OCTET_STRING */ +static int hf_x411_security_policy_identifier = -1; /* SecurityPolicyIdentifier */ +static int hf_x411_security_classification = -1; /* SecurityClassification */ +static int hf_x411_privacy_mark = -1; /* PrivacyMark */ +static int hf_x411_security_categories = -1; /* SecurityCategories */ +static int hf_x411_SecurityCategories_item = -1; /* SecurityCategory */ +static int hf_x411_category_type = -1; /* OBJECT_IDENTIFIER */ +static int hf_x411_category_value = -1; /* CategoryValue */ +/* named bits */ +static int hf_x411_PerRecipientIndicators_responsibility = -1; +static int hf_x411_PerRecipientIndicators_originating_MTA_report = -1; +static int hf_x411_PerRecipientIndicators_originating_MTA_non_delivery_report = -1; +static int hf_x411_PerRecipientIndicators_originator_report = -1; +static int hf_x411_PerRecipientIndicators_originator_non_delivery_report = -1; +static int hf_x411_PerRecipientIndicators_reserved_5 = -1; +static int hf_x411_PerRecipientIndicators_reserved_6 = -1; +static int hf_x411_PerRecipientIndicators_reserved_7 = -1; +static int hf_x411_OtherActions_redirected = -1; +static int hf_x411_OtherActions_dl_operation = -1; +static int hf_x411_Operations_probe_submission_or_report_delivery = -1; +static int hf_x411_Operations_message_submission_or_message_delivery = -1; +static int hf_x411_WaitingMessages_long_content = -1; +static int hf_x411_WaitingMessages_low_priority = -1; +static int hf_x411_WaitingMessages_other_security_labels = -1; +static int hf_x411_T_source_type_originated_by = -1; +static int hf_x411_T_source_type_redirected_by = -1; +static int hf_x411_T_source_type_dl_expanded_by = -1; +static int hf_x411_T_standard_parameters_user_name = -1; +static int hf_x411_T_standard_parameters_user_address = -1; +static int hf_x411_T_standard_parameters_deliverable_class = -1; +static int hf_x411_T_standard_parameters_default_delivery_controls = -1; +static int hf_x411_T_standard_parameters_redirections = -1; +static int hf_x411_T_standard_parameters_restricted_delivery = -1; +static int hf_x411_PerMessageIndicators_disclosure_of_other_recipients = -1; +static int hf_x411_PerMessageIndicators_implicit_conversion_prohibited = -1; +static int hf_x411_PerMessageIndicators_alternate_recipient_allowed = -1; +static int hf_x411_PerMessageIndicators_content_return_request = -1; +static int hf_x411_PerMessageIndicators_reserved = -1; +static int hf_x411_PerMessageIndicators_bit_5 = -1; +static int hf_x411_PerMessageIndicators_bit_6 = -1; +static int hf_x411_PerMessageIndicators_service_message = -1; +static int hf_x411_OriginatorReportRequest_report = -1; +static int hf_x411_OriginatorReportRequest_non_delivery_report = -1; +static int hf_x411_DeliveryFlags_implicit_conversion_prohibited = -1; +static int hf_x411_Criticality_for_submission = -1; +static int hf_x411_Criticality_for_transfer = -1; +static int hf_x411_Criticality_for_delivery = -1; +static int hf_x411_PhysicalDeliveryModes_ordinary_mail = -1; +static int hf_x411_PhysicalDeliveryModes_special_delivery = -1; +static int hf_x411_PhysicalDeliveryModes_express_mail = -1; +static int hf_x411_PhysicalDeliveryModes_counter_collection = -1; +static int hf_x411_PhysicalDeliveryModes_counter_collection_with_telephone_advice = -1; +static int hf_x411_PhysicalDeliveryModes_counter_collection_with_telex_advice = -1; +static int hf_x411_PhysicalDeliveryModes_counter_collection_with_teletex_advice = -1; +static int hf_x411_PhysicalDeliveryModes_bureau_fax_delivery = -1; +static int hf_x411_BuiltInEncodedInformationTypes_unknown = -1; +static int hf_x411_BuiltInEncodedInformationTypes_ia5_text = -1; +static int hf_x411_BuiltInEncodedInformationTypes_g3_facsimile = -1; +static int hf_x411_BuiltInEncodedInformationTypes_g4_class_1 = -1; +static int hf_x411_BuiltInEncodedInformationTypes_teletex = -1; +static int hf_x411_BuiltInEncodedInformationTypes_videotex = -1; +static int hf_x411_BuiltInEncodedInformationTypes_voice = -1; +static int hf_x411_BuiltInEncodedInformationTypes_sfd = -1; +static int hf_x411_BuiltInEncodedInformationTypes_mixed_mode = -1; +static int hf_x411_G3FacsimileNonBasicParameters_two_dimensional = -1; +static int hf_x411_G3FacsimileNonBasicParameters_fine_resolution = -1; +static int hf_x411_G3FacsimileNonBasicParameters_unlimited_length = -1; +static int hf_x411_G3FacsimileNonBasicParameters_b4_length = -1; +static int hf_x411_G3FacsimileNonBasicParameters_a3_width = -1; +static int hf_x411_G3FacsimileNonBasicParameters_b4_width = -1; +static int hf_x411_G3FacsimileNonBasicParameters_t6_coding = -1; +static int hf_x411_G3FacsimileNonBasicParameters_uncompressed = -1; +static int hf_x411_G3FacsimileNonBasicParameters_width_middle_864_of_1728 = -1; +static int hf_x411_G3FacsimileNonBasicParameters_width_middle_1216_of_1728 = -1; +static int hf_x411_G3FacsimileNonBasicParameters_resolution_type = -1; +static int hf_x411_G3FacsimileNonBasicParameters_resolution_400x400 = -1; +static int hf_x411_G3FacsimileNonBasicParameters_resolution_300x300 = -1; +static int hf_x411_G3FacsimileNonBasicParameters_resolution_8x15 = -1; +static int hf_x411_G3FacsimileNonBasicParameters_edi = -1; +static int hf_x411_G3FacsimileNonBasicParameters_dtm = -1; +static int hf_x411_G3FacsimileNonBasicParameters_bft = -1; +static int hf_x411_G3FacsimileNonBasicParameters_mixed_mode = -1; +static int hf_x411_G3FacsimileNonBasicParameters_character_mode = -1; +static int hf_x411_G3FacsimileNonBasicParameters_twelve_bits = -1; +static int hf_x411_G3FacsimileNonBasicParameters_preferred_huffmann = -1; +static int hf_x411_G3FacsimileNonBasicParameters_full_colour = -1; +static int hf_x411_G3FacsimileNonBasicParameters_jpeg = -1; +static int hf_x411_G3FacsimileNonBasicParameters_processable_mode_26 = -1; + +/*--- End of included file: packet-x411-hf.c ---*/ + + +/* Initialize the subtree pointers */ +static gint ett_x411 = -1; + +/*--- Included file: packet-x411-ett.c ---*/ + +static gint ett_x411_MTABindArgument = -1; +static gint ett_x411_AuthenticatedArgument = -1; +static gint ett_x411_MTABindResult = -1; +static gint ett_x411_AuthenticatedResult = -1; +static gint ett_x411_MTS_APDU = -1; +static gint ett_x411_Message = -1; +static gint ett_x411_Report = -1; +static gint ett_x411_MessageTransferEnvelope = -1; +static gint ett_x411_SEQUENCE_OF_PerDomainBilateralInformation = -1; +static gint ett_x411_SET_OF_ExtensionField = -1; +static gint ett_x411_SEQUENCE_OF_PerRecipientMessageTransferFields = -1; +static gint ett_x411_PerRecipientMessageTransferFields = -1; +static gint ett_x411_ProbeTransferEnvelope = -1; +static gint ett_x411_SEQUENCE_OF_PerRecipientProbeTransferFields = -1; +static gint ett_x411_PerRecipientProbeTransferFields = -1; +static gint ett_x411_ReportTransferEnvelope = -1; +static gint ett_x411_ReportTransferContent = -1; +static gint ett_x411_SEQUENCE_OF_PerRecipientReportTransferFields = -1; +static gint ett_x411_PerRecipientReportTransferFields = -1; +static gint ett_x411_PerDomainBilateralInformation = -1; +static gint ett_x411_T_domain = -1; +static gint ett_x411_T_private_domain = -1; +static gint ett_x411_PerRecipientIndicators = -1; +static gint ett_x411_LastTraceInformation = -1; +static gint ett_x411_InternalTraceInformation = -1; +static gint ett_x411_InternalTraceInformationElement = -1; +static gint ett_x411_MTASuppliedInformation = -1; +static gint ett_x411_T_attempted = -1; +static gint ett_x411_TraceInformation = -1; +static gint ett_x411_TraceInformationElement = -1; +static gint ett_x411_DomainSuppliedInformation = -1; +static gint ett_x411_OtherActions = -1; +static gint ett_x411_MTSBindArgument = -1; +static gint ett_x411_MTSBindResult = -1; +static gint ett_x411_ObjectName = -1; +static gint ett_x411_MessagesWaiting = -1; +static gint ett_x411_DeliveryQueue = -1; +static gint ett_x411_Credentials = -1; +static gint ett_x411_Password = -1; +static gint ett_x411_SecurityContext = -1; +static gint ett_x411_MessageSubmissionArgument = -1; +static gint ett_x411_MessageSubmissionResult = -1; +static gint ett_x411_ProbeSubmissionResult = -1; +static gint ett_x411_ImproperlySpecifiedRecipients = -1; +static gint ett_x411_Waiting = -1; +static gint ett_x411_SET_OF_ContentType = -1; +static gint ett_x411_Operations = -1; +static gint ett_x411_WaitingMessages = -1; +static gint ett_x411_MessageDeliveryArgument = -1; +static gint ett_x411_MessageDeliveryResult = -1; +static gint ett_x411_ReportDeliveryArgument = -1; +static gint ett_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields = -1; +static gint ett_x411_ReportDeliveryResult = -1; +static gint ett_x411_DeliveryControlArgument = -1; +static gint ett_x411_DeliveryControlResult = -1; +static gint ett_x411_RefusedOperation = -1; +static gint ett_x411_T_refused_argument = -1; +static gint ett_x411_Controls = -1; +static gint ett_x411_RegisterArgument = -1; +static gint ett_x411_SET_OF_DeliverableClass = -1; +static gint ett_x411_RegisterResult = -1; +static gint ett_x411_T_non_empty_result = -1; +static gint ett_x411_ChangeCredentialsArgument = -1; +static gint ett_x411_UserAddress = -1; +static gint ett_x411_T_x121 = -1; +static gint ett_x411_Redirections = -1; +static gint ett_x411_RecipientRedirection = -1; +static gint ett_x411_SET_OF_RedirectionClass = -1; +static gint ett_x411_MessageClass = -1; +static gint ett_x411_SET_OF_Priority = -1; +static gint ett_x411_SEQUENCE_OF_Restriction = -1; +static gint ett_x411_EncodedInformationTypesConstraints = -1; +static gint ett_x411_RestrictedDelivery = -1; +static gint ett_x411_Restriction = -1; +static gint ett_x411_T_source_type = -1; +static gint ett_x411_ExactOrPattern = -1; +static gint ett_x411_RegistrationTypes = -1; +static gint ett_x411_T_standard_parameters = -1; +static gint ett_x411_T_extensions = -1; +static gint ett_x411_MessageSubmissionEnvelope = -1; +static gint ett_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields = -1; +static gint ett_x411_PerRecipientMessageSubmissionFields = -1; +static gint ett_x411_ProbeSubmissionEnvelope = -1; +static gint ett_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields = -1; +static gint ett_x411_PerRecipientProbeSubmissionFields = -1; +static gint ett_x411_MessageDeliveryEnvelope = -1; +static gint ett_x411_OtherMessageDeliveryFields = -1; +static gint ett_x411_ReportDeliveryEnvelope = -1; +static gint ett_x411_PerRecipientReportDeliveryFields = -1; +static gint ett_x411_ReportType = -1; +static gint ett_x411_DeliveryReport = -1; +static gint ett_x411_NonDeliveryReport = -1; +static gint ett_x411_ContentTypes = -1; +static gint ett_x411_ContentType = -1; +static gint ett_x411_DeliveredContentType = -1; +static gint ett_x411_PerMessageIndicators = -1; +static gint ett_x411_OriginatorReportRequest = -1; +static gint ett_x411_DeliveryFlags = -1; +static gint ett_x411_OtherRecipientNames = -1; +static gint ett_x411_ExtensionType = -1; +static gint ett_x411_Criticality = -1; +static gint ett_x411_ExtensionField = -1; +static gint ett_x411_RequestedDeliveryMethod = -1; +static gint ett_x411_PhysicalDeliveryModes = -1; +static gint ett_x411_ContentCorrelator = -1; +static gint ett_x411_RedirectionHistory = -1; +static gint ett_x411_Redirection = -1; +static gint ett_x411_IntendedRecipientName = -1; +static gint ett_x411_DLExpansionHistory = -1; +static gint ett_x411_DLExpansion = -1; +static gint ett_x411_OriginatorAndDLExpansionHistory = -1; +static gint ett_x411_OriginatorAndDLExpansion = -1; +static gint ett_x411_PerRecipientReportFields = -1; +static gint ett_x411_T_report_type = -1; +static gint ett_x411_PerRecipientDeliveryReportFields = -1; +static gint ett_x411_PerRecipientNonDeliveryReportFields = -1; +static gint ett_x411_ReportingMTAName = -1; +static gint ett_x411_ExtendedCertificates = -1; +static gint ett_x411_ExtendedCertificate = -1; +static gint ett_x411_DLExemptedRecipients = -1; +static gint ett_x411_CertificateSelectors = -1; +static gint ett_x411_MTSIdentifier = -1; +static gint ett_x411_GlobalDomainIdentifier = -1; +static gint ett_x411_PrivateDomainIdentifier = -1; +static gint ett_x411_ORName = -1; +static gint ett_x411_ORAddress = -1; +static gint ett_x411_BuiltInStandardAttributes = -1; +static gint ett_x411_CountryName = -1; +static gint ett_x411_AdministrationDomainName = -1; +static gint ett_x411_PrivateDomainName = -1; +static gint ett_x411_PersonalName = -1; +static gint ett_x411_OrganizationalUnitNames = -1; +static gint ett_x411_BuiltInDomainDefinedAttributes = -1; +static gint ett_x411_BuiltInDomainDefinedAttribute = -1; +static gint ett_x411_ExtensionAttributes = -1; +static gint ett_x411_ExtensionAttribute = -1; +static gint ett_x411_TeletexPersonalName = -1; +static gint ett_x411_UniversalPersonalName = -1; +static gint ett_x411_TeletexOrganizationalUnitNames = -1; +static gint ett_x411_UniversalOrganizationalUnitNames = -1; +static gint ett_x411_UniversalOrBMPString = -1; +static gint ett_x411_T_character_encoding = -1; +static gint ett_x411_PhysicalDeliveryCountryName = -1; +static gint ett_x411_PostalCode = -1; +static gint ett_x411_UnformattedPostalAddress = -1; +static gint ett_x411_T_printable_address = -1; +static gint ett_x411_PDSParameter = -1; +static gint ett_x411_ExtendedNetworkAddress = -1; +static gint ett_x411_T_e163_4_address = -1; +static gint ett_x411_TeletexDomainDefinedAttributes = -1; +static gint ett_x411_TeletexDomainDefinedAttribute = -1; +static gint ett_x411_UniversalDomainDefinedAttributes = -1; +static gint ett_x411_UniversalDomainDefinedAttribute = -1; +static gint ett_x411_EncodedInformationTypes = -1; +static gint ett_x411_BuiltInEncodedInformationTypes = -1; +static gint ett_x411_ExtendedEncodedInformationTypes = -1; +static gint ett_x411_NonBasicParameters = -1; +static gint ett_x411_G3FacsimileNonBasicParameters = -1; +static gint ett_x411_TeletexNonBasicParameters = -1; +static gint ett_x411_SecurityLabel = -1; +static gint ett_x411_SecurityCategories = -1; +static gint ett_x411_SecurityCategory = -1; + +/*--- End of included file: packet-x411-ett.c ---*/ + + + +/*--- Included file: packet-x411-fn.c ---*/ + +/*--- Fields for imported types ---*/ + +static int dissect_mta_directory_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509if_Name(TRUE, tvb, offset, pinfo, tree, hf_x411_mta_directory_name); +} +static int dissect_directory_entry_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509if_Name(TRUE, tvb, offset, pinfo, tree, hf_x411_directory_entry); +} +static int dissect_certificate_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509af_Certificates(TRUE, tvb, offset, pinfo, tree, hf_x411_certificate); +} +static int dissect_encryption_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, pinfo, tree, hf_x411_encryption_recipient); +} +static int dissect_encryption_originator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, pinfo, tree, hf_x411_encryption_originator); +} +static int dissect_content_integrity_check_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, pinfo, tree, hf_x411_content_integrity_check); +} +static int dissect_token_signature_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, pinfo, tree, hf_x411_token_signature); +} +static int dissect_message_origin_authentication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, pinfo, tree, hf_x411_message_origin_authentication); +} +static int dissect_directory_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509if_Name(TRUE, tvb, offset, pinfo, tree, hf_x411_directory_name); +} +static int dissect_psap_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509sat_PresentationAddress(TRUE, tvb, offset, pinfo, tree, hf_x411_psap_address); +} + + + +static int +dissect_x411_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index); + + return offset; +} +static int dissect_unauthenticated(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NULL(FALSE, tvb, offset, pinfo, tree, hf_x411_unauthenticated); +} +static int dissect_empty_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NULL(FALSE, tvb, offset, pinfo, tree, hf_x411_empty_result); +} + + + +static int +dissect_x411_MTAName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_authenticated_initiator_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAName(TRUE, tvb, offset, pinfo, tree, hf_x411_authenticated_initiator_name); +} +static int dissect_authenticated_responder_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAName(TRUE, tvb, offset, pinfo, tree, hf_x411_authenticated_responder_name); +} +static int dissect_mta_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAName(FALSE, tvb, offset, pinfo, tree, hf_x411_mta_name); +} +static int dissect_mta(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAName(FALSE, tvb, offset, pinfo, tree, hf_x411_mta); +} +static int dissect_mTA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAName(TRUE, tvb, offset, pinfo, tree, hf_x411_mTA); +} + + + +static int +dissect_x411_IA5String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_ia5_string(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_IA5String(FALSE, tvb, offset, pinfo, tree, hf_x411_ia5_string); +} +static int dissect_ia5text(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_IA5String(FALSE, tvb, offset, pinfo, tree, hf_x411_ia5text); +} + + + +static int +dissect_x411_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_octet_string(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_x411_octet_string); +} +static int dissect_octets(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_x411_octets); +} +static int dissect_page_formats_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_x411_page_formats); +} +static int dissect_private_use_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_x411_private_use); +} + + +static const value_string x411_Password_vals[] = { + { 0, "ia5-string" }, + { 1, "octet-string" }, + { 0, NULL } +}; + +static const ber_choice_t Password_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_ia5_string }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_octet_string }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_Password(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + Password_choice, hf_index, ett_x411_Password, + NULL); + + return offset; +} +static int dissect_simple(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Password(FALSE, tvb, offset, pinfo, tree, hf_x411_simple); +} + + +static const value_string x411_Credentials_vals[] = { + { -1/*choice*/, "simple" }, + { 0, NULL } +}; + +static const ber_choice_t Credentials_choice[] = { + { -1/*choice*/, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_simple }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_Credentials(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + Credentials_choice, hf_index, ett_x411_Credentials, + NULL); + + return offset; +} +static int dissect_old_credentials_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Credentials(TRUE, tvb, offset, pinfo, tree, hf_x411_old_credentials); +} +static int dissect_new_credentials_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Credentials(TRUE, tvb, offset, pinfo, tree, hf_x411_new_credentials); +} + + + +static int +dissect_x411_InitiatorCredentials(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Credentials(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_initiator_credentials_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_InitiatorCredentials(TRUE, tvb, offset, pinfo, tree, hf_x411_initiator_credentials); +} + + + +static int +dissect_x411_SecurityPolicyIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_security_policy_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityPolicyIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_security_policy_identifier); +} + + +static const value_string x411_SecurityClassification_vals[] = { + { 0, "unmarked" }, + { 1, "unclassified" }, + { 2, "restricted" }, + { 3, "confidential" }, + { 4, "secret" }, + { 5, "top-secret" }, + { 0, NULL } +}; + + +static int +dissect_x411_SecurityClassification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_security_classification(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityClassification(FALSE, tvb, offset, pinfo, tree, hf_x411_security_classification); +} + + + +static int +dissect_x411_PrivacyMark(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_privacy_mark(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrivacyMark(FALSE, tvb, offset, pinfo, tree, hf_x411_privacy_mark); +} + + + +static int +dissect_x411_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_private_extension_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OBJECT_IDENTIFIER(TRUE, tvb, offset, pinfo, tree, hf_x411_private_extension); +} +static int dissect_category_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OBJECT_IDENTIFIER(TRUE, tvb, offset, pinfo, tree, hf_x411_category_type); +} + + + +static int +dissect_x411_CategoryValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset = dissect_unknown_ber(pinfo, tvb, offset, tree); + + + return offset; +} +static int dissect_category_value_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_CategoryValue(TRUE, tvb, offset, pinfo, tree, hf_x411_category_value); +} + + +static const ber_sequence_t SecurityCategory_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_category_type_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_category_value_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_SecurityCategory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + SecurityCategory_sequence, hf_index, ett_x411_SecurityCategory); + + return offset; +} +static int dissect_SecurityCategories_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityCategory(FALSE, tvb, offset, pinfo, tree, hf_x411_SecurityCategories_item); +} + + +static const ber_sequence_t SecurityCategories_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_SecurityCategories_item }, +}; + +static int +dissect_x411_SecurityCategories(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SecurityCategories_set_of, hf_index, ett_x411_SecurityCategories); + + return offset; +} +static int dissect_security_categories(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityCategories(FALSE, tvb, offset, pinfo, tree, hf_x411_security_categories); +} + + +static const ber_sequence_t SecurityLabel_set[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_security_policy_identifier }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_security_classification }, + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_privacy_mark }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_security_categories }, + { 0, 0, 0, NULL } +}; + +int +dissect_x411_SecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SecurityLabel_set, hf_index, ett_x411_SecurityLabel); + + return offset; +} +static int dissect_SecurityContext_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityLabel(FALSE, tvb, offset, pinfo, tree, hf_x411_SecurityContext_item); +} + + +static const ber_sequence_t SecurityContext_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_SecurityContext_item }, +}; + +static int +dissect_x411_SecurityContext(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SecurityContext_set_of, hf_index, ett_x411_SecurityContext); + + return offset; +} +static int dissect_security_context_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityContext(TRUE, tvb, offset, pinfo, tree, hf_x411_security_context); +} +static int dissect_permissible_security_context_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityContext(TRUE, tvb, offset, pinfo, tree, hf_x411_permissible_security_context); +} +static int dissect_security_labels_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SecurityContext(TRUE, tvb, offset, pinfo, tree, hf_x411_security_labels); +} + + +static const ber_sequence_t AuthenticatedArgument_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_authenticated_initiator_name_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator_credentials_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_security_context_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_AuthenticatedArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticatedArgument_set, hf_index, ett_x411_AuthenticatedArgument); + + return offset; +} +static int dissect_authenticated_argument_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_AuthenticatedArgument(TRUE, tvb, offset, pinfo, tree, hf_x411_authenticated_argument); +} + + +static const value_string x411_MTABindArgument_vals[] = { + { 0, "unauthenticated" }, + { 1, "authenticated" }, + { 0, NULL } +}; + +static const ber_choice_t MTABindArgument_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_unauthenticated }, + { 1, BER_CLASS_CON, 1, 0, dissect_authenticated_argument_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_MTABindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + MTABindArgument_choice, hf_index, ett_x411_MTABindArgument, + NULL); + + return offset; +} + + + +static int +dissect_x411_ResponderCredentials(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Credentials(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_responder_credentials_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ResponderCredentials(TRUE, tvb, offset, pinfo, tree, hf_x411_responder_credentials); +} + + +static const ber_sequence_t AuthenticatedResult_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_authenticated_responder_name_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_responder_credentials_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_AuthenticatedResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticatedResult_set, hf_index, ett_x411_AuthenticatedResult); + + return offset; +} +static int dissect_authenticated_result_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_AuthenticatedResult(TRUE, tvb, offset, pinfo, tree, hf_x411_authenticated_result); +} + + +static const value_string x411_MTABindResult_vals[] = { + { 0, "unauthenticated" }, + { 1, "authenticated" }, + { 0, NULL } +}; + +static const ber_choice_t MTABindResult_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_unauthenticated }, + { 1, BER_CLASS_CON, 1, 0, dissect_authenticated_result_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_MTABindResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + MTABindResult_choice, hf_index, ett_x411_MTABindResult, + NULL); + + return offset; +} + + +static const value_string x411_MTABindError_vals[] = { + { 0, "busy" }, + { 2, "authentication-error" }, + { 3, "unacceptable-dialogue-mode" }, + { 4, "unacceptable-security-context" }, + { 5, "inadequate-association-confidentiality" }, + { 0, NULL } +}; + + +static int +dissect_x411_MTABindError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_NumericString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_x121_address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NumericString(FALSE, tvb, offset, pinfo, tree, hf_x411_x121_address); +} +static int dissect_numeric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NumericString(FALSE, tvb, offset, pinfo, tree, hf_x411_numeric); +} +static int dissect_x121_dcc_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NumericString(FALSE, tvb, offset, pinfo, tree, hf_x411_x121_dcc_code); +} +static int dissect_numeric_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NumericString(FALSE, tvb, offset, pinfo, tree, hf_x411_numeric_code); +} +static int dissect_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NumericString(TRUE, tvb, offset, pinfo, tree, hf_x411_number); +} +static int dissect_sub_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NumericString(TRUE, tvb, offset, pinfo, tree, hf_x411_sub_address); +} + + + +static int +dissect_x411_PrintableString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_tsap_id(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_tsap_id); +} +static int dissect_printable(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_printable); +} +static int dissect_iso_3166_alpha2_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_iso_3166_alpha2_code); +} +static int dissect_printable_surname_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(TRUE, tvb, offset, pinfo, tree, hf_x411_printable_surname); +} +static int dissect_printable_given_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(TRUE, tvb, offset, pinfo, tree, hf_x411_printable_given_name); +} +static int dissect_printable_initials_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(TRUE, tvb, offset, pinfo, tree, hf_x411_printable_initials); +} +static int dissect_printable_generation_qualifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(TRUE, tvb, offset, pinfo, tree, hf_x411_printable_generation_qualifier); +} +static int dissect_printable_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_printable_type); +} +static int dissect_printable_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_printable_value); +} +static int dissect_iso_639_language_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_iso_639_language_code); +} +static int dissect_printable_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_printable_code); +} +static int dissect_printable_address_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_printable_address_item); +} +static int dissect_printable_string(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x411_printable_string); +} + + +static const value_string x411_CountryName_vals[] = { + { 0, "x121-dcc-code" }, + { 1, "iso-3166-alpha2-code" }, + { 0, NULL } +}; + +static const ber_choice_t CountryName_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x121_dcc_code }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_iso_3166_alpha2_code }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_CountryName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + gint8 class; + gboolean pc, ind_field; + gint32 tag; + gint32 len1; + + if(!implicit_tag){ + /* XXX asn2eth can not yet handle tagged assignment yes so this + * XXX is some conformance file magic to work around that bug + */ + offset = get_ber_identifier(tvb, offset, &class, &pc, &tag); + offset = get_ber_length(tree, tvb, offset, &len1, &ind_field); + } + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + CountryName_choice, hf_index, ett_x411_CountryName, NULL); + + + return offset; +} +static int dissect_country_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_CountryName(FALSE, tvb, offset, pinfo, tree, hf_x411_country_name); +} + + +static const value_string x411_AdministrationDomainName_vals[] = { + { 0, "numeric" }, + { 1, "printable" }, + { 0, NULL } +}; + +static const ber_choice_t AdministrationDomainName_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_AdministrationDomainName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + gint8 class; + gboolean pc, ind_field; + gint32 tag; + gint32 len1; + + if(!implicit_tag){ + /* XXX asn2eth can not yet handle tagged assignment yes so this + * XXX is some conformance file magic to work around that bug + */ + offset = get_ber_identifier(tvb, offset, &class, &pc, &tag); + offset = get_ber_length(tree, tvb, offset, &len1, &ind_field); + } + + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + AdministrationDomainName_choice, hf_index, ett_x411_AdministrationDomainName, NULL); + + + return offset; +} +static int dissect_administration_domain_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_AdministrationDomainName(FALSE, tvb, offset, pinfo, tree, hf_x411_administration_domain_name); +} +static int dissect_administration_domain_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_AdministrationDomainName(TRUE, tvb, offset, pinfo, tree, hf_x411_administration_domain_name); +} + + +static const value_string x411_PrivateDomainIdentifier_vals[] = { + { 0, "numeric" }, + { 1, "printable" }, + { 0, NULL } +}; + +static const ber_choice_t PrivateDomainIdentifier_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_PrivateDomainIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + PrivateDomainIdentifier_choice, hf_index, ett_x411_PrivateDomainIdentifier, + NULL); + + return offset; +} +static int dissect_private_domain_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrivateDomainIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_private_domain_identifier); +} +static int dissect_private_domain_identifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrivateDomainIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x411_private_domain_identifier); +} + + +static const ber_sequence_t GlobalDomainIdentifier_sequence[] = { + { BER_CLASS_APP, 1, BER_FLAGS_NOOWNTAG, dissect_country_name }, + { BER_CLASS_APP, 2, BER_FLAGS_NOOWNTAG, dissect_administration_domain_name }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_private_domain_identifier }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_GlobalDomainIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + GlobalDomainIdentifier_sequence, hf_index, ett_x411_GlobalDomainIdentifier); + + return offset; +} +static int dissect_global_domain_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_GlobalDomainIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_global_domain_identifier); +} +static int dissect_domain(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_GlobalDomainIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_domain); +} +static int dissect_attempted_domain(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_GlobalDomainIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_attempted_domain); +} + + + +static int +dissect_x411_LocalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_local_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_LocalIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_local_identifier); +} + + +static const ber_sequence_t MTSIdentifier_sequence[] = { + { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_global_domain_identifier }, + { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_local_identifier }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MTSIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + MTSIdentifier_sequence, hf_index, ett_x411_MTSIdentifier); + + return offset; +} + + + +static int +dissect_x411_MessageIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_message_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_message_identifier); +} + + + +static int +dissect_x411_X121Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_NetworkAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_X121Address(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_network_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NetworkAddress(TRUE, tvb, offset, pinfo, tree, hf_x411_network_address); +} + + + +static int +dissect_x411_TerminalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_terminal_identifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TerminalIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x411_terminal_identifier); +} + + +static const value_string x411_PrivateDomainName_vals[] = { + { 0, "numeric" }, + { 1, "printable" }, + { 0, NULL } +}; + +static const ber_choice_t PrivateDomainName_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_PrivateDomainName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + PrivateDomainName_choice, hf_index, ett_x411_PrivateDomainName, + NULL); + + return offset; +} +static int dissect_private_domain_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PrivateDomainName(TRUE, tvb, offset, pinfo, tree, hf_x411_private_domain_name); +} + + + +static int +dissect_x411_OrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_organization_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OrganizationName(TRUE, tvb, offset, pinfo, tree, hf_x411_organization_name); +} + + + +static int +dissect_x411_NumericUserIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_numeric_user_identifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NumericUserIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x411_numeric_user_identifier); +} + + +static const ber_sequence_t PersonalName_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_printable_surname_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_printable_given_name_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_printable_initials_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_printable_generation_qualifier_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PersonalName_set, hf_index, ett_x411_PersonalName); + + return offset; +} +static int dissect_personal_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PersonalName(TRUE, tvb, offset, pinfo, tree, hf_x411_personal_name); +} + + + +static int +dissect_x411_OrganizationalUnitName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_OrganizationalUnitNames_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OrganizationalUnitName(FALSE, tvb, offset, pinfo, tree, hf_x411_OrganizationalUnitNames_item); +} + + +static const ber_sequence_t OrganizationalUnitNames_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_OrganizationalUnitNames_item }, +}; + +static int +dissect_x411_OrganizationalUnitNames(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + OrganizationalUnitNames_sequence_of, hf_index, ett_x411_OrganizationalUnitNames); + + return offset; +} +static int dissect_organizational_unit_names_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OrganizationalUnitNames(TRUE, tvb, offset, pinfo, tree, hf_x411_organizational_unit_names); +} + + +static const ber_sequence_t BuiltInStandardAttributes_sequence[] = { + { BER_CLASS_APP, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_country_name }, + { BER_CLASS_APP, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_administration_domain_name }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_network_address_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminal_identifier_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_private_domain_name_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_organization_name_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_numeric_user_identifier_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_personal_name_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_organizational_unit_names_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_BuiltInStandardAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + BuiltInStandardAttributes_sequence, hf_index, ett_x411_BuiltInStandardAttributes); + + return offset; +} +static int dissect_built_in_standard_attributes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BuiltInStandardAttributes(FALSE, tvb, offset, pinfo, tree, hf_x411_built_in_standard_attributes); +} + + +static const ber_sequence_t BuiltInDomainDefinedAttribute_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_type }, + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_value }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_BuiltInDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + BuiltInDomainDefinedAttribute_sequence, hf_index, ett_x411_BuiltInDomainDefinedAttribute); + + return offset; +} +static int dissect_BuiltInDomainDefinedAttributes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BuiltInDomainDefinedAttribute(FALSE, tvb, offset, pinfo, tree, hf_x411_BuiltInDomainDefinedAttributes_item); +} + + +static const ber_sequence_t BuiltInDomainDefinedAttributes_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_BuiltInDomainDefinedAttributes_item }, +}; + +static int +dissect_x411_BuiltInDomainDefinedAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + BuiltInDomainDefinedAttributes_sequence_of, hf_index, ett_x411_BuiltInDomainDefinedAttributes); + + return offset; +} +static int dissect_built_in_domain_defined_attributes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BuiltInDomainDefinedAttributes(FALSE, tvb, offset, pinfo, tree, hf_x411_built_in_domain_defined_attributes); +} + + + +static int +dissect_x411_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + &extension_id); + + + return offset; +} +static int dissect_messages_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x411_messages); +} +static int dissect_delivery_queue_octets_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x411_delivery_queue_octets); +} +static int dissect_standard_extension_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x411_standard_extension); +} +static int dissect_extension_attribute_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x411_extension_attribute_type); +} + + + +static int +dissect_x411_T_extension_attribute_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset=call_x411_oid_callback("x411.extension-attribute", tvb, offset, pinfo, tree); + + + return offset; +} +static int dissect_extension_attribute_value_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_extension_attribute_value(TRUE, tvb, offset, pinfo, tree, hf_x411_extension_attribute_value); +} + + +static const ber_sequence_t ExtensionAttribute_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_extension_attribute_type_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_extension_attribute_value_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ExtensionAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ExtensionAttribute_sequence, hf_index, ett_x411_ExtensionAttribute); + + return offset; +} +static int dissect_ExtensionAttributes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtensionAttribute(FALSE, tvb, offset, pinfo, tree, hf_x411_ExtensionAttributes_item); +} + + +static const ber_sequence_t ExtensionAttributes_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ExtensionAttributes_item }, +}; + +static int +dissect_x411_ExtensionAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + ExtensionAttributes_set_of, hf_index, ett_x411_ExtensionAttributes); + + return offset; +} +static int dissect_extension_attributes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtensionAttributes(FALSE, tvb, offset, pinfo, tree, hf_x411_extension_attributes); +} + + +static const ber_sequence_t ORName_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_built_in_standard_attributes }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_built_in_domain_defined_attributes }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extension_attributes }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_directory_name_impl }, + { 0, 0, 0, NULL } +}; + +int +dissect_x411_ORName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ORName_sequence, hf_index, ett_x411_ORName); + + return offset; +} +static int dissect_exact_match_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORName(TRUE, tvb, offset, pinfo, tree, hf_x411_exact_match); +} +static int dissect_pattern_match_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORName(TRUE, tvb, offset, pinfo, tree, hf_x411_pattern_match); +} + + + +static int +dissect_x411_ORAddressAndOptionalDirectoryName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_user_agent(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, pinfo, tree, hf_x411_user_agent); +} +static int dissect_message_store_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORAddressAndOptionalDirectoryName(TRUE, tvb, offset, pinfo, tree, hf_x411_message_store); +} +static int dissect_intended_recipient(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, pinfo, tree, hf_x411_intended_recipient); +} +static int dissect_dl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, pinfo, tree, hf_x411_dl); +} +static int dissect_originator_or_dl_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, pinfo, tree, hf_x411_originator_or_dl_name); +} + + + +static int +dissect_x411_MTAOriginatorName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_mta_originator_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAOriginatorName(FALSE, tvb, offset, pinfo, tree, hf_x411_mta_originator_name); +} + + +static const asn_namedbit BuiltInEncodedInformationTypes_bits[] = { + { 0, &hf_x411_BuiltInEncodedInformationTypes_unknown, -1, -1, "unknown", NULL }, + { 2, &hf_x411_BuiltInEncodedInformationTypes_ia5_text, -1, -1, "ia5-text", NULL }, + { 3, &hf_x411_BuiltInEncodedInformationTypes_g3_facsimile, -1, -1, "g3-facsimile", NULL }, + { 4, &hf_x411_BuiltInEncodedInformationTypes_g4_class_1, -1, -1, "g4-class-1", NULL }, + { 5, &hf_x411_BuiltInEncodedInformationTypes_teletex, -1, -1, "teletex", NULL }, + { 6, &hf_x411_BuiltInEncodedInformationTypes_videotex, -1, -1, "videotex", NULL }, + { 7, &hf_x411_BuiltInEncodedInformationTypes_voice, -1, -1, "voice", NULL }, + { 8, &hf_x411_BuiltInEncodedInformationTypes_sfd, -1, -1, "sfd", NULL }, + { 9, &hf_x411_BuiltInEncodedInformationTypes_mixed_mode, -1, -1, "mixed-mode", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_BuiltInEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + BuiltInEncodedInformationTypes_bits, hf_index, ett_x411_BuiltInEncodedInformationTypes, + NULL); + + return offset; +} +static int dissect_built_in_encoded_information_types_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BuiltInEncodedInformationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_built_in_encoded_information_types); +} + + +static const asn_namedbit G3FacsimileNonBasicParameters_bits[] = { + { 8, &hf_x411_G3FacsimileNonBasicParameters_two_dimensional, -1, -1, "two-dimensional", NULL }, + { 9, &hf_x411_G3FacsimileNonBasicParameters_fine_resolution, -1, -1, "fine-resolution", NULL }, + { 20, &hf_x411_G3FacsimileNonBasicParameters_unlimited_length, -1, -1, "unlimited-length", NULL }, + { 21, &hf_x411_G3FacsimileNonBasicParameters_b4_length, -1, -1, "b4-length", NULL }, + { 22, &hf_x411_G3FacsimileNonBasicParameters_a3_width, -1, -1, "a3-width", NULL }, + { 23, &hf_x411_G3FacsimileNonBasicParameters_b4_width, -1, -1, "b4-width", NULL }, + { 25, &hf_x411_G3FacsimileNonBasicParameters_t6_coding, -1, -1, "t6-coding", NULL }, + { 30, &hf_x411_G3FacsimileNonBasicParameters_uncompressed, -1, -1, "uncompressed", NULL }, + { 37, &hf_x411_G3FacsimileNonBasicParameters_width_middle_864_of_1728, -1, -1, "width-middle-864-of-1728", NULL }, + { 38, &hf_x411_G3FacsimileNonBasicParameters_width_middle_1216_of_1728, -1, -1, "width-middle-1216-of-1728", NULL }, + { 44, &hf_x411_G3FacsimileNonBasicParameters_resolution_type, -1, -1, "resolution-type", NULL }, + { 45, &hf_x411_G3FacsimileNonBasicParameters_resolution_400x400, -1, -1, "resolution-400x400", NULL }, + { 46, &hf_x411_G3FacsimileNonBasicParameters_resolution_300x300, -1, -1, "resolution-300x300", NULL }, + { 47, &hf_x411_G3FacsimileNonBasicParameters_resolution_8x15, -1, -1, "resolution-8x15", NULL }, + { 49, &hf_x411_G3FacsimileNonBasicParameters_edi, -1, -1, "edi", NULL }, + { 50, &hf_x411_G3FacsimileNonBasicParameters_dtm, -1, -1, "dtm", NULL }, + { 51, &hf_x411_G3FacsimileNonBasicParameters_bft, -1, -1, "bft", NULL }, + { 58, &hf_x411_G3FacsimileNonBasicParameters_mixed_mode, -1, -1, "mixed-mode", NULL }, + { 60, &hf_x411_G3FacsimileNonBasicParameters_character_mode, -1, -1, "character-mode", NULL }, + { 65, &hf_x411_G3FacsimileNonBasicParameters_twelve_bits, -1, -1, "twelve-bits", NULL }, + { 66, &hf_x411_G3FacsimileNonBasicParameters_preferred_huffmann, -1, -1, "preferred-huffmann", NULL }, + { 67, &hf_x411_G3FacsimileNonBasicParameters_full_colour, -1, -1, "full-colour", NULL }, + { 68, &hf_x411_G3FacsimileNonBasicParameters_jpeg, -1, -1, "jpeg", NULL }, + { 71, &hf_x411_G3FacsimileNonBasicParameters_processable_mode_26, -1, -1, "processable-mode-26", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +int +dissect_x411_G3FacsimileNonBasicParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + G3FacsimileNonBasicParameters_bits, hf_index, ett_x411_G3FacsimileNonBasicParameters, + NULL); + + return offset; +} +static int dissect_g3_facsimile_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_G3FacsimileNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x411_g3_facsimile); +} + + + +static int +dissect_x411_TeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_teletex_surname_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(TRUE, tvb, offset, pinfo, tree, hf_x411_teletex_surname); +} +static int dissect_teletex_given_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(TRUE, tvb, offset, pinfo, tree, hf_x411_teletex_given_name); +} +static int dissect_teletex_initials_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(TRUE, tvb, offset, pinfo, tree, hf_x411_teletex_initials); +} +static int dissect_teletex_generation_qualifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(TRUE, tvb, offset, pinfo, tree, hf_x411_teletex_generation_qualifier); +} +static int dissect_teletex_string(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_x411_teletex_string); +} +static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_x411_type); +} +static int dissect_teletex_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_x411_teletex_value); +} +static int dissect_graphic_character_sets_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(TRUE, tvb, offset, pinfo, tree, hf_x411_graphic_character_sets); +} +static int dissect_control_character_sets_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(TRUE, tvb, offset, pinfo, tree, hf_x411_control_character_sets); +} +static int dissect_miscellaneous_terminal_capabilities_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexString(TRUE, tvb, offset, pinfo, tree, hf_x411_miscellaneous_terminal_capabilities); +} + + +static const ber_sequence_t TeletexNonBasicParameters_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_graphic_character_sets_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_control_character_sets_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_page_formats_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_miscellaneous_terminal_capabilities_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_private_use_impl }, + { 0, 0, 0, NULL } +}; + +int +dissect_x411_TeletexNonBasicParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TeletexNonBasicParameters_set, hf_index, ett_x411_TeletexNonBasicParameters); + + return offset; +} +static int dissect_teletex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x411_teletex); +} + + + +static int +dissect_x411_ExtendedEncodedInformationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_ExtendedEncodedInformationTypes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedEncodedInformationType(FALSE, tvb, offset, pinfo, tree, hf_x411_ExtendedEncodedInformationTypes_item); +} + + +static const ber_sequence_t ExtendedEncodedInformationTypes_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_ExtendedEncodedInformationTypes_item }, +}; + +static int +dissect_x411_ExtendedEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + ExtendedEncodedInformationTypes_set_of, hf_index, ett_x411_ExtendedEncodedInformationTypes); + + return offset; +} +static int dissect_unacceptable_eits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_unacceptable_eits); +} +static int dissect_acceptable_eits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_acceptable_eits); +} +static int dissect_exclusively_acceptable_eits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_exclusively_acceptable_eits); +} +static int dissect_extended_encoded_information_types_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_extended_encoded_information_types); +} + + +static const ber_sequence_t EncodedInformationTypes_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_built_in_encoded_information_types_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_g3_facsimile_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extended_encoded_information_types_impl }, + { 0, 0, 0, NULL } +}; + +int +dissect_x411_EncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + EncodedInformationTypes_set, hf_index, ett_x411_EncodedInformationTypes); + + return offset; +} +static int dissect_waiting_encoded_information_types(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_EncodedInformationTypes(FALSE, tvb, offset, pinfo, tree, hf_x411_waiting_encoded_information_types); +} + + + +static int +dissect_x411_OriginalEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_EncodedInformationTypes(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_original_encoded_information_types(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OriginalEncodedInformationTypes(FALSE, tvb, offset, pinfo, tree, hf_x411_original_encoded_information_types); +} +static int dissect_original_encoded_information_types_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OriginalEncodedInformationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_original_encoded_information_types); +} + + +static const value_string x411_BuiltInContentType_vals[] = { + { 0, "unidentified" }, + { 1, "external" }, + { 2, "interpersonal-messaging-1984" }, + { 22, "interpersonal-messaging-1988" }, + { 35, "edi-messaging" }, + { 40, "voice-messaging" }, + { 0, NULL } +}; + + +static int +dissect_x411_BuiltInContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + guint32 ict = -1; + + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + &ict); + + /* convert integer content type to oid for dispatch when the content is found */ + switch(ict) { + case 2: + strcpy(object_identifier_id, "2.6.1.10.0"); + break; + case 22: + strcpy(object_identifier_id, "2.6.1.10.1"); + break; + default: + break; + } + + + return offset; +} +static int dissect_built_in(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BuiltInContentType(FALSE, tvb, offset, pinfo, tree, hf_x411_built_in); +} +static int dissect_built_in_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BuiltInContentType(TRUE, tvb, offset, pinfo, tree, hf_x411_built_in); +} + + + +static int +dissect_x411_ExtendedContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, + hf_index, object_identifier_id); + + + + return offset; +} +static int dissect_extended(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedContentType(FALSE, tvb, offset, pinfo, tree, hf_x411_extended); +} + + +static const value_string x411_ContentType_vals[] = { + { 0, "built-in" }, + { 1, "extended" }, + { 0, NULL } +}; + +static const ber_choice_t ContentType_choice[] = { + { 0, BER_CLASS_APP, 6, BER_FLAGS_NOOWNTAG, dissect_built_in }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_extended }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ContentType_choice, hf_index, ett_x411_ContentType, + NULL); + + return offset; +} +static int dissect_content_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentType(FALSE, tvb, offset, pinfo, tree, hf_x411_content_type); +} +static int dissect_waiting_content_types_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentType(FALSE, tvb, offset, pinfo, tree, hf_x411_waiting_content_types_item); +} +static int dissect_ContentTypes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentType(FALSE, tvb, offset, pinfo, tree, hf_x411_ContentTypes_item); +} + + + +static int +dissect_x411_ContentIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + gint8 class; + gboolean pc, ind_field; + gint32 tag; + gint32 len1; + + if(!implicit_tag){ + /* XXX asn2eth can not yet handle tagged assignment yes so this + * XXX is some conformance file magic to work around that bug + */ + offset = get_ber_identifier(tvb, offset, &class, &pc, &tag); + offset = get_ber_length(tree, tvb, offset, &len1, &ind_field); + } + + /* this is magic I haven't seen used before - I've stripped the tag - but now I'm going to say it is IMPLICIT! */ + offset = dissect_ber_restricted_string(TRUE, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + + + return offset; +} +static int dissect_content_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_content_identifier); +} +static int dissect_content_identifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x411_content_identifier); +} + + +static const value_string x411_Priority_vals[] = { + { 0, "normal" }, + { 1, "non-urgent" }, + { 2, "urgent" }, + { 0, NULL } +}; + + +static int +dissect_x411_Priority(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_priority(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Priority(FALSE, tvb, offset, pinfo, tree, hf_x411_priority); +} +static int dissect_permissible_lowest_priority(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Priority(FALSE, tvb, offset, pinfo, tree, hf_x411_permissible_lowest_priority); +} +static int dissect_priority_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Priority(FALSE, tvb, offset, pinfo, tree, hf_x411_priority_item); +} + + +static const asn_namedbit PerMessageIndicators_bits[] = { + { 0, &hf_x411_PerMessageIndicators_disclosure_of_other_recipients, -1, -1, "disclosure-of-other-recipients", NULL }, + { 1, &hf_x411_PerMessageIndicators_implicit_conversion_prohibited, -1, -1, "implicit-conversion-prohibited", NULL }, + { 2, &hf_x411_PerMessageIndicators_alternate_recipient_allowed, -1, -1, "alternate-recipient-allowed", NULL }, + { 3, &hf_x411_PerMessageIndicators_content_return_request, -1, -1, "content-return-request", NULL }, + { 4, &hf_x411_PerMessageIndicators_reserved, -1, -1, "reserved", NULL }, + { 5, &hf_x411_PerMessageIndicators_bit_5, -1, -1, "bit-5", NULL }, + { 6, &hf_x411_PerMessageIndicators_bit_6, -1, -1, "bit-6", NULL }, + { 7, &hf_x411_PerMessageIndicators_service_message, -1, -1, "service-message", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_PerMessageIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + PerMessageIndicators_bits, hf_index, ett_x411_PerMessageIndicators, + NULL); + + return offset; +} +static int dissect_per_message_indicators(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerMessageIndicators(FALSE, tvb, offset, pinfo, tree, hf_x411_per_message_indicators); +} + + + +static int +dissect_x411_Time(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_redirection_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Time(FALSE, tvb, offset, pinfo, tree, hf_x411_redirection_time); +} +static int dissect_dl_expansion_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Time(FALSE, tvb, offset, pinfo, tree, hf_x411_dl_expansion_time); +} +static int dissect_origination_or_expansion_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Time(FALSE, tvb, offset, pinfo, tree, hf_x411_origination_or_expansion_time); +} + + + +static int +dissect_x411_DeferredDeliveryTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_deferred_delivery_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeferredDeliveryTime(TRUE, tvb, offset, pinfo, tree, hf_x411_deferred_delivery_time); +} + + +static const ber_sequence_t T_private_domain_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_administration_domain_name_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_private_domain_identifier_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_private_domain(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_private_domain_sequence, hf_index, ett_x411_T_private_domain); + + return offset; +} +static int dissect_private_domain(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_private_domain(FALSE, tvb, offset, pinfo, tree, hf_x411_private_domain); +} + + +static const value_string x411_T_domain_vals[] = { + { 0, "administration-domain-name" }, + { 1, "private-domain" }, + { 0, NULL } +}; + +static const ber_choice_t T_domain_choice[] = { + { 0, BER_CLASS_APP, 2, BER_FLAGS_NOOWNTAG, dissect_administration_domain_name }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_private_domain }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_domain(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_domain_choice, hf_index, ett_x411_T_domain, + NULL); + + return offset; +} +static int dissect_bilateral_domain(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_domain(FALSE, tvb, offset, pinfo, tree, hf_x411_bilateral_domain); +} + + +static const ber_sequence_t PerDomainBilateralInformation_sequence[] = { + { BER_CLASS_APP, 1, BER_FLAGS_NOOWNTAG, dissect_country_name }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_bilateral_domain }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerDomainBilateralInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PerDomainBilateralInformation_sequence, hf_index, ett_x411_PerDomainBilateralInformation); + + return offset; +} +static int dissect_per_domain_bilateral_information_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerDomainBilateralInformation(FALSE, tvb, offset, pinfo, tree, hf_x411_per_domain_bilateral_information_item); +} + + +static const ber_sequence_t SEQUENCE_OF_PerDomainBilateralInformation_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_per_domain_bilateral_information_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_PerDomainBilateralInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_PerDomainBilateralInformation_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerDomainBilateralInformation); + + return offset; +} +static int dissect_per_domain_bilateral_information_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_PerDomainBilateralInformation(TRUE, tvb, offset, pinfo, tree, hf_x411_per_domain_bilateral_information); +} + + + +static int +dissect_x411_ArrivalTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_arrival_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ArrivalTime(TRUE, tvb, offset, pinfo, tree, hf_x411_arrival_time); +} + + +static const value_string x411_RoutingAction_vals[] = { + { 0, "relayed" }, + { 1, "rerouted" }, + { 0, NULL } +}; + + +static int +dissect_x411_RoutingAction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_routing_action_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RoutingAction(TRUE, tvb, offset, pinfo, tree, hf_x411_routing_action); +} + + + +static int +dissect_x411_DeferredTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_deferred_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeferredTime(TRUE, tvb, offset, pinfo, tree, hf_x411_deferred_time); +} + + + +static int +dissect_x411_ConvertedEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_EncodedInformationTypes(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_converted_encoded_information_types(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ConvertedEncodedInformationTypes(FALSE, tvb, offset, pinfo, tree, hf_x411_converted_encoded_information_types); +} +static int dissect_converted_encoded_information_types_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ConvertedEncodedInformationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_converted_encoded_information_types); +} + + +static const asn_namedbit OtherActions_bits[] = { + { 0, &hf_x411_OtherActions_redirected, -1, -1, "redirected", NULL }, + { 1, &hf_x411_OtherActions_dl_operation, -1, -1, "dl-operation", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_OtherActions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + OtherActions_bits, hf_index, ett_x411_OtherActions, + NULL); + + return offset; +} +static int dissect_other_actions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OtherActions(TRUE, tvb, offset, pinfo, tree, hf_x411_other_actions); +} + + +static const ber_sequence_t DomainSuppliedInformation_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_arrival_time_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_routing_action_impl }, + { BER_CLASS_APP, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_attempted_domain }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_time_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_other_actions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_DomainSuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DomainSuppliedInformation_set, hf_index, ett_x411_DomainSuppliedInformation); + + return offset; +} +static int dissect_domain_supplied_information(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DomainSuppliedInformation(FALSE, tvb, offset, pinfo, tree, hf_x411_domain_supplied_information); +} + + +static const ber_sequence_t TraceInformationElement_sequence[] = { + { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_global_domain_identifier }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_domain_supplied_information }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_TraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + TraceInformationElement_sequence, hf_index, ett_x411_TraceInformationElement); + + return offset; +} +static int dissect_TraceInformation_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TraceInformationElement(FALSE, tvb, offset, pinfo, tree, hf_x411_TraceInformation_item); +} + + +static const ber_sequence_t TraceInformation_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_TraceInformation_item }, +}; + +static int +dissect_x411_TraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + TraceInformation_sequence_of, hf_index, ett_x411_TraceInformation); + + return offset; +} +static int dissect_trace_information(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TraceInformation(FALSE, tvb, offset, pinfo, tree, hf_x411_trace_information); +} + + +static const value_string x411_ExtensionType_vals[] = { + { 0, "standard-extension" }, + { 3, "private-extension" }, + { 0, NULL } +}; + +static const ber_choice_t ExtensionType_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_standard_extension_impl }, + { 3, BER_CLASS_CON, 3, 0, dissect_private_extension_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ExtensionType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ExtensionType_choice, hf_index, ett_x411_ExtensionType, + NULL); + + return offset; +} +static int dissect_extension_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtensionType(FALSE, tvb, offset, pinfo, tree, hf_x411_extension_type); +} + + +static const asn_namedbit Criticality_bits[] = { + { 0, &hf_x411_Criticality_for_submission, -1, -1, "for-submission", NULL }, + { 1, &hf_x411_Criticality_for_transfer, -1, -1, "for-transfer", NULL }, + { 2, &hf_x411_Criticality_for_delivery, -1, -1, "for-delivery", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_Criticality(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + Criticality_bits, hf_index, ett_x411_Criticality, + NULL); + + return offset; +} +static int dissect_criticality_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Criticality(TRUE, tvb, offset, pinfo, tree, hf_x411_criticality); +} + + + +static int +dissect_x411_ExtensionValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset=call_x411_oid_callback("x411.extension", tvb, offset, pinfo, tree); + + + return offset; +} +static int dissect_extension_value_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtensionValue(TRUE, tvb, offset, pinfo, tree, hf_x411_extension_value); +} + + +static const ber_sequence_t ExtensionField_sequence[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extension_type }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_criticality_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_extension_value_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ExtensionField_sequence, hf_index, ett_x411_ExtensionField); + + return offset; +} +static int dissect_extensions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtensionField(FALSE, tvb, offset, pinfo, tree, hf_x411_extensions_item); +} + + +static const ber_sequence_t SET_OF_ExtensionField_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_extensions_item }, +}; + +static int +dissect_x411_SET_OF_ExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SET_OF_ExtensionField_set_of, hf_index, ett_x411_SET_OF_ExtensionField); + + return offset; +} +static int dissect_extensions(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SET_OF_ExtensionField(FALSE, tvb, offset, pinfo, tree, hf_x411_extensions); +} +static int dissect_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SET_OF_ExtensionField(TRUE, tvb, offset, pinfo, tree, hf_x411_extensions); +} + + + +static int +dissect_x411_MTARecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_recipient_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTARecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_recipient_name); +} + + + +static int +dissect_x411_OriginallySpecifiedRecipientNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_originally_specified_recipient_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OriginallySpecifiedRecipientNumber(TRUE, tvb, offset, pinfo, tree, hf_x411_originally_specified_recipient_number); +} + + +static const asn_namedbit PerRecipientIndicators_bits[] = { + { 0, &hf_x411_PerRecipientIndicators_responsibility, -1, -1, "responsibility", NULL }, + { 1, &hf_x411_PerRecipientIndicators_originating_MTA_report, -1, -1, "originating-MTA-report", NULL }, + { 2, &hf_x411_PerRecipientIndicators_originating_MTA_non_delivery_report, -1, -1, "originating-MTA-non-delivery-report", NULL }, + { 3, &hf_x411_PerRecipientIndicators_originator_report, -1, -1, "originator-report", NULL }, + { 4, &hf_x411_PerRecipientIndicators_originator_non_delivery_report, -1, -1, "originator-non-delivery-report", NULL }, + { 5, &hf_x411_PerRecipientIndicators_reserved_5, -1, -1, "reserved-5", NULL }, + { 6, &hf_x411_PerRecipientIndicators_reserved_6, -1, -1, "reserved-6", NULL }, + { 7, &hf_x411_PerRecipientIndicators_reserved_7, -1, -1, "reserved-7", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_PerRecipientIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientIndicators_bits, hf_index, ett_x411_PerRecipientIndicators, + NULL); + + return offset; +} +static int dissect_per_recipient_indicators_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientIndicators(TRUE, tvb, offset, pinfo, tree, hf_x411_per_recipient_indicators); +} + + +static const value_string x411_ExplicitConversion_vals[] = { + { 0, "ia5-text-to-teletex" }, + { 8, "ia5-text-to-g3-facsimile" }, + { 9, "ia5-text-to-g4-class-1" }, + { 10, "ia5-text-to-videotex" }, + { 11, "teletex-to-ia5-text" }, + { 12, "teletex-to-g3-facsimile" }, + { 13, "teletex-to-g4-class-1" }, + { 14, "teletex-to-videotex" }, + { 16, "videotex-to-ia5-text" }, + { 17, "videotex-to-teletex" }, + { 0, NULL } +}; + + +static int +dissect_x411_ExplicitConversion(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_explicit_conversion_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExplicitConversion(TRUE, tvb, offset, pinfo, tree, hf_x411_explicit_conversion); +} + + +static const ber_sequence_t PerRecipientMessageTransferFields_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_recipient_name }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originally_specified_recipient_number_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_per_recipient_indicators_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientMessageTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientMessageTransferFields_set, hf_index, ett_x411_PerRecipientMessageTransferFields); + + return offset; +} +static int dissect_per_recipient_message_fields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientMessageTransferFields(FALSE, tvb, offset, pinfo, tree, hf_x411_per_recipient_message_fields_item); +} + + +static const ber_sequence_t SEQUENCE_OF_PerRecipientMessageTransferFields_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_message_fields_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_PerRecipientMessageTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_PerRecipientMessageTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientMessageTransferFields); + + return offset; +} +static int dissect_per_recipient_message_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_PerRecipientMessageTransferFields(TRUE, tvb, offset, pinfo, tree, hf_x411_per_recipient_message_fields); +} + + +static const ber_sequence_t MessageTransferEnvelope_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_identifier }, + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mta_originator_name }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_priority }, + { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_delivery_time_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_per_domain_bilateral_information_impl }, + { BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_trace_information }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_per_recipient_message_fields_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageTransferEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageTransferEnvelope_set, hf_index, ett_x411_MessageTransferEnvelope); + + return offset; +} +static int dissect_message_envelope(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageTransferEnvelope(FALSE, tvb, offset, pinfo, tree, hf_x411_message_envelope); +} + + + +static int +dissect_x411_Content(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + tvbuff_t *next_tvb; + + /* we can do this now constructed octet strings are supported */ + offset = dissect_ber_octet_string(FALSE, pinfo, tree, tvb, offset, hf_index, &next_tvb); + + (void) call_ber_oid_callback(object_identifier_id, next_tvb, 0, pinfo, tree); + + + return offset; +} +static int dissect_content(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Content(FALSE, tvb, offset, pinfo, tree, hf_x411_content); +} +static int dissect_returned_content_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Content(TRUE, tvb, offset, pinfo, tree, hf_x411_returned_content); +} + + +static const ber_sequence_t Message_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_envelope }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_content }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_Message(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Message_sequence, hf_index, ett_x411_Message); + + return offset; +} +static int dissect_message_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Message(TRUE, tvb, offset, pinfo, tree, hf_x411_message); +} + + + +static int +dissect_x411_ProbeIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_probe_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ProbeIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_probe_identifier); +} + + + +static int +dissect_x411_ContentLength(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_content_length_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentLength(TRUE, tvb, offset, pinfo, tree, hf_x411_content_length); +} +static int dissect_permissible_maximum_content_length_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentLength(TRUE, tvb, offset, pinfo, tree, hf_x411_permissible_maximum_content_length); +} +static int dissect_maximum_content_length_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentLength(TRUE, tvb, offset, pinfo, tree, hf_x411_maximum_content_length); +} + + +static const ber_sequence_t PerRecipientProbeTransferFields_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_recipient_name }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originally_specified_recipient_number_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_per_recipient_indicators_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientProbeTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientProbeTransferFields_set, hf_index, ett_x411_PerRecipientProbeTransferFields); + + return offset; +} +static int dissect_per_recipient_probe_transfer_fields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientProbeTransferFields(FALSE, tvb, offset, pinfo, tree, hf_x411_per_recipient_probe_transfer_fields_item); +} + + +static const ber_sequence_t SEQUENCE_OF_PerRecipientProbeTransferFields_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_probe_transfer_fields_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_PerRecipientProbeTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_PerRecipientProbeTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientProbeTransferFields); + + return offset; +} +static int dissect_per_recipient_probe_transfer_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_PerRecipientProbeTransferFields(TRUE, tvb, offset, pinfo, tree, hf_x411_per_recipient_probe_transfer_fields); +} + + +static const ber_sequence_t ProbeTransferEnvelope_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_probe_identifier }, + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mta_originator_name }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_length_impl }, + { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_per_domain_bilateral_information_impl }, + { BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_trace_information }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_per_recipient_probe_transfer_fields_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ProbeTransferEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ProbeTransferEnvelope_set, hf_index, ett_x411_ProbeTransferEnvelope); + + return offset; +} + + + +static int +dissect_x411_Probe(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ProbeTransferEnvelope(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_probe_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Probe(TRUE, tvb, offset, pinfo, tree, hf_x411_probe); +} + + + +static int +dissect_x411_ReportIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_report_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ReportIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_report_identifier); +} + + + +static int +dissect_x411_ReportDestinationName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_report_destination_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ReportDestinationName(FALSE, tvb, offset, pinfo, tree, hf_x411_report_destination_name); +} + + +static const ber_sequence_t ReportTransferEnvelope_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_report_identifier }, + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_report_destination_name }, + { BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_trace_information }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ReportTransferEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ReportTransferEnvelope_set, hf_index, ett_x411_ReportTransferEnvelope); + + return offset; +} +static int dissect_report_envelope(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ReportTransferEnvelope(FALSE, tvb, offset, pinfo, tree, hf_x411_report_envelope); +} + + + +static int +dissect_x411_MessageOrProbeIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_SubjectIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MessageOrProbeIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_subject_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SubjectIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_subject_identifier); +} + + + +static int +dissect_x411_SubjectIntermediateTraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_TraceInformation(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_subject_intermediate_trace_information(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SubjectIntermediateTraceInformation(FALSE, tvb, offset, pinfo, tree, hf_x411_subject_intermediate_trace_information); +} + + + +static int +dissect_x411_AdditionalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/*XXX not implemented yet */ + + + return offset; +} +static int dissect_additional_information_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_AdditionalInformation(TRUE, tvb, offset, pinfo, tree, hf_x411_additional_information); +} + + + +static int +dissect_x411_MTAActualRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_mta_actual_recipient_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAActualRecipientName(TRUE, tvb, offset, pinfo, tree, hf_x411_mta_actual_recipient_name); +} + + + +int +dissect_x411_MessageDeliveryTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_message_delivery_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageDeliveryTime(FALSE, tvb, offset, pinfo, tree, hf_x411_message_delivery_time); +} +static int dissect_message_delivery_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageDeliveryTime(TRUE, tvb, offset, pinfo, tree, hf_x411_message_delivery_time); +} + + +static const value_string x411_TypeOfMTSUser_vals[] = { + { 0, "public" }, + { 1, "private" }, + { 2, "ms" }, + { 3, "dl" }, + { 4, "pdau" }, + { 5, "physical-recipient" }, + { 6, "other" }, + { 0, NULL } +}; + + +static int +dissect_x411_TypeOfMTSUser(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_type_of_MTS_user(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TypeOfMTSUser(FALSE, tvb, offset, pinfo, tree, hf_x411_type_of_MTS_user); +} +static int dissect_type_of_MTS_user_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TypeOfMTSUser(TRUE, tvb, offset, pinfo, tree, hf_x411_type_of_MTS_user); +} + + +static const ber_sequence_t DeliveryReport_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_message_delivery_time_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_type_of_MTS_user_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_DeliveryReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DeliveryReport_set, hf_index, ett_x411_DeliveryReport); + + return offset; +} +static int dissect_delivery_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliveryReport(TRUE, tvb, offset, pinfo, tree, hf_x411_delivery); +} + + +static const value_string x411_NonDeliveryReasonCode_vals[] = { + { 0, "transfer-failure" }, + { 1, "unable-to-transfer" }, + { 2, "conversion-not-performed" }, + { 3, "physical-rendition-not-performed" }, + { 4, "physical-delivery-not-performed" }, + { 5, "restricted-delivery" }, + { 6, "directory-operation-unsuccessful" }, + { 7, "deferred-delivery-not-performed" }, + { 8, "transfer-failure-for-security-reason" }, + { 0, NULL } +}; + + +static int +dissect_x411_NonDeliveryReasonCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_non_delivery_reason_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NonDeliveryReasonCode(FALSE, tvb, offset, pinfo, tree, hf_x411_non_delivery_reason_code); +} +static int dissect_non_delivery_reason_code_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NonDeliveryReasonCode(TRUE, tvb, offset, pinfo, tree, hf_x411_non_delivery_reason_code); +} + + +static const value_string x411_NonDeliveryDiagnosticCode_vals[] = { + { 0, "unrecognised-OR-name" }, + { 1, "ambiguous-OR-name" }, + { 2, "mts-congestion" }, + { 3, "loop-detected" }, + { 4, "recipient-unavailable" }, + { 5, "maximum-time-expired" }, + { 6, "encoded-information-types-unsupported" }, + { 7, "content-too-long" }, + { 8, "conversion-impractical" }, + { 9, "implicit-conversion-prohibited" }, + { 10, "implicit-conversion-not-subscribed" }, + { 11, "invalid-arguments" }, + { 12, "content-syntax-error" }, + { 13, "size-constraint-violation" }, + { 14, "protocol-violation" }, + { 15, "content-type-not-supported" }, + { 16, "too-many-recipients" }, + { 17, "no-bilateral-agreement" }, + { 18, "unsupported-critical-function" }, + { 19, "conversion-with-loss-prohibited" }, + { 20, "line-too-long" }, + { 21, "page-split" }, + { 22, "pictorial-symbol-loss" }, + { 23, "punctuation-symbol-loss" }, + { 24, "alphabetic-character-loss" }, + { 25, "multiple-information-loss" }, + { 26, "recipient-reassignment-prohibited" }, + { 27, "redirection-loop-detected" }, + { 28, "dl-expansion-prohibited" }, + { 29, "no-dl-submit-permission" }, + { 30, "dl-expansion-failure" }, + { 31, "physical-rendition-attributes-not-supported" }, + { 32, "undeliverable-mail-physical-delivery-address-incorrect" }, + { 33, "undeliverable-mail-physical-delivery-office-incorrect-or-invalid" }, + { 34, "undeliverable-mail-physical-delivery-address-incomplete" }, + { 35, "undeliverable-mail-recipient-unknown" }, + { 36, "undeliverable-mail-recipient-deceased" }, + { 37, "undeliverable-mail-organization-expired" }, + { 38, "undeliverable-mail-recipient-refused-to-accept" }, + { 39, "undeliverable-mail-recipient-did-not-claim" }, + { 40, "undeliverable-mail-recipient-changed-address-permanently" }, + { 41, "undeliverable-mail-recipient-changed-address-temporarily" }, + { 42, "undeliverable-mail-recipient-changed-temporary-address" }, + { 43, "undeliverable-mail-new-address-unknown" }, + { 44, "undeliverable-mail-recipient-did-not-want-forwarding" }, + { 45, "undeliverable-mail-originator-prohibited-forwarding" }, + { 46, "secure-messaging-error" }, + { 47, "unable-to-downgrade" }, + { 48, "unable-to-complete-transfer" }, + { 49, "transfer-attempts-limit-reached" }, + { 50, "incorrect-notification-type" }, + { 51, "dl-expansion-prohibited-by-security-policy" }, + { 52, "forbidden-alternate-recipient" }, + { 53, "security-policy-violation" }, + { 54, "security-services-refusal" }, + { 55, "unauthorised-dl-member" }, + { 56, "unauthorised-dl-name" }, + { 57, "unauthorised-originally-intended-recipient-name" }, + { 58, "unauthorised-originator-name" }, + { 59, "unauthorised-recipient-name" }, + { 60, "unreliable-system" }, + { 61, "authentication-failure-on-subject-message" }, + { 62, "decryption-failed" }, + { 63, "decryption-key-unobtainable" }, + { 64, "double-envelope-creation-failure" }, + { 65, "double-enveloping-message-restoring-failure" }, + { 66, "failure-of-proof-of-message" }, + { 67, "integrity-failure-on-subject-message" }, + { 68, "invalid-security-label" }, + { 69, "key-failure" }, + { 70, "mandatory-parameter-absence" }, + { 71, "operation-security-failure" }, + { 72, "repudiation-failure-of-message" }, + { 73, "security-context-failure" }, + { 74, "token-decryption-failed" }, + { 75, "token-error" }, + { 76, "unknown-security-label" }, + { 77, "unsupported-algorithm-identifier" }, + { 78, "unsupported-security-policy" }, + { 0, NULL } +}; + + +static int +dissect_x411_NonDeliveryDiagnosticCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_non_delivery_diagnostic_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NonDeliveryDiagnosticCode(FALSE, tvb, offset, pinfo, tree, hf_x411_non_delivery_diagnostic_code); +} +static int dissect_non_delivery_diagnostic_code_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NonDeliveryDiagnosticCode(TRUE, tvb, offset, pinfo, tree, hf_x411_non_delivery_diagnostic_code); +} + + +static const ber_sequence_t NonDeliveryReport_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_non_delivery_reason_code_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_non_delivery_diagnostic_code_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_NonDeliveryReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + NonDeliveryReport_set, hf_index, ett_x411_NonDeliveryReport); + + return offset; +} +static int dissect_non_delivery_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_NonDeliveryReport(TRUE, tvb, offset, pinfo, tree, hf_x411_non_delivery); +} + + +static const value_string x411_ReportType_vals[] = { + { 0, "delivery" }, + { 1, "non-delivery" }, + { 0, NULL } +}; + +static const ber_choice_t ReportType_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_delivery_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_non_delivery_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ReportType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ReportType_choice, hf_index, ett_x411_ReportType, + NULL); + + return offset; +} +static int dissect_trace_report_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ReportType(TRUE, tvb, offset, pinfo, tree, hf_x411_trace_report_type); +} +static int dissect_delivery_report_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ReportType(TRUE, tvb, offset, pinfo, tree, hf_x411_delivery_report_type); +} + + +static const ber_sequence_t LastTraceInformation_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_arrival_time_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_trace_report_type_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_LastTraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + LastTraceInformation_set, hf_index, ett_x411_LastTraceInformation); + + return offset; +} +static int dissect_last_trace_information_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_LastTraceInformation(TRUE, tvb, offset, pinfo, tree, hf_x411_last_trace_information); +} + + + +static int +dissect_x411_MTAOriginallyIntendedRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_report_originally_intended_recipient_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTAOriginallyIntendedRecipientName(TRUE, tvb, offset, pinfo, tree, hf_x411_report_originally_intended_recipient_name); +} + + + +int +dissect_x411_SupplementaryInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_supplementary_information_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SupplementaryInformation(TRUE, tvb, offset, pinfo, tree, hf_x411_supplementary_information); +} + + +static const ber_sequence_t PerRecipientReportTransferFields_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mta_actual_recipient_name_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_originally_specified_recipient_number_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_per_recipient_indicators_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_last_trace_information_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_report_originally_intended_recipient_name_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supplementary_information_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientReportTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientReportTransferFields_set, hf_index, ett_x411_PerRecipientReportTransferFields); + + return offset; +} +static int dissect_per_recipient_fields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientReportTransferFields(FALSE, tvb, offset, pinfo, tree, hf_x411_per_recipient_fields_item); +} + + +static const ber_sequence_t SEQUENCE_OF_PerRecipientReportTransferFields_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_fields_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_PerRecipientReportTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_PerRecipientReportTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientReportTransferFields); + + return offset; +} +static int dissect_per_recipient_report_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_PerRecipientReportTransferFields(TRUE, tvb, offset, pinfo, tree, hf_x411_per_recipient_report_fields); +} + + +static const ber_sequence_t ReportTransferContent_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_subject_identifier }, + { BER_CLASS_APP, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_subject_intermediate_trace_information }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_returned_content_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additional_information_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_per_recipient_report_fields_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ReportTransferContent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ReportTransferContent_set, hf_index, ett_x411_ReportTransferContent); + + return offset; +} +static int dissect_report_content(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ReportTransferContent(FALSE, tvb, offset, pinfo, tree, hf_x411_report_content); +} + + +static const ber_sequence_t Report_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_report_envelope }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_report_content }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_Report(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Report_sequence, hf_index, ett_x411_Report); + + return offset; +} +static int dissect_report_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Report(TRUE, tvb, offset, pinfo, tree, hf_x411_report); +} + + +static const value_string x411_MTS_APDU_vals[] = { + { 0, "message" }, + { 2, "probe" }, + { 1, "report" }, + { 0, NULL } +}; + +static const ber_choice_t MTS_APDU_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_message_impl }, + { 2, BER_CLASS_CON, 2, 0, dissect_probe_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_report_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_MTS_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + MTS_APDU_choice, hf_index, ett_x411_MTS_APDU, + NULL); + + return offset; +} + + + +static int +dissect_x411_MTAOriginatorRequestedAlternateRecipient(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string x411_T_attempted_vals[] = { + { 0, "mta" }, + { 1, "domain" }, + { 0, NULL } +}; + +static const ber_choice_t T_attempted_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_mta }, + { 1, BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_domain }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_attempted(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_attempted_choice, hf_index, ett_x411_T_attempted, + NULL); + + return offset; +} +static int dissect_attempted(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_attempted(FALSE, tvb, offset, pinfo, tree, hf_x411_attempted); +} + + +static const ber_sequence_t MTASuppliedInformation_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_arrival_time_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_routing_action_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_attempted }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_time_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_other_actions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MTASuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MTASuppliedInformation_set, hf_index, ett_x411_MTASuppliedInformation); + + return offset; +} +static int dissect_mta_supplied_information(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTASuppliedInformation(FALSE, tvb, offset, pinfo, tree, hf_x411_mta_supplied_information); +} + + +static const ber_sequence_t InternalTraceInformationElement_sequence[] = { + { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_global_domain_identifier }, + { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_mta_name }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_mta_supplied_information }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_InternalTraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + InternalTraceInformationElement_sequence, hf_index, ett_x411_InternalTraceInformationElement); + + return offset; +} +static int dissect_InternalTraceInformation_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_InternalTraceInformationElement(FALSE, tvb, offset, pinfo, tree, hf_x411_InternalTraceInformation_item); +} + + +static const ber_sequence_t InternalTraceInformation_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_InternalTraceInformation_item }, +}; + +static int +dissect_x411_InternalTraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + InternalTraceInformation_sequence_of, hf_index, ett_x411_InternalTraceInformation); + + return offset; +} + + +static const value_string x411_ObjectName_vals[] = { + { 0, "user-agent" }, + { 1, "mTA" }, + { 2, "message-store" }, + { 0, NULL } +}; + +static const ber_choice_t ObjectName_choice[] = { + { 0, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_user_agent }, + { 1, BER_CLASS_CON, 0, 0, dissect_mTA_impl }, + { 2, BER_CLASS_CON, 4, 0, dissect_message_store_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ObjectName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ObjectName_choice, hf_index, ett_x411_ObjectName, + NULL); + + return offset; +} +static int dissect_initiator_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ObjectName(FALSE, tvb, offset, pinfo, tree, hf_x411_initiator_name); +} +static int dissect_responder_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ObjectName(FALSE, tvb, offset, pinfo, tree, hf_x411_responder_name); +} + + +static const ber_sequence_t DeliveryQueue_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_messages_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_queue_octets_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_DeliveryQueue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DeliveryQueue_set, hf_index, ett_x411_DeliveryQueue); + + return offset; +} +static int dissect_urgent_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliveryQueue(TRUE, tvb, offset, pinfo, tree, hf_x411_urgent); +} +static int dissect_normal_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliveryQueue(TRUE, tvb, offset, pinfo, tree, hf_x411_normal); +} +static int dissect_non_urgent_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliveryQueue(TRUE, tvb, offset, pinfo, tree, hf_x411_non_urgent); +} + + +static const ber_sequence_t MessagesWaiting_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_urgent_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_normal_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_non_urgent_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessagesWaiting(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessagesWaiting_set, hf_index, ett_x411_MessagesWaiting); + + return offset; +} +static int dissect_messages_waiting(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessagesWaiting(FALSE, tvb, offset, pinfo, tree, hf_x411_messages_waiting); +} + + +static const ber_sequence_t MTSBindArgument_set[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator_name }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_messages_waiting }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator_credentials_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_security_context_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MTSBindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MTSBindArgument_set, hf_index, ett_x411_MTSBindArgument); + + return offset; +} + + +static const ber_sequence_t MTSBindResult_set[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_responder_name }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_messages_waiting }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_responder_credentials_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MTSBindResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MTSBindResult_set, hf_index, ett_x411_MTSBindResult); + + return offset; +} + + +static const value_string x411_MTSBindError_vals[] = { + { 0, "busy" }, + { 2, "authentication-error" }, + { 3, "unacceptable-dialogue-mode" }, + { 4, "unacceptable-security-context" }, + { 5, "inadequate-association-confidentiality" }, + { 0, NULL } +}; + + +static int +dissect_x411_MTSBindError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_ORAddressAndOrDirectoryName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_DLExemptedRecipients_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORAddressAndOrDirectoryName(FALSE, tvb, offset, pinfo, tree, hf_x411_DLExemptedRecipients_item); +} + + + +static int +dissect_x411_MTSOriginatorName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_mts_originator_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSOriginatorName(FALSE, tvb, offset, pinfo, tree, hf_x411_mts_originator_name); +} + + + +static int +dissect_x411_MTSRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_ImproperlySpecifiedRecipients_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSRecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_ImproperlySpecifiedRecipients_item); +} +static int dissect_submission_recipient_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSRecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_submission_recipient_name); +} +static int dissect_probe_recipient_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSRecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_probe_recipient_name); +} + + +static const asn_namedbit OriginatorReportRequest_bits[] = { + { 3, &hf_x411_OriginatorReportRequest_report, -1, -1, "report", NULL }, + { 4, &hf_x411_OriginatorReportRequest_non_delivery_report, -1, -1, "non-delivery-report", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_OriginatorReportRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + OriginatorReportRequest_bits, hf_index, ett_x411_OriginatorReportRequest, + NULL); + + return offset; +} +static int dissect_originator_report_request_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OriginatorReportRequest(TRUE, tvb, offset, pinfo, tree, hf_x411_originator_report_request); +} + + +static const ber_sequence_t PerRecipientMessageSubmissionFields_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_submission_recipient_name }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originator_report_request_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientMessageSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientMessageSubmissionFields_set, hf_index, ett_x411_PerRecipientMessageSubmissionFields); + + return offset; +} +static int dissect_per_recipient_message_submission_fields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientMessageSubmissionFields(FALSE, tvb, offset, pinfo, tree, hf_x411_per_recipient_message_submission_fields_item); +} + + +static const ber_sequence_t SEQUENCE_OF_PerRecipientMessageSubmissionFields_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_message_submission_fields_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_PerRecipientMessageSubmissionFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields); + + return offset; +} +static int dissect_per_recipient_message_submission_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields(TRUE, tvb, offset, pinfo, tree, hf_x411_per_recipient_message_submission_fields); +} + + +static const ber_sequence_t MessageSubmissionEnvelope_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mts_originator_name }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_priority }, + { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_delivery_time_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_per_recipient_message_submission_fields_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageSubmissionEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageSubmissionEnvelope_set, hf_index, ett_x411_MessageSubmissionEnvelope); + + return offset; +} +static int dissect_message_submission_envelope(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageSubmissionEnvelope(FALSE, tvb, offset, pinfo, tree, hf_x411_message_submission_envelope); +} + + +static const ber_sequence_t MessageSubmissionArgument_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_submission_envelope }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_content }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageSubmissionArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + MessageSubmissionArgument_sequence, hf_index, ett_x411_MessageSubmissionArgument); + + return offset; +} + + + +static int +dissect_x411_MessageSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_message_submission_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageSubmissionIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_message_submission_identifier); +} + + + +static int +dissect_x411_MessageSubmissionTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_message_submission_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageSubmissionTime(TRUE, tvb, offset, pinfo, tree, hf_x411_message_submission_time); +} + + +static const ber_sequence_t MessageSubmissionResult_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_submission_identifier }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_message_submission_time_impl }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageSubmissionResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageSubmissionResult_set, hf_index, ett_x411_MessageSubmissionResult); + + return offset; +} + + +static const ber_sequence_t PerRecipientProbeSubmissionFields_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_probe_recipient_name }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originator_report_request_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientProbeSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientProbeSubmissionFields_set, hf_index, ett_x411_PerRecipientProbeSubmissionFields); + + return offset; +} +static int dissect_per_recipient_probe_submission_fields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientProbeSubmissionFields(FALSE, tvb, offset, pinfo, tree, hf_x411_per_recipient_probe_submission_fields_item); +} + + +static const ber_sequence_t SEQUENCE_OF_PerRecipientProbeSubmissionFields_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_probe_submission_fields_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_PerRecipientProbeSubmissionFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields); + + return offset; +} +static int dissect_per_recipient_probe_submission_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields(TRUE, tvb, offset, pinfo, tree, hf_x411_per_recipient_probe_submission_fields); +} + + +static const ber_sequence_t ProbeSubmissionEnvelope_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mts_originator_name }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_length_impl }, + { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_per_recipient_probe_submission_fields_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ProbeSubmissionEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ProbeSubmissionEnvelope_set, hf_index, ett_x411_ProbeSubmissionEnvelope); + + return offset; +} + + + +static int +dissect_x411_ProbeSubmissionArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ProbeSubmissionEnvelope(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ProbeSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_probe_submission_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ProbeSubmissionIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_probe_submission_identifier); +} + + + +static int +dissect_x411_ProbeSubmissionTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_probe_submission_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ProbeSubmissionTime(TRUE, tvb, offset, pinfo, tree, hf_x411_probe_submission_time); +} + + +static const ber_sequence_t ProbeSubmissionResult_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_probe_submission_identifier }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_probe_submission_time_impl }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ProbeSubmissionResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ProbeSubmissionResult_set, hf_index, ett_x411_ProbeSubmissionResult); + + return offset; +} + + + +static int +dissect_x411_CancelDeferredDeliveryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MessageSubmissionIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_CancelDeferredDeliveryResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index); + + return offset; +} + + + +static int +dissect_x411_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index); + + return offset; +} +static int dissect_restrict_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_x411_restrict); +} +static int dissect_permitted(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_x411_permitted); +} + + +static const asn_namedbit Operations_bits[] = { + { 0, &hf_x411_Operations_probe_submission_or_report_delivery, -1, -1, "probe-submission-or-report-delivery", NULL }, + { 1, &hf_x411_Operations_message_submission_or_message_delivery, -1, -1, "message-submission-or-message-delivery", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_Operations(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + Operations_bits, hf_index, ett_x411_Operations, + NULL); + + return offset; +} +static int dissect_waiting_operations_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Operations(TRUE, tvb, offset, pinfo, tree, hf_x411_waiting_operations); +} +static int dissect_permissible_operations_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Operations(TRUE, tvb, offset, pinfo, tree, hf_x411_permissible_operations); +} + + +static const ber_sequence_t ContentTypes_set_of[1] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ContentTypes_item }, +}; + +static int +dissect_x411_ContentTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + ContentTypes_set_of, hf_index, ett_x411_ContentTypes); + + return offset; +} +static int dissect_permissible_content_types_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_permissible_content_types); +} +static int dissect_content_types_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ContentTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_content_types); +} + + +static const ber_sequence_t EncodedInformationTypesConstraints_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unacceptable_eits_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acceptable_eits_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_exclusively_acceptable_eits_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_EncodedInformationTypesConstraints(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + EncodedInformationTypesConstraints_sequence, hf_index, ett_x411_EncodedInformationTypesConstraints); + + return offset; +} +static int dissect_encoded_information_types_constraints_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_EncodedInformationTypesConstraints(TRUE, tvb, offset, pinfo, tree, hf_x411_encoded_information_types_constraints); +} + + + +static int +dissect_x411_PermissibleEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_EncodedInformationTypesConstraints(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_permissible_encoded_information_types(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PermissibleEncodedInformationTypes(FALSE, tvb, offset, pinfo, tree, hf_x411_permissible_encoded_information_types); +} + + +static const ber_sequence_t Controls_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restrict_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_operations_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_maximum_content_length_impl }, + { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_lowest_priority }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_content_types_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_encoded_information_types }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_security_context_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_Controls(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Controls_set, hf_index, ett_x411_Controls); + + return offset; +} + + + +static int +dissect_x411_SubmissionControls(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Controls(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_SubmissionControlArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_SubmissionControls(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const asn_namedbit WaitingMessages_bits[] = { + { 0, &hf_x411_WaitingMessages_long_content, -1, -1, "long-content", NULL }, + { 1, &hf_x411_WaitingMessages_low_priority, -1, -1, "low-priority", NULL }, + { 2, &hf_x411_WaitingMessages_other_security_labels, -1, -1, "other-security-labels", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_WaitingMessages(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + WaitingMessages_bits, hf_index, ett_x411_WaitingMessages, + NULL); + + return offset; +} +static int dissect_waiting_messages_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_WaitingMessages(TRUE, tvb, offset, pinfo, tree, hf_x411_waiting_messages); +} + + +static const ber_sequence_t SET_OF_ContentType_set_of[1] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_waiting_content_types_item }, +}; + +static int +dissect_x411_SET_OF_ContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SET_OF_ContentType_set_of, hf_index, ett_x411_SET_OF_ContentType); + + return offset; +} +static int dissect_waiting_content_types_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SET_OF_ContentType(TRUE, tvb, offset, pinfo, tree, hf_x411_waiting_content_types); +} + + +static const ber_sequence_t Waiting_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_operations_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_messages_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_content_types_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_waiting_encoded_information_types }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_Waiting(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Waiting_set, hf_index, ett_x411_Waiting); + + return offset; +} + + + +static int +dissect_x411_SubmissionControlResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Waiting(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t ImproperlySpecifiedRecipients_sequence_of[1] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_ImproperlySpecifiedRecipients_item }, +}; + +static int +dissect_x411_ImproperlySpecifiedRecipients(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + ImproperlySpecifiedRecipients_sequence_of, hf_index, ett_x411_ImproperlySpecifiedRecipients); + + return offset; +} + + +static const value_string x411_SecurityProblem_vals[] = { + { 0, "assemby-instructions-conflict-with-security-services" }, + { 1, "authentication-problem" }, + { 2, "authentication-failure-on-subject-message" }, + { 3, "confidentiality-association-problem" }, + { 4, "decryption-failed" }, + { 5, "decryption-key-unobtainable" }, + { 6, "failure-of-proof-of-message" }, + { 7, "forbidden-user-security-label-register" }, + { 8, "incompatible-change-with-original-security-context" }, + { 9, "integrity-failure-on-subject-message" }, + { 10, "invalid-security-label" }, + { 11, "invalid-security-label-update" }, + { 12, "key-failure" }, + { 13, "mandatory-parameter-absence" }, + { 14, "operation-security-failure" }, + { 15, "redirection-prohibited" }, + { 16, "refused-alternate-recipient-name" }, + { 17, "repudiation-failure-of-message" }, + { 18, "responder-credentials-checking-problem" }, + { 19, "security-context-failure" }, + { 20, "security-context-problem" }, + { 21, "security-policy-violation" }, + { 22, "security-services-refusal" }, + { 23, "token-decryption-failed" }, + { 24, "token-error" }, + { 25, "unable-to-aggregate-security-labels" }, + { 26, "unauthorised-dl-name" }, + { 27, "unauthorised-entry-class" }, + { 28, "unauthorised-originally-intended-recipient-name" }, + { 29, "unauthorised-originator-name" }, + { 30, "unauthorised-recipient-name" }, + { 31, "unauthorised-security-label-update" }, + { 32, "unauthorised-user-name" }, + { 33, "unknown-security-label" }, + { 34, "unsupported-algorithm-identifier" }, + { 35, "unsupported-security-policy" }, + { 0, NULL } +}; + + +static int +dissect_x411_SecurityProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_MessageDeliveryIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_message_delivery_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageDeliveryIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_message_delivery_identifier); +} + + +static const value_string x411_DeliveredContentType_vals[] = { + { 0, "built-in" }, + { 1, "extended" }, + { 0, NULL } +}; + +static const ber_choice_t DeliveredContentType_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_built_in_impl }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_extended }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_DeliveredContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + DeliveredContentType_choice, hf_index, ett_x411_DeliveredContentType, + NULL); + + return offset; +} +static int dissect_delivered_content_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliveredContentType(FALSE, tvb, offset, pinfo, tree, hf_x411_delivered_content_type); +} + + + +static int +dissect_x411_DeliveredOriginatorName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_originator_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliveredOriginatorName(FALSE, tvb, offset, pinfo, tree, hf_x411_originator_name); +} + + +static const asn_namedbit DeliveryFlags_bits[] = { + { 1, &hf_x411_DeliveryFlags_implicit_conversion_prohibited, -1, -1, "implicit-conversion-prohibited", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_DeliveryFlags(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + DeliveryFlags_bits, hf_index, ett_x411_DeliveryFlags, + NULL); + + return offset; +} +static int dissect_delivery_flags_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliveryFlags(TRUE, tvb, offset, pinfo, tree, hf_x411_delivery_flags); +} + + + +static int +dissect_x411_OtherRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_OtherRecipientNames_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OtherRecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_OtherRecipientNames_item); +} + + +static const ber_sequence_t OtherRecipientNames_sequence_of[1] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_OtherRecipientNames_item }, +}; + +static int +dissect_x411_OtherRecipientNames(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + OtherRecipientNames_sequence_of, hf_index, ett_x411_OtherRecipientNames); + + return offset; +} +static int dissect_other_recipient_names_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OtherRecipientNames(TRUE, tvb, offset, pinfo, tree, hf_x411_other_recipient_names); +} + + + +static int +dissect_x411_ThisRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_this_recipient_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ThisRecipientName(TRUE, tvb, offset, pinfo, tree, hf_x411_this_recipient_name); +} + + + +static int +dissect_x411_MTSOriginallyIntendedRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_originally_intended_recipient_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSOriginallyIntendedRecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_originally_intended_recipient_name); +} +static int dissect_originally_intended_recipient_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSOriginallyIntendedRecipientName(TRUE, tvb, offset, pinfo, tree, hf_x411_originally_intended_recipient_name); +} + + +static const ber_sequence_t OtherMessageDeliveryFields_set[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_delivered_content_type }, + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_originator_name }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_original_encoded_information_types_impl }, + { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_priority }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_flags_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_other_recipient_names_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_this_recipient_name_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originally_intended_recipient_name_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_converted_encoded_information_types_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_message_submission_time_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_identifier_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +int +dissect_x411_OtherMessageDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OtherMessageDeliveryFields_set, hf_index, ett_x411_OtherMessageDeliveryFields); + + return offset; +} +static int dissect_other_fields(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OtherMessageDeliveryFields(FALSE, tvb, offset, pinfo, tree, hf_x411_other_fields); +} + + +static const ber_sequence_t MessageDeliveryArgument_sequence[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_delivery_identifier }, + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_message_delivery_time }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_other_fields }, + { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_content }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageDeliveryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + MessageDeliveryArgument_sequence, hf_index, ett_x411_MessageDeliveryArgument); + + return offset; +} + + + +static int +dissect_x411_RecipientCertificate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_Certificates(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_recipient_certificate_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RecipientCertificate(TRUE, tvb, offset, pinfo, tree, hf_x411_recipient_certificate); +} + + +static const ber_sequence_t MessageDeliveryResult_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_certificate_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageDeliveryResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageDeliveryResult_set, hf_index, ett_x411_MessageDeliveryResult); + + return offset; +} + + + +static int +dissect_x411_SubjectSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_subject_submission_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SubjectSubmissionIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x411_subject_submission_identifier); +} + + + +static int +dissect_x411_MTSActualRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_actual_recipient_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSActualRecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_actual_recipient_name); +} +static int dissect_actual_recipient_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MTSActualRecipientName(TRUE, tvb, offset, pinfo, tree, hf_x411_actual_recipient_name); +} + + +static const ber_sequence_t PerRecipientReportDeliveryFields_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_actual_recipient_name_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_delivery_report_type_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originally_intended_recipient_name_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supplementary_information_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientReportDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientReportDeliveryFields_set, hf_index, ett_x411_PerRecipientReportDeliveryFields); + + return offset; +} +static int dissect_per_recipient_report_delivery_fields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientReportDeliveryFields(FALSE, tvb, offset, pinfo, tree, hf_x411_per_recipient_report_delivery_fields_item); +} + + +static const ber_sequence_t SEQUENCE_OF_PerRecipientReportDeliveryFields_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_report_delivery_fields_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_PerRecipientReportDeliveryFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields); + + return offset; +} +static int dissect_per_recipient_report_delivery_fields(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields(FALSE, tvb, offset, pinfo, tree, hf_x411_per_recipient_report_delivery_fields); +} + + +static const ber_sequence_t ReportDeliveryArgument_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_subject_submission_identifier }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_per_recipient_report_delivery_fields }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_returned_content_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ReportDeliveryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ReportDeliveryArgument_set, hf_index, ett_x411_ReportDeliveryArgument); + + return offset; +} + + +static const value_string x411_ReportDeliveryResult_vals[] = { + { 0, "empty-result" }, + { 1, "extensions" }, + { 2, "extensions" }, + { 0, NULL } +}; + +static const ber_choice_t ReportDeliveryResult_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_empty_result }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_extensions }, + { 2, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_extensions }, + { 3, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_extensions }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ReportDeliveryResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ReportDeliveryResult_choice, hf_index, ett_x411_ReportDeliveryResult, + NULL); + + return offset; +} + + +static const ber_sequence_t DeliveryControlArgument_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restrict_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_operations_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_maximum_content_length_impl }, + { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_lowest_priority }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_content_types_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_encoded_information_types }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_security_context_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_DeliveryControlArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DeliveryControlArgument_set, hf_index, ett_x411_DeliveryControlArgument); + + return offset; +} + + +static const ber_sequence_t DeliveryControlResult_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_operations_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_messages_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_content_types_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_waiting_encoded_information_types }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_DeliveryControlResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DeliveryControlResult_set, hf_index, ett_x411_DeliveryControlResult); + + return offset; +} + + +static const value_string x411_RefusedArgument_vals[] = { + { 0, "user-name" }, + { 1, "user-address" }, + { 2, "deliverable-content-types" }, + { 3, "deliverable-maximum-content-length" }, + { 4, "deliverable-encoded-information-types-constraints" }, + { 5, "deliverable-security-labels" }, + { 6, "recipient-assigned-redirections" }, + { 7, "restricted-delivery" }, + { 8, "retrieve-registrations" }, + { 10, "restrict" }, + { 11, "permissible-operations" }, + { 12, "permissible-lowest-priority" }, + { 13, "permissible-encoded-information-types" }, + { 14, "permissible-content-types" }, + { 15, "permissible-maximum-content-length" }, + { 16, "permissible-security-context" }, + { 0, NULL } +}; + + +static int +dissect_x411_RefusedArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_built_in_argument_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RefusedArgument(TRUE, tvb, offset, pinfo, tree, hf_x411_built_in_argument); +} + + + +static int +dissect_x411_T_refused_extension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/*XXX not implemented yet */ + + + return offset; +} +static int dissect_refused_extension(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_refused_extension(FALSE, tvb, offset, pinfo, tree, hf_x411_refused_extension); +} + + +static const value_string x411_T_refused_argument_vals[] = { + { 0, "built-in-argument" }, + { 1, "refused-extension" }, + { 0, NULL } +}; + +static const ber_choice_t T_refused_argument_choice[] = { + { 0, BER_CLASS_CON, 1, 0, dissect_built_in_argument_impl }, + { 1, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_refused_extension }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_refused_argument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_refused_argument_choice, hf_index, ett_x411_T_refused_argument, + NULL); + + return offset; +} +static int dissect_refused_argument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_refused_argument(FALSE, tvb, offset, pinfo, tree, hf_x411_refused_argument); +} + + +static const value_string x411_RefusalReason_vals[] = { + { 0, "facility-unavailable" }, + { 1, "facility-not-subscribed" }, + { 2, "parameter-unacceptable" }, + { 0, NULL } +}; + + +static int +dissect_x411_RefusalReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_refusal_reason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RefusalReason(TRUE, tvb, offset, pinfo, tree, hf_x411_refusal_reason); +} + + +static const ber_sequence_t RefusedOperation_set[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_refused_argument }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_refusal_reason_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_RefusedOperation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RefusedOperation_set, hf_index, ett_x411_RefusedOperation); + + return offset; +} + + + +static int +dissect_x411_ProofOfDeliveryAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_DeliveryControls(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Controls(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UserName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_user_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UserName(FALSE, tvb, offset, pinfo, tree, hf_x411_user_name); +} + + +static const ber_sequence_t T_x121_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x121_address }, + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tsap_id }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_x121(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_x121_sequence, hf_index, ett_x411_T_x121); + + return offset; +} +static int dissect_x121_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_x121(TRUE, tvb, offset, pinfo, tree, hf_x411_x121); +} + + + +static int +dissect_x411_PSAPAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509sat_PresentationAddress(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_presentation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PSAPAddress(TRUE, tvb, offset, pinfo, tree, hf_x411_presentation); +} + + +static const value_string x411_UserAddress_vals[] = { + { 0, "x121" }, + { 1, "presentation" }, + { 0, NULL } +}; + +static const ber_choice_t UserAddress_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_x121_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_presentation_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_UserAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + UserAddress_choice, hf_index, ett_x411_UserAddress, + NULL); + + return offset; +} +static int dissect_user_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UserAddress(TRUE, tvb, offset, pinfo, tree, hf_x411_user_address); +} + + +static const ber_sequence_t SET_OF_Priority_set_of[1] = { + { BER_CLASS_APP, 7, BER_FLAGS_NOOWNTAG, dissect_priority_item }, +}; + +static int +dissect_x411_SET_OF_Priority(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SET_OF_Priority_set_of, hf_index, ett_x411_SET_OF_Priority); + + return offset; +} +static int dissect_class_priority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SET_OF_Priority(TRUE, tvb, offset, pinfo, tree, hf_x411_class_priority); +} + + +static const value_string x411_T_objects_vals[] = { + { 0, "messages" }, + { 1, "reports" }, + { 2, "both" }, + { 0, NULL } +}; + + +static int +dissect_x411_T_objects(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_objects_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_objects(TRUE, tvb, offset, pinfo, tree, hf_x411_objects); +} + + +static const asn_namedbit T_source_type_bits[] = { + { 0, &hf_x411_T_source_type_originated_by, -1, -1, "originated-by", NULL }, + { 1, &hf_x411_T_source_type_redirected_by, -1, -1, "redirected-by", NULL }, + { 2, &hf_x411_T_source_type_dl_expanded_by, -1, -1, "dl-expanded-by", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_T_source_type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + T_source_type_bits, hf_index, ett_x411_T_source_type, + NULL); + + return offset; +} +static int dissect_source_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_source_type(FALSE, tvb, offset, pinfo, tree, hf_x411_source_type); +} + + +static const value_string x411_ExactOrPattern_vals[] = { + { 0, "exact-match" }, + { 1, "pattern-match" }, + { 0, NULL } +}; + +static const ber_choice_t ExactOrPattern_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_exact_match_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_pattern_match_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ExactOrPattern(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ExactOrPattern_choice, hf_index, ett_x411_ExactOrPattern, + NULL); + + return offset; +} +static int dissect_source_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExactOrPattern(FALSE, tvb, offset, pinfo, tree, hf_x411_source_name); +} + + +static const ber_sequence_t Restriction_set[] = { + { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permitted }, + { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_source_type }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_source_name }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_Restriction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Restriction_set, hf_index, ett_x411_Restriction); + + return offset; +} +static int dissect_applies_only_to_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Restriction(FALSE, tvb, offset, pinfo, tree, hf_x411_applies_only_to_item); +} +static int dissect_RestrictedDelivery_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Restriction(FALSE, tvb, offset, pinfo, tree, hf_x411_RestrictedDelivery_item); +} + + +static const ber_sequence_t SEQUENCE_OF_Restriction_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_applies_only_to_item }, +}; + +static int +dissect_x411_SEQUENCE_OF_Restriction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + SEQUENCE_OF_Restriction_sequence_of, hf_index, ett_x411_SEQUENCE_OF_Restriction); + + return offset; +} +static int dissect_applies_only_to_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SEQUENCE_OF_Restriction(TRUE, tvb, offset, pinfo, tree, hf_x411_applies_only_to); +} + + +static const ber_sequence_t MessageClass_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_types_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_maximum_content_length_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encoded_information_types_constraints_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_security_labels_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_class_priority_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_objects_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_applies_only_to_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageClass_set, hf_index, ett_x411_MessageClass); + + return offset; +} + + + +static int +dissect_x411_DeliverableClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MessageClass(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_deliverable_class_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DeliverableClass(FALSE, tvb, offset, pinfo, tree, hf_x411_deliverable_class_item); +} + + +static const ber_sequence_t SET_OF_DeliverableClass_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_deliverable_class_item }, +}; + +static int +dissect_x411_SET_OF_DeliverableClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SET_OF_DeliverableClass_set_of, hf_index, ett_x411_SET_OF_DeliverableClass); + + return offset; +} +static int dissect_deliverable_class(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SET_OF_DeliverableClass(FALSE, tvb, offset, pinfo, tree, hf_x411_deliverable_class); +} + + + +static int +dissect_x411_DefaultDeliveryControls(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Controls(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_default_delivery_controls(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DefaultDeliveryControls(FALSE, tvb, offset, pinfo, tree, hf_x411_default_delivery_controls); +} + + + +static int +dissect_x411_RedirectionClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_MessageClass(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_redirection_classes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RedirectionClass(FALSE, tvb, offset, pinfo, tree, hf_x411_redirection_classes_item); +} + + +static const ber_sequence_t SET_OF_RedirectionClass_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_redirection_classes_item }, +}; + +static int +dissect_x411_SET_OF_RedirectionClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + SET_OF_RedirectionClass_set_of, hf_index, ett_x411_SET_OF_RedirectionClass); + + return offset; +} +static int dissect_redirection_classes_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_SET_OF_RedirectionClass(TRUE, tvb, offset, pinfo, tree, hf_x411_redirection_classes); +} + + + +static int +dissect_x411_RecipientAssignedAlternateRecipient(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_recipient_assigned_alternate_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RecipientAssignedAlternateRecipient(TRUE, tvb, offset, pinfo, tree, hf_x411_recipient_assigned_alternate_recipient); +} + + +static const ber_sequence_t RecipientRedirection_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirection_classes_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_assigned_alternate_recipient_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_RecipientRedirection(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RecipientRedirection_set, hf_index, ett_x411_RecipientRedirection); + + return offset; +} +static int dissect_Redirections_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RecipientRedirection(FALSE, tvb, offset, pinfo, tree, hf_x411_Redirections_item); +} + + +static const ber_sequence_t Redirections_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_Redirections_item }, +}; + +static int +dissect_x411_Redirections(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + Redirections_sequence_of, hf_index, ett_x411_Redirections); + + return offset; +} +static int dissect_redirections_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Redirections(TRUE, tvb, offset, pinfo, tree, hf_x411_redirections); +} + + +static const ber_sequence_t RestrictedDelivery_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_RestrictedDelivery_item }, +}; + +static int +dissect_x411_RestrictedDelivery(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + RestrictedDelivery_sequence_of, hf_index, ett_x411_RestrictedDelivery); + + return offset; +} +static int dissect_restricted_delivery_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RestrictedDelivery(TRUE, tvb, offset, pinfo, tree, hf_x411_restricted_delivery); +} + + +static const asn_namedbit T_standard_parameters_bits[] = { + { 0, &hf_x411_T_standard_parameters_user_name, -1, -1, "user-name", NULL }, + { 1, &hf_x411_T_standard_parameters_user_address, -1, -1, "user-address", NULL }, + { 2, &hf_x411_T_standard_parameters_deliverable_class, -1, -1, "deliverable-class", NULL }, + { 3, &hf_x411_T_standard_parameters_default_delivery_controls, -1, -1, "default-delivery-controls", NULL }, + { 4, &hf_x411_T_standard_parameters_redirections, -1, -1, "redirections", NULL }, + { 5, &hf_x411_T_standard_parameters_restricted_delivery, -1, -1, "restricted-delivery", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_T_standard_parameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + T_standard_parameters_bits, hf_index, ett_x411_T_standard_parameters, + NULL); + + return offset; +} +static int dissect_standard_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_standard_parameters(TRUE, tvb, offset, pinfo, tree, hf_x411_standard_parameters); +} + + + +static int +dissect_x411_T_extensions_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/*XXX not implemented yet */ + + + return offset; +} +static int dissect_type_extensions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_extensions_item(FALSE, tvb, offset, pinfo, tree, hf_x411_type_extensions_item); +} + + +static const ber_sequence_t T_extensions_set_of[1] = { + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_type_extensions_item }, +}; + +static int +dissect_x411_T_extensions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + T_extensions_set_of, hf_index, ett_x411_T_extensions); + + return offset; +} +static int dissect_type_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_extensions(TRUE, tvb, offset, pinfo, tree, hf_x411_type_extensions); +} + + +static const ber_sequence_t RegistrationTypes_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_standard_parameters_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_type_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_RegistrationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RegistrationTypes_sequence, hf_index, ett_x411_RegistrationTypes); + + return offset; +} +static int dissect_retrieve_registrations_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RegistrationTypes(TRUE, tvb, offset, pinfo, tree, hf_x411_retrieve_registrations); +} + + +static const ber_sequence_t RegisterArgument_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_user_name }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_user_address_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_deliverable_class }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_default_delivery_controls }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirections_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restricted_delivery_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_retrieve_registrations_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_RegisterArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RegisterArgument_set, hf_index, ett_x411_RegisterArgument); + + return offset; +} +static int dissect_registered_information_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RegisterArgument(TRUE, tvb, offset, pinfo, tree, hf_x411_registered_information); +} + + +static const ber_sequence_t T_non_empty_result_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_registered_information_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_non_empty_result(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + T_non_empty_result_set, hf_index, ett_x411_T_non_empty_result); + + return offset; +} +static int dissect_non_empty_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_non_empty_result(FALSE, tvb, offset, pinfo, tree, hf_x411_non_empty_result); +} + + +static const value_string x411_RegisterResult_vals[] = { + { 0, "empty-result" }, + { 1, "non-empty-result" }, + { 0, NULL } +}; + +static const ber_choice_t RegisterResult_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_empty_result }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_non_empty_result }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_RegisterResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + RegisterResult_choice, hf_index, ett_x411_RegisterResult, + NULL); + + return offset; +} + + +static const ber_sequence_t ChangeCredentialsArgument_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_old_credentials_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_new_credentials_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ChangeCredentialsArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ChangeCredentialsArgument_set, hf_index, ett_x411_ChangeCredentialsArgument); + + return offset; +} + + +static const ber_sequence_t MessageDeliveryEnvelope_sequence[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_delivery_identifier }, + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_message_delivery_time }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_other_fields }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_MessageDeliveryEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + MessageDeliveryEnvelope_sequence, hf_index, ett_x411_MessageDeliveryEnvelope); + + return offset; +} + + +static const ber_sequence_t ReportDeliveryEnvelope_set[] = { + { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_subject_submission_identifier }, + { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_per_recipient_report_delivery_fields }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ReportDeliveryEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ReportDeliveryEnvelope_set, hf_index, ett_x411_ReportDeliveryEnvelope); + + return offset; +} + + +static const value_string x411_RecipientReassignmentProhibited_vals[] = { + { 0, "recipient-reassignment-allowed" }, + { 1, "recipient-reassignment-prohibited" }, + { 0, NULL } +}; + + +static int +dissect_x411_RecipientReassignmentProhibited(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_MTSOriginatorRequestedAlternateRecipient(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string x411_DLExpansionProhibited_vals[] = { + { 0, "dl-expansion-allowed" }, + { 1, "dl-expansion-prohibited" }, + { 0, NULL } +}; + + +static int +dissect_x411_DLExpansionProhibited(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string x411_ConversionWithLossProhibited_vals[] = { + { 0, "conversion-with-loss-allowed" }, + { 1, "conversion-with-loss-prohibited" }, + { 0, NULL } +}; + + +static int +dissect_x411_ConversionWithLossProhibited(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_LatestDeliveryTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string x411_RequestedDeliveryMethod_item_vals[] = { + { 0, "any-delivery-method" }, + { 1, "mhs-delivery" }, + { 2, "physical-delivery" }, + { 3, "telex-delivery" }, + { 4, "teletex-delivery" }, + { 5, "g3-facsimile-delivery" }, + { 6, "g4-facsimile-delivery" }, + { 7, "ia5-terminal-delivery" }, + { 8, "videotex-delivery" }, + { 9, "telephone-delivery" }, + { 0, NULL } +}; + + +static int +dissect_x411_RequestedDeliveryMethod_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_RequestedDeliveryMethod_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RequestedDeliveryMethod_item(FALSE, tvb, offset, pinfo, tree, hf_x411_RequestedDeliveryMethod_item); +} + + +static const ber_sequence_t RequestedDeliveryMethod_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_RequestedDeliveryMethod_item }, +}; + +static int +dissect_x411_RequestedDeliveryMethod(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + RequestedDeliveryMethod_sequence_of, hf_index, ett_x411_RequestedDeliveryMethod); + + return offset; +} + + +static const value_string x411_PhysicalForwardingProhibited_vals[] = { + { 0, "physical-forwarding-allowed" }, + { 1, "physical-forwarding-prohibited" }, + { 0, NULL } +}; + + +static int +dissect_x411_PhysicalForwardingProhibited(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string x411_PhysicalForwardingAddressRequest_vals[] = { + { 0, "physical-forwarding-address-not-requested" }, + { 1, "physical-forwarding-address-requested" }, + { 0, NULL } +}; + + +static int +dissect_x411_PhysicalForwardingAddressRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const asn_namedbit PhysicalDeliveryModes_bits[] = { + { 0, &hf_x411_PhysicalDeliveryModes_ordinary_mail, -1, -1, "ordinary-mail", NULL }, + { 1, &hf_x411_PhysicalDeliveryModes_special_delivery, -1, -1, "special-delivery", NULL }, + { 2, &hf_x411_PhysicalDeliveryModes_express_mail, -1, -1, "express-mail", NULL }, + { 3, &hf_x411_PhysicalDeliveryModes_counter_collection, -1, -1, "counter-collection", NULL }, + { 4, &hf_x411_PhysicalDeliveryModes_counter_collection_with_telephone_advice, -1, -1, "counter-collection-with-telephone-advice", NULL }, + { 5, &hf_x411_PhysicalDeliveryModes_counter_collection_with_telex_advice, -1, -1, "counter-collection-with-telex-advice", NULL }, + { 6, &hf_x411_PhysicalDeliveryModes_counter_collection_with_teletex_advice, -1, -1, "counter-collection-with-teletex-advice", NULL }, + { 7, &hf_x411_PhysicalDeliveryModes_bureau_fax_delivery, -1, -1, "bureau-fax-delivery", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x411_PhysicalDeliveryModes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + PhysicalDeliveryModes_bits, hf_index, ett_x411_PhysicalDeliveryModes, + NULL); + + return offset; +} + + +static const value_string x411_RegisteredMailType_vals[] = { + { 0, "non-registered-mail" }, + { 1, "registered-mail" }, + { 2, "registered-mail-to-addressee-in-person" }, + { 0, NULL } +}; + + +static int +dissect_x411_RegisteredMailType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_RecipientNumberForAdvice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_PhysicalRenditionAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t ORAddress_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_built_in_standard_attributes }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_built_in_domain_defined_attributes }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extension_attributes }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ORAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ORAddress_sequence, hf_index, ett_x411_ORAddress); + + return offset; +} + + + +static int +dissect_x411_OriginatorReturnAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddress(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string x411_PhysicalDeliveryReportRequest_vals[] = { + { 0, "return-of-undeliverable-mail-by-PDS" }, + { 1, "return-of-notification-by-PDS" }, + { 2, "return-of-notification-by-MHS" }, + { 3, "return-of-notification-by-MHS-and-PDS" }, + { 0, NULL } +}; + + +static int +dissect_x411_PhysicalDeliveryReportRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_OriginatorCertificate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_Certificates(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ContentConfidentialityAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ContentIntegrityAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_MessageOriginAuthenticationAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_MessageSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_SecurityLabel(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string x411_ProofOfSubmissionRequest_vals[] = { + { 0, "proof-of-submission-not-requested" }, + { 1, "proof-of-submission-requested" }, + { 0, NULL } +}; + + +static int +dissect_x411_ProofOfSubmissionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string x411_ProofOfDeliveryRequest_vals[] = { + { 0, "proof-of-delivery-not-requested" }, + { 1, "proof-of-delivery-requested" }, + { 0, NULL } +}; + + +static int +dissect_x411_ProofOfDeliveryRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string x411_ContentCorrelator_vals[] = { + { 0, "ia5text" }, + { 1, "octets" }, + { 0, NULL } +}; + +static const ber_choice_t ContentCorrelator_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_ia5text }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_octets }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ContentCorrelator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ContentCorrelator_choice, hf_index, ett_x411_ContentCorrelator, + NULL); + + return offset; +} + + + +static int +dissect_x411_ProbeOriginAuthenticationAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t IntendedRecipientName_sequence[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_intended_recipient }, + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_redirection_time }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_IntendedRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IntendedRecipientName_sequence, hf_index, ett_x411_IntendedRecipientName); + + return offset; +} +static int dissect_intended_recipient_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_IntendedRecipientName(FALSE, tvb, offset, pinfo, tree, hf_x411_intended_recipient_name); +} + + +static const value_string x411_RedirectionReason_vals[] = { + { 0, "recipient-assigned-alternate-recipient" }, + { 1, "originator-requested-alternate-recipient" }, + { 2, "recipient-MD-assigned-alternate-recipient" }, + { 3, "directory-look-up" }, + { 4, "alias" }, + { 0, NULL } +}; + + +static int +dissect_x411_RedirectionReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_redirection_reason(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_RedirectionReason(FALSE, tvb, offset, pinfo, tree, hf_x411_redirection_reason); +} + + +static const ber_sequence_t Redirection_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_intended_recipient_name }, + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_redirection_reason }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_Redirection(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + Redirection_sequence, hf_index, ett_x411_Redirection); + + return offset; +} +static int dissect_RedirectionHistory_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_Redirection(FALSE, tvb, offset, pinfo, tree, hf_x411_RedirectionHistory_item); +} + + +static const ber_sequence_t RedirectionHistory_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RedirectionHistory_item }, +}; + +static int +dissect_x411_RedirectionHistory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + RedirectionHistory_sequence_of, hf_index, ett_x411_RedirectionHistory); + + return offset; +} + + +static const ber_sequence_t DLExpansion_sequence[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_dl }, + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_dl_expansion_time }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_DLExpansion(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DLExpansion_sequence, hf_index, ett_x411_DLExpansion); + + return offset; +} +static int dissect_DLExpansionHistory_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_DLExpansion(FALSE, tvb, offset, pinfo, tree, hf_x411_DLExpansionHistory_item); +} + + +static const ber_sequence_t DLExpansionHistory_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DLExpansionHistory_item }, +}; + +static int +dissect_x411_DLExpansionHistory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + DLExpansionHistory_sequence_of, hf_index, ett_x411_DLExpansionHistory); + + return offset; +} + + + +static int +dissect_x411_PhysicalForwardingAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t OriginatorAndDLExpansion_sequence[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_originator_or_dl_name }, + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_origination_or_expansion_time }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_OriginatorAndDLExpansion(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + OriginatorAndDLExpansion_sequence, hf_index, ett_x411_OriginatorAndDLExpansion); + + return offset; +} +static int dissect_OriginatorAndDLExpansionHistory_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OriginatorAndDLExpansion(FALSE, tvb, offset, pinfo, tree, hf_x411_OriginatorAndDLExpansionHistory_item); +} + + +static const ber_sequence_t OriginatorAndDLExpansionHistory_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_OriginatorAndDLExpansionHistory_item }, +}; + +static int +dissect_x411_OriginatorAndDLExpansionHistory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + OriginatorAndDLExpansionHistory_sequence_of, hf_index, ett_x411_OriginatorAndDLExpansionHistory); + + return offset; +} + + + +static int +dissect_x411_ReportingDLName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ReportingMTACertificate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_Certificates(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ReportOriginAuthenticationAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t PerRecipientDeliveryReportFields_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_message_delivery_time }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_type_of_MTS_user }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_certificate_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientDeliveryReportFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientDeliveryReportFields_sequence, hf_index, ett_x411_PerRecipientDeliveryReportFields); + + return offset; +} +static int dissect_report_type_delivery_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientDeliveryReportFields(TRUE, tvb, offset, pinfo, tree, hf_x411_report_type_delivery); +} + + +static const ber_sequence_t PerRecipientNonDeliveryReportFields_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_non_delivery_reason_code }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_non_delivery_diagnostic_code }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientNonDeliveryReportFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientNonDeliveryReportFields_sequence, hf_index, ett_x411_PerRecipientNonDeliveryReportFields); + + return offset; +} +static int dissect_non_delivery_report_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_PerRecipientNonDeliveryReportFields(TRUE, tvb, offset, pinfo, tree, hf_x411_non_delivery_report); +} + + +static const value_string x411_T_report_type_vals[] = { + { 0, "delivery" }, + { 1, "non-delivery" }, + { 0, NULL } +}; + +static const ber_choice_t T_report_type_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_report_type_delivery_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_non_delivery_report_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_report_type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_report_type_choice, hf_index, ett_x411_T_report_type, + NULL); + + return offset; +} +static int dissect_report_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_report_type(FALSE, tvb, offset, pinfo, tree, hf_x411_report_type); +} + + +static const ber_sequence_t PerRecipientReportFields_sequence[] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_actual_recipient_name }, + { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_originally_intended_recipient_name }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_report_type }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PerRecipientReportFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PerRecipientReportFields_sequence, hf_index, ett_x411_PerRecipientReportFields); + + return offset; +} + + + +static int +dissect_x411_OriginatingMTACertificate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_Certificates(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ProofOfSubmissionAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t ReportingMTAName_sequence[] = { + { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_domain }, + { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_mta_name }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mta_directory_name_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_ReportingMTAName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReportingMTAName_sequence, hf_index, ett_x411_ReportingMTAName); + + return offset; +} + + +static const value_string x411_ExtendedCertificate_vals[] = { + { 0, "directory-entry" }, + { 1, "certificate" }, + { 0, NULL } +}; + +static const ber_choice_t ExtendedCertificate_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_directory_entry_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_certificate_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ExtendedCertificate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ExtendedCertificate_choice, hf_index, ett_x411_ExtendedCertificate, + NULL); + + return offset; +} +static int dissect_ExtendedCertificates_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedCertificate(FALSE, tvb, offset, pinfo, tree, hf_x411_ExtendedCertificates_item); +} + + +static const ber_sequence_t ExtendedCertificates_set_of[1] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ExtendedCertificates_item }, +}; + +int +dissect_x411_ExtendedCertificates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + ExtendedCertificates_set_of, hf_index, ett_x411_ExtendedCertificates); + + return offset; +} + + +static const ber_sequence_t DLExemptedRecipients_set_of[1] = { + { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_DLExemptedRecipients_item }, +}; + +static int +dissect_x411_DLExemptedRecipients(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + DLExemptedRecipients_set_of, hf_index, ett_x411_DLExemptedRecipients); + + return offset; +} + + +static const ber_sequence_t CertificateSelectors_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryption_recipient_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryption_originator_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_integrity_check_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_token_signature_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_message_origin_authentication_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_CertificateSelectors(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CertificateSelectors_set, hf_index, ett_x411_CertificateSelectors); + + return offset; +} + + + +static int +dissect_x411_CommonName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_TeletexCommonName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_BMPString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_BMPString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_two_octets(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_BMPString(FALSE, tvb, offset, pinfo, tree, hf_x411_two_octets); +} + + + +static int +dissect_x411_UniversalString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UniversalString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_four_octets(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalString(FALSE, tvb, offset, pinfo, tree, hf_x411_four_octets); +} + + +static const value_string x411_T_character_encoding_vals[] = { + { 0, "two-octets" }, + { 1, "four-octets" }, + { 0, NULL } +}; + +static const ber_choice_t T_character_encoding_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_BMPString, BER_FLAGS_NOOWNTAG, dissect_two_octets }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_UniversalString, BER_FLAGS_NOOWNTAG, dissect_four_octets }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_character_encoding(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_character_encoding_choice, hf_index, ett_x411_T_character_encoding, + NULL); + + return offset; +} +static int dissect_character_encoding(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_character_encoding(FALSE, tvb, offset, pinfo, tree, hf_x411_character_encoding); +} + + +static const ber_sequence_t UniversalOrBMPString_set[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_character_encoding }, + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_iso_639_language_code }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_UniversalOrBMPString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + UniversalOrBMPString_set, hf_index, ett_x411_UniversalOrBMPString); + + return offset; +} +static int dissect_universal_surname_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, pinfo, tree, hf_x411_universal_surname); +} +static int dissect_universal_given_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, pinfo, tree, hf_x411_universal_given_name); +} +static int dissect_universal_initials_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, pinfo, tree, hf_x411_universal_initials); +} +static int dissect_universal_generation_qualifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, pinfo, tree, hf_x411_universal_generation_qualifier); +} +static int dissect_universal_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalOrBMPString(FALSE, tvb, offset, pinfo, tree, hf_x411_universal_type); +} +static int dissect_universal_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalOrBMPString(FALSE, tvb, offset, pinfo, tree, hf_x411_universal_value); +} + + + +static int +dissect_x411_UniversalCommonName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_TeletexOrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x411_UniversalOrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t TeletexPersonalName_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_teletex_surname_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_given_name_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_initials_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_generation_qualifier_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_TeletexPersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TeletexPersonalName_set, hf_index, ett_x411_TeletexPersonalName); + + return offset; +} + + +static const ber_sequence_t UniversalPersonalName_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_universal_surname_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_universal_given_name_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_universal_initials_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_universal_generation_qualifier_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_UniversalPersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + UniversalPersonalName_set, hf_index, ett_x411_UniversalPersonalName); + + return offset; +} + + + +static int +dissect_x411_TeletexOrganizationalUnitName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_TeletexOrganizationalUnitNames_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexOrganizationalUnitName(FALSE, tvb, offset, pinfo, tree, hf_x411_TeletexOrganizationalUnitNames_item); +} + + +static const ber_sequence_t TeletexOrganizationalUnitNames_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_TeletexOrganizationalUnitNames_item }, +}; + +static int +dissect_x411_TeletexOrganizationalUnitNames(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + TeletexOrganizationalUnitNames_sequence_of, hf_index, ett_x411_TeletexOrganizationalUnitNames); + + return offset; +} + + + +static int +dissect_x411_UniversalOrganizationalUnitName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_UniversalOrganizationalUnitNames_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalOrganizationalUnitName(FALSE, tvb, offset, pinfo, tree, hf_x411_UniversalOrganizationalUnitNames_item); +} + + +static const ber_sequence_t UniversalOrganizationalUnitNames_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_UniversalOrganizationalUnitNames_item }, +}; + +static int +dissect_x411_UniversalOrganizationalUnitNames(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + UniversalOrganizationalUnitNames_sequence_of, hf_index, ett_x411_UniversalOrganizationalUnitNames); + + return offset; +} + + + +static int +dissect_x411_PDSName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string x411_PhysicalDeliveryCountryName_vals[] = { + { 0, "x121-dcc-code" }, + { 1, "iso-3166-alpha2-code" }, + { 0, NULL } +}; + +static const ber_choice_t PhysicalDeliveryCountryName_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x121_dcc_code }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_iso_3166_alpha2_code }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_PhysicalDeliveryCountryName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + PhysicalDeliveryCountryName_choice, hf_index, ett_x411_PhysicalDeliveryCountryName, + NULL); + + return offset; +} + + +static const value_string x411_PostalCode_vals[] = { + { 0, "numeric-code" }, + { 1, "printable-code" }, + { 0, NULL } +}; + +static const ber_choice_t PostalCode_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric_code }, + { 1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_code }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_PostalCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + PostalCode_choice, hf_index, ett_x411_PostalCode, + NULL); + + return offset; +} + + +static const ber_sequence_t PDSParameter_set[] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_printable_string }, + { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_teletex_string }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_PDSParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PDSParameter_set, hf_index, ett_x411_PDSParameter); + + return offset; +} + + + +static int +dissect_x411_PhysicalDeliveryOfficeName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalPDSParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalPhysicalDeliveryOfficeName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_PhysicalDeliveryOfficeNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalPhysicalDeliveryOfficeNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ExtensionORAddressComponents(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalExtensionORAddressComponents(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_PhysicalDeliveryPersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalPhysicalDeliveryPersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_PhysicalDeliveryOrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalPhysicalDeliveryOrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_ExtensionPhysicalDeliveryAddressComponents(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalExtensionPhysicalDeliveryAddressComponents(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t T_printable_address_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_address_item }, +}; + +static int +dissect_x411_T_printable_address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + T_printable_address_sequence_of, hf_index, ett_x411_T_printable_address); + + return offset; +} +static int dissect_printable_address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_printable_address(FALSE, tvb, offset, pinfo, tree, hf_x411_printable_address); +} + + +static const ber_sequence_t UnformattedPostalAddress_set[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_printable_address }, + { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_teletex_string }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_UnformattedPostalAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + UnformattedPostalAddress_set, hf_index, ett_x411_UnformattedPostalAddress); + + return offset; +} + + + +static int +dissect_x411_UniversalUnformattedPostalAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_StreetAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalStreetAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_PostOfficeBoxAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalPostOfficeBoxAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalPosteRestanteAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniquePostalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalUniquePostalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_LocalPostalAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + + +static int +dissect_x411_UniversalLocalPostalAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t T_e163_4_address_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_number_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sub_address_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_T_e163_4_address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_e163_4_address_sequence, hf_index, ett_x411_T_e163_4_address); + + return offset; +} +static int dissect_e163_4_address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_T_e163_4_address(FALSE, tvb, offset, pinfo, tree, hf_x411_e163_4_address); +} + + +static const value_string x411_ExtendedNetworkAddress_vals[] = { + { 0, "e163-4-address" }, + { 1, "psap-address" }, + { 0, NULL } +}; + +static const ber_choice_t ExtendedNetworkAddress_choice[] = { + { 0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_e163_4_address }, + { 1, BER_CLASS_CON, 0, 0, dissect_psap_address_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x411_ExtendedNetworkAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ExtendedNetworkAddress_choice, hf_index, ett_x411_ExtendedNetworkAddress, + NULL); + + return offset; +} + + +static const value_string x411_TerminalType_vals[] = { + { 3, "telex" }, + { 4, "teletex" }, + { 5, "g3-facsimile" }, + { 6, "g4-facsimile" }, + { 7, "ia5-terminal" }, + { 8, "videotex" }, + { 0, NULL } +}; + + +static int +dissect_x411_TerminalType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t TeletexDomainDefinedAttribute_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_type }, + { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_teletex_value }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_TeletexDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + TeletexDomainDefinedAttribute_sequence, hf_index, ett_x411_TeletexDomainDefinedAttribute); + + return offset; +} +static int dissect_TeletexDomainDefinedAttributes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexDomainDefinedAttribute(FALSE, tvb, offset, pinfo, tree, hf_x411_TeletexDomainDefinedAttributes_item); +} + + +static const ber_sequence_t TeletexDomainDefinedAttributes_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_TeletexDomainDefinedAttributes_item }, +}; + +static int +dissect_x411_TeletexDomainDefinedAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + TeletexDomainDefinedAttributes_sequence_of, hf_index, ett_x411_TeletexDomainDefinedAttributes); + + return offset; +} + + +static const ber_sequence_t UniversalDomainDefinedAttribute_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_universal_type }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_universal_value }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_UniversalDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + UniversalDomainDefinedAttribute_sequence, hf_index, ett_x411_UniversalDomainDefinedAttribute); + + return offset; +} +static int dissect_UniversalDomainDefinedAttributes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_UniversalDomainDefinedAttribute(FALSE, tvb, offset, pinfo, tree, hf_x411_UniversalDomainDefinedAttributes_item); +} + + +static const ber_sequence_t UniversalDomainDefinedAttributes_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_UniversalDomainDefinedAttributes_item }, +}; + +static int +dissect_x411_UniversalDomainDefinedAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + UniversalDomainDefinedAttributes_sequence_of, hf_index, ett_x411_UniversalDomainDefinedAttributes); + + return offset; +} + + +static const ber_sequence_t NonBasicParameters_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_g3_facsimile_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x411_NonBasicParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + NonBasicParameters_set, hf_index, ett_x411_NonBasicParameters); + + return offset; +} + +/*--- PDUs ---*/ + +static void dissect_InternalTraceInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_InternalTraceInformation(FALSE, tvb, 0, pinfo, tree, hf_x411_InternalTraceInformation_PDU); +} +static void dissect_TraceInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_TraceInformation(TRUE, tvb, 0, pinfo, tree, hf_x411_TraceInformation_PDU); +} +static void dissect_RecipientReassignmentProhibited_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_RecipientReassignmentProhibited(FALSE, tvb, 0, pinfo, tree, hf_x411_RecipientReassignmentProhibited_PDU); +} +static void dissect_MTSOriginatorRequestedAlternateRecipient_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_MTSOriginatorRequestedAlternateRecipient(FALSE, tvb, 0, pinfo, tree, hf_x411_MTSOriginatorRequestedAlternateRecipient_PDU); +} +static void dissect_DLExpansionProhibited_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_DLExpansionProhibited(FALSE, tvb, 0, pinfo, tree, hf_x411_DLExpansionProhibited_PDU); +} +static void dissect_ConversionWithLossProhibited_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ConversionWithLossProhibited(FALSE, tvb, 0, pinfo, tree, hf_x411_ConversionWithLossProhibited_PDU); +} +static void dissect_LatestDeliveryTime_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_LatestDeliveryTime(FALSE, tvb, 0, pinfo, tree, hf_x411_LatestDeliveryTime_PDU); +} +static void dissect_RequestedDeliveryMethod_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_RequestedDeliveryMethod(FALSE, tvb, 0, pinfo, tree, hf_x411_RequestedDeliveryMethod_PDU); +} +static void dissect_PhysicalForwardingProhibited_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalForwardingProhibited(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalForwardingProhibited_PDU); +} +static void dissect_PhysicalForwardingAddressRequest_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalForwardingAddressRequest(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalForwardingAddressRequest_PDU); +} +static void dissect_PhysicalDeliveryModes_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalDeliveryModes(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalDeliveryModes_PDU); +} +static void dissect_RegisteredMailType_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_RegisteredMailType(FALSE, tvb, 0, pinfo, tree, hf_x411_RegisteredMailType_PDU); +} +static void dissect_RecipientNumberForAdvice_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_RecipientNumberForAdvice(FALSE, tvb, 0, pinfo, tree, hf_x411_RecipientNumberForAdvice_PDU); +} +static void dissect_PhysicalRenditionAttributes_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalRenditionAttributes(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalRenditionAttributes_PDU); +} +static void dissect_OriginatorReturnAddress_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_OriginatorReturnAddress(FALSE, tvb, 0, pinfo, tree, hf_x411_OriginatorReturnAddress_PDU); +} +static void dissect_PhysicalDeliveryReportRequest_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalDeliveryReportRequest(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalDeliveryReportRequest_PDU); +} +static void dissect_OriginatorCertificate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_OriginatorCertificate(FALSE, tvb, 0, pinfo, tree, hf_x411_OriginatorCertificate_PDU); +} +static void dissect_ContentConfidentialityAlgorithmIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ContentConfidentialityAlgorithmIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x411_ContentConfidentialityAlgorithmIdentifier_PDU); +} +static void dissect_MessageSecurityLabel_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_MessageSecurityLabel(FALSE, tvb, 0, pinfo, tree, hf_x411_MessageSecurityLabel_PDU); +} +static void dissect_ProofOfSubmissionRequest_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ProofOfSubmissionRequest(FALSE, tvb, 0, pinfo, tree, hf_x411_ProofOfSubmissionRequest_PDU); +} +static void dissect_ProofOfDeliveryRequest_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ProofOfDeliveryRequest(FALSE, tvb, 0, pinfo, tree, hf_x411_ProofOfDeliveryRequest_PDU); +} +static void dissect_ContentCorrelator_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ContentCorrelator(FALSE, tvb, 0, pinfo, tree, hf_x411_ContentCorrelator_PDU); +} +static void dissect_RedirectionHistory_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_RedirectionHistory(FALSE, tvb, 0, pinfo, tree, hf_x411_RedirectionHistory_PDU); +} +static void dissect_DLExpansionHistory_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_DLExpansionHistory(FALSE, tvb, 0, pinfo, tree, hf_x411_DLExpansionHistory_PDU); +} +static void dissect_PhysicalForwardingAddress_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalForwardingAddress(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalForwardingAddress_PDU); +} +static void dissect_OriginatorAndDLExpansionHistory_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_OriginatorAndDLExpansionHistory(FALSE, tvb, 0, pinfo, tree, hf_x411_OriginatorAndDLExpansionHistory_PDU); +} +static void dissect_ReportingDLName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ReportingDLName(FALSE, tvb, 0, pinfo, tree, hf_x411_ReportingDLName_PDU); +} +static void dissect_ReportingMTACertificate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ReportingMTACertificate(FALSE, tvb, 0, pinfo, tree, hf_x411_ReportingMTACertificate_PDU); +} +static void dissect_ReportingMTAName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ReportingMTAName(FALSE, tvb, 0, pinfo, tree, hf_x411_ReportingMTAName_PDU); +} +static void dissect_ExtendedCertificates_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_ExtendedCertificates(FALSE, tvb, 0, pinfo, tree, hf_x411_ExtendedCertificates_PDU); +} +static void dissect_DLExemptedRecipients_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_DLExemptedRecipients(FALSE, tvb, 0, pinfo, tree, hf_x411_DLExemptedRecipients_PDU); +} +static void dissect_CertificateSelectors_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_CertificateSelectors(FALSE, tvb, 0, pinfo, tree, hf_x411_CertificateSelectors_PDU); +} +static void dissect_CommonName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_CommonName(FALSE, tvb, 0, pinfo, tree, hf_x411_CommonName_PDU); +} +static void dissect_TeletexCommonName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_TeletexCommonName(FALSE, tvb, 0, pinfo, tree, hf_x411_TeletexCommonName_PDU); +} +static void dissect_UniversalCommonName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_UniversalCommonName(FALSE, tvb, 0, pinfo, tree, hf_x411_UniversalCommonName_PDU); +} +static void dissect_TeletexOrganizationName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_TeletexOrganizationName(FALSE, tvb, 0, pinfo, tree, hf_x411_TeletexOrganizationName_PDU); +} +static void dissect_UniversalOrganizationName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_UniversalOrganizationName(FALSE, tvb, 0, pinfo, tree, hf_x411_UniversalOrganizationName_PDU); +} +static void dissect_TeletexPersonalName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_TeletexPersonalName(FALSE, tvb, 0, pinfo, tree, hf_x411_TeletexPersonalName_PDU); +} +static void dissect_UniversalPersonalName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_UniversalPersonalName(FALSE, tvb, 0, pinfo, tree, hf_x411_UniversalPersonalName_PDU); +} +static void dissect_TeletexOrganizationalUnitNames_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_TeletexOrganizationalUnitNames(FALSE, tvb, 0, pinfo, tree, hf_x411_TeletexOrganizationalUnitNames_PDU); +} +static void dissect_UniversalOrganizationalUnitNames_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_UniversalOrganizationalUnitNames(FALSE, tvb, 0, pinfo, tree, hf_x411_UniversalOrganizationalUnitNames_PDU); +} +static void dissect_PDSName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PDSName(FALSE, tvb, 0, pinfo, tree, hf_x411_PDSName_PDU); +} +static void dissect_PhysicalDeliveryCountryName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalDeliveryCountryName(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalDeliveryCountryName_PDU); +} +static void dissect_PostalCode_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PostalCode(FALSE, tvb, 0, pinfo, tree, hf_x411_PostalCode_PDU); +} +static void dissect_PhysicalDeliveryOfficeName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x411_PhysicalDeliveryOfficeName(FALSE, tvb, 0, pinfo, tree, hf_x411_PhysicalDeliveryOfficeName_PDU); +} + + +/*--- End of included file: packet-x411-fn.c ---*/ + + +static int +call_x411_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) +{ + + char extension_oid[BER_MAX_OID_STR_LEN]; + + sprintf(extension_oid, "%s.%d", base_oid, extension_id); + + return call_ber_oid_callback(extension_oid, tvb, offset, pinfo, tree); + +} + + +/* +* Dissect X411 PDUs inside a PPDU. +*/ +static void +dissect_x411(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) +{ + int offset = 0; + int old_offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int (*x411_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) = NULL; + char *x411_op_name; + + /* do we have operation information from the ROS dissector? */ + if( !pinfo->private_data ){ + if(parent_tree){ + proto_tree_add_text(parent_tree, tvb, offset, -1, + "Internal error: can't get operation information from ROS dissector."); + } + return ; + } else { + session = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) ); + } + + if(parent_tree){ + item = proto_tree_add_item(parent_tree, proto_x411, tvb, 0, -1, FALSE); + tree = proto_item_add_subtree(item, ett_x411); + } + if (check_col(pinfo->cinfo, COL_PROTOCOL)) + col_set_str(pinfo->cinfo, COL_PROTOCOL, "X411"); + if (check_col(pinfo->cinfo, COL_INFO)) + col_clear(pinfo->cinfo, COL_INFO); + + switch(session->ros_op & ROS_OP_MASK) { + case (ROS_OP_BIND | ROS_OP_ARGUMENT): /* BindInvoke */ + x411_dissector = dissect_x411_MTABindArgument; + x411_op_name = "MTA-Bind-Argument"; + break; + case (ROS_OP_BIND | ROS_OP_RESULT): /* BindResult */ + x411_dissector = dissect_x411_MTABindResult; + x411_op_name = "MTA-Bind-Result"; + break; + case (ROS_OP_INVOKE | ROS_OP_ARGUMENT): /* Invoke Argument */ + x411_dissector = dissect_x411_MTS_APDU; + x411_op_name = "MTA-Transfer"; + break; + default: + proto_tree_add_text(tree, tvb, offset, -1,"Unsupported X411 PDU"); + return; + } + + if (check_col(pinfo->cinfo, COL_INFO)) + col_add_str(pinfo->cinfo, COL_INFO, x411_op_name); + + while (tvb_reported_length_remaining(tvb, offset) > 0){ + old_offset=offset; + offset=(*x411_dissector)(TRUE, tvb, offset, pinfo , tree, -1); + if(offset == old_offset){ + proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte X411 PDU"); + offset = tvb_length(tvb); + break; + } + } +} + + +/*--- proto_register_x411 -------------------------------------------*/ +void proto_register_x411(void) { + + /* List of fields */ + static hf_register_info hf[] = + { + +/*--- Included file: packet-x411-hfarr.c ---*/ + + { &hf_x411_InternalTraceInformation_PDU, + { "InternalTraceInformation", "x411.InternalTraceInformation", + FT_UINT32, BASE_DEC, NULL, 0, + "InternalTraceInformation", HFILL }}, + { &hf_x411_TraceInformation_PDU, + { "TraceInformation", "x411.TraceInformation", + FT_UINT32, BASE_DEC, NULL, 0, + "TraceInformation", HFILL }}, + { &hf_x411_RecipientReassignmentProhibited_PDU, + { "RecipientReassignmentProhibited", "x411.RecipientReassignmentProhibited", + FT_UINT32, BASE_DEC, VALS(x411_RecipientReassignmentProhibited_vals), 0, + "RecipientReassignmentProhibited", HFILL }}, + { &hf_x411_MTSOriginatorRequestedAlternateRecipient_PDU, + { "MTSOriginatorRequestedAlternateRecipient", "x411.MTSOriginatorRequestedAlternateRecipient", + FT_NONE, BASE_NONE, NULL, 0, + "MTSOriginatorRequestedAlternateRecipient", HFILL }}, + { &hf_x411_DLExpansionProhibited_PDU, + { "DLExpansionProhibited", "x411.DLExpansionProhibited", + FT_UINT32, BASE_DEC, VALS(x411_DLExpansionProhibited_vals), 0, + "DLExpansionProhibited", HFILL }}, + { &hf_x411_ConversionWithLossProhibited_PDU, + { "ConversionWithLossProhibited", "x411.ConversionWithLossProhibited", + FT_UINT32, BASE_DEC, VALS(x411_ConversionWithLossProhibited_vals), 0, + "ConversionWithLossProhibited", HFILL }}, + { &hf_x411_LatestDeliveryTime_PDU, + { "LatestDeliveryTime", "x411.LatestDeliveryTime", + FT_STRING, BASE_NONE, NULL, 0, + "LatestDeliveryTime", HFILL }}, + { &hf_x411_RequestedDeliveryMethod_PDU, + { "RequestedDeliveryMethod", "x411.RequestedDeliveryMethod", + FT_UINT32, BASE_DEC, NULL, 0, + "RequestedDeliveryMethod", HFILL }}, + { &hf_x411_PhysicalForwardingProhibited_PDU, + { "PhysicalForwardingProhibited", "x411.PhysicalForwardingProhibited", + FT_UINT32, BASE_DEC, VALS(x411_PhysicalForwardingProhibited_vals), 0, + "PhysicalForwardingProhibited", HFILL }}, + { &hf_x411_PhysicalForwardingAddressRequest_PDU, + { "PhysicalForwardingAddressRequest", "x411.PhysicalForwardingAddressRequest", + FT_UINT32, BASE_DEC, VALS(x411_PhysicalForwardingAddressRequest_vals), 0, + "PhysicalForwardingAddressRequest", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_PDU, + { "PhysicalDeliveryModes", "x411.PhysicalDeliveryModes", + FT_BYTES, BASE_HEX, NULL, 0, + "PhysicalDeliveryModes", HFILL }}, + { &hf_x411_RegisteredMailType_PDU, + { "RegisteredMailType", "x411.RegisteredMailType", + FT_UINT32, BASE_DEC, VALS(x411_RegisteredMailType_vals), 0, + "RegisteredMailType", HFILL }}, + { &hf_x411_RecipientNumberForAdvice_PDU, + { "RecipientNumberForAdvice", "x411.RecipientNumberForAdvice", + FT_STRING, BASE_NONE, NULL, 0, + "RecipientNumberForAdvice", HFILL }}, + { &hf_x411_PhysicalRenditionAttributes_PDU, + { "PhysicalRenditionAttributes", "x411.PhysicalRenditionAttributes", + FT_STRING, BASE_NONE, NULL, 0, + "PhysicalRenditionAttributes", HFILL }}, + { &hf_x411_OriginatorReturnAddress_PDU, + { "OriginatorReturnAddress", "x411.OriginatorReturnAddress", + FT_NONE, BASE_NONE, NULL, 0, + "OriginatorReturnAddress", HFILL }}, + { &hf_x411_PhysicalDeliveryReportRequest_PDU, + { "PhysicalDeliveryReportRequest", "x411.PhysicalDeliveryReportRequest", + FT_INT32, BASE_DEC, VALS(x411_PhysicalDeliveryReportRequest_vals), 0, + "PhysicalDeliveryReportRequest", HFILL }}, + { &hf_x411_OriginatorCertificate_PDU, + { "OriginatorCertificate", "x411.OriginatorCertificate", + FT_NONE, BASE_NONE, NULL, 0, + "OriginatorCertificate", HFILL }}, + { &hf_x411_ContentConfidentialityAlgorithmIdentifier_PDU, + { "ContentConfidentialityAlgorithmIdentifier", "x411.ContentConfidentialityAlgorithmIdentifier", + FT_NONE, BASE_NONE, NULL, 0, + "ContentConfidentialityAlgorithmIdentifier", HFILL }}, + { &hf_x411_MessageSecurityLabel_PDU, + { "MessageSecurityLabel", "x411.MessageSecurityLabel", + FT_NONE, BASE_NONE, NULL, 0, + "MessageSecurityLabel", HFILL }}, + { &hf_x411_ProofOfSubmissionRequest_PDU, + { "ProofOfSubmissionRequest", "x411.ProofOfSubmissionRequest", + FT_UINT32, BASE_DEC, VALS(x411_ProofOfSubmissionRequest_vals), 0, + "ProofOfSubmissionRequest", HFILL }}, + { &hf_x411_ProofOfDeliveryRequest_PDU, + { "ProofOfDeliveryRequest", "x411.ProofOfDeliveryRequest", + FT_UINT32, BASE_DEC, VALS(x411_ProofOfDeliveryRequest_vals), 0, + "ProofOfDeliveryRequest", HFILL }}, + { &hf_x411_ContentCorrelator_PDU, + { "ContentCorrelator", "x411.ContentCorrelator", + FT_UINT32, BASE_DEC, VALS(x411_ContentCorrelator_vals), 0, + "ContentCorrelator", HFILL }}, + { &hf_x411_RedirectionHistory_PDU, + { "RedirectionHistory", "x411.RedirectionHistory", + FT_UINT32, BASE_DEC, NULL, 0, + "RedirectionHistory", HFILL }}, + { &hf_x411_DLExpansionHistory_PDU, + { "DLExpansionHistory", "x411.DLExpansionHistory", + FT_UINT32, BASE_DEC, NULL, 0, + "DLExpansionHistory", HFILL }}, + { &hf_x411_PhysicalForwardingAddress_PDU, + { "PhysicalForwardingAddress", "x411.PhysicalForwardingAddress", + FT_NONE, BASE_NONE, NULL, 0, + "PhysicalForwardingAddress", HFILL }}, + { &hf_x411_OriginatorAndDLExpansionHistory_PDU, + { "OriginatorAndDLExpansionHistory", "x411.OriginatorAndDLExpansionHistory", + FT_UINT32, BASE_DEC, NULL, 0, + "OriginatorAndDLExpansionHistory", HFILL }}, + { &hf_x411_ReportingDLName_PDU, + { "ReportingDLName", "x411.ReportingDLName", + FT_NONE, BASE_NONE, NULL, 0, + "ReportingDLName", HFILL }}, + { &hf_x411_ReportingMTACertificate_PDU, + { "ReportingMTACertificate", "x411.ReportingMTACertificate", + FT_NONE, BASE_NONE, NULL, 0, + "ReportingMTACertificate", HFILL }}, + { &hf_x411_ReportingMTAName_PDU, + { "ReportingMTAName", "x411.ReportingMTAName", + FT_NONE, BASE_NONE, NULL, 0, + "ReportingMTAName", HFILL }}, + { &hf_x411_ExtendedCertificates_PDU, + { "ExtendedCertificates", "x411.ExtendedCertificates", + FT_UINT32, BASE_DEC, NULL, 0, + "ExtendedCertificates", HFILL }}, + { &hf_x411_DLExemptedRecipients_PDU, + { "DLExemptedRecipients", "x411.DLExemptedRecipients", + FT_UINT32, BASE_DEC, NULL, 0, + "DLExemptedRecipients", HFILL }}, + { &hf_x411_CertificateSelectors_PDU, + { "CertificateSelectors", "x411.CertificateSelectors", + FT_NONE, BASE_NONE, NULL, 0, + "CertificateSelectors", HFILL }}, + { &hf_x411_CommonName_PDU, + { "CommonName", "x411.CommonName", + FT_STRING, BASE_NONE, NULL, 0, + "CommonName", HFILL }}, + { &hf_x411_TeletexCommonName_PDU, + { "TeletexCommonName", "x411.TeletexCommonName", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexCommonName", HFILL }}, + { &hf_x411_UniversalCommonName_PDU, + { "UniversalCommonName", "x411.UniversalCommonName", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalCommonName", HFILL }}, + { &hf_x411_TeletexOrganizationName_PDU, + { "TeletexOrganizationName", "x411.TeletexOrganizationName", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexOrganizationName", HFILL }}, + { &hf_x411_UniversalOrganizationName_PDU, + { "UniversalOrganizationName", "x411.UniversalOrganizationName", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalOrganizationName", HFILL }}, + { &hf_x411_TeletexPersonalName_PDU, + { "TeletexPersonalName", "x411.TeletexPersonalName", + FT_NONE, BASE_NONE, NULL, 0, + "TeletexPersonalName", HFILL }}, + { &hf_x411_UniversalPersonalName_PDU, + { "UniversalPersonalName", "x411.UniversalPersonalName", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalPersonalName", HFILL }}, + { &hf_x411_TeletexOrganizationalUnitNames_PDU, + { "TeletexOrganizationalUnitNames", "x411.TeletexOrganizationalUnitNames", + FT_UINT32, BASE_DEC, NULL, 0, + "TeletexOrganizationalUnitNames", HFILL }}, + { &hf_x411_UniversalOrganizationalUnitNames_PDU, + { "UniversalOrganizationalUnitNames", "x411.UniversalOrganizationalUnitNames", + FT_UINT32, BASE_DEC, NULL, 0, + "UniversalOrganizationalUnitNames", HFILL }}, + { &hf_x411_PDSName_PDU, + { "PDSName", "x411.PDSName", + FT_STRING, BASE_NONE, NULL, 0, + "PDSName", HFILL }}, + { &hf_x411_PhysicalDeliveryCountryName_PDU, + { "PhysicalDeliveryCountryName", "x411.PhysicalDeliveryCountryName", + FT_UINT32, BASE_DEC, VALS(x411_PhysicalDeliveryCountryName_vals), 0, + "PhysicalDeliveryCountryName", HFILL }}, + { &hf_x411_PostalCode_PDU, + { "PostalCode", "x411.PostalCode", + FT_UINT32, BASE_DEC, VALS(x411_PostalCode_vals), 0, + "PostalCode", HFILL }}, + { &hf_x411_PhysicalDeliveryOfficeName_PDU, + { "PhysicalDeliveryOfficeName", "x411.PhysicalDeliveryOfficeName", + FT_NONE, BASE_NONE, NULL, 0, + "PhysicalDeliveryOfficeName", HFILL }}, + { &hf_x411_unauthenticated, + { "unauthenticated", "x411.unauthenticated", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_authenticated_argument, + { "authenticated", "x411.authenticated", + FT_NONE, BASE_NONE, NULL, 0, + "MTABindArgument/authenticated", HFILL }}, + { &hf_x411_authenticated_initiator_name, + { "initiator-name", "x411.initiator_name", + FT_STRING, BASE_NONE, NULL, 0, + "MTABindArgument/authenticated/initiator-name", HFILL }}, + { &hf_x411_initiator_credentials, + { "initiator-credentials", "x411.initiator_credentials", + FT_UINT32, BASE_DEC, VALS(x411_Credentials_vals), 0, + "", HFILL }}, + { &hf_x411_security_context, + { "security-context", "x411.security_context", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_authenticated_result, + { "authenticated", "x411.authenticated", + FT_NONE, BASE_NONE, NULL, 0, + "MTABindResult/authenticated", HFILL }}, + { &hf_x411_authenticated_responder_name, + { "responder-name", "x411.responder_name", + FT_STRING, BASE_NONE, NULL, 0, + "MTABindResult/authenticated/responder-name", HFILL }}, + { &hf_x411_responder_credentials, + { "responder-credentials", "x411.responder_credentials", + FT_UINT32, BASE_DEC, VALS(x411_Credentials_vals), 0, + "", HFILL }}, + { &hf_x411_message, + { "message", "x411.message", + FT_NONE, BASE_NONE, NULL, 0, + "MTS-APDU/message", HFILL }}, + { &hf_x411_probe, + { "probe", "x411.probe", + FT_NONE, BASE_NONE, NULL, 0, + "MTS-APDU/probe", HFILL }}, + { &hf_x411_report, + { "report", "x411.report", + FT_NONE, BASE_NONE, NULL, 0, + "MTS-APDU/report", HFILL }}, + { &hf_x411_message_envelope, + { "envelope", "x411.envelope", + FT_NONE, BASE_NONE, NULL, 0, + "Message/envelope", HFILL }}, + { &hf_x411_content, + { "content", "x411.content", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_report_envelope, + { "envelope", "x411.envelope", + FT_NONE, BASE_NONE, NULL, 0, + "Report/envelope", HFILL }}, + { &hf_x411_report_content, + { "content", "x411.content", + FT_NONE, BASE_NONE, NULL, 0, + "Report/content", HFILL }}, + { &hf_x411_message_identifier, + { "message-identifier", "x411.message_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "MessageTransferEnvelope/message-identifier", HFILL }}, + { &hf_x411_mta_originator_name, + { "originator-name", "x411.originator_name", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_original_encoded_information_types, + { "original-encoded-information-types", "x411.original_encoded_information_types", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_content_type, + { "content-type", "x411.content_type", + FT_UINT32, BASE_DEC, VALS(x411_ContentType_vals), 0, + "", HFILL }}, + { &hf_x411_content_identifier, + { "content-identifier", "x411.content_identifier", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_priority, + { "priority", "x411.priority", + FT_UINT32, BASE_DEC, VALS(x411_Priority_vals), 0, + "", HFILL }}, + { &hf_x411_per_message_indicators, + { "per-message-indicators", "x411.per_message_indicators", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_deferred_delivery_time, + { "deferred-delivery-time", "x411.deferred_delivery_time", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_per_domain_bilateral_information, + { "per-domain-bilateral-information", "x411.per_domain_bilateral_information", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_per_domain_bilateral_information_item, + { "Item", "x411.per_domain_bilateral_information_item", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_trace_information, + { "trace-information", "x411.trace_information", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_extensions, + { "extensions", "x411.extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_extensions_item, + { "Item", "x411.extensions_item", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_per_recipient_message_fields, + { "per-recipient-fields", "x411.per_recipient_fields", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageTransferEnvelope/per-recipient-fields", HFILL }}, + { &hf_x411_per_recipient_message_fields_item, + { "Item", "x411.per_recipient_fields_item", + FT_NONE, BASE_NONE, NULL, 0, + "MessageTransferEnvelope/per-recipient-fields/_item", HFILL }}, + { &hf_x411_recipient_name, + { "recipient-name", "x411.recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_originally_specified_recipient_number, + { "originally-specified-recipient-number", "x411.originally_specified_recipient_number", + FT_INT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_per_recipient_indicators, + { "per-recipient-indicators", "x411.per_recipient_indicators", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_explicit_conversion, + { "explicit-conversion", "x411.explicit_conversion", + FT_UINT32, BASE_DEC, VALS(x411_ExplicitConversion_vals), 0, + "", HFILL }}, + { &hf_x411_probe_identifier, + { "probe-identifier", "x411.probe_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "ProbeTransferEnvelope/probe-identifier", HFILL }}, + { &hf_x411_content_length, + { "content-length", "x411.content_length", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_per_recipient_probe_transfer_fields, + { "per-recipient-fields", "x411.per_recipient_fields", + FT_UINT32, BASE_DEC, NULL, 0, + "ProbeTransferEnvelope/per-recipient-fields", HFILL }}, + { &hf_x411_per_recipient_probe_transfer_fields_item, + { "Item", "x411.per_recipient_fields_item", + FT_NONE, BASE_NONE, NULL, 0, + "ProbeTransferEnvelope/per-recipient-fields/_item", HFILL }}, + { &hf_x411_report_identifier, + { "report-identifier", "x411.report_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "ReportTransferEnvelope/report-identifier", HFILL }}, + { &hf_x411_report_destination_name, + { "report-destination-name", "x411.report_destination_name", + FT_NONE, BASE_NONE, NULL, 0, + "ReportTransferEnvelope/report-destination-name", HFILL }}, + { &hf_x411_subject_identifier, + { "subject-identifier", "x411.subject_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "ReportTransferContent/subject-identifier", HFILL }}, + { &hf_x411_subject_intermediate_trace_information, + { "subject-intermediate-trace-information", "x411.subject_intermediate_trace_information", + FT_UINT32, BASE_DEC, NULL, 0, + "ReportTransferContent/subject-intermediate-trace-information", HFILL }}, + { &hf_x411_returned_content, + { "returned-content", "x411.returned_content", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_additional_information, + { "additional-information", "x411.additional_information", + FT_NONE, BASE_NONE, NULL, 0, + "ReportTransferContent/additional-information", HFILL }}, + { &hf_x411_per_recipient_report_fields, + { "per-recipient-fields", "x411.per_recipient_fields", + FT_UINT32, BASE_DEC, NULL, 0, + "ReportTransferContent/per-recipient-fields", HFILL }}, + { &hf_x411_per_recipient_fields_item, + { "Item", "x411.per_recipient_fields_item", + FT_NONE, BASE_NONE, NULL, 0, + "ReportTransferContent/per-recipient-fields/_item", HFILL }}, + { &hf_x411_mta_actual_recipient_name, + { "actual-recipient-name", "x411.actual_recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "PerRecipientReportTransferFields/actual-recipient-name", HFILL }}, + { &hf_x411_last_trace_information, + { "last-trace-information", "x411.last_trace_information", + FT_NONE, BASE_NONE, NULL, 0, + "PerRecipientReportTransferFields/last-trace-information", HFILL }}, + { &hf_x411_report_originally_intended_recipient_name, + { "originally-intended-recipient-name", "x411.originally_intended_recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "PerRecipientReportTransferFields/originally-intended-recipient-name", HFILL }}, + { &hf_x411_supplementary_information, + { "supplementary-information", "x411.supplementary_information", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_country_name, + { "country-name", "x411.country_name", + FT_UINT32, BASE_DEC, VALS(x411_CountryName_vals), 0, + "", HFILL }}, + { &hf_x411_bilateral_domain, + { "domain", "x411.domain", + FT_UINT32, BASE_DEC, VALS(x411_T_domain_vals), 0, + "PerDomainBilateralInformation/domain", HFILL }}, + { &hf_x411_administration_domain_name, + { "administration-domain-name", "x411.administration_domain_name", + FT_UINT32, BASE_DEC, VALS(x411_AdministrationDomainName_vals), 0, + "", HFILL }}, + { &hf_x411_private_domain, + { "private-domain", "x411.private_domain", + FT_NONE, BASE_NONE, NULL, 0, + "PerDomainBilateralInformation/domain/private-domain", HFILL }}, + { &hf_x411_private_domain_identifier, + { "private-domain-identifier", "x411.private_domain_identifier", + FT_UINT32, BASE_DEC, VALS(x411_PrivateDomainIdentifier_vals), 0, + "", HFILL }}, + { &hf_x411_arrival_time, + { "arrival-time", "x411.arrival_time", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_converted_encoded_information_types, + { "converted-encoded-information-types", "x411.converted_encoded_information_types", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_trace_report_type, + { "report-type", "x411.report_type", + FT_UINT32, BASE_DEC, VALS(x411_ReportType_vals), 0, + "LastTraceInformation/report-type", HFILL }}, + { &hf_x411_InternalTraceInformation_item, + { "Item", "x411.InternalTraceInformation_item", + FT_NONE, BASE_NONE, NULL, 0, + "InternalTraceInformation/_item", HFILL }}, + { &hf_x411_global_domain_identifier, + { "global-domain-identifier", "x411.global_domain_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_mta_name, + { "mta-name", "x411.mta_name", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_mta_supplied_information, + { "mta-supplied-information", "x411.mta_supplied_information", + FT_NONE, BASE_NONE, NULL, 0, + "InternalTraceInformationElement/mta-supplied-information", HFILL }}, + { &hf_x411_routing_action, + { "routing-action", "x411.routing_action", + FT_UINT32, BASE_DEC, VALS(x411_RoutingAction_vals), 0, + "", HFILL }}, + { &hf_x411_attempted, + { "attempted", "x411.attempted", + FT_UINT32, BASE_DEC, VALS(x411_T_attempted_vals), 0, + "MTASuppliedInformation/attempted", HFILL }}, + { &hf_x411_mta, + { "mta", "x411.mta", + FT_STRING, BASE_NONE, NULL, 0, + "MTASuppliedInformation/attempted/mta", HFILL }}, + { &hf_x411_domain, + { "domain", "x411.domain", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_deferred_time, + { "deferred-time", "x411.deferred_time", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_other_actions, + { "other-actions", "x411.other_actions", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_TraceInformation_item, + { "Item", "x411.TraceInformation_item", + FT_NONE, BASE_NONE, NULL, 0, + "TraceInformation/_item", HFILL }}, + { &hf_x411_domain_supplied_information, + { "domain-supplied-information", "x411.domain_supplied_information", + FT_NONE, BASE_NONE, NULL, 0, + "TraceInformationElement/domain-supplied-information", HFILL }}, + { &hf_x411_attempted_domain, + { "attempted-domain", "x411.attempted_domain", + FT_NONE, BASE_NONE, NULL, 0, + "DomainSuppliedInformation/attempted-domain", HFILL }}, + { &hf_x411_initiator_name, + { "initiator-name", "x411.initiator_name", + FT_UINT32, BASE_DEC, VALS(x411_ObjectName_vals), 0, + "MTSBindArgument/initiator-name", HFILL }}, + { &hf_x411_messages_waiting, + { "messages-waiting", "x411.messages_waiting", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_responder_name, + { "responder-name", "x411.responder_name", + FT_UINT32, BASE_DEC, VALS(x411_ObjectName_vals), 0, + "MTSBindResult/responder-name", HFILL }}, + { &hf_x411_user_agent, + { "user-agent", "x411.user_agent", + FT_NONE, BASE_NONE, NULL, 0, + "ObjectName/user-agent", HFILL }}, + { &hf_x411_mTA, + { "mTA", "x411.mTA", + FT_STRING, BASE_NONE, NULL, 0, + "ObjectName/mTA", HFILL }}, + { &hf_x411_message_store, + { "message-store", "x411.message_store", + FT_NONE, BASE_NONE, NULL, 0, + "ObjectName/message-store", HFILL }}, + { &hf_x411_urgent, + { "urgent", "x411.urgent", + FT_NONE, BASE_NONE, NULL, 0, + "MessagesWaiting/urgent", HFILL }}, + { &hf_x411_normal, + { "normal", "x411.normal", + FT_NONE, BASE_NONE, NULL, 0, + "MessagesWaiting/normal", HFILL }}, + { &hf_x411_non_urgent, + { "non-urgent", "x411.non_urgent", + FT_NONE, BASE_NONE, NULL, 0, + "MessagesWaiting/non-urgent", HFILL }}, + { &hf_x411_messages, + { "messages", "x411.messages", + FT_INT32, BASE_DEC, NULL, 0, + "DeliveryQueue/messages", HFILL }}, + { &hf_x411_delivery_queue_octets, + { "octets", "x411.octets", + FT_INT32, BASE_DEC, NULL, 0, + "DeliveryQueue/octets", HFILL }}, + { &hf_x411_simple, + { "simple", "x411.simple", + FT_UINT32, BASE_DEC, VALS(x411_Password_vals), 0, + "Credentials/simple", HFILL }}, + { &hf_x411_ia5_string, + { "ia5-string", "x411.ia5_string", + FT_STRING, BASE_NONE, NULL, 0, + "Password/ia5-string", HFILL }}, + { &hf_x411_octet_string, + { "octet-string", "x411.octet_string", + FT_BYTES, BASE_HEX, NULL, 0, + "Password/octet-string", HFILL }}, + { &hf_x411_SecurityContext_item, + { "Item", "x411.SecurityContext_item", + FT_NONE, BASE_NONE, NULL, 0, + "SecurityContext/_item", HFILL }}, + { &hf_x411_message_submission_envelope, + { "envelope", "x411.envelope", + FT_NONE, BASE_NONE, NULL, 0, + "MessageSubmissionArgument/envelope", HFILL }}, + { &hf_x411_message_submission_identifier, + { "message-submission-identifier", "x411.message_submission_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "MessageSubmissionResult/message-submission-identifier", HFILL }}, + { &hf_x411_message_submission_time, + { "message-submission-time", "x411.message_submission_time", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_probe_submission_identifier, + { "probe-submission-identifier", "x411.probe_submission_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "ProbeSubmissionResult/probe-submission-identifier", HFILL }}, + { &hf_x411_probe_submission_time, + { "probe-submission-time", "x411.probe_submission_time", + FT_STRING, BASE_NONE, NULL, 0, + "ProbeSubmissionResult/probe-submission-time", HFILL }}, + { &hf_x411_ImproperlySpecifiedRecipients_item, + { "Item", "x411.ImproperlySpecifiedRecipients_item", + FT_NONE, BASE_NONE, NULL, 0, + "ImproperlySpecifiedRecipients/_item", HFILL }}, + { &hf_x411_waiting_operations, + { "waiting-operations", "x411.waiting_operations", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_waiting_messages, + { "waiting-messages", "x411.waiting_messages", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_waiting_content_types, + { "waiting-content-types", "x411.waiting_content_types", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_waiting_content_types_item, + { "Item", "x411.waiting_content_types_item", + FT_UINT32, BASE_DEC, VALS(x411_ContentType_vals), 0, + "", HFILL }}, + { &hf_x411_waiting_encoded_information_types, + { "waiting-encoded-information-types", "x411.waiting_encoded_information_types", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_message_delivery_identifier, + { "message-delivery-identifier", "x411.message_delivery_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_message_delivery_time, + { "message-delivery-time", "x411.message_delivery_time", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_other_fields, + { "other-fields", "x411.other_fields", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_recipient_certificate, + { "recipient-certificate", "x411.recipient_certificate", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_subject_submission_identifier, + { "subject-submission-identifier", "x411.subject_submission_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_per_recipient_report_delivery_fields, + { "per-recipient-fields", "x411.per_recipient_fields", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_per_recipient_report_delivery_fields_item, + { "Item", "x411.per_recipient_fields_item", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_empty_result, + { "empty-result", "x411.empty_result", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_restrict, + { "restrict", "x411.restrict", + FT_BOOLEAN, 8, NULL, 0, + "", HFILL }}, + { &hf_x411_permissible_operations, + { "permissible-operations", "x411.permissible_operations", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_permissible_maximum_content_length, + { "permissible-maximum-content-length", "x411.permissible_maximum_content_length", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_permissible_lowest_priority, + { "permissible-lowest-priority", "x411.permissible_lowest_priority", + FT_UINT32, BASE_DEC, VALS(x411_Priority_vals), 0, + "", HFILL }}, + { &hf_x411_permissible_content_types, + { "permissible-content-types", "x411.permissible_content_types", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_permissible_encoded_information_types, + { "permissible-encoded-information-types", "x411.permissible_encoded_information_types", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_permissible_security_context, + { "permissible-security-context", "x411.permissible_security_context", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_refused_argument, + { "refused-argument", "x411.refused_argument", + FT_UINT32, BASE_DEC, VALS(x411_T_refused_argument_vals), 0, + "RefusedOperation/refused-argument", HFILL }}, + { &hf_x411_built_in_argument, + { "built-in-argument", "x411.built_in_argument", + FT_UINT32, BASE_DEC, VALS(x411_RefusedArgument_vals), 0, + "RefusedOperation/refused-argument/built-in-argument", HFILL }}, + { &hf_x411_refused_extension, + { "refused-extension", "x411.refused_extension", + FT_NONE, BASE_NONE, NULL, 0, + "RefusedOperation/refused-argument/refused-extension", HFILL }}, + { &hf_x411_refusal_reason, + { "refusal-reason", "x411.refusal_reason", + FT_UINT32, BASE_DEC, VALS(x411_RefusalReason_vals), 0, + "RefusedOperation/refusal-reason", HFILL }}, + { &hf_x411_user_name, + { "user-name", "x411.user_name", + FT_NONE, BASE_NONE, NULL, 0, + "RegisterArgument/user-name", HFILL }}, + { &hf_x411_user_address, + { "user-address", "x411.user_address", + FT_UINT32, BASE_DEC, VALS(x411_UserAddress_vals), 0, + "RegisterArgument/user-address", HFILL }}, + { &hf_x411_deliverable_class, + { "deliverable-class", "x411.deliverable_class", + FT_UINT32, BASE_DEC, NULL, 0, + "RegisterArgument/deliverable-class", HFILL }}, + { &hf_x411_deliverable_class_item, + { "Item", "x411.deliverable_class_item", + FT_NONE, BASE_NONE, NULL, 0, + "RegisterArgument/deliverable-class/_item", HFILL }}, + { &hf_x411_default_delivery_controls, + { "default-delivery-controls", "x411.default_delivery_controls", + FT_NONE, BASE_NONE, NULL, 0, + "RegisterArgument/default-delivery-controls", HFILL }}, + { &hf_x411_redirections, + { "redirections", "x411.redirections", + FT_UINT32, BASE_DEC, NULL, 0, + "RegisterArgument/redirections", HFILL }}, + { &hf_x411_restricted_delivery, + { "restricted-delivery", "x411.restricted_delivery", + FT_UINT32, BASE_DEC, NULL, 0, + "RegisterArgument/restricted-delivery", HFILL }}, + { &hf_x411_retrieve_registrations, + { "retrieve-registrations", "x411.retrieve_registrations", + FT_NONE, BASE_NONE, NULL, 0, + "RegisterArgument/retrieve-registrations", HFILL }}, + { &hf_x411_non_empty_result, + { "non-empty-result", "x411.non_empty_result", + FT_NONE, BASE_NONE, NULL, 0, + "RegisterResult/non-empty-result", HFILL }}, + { &hf_x411_registered_information, + { "registered-information", "x411.registered_information", + FT_NONE, BASE_NONE, NULL, 0, + "RegisterResult/non-empty-result/registered-information", HFILL }}, + { &hf_x411_old_credentials, + { "old-credentials", "x411.old_credentials", + FT_UINT32, BASE_DEC, VALS(x411_Credentials_vals), 0, + "ChangeCredentialsArgument/old-credentials", HFILL }}, + { &hf_x411_new_credentials, + { "new-credentials", "x411.new_credentials", + FT_UINT32, BASE_DEC, VALS(x411_Credentials_vals), 0, + "ChangeCredentialsArgument/new-credentials", HFILL }}, + { &hf_x411_x121, + { "x121", "x411.x121", + FT_NONE, BASE_NONE, NULL, 0, + "UserAddress/x121", HFILL }}, + { &hf_x411_x121_address, + { "x121-address", "x411.x121_address", + FT_STRING, BASE_NONE, NULL, 0, + "UserAddress/x121/x121-address", HFILL }}, + { &hf_x411_tsap_id, + { "tsap-id", "x411.tsap_id", + FT_STRING, BASE_NONE, NULL, 0, + "UserAddress/x121/tsap-id", HFILL }}, + { &hf_x411_presentation, + { "presentation", "x411.presentation", + FT_NONE, BASE_NONE, NULL, 0, + "UserAddress/presentation", HFILL }}, + { &hf_x411_Redirections_item, + { "Item", "x411.Redirections_item", + FT_NONE, BASE_NONE, NULL, 0, + "Redirections/_item", HFILL }}, + { &hf_x411_redirection_classes, + { "redirection-classes", "x411.redirection_classes", + FT_UINT32, BASE_DEC, NULL, 0, + "RecipientRedirection/redirection-classes", HFILL }}, + { &hf_x411_redirection_classes_item, + { "Item", "x411.redirection_classes_item", + FT_NONE, BASE_NONE, NULL, 0, + "RecipientRedirection/redirection-classes/_item", HFILL }}, + { &hf_x411_recipient_assigned_alternate_recipient, + { "recipient-assigned-alternate-recipient", "x411.recipient_assigned_alternate_recipient", + FT_NONE, BASE_NONE, NULL, 0, + "RecipientRedirection/recipient-assigned-alternate-recipient", HFILL }}, + { &hf_x411_content_types, + { "content-types", "x411.content_types", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageClass/content-types", HFILL }}, + { &hf_x411_maximum_content_length, + { "maximum-content-length", "x411.maximum_content_length", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageClass/maximum-content-length", HFILL }}, + { &hf_x411_encoded_information_types_constraints, + { "encoded-information-types-constraints", "x411.encoded_information_types_constraints", + FT_NONE, BASE_NONE, NULL, 0, + "MessageClass/encoded-information-types-constraints", HFILL }}, + { &hf_x411_security_labels, + { "security-labels", "x411.security_labels", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageClass/security-labels", HFILL }}, + { &hf_x411_class_priority, + { "priority", "x411.priority", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageClass/priority", HFILL }}, + { &hf_x411_priority_item, + { "Item", "x411.priority_item", + FT_UINT32, BASE_DEC, VALS(x411_Priority_vals), 0, + "MessageClass/priority/_item", HFILL }}, + { &hf_x411_objects, + { "objects", "x411.objects", + FT_UINT32, BASE_DEC, VALS(x411_T_objects_vals), 0, + "MessageClass/objects", HFILL }}, + { &hf_x411_applies_only_to, + { "applies-only-to", "x411.applies_only_to", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageClass/applies-only-to", HFILL }}, + { &hf_x411_applies_only_to_item, + { "Item", "x411.applies_only_to_item", + FT_NONE, BASE_NONE, NULL, 0, + "MessageClass/applies-only-to/_item", HFILL }}, + { &hf_x411_unacceptable_eits, + { "unacceptable-eits", "x411.unacceptable_eits", + FT_UINT32, BASE_DEC, NULL, 0, + "EncodedInformationTypesConstraints/unacceptable-eits", HFILL }}, + { &hf_x411_acceptable_eits, + { "acceptable-eits", "x411.acceptable_eits", + FT_UINT32, BASE_DEC, NULL, 0, + "EncodedInformationTypesConstraints/acceptable-eits", HFILL }}, + { &hf_x411_exclusively_acceptable_eits, + { "exclusively-acceptable-eits", "x411.exclusively_acceptable_eits", + FT_UINT32, BASE_DEC, NULL, 0, + "EncodedInformationTypesConstraints/exclusively-acceptable-eits", HFILL }}, + { &hf_x411_RestrictedDelivery_item, + { "Item", "x411.RestrictedDelivery_item", + FT_NONE, BASE_NONE, NULL, 0, + "RestrictedDelivery/_item", HFILL }}, + { &hf_x411_permitted, + { "permitted", "x411.permitted", + FT_BOOLEAN, 8, NULL, 0, + "Restriction/permitted", HFILL }}, + { &hf_x411_source_type, + { "source-type", "x411.source_type", + FT_BYTES, BASE_HEX, NULL, 0, + "Restriction/source-type", HFILL }}, + { &hf_x411_source_name, + { "source-name", "x411.source_name", + FT_UINT32, BASE_DEC, VALS(x411_ExactOrPattern_vals), 0, + "Restriction/source-name", HFILL }}, + { &hf_x411_exact_match, + { "exact-match", "x411.exact_match", + FT_NONE, BASE_NONE, NULL, 0, + "ExactOrPattern/exact-match", HFILL }}, + { &hf_x411_pattern_match, + { "pattern-match", "x411.pattern_match", + FT_NONE, BASE_NONE, NULL, 0, + "ExactOrPattern/pattern-match", HFILL }}, + { &hf_x411_standard_parameters, + { "standard-parameters", "x411.standard_parameters", + FT_BYTES, BASE_HEX, NULL, 0, + "RegistrationTypes/standard-parameters", HFILL }}, + { &hf_x411_type_extensions, + { "extensions", "x411.extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "RegistrationTypes/extensions", HFILL }}, + { &hf_x411_type_extensions_item, + { "Item", "x411.extensions_item", + FT_NONE, BASE_NONE, NULL, 0, + "RegistrationTypes/extensions/_item", HFILL }}, + { &hf_x411_mts_originator_name, + { "originator-name", "x411.originator_name", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_per_recipient_message_submission_fields, + { "per-recipient-fields", "x411.per_recipient_fields", + FT_UINT32, BASE_DEC, NULL, 0, + "MessageSubmissionEnvelope/per-recipient-fields", HFILL }}, + { &hf_x411_per_recipient_message_submission_fields_item, + { "Item", "x411.per_recipient_fields_item", + FT_NONE, BASE_NONE, NULL, 0, + "MessageSubmissionEnvelope/per-recipient-fields/_item", HFILL }}, + { &hf_x411_submission_recipient_name, + { "recipient-name", "x411.recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "PerRecipientMessageSubmissionFields/recipient-name", HFILL }}, + { &hf_x411_originator_report_request, + { "originator-report-request", "x411.originator_report_request", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_per_recipient_probe_submission_fields, + { "per-recipient-fields", "x411.per_recipient_fields", + FT_UINT32, BASE_DEC, NULL, 0, + "ProbeSubmissionEnvelope/per-recipient-fields", HFILL }}, + { &hf_x411_per_recipient_probe_submission_fields_item, + { "Item", "x411.per_recipient_fields_item", + FT_NONE, BASE_NONE, NULL, 0, + "ProbeSubmissionEnvelope/per-recipient-fields/_item", HFILL }}, + { &hf_x411_probe_recipient_name, + { "recipient-name", "x411.recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "PerRecipientProbeSubmissionFields/recipient-name", HFILL }}, + { &hf_x411_delivered_content_type, + { "content-type", "x411.content_type", + FT_UINT32, BASE_DEC, VALS(x411_DeliveredContentType_vals), 0, + "OtherMessageDeliveryFields/content-type", HFILL }}, + { &hf_x411_originator_name, + { "originator-name", "x411.originator_name", + FT_NONE, BASE_NONE, NULL, 0, + "OtherMessageDeliveryFields/originator-name", HFILL }}, + { &hf_x411_delivery_flags, + { "delivery-flags", "x411.delivery_flags", + FT_BYTES, BASE_HEX, NULL, 0, + "OtherMessageDeliveryFields/delivery-flags", HFILL }}, + { &hf_x411_other_recipient_names, + { "other-recipient-names", "x411.other_recipient_names", + FT_UINT32, BASE_DEC, NULL, 0, + "OtherMessageDeliveryFields/other-recipient-names", HFILL }}, + { &hf_x411_this_recipient_name, + { "this-recipient-name", "x411.this_recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "OtherMessageDeliveryFields/this-recipient-name", HFILL }}, + { &hf_x411_originally_intended_recipient_name, + { "originally-intended-recipient-name", "x411.originally_intended_recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_actual_recipient_name, + { "actual-recipient-name", "x411.actual_recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_delivery_report_type, + { "report-type", "x411.report_type", + FT_UINT32, BASE_DEC, VALS(x411_ReportType_vals), 0, + "PerRecipientReportDeliveryFields/report-type", HFILL }}, + { &hf_x411_delivery, + { "delivery", "x411.delivery", + FT_NONE, BASE_NONE, NULL, 0, + "ReportType/delivery", HFILL }}, + { &hf_x411_non_delivery, + { "non-delivery", "x411.non_delivery", + FT_NONE, BASE_NONE, NULL, 0, + "ReportType/non-delivery", HFILL }}, + { &hf_x411_type_of_MTS_user, + { "type-of-MTS-user", "x411.type_of_MTS_user", + FT_UINT32, BASE_DEC, VALS(x411_TypeOfMTSUser_vals), 0, + "", HFILL }}, + { &hf_x411_non_delivery_reason_code, + { "non-delivery-reason-code", "x411.non_delivery_reason_code", + FT_UINT32, BASE_DEC, VALS(x411_NonDeliveryReasonCode_vals), 0, + "", HFILL }}, + { &hf_x411_non_delivery_diagnostic_code, + { "non-delivery-diagnostic-code", "x411.non_delivery_diagnostic_code", + FT_UINT32, BASE_DEC, VALS(x411_NonDeliveryDiagnosticCode_vals), 0, + "", HFILL }}, + { &hf_x411_ContentTypes_item, + { "Item", "x411.ContentTypes_item", + FT_UINT32, BASE_DEC, VALS(x411_ContentType_vals), 0, + "ContentTypes/_item", HFILL }}, + { &hf_x411_built_in, + { "built-in", "x411.built_in", + FT_INT32, BASE_DEC, VALS(x411_BuiltInContentType_vals), 0, + "", HFILL }}, + { &hf_x411_extended, + { "extended", "x411.extended", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_OtherRecipientNames_item, + { "Item", "x411.OtherRecipientNames_item", + FT_NONE, BASE_NONE, NULL, 0, + "OtherRecipientNames/_item", HFILL }}, + { &hf_x411_standard_extension, + { "standard-extension", "x411.standard_extension", + FT_INT32, BASE_DEC, NULL, 0, + "ExtensionType/standard-extension", HFILL }}, + { &hf_x411_private_extension, + { "private-extension", "x411.private_extension", + FT_STRING, BASE_NONE, NULL, 0, + "ExtensionType/private-extension", HFILL }}, + { &hf_x411_extension_type, + { "type", "x411.type", + FT_UINT32, BASE_DEC, VALS(x411_ExtensionType_vals), 0, + "ExtensionField/type", HFILL }}, + { &hf_x411_criticality, + { "criticality", "x411.criticality", + FT_BYTES, BASE_HEX, NULL, 0, + "ExtensionField/criticality", HFILL }}, + { &hf_x411_extension_value, + { "value", "x411.value", + FT_NONE, BASE_NONE, NULL, 0, + "ExtensionField/value", HFILL }}, + { &hf_x411_RequestedDeliveryMethod_item, + { "Item", "x411.RequestedDeliveryMethod_item", + FT_UINT32, BASE_DEC, VALS(x411_RequestedDeliveryMethod_item_vals), 0, + "RequestedDeliveryMethod/_item", HFILL }}, + { &hf_x411_ia5text, + { "ia5text", "x411.ia5text", + FT_STRING, BASE_NONE, NULL, 0, + "ContentCorrelator/ia5text", HFILL }}, + { &hf_x411_octets, + { "octets", "x411.octets", + FT_BYTES, BASE_HEX, NULL, 0, + "ContentCorrelator/octets", HFILL }}, + { &hf_x411_RedirectionHistory_item, + { "Item", "x411.RedirectionHistory_item", + FT_NONE, BASE_NONE, NULL, 0, + "RedirectionHistory/_item", HFILL }}, + { &hf_x411_intended_recipient_name, + { "intended-recipient-name", "x411.intended_recipient_name", + FT_NONE, BASE_NONE, NULL, 0, + "Redirection/intended-recipient-name", HFILL }}, + { &hf_x411_redirection_reason, + { "redirection-reason", "x411.redirection_reason", + FT_UINT32, BASE_DEC, VALS(x411_RedirectionReason_vals), 0, + "Redirection/redirection-reason", HFILL }}, + { &hf_x411_intended_recipient, + { "intended-recipient", "x411.intended_recipient", + FT_NONE, BASE_NONE, NULL, 0, + "IntendedRecipientName/intended-recipient", HFILL }}, + { &hf_x411_redirection_time, + { "redirection-time", "x411.redirection_time", + FT_STRING, BASE_NONE, NULL, 0, + "IntendedRecipientName/redirection-time", HFILL }}, + { &hf_x411_DLExpansionHistory_item, + { "Item", "x411.DLExpansionHistory_item", + FT_NONE, BASE_NONE, NULL, 0, + "DLExpansionHistory/_item", HFILL }}, + { &hf_x411_dl, + { "dl", "x411.dl", + FT_NONE, BASE_NONE, NULL, 0, + "DLExpansion/dl", HFILL }}, + { &hf_x411_dl_expansion_time, + { "dl-expansion-time", "x411.dl_expansion_time", + FT_STRING, BASE_NONE, NULL, 0, + "DLExpansion/dl-expansion-time", HFILL }}, + { &hf_x411_OriginatorAndDLExpansionHistory_item, + { "Item", "x411.OriginatorAndDLExpansionHistory_item", + FT_NONE, BASE_NONE, NULL, 0, + "OriginatorAndDLExpansionHistory/_item", HFILL }}, + { &hf_x411_originator_or_dl_name, + { "originator-or-dl-name", "x411.originator_or_dl_name", + FT_NONE, BASE_NONE, NULL, 0, + "OriginatorAndDLExpansion/originator-or-dl-name", HFILL }}, + { &hf_x411_origination_or_expansion_time, + { "origination-or-expansion-time", "x411.origination_or_expansion_time", + FT_STRING, BASE_NONE, NULL, 0, + "OriginatorAndDLExpansion/origination-or-expansion-time", HFILL }}, + { &hf_x411_report_type, + { "report-type", "x411.report_type", + FT_UINT32, BASE_DEC, VALS(x411_T_report_type_vals), 0, + "PerRecipientReportFields/report-type", HFILL }}, + { &hf_x411_report_type_delivery, + { "delivery", "x411.delivery", + FT_NONE, BASE_NONE, NULL, 0, + "PerRecipientReportFields/report-type/delivery", HFILL }}, + { &hf_x411_non_delivery_report, + { "non-delivery", "x411.non_delivery", + FT_NONE, BASE_NONE, NULL, 0, + "PerRecipientReportFields/report-type/non-delivery", HFILL }}, + { &hf_x411_mta_directory_name, + { "mta-directory-name", "x411.mta_directory_name", + FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0, + "ReportingMTAName/mta-directory-name", HFILL }}, + { &hf_x411_ExtendedCertificates_item, + { "Item", "x411.ExtendedCertificates_item", + FT_UINT32, BASE_DEC, VALS(x411_ExtendedCertificate_vals), 0, + "ExtendedCertificates/_item", HFILL }}, + { &hf_x411_directory_entry, + { "directory-entry", "x411.directory_entry", + FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0, + "ExtendedCertificate/directory-entry", HFILL }}, + { &hf_x411_certificate, + { "certificate", "x411.certificate", + FT_NONE, BASE_NONE, NULL, 0, + "ExtendedCertificate/certificate", HFILL }}, + { &hf_x411_DLExemptedRecipients_item, + { "Item", "x411.DLExemptedRecipients_item", + FT_NONE, BASE_NONE, NULL, 0, + "DLExemptedRecipients/_item", HFILL }}, + { &hf_x411_encryption_recipient, + { "encryption-recipient", "x411.encryption_recipient", + FT_NONE, BASE_NONE, NULL, 0, + "CertificateSelectors/encryption-recipient", HFILL }}, + { &hf_x411_encryption_originator, + { "encryption-originator", "x411.encryption_originator", + FT_NONE, BASE_NONE, NULL, 0, + "CertificateSelectors/encryption-originator", HFILL }}, + { &hf_x411_content_integrity_check, + { "content-integrity-check", "x411.content_integrity_check", + FT_NONE, BASE_NONE, NULL, 0, + "CertificateSelectors/content-integrity-check", HFILL }}, + { &hf_x411_token_signature, + { "token-signature", "x411.token_signature", + FT_NONE, BASE_NONE, NULL, 0, + "CertificateSelectors/token-signature", HFILL }}, + { &hf_x411_message_origin_authentication, + { "message-origin-authentication", "x411.message_origin_authentication", + FT_NONE, BASE_NONE, NULL, 0, + "CertificateSelectors/message-origin-authentication", HFILL }}, + { &hf_x411_local_identifier, + { "local-identifier", "x411.local_identifier", + FT_STRING, BASE_NONE, NULL, 0, + "MTSIdentifier/local-identifier", HFILL }}, + { &hf_x411_numeric, + { "numeric", "x411.numeric", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_printable, + { "printable", "x411.printable", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_built_in_standard_attributes, + { "built-in-standard-attributes", "x411.built_in_standard_attributes", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_built_in_domain_defined_attributes, + { "built-in-domain-defined-attributes", "x411.built_in_domain_defined_attributes", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_extension_attributes, + { "extension-attributes", "x411.extension_attributes", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x411_directory_name, + { "directory-name", "x411.directory_name", + FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0, + "ORName/directory-name", HFILL }}, + { &hf_x411_network_address, + { "network-address", "x411.network_address", + FT_STRING, BASE_NONE, NULL, 0, + "BuiltInStandardAttributes/network-address", HFILL }}, + { &hf_x411_terminal_identifier, + { "terminal-identifier", "x411.terminal_identifier", + FT_STRING, BASE_NONE, NULL, 0, + "BuiltInStandardAttributes/terminal-identifier", HFILL }}, + { &hf_x411_private_domain_name, + { "private-domain-name", "x411.private_domain_name", + FT_UINT32, BASE_DEC, VALS(x411_PrivateDomainName_vals), 0, + "BuiltInStandardAttributes/private-domain-name", HFILL }}, + { &hf_x411_organization_name, + { "organization-name", "x411.organization_name", + FT_STRING, BASE_NONE, NULL, 0, + "BuiltInStandardAttributes/organization-name", HFILL }}, + { &hf_x411_numeric_user_identifier, + { "numeric-user-identifier", "x411.numeric_user_identifier", + FT_STRING, BASE_NONE, NULL, 0, + "BuiltInStandardAttributes/numeric-user-identifier", HFILL }}, + { &hf_x411_personal_name, + { "personal-name", "x411.personal_name", + FT_NONE, BASE_NONE, NULL, 0, + "BuiltInStandardAttributes/personal-name", HFILL }}, + { &hf_x411_organizational_unit_names, + { "organizational-unit-names", "x411.organizational_unit_names", + FT_UINT32, BASE_DEC, NULL, 0, + "BuiltInStandardAttributes/organizational-unit-names", HFILL }}, + { &hf_x411_x121_dcc_code, + { "x121-dcc-code", "x411.x121_dcc_code", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_iso_3166_alpha2_code, + { "iso-3166-alpha2-code", "x411.iso_3166_alpha2_code", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_printable_surname, + { "surname", "x411.surname", + FT_STRING, BASE_NONE, NULL, 0, + "PersonalName/surname", HFILL }}, + { &hf_x411_printable_given_name, + { "given-name", "x411.given_name", + FT_STRING, BASE_NONE, NULL, 0, + "PersonalName/given-name", HFILL }}, + { &hf_x411_printable_initials, + { "initials", "x411.initials", + FT_STRING, BASE_NONE, NULL, 0, + "PersonalName/initials", HFILL }}, + { &hf_x411_printable_generation_qualifier, + { "generation-qualifier", "x411.generation_qualifier", + FT_STRING, BASE_NONE, NULL, 0, + "PersonalName/generation-qualifier", HFILL }}, + { &hf_x411_OrganizationalUnitNames_item, + { "Item", "x411.OrganizationalUnitNames_item", + FT_STRING, BASE_NONE, NULL, 0, + "OrganizationalUnitNames/_item", HFILL }}, + { &hf_x411_BuiltInDomainDefinedAttributes_item, + { "Item", "x411.BuiltInDomainDefinedAttributes_item", + FT_NONE, BASE_NONE, NULL, 0, + "BuiltInDomainDefinedAttributes/_item", HFILL }}, + { &hf_x411_printable_type, + { "type", "x411.type", + FT_STRING, BASE_NONE, NULL, 0, + "BuiltInDomainDefinedAttribute/type", HFILL }}, + { &hf_x411_printable_value, + { "value", "x411.value", + FT_STRING, BASE_NONE, NULL, 0, + "BuiltInDomainDefinedAttribute/value", HFILL }}, + { &hf_x411_ExtensionAttributes_item, + { "Item", "x411.ExtensionAttributes_item", + FT_NONE, BASE_NONE, NULL, 0, + "ExtensionAttributes/_item", HFILL }}, + { &hf_x411_extension_attribute_type, + { "extension-attribute-type", "x411.extension_attribute_type", + FT_INT32, BASE_DEC, NULL, 0, + "ExtensionAttribute/extension-attribute-type", HFILL }}, + { &hf_x411_extension_attribute_value, + { "extension-attribute-value", "x411.extension_attribute_value", + FT_NONE, BASE_NONE, NULL, 0, + "ExtensionAttribute/extension-attribute-value", HFILL }}, + { &hf_x411_teletex_surname, + { "surname", "x411.surname", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexPersonalName/surname", HFILL }}, + { &hf_x411_teletex_given_name, + { "given-name", "x411.given_name", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexPersonalName/given-name", HFILL }}, + { &hf_x411_teletex_initials, + { "initials", "x411.initials", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexPersonalName/initials", HFILL }}, + { &hf_x411_teletex_generation_qualifier, + { "generation-qualifier", "x411.generation_qualifier", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexPersonalName/generation-qualifier", HFILL }}, + { &hf_x411_universal_surname, + { "surname", "x411.surname", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalPersonalName/surname", HFILL }}, + { &hf_x411_universal_given_name, + { "given-name", "x411.given_name", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalPersonalName/given-name", HFILL }}, + { &hf_x411_universal_initials, + { "initials", "x411.initials", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalPersonalName/initials", HFILL }}, + { &hf_x411_universal_generation_qualifier, + { "generation-qualifier", "x411.generation_qualifier", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalPersonalName/generation-qualifier", HFILL }}, + { &hf_x411_TeletexOrganizationalUnitNames_item, + { "Item", "x411.TeletexOrganizationalUnitNames_item", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexOrganizationalUnitNames/_item", HFILL }}, + { &hf_x411_UniversalOrganizationalUnitNames_item, + { "Item", "x411.UniversalOrganizationalUnitNames_item", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalOrganizationalUnitNames/_item", HFILL }}, + { &hf_x411_character_encoding, + { "character-encoding", "x411.character_encoding", + FT_UINT32, BASE_DEC, VALS(x411_T_character_encoding_vals), 0, + "UniversalOrBMPString/character-encoding", HFILL }}, + { &hf_x411_two_octets, + { "two-octets", "x411.two_octets", + FT_STRING, BASE_NONE, NULL, 0, + "UniversalOrBMPString/character-encoding/two-octets", HFILL }}, + { &hf_x411_four_octets, + { "four-octets", "x411.four_octets", + FT_STRING, BASE_NONE, NULL, 0, + "UniversalOrBMPString/character-encoding/four-octets", HFILL }}, + { &hf_x411_iso_639_language_code, + { "iso-639-language-code", "x411.iso_639_language_code", + FT_STRING, BASE_NONE, NULL, 0, + "UniversalOrBMPString/iso-639-language-code", HFILL }}, + { &hf_x411_numeric_code, + { "numeric-code", "x411.numeric_code", + FT_STRING, BASE_NONE, NULL, 0, + "PostalCode/numeric-code", HFILL }}, + { &hf_x411_printable_code, + { "printable-code", "x411.printable_code", + FT_STRING, BASE_NONE, NULL, 0, + "PostalCode/printable-code", HFILL }}, + { &hf_x411_printable_address, + { "printable-address", "x411.printable_address", + FT_UINT32, BASE_DEC, NULL, 0, + "UnformattedPostalAddress/printable-address", HFILL }}, + { &hf_x411_printable_address_item, + { "Item", "x411.printable_address_item", + FT_STRING, BASE_NONE, NULL, 0, + "UnformattedPostalAddress/printable-address/_item", HFILL }}, + { &hf_x411_teletex_string, + { "teletex-string", "x411.teletex_string", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_printable_string, + { "printable-string", "x411.printable_string", + FT_STRING, BASE_NONE, NULL, 0, + "PDSParameter/printable-string", HFILL }}, + { &hf_x411_e163_4_address, + { "e163-4-address", "x411.e163_4_address", + FT_NONE, BASE_NONE, NULL, 0, + "ExtendedNetworkAddress/e163-4-address", HFILL }}, + { &hf_x411_number, + { "number", "x411.number", + FT_STRING, BASE_NONE, NULL, 0, + "ExtendedNetworkAddress/e163-4-address/number", HFILL }}, + { &hf_x411_sub_address, + { "sub-address", "x411.sub_address", + FT_STRING, BASE_NONE, NULL, 0, + "ExtendedNetworkAddress/e163-4-address/sub-address", HFILL }}, + { &hf_x411_psap_address, + { "psap-address", "x411.psap_address", + FT_NONE, BASE_NONE, NULL, 0, + "ExtendedNetworkAddress/psap-address", HFILL }}, + { &hf_x411_TeletexDomainDefinedAttributes_item, + { "Item", "x411.TeletexDomainDefinedAttributes_item", + FT_NONE, BASE_NONE, NULL, 0, + "TeletexDomainDefinedAttributes/_item", HFILL }}, + { &hf_x411_type, + { "type", "x411.type", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexDomainDefinedAttribute/type", HFILL }}, + { &hf_x411_teletex_value, + { "value", "x411.value", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexDomainDefinedAttribute/value", HFILL }}, + { &hf_x411_UniversalDomainDefinedAttributes_item, + { "Item", "x411.UniversalDomainDefinedAttributes_item", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalDomainDefinedAttributes/_item", HFILL }}, + { &hf_x411_universal_type, + { "type", "x411.type", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalDomainDefinedAttribute/type", HFILL }}, + { &hf_x411_universal_value, + { "value", "x411.value", + FT_NONE, BASE_NONE, NULL, 0, + "UniversalDomainDefinedAttribute/value", HFILL }}, + { &hf_x411_built_in_encoded_information_types, + { "built-in-encoded-information-types", "x411.built_in_encoded_information_types", + FT_BYTES, BASE_HEX, NULL, 0, + "EncodedInformationTypes/built-in-encoded-information-types", HFILL }}, + { &hf_x411_g3_facsimile, + { "g3-facsimile", "x411.g3_facsimile", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_x411_teletex, + { "teletex", "x411.teletex", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x411_extended_encoded_information_types, + { "extended-encoded-information-types", "x411.extended_encoded_information_types", + FT_UINT32, BASE_DEC, NULL, 0, + "EncodedInformationTypes/extended-encoded-information-types", HFILL }}, + { &hf_x411_ExtendedEncodedInformationTypes_item, + { "Item", "x411.ExtendedEncodedInformationTypes_item", + FT_STRING, BASE_NONE, NULL, 0, + "ExtendedEncodedInformationTypes/_item", HFILL }}, + { &hf_x411_graphic_character_sets, + { "graphic-character-sets", "x411.graphic_character_sets", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexNonBasicParameters/graphic-character-sets", HFILL }}, + { &hf_x411_control_character_sets, + { "control-character-sets", "x411.control_character_sets", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexNonBasicParameters/control-character-sets", HFILL }}, + { &hf_x411_page_formats, + { "page-formats", "x411.page_formats", + FT_BYTES, BASE_HEX, NULL, 0, + "TeletexNonBasicParameters/page-formats", HFILL }}, + { &hf_x411_miscellaneous_terminal_capabilities, + { "miscellaneous-terminal-capabilities", "x411.miscellaneous_terminal_capabilities", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexNonBasicParameters/miscellaneous-terminal-capabilities", HFILL }}, + { &hf_x411_private_use, + { "private-use", "x411.private_use", + FT_BYTES, BASE_HEX, NULL, 0, + "TeletexNonBasicParameters/private-use", HFILL }}, + { &hf_x411_security_policy_identifier, + { "security-policy-identifier", "x411.security_policy_identifier", + FT_STRING, BASE_NONE, NULL, 0, + "SecurityLabel/security-policy-identifier", HFILL }}, + { &hf_x411_security_classification, + { "security-classification", "x411.security_classification", + FT_UINT32, BASE_DEC, VALS(x411_SecurityClassification_vals), 0, + "SecurityLabel/security-classification", HFILL }}, + { &hf_x411_privacy_mark, + { "privacy-mark", "x411.privacy_mark", + FT_STRING, BASE_NONE, NULL, 0, + "SecurityLabel/privacy-mark", HFILL }}, + { &hf_x411_security_categories, + { "security-categories", "x411.security_categories", + FT_UINT32, BASE_DEC, NULL, 0, + "SecurityLabel/security-categories", HFILL }}, + { &hf_x411_SecurityCategories_item, + { "Item", "x411.SecurityCategories_item", + FT_NONE, BASE_NONE, NULL, 0, + "SecurityCategories/_item", HFILL }}, + { &hf_x411_category_type, + { "type", "x411.type", + FT_STRING, BASE_NONE, NULL, 0, + "SecurityCategory/type", HFILL }}, + { &hf_x411_category_value, + { "value", "x411.value", + FT_NONE, BASE_NONE, NULL, 0, + "SecurityCategory/value", HFILL }}, + { &hf_x411_PerRecipientIndicators_responsibility, + { "responsibility", "x411.responsibility", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_PerRecipientIndicators_originating_MTA_report, + { "originating-MTA-report", "x411.originating-MTA-report", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_PerRecipientIndicators_originating_MTA_non_delivery_report, + { "originating-MTA-non-delivery-report", "x411.originating-MTA-non-delivery-report", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_PerRecipientIndicators_originator_report, + { "originator-report", "x411.originator-report", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_PerRecipientIndicators_originator_non_delivery_report, + { "originator-non-delivery-report", "x411.originator-non-delivery-report", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_PerRecipientIndicators_reserved_5, + { "reserved-5", "x411.reserved-5", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_PerRecipientIndicators_reserved_6, + { "reserved-6", "x411.reserved-6", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_PerRecipientIndicators_reserved_7, + { "reserved-7", "x411.reserved-7", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + { &hf_x411_OtherActions_redirected, + { "redirected", "x411.redirected", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_OtherActions_dl_operation, + { "dl-operation", "x411.dl-operation", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_Operations_probe_submission_or_report_delivery, + { "probe-submission-or-report-delivery", "x411.probe-submission-or-report-delivery", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_Operations_message_submission_or_message_delivery, + { "message-submission-or-message-delivery", "x411.message-submission-or-message-delivery", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_WaitingMessages_long_content, + { "long-content", "x411.long-content", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_WaitingMessages_low_priority, + { "low-priority", "x411.low-priority", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_WaitingMessages_other_security_labels, + { "other-security-labels", "x411.other-security-labels", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_T_source_type_originated_by, + { "originated-by", "x411.originated-by", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_T_source_type_redirected_by, + { "redirected-by", "x411.redirected-by", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_T_source_type_dl_expanded_by, + { "dl-expanded-by", "x411.dl-expanded-by", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_T_standard_parameters_user_name, + { "user-name", "x411.user-name", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_T_standard_parameters_user_address, + { "user-address", "x411.user-address", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_T_standard_parameters_deliverable_class, + { "deliverable-class", "x411.deliverable-class", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_T_standard_parameters_default_delivery_controls, + { "default-delivery-controls", "x411.default-delivery-controls", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_T_standard_parameters_redirections, + { "redirections", "x411.redirections", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_T_standard_parameters_restricted_delivery, + { "restricted-delivery", "x411.restricted-delivery", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_disclosure_of_other_recipients, + { "disclosure-of-other-recipients", "x411.disclosure-of-other-recipients", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_implicit_conversion_prohibited, + { "implicit-conversion-prohibited", "x411.implicit-conversion-prohibited", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_alternate_recipient_allowed, + { "alternate-recipient-allowed", "x411.alternate-recipient-allowed", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_content_return_request, + { "content-return-request", "x411.content-return-request", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_reserved, + { "reserved", "x411.reserved", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_bit_5, + { "bit-5", "x411.bit-5", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_bit_6, + { "bit-6", "x411.bit-6", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_PerMessageIndicators_service_message, + { "service-message", "x411.service-message", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + { &hf_x411_OriginatorReportRequest_report, + { "report", "x411.report", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_OriginatorReportRequest_non_delivery_report, + { "non-delivery-report", "x411.non-delivery-report", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_DeliveryFlags_implicit_conversion_prohibited, + { "implicit-conversion-prohibited", "x411.implicit-conversion-prohibited", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_Criticality_for_submission, + { "for-submission", "x411.for-submission", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_Criticality_for_transfer, + { "for-transfer", "x411.for-transfer", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_Criticality_for_delivery, + { "for-delivery", "x411.for-delivery", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_ordinary_mail, + { "ordinary-mail", "x411.ordinary-mail", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_special_delivery, + { "special-delivery", "x411.special-delivery", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_express_mail, + { "express-mail", "x411.express-mail", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_counter_collection, + { "counter-collection", "x411.counter-collection", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_counter_collection_with_telephone_advice, + { "counter-collection-with-telephone-advice", "x411.counter-collection-with-telephone-advice", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_counter_collection_with_telex_advice, + { "counter-collection-with-telex-advice", "x411.counter-collection-with-telex-advice", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_counter_collection_with_teletex_advice, + { "counter-collection-with-teletex-advice", "x411.counter-collection-with-teletex-advice", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_PhysicalDeliveryModes_bureau_fax_delivery, + { "bureau-fax-delivery", "x411.bureau-fax-delivery", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_unknown, + { "unknown", "x411.unknown", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_ia5_text, + { "ia5-text", "x411.ia5-text", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_g3_facsimile, + { "g3-facsimile", "x411.g3-facsimile", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_g4_class_1, + { "g4-class-1", "x411.g4-class-1", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_teletex, + { "teletex", "x411.teletex", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_videotex, + { "videotex", "x411.videotex", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_voice, + { "voice", "x411.voice", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_sfd, + { "sfd", "x411.sfd", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_BuiltInEncodedInformationTypes_mixed_mode, + { "mixed-mode", "x411.mixed-mode", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_two_dimensional, + { "two-dimensional", "x411.two-dimensional", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_fine_resolution, + { "fine-resolution", "x411.fine-resolution", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_unlimited_length, + { "unlimited-length", "x411.unlimited-length", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_b4_length, + { "b4-length", "x411.b4-length", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_a3_width, + { "a3-width", "x411.a3-width", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_b4_width, + { "b4-width", "x411.b4-width", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_t6_coding, + { "t6-coding", "x411.t6-coding", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_uncompressed, + { "uncompressed", "x411.uncompressed", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_width_middle_864_of_1728, + { "width-middle-864-of-1728", "x411.width-middle-864-of-1728", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_width_middle_1216_of_1728, + { "width-middle-1216-of-1728", "x411.width-middle-1216-of-1728", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_resolution_type, + { "resolution-type", "x411.resolution-type", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_resolution_400x400, + { "resolution-400x400", "x411.resolution-400x400", + FT_BOOLEAN, 8, NULL, 0x04, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_resolution_300x300, + { "resolution-300x300", "x411.resolution-300x300", + FT_BOOLEAN, 8, NULL, 0x02, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_resolution_8x15, + { "resolution-8x15", "x411.resolution-8x15", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_edi, + { "edi", "x411.edi", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_dtm, + { "dtm", "x411.dtm", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_bft, + { "bft", "x411.bft", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_mixed_mode, + { "mixed-mode", "x411.mixed-mode", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_character_mode, + { "character-mode", "x411.character-mode", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_twelve_bits, + { "twelve-bits", "x411.twelve-bits", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_preferred_huffmann, + { "preferred-huffmann", "x411.preferred-huffmann", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_full_colour, + { "full-colour", "x411.full-colour", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_jpeg, + { "jpeg", "x411.jpeg", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + { &hf_x411_G3FacsimileNonBasicParameters_processable_mode_26, + { "processable-mode-26", "x411.processable-mode-26", + FT_BOOLEAN, 8, NULL, 0x01, + "", HFILL }}, + +/*--- End of included file: packet-x411-hfarr.c ---*/ + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_x411, + +/*--- Included file: packet-x411-ettarr.c ---*/ + + &ett_x411_MTABindArgument, + &ett_x411_AuthenticatedArgument, + &ett_x411_MTABindResult, + &ett_x411_AuthenticatedResult, + &ett_x411_MTS_APDU, + &ett_x411_Message, + &ett_x411_Report, + &ett_x411_MessageTransferEnvelope, + &ett_x411_SEQUENCE_OF_PerDomainBilateralInformation, + &ett_x411_SET_OF_ExtensionField, + &ett_x411_SEQUENCE_OF_PerRecipientMessageTransferFields, + &ett_x411_PerRecipientMessageTransferFields, + &ett_x411_ProbeTransferEnvelope, + &ett_x411_SEQUENCE_OF_PerRecipientProbeTransferFields, + &ett_x411_PerRecipientProbeTransferFields, + &ett_x411_ReportTransferEnvelope, + &ett_x411_ReportTransferContent, + &ett_x411_SEQUENCE_OF_PerRecipientReportTransferFields, + &ett_x411_PerRecipientReportTransferFields, + &ett_x411_PerDomainBilateralInformation, + &ett_x411_T_domain, + &ett_x411_T_private_domain, + &ett_x411_PerRecipientIndicators, + &ett_x411_LastTraceInformation, + &ett_x411_InternalTraceInformation, + &ett_x411_InternalTraceInformationElement, + &ett_x411_MTASuppliedInformation, + &ett_x411_T_attempted, + &ett_x411_TraceInformation, + &ett_x411_TraceInformationElement, + &ett_x411_DomainSuppliedInformation, + &ett_x411_OtherActions, + &ett_x411_MTSBindArgument, + &ett_x411_MTSBindResult, + &ett_x411_ObjectName, + &ett_x411_MessagesWaiting, + &ett_x411_DeliveryQueue, + &ett_x411_Credentials, + &ett_x411_Password, + &ett_x411_SecurityContext, + &ett_x411_MessageSubmissionArgument, + &ett_x411_MessageSubmissionResult, + &ett_x411_ProbeSubmissionResult, + &ett_x411_ImproperlySpecifiedRecipients, + &ett_x411_Waiting, + &ett_x411_SET_OF_ContentType, + &ett_x411_Operations, + &ett_x411_WaitingMessages, + &ett_x411_MessageDeliveryArgument, + &ett_x411_MessageDeliveryResult, + &ett_x411_ReportDeliveryArgument, + &ett_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields, + &ett_x411_ReportDeliveryResult, + &ett_x411_DeliveryControlArgument, + &ett_x411_DeliveryControlResult, + &ett_x411_RefusedOperation, + &ett_x411_T_refused_argument, + &ett_x411_Controls, + &ett_x411_RegisterArgument, + &ett_x411_SET_OF_DeliverableClass, + &ett_x411_RegisterResult, + &ett_x411_T_non_empty_result, + &ett_x411_ChangeCredentialsArgument, + &ett_x411_UserAddress, + &ett_x411_T_x121, + &ett_x411_Redirections, + &ett_x411_RecipientRedirection, + &ett_x411_SET_OF_RedirectionClass, + &ett_x411_MessageClass, + &ett_x411_SET_OF_Priority, + &ett_x411_SEQUENCE_OF_Restriction, + &ett_x411_EncodedInformationTypesConstraints, + &ett_x411_RestrictedDelivery, + &ett_x411_Restriction, + &ett_x411_T_source_type, + &ett_x411_ExactOrPattern, + &ett_x411_RegistrationTypes, + &ett_x411_T_standard_parameters, + &ett_x411_T_extensions, + &ett_x411_MessageSubmissionEnvelope, + &ett_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields, + &ett_x411_PerRecipientMessageSubmissionFields, + &ett_x411_ProbeSubmissionEnvelope, + &ett_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields, + &ett_x411_PerRecipientProbeSubmissionFields, + &ett_x411_MessageDeliveryEnvelope, + &ett_x411_OtherMessageDeliveryFields, + &ett_x411_ReportDeliveryEnvelope, + &ett_x411_PerRecipientReportDeliveryFields, + &ett_x411_ReportType, + &ett_x411_DeliveryReport, + &ett_x411_NonDeliveryReport, + &ett_x411_ContentTypes, + &ett_x411_ContentType, + &ett_x411_DeliveredContentType, + &ett_x411_PerMessageIndicators, + &ett_x411_OriginatorReportRequest, + &ett_x411_DeliveryFlags, + &ett_x411_OtherRecipientNames, + &ett_x411_ExtensionType, + &ett_x411_Criticality, + &ett_x411_ExtensionField, + &ett_x411_RequestedDeliveryMethod, + &ett_x411_PhysicalDeliveryModes, + &ett_x411_ContentCorrelator, + &ett_x411_RedirectionHistory, + &ett_x411_Redirection, + &ett_x411_IntendedRecipientName, + &ett_x411_DLExpansionHistory, + &ett_x411_DLExpansion, + &ett_x411_OriginatorAndDLExpansionHistory, + &ett_x411_OriginatorAndDLExpansion, + &ett_x411_PerRecipientReportFields, + &ett_x411_T_report_type, + &ett_x411_PerRecipientDeliveryReportFields, + &ett_x411_PerRecipientNonDeliveryReportFields, + &ett_x411_ReportingMTAName, + &ett_x411_ExtendedCertificates, + &ett_x411_ExtendedCertificate, + &ett_x411_DLExemptedRecipients, + &ett_x411_CertificateSelectors, + &ett_x411_MTSIdentifier, + &ett_x411_GlobalDomainIdentifier, + &ett_x411_PrivateDomainIdentifier, + &ett_x411_ORName, + &ett_x411_ORAddress, + &ett_x411_BuiltInStandardAttributes, + &ett_x411_CountryName, + &ett_x411_AdministrationDomainName, + &ett_x411_PrivateDomainName, + &ett_x411_PersonalName, + &ett_x411_OrganizationalUnitNames, + &ett_x411_BuiltInDomainDefinedAttributes, + &ett_x411_BuiltInDomainDefinedAttribute, + &ett_x411_ExtensionAttributes, + &ett_x411_ExtensionAttribute, + &ett_x411_TeletexPersonalName, + &ett_x411_UniversalPersonalName, + &ett_x411_TeletexOrganizationalUnitNames, + &ett_x411_UniversalOrganizationalUnitNames, + &ett_x411_UniversalOrBMPString, + &ett_x411_T_character_encoding, + &ett_x411_PhysicalDeliveryCountryName, + &ett_x411_PostalCode, + &ett_x411_UnformattedPostalAddress, + &ett_x411_T_printable_address, + &ett_x411_PDSParameter, + &ett_x411_ExtendedNetworkAddress, + &ett_x411_T_e163_4_address, + &ett_x411_TeletexDomainDefinedAttributes, + &ett_x411_TeletexDomainDefinedAttribute, + &ett_x411_UniversalDomainDefinedAttributes, + &ett_x411_UniversalDomainDefinedAttribute, + &ett_x411_EncodedInformationTypes, + &ett_x411_BuiltInEncodedInformationTypes, + &ett_x411_ExtendedEncodedInformationTypes, + &ett_x411_NonBasicParameters, + &ett_x411_G3FacsimileNonBasicParameters, + &ett_x411_TeletexNonBasicParameters, + &ett_x411_SecurityLabel, + &ett_x411_SecurityCategories, + &ett_x411_SecurityCategory, + +/*--- End of included file: packet-x411-ettarr.c ---*/ + + }; + + /* Register protocol */ + proto_x411 = proto_register_protocol(PNAME, PSNAME, PFNAME); + register_dissector("x411", dissect_x411, proto_x411); + /* Register fields and subtrees */ + proto_register_field_array(proto_x411, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + +} + + +/*--- proto_reg_handoff_x411 --- */ +void proto_reg_handoff_x411(void) { + dissector_handle_t handle = NULL; + + +/*--- Included file: packet-x411-dis-tab.c ---*/ + + register_ber_oid_dissector("x411.extension.1", dissect_RecipientReassignmentProhibited_PDU, proto_x411, "recipient-reassignment-prohibited"); + register_ber_oid_dissector("x411.extension.2", dissect_MTSOriginatorRequestedAlternateRecipient_PDU, proto_x411, "originator-requested-alternate-recipient"); + register_ber_oid_dissector("x411.extension.3", dissect_DLExpansionProhibited_PDU, proto_x411, "dl-expansion-prohibited"); + register_ber_oid_dissector("x411.extension.4", dissect_ConversionWithLossProhibited_PDU, proto_x411, "conversion-with-loss-prohibited"); + register_ber_oid_dissector("x411.extension.5", dissect_LatestDeliveryTime_PDU, proto_x411, "latest-delivery-time"); + register_ber_oid_dissector("x411.extension.6", dissect_RequestedDeliveryMethod_PDU, proto_x411, "requested-delivery-method"); + register_ber_oid_dissector("x411.extension.7", dissect_PhysicalForwardingProhibited_PDU, proto_x411, "physical-forwarding-prohibited"); + register_ber_oid_dissector("x411.extension.8", dissect_PhysicalForwardingAddressRequest_PDU, proto_x411, "physical-forwarding-address-request"); + register_ber_oid_dissector("x411.extension.9", dissect_PhysicalDeliveryModes_PDU, proto_x411, "physical-delivery-modes"); + register_ber_oid_dissector("x411.extension.10", dissect_RegisteredMailType_PDU, proto_x411, "registered-mail-type"); + register_ber_oid_dissector("x411.extension.11", dissect_RecipientNumberForAdvice_PDU, proto_x411, "recipient-number-for-advice"); + register_ber_oid_dissector("x411.extension.12", dissect_PhysicalRenditionAttributes_PDU, proto_x411, "physical-rendition-attributes"); + register_ber_oid_dissector("x411.extension.13", dissect_OriginatorReturnAddress_PDU, proto_x411, "originator-return-address"); + register_ber_oid_dissector("x411.extension.14", dissect_PhysicalDeliveryReportRequest_PDU, proto_x411, "physical-delivery-report-request"); + register_ber_oid_dissector("x411.extension.15", dissect_OriginatorCertificate_PDU, proto_x411, "originator-certificate"); + register_ber_oid_dissector("x411.extension.17", dissect_ContentConfidentialityAlgorithmIdentifier_PDU, proto_x411, "content-confidentiality-algorithm-identifier"); + register_ber_oid_dissector("x411.extension.20", dissect_MessageSecurityLabel_PDU, proto_x411, "message-security-label"); + register_ber_oid_dissector("x411.extension.21", dissect_ProofOfSubmissionRequest_PDU, proto_x411, "proof-of-submission-request"); + register_ber_oid_dissector("x411.extension.22", dissect_ProofOfDeliveryRequest_PDU, proto_x411, "proof-of-delivery-request"); + register_ber_oid_dissector("x411.extension.23", dissect_ContentCorrelator_PDU, proto_x411, "content-correlator"); + register_ber_oid_dissector("x411.extension.25", dissect_RedirectionHistory_PDU, proto_x411, "redirection-history"); + register_ber_oid_dissector("x411.extension.26", dissect_DLExpansionHistory_PDU, proto_x411, "dl-expansion-history"); + register_ber_oid_dissector("x411.extension.27", dissect_PhysicalForwardingAddress_PDU, proto_x411, "physical-forwarding-address"); + register_ber_oid_dissector("x411.extension.30", dissect_OriginatorAndDLExpansionHistory_PDU, proto_x411, "originator-and-DL-expansion-history"); + register_ber_oid_dissector("x411.extension.31", dissect_ReportingDLName_PDU, proto_x411, "reporting-DL-name"); + register_ber_oid_dissector("x411.extension.32", dissect_ReportingMTACertificate_PDU, proto_x411, "reporting-MTA-certificate"); + register_ber_oid_dissector("x411.extension.37", dissect_TraceInformation_PDU, proto_x411, "trace-information"); + register_ber_oid_dissector("x411.extension.38", dissect_InternalTraceInformation_PDU, proto_x411, "internal-trace-information"); + register_ber_oid_dissector("x411.extension.39", dissect_ReportingMTAName_PDU, proto_x411, "reporting-MTA-name"); + register_ber_oid_dissector("x411.extension.40", dissect_ExtendedCertificates_PDU, proto_x411, "multiple-originator-certificates"); + register_ber_oid_dissector("x411.extension.42", dissect_DLExemptedRecipients_PDU, proto_x411, "dl-exempted-recipients"); + register_ber_oid_dissector("x411.extension.45", dissect_CertificateSelectors_PDU, proto_x411, "certificate-selectors"); + register_ber_oid_dissector("x411.extension-attribute.1", dissect_CommonName_PDU, proto_x411, "common-name"); + register_ber_oid_dissector("x411.extension-attribute.2", dissect_TeletexCommonName_PDU, proto_x411, "teletex-common-name"); + register_ber_oid_dissector("x411.extension-attribute.3", dissect_TeletexOrganizationName_PDU, proto_x411, "teletex-organization-name"); + register_ber_oid_dissector("x411.extension-attribute.4", dissect_TeletexPersonalName_PDU, proto_x411, "teletex-personal-name"); + register_ber_oid_dissector("x411.extension-attribute.5", dissect_TeletexOrganizationalUnitNames_PDU, proto_x411, "teletex-organizational-unit-names"); + register_ber_oid_dissector("x411.extension-attribute.7", dissect_PDSName_PDU, proto_x411, "pds-name"); + register_ber_oid_dissector("x411.extension-attribute.8", dissect_PhysicalDeliveryCountryName_PDU, proto_x411, "physical-delivery-country-name"); + register_ber_oid_dissector("x411.extension-attribute.9", dissect_PostalCode_PDU, proto_x411, "postal-code"); + register_ber_oid_dissector("x411.extension-attribute.10", dissect_PhysicalDeliveryOfficeName_PDU, proto_x411, "physical-delivery-office-name"); + register_ber_oid_dissector("x411.extension-attribute.24", dissect_UniversalCommonName_PDU, proto_x411, "universal-common-name"); + register_ber_oid_dissector("x411.extension-attribute.25", dissect_UniversalOrganizationName_PDU, proto_x411, "universal-organization-name"); + register_ber_oid_dissector("x411.extension-attribute.26", dissect_UniversalPersonalName_PDU, proto_x411, "universal-personal-name"); + register_ber_oid_dissector("x411.extension-attribute.27", dissect_UniversalOrganizationalUnitNames_PDU, proto_x411, "universal-organizational-unit-names"); + + +/*--- End of included file: packet-x411-dis-tab.c ---*/ + + + register_ber_oid_name("2.6.0.1.6", "id-ac-mts-transfer"); + + /* we register RTSE with BER (which is used by ACSE) */ + if(handle = find_dissector("rtse")) { + register_ber_oid_dissector_handle("2.6.0.2.12", handle, 0 , "id-as-mta-rtse"); + register_ber_oid_dissector_handle("2.6.0.2.7", handle, 0 , "id-as-mtse"); + } + + /* then register ROS with RTSE */ + if(handle = find_dissector("ros")) { + register_rtse_oid_dissector_handle("2.6.0.2.12", handle, 0 , "id-as-mta-rtse"); + } + + /* and then finally X411 with ROS and RTSE */ + if(handle = find_dissector("x411")) { + register_ros_oid_dissector_handle("2.6.0.2.12", handle, 0, "id-as-mta-rtse"); + register_rtse_oid_dissector_handle("2.6.0.2.7", handle, 0, "id-as-mtse"); + + register_rtse_oid_dissector_handle("applicationProtocol.1", handle, 0, "mts-transfer-protocol-1984"); + register_rtse_oid_dissector_handle("applicationProtocol.12", handle, 0, "mta-transfer-protocol"); + } + + +} diff --git a/epan/dissectors/packet-x411.h b/epan/dissectors/packet-x411.h new file mode 100644 index 0000000000..cde0bd7408 --- /dev/null +++ b/epan/dissectors/packet-x411.h @@ -0,0 +1,52 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-x411.h */ +/* ../../tools/asn2eth.py -X -b -e -p x411 -c x411.cnf -s packet-x411-template x411.asn */ + +/* Input file: packet-x411-template.h */ + +/* packet-x411.h + * Routines for X.411 (X.400 Message Transfer) packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_X411_H +#define PACKET_X411_H + + +/*--- Included file: packet-x411-exp.h ---*/ + +int dissect_x411_OtherMessageDeliveryFields(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_MessageDeliveryTime(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_SupplementaryInformation(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_ExtendedCertificates(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_ORName(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_EncodedInformationTypes(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_G3FacsimileNonBasicParameters(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_TeletexNonBasicParameters(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); +int dissect_x411_SecurityLabel(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); + +/*--- End of included file: packet-x411-exp.h ---*/ + + +#endif /* PACKET_X411_H */ diff --git a/epan/dissectors/packet-x420.c b/epan/dissectors/packet-x420.c new file mode 100644 index 0000000000..02296b7d00 --- /dev/null +++ b/epan/dissectors/packet-x420.c @@ -0,0 +1,2600 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-x420.c */ +/* ../../tools/asn2eth.py -X -b -e -p x420 -c x420.cnf -s packet-x420-template x420.asn */ + +/* Input file: packet-x420-template.c */ + +/* packet-x420.c + * Routines for X.420 (X.400 Message Transfer) packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/conversation.h> + +#include <stdio.h> +#include <string.h> + +#include "packet-ber.h" +#include "packet-acse.h" +#include "packet-ros.h" + +#include "packet-x509af.h" +#include "packet-x411.h" + +#include "packet-x420.h" + +#define PNAME "X.420 OSI Information Object" +#define PSNAME "X420" +#define PFNAME "x420" + +/* Initialize the protocol and registered fields */ +int proto_x420 = -1; + +static char object_identifier_id[BER_MAX_OID_STR_LEN]; /* content type identifier */ + + +/*--- Included file: packet-x420-hf.c ---*/ + +static int hf_x420_OriginatingUA_PDU = -1; /* OriginatingUA */ +static int hf_x420_ipm = -1; /* IPM */ +static int hf_x420_ipn = -1; /* IPN */ +static int hf_x420_heading = -1; /* Heading */ +static int hf_x420_body = -1; /* Body */ +static int hf_x420_type = -1; /* T_type */ +static int hf_x420_value = -1; /* T_value */ +static int hf_x420_this_IPM = -1; /* ThisIPMField */ +static int hf_x420_originator = -1; /* OriginatorField */ +static int hf_x420_authorizing_users = -1; /* AuthorizingUsersField */ +static int hf_x420_primary_recipients = -1; /* PrimaryRecipientsField */ +static int hf_x420_copy_recipients = -1; /* CopyRecipientsField */ +static int hf_x420_blind_copy_recipients = -1; /* BlindCopyRecipientsField */ +static int hf_x420_replied_to_IPM = -1; /* RepliedToIPMField */ +static int hf_x420_obsoleted_IPMs = -1; /* ObsoletedIPMsField */ +static int hf_x420_related_IPMs = -1; /* RelatedIPMsField */ +static int hf_x420_subject = -1; /* SubjectField */ +static int hf_x420_expiry_time = -1; /* ExpiryTimeField */ +static int hf_x420_reply_time = -1; /* ReplyTimeField */ +static int hf_x420_reply_recipients = -1; /* ReplyRecipientsField */ +static int hf_x420_importance = -1; /* ImportanceField */ +static int hf_x420_sensitivity = -1; /* SensitivityField */ +static int hf_x420_auto_forwarded = -1; /* AutoForwardedField */ +static int hf_x420_extensions = -1; /* ExtensionsField */ +static int hf_x420_user = -1; /* ORName */ +static int hf_x420_user_relative_identifier = -1; /* LocalIPMIdentifier */ +static int hf_x420_recipient = -1; /* ORDescriptor */ +static int hf_x420_notification_requests = -1; /* NotificationRequests */ +static int hf_x420_reply_requested = -1; /* BOOLEAN */ +static int hf_x420_recipient_extensions = -1; /* RecipientExtensionsField */ +static int hf_x420_formal_name = -1; /* ORName */ +static int hf_x420_free_form_name = -1; /* FreeFormName */ +static int hf_x420_telephone_number = -1; /* TelephoneNumber */ +static int hf_x420_RecipientExtensionsField_item = -1; /* IPMSExtension */ +static int hf_x420_AuthorizingUsersField_item = -1; /* AuthorizingUsersSubfield */ +static int hf_x420_PrimaryRecipientsField_item = -1; /* PrimaryRecipientsSubfield */ +static int hf_x420_CopyRecipientsField_item = -1; /* CopyRecipientsSubfield */ +static int hf_x420_BlindCopyRecipientsField_item = -1; /* BlindCopyRecipientsSubfield */ +static int hf_x420_ObsoletedIPMsField_item = -1; /* ObsoletedIPMsSubfield */ +static int hf_x420_RelatedIPMsField_item = -1; /* RelatedIPMsSubfield */ +static int hf_x420_ReplyRecipientsField_item = -1; /* ReplyRecipientsSubfield */ +static int hf_x420_ExtensionsField_item = -1; /* IPMSExtension */ +static int hf_x420_Body_item = -1; /* BodyPart */ +static int hf_x420_ia5_text = -1; /* IA5TextBodyPart */ +static int hf_x420_g3_facsimile = -1; /* G3FacsimileBodyPart */ +static int hf_x420_g4_class1 = -1; /* G4Class1BodyPart */ +static int hf_x420_teletex = -1; /* TeletexBodyPart */ +static int hf_x420_videotex = -1; /* VideotexBodyPart */ +static int hf_x420_encrypted = -1; /* EncryptedBodyPart */ +static int hf_x420_message = -1; /* MessageBodyPart */ +static int hf_x420_mixed_mode = -1; /* MixedModeBodyPart */ +static int hf_x420_bilaterally_defined = -1; /* BilaterallyDefinedBodyPart */ +static int hf_x420_nationally_defined = -1; /* NationallyDefinedBodyPart */ +static int hf_x420_extended = -1; /* ExtendedBodyPart */ +static int hf_x420_extended_parameters = -1; /* OBJECT_IDENTIFIER */ +static int hf_x420_extended_data = -1; /* T_data */ +static int hf_x420_ia5text_parameters = -1; /* IA5TextParameters */ +static int hf_x420_ia5text_data = -1; /* IA5TextData */ +static int hf_x420_repertoire = -1; /* Repertoire */ +static int hf_x420_g3facsimile_parameters = -1; /* G3FacsimileParameters */ +static int hf_x420_g3facsimile_data = -1; /* G3FacsimileData */ +static int hf_x420_number_of_pages = -1; /* INTEGER */ +static int hf_x420_g3facsimile_non_basic_parameters = -1; /* G3FacsimileNonBasicParameters */ +static int hf_x420_G3FacsimileData_item = -1; /* BIT_STRING */ +static int hf_x420_G4Class1BodyPart_item = -1; /* Interchange_Data_Element */ +static int hf_x420_MixedModeBodyPart_item = -1; /* Interchange_Data_Element */ +static int hf_x420_teletex_parameters = -1; /* TeletexParameters */ +static int hf_x420_teletex_data = -1; /* TeletexData */ +static int hf_x420_telex_compatible = -1; /* BOOLEAN */ +static int hf_x420_teletex_non_basic_parameters = -1; /* TeletexNonBasicParameters */ +static int hf_x420_TeletexData_item = -1; /* TeletexString */ +static int hf_x420_videotex_parameters = -1; /* VideotexParameters */ +static int hf_x420_videotex_data = -1; /* VideotexData */ +static int hf_x420_syntax = -1; /* VideotexSyntax */ +static int hf_x420_encrypted_parameters = -1; /* EncryptedParameters */ +static int hf_x420_encrypted_data = -1; /* EncryptedData */ +static int hf_x420_algorithm_identifier = -1; /* AlgorithmIdentifier */ +static int hf_x420_originator_certificates = -1; /* ExtendedCertificates */ +static int hf_x420_message_parameters = -1; /* MessageParameters */ +static int hf_x420_message_data = -1; /* MessageData */ +static int hf_x420_delivery_time = -1; /* MessageDeliveryTime */ +static int hf_x420_delivery_envelope = -1; /* OtherMessageDeliveryFields */ +static int hf_x420_subject_ipm = -1; /* SubjectIPMField */ +static int hf_x420_ipn_originator = -1; /* IPNOriginatorField */ +static int hf_x420_ipm_intended_recipient = -1; /* IPMIntendedRecipientField */ +static int hf_x420_conversion_eits = -1; /* ConversionEITsField */ +static int hf_x420_notification_extensions = -1; /* NotificationExtensionsField */ +static int hf_x420_choice = -1; /* T_choice */ +static int hf_x420_non_receipt_fields = -1; /* NonReceiptFields */ +static int hf_x420_receipt_fields = -1; /* ReceiptFields */ +static int hf_x420_other_notification_type_fields = -1; /* OtherNotificationTypeFields */ +static int hf_x420_non_receipt_reason = -1; /* NonReceiptReasonField */ +static int hf_x420_discard_reason = -1; /* DiscardReasonField */ +static int hf_x420_auto_forward_comment = -1; /* AutoForwardCommentField */ +static int hf_x420_returned_ipm = -1; /* ReturnedIPMField */ +static int hf_x420_nrn_extensions = -1; /* NRNExtensionsField */ +static int hf_x420_receipt_time = -1; /* ReceiptTimeField */ +static int hf_x420_acknowledgment_mode = -1; /* AcknowledgmentModeField */ +static int hf_x420_suppl_receipt_info = -1; /* SupplReceiptInfoField */ +static int hf_x420_rn_extensions = -1; /* RNExtensionsField */ +static int hf_x420_NotificationExtensionsField_item = -1; /* IPMSExtension */ +static int hf_x420_NRNExtensionsField_item = -1; /* IPMSExtension */ +static int hf_x420_RNExtensionsField_item = -1; /* IPMSExtension */ +static int hf_x420_OtherNotificationTypeFields_item = -1; /* IPMSExtension */ +static int hf_x420_advice = -1; /* BodyPart */ +static int hf_x420_next_available = -1; /* Time */ +static int hf_x420_new_address = -1; /* ORDescriptor */ +static int hf_x420_effective_from = -1; /* Time */ +static int hf_x420_assembly_instructions = -1; /* BodyPartReferences */ +static int hf_x420_BodyPartReferences_item = -1; /* BodyPartReference */ +static int hf_x420_stored_entry = -1; /* SequenceNumber */ +static int hf_x420_stored_content = -1; /* SequenceNumber */ +static int hf_x420_submitted_body_part = -1; /* INTEGER_1_MAX */ +static int hf_x420_stored_body_part = -1; /* T_stored_body_part */ +static int hf_x420_message_entry = -1; /* SequenceNumber */ +static int hf_x420_body_part_number = -1; /* INTEGER_1_MAX */ +/* named bits */ +static int hf_x420_NotificationRequests_rn = -1; +static int hf_x420_NotificationRequests_nrn = -1; +static int hf_x420_NotificationRequests_ipm_return = -1; +static int hf_x420_NotificationRequests_an_supported = -1; +static int hf_x420_NotificationRequests_suppress_an = -1; + +/*--- End of included file: packet-x420-hf.c ---*/ + + +/* Initialize the subtree pointers */ +static gint ett_x420 = -1; + +/*--- Included file: packet-x420-ett.c ---*/ + +static gint ett_x420_InformationObject = -1; +static gint ett_x420_IPM = -1; +static gint ett_x420_IPMSExtension = -1; +static gint ett_x420_Heading = -1; +static gint ett_x420_IPMIdentifier = -1; +static gint ett_x420_RecipientSpecifier = -1; +static gint ett_x420_ORDescriptor = -1; +static gint ett_x420_NotificationRequests = -1; +static gint ett_x420_RecipientExtensionsField = -1; +static gint ett_x420_AuthorizingUsersField = -1; +static gint ett_x420_PrimaryRecipientsField = -1; +static gint ett_x420_CopyRecipientsField = -1; +static gint ett_x420_BlindCopyRecipientsField = -1; +static gint ett_x420_ObsoletedIPMsField = -1; +static gint ett_x420_RelatedIPMsField = -1; +static gint ett_x420_ReplyRecipientsField = -1; +static gint ett_x420_ExtensionsField = -1; +static gint ett_x420_Body = -1; +static gint ett_x420_BodyPart = -1; +static gint ett_x420_ExtendedBodyPart = -1; +static gint ett_x420_IA5TextBodyPart = -1; +static gint ett_x420_IA5TextParameters = -1; +static gint ett_x420_G3FacsimileBodyPart = -1; +static gint ett_x420_G3FacsimileParameters = -1; +static gint ett_x420_G3FacsimileData = -1; +static gint ett_x420_G4Class1BodyPart = -1; +static gint ett_x420_MixedModeBodyPart = -1; +static gint ett_x420_TeletexBodyPart = -1; +static gint ett_x420_TeletexParameters = -1; +static gint ett_x420_TeletexData = -1; +static gint ett_x420_VideotexBodyPart = -1; +static gint ett_x420_VideotexParameters = -1; +static gint ett_x420_EncryptedBodyPart = -1; +static gint ett_x420_EncryptedParameters = -1; +static gint ett_x420_MessageBodyPart = -1; +static gint ett_x420_MessageParameters = -1; +static gint ett_x420_IPN = -1; +static gint ett_x420_T_choice = -1; +static gint ett_x420_CommonFields = -1; +static gint ett_x420_NonReceiptFields = -1; +static gint ett_x420_ReceiptFields = -1; +static gint ett_x420_NotificationExtensionsField = -1; +static gint ett_x420_NRNExtensionsField = -1; +static gint ett_x420_RNExtensionsField = -1; +static gint ett_x420_OtherNotificationTypeFields = -1; +static gint ett_x420_AbsenceAdvice = -1; +static gint ett_x420_ChangeOfAddressAdvice = -1; +static gint ett_x420_IPMAssemblyInstructions = -1; +static gint ett_x420_BodyPartReferences = -1; +static gint ett_x420_BodyPartReference = -1; +static gint ett_x420_T_stored_body_part = -1; + +/*--- End of included file: packet-x420-ett.c ---*/ + + + +/*--- Included file: packet-x420-fn.c ---*/ + +/*--- Cyclic dependencies ---*/ + +/* IPM -> Body -> BodyPart -> MessageBodyPart -> MessageData -> IPM */ +static int dissect_x420_IPM(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); + +static int dissect_ipm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPM(TRUE, tvb, offset, pinfo, tree, hf_x420_ipm); +} + + +/*--- Fields for imported types ---*/ + +static int dissect_user(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORName(FALSE, tvb, offset, pinfo, tree, hf_x420_user); +} +static int dissect_formal_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ORName(FALSE, tvb, offset, pinfo, tree, hf_x420_formal_name); +} +static int dissect_g3facsimile_non_basic_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_G3FacsimileNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_non_basic_parameters); +} +static int dissect_teletex_non_basic_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_TeletexNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x420_teletex_non_basic_parameters); +} +static int dissect_algorithm_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_algorithm_identifier); +} +static int dissect_originator_certificates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_ExtendedCertificates(FALSE, tvb, offset, pinfo, tree, hf_x420_originator_certificates); +} +static int dissect_delivery_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_MessageDeliveryTime(TRUE, tvb, offset, pinfo, tree, hf_x420_delivery_time); +} +static int dissect_delivery_envelope_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x411_OtherMessageDeliveryFields(TRUE, tvb, offset, pinfo, tree, hf_x420_delivery_envelope); +} + + + +static int +dissect_x420_Time(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_next_available(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_Time(FALSE, tvb, offset, pinfo, tree, hf_x420_next_available); +} +static int dissect_effective_from_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_Time(TRUE, tvb, offset, pinfo, tree, hf_x420_effective_from); +} + + + +static int +dissect_x420_LocalIPMIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_user_relative_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_LocalIPMIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_user_relative_identifier); +} + + +static const ber_sequence_t IPMIdentifier_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_user }, + { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_user_relative_identifier }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_IPMIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + IPMIdentifier_set, hf_index, ett_x420_IPMIdentifier); + + return offset; +} + + + +static int +dissect_x420_ThisIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_this_IPM(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ThisIPMField(FALSE, tvb, offset, pinfo, tree, hf_x420_this_IPM); +} + + + +static int +dissect_x420_FreeFormName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_free_form_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_FreeFormName(TRUE, tvb, offset, pinfo, tree, hf_x420_free_form_name); +} + + + +static int +dissect_x420_TelephoneNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_telephone_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_TelephoneNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_telephone_number); +} + + +static const ber_sequence_t ORDescriptor_set[] = { + { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_formal_name }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_free_form_name_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_telephone_number_impl }, + { 0, 0, 0, NULL } +}; + +int +dissect_x420_ORDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ORDescriptor_set, hf_index, ett_x420_ORDescriptor); + + return offset; +} +static int dissect_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_x420_recipient); +} +static int dissect_new_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_x420_new_address); +} + + + +static int +dissect_x420_OriginatorField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_originator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_OriginatorField(TRUE, tvb, offset, pinfo, tree, hf_x420_originator); +} + + + +static int +dissect_x420_AuthorizingUsersSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_AuthorizingUsersField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_AuthorizingUsersSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_AuthorizingUsersField_item); +} + + +static const ber_sequence_t AuthorizingUsersField_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_AuthorizingUsersField_item }, +}; + +static int +dissect_x420_AuthorizingUsersField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + AuthorizingUsersField_sequence_of, hf_index, ett_x420_AuthorizingUsersField); + + return offset; +} +static int dissect_authorizing_users_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_AuthorizingUsersField(TRUE, tvb, offset, pinfo, tree, hf_x420_authorizing_users); +} + + +static const asn_namedbit NotificationRequests_bits[] = { + { 0, &hf_x420_NotificationRequests_rn, -1, -1, "rn", NULL }, + { 1, &hf_x420_NotificationRequests_nrn, -1, -1, "nrn", NULL }, + { 2, &hf_x420_NotificationRequests_ipm_return, -1, -1, "ipm-return", NULL }, + { 3, &hf_x420_NotificationRequests_an_supported, -1, -1, "an-supported", NULL }, + { 4, &hf_x420_NotificationRequests_suppress_an, -1, -1, "suppress-an", NULL }, + { 0, NULL, 0, 0, NULL, NULL } +}; + +static int +dissect_x420_NotificationRequests(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + NotificationRequests_bits, hf_index, ett_x420_NotificationRequests, + NULL); + + return offset; +} +static int dissect_notification_requests_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_NotificationRequests(TRUE, tvb, offset, pinfo, tree, hf_x420_notification_requests); +} + + + +static int +dissect_x420_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index); + + return offset; +} +static int dissect_reply_requested_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_requested); +} +static int dissect_telex_compatible_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_x420_telex_compatible); +} + + + +static int +dissect_x420_T_type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + object_identifier_id); + + + return offset; +} +static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_T_type(FALSE, tvb, offset, pinfo, tree, hf_x420_type); +} + + + +static int +dissect_x420_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + + offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree); + + + return offset; +} +static int dissect_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_T_value(FALSE, tvb, offset, pinfo, tree, hf_x420_value); +} + + +static const ber_sequence_t IPMSExtension_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type }, + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_value }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_IPMSExtension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IPMSExtension_sequence, hf_index, ett_x420_IPMSExtension); + + return offset; +} +static int dissect_RecipientExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_RecipientExtensionsField_item); +} +static int dissect_ExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_ExtensionsField_item); +} +static int dissect_NotificationExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_NotificationExtensionsField_item); +} +static int dissect_NRNExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_NRNExtensionsField_item); +} +static int dissect_RNExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_RNExtensionsField_item); +} +static int dissect_OtherNotificationTypeFields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_OtherNotificationTypeFields_item); +} + + +static const ber_sequence_t RecipientExtensionsField_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RecipientExtensionsField_item }, +}; + +static int +dissect_x420_RecipientExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + RecipientExtensionsField_set_of, hf_index, ett_x420_RecipientExtensionsField); + + return offset; +} +static int dissect_recipient_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_RecipientExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_recipient_extensions); +} + + +static const ber_sequence_t RecipientSpecifier_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_recipient_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_requests_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_requested_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_RecipientSpecifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RecipientSpecifier_set, hf_index, ett_x420_RecipientSpecifier); + + return offset; +} + + + +static int +dissect_x420_PrimaryRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_PrimaryRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_PrimaryRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_PrimaryRecipientsField_item); +} + + +static const ber_sequence_t PrimaryRecipientsField_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_PrimaryRecipientsField_item }, +}; + +static int +dissect_x420_PrimaryRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + PrimaryRecipientsField_sequence_of, hf_index, ett_x420_PrimaryRecipientsField); + + return offset; +} +static int dissect_primary_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_PrimaryRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_primary_recipients); +} + + + +static int +dissect_x420_CopyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_CopyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_CopyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_CopyRecipientsField_item); +} + + +static const ber_sequence_t CopyRecipientsField_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_CopyRecipientsField_item }, +}; + +static int +dissect_x420_CopyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + CopyRecipientsField_sequence_of, hf_index, ett_x420_CopyRecipientsField); + + return offset; +} +static int dissect_copy_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_CopyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_copy_recipients); +} + + + +static int +dissect_x420_BlindCopyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_BlindCopyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BlindCopyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_BlindCopyRecipientsField_item); +} + + +static const ber_sequence_t BlindCopyRecipientsField_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_BlindCopyRecipientsField_item }, +}; + +static int +dissect_x420_BlindCopyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + BlindCopyRecipientsField_sequence_of, hf_index, ett_x420_BlindCopyRecipientsField); + + return offset; +} +static int dissect_blind_copy_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BlindCopyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_blind_copy_recipients); +} + + + +static int +dissect_x420_RepliedToIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_replied_to_IPM_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_RepliedToIPMField(TRUE, tvb, offset, pinfo, tree, hf_x420_replied_to_IPM); +} + + + +static int +dissect_x420_ObsoletedIPMsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_ObsoletedIPMsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ObsoletedIPMsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_ObsoletedIPMsField_item); +} + + +static const ber_sequence_t ObsoletedIPMsField_sequence_of[1] = { + { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_ObsoletedIPMsField_item }, +}; + +static int +dissect_x420_ObsoletedIPMsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + ObsoletedIPMsField_sequence_of, hf_index, ett_x420_ObsoletedIPMsField); + + return offset; +} +static int dissect_obsoleted_IPMs_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ObsoletedIPMsField(TRUE, tvb, offset, pinfo, tree, hf_x420_obsoleted_IPMs); +} + + + +static int +dissect_x420_RelatedIPMsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_RelatedIPMsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_RelatedIPMsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_RelatedIPMsField_item); +} + + +static const ber_sequence_t RelatedIPMsField_sequence_of[1] = { + { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_RelatedIPMsField_item }, +}; + +static int +dissect_x420_RelatedIPMsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + RelatedIPMsField_sequence_of, hf_index, ett_x420_RelatedIPMsField); + + return offset; +} +static int dissect_related_IPMs_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_RelatedIPMsField(TRUE, tvb, offset, pinfo, tree, hf_x420_related_IPMs); +} + + + +static int +dissect_x420_SubjectField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_subject(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_SubjectField(FALSE, tvb, offset, pinfo, tree, hf_x420_subject); +} + + + +static int +dissect_x420_ExpiryTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_expiry_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ExpiryTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_expiry_time); +} + + + +static int +dissect_x420_ReplyTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_reply_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ReplyTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_time); +} + + + +static int +dissect_x420_ReplyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_ReplyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ReplyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_ReplyRecipientsField_item); +} + + +static const ber_sequence_t ReplyRecipientsField_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ReplyRecipientsField_item }, +}; + +static int +dissect_x420_ReplyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + ReplyRecipientsField_sequence_of, hf_index, ett_x420_ReplyRecipientsField); + + return offset; +} +static int dissect_reply_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ReplyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_recipients); +} + + +static const value_string x420_ImportanceField_vals[] = { + { 0, "low" }, + { 1, "normal" }, + { 2, "high" }, + { 0, NULL } +}; + + +static int +dissect_x420_ImportanceField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_importance_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ImportanceField(TRUE, tvb, offset, pinfo, tree, hf_x420_importance); +} + + +static const value_string x420_SensitivityField_vals[] = { + { 1, "personal" }, + { 2, "private" }, + { 3, "company-confidential" }, + { 0, NULL } +}; + + +static int +dissect_x420_SensitivityField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sensitivity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_SensitivityField(TRUE, tvb, offset, pinfo, tree, hf_x420_sensitivity); +} + + + +static int +dissect_x420_AutoForwardedField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index); + + return offset; +} +static int dissect_auto_forwarded_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_AutoForwardedField(TRUE, tvb, offset, pinfo, tree, hf_x420_auto_forwarded); +} + + +static const ber_sequence_t ExtensionsField_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ExtensionsField_item }, +}; + +static int +dissect_x420_ExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + ExtensionsField_set_of, hf_index, ett_x420_ExtensionsField); + + return offset; +} +static int dissect_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_extensions); +} + + +static const ber_sequence_t Heading_set[] = { + { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_this_IPM }, + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originator_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizing_users_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_primary_recipients_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_copy_recipients_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_blind_copy_recipients_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_replied_to_IPM_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_obsoleted_IPMs_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_related_IPMs_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_subject }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_expiry_time_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_time_impl }, + { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_recipients_impl }, + { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_importance_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sensitivity_impl }, + { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auto_forwarded_impl }, + { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_Heading(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Heading_set, hf_index, ett_x420_Heading); + + return offset; +} +static int dissect_heading(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_Heading(FALSE, tvb, offset, pinfo, tree, hf_x420_heading); +} + + +static const value_string x420_Repertoire_vals[] = { + { 2, "ita2" }, + { 5, "ia5" }, + { 0, NULL } +}; + + +static int +dissect_x420_Repertoire(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_repertoire_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_Repertoire(TRUE, tvb, offset, pinfo, tree, hf_x420_repertoire); +} + + +static const ber_sequence_t IA5TextParameters_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_repertoire_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_IA5TextParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + IA5TextParameters_set, hf_index, ett_x420_IA5TextParameters); + + return offset; +} +static int dissect_ia5text_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IA5TextParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_ia5text_parameters); +} + + + +static int +dissect_x420_IA5TextData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_ia5text_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IA5TextData(FALSE, tvb, offset, pinfo, tree, hf_x420_ia5text_data); +} + + +static const ber_sequence_t IA5TextBodyPart_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ia5text_parameters }, + { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_ia5text_data }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_IA5TextBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IA5TextBodyPart_sequence, hf_index, ett_x420_IA5TextBodyPart); + + return offset; +} +static int dissect_ia5_text_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IA5TextBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_ia5_text); +} + + + +static int +dissect_x420_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_number_of_pages_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x420_number_of_pages); +} + + +static const ber_sequence_t G3FacsimileParameters_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_number_of_pages_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_g3facsimile_non_basic_parameters_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_G3FacsimileParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + G3FacsimileParameters_set, hf_index, ett_x420_G3FacsimileParameters); + + return offset; +} +static int dissect_g3facsimile_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_G3FacsimileParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_parameters); +} + + + +static int +dissect_x420_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + NULL, hf_index, -1, + NULL); + + return offset; +} +static int dissect_G3FacsimileData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_x420_G3FacsimileData_item); +} + + +static const ber_sequence_t G3FacsimileData_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_G3FacsimileData_item }, +}; + +static int +dissect_x420_G3FacsimileData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + G3FacsimileData_sequence_of, hf_index, ett_x420_G3FacsimileData); + + return offset; +} +static int dissect_g3facsimile_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_G3FacsimileData(FALSE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_data); +} + + +static const ber_sequence_t G3FacsimileBodyPart_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_g3facsimile_parameters }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_g3facsimile_data }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_G3FacsimileBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + G3FacsimileBodyPart_sequence, hf_index, ett_x420_G3FacsimileBodyPart); + + return offset; +} +static int dissect_g3_facsimile_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_G3FacsimileBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_g3_facsimile); +} + + + +static int +dissect_x420_Interchange_Data_Element(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/* XXX Not implemented yet */ + + + return offset; +} +static int dissect_G4Class1BodyPart_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_Interchange_Data_Element(FALSE, tvb, offset, pinfo, tree, hf_x420_G4Class1BodyPart_item); +} +static int dissect_MixedModeBodyPart_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_Interchange_Data_Element(FALSE, tvb, offset, pinfo, tree, hf_x420_MixedModeBodyPart_item); +} + + +static const ber_sequence_t G4Class1BodyPart_sequence_of[1] = { + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_G4Class1BodyPart_item }, +}; + +static int +dissect_x420_G4Class1BodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + G4Class1BodyPart_sequence_of, hf_index, ett_x420_G4Class1BodyPart); + + return offset; +} +static int dissect_g4_class1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_G4Class1BodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_g4_class1); +} + + +static const ber_sequence_t TeletexParameters_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_number_of_pages_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_telex_compatible_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_non_basic_parameters_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_TeletexParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TeletexParameters_set, hf_index, ett_x420_TeletexParameters); + + return offset; +} +static int dissect_teletex_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_TeletexParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_teletex_parameters); +} + + + +static int +dissect_x420_TeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_TeletexData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_x420_TeletexData_item); +} + + +static const ber_sequence_t TeletexData_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_TeletexData_item }, +}; + +static int +dissect_x420_TeletexData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + TeletexData_sequence_of, hf_index, ett_x420_TeletexData); + + return offset; +} +static int dissect_teletex_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_TeletexData(FALSE, tvb, offset, pinfo, tree, hf_x420_teletex_data); +} + + +static const ber_sequence_t TeletexBodyPart_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_teletex_parameters }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_teletex_data }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_TeletexBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + TeletexBodyPart_sequence, hf_index, ett_x420_TeletexBodyPart); + + return offset; +} +static int dissect_teletex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_TeletexBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_teletex); +} + + +static const value_string x420_VideotexSyntax_vals[] = { + { 0, "ids" }, + { 1, "data-syntax1" }, + { 2, "data-syntax2" }, + { 3, "data-syntax3" }, + { 0, NULL } +}; + + +static int +dissect_x420_VideotexSyntax(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_syntax_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_VideotexSyntax(TRUE, tvb, offset, pinfo, tree, hf_x420_syntax); +} + + +static const ber_sequence_t VideotexParameters_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_syntax_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_VideotexParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + VideotexParameters_set, hf_index, ett_x420_VideotexParameters); + + return offset; +} +static int dissect_videotex_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_VideotexParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_videotex_parameters); +} + + + +static int +dissect_x420_VideotexData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_VideotexString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_videotex_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_VideotexData(FALSE, tvb, offset, pinfo, tree, hf_x420_videotex_data); +} + + +static const ber_sequence_t VideotexBodyPart_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_videotex_parameters }, + { BER_CLASS_UNI, BER_UNI_TAG_VideotexString, BER_FLAGS_NOOWNTAG, dissect_videotex_data }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_VideotexBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + VideotexBodyPart_sequence, hf_index, ett_x420_VideotexBodyPart); + + return offset; +} +static int dissect_videotex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_VideotexBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_videotex); +} + + +static const ber_sequence_t EncryptedParameters_set[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithm_identifier }, + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_originator_certificates }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_EncryptedParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + EncryptedParameters_set, hf_index, ett_x420_EncryptedParameters); + + return offset; +} +static int dissect_encrypted_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_EncryptedParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_encrypted_parameters); +} + + + +static int +dissect_x420_EncryptedData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset, + NULL, hf_index, -1, + NULL); + + return offset; +} +static int dissect_encrypted_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_EncryptedData(FALSE, tvb, offset, pinfo, tree, hf_x420_encrypted_data); +} + + +static const ber_sequence_t EncryptedBodyPart_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_encrypted_parameters }, + { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted_data }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_EncryptedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + EncryptedBodyPart_sequence, hf_index, ett_x420_EncryptedBodyPart); + + return offset; +} +static int dissect_encrypted_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_EncryptedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_encrypted); +} + + +static const ber_sequence_t MessageParameters_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_time_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_envelope_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_MessageParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageParameters_set, hf_index, ett_x420_MessageParameters); + + return offset; +} +static int dissect_message_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_MessageParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_message_parameters); +} + + + +static int +dissect_x420_MessageData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_IPM(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_message_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_MessageData(FALSE, tvb, offset, pinfo, tree, hf_x420_message_data); +} + + +static const ber_sequence_t MessageBodyPart_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_parameters }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_message_data }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_MessageBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + MessageBodyPart_sequence, hf_index, ett_x420_MessageBodyPart); + + return offset; +} +static int dissect_message_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_MessageBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_message); +} + + +static const ber_sequence_t MixedModeBodyPart_sequence_of[1] = { + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_MixedModeBodyPart_item }, +}; + +static int +dissect_x420_MixedModeBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + MixedModeBodyPart_sequence_of, hf_index, ett_x420_MixedModeBodyPart); + + return offset; +} +static int dissect_mixed_mode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_MixedModeBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_mixed_mode); +} + + + +static int +dissect_x420_BilaterallyDefinedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_bilaterally_defined_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BilaterallyDefinedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_bilaterally_defined); +} + + + +static int +dissect_x420_NationallyDefinedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/* XXX Not implemented yet */ + + + return offset; +} +static int dissect_nationally_defined_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_NationallyDefinedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_nationally_defined); +} + + + +static int +dissect_x420_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_extended_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_OBJECT_IDENTIFIER(TRUE, tvb, offset, pinfo, tree, hf_x420_extended_parameters); +} + + + +static int +dissect_x420_T_data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +/* XXX Not implemented yet */ + + + return offset; +} +static int dissect_extended_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_T_data(FALSE, tvb, offset, pinfo, tree, hf_x420_extended_data); +} + + +static const ber_sequence_t ExtendedBodyPart_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_extended_parameters_impl }, + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_extended_data }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_ExtendedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ExtendedBodyPart_sequence, hf_index, ett_x420_ExtendedBodyPart); + + return offset; +} +static int dissect_extended_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ExtendedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_extended); +} + + +static const value_string x420_BodyPart_vals[] = { + { 0, "ia5-text" }, + { 3, "g3-facsimile" }, + { 4, "g4-class1" }, + { 5, "teletex" }, + { 6, "videotex" }, + { 8, "encrypted" }, + { 9, "message" }, + { 11, "mixed-mode" }, + { 14, "bilaterally-defined" }, + { 7, "nationally-defined" }, + { 15, "extended" }, + { 0, NULL } +}; + +static const ber_choice_t BodyPart_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_ia5_text_impl }, + { 3, BER_CLASS_CON, 3, 0, dissect_g3_facsimile_impl }, + { 4, BER_CLASS_CON, 4, 0, dissect_g4_class1_impl }, + { 5, BER_CLASS_CON, 5, 0, dissect_teletex_impl }, + { 6, BER_CLASS_CON, 6, 0, dissect_videotex_impl }, + { 8, BER_CLASS_CON, 8, 0, dissect_encrypted_impl }, + { 9, BER_CLASS_CON, 9, 0, dissect_message_impl }, + { 11, BER_CLASS_CON, 11, 0, dissect_mixed_mode_impl }, + { 14, BER_CLASS_CON, 14, 0, dissect_bilaterally_defined_impl }, + { 7, BER_CLASS_CON, 7, 0, dissect_nationally_defined_impl }, + { 15, BER_CLASS_CON, 15, 0, dissect_extended_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x420_BodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + BodyPart_choice, hf_index, ett_x420_BodyPart, + NULL); + + return offset; +} +static int dissect_Body_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BodyPart(FALSE, tvb, offset, pinfo, tree, hf_x420_Body_item); +} +static int dissect_advice(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BodyPart(FALSE, tvb, offset, pinfo, tree, hf_x420_advice); +} + + +static const ber_sequence_t Body_sequence_of[1] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_Body_item }, +}; + +static int +dissect_x420_Body(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + Body_sequence_of, hf_index, ett_x420_Body); + + return offset; +} +static int dissect_body(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_Body(FALSE, tvb, offset, pinfo, tree, hf_x420_body); +} + + +static const ber_sequence_t IPM_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_heading }, + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_body }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_IPM(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IPM_sequence, hf_index, ett_x420_IPM); + + return offset; +} + + + +static int +dissect_x420_SubjectIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_subject_ipm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_SubjectIPMField(FALSE, tvb, offset, pinfo, tree, hf_x420_subject_ipm); +} + + + +static int +dissect_x420_IPNOriginatorField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_ipn_originator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPNOriginatorField(TRUE, tvb, offset, pinfo, tree, hf_x420_ipn_originator); +} + + + +static int +dissect_x420_IPMIntendedRecipientField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_ipm_intended_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPMIntendedRecipientField(TRUE, tvb, offset, pinfo, tree, hf_x420_ipm_intended_recipient); +} + + + +static int +dissect_x420_ConversionEITsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_EncodedInformationTypes(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_conversion_eits(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ConversionEITsField(FALSE, tvb, offset, pinfo, tree, hf_x420_conversion_eits); +} + + +static const ber_sequence_t NotificationExtensionsField_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_NotificationExtensionsField_item }, +}; + +static int +dissect_x420_NotificationExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + NotificationExtensionsField_set_of, hf_index, ett_x420_NotificationExtensionsField); + + return offset; +} +static int dissect_notification_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_NotificationExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_notification_extensions); +} + + +static const value_string x420_NonReceiptReasonField_vals[] = { + { 0, "ipm-discarded" }, + { 1, "ipm-auto-forwarded" }, + { 0, NULL } +}; + + +static int +dissect_x420_NonReceiptReasonField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_non_receipt_reason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_NonReceiptReasonField(TRUE, tvb, offset, pinfo, tree, hf_x420_non_receipt_reason); +} + + +static const value_string x420_DiscardReasonField_vals[] = { + { 0, "ipm-expired" }, + { 1, "ipm-obsoleted" }, + { 2, "user-subscription-terminated" }, + { 3, "not-used" }, + { 0, NULL } +}; + + +static int +dissect_x420_DiscardReasonField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_discard_reason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_DiscardReasonField(TRUE, tvb, offset, pinfo, tree, hf_x420_discard_reason); +} + + + +static int +dissect_x420_AutoForwardComment(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_x420_AutoForwardCommentField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_AutoForwardComment(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_auto_forward_comment_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_AutoForwardCommentField(TRUE, tvb, offset, pinfo, tree, hf_x420_auto_forward_comment); +} + + + +static int +dissect_x420_ReturnedIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_IPM(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_returned_ipm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ReturnedIPMField(TRUE, tvb, offset, pinfo, tree, hf_x420_returned_ipm); +} + + +static const ber_sequence_t NRNExtensionsField_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_NRNExtensionsField_item }, +}; + +static int +dissect_x420_NRNExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + NRNExtensionsField_set_of, hf_index, ett_x420_NRNExtensionsField); + + return offset; +} +static int dissect_nrn_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_NRNExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_nrn_extensions); +} + + +static const ber_sequence_t NonReceiptFields_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_non_receipt_reason_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_discard_reason_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auto_forward_comment_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_returned_ipm_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nrn_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_NonReceiptFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + NonReceiptFields_set, hf_index, ett_x420_NonReceiptFields); + + return offset; +} +static int dissect_non_receipt_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_NonReceiptFields(TRUE, tvb, offset, pinfo, tree, hf_x420_non_receipt_fields); +} + + + +static int +dissect_x420_ReceiptTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_receipt_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ReceiptTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_receipt_time); +} + + +static const value_string x420_AcknowledgmentModeField_vals[] = { + { 0, "manual" }, + { 1, "automatic" }, + { 0, NULL } +}; + + +static int +dissect_x420_AcknowledgmentModeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_acknowledgment_mode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_AcknowledgmentModeField(TRUE, tvb, offset, pinfo, tree, hf_x420_acknowledgment_mode); +} + + + +static int +dissect_x420_SupplReceiptInfoField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_x411_SupplementaryInformation(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_suppl_receipt_info_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_SupplReceiptInfoField(TRUE, tvb, offset, pinfo, tree, hf_x420_suppl_receipt_info); +} + + +static const ber_sequence_t RNExtensionsField_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RNExtensionsField_item }, +}; + +static int +dissect_x420_RNExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + RNExtensionsField_set_of, hf_index, ett_x420_RNExtensionsField); + + return offset; +} +static int dissect_rn_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_RNExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_rn_extensions); +} + + +static const ber_sequence_t ReceiptFields_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_receipt_time_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acknowledgment_mode_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suppl_receipt_info_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_rn_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_ReceiptFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ReceiptFields_set, hf_index, ett_x420_ReceiptFields); + + return offset; +} +static int dissect_receipt_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_ReceiptFields(TRUE, tvb, offset, pinfo, tree, hf_x420_receipt_fields); +} + + +static const ber_sequence_t OtherNotificationTypeFields_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_OtherNotificationTypeFields_item }, +}; + +static int +dissect_x420_OtherNotificationTypeFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + OtherNotificationTypeFields_set_of, hf_index, ett_x420_OtherNotificationTypeFields); + + return offset; +} +static int dissect_other_notification_type_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_OtherNotificationTypeFields(TRUE, tvb, offset, pinfo, tree, hf_x420_other_notification_type_fields); +} + + +static const value_string x420_T_choice_vals[] = { + { 0, "non-receipt-fields" }, + { 1, "receipt-fields" }, + { 2, "other-notification-type-fields" }, + { 0, NULL } +}; + +static const ber_choice_t T_choice_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_non_receipt_fields_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_receipt_fields_impl }, + { 2, BER_CLASS_CON, 2, 0, dissect_other_notification_type_fields_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x420_T_choice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + T_choice_choice, hf_index, ett_x420_T_choice, + NULL); + + return offset; +} +static int dissect_choice_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_T_choice(TRUE, tvb, offset, pinfo, tree, hf_x420_choice); +} + + +static const ber_sequence_t IPN_set[] = { + { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_subject_ipm }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipn_originator_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipm_intended_recipient_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_conversion_eits }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_extensions_impl }, + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_choice_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_IPN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + IPN_set, hf_index, ett_x420_IPN); + + return offset; +} +static int dissect_ipn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_IPN(TRUE, tvb, offset, pinfo, tree, hf_x420_ipn); +} + + +static const value_string x420_InformationObject_vals[] = { + { 0, "ipm" }, + { 1, "ipn" }, + { 0, NULL } +}; + +static const ber_choice_t InformationObject_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_ipm_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_ipn_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x420_InformationObject(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + InformationObject_choice, hf_index, ett_x420_InformationObject, + NULL); + + return offset; +} + + +static const ber_sequence_t CommonFields_set[] = { + { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_subject_ipm }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipn_originator_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipm_intended_recipient_impl }, + { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_conversion_eits }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_extensions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_CommonFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CommonFields_set, hf_index, ett_x420_CommonFields); + + return offset; +} + + +static const ber_sequence_t AbsenceAdvice_sequence[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_advice }, + { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_next_available }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_AbsenceAdvice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AbsenceAdvice_sequence, hf_index, ett_x420_AbsenceAdvice); + + return offset; +} + + +static const ber_sequence_t ChangeOfAddressAdvice_sequence[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_new_address_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_effective_from_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_ChangeOfAddressAdvice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ChangeOfAddressAdvice_sequence, hf_index, ett_x420_ChangeOfAddressAdvice); + + return offset; +} + + + +static int +dissect_x420_SequenceNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_stored_entry_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_SequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_entry); +} +static int dissect_stored_content_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_SequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_content); +} +static int dissect_message_entry(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_SequenceNumber(FALSE, tvb, offset, pinfo, tree, hf_x420_message_entry); +} + + + +static int +dissect_x420_INTEGER_1_MAX(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_submitted_body_part_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_INTEGER_1_MAX(TRUE, tvb, offset, pinfo, tree, hf_x420_submitted_body_part); +} +static int dissect_body_part_number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_INTEGER_1_MAX(FALSE, tvb, offset, pinfo, tree, hf_x420_body_part_number); +} + + +static const ber_sequence_t T_stored_body_part_sequence[] = { + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_message_entry }, + { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_body_part_number }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_T_stored_body_part(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + T_stored_body_part_sequence, hf_index, ett_x420_T_stored_body_part); + + return offset; +} +static int dissect_stored_body_part_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_T_stored_body_part(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_body_part); +} + + +static const value_string x420_BodyPartReference_vals[] = { + { 0, "stored-entry" }, + { 1, "stored-content" }, + { 2, "submitted-body-part" }, + { 3, "stored-body-part" }, + { 0, NULL } +}; + +static const ber_choice_t BodyPartReference_choice[] = { + { 0, BER_CLASS_CON, 0, 0, dissect_stored_entry_impl }, + { 1, BER_CLASS_CON, 1, 0, dissect_stored_content_impl }, + { 2, BER_CLASS_CON, 2, 0, dissect_submitted_body_part_impl }, + { 3, BER_CLASS_CON, 3, 0, dissect_stored_body_part_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_x420_BodyPartReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + BodyPartReference_choice, hf_index, ett_x420_BodyPartReference, + NULL); + + return offset; +} +static int dissect_BodyPartReferences_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BodyPartReference(FALSE, tvb, offset, pinfo, tree, hf_x420_BodyPartReferences_item); +} + + +static const ber_sequence_t BodyPartReferences_sequence_of[1] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BodyPartReferences_item }, +}; + +static int +dissect_x420_BodyPartReferences(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + BodyPartReferences_sequence_of, hf_index, ett_x420_BodyPartReferences); + + return offset; +} +static int dissect_assembly_instructions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_x420_BodyPartReferences(TRUE, tvb, offset, pinfo, tree, hf_x420_assembly_instructions); +} + + +static const ber_sequence_t IPMAssemblyInstructions_set[] = { + { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_assembly_instructions_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_x420_IPMAssemblyInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + IPMAssemblyInstructions_set, hf_index, ett_x420_IPMAssemblyInstructions); + + return offset; +} + + + +static int +dissect_x420_OriginatingUA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String, + pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + +/*--- PDUs ---*/ + +static void dissect_OriginatingUA_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_x420_OriginatingUA(FALSE, tvb, 0, pinfo, tree, hf_x420_OriginatingUA_PDU); +} + + +/*--- End of included file: packet-x420-fn.c ---*/ + + +/* +* Dissect X420 PDUs inside a PPDU. +*/ +static void +dissect_x420(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) +{ + int offset = 0; + proto_item *item=NULL; + proto_tree *tree=NULL; + int (*x420_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) = NULL; + + if(parent_tree){ + item = proto_tree_add_item(parent_tree, proto_x420, tvb, 0, -1, FALSE); + tree = proto_item_add_subtree(item, ett_x420); + } + if (check_col(pinfo->cinfo, COL_PROTOCOL)) + col_set_str(pinfo->cinfo, COL_PROTOCOL, "X420"); + if (check_col(pinfo->cinfo, COL_INFO)) + col_add_str(pinfo->cinfo, COL_INFO, "Interpersonal Message"); + + dissect_x420_InformationObject(TRUE, tvb, offset, pinfo , tree, -1); +} + + +/*--- proto_register_x420 -------------------------------------------*/ +void proto_register_x420(void) { + + /* List of fields */ + static hf_register_info hf[] = + { + +/*--- Included file: packet-x420-hfarr.c ---*/ + + { &hf_x420_OriginatingUA_PDU, + { "OriginatingUA", "x420.OriginatingUA", + FT_STRING, BASE_NONE, NULL, 0, + "OriginatingUA", HFILL }}, + { &hf_x420_ipm, + { "ipm", "x420.ipm", + FT_NONE, BASE_NONE, NULL, 0, + "InformationObject/ipm", HFILL }}, + { &hf_x420_ipn, + { "ipn", "x420.ipn", + FT_NONE, BASE_NONE, NULL, 0, + "InformationObject/ipn", HFILL }}, + { &hf_x420_heading, + { "heading", "x420.heading", + FT_NONE, BASE_NONE, NULL, 0, + "IPM/heading", HFILL }}, + { &hf_x420_body, + { "body", "x420.body", + FT_UINT32, BASE_DEC, NULL, 0, + "IPM/body", HFILL }}, + { &hf_x420_type, + { "type", "x420.type", + FT_STRING, BASE_NONE, NULL, 0, + "IPMSExtension/type", HFILL }}, + { &hf_x420_value, + { "value", "x420.value", + FT_NONE, BASE_NONE, NULL, 0, + "IPMSExtension/value", HFILL }}, + { &hf_x420_this_IPM, + { "this-IPM", "x420.this_IPM", + FT_NONE, BASE_NONE, NULL, 0, + "Heading/this-IPM", HFILL }}, + { &hf_x420_originator, + { "originator", "x420.originator", + FT_NONE, BASE_NONE, NULL, 0, + "Heading/originator", HFILL }}, + { &hf_x420_authorizing_users, + { "authorizing-users", "x420.authorizing_users", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/authorizing-users", HFILL }}, + { &hf_x420_primary_recipients, + { "primary-recipients", "x420.primary_recipients", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/primary-recipients", HFILL }}, + { &hf_x420_copy_recipients, + { "copy-recipients", "x420.copy_recipients", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/copy-recipients", HFILL }}, + { &hf_x420_blind_copy_recipients, + { "blind-copy-recipients", "x420.blind_copy_recipients", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/blind-copy-recipients", HFILL }}, + { &hf_x420_replied_to_IPM, + { "replied-to-IPM", "x420.replied_to_IPM", + FT_NONE, BASE_NONE, NULL, 0, + "Heading/replied-to-IPM", HFILL }}, + { &hf_x420_obsoleted_IPMs, + { "obsoleted-IPMs", "x420.obsoleted_IPMs", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/obsoleted-IPMs", HFILL }}, + { &hf_x420_related_IPMs, + { "related-IPMs", "x420.related_IPMs", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/related-IPMs", HFILL }}, + { &hf_x420_subject, + { "subject", "x420.subject", + FT_STRING, BASE_NONE, NULL, 0, + "Heading/subject", HFILL }}, + { &hf_x420_expiry_time, + { "expiry-time", "x420.expiry_time", + FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0, + "Heading/expiry-time", HFILL }}, + { &hf_x420_reply_time, + { "reply-time", "x420.reply_time", + FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0, + "Heading/reply-time", HFILL }}, + { &hf_x420_reply_recipients, + { "reply-recipients", "x420.reply_recipients", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/reply-recipients", HFILL }}, + { &hf_x420_importance, + { "importance", "x420.importance", + FT_UINT32, BASE_DEC, VALS(x420_ImportanceField_vals), 0, + "Heading/importance", HFILL }}, + { &hf_x420_sensitivity, + { "sensitivity", "x420.sensitivity", + FT_UINT32, BASE_DEC, VALS(x420_SensitivityField_vals), 0, + "Heading/sensitivity", HFILL }}, + { &hf_x420_auto_forwarded, + { "auto-forwarded", "x420.auto_forwarded", + FT_BOOLEAN, 8, NULL, 0, + "Heading/auto-forwarded", HFILL }}, + { &hf_x420_extensions, + { "extensions", "x420.extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "Heading/extensions", HFILL }}, + { &hf_x420_user, + { "user", "x420.user", + FT_NONE, BASE_NONE, NULL, 0, + "IPMIdentifier/user", HFILL }}, + { &hf_x420_user_relative_identifier, + { "user-relative-identifier", "x420.user_relative_identifier", + FT_STRING, BASE_NONE, NULL, 0, + "IPMIdentifier/user-relative-identifier", HFILL }}, + { &hf_x420_recipient, + { "recipient", "x420.recipient", + FT_NONE, BASE_NONE, NULL, 0, + "RecipientSpecifier/recipient", HFILL }}, + { &hf_x420_notification_requests, + { "notification-requests", "x420.notification_requests", + FT_BYTES, BASE_HEX, NULL, 0, + "RecipientSpecifier/notification-requests", HFILL }}, + { &hf_x420_reply_requested, + { "reply-requested", "x420.reply_requested", + FT_BOOLEAN, 8, NULL, 0, + "RecipientSpecifier/reply-requested", HFILL }}, + { &hf_x420_recipient_extensions, + { "recipient-extensions", "x420.recipient_extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "RecipientSpecifier/recipient-extensions", HFILL }}, + { &hf_x420_formal_name, + { "formal-name", "x420.formal_name", + FT_NONE, BASE_NONE, NULL, 0, + "ORDescriptor/formal-name", HFILL }}, + { &hf_x420_free_form_name, + { "free-form-name", "x420.free_form_name", + FT_STRING, BASE_NONE, NULL, 0, + "ORDescriptor/free-form-name", HFILL }}, + { &hf_x420_telephone_number, + { "telephone-number", "x420.telephone_number", + FT_STRING, BASE_NONE, NULL, 0, + "ORDescriptor/telephone-number", HFILL }}, + { &hf_x420_RecipientExtensionsField_item, + { "Item", "x420.RecipientExtensionsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "RecipientExtensionsField/_item", HFILL }}, + { &hf_x420_AuthorizingUsersField_item, + { "Item", "x420.AuthorizingUsersField_item", + FT_NONE, BASE_NONE, NULL, 0, + "AuthorizingUsersField/_item", HFILL }}, + { &hf_x420_PrimaryRecipientsField_item, + { "Item", "x420.PrimaryRecipientsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "PrimaryRecipientsField/_item", HFILL }}, + { &hf_x420_CopyRecipientsField_item, + { "Item", "x420.CopyRecipientsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "CopyRecipientsField/_item", HFILL }}, + { &hf_x420_BlindCopyRecipientsField_item, + { "Item", "x420.BlindCopyRecipientsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "BlindCopyRecipientsField/_item", HFILL }}, + { &hf_x420_ObsoletedIPMsField_item, + { "Item", "x420.ObsoletedIPMsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "ObsoletedIPMsField/_item", HFILL }}, + { &hf_x420_RelatedIPMsField_item, + { "Item", "x420.RelatedIPMsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "RelatedIPMsField/_item", HFILL }}, + { &hf_x420_ReplyRecipientsField_item, + { "Item", "x420.ReplyRecipientsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "ReplyRecipientsField/_item", HFILL }}, + { &hf_x420_ExtensionsField_item, + { "Item", "x420.ExtensionsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "ExtensionsField/_item", HFILL }}, + { &hf_x420_Body_item, + { "Item", "x420.Body_item", + FT_UINT32, BASE_DEC, VALS(x420_BodyPart_vals), 0, + "Body/_item", HFILL }}, + { &hf_x420_ia5_text, + { "ia5-text", "x420.ia5_text", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/ia5-text", HFILL }}, + { &hf_x420_g3_facsimile, + { "g3-facsimile", "x420.g3_facsimile", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/g3-facsimile", HFILL }}, + { &hf_x420_g4_class1, + { "g4-class1", "x420.g4_class1", + FT_UINT32, BASE_DEC, NULL, 0, + "BodyPart/g4-class1", HFILL }}, + { &hf_x420_teletex, + { "teletex", "x420.teletex", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/teletex", HFILL }}, + { &hf_x420_videotex, + { "videotex", "x420.videotex", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/videotex", HFILL }}, + { &hf_x420_encrypted, + { "encrypted", "x420.encrypted", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/encrypted", HFILL }}, + { &hf_x420_message, + { "message", "x420.message", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/message", HFILL }}, + { &hf_x420_mixed_mode, + { "mixed-mode", "x420.mixed_mode", + FT_UINT32, BASE_DEC, NULL, 0, + "BodyPart/mixed-mode", HFILL }}, + { &hf_x420_bilaterally_defined, + { "bilaterally-defined", "x420.bilaterally_defined", + FT_BYTES, BASE_HEX, NULL, 0, + "BodyPart/bilaterally-defined", HFILL }}, + { &hf_x420_nationally_defined, + { "nationally-defined", "x420.nationally_defined", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/nationally-defined", HFILL }}, + { &hf_x420_extended, + { "extended", "x420.extended", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPart/extended", HFILL }}, + { &hf_x420_extended_parameters, + { "parameters", "x420.parameters", + FT_STRING, BASE_NONE, NULL, 0, + "ExtendedBodyPart/parameters", HFILL }}, + { &hf_x420_extended_data, + { "data", "x420.data", + FT_NONE, BASE_NONE, NULL, 0, + "ExtendedBodyPart/data", HFILL }}, + { &hf_x420_ia5text_parameters, + { "parameters", "x420.parameters", + FT_NONE, BASE_NONE, NULL, 0, + "IA5TextBodyPart/parameters", HFILL }}, + { &hf_x420_ia5text_data, + { "data", "x420.data", + FT_STRING, BASE_NONE, NULL, 0, + "IA5TextBodyPart/data", HFILL }}, + { &hf_x420_repertoire, + { "repertoire", "x420.repertoire", + FT_UINT32, BASE_DEC, VALS(x420_Repertoire_vals), 0, + "IA5TextParameters/repertoire", HFILL }}, + { &hf_x420_g3facsimile_parameters, + { "parameters", "x420.parameters", + FT_NONE, BASE_NONE, NULL, 0, + "G3FacsimileBodyPart/parameters", HFILL }}, + { &hf_x420_g3facsimile_data, + { "data", "x420.data", + FT_UINT32, BASE_DEC, NULL, 0, + "G3FacsimileBodyPart/data", HFILL }}, + { &hf_x420_number_of_pages, + { "number-of-pages", "x420.number_of_pages", + FT_INT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x420_g3facsimile_non_basic_parameters, + { "non-basic-parameters", "x420.non_basic_parameters", + FT_BYTES, BASE_HEX, NULL, 0, + "G3FacsimileParameters/non-basic-parameters", HFILL }}, + { &hf_x420_G3FacsimileData_item, + { "Item", "x420.G3FacsimileData_item", + FT_BYTES, BASE_HEX, NULL, 0, + "G3FacsimileData/_item", HFILL }}, + { &hf_x420_G4Class1BodyPart_item, + { "Item", "x420.G4Class1BodyPart_item", + FT_NONE, BASE_NONE, NULL, 0, + "G4Class1BodyPart/_item", HFILL }}, + { &hf_x420_MixedModeBodyPart_item, + { "Item", "x420.MixedModeBodyPart_item", + FT_NONE, BASE_NONE, NULL, 0, + "MixedModeBodyPart/_item", HFILL }}, + { &hf_x420_teletex_parameters, + { "parameters", "x420.parameters", + FT_NONE, BASE_NONE, NULL, 0, + "TeletexBodyPart/parameters", HFILL }}, + { &hf_x420_teletex_data, + { "data", "x420.data", + FT_UINT32, BASE_DEC, NULL, 0, + "TeletexBodyPart/data", HFILL }}, + { &hf_x420_telex_compatible, + { "telex-compatible", "x420.telex_compatible", + FT_BOOLEAN, 8, NULL, 0, + "TeletexParameters/telex-compatible", HFILL }}, + { &hf_x420_teletex_non_basic_parameters, + { "non-basic-parameters", "x420.non_basic_parameters", + FT_NONE, BASE_NONE, NULL, 0, + "TeletexParameters/non-basic-parameters", HFILL }}, + { &hf_x420_TeletexData_item, + { "Item", "x420.TeletexData_item", + FT_STRING, BASE_NONE, NULL, 0, + "TeletexData/_item", HFILL }}, + { &hf_x420_videotex_parameters, + { "parameters", "x420.parameters", + FT_NONE, BASE_NONE, NULL, 0, + "VideotexBodyPart/parameters", HFILL }}, + { &hf_x420_videotex_data, + { "data", "x420.data", + FT_STRING, BASE_NONE, NULL, 0, + "VideotexBodyPart/data", HFILL }}, + { &hf_x420_syntax, + { "syntax", "x420.syntax", + FT_INT32, BASE_DEC, VALS(x420_VideotexSyntax_vals), 0, + "VideotexParameters/syntax", HFILL }}, + { &hf_x420_encrypted_parameters, + { "parameters", "x420.parameters", + FT_NONE, BASE_NONE, NULL, 0, + "EncryptedBodyPart/parameters", HFILL }}, + { &hf_x420_encrypted_data, + { "data", "x420.data", + FT_BYTES, BASE_HEX, NULL, 0, + "EncryptedBodyPart/data", HFILL }}, + { &hf_x420_algorithm_identifier, + { "algorithm-identifier", "x420.algorithm_identifier", + FT_NONE, BASE_NONE, NULL, 0, + "EncryptedParameters/algorithm-identifier", HFILL }}, + { &hf_x420_originator_certificates, + { "originator-certificates", "x420.originator_certificates", + FT_UINT32, BASE_DEC, NULL, 0, + "EncryptedParameters/originator-certificates", HFILL }}, + { &hf_x420_message_parameters, + { "parameters", "x420.parameters", + FT_NONE, BASE_NONE, NULL, 0, + "MessageBodyPart/parameters", HFILL }}, + { &hf_x420_message_data, + { "data", "x420.data", + FT_NONE, BASE_NONE, NULL, 0, + "MessageBodyPart/data", HFILL }}, + { &hf_x420_delivery_time, + { "delivery-time", "x420.delivery_time", + FT_STRING, BASE_NONE, NULL, 0, + "MessageParameters/delivery-time", HFILL }}, + { &hf_x420_delivery_envelope, + { "delivery-envelope", "x420.delivery_envelope", + FT_NONE, BASE_NONE, NULL, 0, + "MessageParameters/delivery-envelope", HFILL }}, + { &hf_x420_subject_ipm, + { "subject-ipm", "x420.subject_ipm", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x420_ipn_originator, + { "ipn-originator", "x420.ipn_originator", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x420_ipm_intended_recipient, + { "ipm-intended-recipient", "x420.ipm_intended_recipient", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x420_conversion_eits, + { "conversion-eits", "x420.conversion_eits", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_x420_notification_extensions, + { "notification-extensions", "x420.notification_extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_x420_choice, + { "choice", "x420.choice", + FT_UINT32, BASE_DEC, VALS(x420_T_choice_vals), 0, + "IPN/choice", HFILL }}, + { &hf_x420_non_receipt_fields, + { "non-receipt-fields", "x420.non_receipt_fields", + FT_NONE, BASE_NONE, NULL, 0, + "IPN/choice/non-receipt-fields", HFILL }}, + { &hf_x420_receipt_fields, + { "receipt-fields", "x420.receipt_fields", + FT_NONE, BASE_NONE, NULL, 0, + "IPN/choice/receipt-fields", HFILL }}, + { &hf_x420_other_notification_type_fields, + { "other-notification-type-fields", "x420.other_notification_type_fields", + FT_UINT32, BASE_DEC, NULL, 0, + "IPN/choice/other-notification-type-fields", HFILL }}, + { &hf_x420_non_receipt_reason, + { "non-receipt-reason", "x420.non_receipt_reason", + FT_UINT32, BASE_DEC, VALS(x420_NonReceiptReasonField_vals), 0, + "NonReceiptFields/non-receipt-reason", HFILL }}, + { &hf_x420_discard_reason, + { "discard-reason", "x420.discard_reason", + FT_UINT32, BASE_DEC, VALS(x420_DiscardReasonField_vals), 0, + "NonReceiptFields/discard-reason", HFILL }}, + { &hf_x420_auto_forward_comment, + { "auto-forward-comment", "x420.auto_forward_comment", + FT_STRING, BASE_NONE, NULL, 0, + "NonReceiptFields/auto-forward-comment", HFILL }}, + { &hf_x420_returned_ipm, + { "returned-ipm", "x420.returned_ipm", + FT_NONE, BASE_NONE, NULL, 0, + "NonReceiptFields/returned-ipm", HFILL }}, + { &hf_x420_nrn_extensions, + { "nrn-extensions", "x420.nrn_extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "NonReceiptFields/nrn-extensions", HFILL }}, + { &hf_x420_receipt_time, + { "receipt-time", "x420.receipt_time", + FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0, + "ReceiptFields/receipt-time", HFILL }}, + { &hf_x420_acknowledgment_mode, + { "acknowledgment-mode", "x420.acknowledgment_mode", + FT_UINT32, BASE_DEC, VALS(x420_AcknowledgmentModeField_vals), 0, + "ReceiptFields/acknowledgment-mode", HFILL }}, + { &hf_x420_suppl_receipt_info, + { "suppl-receipt-info", "x420.suppl_receipt_info", + FT_STRING, BASE_NONE, NULL, 0, + "ReceiptFields/suppl-receipt-info", HFILL }}, + { &hf_x420_rn_extensions, + { "rn-extensions", "x420.rn_extensions", + FT_UINT32, BASE_DEC, NULL, 0, + "ReceiptFields/rn-extensions", HFILL }}, + { &hf_x420_NotificationExtensionsField_item, + { "Item", "x420.NotificationExtensionsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "NotificationExtensionsField/_item", HFILL }}, + { &hf_x420_NRNExtensionsField_item, + { "Item", "x420.NRNExtensionsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "NRNExtensionsField/_item", HFILL }}, + { &hf_x420_RNExtensionsField_item, + { "Item", "x420.RNExtensionsField_item", + FT_NONE, BASE_NONE, NULL, 0, + "RNExtensionsField/_item", HFILL }}, + { &hf_x420_OtherNotificationTypeFields_item, + { "Item", "x420.OtherNotificationTypeFields_item", + FT_NONE, BASE_NONE, NULL, 0, + "OtherNotificationTypeFields/_item", HFILL }}, + { &hf_x420_advice, + { "advice", "x420.advice", + FT_UINT32, BASE_DEC, VALS(x420_BodyPart_vals), 0, + "AbsenceAdvice/advice", HFILL }}, + { &hf_x420_next_available, + { "next-available", "x420.next_available", + FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0, + "AbsenceAdvice/next-available", HFILL }}, + { &hf_x420_new_address, + { "new-address", "x420.new_address", + FT_NONE, BASE_NONE, NULL, 0, + "ChangeOfAddressAdvice/new-address", HFILL }}, + { &hf_x420_effective_from, + { "effective-from", "x420.effective_from", + FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0, + "ChangeOfAddressAdvice/effective-from", HFILL }}, + { &hf_x420_assembly_instructions, + { "assembly-instructions", "x420.assembly_instructions", + FT_UINT32, BASE_DEC, NULL, 0, + "IPMAssemblyInstructions/assembly-instructions", HFILL }}, + { &hf_x420_BodyPartReferences_item, + { "Item", "x420.BodyPartReferences_item", + FT_UINT32, BASE_DEC, VALS(x420_BodyPartReference_vals), 0, + "BodyPartReferences/_item", HFILL }}, + { &hf_x420_stored_entry, + { "stored-entry", "x420.stored_entry", + FT_INT32, BASE_DEC, NULL, 0, + "BodyPartReference/stored-entry", HFILL }}, + { &hf_x420_stored_content, + { "stored-content", "x420.stored_content", + FT_INT32, BASE_DEC, NULL, 0, + "BodyPartReference/stored-content", HFILL }}, + { &hf_x420_submitted_body_part, + { "submitted-body-part", "x420.submitted_body_part", + FT_UINT32, BASE_DEC, NULL, 0, + "BodyPartReference/submitted-body-part", HFILL }}, + { &hf_x420_stored_body_part, + { "stored-body-part", "x420.stored_body_part", + FT_NONE, BASE_NONE, NULL, 0, + "BodyPartReference/stored-body-part", HFILL }}, + { &hf_x420_message_entry, + { "message-entry", "x420.message_entry", + FT_INT32, BASE_DEC, NULL, 0, + "BodyPartReference/stored-body-part/message-entry", HFILL }}, + { &hf_x420_body_part_number, + { "body-part-number", "x420.body_part_number", + FT_UINT32, BASE_DEC, NULL, 0, + "BodyPartReference/stored-body-part/body-part-number", HFILL }}, + { &hf_x420_NotificationRequests_rn, + { "rn", "x420.rn", + FT_BOOLEAN, 8, NULL, 0x80, + "", HFILL }}, + { &hf_x420_NotificationRequests_nrn, + { "nrn", "x420.nrn", + FT_BOOLEAN, 8, NULL, 0x40, + "", HFILL }}, + { &hf_x420_NotificationRequests_ipm_return, + { "ipm-return", "x420.ipm-return", + FT_BOOLEAN, 8, NULL, 0x20, + "", HFILL }}, + { &hf_x420_NotificationRequests_an_supported, + { "an-supported", "x420.an-supported", + FT_BOOLEAN, 8, NULL, 0x10, + "", HFILL }}, + { &hf_x420_NotificationRequests_suppress_an, + { "suppress-an", "x420.suppress-an", + FT_BOOLEAN, 8, NULL, 0x08, + "", HFILL }}, + +/*--- End of included file: packet-x420-hfarr.c ---*/ + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_x420, + +/*--- Included file: packet-x420-ettarr.c ---*/ + + &ett_x420_InformationObject, + &ett_x420_IPM, + &ett_x420_IPMSExtension, + &ett_x420_Heading, + &ett_x420_IPMIdentifier, + &ett_x420_RecipientSpecifier, + &ett_x420_ORDescriptor, + &ett_x420_NotificationRequests, + &ett_x420_RecipientExtensionsField, + &ett_x420_AuthorizingUsersField, + &ett_x420_PrimaryRecipientsField, + &ett_x420_CopyRecipientsField, + &ett_x420_BlindCopyRecipientsField, + &ett_x420_ObsoletedIPMsField, + &ett_x420_RelatedIPMsField, + &ett_x420_ReplyRecipientsField, + &ett_x420_ExtensionsField, + &ett_x420_Body, + &ett_x420_BodyPart, + &ett_x420_ExtendedBodyPart, + &ett_x420_IA5TextBodyPart, + &ett_x420_IA5TextParameters, + &ett_x420_G3FacsimileBodyPart, + &ett_x420_G3FacsimileParameters, + &ett_x420_G3FacsimileData, + &ett_x420_G4Class1BodyPart, + &ett_x420_MixedModeBodyPart, + &ett_x420_TeletexBodyPart, + &ett_x420_TeletexParameters, + &ett_x420_TeletexData, + &ett_x420_VideotexBodyPart, + &ett_x420_VideotexParameters, + &ett_x420_EncryptedBodyPart, + &ett_x420_EncryptedParameters, + &ett_x420_MessageBodyPart, + &ett_x420_MessageParameters, + &ett_x420_IPN, + &ett_x420_T_choice, + &ett_x420_CommonFields, + &ett_x420_NonReceiptFields, + &ett_x420_ReceiptFields, + &ett_x420_NotificationExtensionsField, + &ett_x420_NRNExtensionsField, + &ett_x420_RNExtensionsField, + &ett_x420_OtherNotificationTypeFields, + &ett_x420_AbsenceAdvice, + &ett_x420_ChangeOfAddressAdvice, + &ett_x420_IPMAssemblyInstructions, + &ett_x420_BodyPartReferences, + &ett_x420_BodyPartReference, + &ett_x420_T_stored_body_part, + +/*--- End of included file: packet-x420-ettarr.c ---*/ + + }; + + /* Register protocol */ + proto_x420 = proto_register_protocol(PNAME, PSNAME, PFNAME); + register_dissector("x420", dissect_x420, proto_x420); + /* Register fields and subtrees */ + proto_register_field_array(proto_x420, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + +} + + +/*--- proto_reg_handoff_x420 --- */ +void proto_reg_handoff_x420(void) { + + +/*--- Included file: packet-x420-dis-tab.c ---*/ + + register_ber_oid_dissector("1.2.826.0.1004.10.1.1", dissect_OriginatingUA_PDU, proto_x420, "nexor-originating-ua"); + + +/*--- End of included file: packet-x420-dis-tab.c ---*/ + + + register_ber_oid_dissector("2.6.1.10.0", dissect_x420, proto_x420, "InterPersonal Message (1984)"); + register_ber_oid_dissector("2.6.1.10.1", dissect_x420, proto_x420, "InterPersonal Message (1988)"); + register_ber_oid_dissector("1.3.26.0.4406.0.4.1", dissect_x420, proto_x420, "Military Message"); + +} diff --git a/epan/dissectors/packet-x420.h b/epan/dissectors/packet-x420.h new file mode 100644 index 0000000000..e1ff32e842 --- /dev/null +++ b/epan/dissectors/packet-x420.h @@ -0,0 +1,44 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-x420.h */ +/* ../../tools/asn2eth.py -X -b -e -p x420 -c x420.cnf -s packet-x420-template x420.asn */ + +/* Input file: packet-x420-template.h */ + +/* packet-x420.h + * Routines for X.420 (X.400 Message Transfer) packet dissection + * Graeme Lunt 2005 + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_X420_H +#define PACKET_X420_H + + +/*--- Included file: packet-x420-exp.h ---*/ + +int dissect_x420_ORDescriptor(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index); + +/*--- End of included file: packet-x420-exp.h ---*/ + + +#endif /* PACKET_X420_H */ |