aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2005-09-04 20:30:31 +0000
committerAnders Broman <anders.broman@ericsson.com>2005-09-04 20:30:31 +0000
commitbbf0fb6ddec7a7d5b2020be734311cca73271d8f (patch)
treed7b64954afea70104eac925b15dc5eaac90729e1 /epan
parentd9e1a9c0bbf93cd8573f970ef151c65d41f34629 (diff)
From Graeme Lunt
I attach my RTSE dissector (in tar file) which requires the included ROS dissector, as well as a patch to the latest pres.{cnf,asn}. The ROS dissector uses a new field in the SESSION_DATA_STRUCTURE to pass the ROS operation to the sub-dissector, though this is also set by other dissectors (RTSE uses it in X.410 mode). Note that X.400 P1 in X.410 mode doesn't use ROS, so it is useful not to explicitly include ROS in my X411 dissector. However, the inclusion of a ROS dissector won't effect any dissectors that currently implement their own ROS. I also include dissectors for: X.411 (P1) X.400 OSI Message Transfer Service X.420 (P22) X.400 OSI Information Object STANAG 4406 (P772) STANAG 4406 Military Message Extensions (to P22) These rely on the RTSE and ROS dissectors. Withs some changes to remove various warnings and errors. svn path=/trunk/; revision=15680
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/Makefile.common16
-rw-r--r--epan/dissectors/packet-pres.c455
-rw-r--r--epan/dissectors/packet-ros.c948
-rw-r--r--epan/dissectors/packet-ros.h68
-rw-r--r--epan/dissectors/packet-rtse.c989
-rw-r--r--epan/dissectors/packet-rtse.h49
-rw-r--r--epan/dissectors/packet-s4406.c948
-rw-r--r--epan/dissectors/packet-s4406.h38
-rw-r--r--epan/dissectors/packet-ses.h1
-rw-r--r--epan/dissectors/packet-x411.c8441
-rw-r--r--epan/dissectors/packet-x411.h52
-rw-r--r--epan/dissectors/packet-x420.c2600
-rw-r--r--epan/dissectors/packet-x420.h44
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 */