change a whole bunch of ethereal into wireshark
[obnox/wireshark/wip.git] / epan / dissectors / packet-x420.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler    */
3 /* ./packet-x420.c                                                            */
4 /* ../../tools/asn2eth.py -X -b -e -p x420 -c x420.cnf -s packet-x420-template x420.asn */
5
6 /* Input file: packet-x420-template.c */
7
8 #line 1 "packet-x420-template.c"
9 /* packet-x420.c
10  * Routines for X.420 (X.400 Message Transfer)  packet dissection
11  * Graeme Lunt 2005
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/conversation.h>
41
42 #include <stdio.h>
43 #include <string.h>
44
45 #include "packet-ber.h"
46 #include "packet-acse.h"
47 #include "packet-ros.h"
48
49 #include "packet-x509af.h"
50 #include "packet-x509ce.h"
51 #include "packet-x411.h"
52
53 #include "packet-x420.h"
54
55 #define PNAME  "X.420 Information Object"
56 #define PSNAME "X420"
57 #define PFNAME "x420"
58
59 /* Initialize the protocol and registered fields */
60 int proto_x420 = -1;
61
62 static const char *object_identifier_id; /* content type identifier */
63
64 static const value_string charsetreg_vals [] = {
65   { 1, "C0: (ISO/IEC 6429)"},
66   { 6, "G0: ASCII (ISO/IEC 646)"},
67   { 77, "C1: (ISO/IEC 6429)"},
68   { 100, "Gn: Latin Alphabet No.1, Western European Supplementary Set (GR area of ISO-8859-1)"},
69   { 101, "Gn: Latin Alphabet No.2, Central EuropeanSupplementary Set (GR area of ISO-8859-2)"},
70   { 104, "C0: (ISO/IEC 4873)"},
71   { 105, "C1: (ISO/IEC 4873)"},
72   { 106, "C0: Teletex (CCITT T.61)"},
73   { 107, "C1: Teletex (CCITT T.61)"},
74   { 109, "Gn: Latin Alphabet No.3, Southern European Supplementary Set (GR area of ISO-8859-3)"},
75   { 110, "Gn: Latin Alphabet No.4, Baltic Supplementary Set (GR area of ISO-8859-4)"},
76   { 126, "Gn: Greek Supplementary Set (GR area of ISO-8859-7)"},
77   { 127, "Gn: Arabic Supplementary Set (GR area of ISO-8859-6)"},
78   { 138, "Gn: Hebrew Supplementary Set (GR area of ISO-8859-8)"},
79   { 144, "Gn: Cyrillic Supplementary Set (GR area of ISO-8859-5)"},
80   { 148, "Gn: Latin Alphabet No.5, Cyrillic Supplementary Set (GR area of ISO-8859-9)"},
81   { 154, "Gn: Supplementary Set for Latin Alphabets No.1 or No.5, and No.2"},
82   { 157, "Gn: Latin Alphabet No.6, Arabic Supplementary Set (GR area of ISO-8859-10)"},
83   { 158, "Gn: Supplementary Set for Sami (Lappish) to complement Latin Alphabet No.6 (from Annex A  of ISO-8859-10)"},
84   { 166, "Gn: Thai Supplementary Set (GR area of ISO-8859-11)"},
85   { 179, "Gn: Latin Alphabet No.7, Baltic Rim Supplementary Set (GR area of ISO-8859-13)"},
86   { 182, "Gn: Welsh Variant of Latin Alphabet No.1, Supplementary Set (GR area of ISO-8859-1)"},
87   { 197, "Gn: Supplementary Set for Sami to complement Latin Alphabet No.6 (from Annex A  of ISO-8859-10)"},
88   { 199, "Gn: Latin Alphabet No.8, Celtic Supplementary Set (GR area of ISO-8859-14)"},
89   { 203, "Gn: Latin Alphabet No.9, European Rim Supplementary Set (GR area of ISO-8859-15)"},
90   { 0, NULL}
91 };
92
93
94 /*--- Included file: packet-x420-hf.c ---*/
95 #line 1 "packet-x420-hf.c"
96 static int hf_x420_InformationObject_PDU = -1;    /* InformationObject */
97 static int hf_x420_IA5TextParameters_PDU = -1;    /* IA5TextParameters */
98 static int hf_x420_IA5TextData_PDU = -1;          /* IA5TextData */
99 static int hf_x420_G3FacsimileParameters_PDU = -1;  /* G3FacsimileParameters */
100 static int hf_x420_G3FacsimileData_PDU = -1;      /* G3FacsimileData */
101 static int hf_x420_G4Class1Data_PDU = -1;         /* G4Class1Data */
102 static int hf_x420_MixedModeData_PDU = -1;        /* MixedModeData */
103 static int hf_x420_TeletexParameters_PDU = -1;    /* TeletexParameters */
104 static int hf_x420_TeletexData_PDU = -1;          /* TeletexData */
105 static int hf_x420_VideotexParameters_PDU = -1;   /* VideotexParameters */
106 static int hf_x420_VideotexData_PDU = -1;         /* VideotexData */
107 static int hf_x420_EncryptedParameters_PDU = -1;  /* EncryptedParameters */
108 static int hf_x420_EncryptedData_PDU = -1;        /* EncryptedData */
109 static int hf_x420_MessageParameters_PDU = -1;    /* MessageParameters */
110 static int hf_x420_MessageData_PDU = -1;          /* MessageData */
111 static int hf_x420_BilaterallyDefinedBodyPart_PDU = -1;  /* BilaterallyDefinedBodyPart */
112 static int hf_x420_IPN_PDU = -1;                  /* IPN */
113 static int hf_x420_AbsenceAdvice_PDU = -1;        /* AbsenceAdvice */
114 static int hf_x420_ChangeOfAddressAdvice_PDU = -1;  /* ChangeOfAddressAdvice */
115 static int hf_x420_IPMAssemblyInstructions_PDU = -1;  /* IPMAssemblyInstructions */
116 static int hf_x420_OriginatingUA_PDU = -1;        /* OriginatingUA */
117 static int hf_x420_IncompleteCopy_PDU = -1;       /* IncompleteCopy */
118 static int hf_x420_Languages_PDU = -1;            /* Languages */
119 static int hf_x420_AutoSubmitted_PDU = -1;        /* AutoSubmitted */
120 static int hf_x420_BodyPartSignatures_PDU = -1;   /* BodyPartSignatures */
121 static int hf_x420_IPMSecurityLabel_PDU = -1;     /* IPMSecurityLabel */
122 static int hf_x420_AuthorizationTime_PDU = -1;    /* AuthorizationTime */
123 static int hf_x420_CirculationList_PDU = -1;      /* CirculationList */
124 static int hf_x420_CirculationListIndicator_PDU = -1;  /* CirculationListIndicator */
125 static int hf_x420_DistributionCodes_PDU = -1;    /* DistributionCodes */
126 static int hf_x420_ExtendedSubject_PDU = -1;      /* ExtendedSubject */
127 static int hf_x420_InformationCategories_PDU = -1;  /* InformationCategories */
128 static int hf_x420_ManualHandlingInstructions_PDU = -1;  /* ManualHandlingInstructions */
129 static int hf_x420_OriginatorsReference_PDU = -1;  /* OriginatorsReference */
130 static int hf_x420_PrecedencePolicyIdentifier_PDU = -1;  /* PrecedencePolicyIdentifier */
131 static int hf_x420_Precedence_PDU = -1;           /* Precedence */
132 static int hf_x420_GeneralTextParameters_PDU = -1;  /* GeneralTextParameters */
133 static int hf_x420_GeneralTextData_PDU = -1;      /* GeneralTextData */
134 static int hf_x420_VoiceParameters_PDU = -1;      /* VoiceParameters */
135 static int hf_x420_VoiceData_PDU = -1;            /* VoiceData */
136 static int hf_x420_ForwardedContentParameters_PDU = -1;  /* ForwardedContentParameters */
137 static int hf_x420_ipm = -1;                      /* IPM */
138 static int hf_x420_ipn = -1;                      /* IPN */
139 static int hf_x420_heading = -1;                  /* Heading */
140 static int hf_x420_body = -1;                     /* Body */
141 static int hf_x420_type = -1;                     /* T_type */
142 static int hf_x420_value = -1;                    /* T_value */
143 static int hf_x420_this_IPM = -1;                 /* ThisIPMField */
144 static int hf_x420_originator = -1;               /* OriginatorField */
145 static int hf_x420_authorizing_users = -1;        /* AuthorizingUsersField */
146 static int hf_x420_primary_recipients = -1;       /* PrimaryRecipientsField */
147 static int hf_x420_copy_recipients = -1;          /* CopyRecipientsField */
148 static int hf_x420_blind_copy_recipients = -1;    /* BlindCopyRecipientsField */
149 static int hf_x420_replied_to_IPM = -1;           /* RepliedToIPMField */
150 static int hf_x420_obsoleted_IPMs = -1;           /* ObsoletedIPMsField */
151 static int hf_x420_related_IPMs = -1;             /* RelatedIPMsField */
152 static int hf_x420_subject = -1;                  /* SubjectField */
153 static int hf_x420_expiry_time = -1;              /* ExpiryTimeField */
154 static int hf_x420_reply_time = -1;               /* ReplyTimeField */
155 static int hf_x420_reply_recipients = -1;         /* ReplyRecipientsField */
156 static int hf_x420_importance = -1;               /* ImportanceField */
157 static int hf_x420_sensitivity = -1;              /* SensitivityField */
158 static int hf_x420_auto_forwarded = -1;           /* AutoForwardedField */
159 static int hf_x420_extensions = -1;               /* ExtensionsField */
160 static int hf_x420_user = -1;                     /* ORName */
161 static int hf_x420_user_relative_identifier = -1;  /* LocalIPMIdentifier */
162 static int hf_x420_recipient = -1;                /* ORDescriptor */
163 static int hf_x420_notification_requests = -1;    /* NotificationRequests */
164 static int hf_x420_reply_requested = -1;          /* BOOLEAN */
165 static int hf_x420_recipient_extensions = -1;     /* RecipientExtensionsField */
166 static int hf_x420_formal_name = -1;              /* ORName */
167 static int hf_x420_free_form_name = -1;           /* FreeFormName */
168 static int hf_x420_telephone_number = -1;         /* TelephoneNumber */
169 static int hf_x420_RecipientExtensionsField_item = -1;  /* IPMSExtension */
170 static int hf_x420_AuthorizingUsersField_item = -1;  /* AuthorizingUsersSubfield */
171 static int hf_x420_PrimaryRecipientsField_item = -1;  /* PrimaryRecipientsSubfield */
172 static int hf_x420_CopyRecipientsField_item = -1;  /* CopyRecipientsSubfield */
173 static int hf_x420_BlindCopyRecipientsField_item = -1;  /* BlindCopyRecipientsSubfield */
174 static int hf_x420_ObsoletedIPMsField_item = -1;  /* ObsoletedIPMsSubfield */
175 static int hf_x420_RelatedIPMsField_item = -1;    /* RelatedIPMsSubfield */
176 static int hf_x420_ReplyRecipientsField_item = -1;  /* ReplyRecipientsSubfield */
177 static int hf_x420_ExtensionsField_item = -1;     /* IPMSExtension */
178 static int hf_x420_Body_item = -1;                /* BodyPart */
179 static int hf_x420_ia5_text = -1;                 /* IA5TextBodyPart */
180 static int hf_x420_g3_facsimile = -1;             /* G3FacsimileBodyPart */
181 static int hf_x420_g4_class1 = -1;                /* G4Class1BodyPart */
182 static int hf_x420_teletex = -1;                  /* TeletexBodyPart */
183 static int hf_x420_videotex = -1;                 /* VideotexBodyPart */
184 static int hf_x420_encrypted_bp = -1;             /* EncryptedBodyPart */
185 static int hf_x420_message = -1;                  /* MessageBodyPart */
186 static int hf_x420_mixed_mode = -1;               /* MixedModeBodyPart */
187 static int hf_x420_bilaterally_defined = -1;      /* BilaterallyDefinedBodyPart */
188 static int hf_x420_nationally_defined = -1;       /* NationallyDefinedBodyPart */
189 static int hf_x420_extended = -1;                 /* ExtendedBodyPart */
190 static int hf_x420_extended_parameters = -1;      /* EXTERNAL */
191 static int hf_x420_extended_data = -1;            /* EXTERNAL */
192 static int hf_x420_ia5text_parameters = -1;       /* IA5TextParameters */
193 static int hf_x420_ia5text_data = -1;             /* IA5TextData */
194 static int hf_x420_repertoire = -1;               /* Repertoire */
195 static int hf_x420_g3facsimile_parameters = -1;   /* G3FacsimileParameters */
196 static int hf_x420_g3facsimile_data = -1;         /* G3FacsimileData */
197 static int hf_x420_number_of_pages = -1;          /* INTEGER */
198 static int hf_x420_g3facsimile_non_basic_parameters = -1;  /* G3FacsimileNonBasicParameters */
199 static int hf_x420_G3FacsimileData_item = -1;     /* BIT_STRING */
200 static int hf_x420_G4Class1Data_item = -1;        /* Interchange_Data_Element */
201 static int hf_x420_MixedModeData_item = -1;       /* Interchange_Data_Element */
202 static int hf_x420_teletex_parameters = -1;       /* TeletexParameters */
203 static int hf_x420_teletex_data = -1;             /* TeletexData */
204 static int hf_x420_telex_compatible = -1;         /* BOOLEAN */
205 static int hf_x420_teletex_non_basic_parameters = -1;  /* TeletexNonBasicParameters */
206 static int hf_x420_TeletexData_item = -1;         /* TeletexString */
207 static int hf_x420_videotex_parameters = -1;      /* VideotexParameters */
208 static int hf_x420_videotex_data = -1;            /* VideotexData */
209 static int hf_x420_syntax = -1;                   /* VideotexSyntax */
210 static int hf_x420_encrypted_parameters = -1;     /* EncryptedParameters */
211 static int hf_x420_encrypted_data = -1;           /* EncryptedData */
212 static int hf_x420_algorithm_identifier = -1;     /* AlgorithmIdentifier */
213 static int hf_x420_originator_certificates = -1;  /* ExtendedCertificates */
214 static int hf_x420_message_parameters = -1;       /* MessageParameters */
215 static int hf_x420_message_data = -1;             /* MessageData */
216 static int hf_x420_delivery_time = -1;            /* MessageDeliveryTime */
217 static int hf_x420_delivery_envelope = -1;        /* OtherMessageDeliveryFields */
218 static int hf_x420_subject_ipm = -1;              /* SubjectIPMField */
219 static int hf_x420_ipn_originator = -1;           /* IPNOriginatorField */
220 static int hf_x420_ipm_intended_recipient = -1;   /* IPMIntendedRecipientField */
221 static int hf_x420_conversion_eits = -1;          /* ConversionEITsField */
222 static int hf_x420_notification_extensions = -1;  /* NotificationExtensionsField */
223 static int hf_x420_choice = -1;                   /* T_choice */
224 static int hf_x420_non_receipt_fields = -1;       /* NonReceiptFields */
225 static int hf_x420_receipt_fields = -1;           /* ReceiptFields */
226 static int hf_x420_other_notification_type_fields = -1;  /* OtherNotificationTypeFields */
227 static int hf_x420_non_receipt_reason = -1;       /* NonReceiptReasonField */
228 static int hf_x420_discard_reason = -1;           /* DiscardReasonField */
229 static int hf_x420_auto_forward_comment = -1;     /* AutoForwardCommentField */
230 static int hf_x420_returned_ipm = -1;             /* ReturnedIPMField */
231 static int hf_x420_nrn_extensions = -1;           /* NRNExtensionsField */
232 static int hf_x420_receipt_time = -1;             /* ReceiptTimeField */
233 static int hf_x420_acknowledgment_mode = -1;      /* AcknowledgmentModeField */
234 static int hf_x420_suppl_receipt_info = -1;       /* SupplReceiptInfoField */
235 static int hf_x420_rn_extensions = -1;            /* RNExtensionsField */
236 static int hf_x420_NotificationExtensionsField_item = -1;  /* IPMSExtension */
237 static int hf_x420_NRNExtensionsField_item = -1;  /* IPMSExtension */
238 static int hf_x420_RNExtensionsField_item = -1;   /* IPMSExtension */
239 static int hf_x420_OtherNotificationTypeFields_item = -1;  /* IPMSExtension */
240 static int hf_x420_advice = -1;                   /* BodyPart */
241 static int hf_x420_next_available = -1;           /* Time */
242 static int hf_x420_new_address = -1;              /* ORDescriptor */
243 static int hf_x420_effective_from = -1;           /* Time */
244 static int hf_x420_assembly_instructions = -1;    /* BodyPartReferences */
245 static int hf_x420_BodyPartReferences_item = -1;  /* BodyPartReference */
246 static int hf_x420_stored_entry = -1;             /* SequenceNumber */
247 static int hf_x420_stored_content = -1;           /* SequenceNumber */
248 static int hf_x420_submitted_body_part = -1;      /* INTEGER */
249 static int hf_x420_stored_body_part = -1;         /* T_stored_body_part */
250 static int hf_x420_message_entry = -1;            /* SequenceNumber */
251 static int hf_x420_body_part_number = -1;         /* BodyPartNumber */
252 static int hf_x420_Languages_item = -1;           /* Language */
253 static int hf_x420_algorithmIdentifier = -1;      /* AlgorithmIdentifier */
254 static int hf_x420_encrypted = -1;                /* BIT_STRING */
255 static int hf_x420_BodyPartSignatures_item = -1;  /* BodyPartSignatures_item */
256 static int hf_x420_body_part_signature = -1;      /* BodyPartSignature */
257 static int hf_x420_originator_certificate_selector = -1;  /* CertificateAssertion */
258 static int hf_x420_content_security_label = -1;   /* SecurityLabel */
259 static int hf_x420_heading_security_label = -1;   /* SecurityLabel */
260 static int hf_x420_body_part_security_labels = -1;  /* SEQUENCE_OF_BodyPartSecurityLabel */
261 static int hf_x420_body_part_security_labels_item = -1;  /* BodyPartSecurityLabel */
262 static int hf_x420_body_part_unlabelled = -1;     /* NULL */
263 static int hf_x420_body_part_security_label = -1;  /* SecurityLabel */
264 static int hf_x420_CirculationList_item = -1;     /* CirculationMember */
265 static int hf_x420_circulation_recipient = -1;    /* RecipientSpecifier */
266 static int hf_x420_checked = -1;                  /* Checkmark */
267 static int hf_x420_simple = -1;                   /* NULL */
268 static int hf_x420_timestamped = -1;              /* CirculationTime */
269 static int hf_x420_signed = -1;                   /* CirculationSignature */
270 static int hf_x420_circulation_signature_algorithm_identifier = -1;  /* CirculationSignatureAlgorithmIdentifier */
271 static int hf_x420_timestamp = -1;                /* CirculationTime */
272 static int hf_x420_circulation_signature_data = -1;  /* CirculationSignatureData */
273 static int hf_x420_DistributionCodes_item = -1;   /* DistributionCode */
274 static int hf_x420_oid_code = -1;                 /* OBJECT_IDENTIFIER */
275 static int hf_x420_alphanumeric_code = -1;        /* AlphaCode */
276 static int hf_x420_or_descriptor = -1;            /* ORDescriptor */
277 static int hf_x420_InformationCategories_item = -1;  /* InformationCategory */
278 static int hf_x420_reference = -1;                /* OBJECT_IDENTIFIER */
279 static int hf_x420_description = -1;              /* DescriptionString */
280 static int hf_x420_ManualHandlingInstructions_item = -1;  /* ManualHandlingInstruction */
281 static int hf_x420_GeneralTextParameters_item = -1;  /* CharacterSetRegistration */
282 static int hf_x420_voice_message_duration = -1;   /* INTEGER */
283 static int hf_x420_voice_encoding_type = -1;      /* OBJECT_IDENTIFIER */
284 static int hf_x420_supplementary_information = -1;  /* IA5String */
285 static int hf_x420_mts_identifier = -1;           /* MessageDeliveryIdentifier */
286 static int hf_x420_submission_proof = -1;         /* SubmissionProof */
287 static int hf_x420_proof_of_submission = -1;      /* ProofOfSubmission */
288 static int hf_x420_originating_MTA_certificate = -1;  /* OriginatingMTACertificate */
289 static int hf_x420_message_submission_envelope = -1;  /* MessageSubmissionEnvelope */
290 /* named bits */
291 static int hf_x420_NotificationRequests_rn = -1;
292 static int hf_x420_NotificationRequests_nrn = -1;
293 static int hf_x420_NotificationRequests_ipm_return = -1;
294 static int hf_x420_NotificationRequests_an_supported = -1;
295 static int hf_x420_NotificationRequests_suppress_an = -1;
296
297 /*--- End of included file: packet-x420-hf.c ---*/
298 #line 86 "packet-x420-template.c"
299
300 /* Initialize the subtree pointers */
301 static gint ett_x420 = -1;
302
303 /*--- Included file: packet-x420-ett.c ---*/
304 #line 1 "packet-x420-ett.c"
305 static gint ett_x420_InformationObject = -1;
306 static gint ett_x420_IPM = -1;
307 static gint ett_x420_IPMSExtension = -1;
308 static gint ett_x420_Heading = -1;
309 static gint ett_x420_IPMIdentifier = -1;
310 static gint ett_x420_RecipientSpecifier = -1;
311 static gint ett_x420_ORDescriptor = -1;
312 static gint ett_x420_NotificationRequests = -1;
313 static gint ett_x420_RecipientExtensionsField = -1;
314 static gint ett_x420_AuthorizingUsersField = -1;
315 static gint ett_x420_PrimaryRecipientsField = -1;
316 static gint ett_x420_CopyRecipientsField = -1;
317 static gint ett_x420_BlindCopyRecipientsField = -1;
318 static gint ett_x420_ObsoletedIPMsField = -1;
319 static gint ett_x420_RelatedIPMsField = -1;
320 static gint ett_x420_ReplyRecipientsField = -1;
321 static gint ett_x420_ExtensionsField = -1;
322 static gint ett_x420_Body = -1;
323 static gint ett_x420_BodyPart = -1;
324 static gint ett_x420_ExtendedBodyPart = -1;
325 static gint ett_x420_IA5TextBodyPart = -1;
326 static gint ett_x420_IA5TextParameters = -1;
327 static gint ett_x420_G3FacsimileBodyPart = -1;
328 static gint ett_x420_G3FacsimileParameters = -1;
329 static gint ett_x420_G3FacsimileData = -1;
330 static gint ett_x420_G4Class1Data = -1;
331 static gint ett_x420_MixedModeData = -1;
332 static gint ett_x420_TeletexBodyPart = -1;
333 static gint ett_x420_TeletexParameters = -1;
334 static gint ett_x420_TeletexData = -1;
335 static gint ett_x420_VideotexBodyPart = -1;
336 static gint ett_x420_VideotexParameters = -1;
337 static gint ett_x420_EncryptedBodyPart = -1;
338 static gint ett_x420_EncryptedParameters = -1;
339 static gint ett_x420_MessageBodyPart = -1;
340 static gint ett_x420_MessageParameters = -1;
341 static gint ett_x420_IPN = -1;
342 static gint ett_x420_T_choice = -1;
343 static gint ett_x420_NonReceiptFields = -1;
344 static gint ett_x420_ReceiptFields = -1;
345 static gint ett_x420_NotificationExtensionsField = -1;
346 static gint ett_x420_NRNExtensionsField = -1;
347 static gint ett_x420_RNExtensionsField = -1;
348 static gint ett_x420_OtherNotificationTypeFields = -1;
349 static gint ett_x420_AbsenceAdvice = -1;
350 static gint ett_x420_ChangeOfAddressAdvice = -1;
351 static gint ett_x420_IPMAssemblyInstructions = -1;
352 static gint ett_x420_BodyPartReferences = -1;
353 static gint ett_x420_BodyPartReference = -1;
354 static gint ett_x420_T_stored_body_part = -1;
355 static gint ett_x420_Languages = -1;
356 static gint ett_x420_Signature = -1;
357 static gint ett_x420_BodyPartSignatures = -1;
358 static gint ett_x420_BodyPartSignatures_item = -1;
359 static gint ett_x420_IPMSecurityLabel = -1;
360 static gint ett_x420_SEQUENCE_OF_BodyPartSecurityLabel = -1;
361 static gint ett_x420_BodyPartSecurityLabel = -1;
362 static gint ett_x420_CirculationList = -1;
363 static gint ett_x420_CirculationMember = -1;
364 static gint ett_x420_Checkmark = -1;
365 static gint ett_x420_CirculationSignatureData = -1;
366 static gint ett_x420_CirculationSignature = -1;
367 static gint ett_x420_DistributionCodes = -1;
368 static gint ett_x420_DistributionCode = -1;
369 static gint ett_x420_InformationCategories = -1;
370 static gint ett_x420_InformationCategory = -1;
371 static gint ett_x420_ManualHandlingInstructions = -1;
372 static gint ett_x420_GeneralTextParameters = -1;
373 static gint ett_x420_VoiceParameters = -1;
374 static gint ett_x420_ForwardedContentParameters = -1;
375 static gint ett_x420_SubmissionProof = -1;
376
377 /*--- End of included file: packet-x420-ett.c ---*/
378 #line 90 "packet-x420-template.c"
379
380
381 /*--- Included file: packet-x420-fn.c ---*/
382 #line 1 "packet-x420-fn.c"
383 /*--- Cyclic dependencies ---*/
384
385 /* IPM -> Body -> BodyPart -> MessageBodyPart -> MessageData -> IPM */
386 int dissect_x420_IPM(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
387
388 static int dissect_ipm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
389   return dissect_x420_IPM(TRUE, tvb, offset, pinfo, tree, hf_x420_ipm);
390 }
391
392
393 /*--- Fields for imported types ---*/
394
395 static int dissect_user(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
396   return dissect_x411_ORName(FALSE, tvb, offset, pinfo, tree, hf_x420_user);
397 }
398 static int dissect_formal_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
399   return dissect_x411_ORName(FALSE, tvb, offset, pinfo, tree, hf_x420_formal_name);
400 }
401 static int dissect_extended_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
402   return dissect_acse_EXTERNAL(TRUE, tvb, offset, pinfo, tree, hf_x420_extended_parameters);
403 }
404 static int dissect_extended_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
405   return dissect_acse_EXTERNAL(FALSE, tvb, offset, pinfo, tree, hf_x420_extended_data);
406 }
407 static int dissect_g3facsimile_non_basic_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
408   return dissect_x411_G3FacsimileNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_non_basic_parameters);
409 }
410 static int dissect_teletex_non_basic_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
411   return dissect_x411_TeletexNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x420_teletex_non_basic_parameters);
412 }
413 static int dissect_algorithm_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
414   return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_algorithm_identifier);
415 }
416 static int dissect_originator_certificates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
417   return dissect_x411_ExtendedCertificates(FALSE, tvb, offset, pinfo, tree, hf_x420_originator_certificates);
418 }
419 static int dissect_originator_certificates_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
420   return dissect_x411_ExtendedCertificates(TRUE, tvb, offset, pinfo, tree, hf_x420_originator_certificates);
421 }
422 static int dissect_delivery_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
423   return dissect_x411_MessageDeliveryTime(TRUE, tvb, offset, pinfo, tree, hf_x420_delivery_time);
424 }
425 static int dissect_delivery_envelope_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
426   return dissect_x411_OtherMessageDeliveryFields(TRUE, tvb, offset, pinfo, tree, hf_x420_delivery_envelope);
427 }
428 static int dissect_algorithmIdentifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
429   return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_algorithmIdentifier);
430 }
431 static int dissect_originator_certificate_selector_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
432   return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, pinfo, tree, hf_x420_originator_certificate_selector);
433 }
434 static int dissect_content_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
435   return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_x420_content_security_label);
436 }
437 static int dissect_heading_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
438   return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_x420_heading_security_label);
439 }
440 static int dissect_body_part_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
441   return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_x420_body_part_security_label);
442 }
443 static int dissect_mts_identifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
444   return dissect_x411_MessageDeliveryIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x420_mts_identifier);
445 }
446 static int dissect_proof_of_submission_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
447   return dissect_x411_ProofOfSubmission(TRUE, tvb, offset, pinfo, tree, hf_x420_proof_of_submission);
448 }
449 static int dissect_originating_MTA_certificate_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
450   return dissect_x411_OriginatingMTACertificate(TRUE, tvb, offset, pinfo, tree, hf_x420_originating_MTA_certificate);
451 }
452 static int dissect_message_submission_envelope(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
453   return dissect_x411_MessageSubmissionEnvelope(FALSE, tvb, offset, pinfo, tree, hf_x420_message_submission_envelope);
454 }
455
456
457
458 static int
459 dissect_x420_Time(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
460   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
461                                             pinfo, tree, tvb, offset, hf_index,
462                                             NULL);
463
464   return offset;
465 }
466 static int dissect_next_available(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
467   return dissect_x420_Time(FALSE, tvb, offset, pinfo, tree, hf_x420_next_available);
468 }
469 static int dissect_effective_from_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
470   return dissect_x420_Time(TRUE, tvb, offset, pinfo, tree, hf_x420_effective_from);
471 }
472
473
474
475 static int
476 dissect_x420_LocalIPMIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
477   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
478                                             pinfo, tree, tvb, offset, hf_index,
479                                             NULL);
480
481   return offset;
482 }
483 static int dissect_user_relative_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
484   return dissect_x420_LocalIPMIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_user_relative_identifier);
485 }
486
487
488 static const ber_sequence_t IPMIdentifier_set[] = {
489   { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_user },
490   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_user_relative_identifier },
491   { 0, 0, 0, NULL }
492 };
493
494 static int
495 dissect_x420_IPMIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
496   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
497                               IPMIdentifier_set, hf_index, ett_x420_IPMIdentifier);
498
499   return offset;
500 }
501
502
503
504 static int
505 dissect_x420_ThisIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
506   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
507
508   return offset;
509 }
510 static int dissect_this_IPM(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
511   return dissect_x420_ThisIPMField(FALSE, tvb, offset, pinfo, tree, hf_x420_this_IPM);
512 }
513
514
515
516 static int
517 dissect_x420_FreeFormName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
518   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
519                                             pinfo, tree, tvb, offset, hf_index,
520                                             NULL);
521
522   return offset;
523 }
524 static int dissect_free_form_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
525   return dissect_x420_FreeFormName(TRUE, tvb, offset, pinfo, tree, hf_x420_free_form_name);
526 }
527
528
529
530 static int
531 dissect_x420_TelephoneNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
532   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
533                                             pinfo, tree, tvb, offset, hf_index,
534                                             NULL);
535
536   return offset;
537 }
538 static int dissect_telephone_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
539   return dissect_x420_TelephoneNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_telephone_number);
540 }
541
542
543 static const ber_sequence_t ORDescriptor_set[] = {
544   { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_formal_name },
545   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_free_form_name_impl },
546   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_telephone_number_impl },
547   { 0, 0, 0, NULL }
548 };
549
550 int
551 dissect_x420_ORDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
552   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
553                               ORDescriptor_set, hf_index, ett_x420_ORDescriptor);
554
555   return offset;
556 }
557 static int dissect_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
558   return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_x420_recipient);
559 }
560 static int dissect_new_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
561   return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_x420_new_address);
562 }
563 static int dissect_or_descriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
564   return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_x420_or_descriptor);
565 }
566
567
568
569 static int
570 dissect_x420_OriginatorField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
571   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
572
573   return offset;
574 }
575 static int dissect_originator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
576   return dissect_x420_OriginatorField(TRUE, tvb, offset, pinfo, tree, hf_x420_originator);
577 }
578
579
580
581 static int
582 dissect_x420_AuthorizingUsersSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
583   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
584
585   return offset;
586 }
587 static int dissect_AuthorizingUsersField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
588   return dissect_x420_AuthorizingUsersSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_AuthorizingUsersField_item);
589 }
590
591
592 static const ber_sequence_t AuthorizingUsersField_sequence_of[1] = {
593   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_AuthorizingUsersField_item },
594 };
595
596 static int
597 dissect_x420_AuthorizingUsersField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
598   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
599                                       AuthorizingUsersField_sequence_of, hf_index, ett_x420_AuthorizingUsersField);
600
601   return offset;
602 }
603 static int dissect_authorizing_users_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
604   return dissect_x420_AuthorizingUsersField(TRUE, tvb, offset, pinfo, tree, hf_x420_authorizing_users);
605 }
606
607
608 static const asn_namedbit NotificationRequests_bits[] = {
609   {  0, &hf_x420_NotificationRequests_rn, -1, -1, "rn", NULL },
610   {  1, &hf_x420_NotificationRequests_nrn, -1, -1, "nrn", NULL },
611   {  2, &hf_x420_NotificationRequests_ipm_return, -1, -1, "ipm-return", NULL },
612   {  3, &hf_x420_NotificationRequests_an_supported, -1, -1, "an-supported", NULL },
613   {  4, &hf_x420_NotificationRequests_suppress_an, -1, -1, "suppress-an", NULL },
614   { 0, NULL, 0, 0, NULL, NULL }
615 };
616
617 static int
618 dissect_x420_NotificationRequests(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
619   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
620                                     NotificationRequests_bits, hf_index, ett_x420_NotificationRequests,
621                                     NULL);
622
623   return offset;
624 }
625 static int dissect_notification_requests_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
626   return dissect_x420_NotificationRequests(TRUE, tvb, offset, pinfo, tree, hf_x420_notification_requests);
627 }
628
629
630
631 static int
632 dissect_x420_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
633   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
634
635   return offset;
636 }
637 static int dissect_reply_requested_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
638   return dissect_x420_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_requested);
639 }
640 static int dissect_telex_compatible_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
641   return dissect_x420_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_x420_telex_compatible);
642 }
643
644
645
646 static int
647 dissect_x420_T_type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
648 #line 116 "x420.cnf"
649   const char *name = NULL;
650
651     offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_index, &object_identifier_id);
652
653   
654   name = get_ber_oid_name(object_identifier_id);
655   proto_item_append_text(tree, " (%s)", name ? name : object_identifier_id); 
656
657
658
659   return offset;
660 }
661 static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
662   return dissect_x420_T_type(FALSE, tvb, offset, pinfo, tree, hf_x420_type);
663 }
664
665
666
667 static int
668 dissect_x420_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
669 #line 124 "x420.cnf"
670
671   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
672
673
674
675   return offset;
676 }
677 static int dissect_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
678   return dissect_x420_T_value(FALSE, tvb, offset, pinfo, tree, hf_x420_value);
679 }
680
681
682 static const ber_sequence_t IPMSExtension_sequence[] = {
683   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
684   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_value },
685   { 0, 0, 0, NULL }
686 };
687
688 static int
689 dissect_x420_IPMSExtension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
690   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
691                                    IPMSExtension_sequence, hf_index, ett_x420_IPMSExtension);
692
693   return offset;
694 }
695 static int dissect_RecipientExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
696   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_RecipientExtensionsField_item);
697 }
698 static int dissect_ExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
699   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_ExtensionsField_item);
700 }
701 static int dissect_NotificationExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
702   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_NotificationExtensionsField_item);
703 }
704 static int dissect_NRNExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
705   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_NRNExtensionsField_item);
706 }
707 static int dissect_RNExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
708   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_RNExtensionsField_item);
709 }
710 static int dissect_OtherNotificationTypeFields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
711   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_OtherNotificationTypeFields_item);
712 }
713
714
715 static const ber_sequence_t RecipientExtensionsField_set_of[1] = {
716   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RecipientExtensionsField_item },
717 };
718
719 static int
720 dissect_x420_RecipientExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
721   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
722                                  RecipientExtensionsField_set_of, hf_index, ett_x420_RecipientExtensionsField);
723
724   return offset;
725 }
726 static int dissect_recipient_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
727   return dissect_x420_RecipientExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_recipient_extensions);
728 }
729
730
731 static const ber_sequence_t RecipientSpecifier_set[] = {
732   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_recipient_impl },
733   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_requests_impl },
734   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_requested_impl },
735   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_extensions_impl },
736   { 0, 0, 0, NULL }
737 };
738
739 static int
740 dissect_x420_RecipientSpecifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
741   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
742                               RecipientSpecifier_set, hf_index, ett_x420_RecipientSpecifier);
743
744   return offset;
745 }
746 static int dissect_circulation_recipient(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
747   return dissect_x420_RecipientSpecifier(FALSE, tvb, offset, pinfo, tree, hf_x420_circulation_recipient);
748 }
749
750
751
752 static int
753 dissect_x420_PrimaryRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
754   offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
755
756   return offset;
757 }
758 static int dissect_PrimaryRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
759   return dissect_x420_PrimaryRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_PrimaryRecipientsField_item);
760 }
761
762
763 static const ber_sequence_t PrimaryRecipientsField_sequence_of[1] = {
764   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_PrimaryRecipientsField_item },
765 };
766
767 static int
768 dissect_x420_PrimaryRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
769   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
770                                       PrimaryRecipientsField_sequence_of, hf_index, ett_x420_PrimaryRecipientsField);
771
772   return offset;
773 }
774 static int dissect_primary_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
775   return dissect_x420_PrimaryRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_primary_recipients);
776 }
777
778
779
780 static int
781 dissect_x420_CopyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
782   offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
783
784   return offset;
785 }
786 static int dissect_CopyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
787   return dissect_x420_CopyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_CopyRecipientsField_item);
788 }
789
790
791 static const ber_sequence_t CopyRecipientsField_sequence_of[1] = {
792   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_CopyRecipientsField_item },
793 };
794
795 static int
796 dissect_x420_CopyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
797   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
798                                       CopyRecipientsField_sequence_of, hf_index, ett_x420_CopyRecipientsField);
799
800   return offset;
801 }
802 static int dissect_copy_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
803   return dissect_x420_CopyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_copy_recipients);
804 }
805
806
807
808 static int
809 dissect_x420_BlindCopyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
810   offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
811
812   return offset;
813 }
814 static int dissect_BlindCopyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
815   return dissect_x420_BlindCopyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_BlindCopyRecipientsField_item);
816 }
817
818
819 static const ber_sequence_t BlindCopyRecipientsField_sequence_of[1] = {
820   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_BlindCopyRecipientsField_item },
821 };
822
823 static int
824 dissect_x420_BlindCopyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
825   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
826                                       BlindCopyRecipientsField_sequence_of, hf_index, ett_x420_BlindCopyRecipientsField);
827
828   return offset;
829 }
830 static int dissect_blind_copy_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
831   return dissect_x420_BlindCopyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_blind_copy_recipients);
832 }
833
834
835
836 static int
837 dissect_x420_RepliedToIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
838   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
839
840   return offset;
841 }
842 static int dissect_replied_to_IPM_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
843   return dissect_x420_RepliedToIPMField(TRUE, tvb, offset, pinfo, tree, hf_x420_replied_to_IPM);
844 }
845
846
847
848 static int
849 dissect_x420_ObsoletedIPMsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
850   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
851
852   return offset;
853 }
854 static int dissect_ObsoletedIPMsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
855   return dissect_x420_ObsoletedIPMsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_ObsoletedIPMsField_item);
856 }
857
858
859 static const ber_sequence_t ObsoletedIPMsField_sequence_of[1] = {
860   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_ObsoletedIPMsField_item },
861 };
862
863 static int
864 dissect_x420_ObsoletedIPMsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
865   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
866                                       ObsoletedIPMsField_sequence_of, hf_index, ett_x420_ObsoletedIPMsField);
867
868   return offset;
869 }
870 static int dissect_obsoleted_IPMs_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
871   return dissect_x420_ObsoletedIPMsField(TRUE, tvb, offset, pinfo, tree, hf_x420_obsoleted_IPMs);
872 }
873
874
875
876 static int
877 dissect_x420_RelatedIPMsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
878   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
879
880   return offset;
881 }
882 static int dissect_RelatedIPMsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
883   return dissect_x420_RelatedIPMsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_RelatedIPMsField_item);
884 }
885
886
887 static const ber_sequence_t RelatedIPMsField_sequence_of[1] = {
888   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_RelatedIPMsField_item },
889 };
890
891 static int
892 dissect_x420_RelatedIPMsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
893   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
894                                       RelatedIPMsField_sequence_of, hf_index, ett_x420_RelatedIPMsField);
895
896   return offset;
897 }
898 static int dissect_related_IPMs_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
899   return dissect_x420_RelatedIPMsField(TRUE, tvb, offset, pinfo, tree, hf_x420_related_IPMs);
900 }
901
902
903
904 static int
905 dissect_x420_SubjectField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
906 #line 146 "x420.cnf"
907   tvbuff_t *subject=NULL;
908
909     offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
910                                             pinfo, tree, tvb, offset, hf_index,
911                                             &subject);
912
913
914   if(subject && check_col(pinfo->cinfo, COL_INFO))
915    col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", tvb_format_text(subject, 0, tvb_length(subject)));
916
917
918
919   return offset;
920 }
921 static int dissect_subject(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
922   return dissect_x420_SubjectField(FALSE, tvb, offset, pinfo, tree, hf_x420_subject);
923 }
924
925
926
927 static int
928 dissect_x420_ExpiryTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
929   offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index);
930
931   return offset;
932 }
933 static int dissect_expiry_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
934   return dissect_x420_ExpiryTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_expiry_time);
935 }
936
937
938
939 static int
940 dissect_x420_ReplyTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
941   offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index);
942
943   return offset;
944 }
945 static int dissect_reply_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
946   return dissect_x420_ReplyTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_time);
947 }
948
949
950
951 static int
952 dissect_x420_ReplyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
953   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
954
955   return offset;
956 }
957 static int dissect_ReplyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
958   return dissect_x420_ReplyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_ReplyRecipientsField_item);
959 }
960
961
962 static const ber_sequence_t ReplyRecipientsField_sequence_of[1] = {
963   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ReplyRecipientsField_item },
964 };
965
966 static int
967 dissect_x420_ReplyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
968   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
969                                       ReplyRecipientsField_sequence_of, hf_index, ett_x420_ReplyRecipientsField);
970
971   return offset;
972 }
973 static int dissect_reply_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
974   return dissect_x420_ReplyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_recipients);
975 }
976
977
978 static const value_string x420_ImportanceField_vals[] = {
979   {   0, "low" },
980   {   1, "normal" },
981   {   2, "high" },
982   { 0, NULL }
983 };
984
985
986 static int
987 dissect_x420_ImportanceField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
988   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
989                                   NULL);
990
991   return offset;
992 }
993 static int dissect_importance_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
994   return dissect_x420_ImportanceField(TRUE, tvb, offset, pinfo, tree, hf_x420_importance);
995 }
996
997
998 static const value_string x420_SensitivityField_vals[] = {
999   {   1, "personal" },
1000   {   2, "private" },
1001   {   3, "company-confidential" },
1002   { 0, NULL }
1003 };
1004
1005
1006 static int
1007 dissect_x420_SensitivityField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1008   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1009                                   NULL);
1010
1011   return offset;
1012 }
1013 static int dissect_sensitivity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1014   return dissect_x420_SensitivityField(TRUE, tvb, offset, pinfo, tree, hf_x420_sensitivity);
1015 }
1016
1017
1018
1019 static int
1020 dissect_x420_AutoForwardedField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1021   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
1022
1023   return offset;
1024 }
1025 static int dissect_auto_forwarded_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1026   return dissect_x420_AutoForwardedField(TRUE, tvb, offset, pinfo, tree, hf_x420_auto_forwarded);
1027 }
1028
1029
1030 static const ber_sequence_t ExtensionsField_set_of[1] = {
1031   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ExtensionsField_item },
1032 };
1033
1034 int
1035 dissect_x420_ExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1036   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1037                                  ExtensionsField_set_of, hf_index, ett_x420_ExtensionsField);
1038
1039   return offset;
1040 }
1041 static int dissect_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1042   return dissect_x420_ExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_extensions);
1043 }
1044
1045
1046 static const ber_sequence_t Heading_set[] = {
1047   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_this_IPM },
1048   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originator_impl },
1049   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizing_users_impl },
1050   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_primary_recipients_impl },
1051   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_copy_recipients_impl },
1052   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_blind_copy_recipients_impl },
1053   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_replied_to_IPM_impl },
1054   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_obsoleted_IPMs_impl },
1055   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_related_IPMs_impl },
1056   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_subject },
1057   { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_expiry_time_impl },
1058   { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_time_impl },
1059   { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_recipients_impl },
1060   { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_importance_impl },
1061   { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sensitivity_impl },
1062   { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auto_forwarded_impl },
1063   { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
1064   { 0, 0, 0, NULL }
1065 };
1066
1067 static int
1068 dissect_x420_Heading(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1069   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1070                               Heading_set, hf_index, ett_x420_Heading);
1071
1072   return offset;
1073 }
1074 static int dissect_heading(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1075   return dissect_x420_Heading(FALSE, tvb, offset, pinfo, tree, hf_x420_heading);
1076 }
1077
1078
1079 static const value_string x420_Repertoire_vals[] = {
1080   {   2, "ita2" },
1081   {   5, "ia5" },
1082   { 0, NULL }
1083 };
1084
1085
1086 static int
1087 dissect_x420_Repertoire(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1088   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1089                                   NULL);
1090
1091   return offset;
1092 }
1093 static int dissect_repertoire_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1094   return dissect_x420_Repertoire(TRUE, tvb, offset, pinfo, tree, hf_x420_repertoire);
1095 }
1096
1097
1098 static const ber_sequence_t IA5TextParameters_set[] = {
1099   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_repertoire_impl },
1100   { 0, 0, 0, NULL }
1101 };
1102
1103 static int
1104 dissect_x420_IA5TextParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1105   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1106                               IA5TextParameters_set, hf_index, ett_x420_IA5TextParameters);
1107
1108   return offset;
1109 }
1110 static int dissect_ia5text_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1111   return dissect_x420_IA5TextParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_ia5text_parameters);
1112 }
1113
1114
1115
1116 static int
1117 dissect_x420_IA5TextData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1118   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
1119                                             pinfo, tree, tvb, offset, hf_index,
1120                                             NULL);
1121
1122   return offset;
1123 }
1124 static int dissect_ia5text_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1125   return dissect_x420_IA5TextData(FALSE, tvb, offset, pinfo, tree, hf_x420_ia5text_data);
1126 }
1127
1128
1129 static const ber_sequence_t IA5TextBodyPart_sequence[] = {
1130   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ia5text_parameters },
1131   { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_ia5text_data },
1132   { 0, 0, 0, NULL }
1133 };
1134
1135 static int
1136 dissect_x420_IA5TextBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1137   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1138                                    IA5TextBodyPart_sequence, hf_index, ett_x420_IA5TextBodyPart);
1139
1140   return offset;
1141 }
1142 static int dissect_ia5_text_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1143   return dissect_x420_IA5TextBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_ia5_text);
1144 }
1145
1146
1147
1148 static int
1149 dissect_x420_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1150   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1151                                   NULL);
1152
1153   return offset;
1154 }
1155 static int dissect_number_of_pages_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1156   return dissect_x420_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x420_number_of_pages);
1157 }
1158 static int dissect_submitted_body_part_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1159   return dissect_x420_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x420_submitted_body_part);
1160 }
1161 static int dissect_voice_message_duration_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1162   return dissect_x420_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x420_voice_message_duration);
1163 }
1164
1165
1166 static const ber_sequence_t G3FacsimileParameters_set[] = {
1167   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_number_of_pages_impl },
1168   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_g3facsimile_non_basic_parameters_impl },
1169   { 0, 0, 0, NULL }
1170 };
1171
1172 static int
1173 dissect_x420_G3FacsimileParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1174   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1175                               G3FacsimileParameters_set, hf_index, ett_x420_G3FacsimileParameters);
1176
1177   return offset;
1178 }
1179 static int dissect_g3facsimile_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1180   return dissect_x420_G3FacsimileParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_parameters);
1181 }
1182
1183
1184
1185 static int
1186 dissect_x420_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1187   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
1188                                     NULL, hf_index, -1,
1189                                     NULL);
1190
1191   return offset;
1192 }
1193 static int dissect_G3FacsimileData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1194   return dissect_x420_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_x420_G3FacsimileData_item);
1195 }
1196 static int dissect_encrypted(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1197   return dissect_x420_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_x420_encrypted);
1198 }
1199
1200
1201 static const ber_sequence_t G3FacsimileData_sequence_of[1] = {
1202   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_G3FacsimileData_item },
1203 };
1204
1205 static int
1206 dissect_x420_G3FacsimileData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1207   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1208                                       G3FacsimileData_sequence_of, hf_index, ett_x420_G3FacsimileData);
1209
1210   return offset;
1211 }
1212 static int dissect_g3facsimile_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1213   return dissect_x420_G3FacsimileData(FALSE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_data);
1214 }
1215
1216
1217 static const ber_sequence_t G3FacsimileBodyPart_sequence[] = {
1218   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_g3facsimile_parameters },
1219   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_g3facsimile_data },
1220   { 0, 0, 0, NULL }
1221 };
1222
1223 static int
1224 dissect_x420_G3FacsimileBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1225   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1226                                    G3FacsimileBodyPart_sequence, hf_index, ett_x420_G3FacsimileBodyPart);
1227
1228   return offset;
1229 }
1230 static int dissect_g3_facsimile_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1231   return dissect_x420_G3FacsimileBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_g3_facsimile);
1232 }
1233
1234
1235
1236 static int
1237 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_) {
1238 #line 165 "x420.cnf"
1239 /* XXX Not implemented yet */
1240
1241
1242
1243   return offset;
1244 }
1245 static int dissect_G4Class1Data_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1246   return dissect_x420_Interchange_Data_Element(FALSE, tvb, offset, pinfo, tree, hf_x420_G4Class1Data_item);
1247 }
1248 static int dissect_MixedModeData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1249   return dissect_x420_Interchange_Data_Element(FALSE, tvb, offset, pinfo, tree, hf_x420_MixedModeData_item);
1250 }
1251
1252
1253 static const ber_sequence_t G4Class1Data_sequence_of[1] = {
1254   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_G4Class1Data_item },
1255 };
1256
1257 static int
1258 dissect_x420_G4Class1Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1259   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1260                                       G4Class1Data_sequence_of, hf_index, ett_x420_G4Class1Data);
1261
1262   return offset;
1263 }
1264
1265
1266
1267 static int
1268 dissect_x420_G4Class1BodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1269   offset = dissect_x420_G4Class1Data(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1270
1271   return offset;
1272 }
1273 static int dissect_g4_class1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1274   return dissect_x420_G4Class1BodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_g4_class1);
1275 }
1276
1277
1278 static const ber_sequence_t TeletexParameters_set[] = {
1279   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_number_of_pages_impl },
1280   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_telex_compatible_impl },
1281   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_non_basic_parameters_impl },
1282   { 0, 0, 0, NULL }
1283 };
1284
1285 static int
1286 dissect_x420_TeletexParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1287   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1288                               TeletexParameters_set, hf_index, ett_x420_TeletexParameters);
1289
1290   return offset;
1291 }
1292 static int dissect_teletex_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1293   return dissect_x420_TeletexParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_teletex_parameters);
1294 }
1295
1296
1297
1298 static int
1299 dissect_x420_TeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1300   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
1301                                             pinfo, tree, tvb, offset, hf_index,
1302                                             NULL);
1303
1304   return offset;
1305 }
1306 static int dissect_TeletexData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1307   return dissect_x420_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_x420_TeletexData_item);
1308 }
1309
1310
1311 static const ber_sequence_t TeletexData_sequence_of[1] = {
1312   { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_TeletexData_item },
1313 };
1314
1315 static int
1316 dissect_x420_TeletexData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1317   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1318                                       TeletexData_sequence_of, hf_index, ett_x420_TeletexData);
1319
1320   return offset;
1321 }
1322 static int dissect_teletex_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1323   return dissect_x420_TeletexData(FALSE, tvb, offset, pinfo, tree, hf_x420_teletex_data);
1324 }
1325
1326
1327 static const ber_sequence_t TeletexBodyPart_sequence[] = {
1328   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_teletex_parameters },
1329   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_teletex_data },
1330   { 0, 0, 0, NULL }
1331 };
1332
1333 static int
1334 dissect_x420_TeletexBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1335   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1336                                    TeletexBodyPart_sequence, hf_index, ett_x420_TeletexBodyPart);
1337
1338   return offset;
1339 }
1340 static int dissect_teletex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1341   return dissect_x420_TeletexBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_teletex);
1342 }
1343
1344
1345 static const value_string x420_VideotexSyntax_vals[] = {
1346   {   0, "ids" },
1347   {   1, "data-syntax1" },
1348   {   2, "data-syntax2" },
1349   {   3, "data-syntax3" },
1350   { 0, NULL }
1351 };
1352
1353
1354 static int
1355 dissect_x420_VideotexSyntax(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1356   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1357                                   NULL);
1358
1359   return offset;
1360 }
1361 static int dissect_syntax_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1362   return dissect_x420_VideotexSyntax(TRUE, tvb, offset, pinfo, tree, hf_x420_syntax);
1363 }
1364
1365
1366 static const ber_sequence_t VideotexParameters_set[] = {
1367   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_syntax_impl },
1368   { 0, 0, 0, NULL }
1369 };
1370
1371 static int
1372 dissect_x420_VideotexParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1373   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1374                               VideotexParameters_set, hf_index, ett_x420_VideotexParameters);
1375
1376   return offset;
1377 }
1378 static int dissect_videotex_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1379   return dissect_x420_VideotexParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_videotex_parameters);
1380 }
1381
1382
1383
1384 static int
1385 dissect_x420_VideotexData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1386   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_VideotexString,
1387                                             pinfo, tree, tvb, offset, hf_index,
1388                                             NULL);
1389
1390   return offset;
1391 }
1392 static int dissect_videotex_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1393   return dissect_x420_VideotexData(FALSE, tvb, offset, pinfo, tree, hf_x420_videotex_data);
1394 }
1395
1396
1397 static const ber_sequence_t VideotexBodyPart_sequence[] = {
1398   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_videotex_parameters },
1399   { BER_CLASS_UNI, BER_UNI_TAG_VideotexString, BER_FLAGS_NOOWNTAG, dissect_videotex_data },
1400   { 0, 0, 0, NULL }
1401 };
1402
1403 static int
1404 dissect_x420_VideotexBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1405   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1406                                    VideotexBodyPart_sequence, hf_index, ett_x420_VideotexBodyPart);
1407
1408   return offset;
1409 }
1410 static int dissect_videotex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1411   return dissect_x420_VideotexBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_videotex);
1412 }
1413
1414
1415 static const ber_sequence_t EncryptedParameters_set[] = {
1416   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithm_identifier },
1417   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_originator_certificates },
1418   { 0, 0, 0, NULL }
1419 };
1420
1421 static int
1422 dissect_x420_EncryptedParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1423   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1424                               EncryptedParameters_set, hf_index, ett_x420_EncryptedParameters);
1425
1426   return offset;
1427 }
1428 static int dissect_encrypted_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1429   return dissect_x420_EncryptedParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_encrypted_parameters);
1430 }
1431
1432
1433
1434 static int
1435 dissect_x420_EncryptedData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1436   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
1437                                     NULL, hf_index, -1,
1438                                     NULL);
1439
1440   return offset;
1441 }
1442 static int dissect_encrypted_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1443   return dissect_x420_EncryptedData(FALSE, tvb, offset, pinfo, tree, hf_x420_encrypted_data);
1444 }
1445
1446
1447 static const ber_sequence_t EncryptedBodyPart_sequence[] = {
1448   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_encrypted_parameters },
1449   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted_data },
1450   { 0, 0, 0, NULL }
1451 };
1452
1453 static int
1454 dissect_x420_EncryptedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1455   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1456                                    EncryptedBodyPart_sequence, hf_index, ett_x420_EncryptedBodyPart);
1457
1458   return offset;
1459 }
1460 static int dissect_encrypted_bp_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1461   return dissect_x420_EncryptedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_encrypted_bp);
1462 }
1463
1464
1465 static const ber_sequence_t MessageParameters_set[] = {
1466   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_time_impl },
1467   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_envelope_impl },
1468   { 0, 0, 0, NULL }
1469 };
1470
1471 int
1472 dissect_x420_MessageParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1473   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1474                               MessageParameters_set, hf_index, ett_x420_MessageParameters);
1475
1476   return offset;
1477 }
1478 static int dissect_message_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1479   return dissect_x420_MessageParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_message_parameters);
1480 }
1481
1482
1483
1484 static int
1485 dissect_x420_MessageData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1486   offset = dissect_x420_IPM(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1487
1488   return offset;
1489 }
1490 static int dissect_message_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1491   return dissect_x420_MessageData(FALSE, tvb, offset, pinfo, tree, hf_x420_message_data);
1492 }
1493
1494
1495 static const ber_sequence_t MessageBodyPart_sequence[] = {
1496   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_parameters },
1497   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_message_data },
1498   { 0, 0, 0, NULL }
1499 };
1500
1501 static int
1502 dissect_x420_MessageBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1503   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1504                                    MessageBodyPart_sequence, hf_index, ett_x420_MessageBodyPart);
1505
1506   return offset;
1507 }
1508 static int dissect_message_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1509   return dissect_x420_MessageBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_message);
1510 }
1511
1512
1513 static const ber_sequence_t MixedModeData_sequence_of[1] = {
1514   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_MixedModeData_item },
1515 };
1516
1517 static int
1518 dissect_x420_MixedModeData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1519   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1520                                       MixedModeData_sequence_of, hf_index, ett_x420_MixedModeData);
1521
1522   return offset;
1523 }
1524
1525
1526
1527 static int
1528 dissect_x420_MixedModeBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1529   offset = dissect_x420_MixedModeData(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1530
1531   return offset;
1532 }
1533 static int dissect_mixed_mode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1534   return dissect_x420_MixedModeBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_mixed_mode);
1535 }
1536
1537
1538
1539 static int
1540 dissect_x420_BilaterallyDefinedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1541   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1542                                        NULL);
1543
1544   return offset;
1545 }
1546 static int dissect_bilaterally_defined_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1547   return dissect_x420_BilaterallyDefinedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_bilaterally_defined);
1548 }
1549
1550
1551
1552 static int
1553 dissect_x420_NationallyDefinedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1554 #line 168 "x420.cnf"
1555 /* XXX Not implemented yet */
1556
1557
1558
1559
1560   return offset;
1561 }
1562 static int dissect_nationally_defined_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1563   return dissect_x420_NationallyDefinedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_nationally_defined);
1564 }
1565
1566
1567 static const ber_sequence_t ExtendedBodyPart_sequence[] = {
1568   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_extended_parameters_impl },
1569   { BER_CLASS_UNI, 8, BER_FLAGS_NOOWNTAG, dissect_extended_data },
1570   { 0, 0, 0, NULL }
1571 };
1572
1573 static int
1574 dissect_x420_ExtendedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1575   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1576                                    ExtendedBodyPart_sequence, hf_index, ett_x420_ExtendedBodyPart);
1577
1578   return offset;
1579 }
1580 static int dissect_extended_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1581   return dissect_x420_ExtendedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_extended);
1582 }
1583
1584
1585 static const value_string x420_BodyPart_vals[] = {
1586   {   0, "ia5-text" },
1587   {   3, "g3-facsimile" },
1588   {   4, "g4-class1" },
1589   {   5, "teletex" },
1590   {   6, "videotex" },
1591   {   8, "encrypted" },
1592   {   9, "message" },
1593   {  11, "mixed-mode" },
1594   {  14, "bilaterally-defined" },
1595   {   7, "nationally-defined" },
1596   {  15, "extended" },
1597   { 0, NULL }
1598 };
1599
1600 static const ber_choice_t BodyPart_choice[] = {
1601   {   0, BER_CLASS_CON, 0, 0, dissect_ia5_text_impl },
1602   {   3, BER_CLASS_CON, 3, 0, dissect_g3_facsimile_impl },
1603   {   4, BER_CLASS_CON, 4, 0, dissect_g4_class1_impl },
1604   {   5, BER_CLASS_CON, 5, 0, dissect_teletex_impl },
1605   {   6, BER_CLASS_CON, 6, 0, dissect_videotex_impl },
1606   {   8, BER_CLASS_CON, 8, 0, dissect_encrypted_bp_impl },
1607   {   9, BER_CLASS_CON, 9, 0, dissect_message_impl },
1608   {  11, BER_CLASS_CON, 11, 0, dissect_mixed_mode_impl },
1609   {  14, BER_CLASS_CON, 14, 0, dissect_bilaterally_defined_impl },
1610   {   7, BER_CLASS_CON, 7, 0, dissect_nationally_defined_impl },
1611   {  15, BER_CLASS_CON, 15, 0, dissect_extended_impl },
1612   { 0, 0, 0, 0, NULL }
1613 };
1614
1615 static int
1616 dissect_x420_BodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1617   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1618                                  BodyPart_choice, hf_index, ett_x420_BodyPart,
1619                                  NULL);
1620
1621   return offset;
1622 }
1623 static int dissect_Body_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1624   return dissect_x420_BodyPart(FALSE, tvb, offset, pinfo, tree, hf_x420_Body_item);
1625 }
1626 static int dissect_advice(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1627   return dissect_x420_BodyPart(FALSE, tvb, offset, pinfo, tree, hf_x420_advice);
1628 }
1629
1630
1631 static const ber_sequence_t Body_sequence_of[1] = {
1632   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_Body_item },
1633 };
1634
1635 static int
1636 dissect_x420_Body(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1637   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1638                                       Body_sequence_of, hf_index, ett_x420_Body);
1639
1640   return offset;
1641 }
1642 static int dissect_body(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1643   return dissect_x420_Body(FALSE, tvb, offset, pinfo, tree, hf_x420_body);
1644 }
1645
1646
1647 static const ber_sequence_t IPM_sequence[] = {
1648   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_heading },
1649   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_body },
1650   { 0, 0, 0, NULL }
1651 };
1652
1653 int
1654 dissect_x420_IPM(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1655 #line 128 "x420.cnf"
1656
1657  if((hf_index == hf_x420_ipm) && check_col(pinfo->cinfo, COL_INFO))
1658    col_append_fstr(pinfo->cinfo, COL_INFO, " Message");
1659
1660     offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1661                                    IPM_sequence, hf_index, ett_x420_IPM);
1662
1663
1664
1665
1666
1667   return offset;
1668 }
1669
1670
1671
1672 static int
1673 dissect_x420_SubjectIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1674   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1675
1676   return offset;
1677 }
1678 static int dissect_subject_ipm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1679   return dissect_x420_SubjectIPMField(FALSE, tvb, offset, pinfo, tree, hf_x420_subject_ipm);
1680 }
1681
1682
1683
1684 static int
1685 dissect_x420_IPNOriginatorField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1686   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1687
1688   return offset;
1689 }
1690 static int dissect_ipn_originator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1691   return dissect_x420_IPNOriginatorField(TRUE, tvb, offset, pinfo, tree, hf_x420_ipn_originator);
1692 }
1693
1694
1695
1696 static int
1697 dissect_x420_IPMIntendedRecipientField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1698   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1699
1700   return offset;
1701 }
1702 static int dissect_ipm_intended_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1703   return dissect_x420_IPMIntendedRecipientField(TRUE, tvb, offset, pinfo, tree, hf_x420_ipm_intended_recipient);
1704 }
1705
1706
1707
1708 static int
1709 dissect_x420_ConversionEITsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1710   offset = dissect_x411_EncodedInformationTypes(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1711
1712   return offset;
1713 }
1714 static int dissect_conversion_eits(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1715   return dissect_x420_ConversionEITsField(FALSE, tvb, offset, pinfo, tree, hf_x420_conversion_eits);
1716 }
1717
1718
1719 static const ber_sequence_t NotificationExtensionsField_set_of[1] = {
1720   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_NotificationExtensionsField_item },
1721 };
1722
1723 static int
1724 dissect_x420_NotificationExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1725   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1726                                  NotificationExtensionsField_set_of, hf_index, ett_x420_NotificationExtensionsField);
1727
1728   return offset;
1729 }
1730 static int dissect_notification_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1731   return dissect_x420_NotificationExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_notification_extensions);
1732 }
1733
1734
1735 static const value_string x420_NonReceiptReasonField_vals[] = {
1736   {   0, "ipm-discarded" },
1737   {   1, "ipm-auto-forwarded" },
1738   { 0, NULL }
1739 };
1740
1741
1742 static int
1743 dissect_x420_NonReceiptReasonField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1744   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1745                                   NULL);
1746
1747   return offset;
1748 }
1749 static int dissect_non_receipt_reason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1750   return dissect_x420_NonReceiptReasonField(TRUE, tvb, offset, pinfo, tree, hf_x420_non_receipt_reason);
1751 }
1752
1753
1754 static const value_string x420_DiscardReasonField_vals[] = {
1755   {   0, "ipm-expired" },
1756   {   1, "ipm-obsoleted" },
1757   {   2, "user-subscription-terminated" },
1758   {   3, "not-used" },
1759   { 0, NULL }
1760 };
1761
1762
1763 static int
1764 dissect_x420_DiscardReasonField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1765   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1766                                   NULL);
1767
1768   return offset;
1769 }
1770 static int dissect_discard_reason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1771   return dissect_x420_DiscardReasonField(TRUE, tvb, offset, pinfo, tree, hf_x420_discard_reason);
1772 }
1773
1774
1775
1776 static int
1777 dissect_x420_AutoForwardComment(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1778   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
1779                                             pinfo, tree, tvb, offset, hf_index,
1780                                             NULL);
1781
1782   return offset;
1783 }
1784
1785
1786
1787 static int
1788 dissect_x420_AutoForwardCommentField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1789   offset = dissect_x420_AutoForwardComment(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1790
1791   return offset;
1792 }
1793 static int dissect_auto_forward_comment_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1794   return dissect_x420_AutoForwardCommentField(TRUE, tvb, offset, pinfo, tree, hf_x420_auto_forward_comment);
1795 }
1796
1797
1798
1799 static int
1800 dissect_x420_ReturnedIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1801   offset = dissect_x420_IPM(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1802
1803   return offset;
1804 }
1805 static int dissect_returned_ipm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1806   return dissect_x420_ReturnedIPMField(TRUE, tvb, offset, pinfo, tree, hf_x420_returned_ipm);
1807 }
1808
1809
1810 static const ber_sequence_t NRNExtensionsField_set_of[1] = {
1811   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_NRNExtensionsField_item },
1812 };
1813
1814 static int
1815 dissect_x420_NRNExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1816   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1817                                  NRNExtensionsField_set_of, hf_index, ett_x420_NRNExtensionsField);
1818
1819   return offset;
1820 }
1821 static int dissect_nrn_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1822   return dissect_x420_NRNExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_nrn_extensions);
1823 }
1824
1825
1826 static const ber_sequence_t NonReceiptFields_set[] = {
1827   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_non_receipt_reason_impl },
1828   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_discard_reason_impl },
1829   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auto_forward_comment_impl },
1830   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_returned_ipm_impl },
1831   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nrn_extensions_impl },
1832   { 0, 0, 0, NULL }
1833 };
1834
1835 static int
1836 dissect_x420_NonReceiptFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1837   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1838                               NonReceiptFields_set, hf_index, ett_x420_NonReceiptFields);
1839
1840   return offset;
1841 }
1842 static int dissect_non_receipt_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1843   return dissect_x420_NonReceiptFields(TRUE, tvb, offset, pinfo, tree, hf_x420_non_receipt_fields);
1844 }
1845
1846
1847
1848 static int
1849 dissect_x420_ReceiptTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1850   offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1851
1852   return offset;
1853 }
1854 static int dissect_receipt_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1855   return dissect_x420_ReceiptTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_receipt_time);
1856 }
1857
1858
1859 static const value_string x420_AcknowledgmentModeField_vals[] = {
1860   {   0, "manual" },
1861   {   1, "automatic" },
1862   { 0, NULL }
1863 };
1864
1865
1866 static int
1867 dissect_x420_AcknowledgmentModeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1868   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1869                                   NULL);
1870
1871   return offset;
1872 }
1873 static int dissect_acknowledgment_mode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1874   return dissect_x420_AcknowledgmentModeField(TRUE, tvb, offset, pinfo, tree, hf_x420_acknowledgment_mode);
1875 }
1876
1877
1878
1879 static int
1880 dissect_x420_SupplReceiptInfoField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1881   offset = dissect_x411_SupplementaryInformation(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1882
1883   return offset;
1884 }
1885 static int dissect_suppl_receipt_info_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1886   return dissect_x420_SupplReceiptInfoField(TRUE, tvb, offset, pinfo, tree, hf_x420_suppl_receipt_info);
1887 }
1888
1889
1890 static const ber_sequence_t RNExtensionsField_set_of[1] = {
1891   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RNExtensionsField_item },
1892 };
1893
1894 static int
1895 dissect_x420_RNExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1896   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1897                                  RNExtensionsField_set_of, hf_index, ett_x420_RNExtensionsField);
1898
1899   return offset;
1900 }
1901 static int dissect_rn_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1902   return dissect_x420_RNExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_rn_extensions);
1903 }
1904
1905
1906 static const ber_sequence_t ReceiptFields_set[] = {
1907   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_receipt_time_impl },
1908   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acknowledgment_mode_impl },
1909   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suppl_receipt_info_impl },
1910   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_rn_extensions_impl },
1911   { 0, 0, 0, NULL }
1912 };
1913
1914 static int
1915 dissect_x420_ReceiptFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1916   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1917                               ReceiptFields_set, hf_index, ett_x420_ReceiptFields);
1918
1919   return offset;
1920 }
1921 static int dissect_receipt_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1922   return dissect_x420_ReceiptFields(TRUE, tvb, offset, pinfo, tree, hf_x420_receipt_fields);
1923 }
1924
1925
1926 static const ber_sequence_t OtherNotificationTypeFields_set_of[1] = {
1927   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_OtherNotificationTypeFields_item },
1928 };
1929
1930 static int
1931 dissect_x420_OtherNotificationTypeFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1932   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1933                                  OtherNotificationTypeFields_set_of, hf_index, ett_x420_OtherNotificationTypeFields);
1934
1935   return offset;
1936 }
1937 static int dissect_other_notification_type_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1938   return dissect_x420_OtherNotificationTypeFields(TRUE, tvb, offset, pinfo, tree, hf_x420_other_notification_type_fields);
1939 }
1940
1941
1942 static const value_string x420_T_choice_vals[] = {
1943   {   0, "non-receipt-fields" },
1944   {   1, "receipt-fields" },
1945   {   2, "other-notification-type-fields" },
1946   { 0, NULL }
1947 };
1948
1949 static const ber_choice_t T_choice_choice[] = {
1950   {   0, BER_CLASS_CON, 0, 0, dissect_non_receipt_fields_impl },
1951   {   1, BER_CLASS_CON, 1, 0, dissect_receipt_fields_impl },
1952   {   2, BER_CLASS_CON, 2, 0, dissect_other_notification_type_fields_impl },
1953   { 0, 0, 0, 0, NULL }
1954 };
1955
1956 static int
1957 dissect_x420_T_choice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1958   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1959                                  T_choice_choice, hf_index, ett_x420_T_choice,
1960                                  NULL);
1961
1962   return offset;
1963 }
1964 static int dissect_choice_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1965   return dissect_x420_T_choice(TRUE, tvb, offset, pinfo, tree, hf_x420_choice);
1966 }
1967
1968
1969 static const ber_sequence_t IPN_set[] = {
1970   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_subject_ipm },
1971   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipn_originator_impl },
1972   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipm_intended_recipient_impl },
1973   { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_conversion_eits },
1974   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_extensions_impl },
1975   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_choice_impl },
1976   { 0, 0, 0, NULL }
1977 };
1978
1979 int
1980 dissect_x420_IPN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1981 #line 136 "x420.cnf"
1982
1983  if((hf_index == hf_x420_ipn) && check_col(pinfo->cinfo, COL_INFO))
1984    col_append_fstr(pinfo->cinfo, COL_INFO, " Notification");
1985
1986     offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1987                               IPN_set, hf_index, ett_x420_IPN);
1988
1989
1990
1991
1992   return offset;
1993 }
1994 static int dissect_ipn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1995   return dissect_x420_IPN(TRUE, tvb, offset, pinfo, tree, hf_x420_ipn);
1996 }
1997
1998
1999 const value_string x420_InformationObject_vals[] = {
2000   {   0, "ipm" },
2001   {   1, "ipn" },
2002   { 0, NULL }
2003 };
2004
2005 static const ber_choice_t InformationObject_choice[] = {
2006   {   0, BER_CLASS_CON, 0, 0, dissect_ipm_impl },
2007   {   1, BER_CLASS_CON, 1, 0, dissect_ipn_impl },
2008   { 0, 0, 0, 0, NULL }
2009 };
2010
2011 int
2012 dissect_x420_InformationObject(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2013   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
2014                                  InformationObject_choice, hf_index, ett_x420_InformationObject,
2015                                  NULL);
2016
2017   return offset;
2018 }
2019
2020
2021 static const ber_sequence_t AbsenceAdvice_sequence[] = {
2022   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_advice },
2023   { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_next_available },
2024   { 0, 0, 0, NULL }
2025 };
2026
2027 static int
2028 dissect_x420_AbsenceAdvice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2029   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2030                                    AbsenceAdvice_sequence, hf_index, ett_x420_AbsenceAdvice);
2031
2032   return offset;
2033 }
2034
2035
2036 static const ber_sequence_t ChangeOfAddressAdvice_sequence[] = {
2037   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_new_address_impl },
2038   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_effective_from_impl },
2039   { 0, 0, 0, NULL }
2040 };
2041
2042 static int
2043 dissect_x420_ChangeOfAddressAdvice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2044   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2045                                    ChangeOfAddressAdvice_sequence, hf_index, ett_x420_ChangeOfAddressAdvice);
2046
2047   return offset;
2048 }
2049
2050
2051
2052 static int
2053 dissect_x420_SequenceNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2054   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
2055                                   NULL);
2056
2057   return offset;
2058 }
2059 static int dissect_stored_entry_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2060   return dissect_x420_SequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_entry);
2061 }
2062 static int dissect_stored_content_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2063   return dissect_x420_SequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_content);
2064 }
2065 static int dissect_message_entry(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2066   return dissect_x420_SequenceNumber(FALSE, tvb, offset, pinfo, tree, hf_x420_message_entry);
2067 }
2068
2069
2070
2071 static int
2072 dissect_x420_BodyPartNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2073   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
2074                                   NULL);
2075
2076   return offset;
2077 }
2078 static int dissect_body_part_number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2079   return dissect_x420_BodyPartNumber(FALSE, tvb, offset, pinfo, tree, hf_x420_body_part_number);
2080 }
2081
2082
2083 static const ber_sequence_t T_stored_body_part_sequence[] = {
2084   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_message_entry },
2085   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_body_part_number },
2086   { 0, 0, 0, NULL }
2087 };
2088
2089 static int
2090 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_) {
2091   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2092                                    T_stored_body_part_sequence, hf_index, ett_x420_T_stored_body_part);
2093
2094   return offset;
2095 }
2096 static int dissect_stored_body_part_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2097   return dissect_x420_T_stored_body_part(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_body_part);
2098 }
2099
2100
2101 static const value_string x420_BodyPartReference_vals[] = {
2102   {   0, "stored-entry" },
2103   {   1, "stored-content" },
2104   {   2, "submitted-body-part" },
2105   {   3, "stored-body-part" },
2106   { 0, NULL }
2107 };
2108
2109 static const ber_choice_t BodyPartReference_choice[] = {
2110   {   0, BER_CLASS_CON, 0, 0, dissect_stored_entry_impl },
2111   {   1, BER_CLASS_CON, 1, 0, dissect_stored_content_impl },
2112   {   2, BER_CLASS_CON, 2, 0, dissect_submitted_body_part_impl },
2113   {   3, BER_CLASS_CON, 3, 0, dissect_stored_body_part_impl },
2114   { 0, 0, 0, 0, NULL }
2115 };
2116
2117 static int
2118 dissect_x420_BodyPartReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2119   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
2120                                  BodyPartReference_choice, hf_index, ett_x420_BodyPartReference,
2121                                  NULL);
2122
2123   return offset;
2124 }
2125 static int dissect_BodyPartReferences_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2126   return dissect_x420_BodyPartReference(FALSE, tvb, offset, pinfo, tree, hf_x420_BodyPartReferences_item);
2127 }
2128
2129
2130 static const ber_sequence_t BodyPartReferences_sequence_of[1] = {
2131   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BodyPartReferences_item },
2132 };
2133
2134 static int
2135 dissect_x420_BodyPartReferences(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2136   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
2137                                       BodyPartReferences_sequence_of, hf_index, ett_x420_BodyPartReferences);
2138
2139   return offset;
2140 }
2141 static int dissect_assembly_instructions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2142   return dissect_x420_BodyPartReferences(TRUE, tvb, offset, pinfo, tree, hf_x420_assembly_instructions);
2143 }
2144
2145
2146 static const ber_sequence_t IPMAssemblyInstructions_set[] = {
2147   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_assembly_instructions_impl },
2148   { 0, 0, 0, NULL }
2149 };
2150
2151 static int
2152 dissect_x420_IPMAssemblyInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2153   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
2154                               IPMAssemblyInstructions_set, hf_index, ett_x420_IPMAssemblyInstructions);
2155
2156   return offset;
2157 }
2158
2159
2160
2161 static int
2162 dissect_x420_OriginatingUA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2163   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2164                                             pinfo, tree, tvb, offset, hf_index,
2165                                             NULL);
2166
2167   return offset;
2168 }
2169
2170
2171
2172 static int
2173 dissect_x420_IncompleteCopy(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2174   offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
2175
2176   return offset;
2177 }
2178
2179
2180
2181 static int
2182 dissect_x420_Language(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2183   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
2184                                             pinfo, tree, tvb, offset, hf_index,
2185                                             NULL);
2186
2187   return offset;
2188 }
2189 static int dissect_Languages_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2190   return dissect_x420_Language(FALSE, tvb, offset, pinfo, tree, hf_x420_Languages_item);
2191 }
2192
2193
2194 static const ber_sequence_t Languages_set_of[1] = {
2195   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_Languages_item },
2196 };
2197
2198 static int
2199 dissect_x420_Languages(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2200   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
2201                                  Languages_set_of, hf_index, ett_x420_Languages);
2202
2203   return offset;
2204 }
2205
2206
2207 static const value_string x420_AutoSubmitted_vals[] = {
2208   {   0, "not-auto-submitted" },
2209   {   1, "auto-generated" },
2210   {   2, "auto-replied" },
2211   { 0, NULL }
2212 };
2213
2214
2215 static int
2216 dissect_x420_AutoSubmitted(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2217   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
2218                                   NULL);
2219
2220   return offset;
2221 }
2222
2223
2224 static const ber_sequence_t Signature_sequence[] = {
2225   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
2226   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
2227   { 0, 0, 0, NULL }
2228 };
2229
2230 static int
2231 dissect_x420_Signature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2232   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2233                                    Signature_sequence, hf_index, ett_x420_Signature);
2234
2235   return offset;
2236 }
2237
2238
2239
2240 static int
2241 dissect_x420_BodyPartSignature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2242   offset = dissect_x420_Signature(implicit_tag, tvb, offset, pinfo, tree, hf_index);
2243
2244   return offset;
2245 }
2246 static int dissect_body_part_signature(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2247   return dissect_x420_BodyPartSignature(FALSE, tvb, offset, pinfo, tree, hf_x420_body_part_signature);
2248 }
2249
2250
2251 static const ber_sequence_t BodyPartSignatures_item_set[] = {
2252   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_body_part_number },
2253   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_body_part_signature },
2254   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originator_certificate_selector_impl },
2255   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originator_certificates_impl },
2256   { 0, 0, 0, NULL }
2257 };
2258
2259 static int
2260 dissect_x420_BodyPartSignatures_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2261   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
2262                               BodyPartSignatures_item_set, hf_index, ett_x420_BodyPartSignatures_item);
2263
2264   return offset;
2265 }
2266 static int dissect_BodyPartSignatures_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2267   return dissect_x420_BodyPartSignatures_item(FALSE, tvb, offset, pinfo, tree, hf_x420_BodyPartSignatures_item);
2268 }
2269
2270
2271 static const ber_sequence_t BodyPartSignatures_set_of[1] = {
2272   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_BodyPartSignatures_item },
2273 };
2274
2275 static int
2276 dissect_x420_BodyPartSignatures(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2277   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
2278                                  BodyPartSignatures_set_of, hf_index, ett_x420_BodyPartSignatures);
2279
2280   return offset;
2281 }
2282
2283
2284
2285 static int
2286 dissect_x420_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2287   offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
2288
2289   return offset;
2290 }
2291 static int dissect_body_part_unlabelled_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2292   return dissect_x420_NULL(TRUE, tvb, offset, pinfo, tree, hf_x420_body_part_unlabelled);
2293 }
2294 static int dissect_simple(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2295   return dissect_x420_NULL(FALSE, tvb, offset, pinfo, tree, hf_x420_simple);
2296 }
2297
2298
2299 static const value_string x420_BodyPartSecurityLabel_vals[] = {
2300   {   0, "body-part-unlabelled" },
2301   {   1, "body-part-security-label" },
2302   { 0, NULL }
2303 };
2304
2305 static const ber_choice_t BodyPartSecurityLabel_choice[] = {
2306   {   0, BER_CLASS_CON, 0, 0, dissect_body_part_unlabelled_impl },
2307   {   1, BER_CLASS_CON, 1, 0, dissect_body_part_security_label_impl },
2308   { 0, 0, 0, 0, NULL }
2309 };
2310
2311 static int
2312 dissect_x420_BodyPartSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2313   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
2314                                  BodyPartSecurityLabel_choice, hf_index, ett_x420_BodyPartSecurityLabel,
2315                                  NULL);
2316
2317   return offset;
2318 }
2319 static int dissect_body_part_security_labels_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2320   return dissect_x420_BodyPartSecurityLabel(FALSE, tvb, offset, pinfo, tree, hf_x420_body_part_security_labels_item);
2321 }
2322
2323
2324 static const ber_sequence_t SEQUENCE_OF_BodyPartSecurityLabel_sequence_of[1] = {
2325   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_body_part_security_labels_item },
2326 };
2327
2328 static int
2329 dissect_x420_SEQUENCE_OF_BodyPartSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2330   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
2331                                       SEQUENCE_OF_BodyPartSecurityLabel_sequence_of, hf_index, ett_x420_SEQUENCE_OF_BodyPartSecurityLabel);
2332
2333   return offset;
2334 }
2335 static int dissect_body_part_security_labels_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2336   return dissect_x420_SEQUENCE_OF_BodyPartSecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_x420_body_part_security_labels);
2337 }
2338
2339
2340 static const ber_sequence_t IPMSecurityLabel_sequence[] = {
2341   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_content_security_label_impl },
2342   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_heading_security_label_impl },
2343   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_body_part_security_labels_impl },
2344   { 0, 0, 0, NULL }
2345 };
2346
2347 static int
2348 dissect_x420_IPMSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2349   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2350                                    IPMSecurityLabel_sequence, hf_index, ett_x420_IPMSecurityLabel);
2351
2352   return offset;
2353 }
2354
2355
2356
2357 static int
2358 dissect_x420_AuthorizationTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2359   offset = dissect_ber_GeneralizedTime(implicit_tag, pinfo, tree, tvb, offset, hf_index);
2360
2361   return offset;
2362 }
2363
2364
2365
2366 static int
2367 dissect_x420_CirculationTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2368   offset = dissect_ber_GeneralizedTime(implicit_tag, pinfo, tree, tvb, offset, hf_index);
2369
2370   return offset;
2371 }
2372 static int dissect_timestamped(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2373   return dissect_x420_CirculationTime(FALSE, tvb, offset, pinfo, tree, hf_x420_timestamped);
2374 }
2375 static int dissect_timestamp(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2376   return dissect_x420_CirculationTime(FALSE, tvb, offset, pinfo, tree, hf_x420_timestamp);
2377 }
2378
2379
2380
2381 static int
2382 dissect_x420_CirculationSignatureAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2383   offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
2384
2385   return offset;
2386 }
2387 static int dissect_circulation_signature_algorithm_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2388   return dissect_x420_CirculationSignatureAlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_circulation_signature_algorithm_identifier);
2389 }
2390
2391
2392 static const ber_sequence_t CirculationSignatureData_sequence[] = {
2393   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_circulation_signature_algorithm_identifier },
2394   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_this_IPM },
2395   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_timestamp },
2396   { 0, 0, 0, NULL }
2397 };
2398
2399 static int
2400 dissect_x420_CirculationSignatureData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2401   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2402                                    CirculationSignatureData_sequence, hf_index, ett_x420_CirculationSignatureData);
2403
2404   return offset;
2405 }
2406 static int dissect_circulation_signature_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2407   return dissect_x420_CirculationSignatureData(FALSE, tvb, offset, pinfo, tree, hf_x420_circulation_signature_data);
2408 }
2409
2410
2411 static const ber_sequence_t CirculationSignature_sequence[] = {
2412   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_circulation_signature_data },
2413   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithm_identifier },
2414   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
2415   { 0, 0, 0, NULL }
2416 };
2417
2418 static int
2419 dissect_x420_CirculationSignature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2420   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2421                                    CirculationSignature_sequence, hf_index, ett_x420_CirculationSignature);
2422
2423   return offset;
2424 }
2425 static int dissect_signed(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2426   return dissect_x420_CirculationSignature(FALSE, tvb, offset, pinfo, tree, hf_x420_signed);
2427 }
2428
2429
2430 static const value_string x420_Checkmark_vals[] = {
2431   {   0, "simple" },
2432   {   1, "timestamped" },
2433   {   2, "signed" },
2434   { 0, NULL }
2435 };
2436
2437 static const ber_choice_t Checkmark_choice[] = {
2438   {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_simple },
2439   {   1, BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_timestamped },
2440   {   2, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signed },
2441   { 0, 0, 0, 0, NULL }
2442 };
2443
2444 static int
2445 dissect_x420_Checkmark(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2446   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
2447                                  Checkmark_choice, hf_index, ett_x420_Checkmark,
2448                                  NULL);
2449
2450   return offset;
2451 }
2452 static int dissect_checked(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2453   return dissect_x420_Checkmark(FALSE, tvb, offset, pinfo, tree, hf_x420_checked);
2454 }
2455
2456
2457 static const ber_sequence_t CirculationMember_set[] = {
2458   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_circulation_recipient },
2459   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_checked },
2460   { 0, 0, 0, NULL }
2461 };
2462
2463 static int
2464 dissect_x420_CirculationMember(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2465   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
2466                               CirculationMember_set, hf_index, ett_x420_CirculationMember);
2467
2468   return offset;
2469 }
2470 static int dissect_CirculationList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2471   return dissect_x420_CirculationMember(FALSE, tvb, offset, pinfo, tree, hf_x420_CirculationList_item);
2472 }
2473
2474
2475 static const ber_sequence_t CirculationList_sequence_of[1] = {
2476   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_CirculationList_item },
2477 };
2478
2479 static int
2480 dissect_x420_CirculationList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2481   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
2482                                       CirculationList_sequence_of, hf_index, ett_x420_CirculationList);
2483
2484   return offset;
2485 }
2486
2487
2488
2489 static int
2490 dissect_x420_CirculationListIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2491   offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
2492
2493   return offset;
2494 }
2495
2496
2497
2498 static int
2499 dissect_x420_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2500   offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
2501
2502   return offset;
2503 }
2504 static int dissect_oid_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2505   return dissect_x420_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x420_oid_code);
2506 }
2507 static int dissect_reference_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2508   return dissect_x420_OBJECT_IDENTIFIER(TRUE, tvb, offset, pinfo, tree, hf_x420_reference);
2509 }
2510 static int dissect_voice_encoding_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2511   return dissect_x420_OBJECT_IDENTIFIER(TRUE, tvb, offset, pinfo, tree, hf_x420_voice_encoding_type);
2512 }
2513
2514
2515
2516 static int
2517 dissect_x420_AlphaCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2518   offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
2519
2520   return offset;
2521 }
2522 static int dissect_alphanumeric_code(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2523   return dissect_x420_AlphaCode(FALSE, tvb, offset, pinfo, tree, hf_x420_alphanumeric_code);
2524 }
2525
2526
2527 static const ber_sequence_t DistributionCode_sequence[] = {
2528   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_oid_code },
2529   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_alphanumeric_code },
2530   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_or_descriptor_impl },
2531   { 0, 0, 0, NULL }
2532 };
2533
2534 static int
2535 dissect_x420_DistributionCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2536   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2537                                    DistributionCode_sequence, hf_index, ett_x420_DistributionCode);
2538
2539   return offset;
2540 }
2541 static int dissect_DistributionCodes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2542   return dissect_x420_DistributionCode(FALSE, tvb, offset, pinfo, tree, hf_x420_DistributionCodes_item);
2543 }
2544
2545
2546 static const ber_sequence_t DistributionCodes_sequence_of[1] = {
2547   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DistributionCodes_item },
2548 };
2549
2550 static int
2551 dissect_x420_DistributionCodes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2552   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
2553                                       DistributionCodes_sequence_of, hf_index, ett_x420_DistributionCodes);
2554
2555   return offset;
2556 }
2557
2558
2559
2560 static int
2561 dissect_x420_ExtendedSubject(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2562   offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
2563
2564   return offset;
2565 }
2566
2567
2568
2569 static int
2570 dissect_x420_DescriptionString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2571   offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
2572
2573   return offset;
2574 }
2575 static int dissect_description_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2576   return dissect_x420_DescriptionString(TRUE, tvb, offset, pinfo, tree, hf_x420_description);
2577 }
2578
2579
2580 static const ber_sequence_t InformationCategory_sequence[] = {
2581   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reference_impl },
2582   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_description_impl },
2583   { 0, 0, 0, NULL }
2584 };
2585
2586 static int
2587 dissect_x420_InformationCategory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2588   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2589                                    InformationCategory_sequence, hf_index, ett_x420_InformationCategory);
2590
2591   return offset;
2592 }
2593 static int dissect_InformationCategories_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2594   return dissect_x420_InformationCategory(FALSE, tvb, offset, pinfo, tree, hf_x420_InformationCategories_item);
2595 }
2596
2597
2598 static const ber_sequence_t InformationCategories_sequence_of[1] = {
2599   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_InformationCategories_item },
2600 };
2601
2602 static int
2603 dissect_x420_InformationCategories(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2604   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
2605                                       InformationCategories_sequence_of, hf_index, ett_x420_InformationCategories);
2606
2607   return offset;
2608 }
2609
2610
2611
2612 static int
2613 dissect_x420_ManualHandlingInstruction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2614   offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
2615
2616   return offset;
2617 }
2618 static int dissect_ManualHandlingInstructions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2619   return dissect_x420_ManualHandlingInstruction(FALSE, tvb, offset, pinfo, tree, hf_x420_ManualHandlingInstructions_item);
2620 }
2621
2622
2623 static const ber_sequence_t ManualHandlingInstructions_sequence_of[1] = {
2624   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ManualHandlingInstructions_item },
2625 };
2626
2627 static int
2628 dissect_x420_ManualHandlingInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2629   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
2630                                       ManualHandlingInstructions_sequence_of, hf_index, ett_x420_ManualHandlingInstructions);
2631
2632   return offset;
2633 }
2634
2635
2636
2637 static int
2638 dissect_x420_OriginatorsReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2639   offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
2640
2641   return offset;
2642 }
2643
2644
2645
2646 static int
2647 dissect_x420_PrecedencePolicyIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2648   offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
2649
2650   return offset;
2651 }
2652
2653
2654
2655 static int
2656 dissect_x420_Precedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2657   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
2658                                   NULL);
2659
2660   return offset;
2661 }
2662
2663
2664
2665 static int
2666 dissect_x420_CharacterSetRegistration(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2667 #line 157 "x420.cnf"
2668   guint32 crs;
2669   proto_item *pi;
2670     offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
2671                                   &crs);
2672
2673
2674   if((pi = get_ber_last_created_item()))
2675     proto_item_append_text(pi, " (%s)", val_to_str(crs, charsetreg_vals, "unknown"));
2676
2677
2678
2679   return offset;
2680 }
2681 static int dissect_GeneralTextParameters_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2682   return dissect_x420_CharacterSetRegistration(FALSE, tvb, offset, pinfo, tree, hf_x420_GeneralTextParameters_item);
2683 }
2684
2685
2686 static const ber_sequence_t GeneralTextParameters_set_of[1] = {
2687   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_GeneralTextParameters_item },
2688 };
2689
2690 static int
2691 dissect_x420_GeneralTextParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2692   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
2693                                  GeneralTextParameters_set_of, hf_index, ett_x420_GeneralTextParameters);
2694
2695   return offset;
2696 }
2697
2698
2699
2700 static int
2701 dissect_x420_GeneralTextData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2702   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_GeneralString,
2703                                             pinfo, tree, tvb, offset, hf_index,
2704                                             NULL);
2705
2706   return offset;
2707 }
2708
2709
2710
2711 static int
2712 dissect_x420_IA5String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2713   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2714                                             pinfo, tree, tvb, offset, hf_index,
2715                                             NULL);
2716
2717   return offset;
2718 }
2719 static int dissect_supplementary_information_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2720   return dissect_x420_IA5String(TRUE, tvb, offset, pinfo, tree, hf_x420_supplementary_information);
2721 }
2722
2723
2724 static const ber_sequence_t VoiceParameters_sequence[] = {
2725   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voice_message_duration_impl },
2726   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_voice_encoding_type_impl },
2727   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supplementary_information_impl },
2728   { 0, 0, 0, NULL }
2729 };
2730
2731 static int
2732 dissect_x420_VoiceParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2733   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2734                                    VoiceParameters_sequence, hf_index, ett_x420_VoiceParameters);
2735
2736   return offset;
2737 }
2738
2739
2740
2741 static int
2742 dissect_x420_VoiceData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2743   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
2744                                        NULL);
2745
2746   return offset;
2747 }
2748
2749
2750 static const ber_sequence_t SubmissionProof_set[] = {
2751   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_proof_of_submission_impl },
2752   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_originating_MTA_certificate_impl },
2753   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_submission_envelope },
2754   { 0, 0, 0, NULL }
2755 };
2756
2757 static int
2758 dissect_x420_SubmissionProof(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2759   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
2760                               SubmissionProof_set, hf_index, ett_x420_SubmissionProof);
2761
2762   return offset;
2763 }
2764 static int dissect_submission_proof_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
2765   return dissect_x420_SubmissionProof(TRUE, tvb, offset, pinfo, tree, hf_x420_submission_proof);
2766 }
2767
2768
2769 static const ber_sequence_t ForwardedContentParameters_set[] = {
2770   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_time_impl },
2771   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_envelope_impl },
2772   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mts_identifier_impl },
2773   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_submission_proof_impl },
2774   { 0, 0, 0, NULL }
2775 };
2776
2777 static int
2778 dissect_x420_ForwardedContentParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
2779   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
2780                               ForwardedContentParameters_set, hf_index, ett_x420_ForwardedContentParameters);
2781
2782   return offset;
2783 }
2784
2785 /*--- PDUs ---*/
2786
2787 static void dissect_InformationObject_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2788   dissect_x420_InformationObject(FALSE, tvb, 0, pinfo, tree, hf_x420_InformationObject_PDU);
2789 }
2790 static void dissect_IA5TextParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2791   dissect_x420_IA5TextParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_IA5TextParameters_PDU);
2792 }
2793 static void dissect_IA5TextData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2794   dissect_x420_IA5TextData(FALSE, tvb, 0, pinfo, tree, hf_x420_IA5TextData_PDU);
2795 }
2796 static void dissect_G3FacsimileParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2797   dissect_x420_G3FacsimileParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_G3FacsimileParameters_PDU);
2798 }
2799 static void dissect_G3FacsimileData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2800   dissect_x420_G3FacsimileData(FALSE, tvb, 0, pinfo, tree, hf_x420_G3FacsimileData_PDU);
2801 }
2802 static void dissect_G4Class1Data_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2803   dissect_x420_G4Class1Data(FALSE, tvb, 0, pinfo, tree, hf_x420_G4Class1Data_PDU);
2804 }
2805 static void dissect_MixedModeData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2806   dissect_x420_MixedModeData(FALSE, tvb, 0, pinfo, tree, hf_x420_MixedModeData_PDU);
2807 }
2808 static void dissect_TeletexParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2809   dissect_x420_TeletexParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_TeletexParameters_PDU);
2810 }
2811 static void dissect_TeletexData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2812   dissect_x420_TeletexData(FALSE, tvb, 0, pinfo, tree, hf_x420_TeletexData_PDU);
2813 }
2814 static void dissect_VideotexParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2815   dissect_x420_VideotexParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_VideotexParameters_PDU);
2816 }
2817 static void dissect_VideotexData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2818   dissect_x420_VideotexData(FALSE, tvb, 0, pinfo, tree, hf_x420_VideotexData_PDU);
2819 }
2820 static void dissect_EncryptedParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2821   dissect_x420_EncryptedParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_EncryptedParameters_PDU);
2822 }
2823 static void dissect_EncryptedData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2824   dissect_x420_EncryptedData(FALSE, tvb, 0, pinfo, tree, hf_x420_EncryptedData_PDU);
2825 }
2826 static void dissect_MessageParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2827   dissect_x420_MessageParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_MessageParameters_PDU);
2828 }
2829 static void dissect_MessageData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2830   dissect_x420_MessageData(FALSE, tvb, 0, pinfo, tree, hf_x420_MessageData_PDU);
2831 }
2832 static void dissect_BilaterallyDefinedBodyPart_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2833   dissect_x420_BilaterallyDefinedBodyPart(FALSE, tvb, 0, pinfo, tree, hf_x420_BilaterallyDefinedBodyPart_PDU);
2834 }
2835 static void dissect_IPN_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2836   dissect_x420_IPN(FALSE, tvb, 0, pinfo, tree, hf_x420_IPN_PDU);
2837 }
2838 static void dissect_AbsenceAdvice_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2839   dissect_x420_AbsenceAdvice(FALSE, tvb, 0, pinfo, tree, hf_x420_AbsenceAdvice_PDU);
2840 }
2841 static void dissect_ChangeOfAddressAdvice_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2842   dissect_x420_ChangeOfAddressAdvice(FALSE, tvb, 0, pinfo, tree, hf_x420_ChangeOfAddressAdvice_PDU);
2843 }
2844 static void dissect_IPMAssemblyInstructions_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2845   dissect_x420_IPMAssemblyInstructions(FALSE, tvb, 0, pinfo, tree, hf_x420_IPMAssemblyInstructions_PDU);
2846 }
2847 static void dissect_OriginatingUA_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2848   dissect_x420_OriginatingUA(FALSE, tvb, 0, pinfo, tree, hf_x420_OriginatingUA_PDU);
2849 }
2850 static void dissect_IncompleteCopy_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2851   dissect_x420_IncompleteCopy(FALSE, tvb, 0, pinfo, tree, hf_x420_IncompleteCopy_PDU);
2852 }
2853 static void dissect_Languages_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2854   dissect_x420_Languages(FALSE, tvb, 0, pinfo, tree, hf_x420_Languages_PDU);
2855 }
2856 static void dissect_AutoSubmitted_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2857   dissect_x420_AutoSubmitted(FALSE, tvb, 0, pinfo, tree, hf_x420_AutoSubmitted_PDU);
2858 }
2859 static void dissect_BodyPartSignatures_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2860   dissect_x420_BodyPartSignatures(FALSE, tvb, 0, pinfo, tree, hf_x420_BodyPartSignatures_PDU);
2861 }
2862 static void dissect_IPMSecurityLabel_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2863   dissect_x420_IPMSecurityLabel(FALSE, tvb, 0, pinfo, tree, hf_x420_IPMSecurityLabel_PDU);
2864 }
2865 static void dissect_AuthorizationTime_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2866   dissect_x420_AuthorizationTime(FALSE, tvb, 0, pinfo, tree, hf_x420_AuthorizationTime_PDU);
2867 }
2868 static void dissect_CirculationList_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2869   dissect_x420_CirculationList(FALSE, tvb, 0, pinfo, tree, hf_x420_CirculationList_PDU);
2870 }
2871 static void dissect_CirculationListIndicator_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2872   dissect_x420_CirculationListIndicator(FALSE, tvb, 0, pinfo, tree, hf_x420_CirculationListIndicator_PDU);
2873 }
2874 static void dissect_DistributionCodes_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2875   dissect_x420_DistributionCodes(FALSE, tvb, 0, pinfo, tree, hf_x420_DistributionCodes_PDU);
2876 }
2877 static void dissect_ExtendedSubject_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2878   dissect_x420_ExtendedSubject(FALSE, tvb, 0, pinfo, tree, hf_x420_ExtendedSubject_PDU);
2879 }
2880 static void dissect_InformationCategories_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2881   dissect_x420_InformationCategories(FALSE, tvb, 0, pinfo, tree, hf_x420_InformationCategories_PDU);
2882 }
2883 static void dissect_ManualHandlingInstructions_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2884   dissect_x420_ManualHandlingInstructions(FALSE, tvb, 0, pinfo, tree, hf_x420_ManualHandlingInstructions_PDU);
2885 }
2886 static void dissect_OriginatorsReference_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2887   dissect_x420_OriginatorsReference(FALSE, tvb, 0, pinfo, tree, hf_x420_OriginatorsReference_PDU);
2888 }
2889 static void dissect_PrecedencePolicyIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2890   dissect_x420_PrecedencePolicyIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x420_PrecedencePolicyIdentifier_PDU);
2891 }
2892 static void dissect_Precedence_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2893   dissect_x420_Precedence(FALSE, tvb, 0, pinfo, tree, hf_x420_Precedence_PDU);
2894 }
2895 static void dissect_GeneralTextParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2896   dissect_x420_GeneralTextParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_GeneralTextParameters_PDU);
2897 }
2898 static void dissect_GeneralTextData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2899   dissect_x420_GeneralTextData(FALSE, tvb, 0, pinfo, tree, hf_x420_GeneralTextData_PDU);
2900 }
2901 static void dissect_VoiceParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2902   dissect_x420_VoiceParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_VoiceParameters_PDU);
2903 }
2904 static void dissect_VoiceData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2905   dissect_x420_VoiceData(FALSE, tvb, 0, pinfo, tree, hf_x420_VoiceData_PDU);
2906 }
2907 static void dissect_ForwardedContentParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2908   dissect_x420_ForwardedContentParameters(FALSE, tvb, 0, pinfo, tree, hf_x420_ForwardedContentParameters_PDU);
2909 }
2910
2911
2912 /*--- End of included file: packet-x420-fn.c ---*/
2913 #line 92 "packet-x420-template.c"
2914
2915 /*
2916 * Dissect X420 PDUs inside a PPDU.
2917 */
2918 static void
2919 dissect_x420(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
2920 {
2921         int offset = 0;
2922         proto_item *item=NULL;
2923         proto_tree *tree=NULL;
2924
2925         if(parent_tree){
2926                 item = proto_tree_add_item(parent_tree, proto_x420, tvb, 0, -1, FALSE);
2927                 tree = proto_item_add_subtree(item, ett_x420);
2928         }
2929
2930         if (check_col(pinfo->cinfo, COL_PROTOCOL))
2931                 col_set_str(pinfo->cinfo, COL_PROTOCOL, "P22");
2932         if (check_col(pinfo->cinfo, COL_INFO))
2933           col_add_str(pinfo->cinfo, COL_INFO, "InterPersonal");
2934
2935         dissect_x420_InformationObject(TRUE, tvb, offset, pinfo , tree, -1);
2936 }
2937
2938
2939 /*--- proto_register_x420 -------------------------------------------*/
2940 void proto_register_x420(void) {
2941
2942   /* List of fields */
2943   static hf_register_info hf[] =
2944   {
2945
2946 /*--- Included file: packet-x420-hfarr.c ---*/
2947 #line 1 "packet-x420-hfarr.c"
2948     { &hf_x420_InformationObject_PDU,
2949       { "InformationObject", "x420.InformationObject",
2950         FT_UINT32, BASE_DEC, VALS(x420_InformationObject_vals), 0,
2951         "InformationObject", HFILL }},
2952     { &hf_x420_IA5TextParameters_PDU,
2953       { "IA5TextParameters", "x420.IA5TextParameters",
2954         FT_NONE, BASE_NONE, NULL, 0,
2955         "IA5TextParameters", HFILL }},
2956     { &hf_x420_IA5TextData_PDU,
2957       { "IA5TextData", "x420.IA5TextData",
2958         FT_STRING, BASE_NONE, NULL, 0,
2959         "IA5TextData", HFILL }},
2960     { &hf_x420_G3FacsimileParameters_PDU,
2961       { "G3FacsimileParameters", "x420.G3FacsimileParameters",
2962         FT_NONE, BASE_NONE, NULL, 0,
2963         "G3FacsimileParameters", HFILL }},
2964     { &hf_x420_G3FacsimileData_PDU,
2965       { "G3FacsimileData", "x420.G3FacsimileData",
2966         FT_UINT32, BASE_DEC, NULL, 0,
2967         "G3FacsimileData", HFILL }},
2968     { &hf_x420_G4Class1Data_PDU,
2969       { "G4Class1Data", "x420.G4Class1Data",
2970         FT_UINT32, BASE_DEC, NULL, 0,
2971         "G4Class1Data", HFILL }},
2972     { &hf_x420_MixedModeData_PDU,
2973       { "MixedModeData", "x420.MixedModeData",
2974         FT_UINT32, BASE_DEC, NULL, 0,
2975         "MixedModeData", HFILL }},
2976     { &hf_x420_TeletexParameters_PDU,
2977       { "TeletexParameters", "x420.TeletexParameters",
2978         FT_NONE, BASE_NONE, NULL, 0,
2979         "TeletexParameters", HFILL }},
2980     { &hf_x420_TeletexData_PDU,
2981       { "TeletexData", "x420.TeletexData",
2982         FT_UINT32, BASE_DEC, NULL, 0,
2983         "TeletexData", HFILL }},
2984     { &hf_x420_VideotexParameters_PDU,
2985       { "VideotexParameters", "x420.VideotexParameters",
2986         FT_NONE, BASE_NONE, NULL, 0,
2987         "VideotexParameters", HFILL }},
2988     { &hf_x420_VideotexData_PDU,
2989       { "VideotexData", "x420.VideotexData",
2990         FT_STRING, BASE_NONE, NULL, 0,
2991         "VideotexData", HFILL }},
2992     { &hf_x420_EncryptedParameters_PDU,
2993       { "EncryptedParameters", "x420.EncryptedParameters",
2994         FT_NONE, BASE_NONE, NULL, 0,
2995         "EncryptedParameters", HFILL }},
2996     { &hf_x420_EncryptedData_PDU,
2997       { "EncryptedData", "x420.EncryptedData",
2998         FT_BYTES, BASE_HEX, NULL, 0,
2999         "EncryptedData", HFILL }},
3000     { &hf_x420_MessageParameters_PDU,
3001       { "MessageParameters", "x420.MessageParameters",
3002         FT_NONE, BASE_NONE, NULL, 0,
3003         "MessageParameters", HFILL }},
3004     { &hf_x420_MessageData_PDU,
3005       { "MessageData", "x420.MessageData",
3006         FT_NONE, BASE_NONE, NULL, 0,
3007         "MessageData", HFILL }},
3008     { &hf_x420_BilaterallyDefinedBodyPart_PDU,
3009       { "BilaterallyDefinedBodyPart", "x420.BilaterallyDefinedBodyPart",
3010         FT_BYTES, BASE_HEX, NULL, 0,
3011         "BilaterallyDefinedBodyPart", HFILL }},
3012     { &hf_x420_IPN_PDU,
3013       { "IPN", "x420.IPN",
3014         FT_NONE, BASE_NONE, NULL, 0,
3015         "IPN", HFILL }},
3016     { &hf_x420_AbsenceAdvice_PDU,
3017       { "AbsenceAdvice", "x420.AbsenceAdvice",
3018         FT_NONE, BASE_NONE, NULL, 0,
3019         "AbsenceAdvice", HFILL }},
3020     { &hf_x420_ChangeOfAddressAdvice_PDU,
3021       { "ChangeOfAddressAdvice", "x420.ChangeOfAddressAdvice",
3022         FT_NONE, BASE_NONE, NULL, 0,
3023         "ChangeOfAddressAdvice", HFILL }},
3024     { &hf_x420_IPMAssemblyInstructions_PDU,
3025       { "IPMAssemblyInstructions", "x420.IPMAssemblyInstructions",
3026         FT_NONE, BASE_NONE, NULL, 0,
3027         "IPMAssemblyInstructions", HFILL }},
3028     { &hf_x420_OriginatingUA_PDU,
3029       { "OriginatingUA", "x420.OriginatingUA",
3030         FT_STRING, BASE_NONE, NULL, 0,
3031         "OriginatingUA", HFILL }},
3032     { &hf_x420_IncompleteCopy_PDU,
3033       { "IncompleteCopy", "x420.IncompleteCopy",
3034         FT_NONE, BASE_NONE, NULL, 0,
3035         "IncompleteCopy", HFILL }},
3036     { &hf_x420_Languages_PDU,
3037       { "Languages", "x420.Languages",
3038         FT_UINT32, BASE_DEC, NULL, 0,
3039         "Languages", HFILL }},
3040     { &hf_x420_AutoSubmitted_PDU,
3041       { "AutoSubmitted", "x420.AutoSubmitted",
3042         FT_UINT32, BASE_DEC, VALS(x420_AutoSubmitted_vals), 0,
3043         "AutoSubmitted", HFILL }},
3044     { &hf_x420_BodyPartSignatures_PDU,
3045       { "BodyPartSignatures", "x420.BodyPartSignatures",
3046         FT_UINT32, BASE_DEC, NULL, 0,
3047         "BodyPartSignatures", HFILL }},
3048     { &hf_x420_IPMSecurityLabel_PDU,
3049       { "IPMSecurityLabel", "x420.IPMSecurityLabel",
3050         FT_NONE, BASE_NONE, NULL, 0,
3051         "IPMSecurityLabel", HFILL }},
3052     { &hf_x420_AuthorizationTime_PDU,
3053       { "AuthorizationTime", "x420.AuthorizationTime",
3054         FT_STRING, BASE_NONE, NULL, 0,
3055         "AuthorizationTime", HFILL }},
3056     { &hf_x420_CirculationList_PDU,
3057       { "CirculationList", "x420.CirculationList",
3058         FT_UINT32, BASE_DEC, NULL, 0,
3059         "CirculationList", HFILL }},
3060     { &hf_x420_CirculationListIndicator_PDU,
3061       { "CirculationListIndicator", "x420.CirculationListIndicator",
3062         FT_NONE, BASE_NONE, NULL, 0,
3063         "CirculationListIndicator", HFILL }},
3064     { &hf_x420_DistributionCodes_PDU,
3065       { "DistributionCodes", "x420.DistributionCodes",
3066         FT_UINT32, BASE_DEC, NULL, 0,
3067         "DistributionCodes", HFILL }},
3068     { &hf_x420_ExtendedSubject_PDU,
3069       { "ExtendedSubject", "x420.ExtendedSubject",
3070         FT_NONE, BASE_NONE, NULL, 0,
3071         "ExtendedSubject", HFILL }},
3072     { &hf_x420_InformationCategories_PDU,
3073       { "InformationCategories", "x420.InformationCategories",
3074         FT_UINT32, BASE_DEC, NULL, 0,
3075         "InformationCategories", HFILL }},
3076     { &hf_x420_ManualHandlingInstructions_PDU,
3077       { "ManualHandlingInstructions", "x420.ManualHandlingInstructions",
3078         FT_UINT32, BASE_DEC, NULL, 0,
3079         "ManualHandlingInstructions", HFILL }},
3080     { &hf_x420_OriginatorsReference_PDU,
3081       { "OriginatorsReference", "x420.OriginatorsReference",
3082         FT_NONE, BASE_NONE, NULL, 0,
3083         "OriginatorsReference", HFILL }},
3084     { &hf_x420_PrecedencePolicyIdentifier_PDU,
3085       { "PrecedencePolicyIdentifier", "x420.PrecedencePolicyIdentifier",
3086         FT_OID, BASE_NONE, NULL, 0,
3087         "PrecedencePolicyIdentifier", HFILL }},
3088     { &hf_x420_Precedence_PDU,
3089       { "Precedence", "x420.Precedence",
3090         FT_UINT32, BASE_DEC, NULL, 0,
3091         "Precedence", HFILL }},
3092     { &hf_x420_GeneralTextParameters_PDU,
3093       { "GeneralTextParameters", "x420.GeneralTextParameters",
3094         FT_UINT32, BASE_DEC, NULL, 0,
3095         "GeneralTextParameters", HFILL }},
3096     { &hf_x420_GeneralTextData_PDU,
3097       { "GeneralTextData", "x420.GeneralTextData",
3098         FT_STRING, BASE_NONE, NULL, 0,
3099         "GeneralTextData", HFILL }},
3100     { &hf_x420_VoiceParameters_PDU,
3101       { "VoiceParameters", "x420.VoiceParameters",
3102         FT_NONE, BASE_NONE, NULL, 0,
3103         "VoiceParameters", HFILL }},
3104     { &hf_x420_VoiceData_PDU,
3105       { "VoiceData", "x420.VoiceData",
3106         FT_BYTES, BASE_HEX, NULL, 0,
3107         "VoiceData", HFILL }},
3108     { &hf_x420_ForwardedContentParameters_PDU,
3109       { "ForwardedContentParameters", "x420.ForwardedContentParameters",
3110         FT_NONE, BASE_NONE, NULL, 0,
3111         "ForwardedContentParameters", HFILL }},
3112     { &hf_x420_ipm,
3113       { "ipm", "x420.ipm",
3114         FT_NONE, BASE_NONE, NULL, 0,
3115         "InformationObject/ipm", HFILL }},
3116     { &hf_x420_ipn,
3117       { "ipn", "x420.ipn",
3118         FT_NONE, BASE_NONE, NULL, 0,
3119         "InformationObject/ipn", HFILL }},
3120     { &hf_x420_heading,
3121       { "heading", "x420.heading",
3122         FT_NONE, BASE_NONE, NULL, 0,
3123         "IPM/heading", HFILL }},
3124     { &hf_x420_body,
3125       { "body", "x420.body",
3126         FT_UINT32, BASE_DEC, NULL, 0,
3127         "IPM/body", HFILL }},
3128     { &hf_x420_type,
3129       { "type", "x420.type",
3130         FT_OID, BASE_NONE, NULL, 0,
3131         "IPMSExtension/type", HFILL }},
3132     { &hf_x420_value,
3133       { "value", "x420.value",
3134         FT_NONE, BASE_NONE, NULL, 0,
3135         "IPMSExtension/value", HFILL }},
3136     { &hf_x420_this_IPM,
3137       { "this-IPM", "x420.this_IPM",
3138         FT_NONE, BASE_NONE, NULL, 0,
3139         "", HFILL }},
3140     { &hf_x420_originator,
3141       { "originator", "x420.originator",
3142         FT_NONE, BASE_NONE, NULL, 0,
3143         "Heading/originator", HFILL }},
3144     { &hf_x420_authorizing_users,
3145       { "authorizing-users", "x420.authorizing_users",
3146         FT_UINT32, BASE_DEC, NULL, 0,
3147         "Heading/authorizing-users", HFILL }},
3148     { &hf_x420_primary_recipients,
3149       { "primary-recipients", "x420.primary_recipients",
3150         FT_UINT32, BASE_DEC, NULL, 0,
3151         "Heading/primary-recipients", HFILL }},
3152     { &hf_x420_copy_recipients,
3153       { "copy-recipients", "x420.copy_recipients",
3154         FT_UINT32, BASE_DEC, NULL, 0,
3155         "Heading/copy-recipients", HFILL }},
3156     { &hf_x420_blind_copy_recipients,
3157       { "blind-copy-recipients", "x420.blind_copy_recipients",
3158         FT_UINT32, BASE_DEC, NULL, 0,
3159         "Heading/blind-copy-recipients", HFILL }},
3160     { &hf_x420_replied_to_IPM,
3161       { "replied-to-IPM", "x420.replied_to_IPM",
3162         FT_NONE, BASE_NONE, NULL, 0,
3163         "Heading/replied-to-IPM", HFILL }},
3164     { &hf_x420_obsoleted_IPMs,
3165       { "obsoleted-IPMs", "x420.obsoleted_IPMs",
3166         FT_UINT32, BASE_DEC, NULL, 0,
3167         "Heading/obsoleted-IPMs", HFILL }},
3168     { &hf_x420_related_IPMs,
3169       { "related-IPMs", "x420.related_IPMs",
3170         FT_UINT32, BASE_DEC, NULL, 0,
3171         "Heading/related-IPMs", HFILL }},
3172     { &hf_x420_subject,
3173       { "subject", "x420.subject",
3174         FT_STRING, BASE_NONE, NULL, 0,
3175         "Heading/subject", HFILL }},
3176     { &hf_x420_expiry_time,
3177       { "expiry-time", "x420.expiry_time",
3178         FT_STRING, BASE_NONE, NULL, 0,
3179         "Heading/expiry-time", HFILL }},
3180     { &hf_x420_reply_time,
3181       { "reply-time", "x420.reply_time",
3182         FT_STRING, BASE_NONE, NULL, 0,
3183         "Heading/reply-time", HFILL }},
3184     { &hf_x420_reply_recipients,
3185       { "reply-recipients", "x420.reply_recipients",
3186         FT_UINT32, BASE_DEC, NULL, 0,
3187         "Heading/reply-recipients", HFILL }},
3188     { &hf_x420_importance,
3189       { "importance", "x420.importance",
3190         FT_UINT32, BASE_DEC, VALS(x420_ImportanceField_vals), 0,
3191         "Heading/importance", HFILL }},
3192     { &hf_x420_sensitivity,
3193       { "sensitivity", "x420.sensitivity",
3194         FT_UINT32, BASE_DEC, VALS(x420_SensitivityField_vals), 0,
3195         "Heading/sensitivity", HFILL }},
3196     { &hf_x420_auto_forwarded,
3197       { "auto-forwarded", "x420.auto_forwarded",
3198         FT_BOOLEAN, 8, NULL, 0,
3199         "Heading/auto-forwarded", HFILL }},
3200     { &hf_x420_extensions,
3201       { "extensions", "x420.extensions",
3202         FT_UINT32, BASE_DEC, NULL, 0,
3203         "Heading/extensions", HFILL }},
3204     { &hf_x420_user,
3205       { "user", "x420.user",
3206         FT_NONE, BASE_NONE, NULL, 0,
3207         "IPMIdentifier/user", HFILL }},
3208     { &hf_x420_user_relative_identifier,
3209       { "user-relative-identifier", "x420.user_relative_identifier",
3210         FT_STRING, BASE_NONE, NULL, 0,
3211         "IPMIdentifier/user-relative-identifier", HFILL }},
3212     { &hf_x420_recipient,
3213       { "recipient", "x420.recipient",
3214         FT_NONE, BASE_NONE, NULL, 0,
3215         "RecipientSpecifier/recipient", HFILL }},
3216     { &hf_x420_notification_requests,
3217       { "notification-requests", "x420.notification_requests",
3218         FT_BYTES, BASE_HEX, NULL, 0,
3219         "RecipientSpecifier/notification-requests", HFILL }},
3220     { &hf_x420_reply_requested,
3221       { "reply-requested", "x420.reply_requested",
3222         FT_BOOLEAN, 8, NULL, 0,
3223         "RecipientSpecifier/reply-requested", HFILL }},
3224     { &hf_x420_recipient_extensions,
3225       { "recipient-extensions", "x420.recipient_extensions",
3226         FT_UINT32, BASE_DEC, NULL, 0,
3227         "RecipientSpecifier/recipient-extensions", HFILL }},
3228     { &hf_x420_formal_name,
3229       { "formal-name", "x420.formal_name",
3230         FT_NONE, BASE_NONE, NULL, 0,
3231         "ORDescriptor/formal-name", HFILL }},
3232     { &hf_x420_free_form_name,
3233       { "free-form-name", "x420.free_form_name",
3234         FT_STRING, BASE_NONE, NULL, 0,
3235         "ORDescriptor/free-form-name", HFILL }},
3236     { &hf_x420_telephone_number,
3237       { "telephone-number", "x420.telephone_number",
3238         FT_STRING, BASE_NONE, NULL, 0,
3239         "ORDescriptor/telephone-number", HFILL }},
3240     { &hf_x420_RecipientExtensionsField_item,
3241       { "Item", "x420.RecipientExtensionsField_item",
3242         FT_NONE, BASE_NONE, NULL, 0,
3243         "RecipientExtensionsField/_item", HFILL }},
3244     { &hf_x420_AuthorizingUsersField_item,
3245       { "Item", "x420.AuthorizingUsersField_item",
3246         FT_NONE, BASE_NONE, NULL, 0,
3247         "AuthorizingUsersField/_item", HFILL }},
3248     { &hf_x420_PrimaryRecipientsField_item,
3249       { "Item", "x420.PrimaryRecipientsField_item",
3250         FT_NONE, BASE_NONE, NULL, 0,
3251         "PrimaryRecipientsField/_item", HFILL }},
3252     { &hf_x420_CopyRecipientsField_item,
3253       { "Item", "x420.CopyRecipientsField_item",
3254         FT_NONE, BASE_NONE, NULL, 0,
3255         "CopyRecipientsField/_item", HFILL }},
3256     { &hf_x420_BlindCopyRecipientsField_item,
3257       { "Item", "x420.BlindCopyRecipientsField_item",
3258         FT_NONE, BASE_NONE, NULL, 0,
3259         "BlindCopyRecipientsField/_item", HFILL }},
3260     { &hf_x420_ObsoletedIPMsField_item,
3261       { "Item", "x420.ObsoletedIPMsField_item",
3262         FT_NONE, BASE_NONE, NULL, 0,
3263         "ObsoletedIPMsField/_item", HFILL }},
3264     { &hf_x420_RelatedIPMsField_item,
3265       { "Item", "x420.RelatedIPMsField_item",
3266         FT_NONE, BASE_NONE, NULL, 0,
3267         "RelatedIPMsField/_item", HFILL }},
3268     { &hf_x420_ReplyRecipientsField_item,
3269       { "Item", "x420.ReplyRecipientsField_item",
3270         FT_NONE, BASE_NONE, NULL, 0,
3271         "ReplyRecipientsField/_item", HFILL }},
3272     { &hf_x420_ExtensionsField_item,
3273       { "Item", "x420.ExtensionsField_item",
3274         FT_NONE, BASE_NONE, NULL, 0,
3275         "ExtensionsField/_item", HFILL }},
3276     { &hf_x420_Body_item,
3277       { "Item", "x420.Body_item",
3278         FT_UINT32, BASE_DEC, VALS(x420_BodyPart_vals), 0,
3279         "Body/_item", HFILL }},
3280     { &hf_x420_ia5_text,
3281       { "ia5-text", "x420.ia5_text",
3282         FT_NONE, BASE_NONE, NULL, 0,
3283         "BodyPart/ia5-text", HFILL }},
3284     { &hf_x420_g3_facsimile,
3285       { "g3-facsimile", "x420.g3_facsimile",
3286         FT_NONE, BASE_NONE, NULL, 0,
3287         "BodyPart/g3-facsimile", HFILL }},
3288     { &hf_x420_g4_class1,
3289       { "g4-class1", "x420.g4_class1",
3290         FT_UINT32, BASE_DEC, NULL, 0,
3291         "BodyPart/g4-class1", HFILL }},
3292     { &hf_x420_teletex,
3293       { "teletex", "x420.teletex",
3294         FT_NONE, BASE_NONE, NULL, 0,
3295         "BodyPart/teletex", HFILL }},
3296     { &hf_x420_videotex,
3297       { "videotex", "x420.videotex",
3298         FT_NONE, BASE_NONE, NULL, 0,
3299         "BodyPart/videotex", HFILL }},
3300     { &hf_x420_encrypted_bp,
3301       { "encrypted", "x420.encrypted",
3302         FT_NONE, BASE_NONE, NULL, 0,
3303         "BodyPart/encrypted", HFILL }},
3304     { &hf_x420_message,
3305       { "message", "x420.message",
3306         FT_NONE, BASE_NONE, NULL, 0,
3307         "BodyPart/message", HFILL }},
3308     { &hf_x420_mixed_mode,
3309       { "mixed-mode", "x420.mixed_mode",
3310         FT_UINT32, BASE_DEC, NULL, 0,
3311         "BodyPart/mixed-mode", HFILL }},
3312     { &hf_x420_bilaterally_defined,
3313       { "bilaterally-defined", "x420.bilaterally_defined",
3314         FT_BYTES, BASE_HEX, NULL, 0,
3315         "BodyPart/bilaterally-defined", HFILL }},
3316     { &hf_x420_nationally_defined,
3317       { "nationally-defined", "x420.nationally_defined",
3318         FT_NONE, BASE_NONE, NULL, 0,
3319         "BodyPart/nationally-defined", HFILL }},
3320     { &hf_x420_extended,
3321       { "extended", "x420.extended",
3322         FT_NONE, BASE_NONE, NULL, 0,
3323         "BodyPart/extended", HFILL }},
3324     { &hf_x420_extended_parameters,
3325       { "parameters", "x420.parameters",
3326         FT_NONE, BASE_NONE, NULL, 0,
3327         "ExtendedBodyPart/parameters", HFILL }},
3328     { &hf_x420_extended_data,
3329       { "data", "x420.data",
3330         FT_NONE, BASE_NONE, NULL, 0,
3331         "ExtendedBodyPart/data", HFILL }},
3332     { &hf_x420_ia5text_parameters,
3333       { "parameters", "x420.parameters",
3334         FT_NONE, BASE_NONE, NULL, 0,
3335         "IA5TextBodyPart/parameters", HFILL }},
3336     { &hf_x420_ia5text_data,
3337       { "data", "x420.data",
3338         FT_STRING, BASE_NONE, NULL, 0,
3339         "IA5TextBodyPart/data", HFILL }},
3340     { &hf_x420_repertoire,
3341       { "repertoire", "x420.repertoire",
3342         FT_UINT32, BASE_DEC, VALS(x420_Repertoire_vals), 0,
3343         "IA5TextParameters/repertoire", HFILL }},
3344     { &hf_x420_g3facsimile_parameters,
3345       { "parameters", "x420.parameters",
3346         FT_NONE, BASE_NONE, NULL, 0,
3347         "G3FacsimileBodyPart/parameters", HFILL }},
3348     { &hf_x420_g3facsimile_data,
3349       { "data", "x420.data",
3350         FT_UINT32, BASE_DEC, NULL, 0,
3351         "G3FacsimileBodyPart/data", HFILL }},
3352     { &hf_x420_number_of_pages,
3353       { "number-of-pages", "x420.number_of_pages",
3354         FT_INT32, BASE_DEC, NULL, 0,
3355         "", HFILL }},
3356     { &hf_x420_g3facsimile_non_basic_parameters,
3357       { "non-basic-parameters", "x420.non_basic_parameters",
3358         FT_BYTES, BASE_HEX, NULL, 0,
3359         "G3FacsimileParameters/non-basic-parameters", HFILL }},
3360     { &hf_x420_G3FacsimileData_item,
3361       { "Item", "x420.G3FacsimileData_item",
3362         FT_BYTES, BASE_HEX, NULL, 0,
3363         "G3FacsimileData/_item", HFILL }},
3364     { &hf_x420_G4Class1Data_item,
3365       { "Item", "x420.G4Class1Data_item",
3366         FT_NONE, BASE_NONE, NULL, 0,
3367         "G4Class1Data/_item", HFILL }},
3368     { &hf_x420_MixedModeData_item,
3369       { "Item", "x420.MixedModeData_item",
3370         FT_NONE, BASE_NONE, NULL, 0,
3371         "MixedModeData/_item", HFILL }},
3372     { &hf_x420_teletex_parameters,
3373       { "parameters", "x420.parameters",
3374         FT_NONE, BASE_NONE, NULL, 0,
3375         "TeletexBodyPart/parameters", HFILL }},
3376     { &hf_x420_teletex_data,
3377       { "data", "x420.data",
3378         FT_UINT32, BASE_DEC, NULL, 0,
3379         "TeletexBodyPart/data", HFILL }},
3380     { &hf_x420_telex_compatible,
3381       { "telex-compatible", "x420.telex_compatible",
3382         FT_BOOLEAN, 8, NULL, 0,
3383         "TeletexParameters/telex-compatible", HFILL }},
3384     { &hf_x420_teletex_non_basic_parameters,
3385       { "non-basic-parameters", "x420.non_basic_parameters",
3386         FT_NONE, BASE_NONE, NULL, 0,
3387         "TeletexParameters/non-basic-parameters", HFILL }},
3388     { &hf_x420_TeletexData_item,
3389       { "Item", "x420.TeletexData_item",
3390         FT_STRING, BASE_NONE, NULL, 0,
3391         "TeletexData/_item", HFILL }},
3392     { &hf_x420_videotex_parameters,
3393       { "parameters", "x420.parameters",
3394         FT_NONE, BASE_NONE, NULL, 0,
3395         "VideotexBodyPart/parameters", HFILL }},
3396     { &hf_x420_videotex_data,
3397       { "data", "x420.data",
3398         FT_STRING, BASE_NONE, NULL, 0,
3399         "VideotexBodyPart/data", HFILL }},
3400     { &hf_x420_syntax,
3401       { "syntax", "x420.syntax",
3402         FT_INT32, BASE_DEC, VALS(x420_VideotexSyntax_vals), 0,
3403         "VideotexParameters/syntax", HFILL }},
3404     { &hf_x420_encrypted_parameters,
3405       { "parameters", "x420.parameters",
3406         FT_NONE, BASE_NONE, NULL, 0,
3407         "EncryptedBodyPart/parameters", HFILL }},
3408     { &hf_x420_encrypted_data,
3409       { "data", "x420.data",
3410         FT_BYTES, BASE_HEX, NULL, 0,
3411         "EncryptedBodyPart/data", HFILL }},
3412     { &hf_x420_algorithm_identifier,
3413       { "algorithm-identifier", "x420.algorithm_identifier",
3414         FT_NONE, BASE_NONE, NULL, 0,
3415         "", HFILL }},
3416     { &hf_x420_originator_certificates,
3417       { "originator-certificates", "x420.originator_certificates",
3418         FT_UINT32, BASE_DEC, NULL, 0,
3419         "", HFILL }},
3420     { &hf_x420_message_parameters,
3421       { "parameters", "x420.parameters",
3422         FT_NONE, BASE_NONE, NULL, 0,
3423         "MessageBodyPart/parameters", HFILL }},
3424     { &hf_x420_message_data,
3425       { "data", "x420.data",
3426         FT_NONE, BASE_NONE, NULL, 0,
3427         "MessageBodyPart/data", HFILL }},
3428     { &hf_x420_delivery_time,
3429       { "delivery-time", "x420.delivery_time",
3430         FT_STRING, BASE_NONE, NULL, 0,
3431         "", HFILL }},
3432     { &hf_x420_delivery_envelope,
3433       { "delivery-envelope", "x420.delivery_envelope",
3434         FT_NONE, BASE_NONE, NULL, 0,
3435         "", HFILL }},
3436     { &hf_x420_subject_ipm,
3437       { "subject-ipm", "x420.subject_ipm",
3438         FT_NONE, BASE_NONE, NULL, 0,
3439         "IPN/subject-ipm", HFILL }},
3440     { &hf_x420_ipn_originator,
3441       { "ipn-originator", "x420.ipn_originator",
3442         FT_NONE, BASE_NONE, NULL, 0,
3443         "IPN/ipn-originator", HFILL }},
3444     { &hf_x420_ipm_intended_recipient,
3445       { "ipm-intended-recipient", "x420.ipm_intended_recipient",
3446         FT_NONE, BASE_NONE, NULL, 0,
3447         "IPN/ipm-intended-recipient", HFILL }},
3448     { &hf_x420_conversion_eits,
3449       { "conversion-eits", "x420.conversion_eits",
3450         FT_NONE, BASE_NONE, NULL, 0,
3451         "IPN/conversion-eits", HFILL }},
3452     { &hf_x420_notification_extensions,
3453       { "notification-extensions", "x420.notification_extensions",
3454         FT_UINT32, BASE_DEC, NULL, 0,
3455         "IPN/notification-extensions", HFILL }},
3456     { &hf_x420_choice,
3457       { "choice", "x420.choice",
3458         FT_UINT32, BASE_DEC, VALS(x420_T_choice_vals), 0,
3459         "IPN/choice", HFILL }},
3460     { &hf_x420_non_receipt_fields,
3461       { "non-receipt-fields", "x420.non_receipt_fields",
3462         FT_NONE, BASE_NONE, NULL, 0,
3463         "IPN/choice/non-receipt-fields", HFILL }},
3464     { &hf_x420_receipt_fields,
3465       { "receipt-fields", "x420.receipt_fields",
3466         FT_NONE, BASE_NONE, NULL, 0,
3467         "IPN/choice/receipt-fields", HFILL }},
3468     { &hf_x420_other_notification_type_fields,
3469       { "other-notification-type-fields", "x420.other_notification_type_fields",
3470         FT_UINT32, BASE_DEC, NULL, 0,
3471         "IPN/choice/other-notification-type-fields", HFILL }},
3472     { &hf_x420_non_receipt_reason,
3473       { "non-receipt-reason", "x420.non_receipt_reason",
3474         FT_UINT32, BASE_DEC, VALS(x420_NonReceiptReasonField_vals), 0,
3475         "NonReceiptFields/non-receipt-reason", HFILL }},
3476     { &hf_x420_discard_reason,
3477       { "discard-reason", "x420.discard_reason",
3478         FT_UINT32, BASE_DEC, VALS(x420_DiscardReasonField_vals), 0,
3479         "NonReceiptFields/discard-reason", HFILL }},
3480     { &hf_x420_auto_forward_comment,
3481       { "auto-forward-comment", "x420.auto_forward_comment",
3482         FT_STRING, BASE_NONE, NULL, 0,
3483         "NonReceiptFields/auto-forward-comment", HFILL }},
3484     { &hf_x420_returned_ipm,
3485       { "returned-ipm", "x420.returned_ipm",
3486         FT_NONE, BASE_NONE, NULL, 0,
3487         "NonReceiptFields/returned-ipm", HFILL }},
3488     { &hf_x420_nrn_extensions,
3489       { "nrn-extensions", "x420.nrn_extensions",
3490         FT_UINT32, BASE_DEC, NULL, 0,
3491         "NonReceiptFields/nrn-extensions", HFILL }},
3492     { &hf_x420_receipt_time,
3493       { "receipt-time", "x420.receipt_time",
3494         FT_STRING, BASE_NONE, NULL, 0,
3495         "ReceiptFields/receipt-time", HFILL }},
3496     { &hf_x420_acknowledgment_mode,
3497       { "acknowledgment-mode", "x420.acknowledgment_mode",
3498         FT_UINT32, BASE_DEC, VALS(x420_AcknowledgmentModeField_vals), 0,
3499         "ReceiptFields/acknowledgment-mode", HFILL }},
3500     { &hf_x420_suppl_receipt_info,
3501       { "suppl-receipt-info", "x420.suppl_receipt_info",
3502         FT_STRING, BASE_NONE, NULL, 0,
3503         "ReceiptFields/suppl-receipt-info", HFILL }},
3504     { &hf_x420_rn_extensions,
3505       { "rn-extensions", "x420.rn_extensions",
3506         FT_UINT32, BASE_DEC, NULL, 0,
3507         "ReceiptFields/rn-extensions", HFILL }},
3508     { &hf_x420_NotificationExtensionsField_item,
3509       { "Item", "x420.NotificationExtensionsField_item",
3510         FT_NONE, BASE_NONE, NULL, 0,
3511         "NotificationExtensionsField/_item", HFILL }},
3512     { &hf_x420_NRNExtensionsField_item,
3513       { "Item", "x420.NRNExtensionsField_item",
3514         FT_NONE, BASE_NONE, NULL, 0,
3515         "NRNExtensionsField/_item", HFILL }},
3516     { &hf_x420_RNExtensionsField_item,
3517       { "Item", "x420.RNExtensionsField_item",
3518         FT_NONE, BASE_NONE, NULL, 0,
3519         "RNExtensionsField/_item", HFILL }},
3520     { &hf_x420_OtherNotificationTypeFields_item,
3521       { "Item", "x420.OtherNotificationTypeFields_item",
3522         FT_NONE, BASE_NONE, NULL, 0,
3523         "OtherNotificationTypeFields/_item", HFILL }},
3524     { &hf_x420_advice,
3525       { "advice", "x420.advice",
3526         FT_UINT32, BASE_DEC, VALS(x420_BodyPart_vals), 0,
3527         "AbsenceAdvice/advice", HFILL }},
3528     { &hf_x420_next_available,
3529       { "next-available", "x420.next_available",
3530         FT_STRING, BASE_NONE, NULL, 0,
3531         "AbsenceAdvice/next-available", HFILL }},
3532     { &hf_x420_new_address,
3533       { "new-address", "x420.new_address",
3534         FT_NONE, BASE_NONE, NULL, 0,
3535         "ChangeOfAddressAdvice/new-address", HFILL }},
3536     { &hf_x420_effective_from,
3537       { "effective-from", "x420.effective_from",
3538         FT_STRING, BASE_NONE, NULL, 0,
3539         "ChangeOfAddressAdvice/effective-from", HFILL }},
3540     { &hf_x420_assembly_instructions,
3541       { "assembly-instructions", "x420.assembly_instructions",
3542         FT_UINT32, BASE_DEC, NULL, 0,
3543         "IPMAssemblyInstructions/assembly-instructions", HFILL }},
3544     { &hf_x420_BodyPartReferences_item,
3545       { "Item", "x420.BodyPartReferences_item",
3546         FT_UINT32, BASE_DEC, VALS(x420_BodyPartReference_vals), 0,
3547         "BodyPartReferences/_item", HFILL }},
3548     { &hf_x420_stored_entry,
3549       { "stored-entry", "x420.stored_entry",
3550         FT_INT32, BASE_DEC, NULL, 0,
3551         "BodyPartReference/stored-entry", HFILL }},
3552     { &hf_x420_stored_content,
3553       { "stored-content", "x420.stored_content",
3554         FT_INT32, BASE_DEC, NULL, 0,
3555         "BodyPartReference/stored-content", HFILL }},
3556     { &hf_x420_submitted_body_part,
3557       { "submitted-body-part", "x420.submitted_body_part",
3558         FT_INT32, BASE_DEC, NULL, 0,
3559         "BodyPartReference/submitted-body-part", HFILL }},
3560     { &hf_x420_stored_body_part,
3561       { "stored-body-part", "x420.stored_body_part",
3562         FT_NONE, BASE_NONE, NULL, 0,
3563         "BodyPartReference/stored-body-part", HFILL }},
3564     { &hf_x420_message_entry,
3565       { "message-entry", "x420.message_entry",
3566         FT_INT32, BASE_DEC, NULL, 0,
3567         "BodyPartReference/stored-body-part/message-entry", HFILL }},
3568     { &hf_x420_body_part_number,
3569       { "body-part-number", "x420.body_part_number",
3570         FT_INT32, BASE_DEC, NULL, 0,
3571         "", HFILL }},
3572     { &hf_x420_Languages_item,
3573       { "Item", "x420.Languages_item",
3574         FT_STRING, BASE_NONE, NULL, 0,
3575         "Languages/_item", HFILL }},
3576     { &hf_x420_algorithmIdentifier,
3577       { "algorithmIdentifier", "x420.algorithmIdentifier",
3578         FT_NONE, BASE_NONE, NULL, 0,
3579         "Signature/algorithmIdentifier", HFILL }},
3580     { &hf_x420_encrypted,
3581       { "encrypted", "x420.encrypted",
3582         FT_BYTES, BASE_HEX, NULL, 0,
3583         "", HFILL }},
3584     { &hf_x420_BodyPartSignatures_item,
3585       { "Item", "x420.BodyPartSignatures_item",
3586         FT_NONE, BASE_NONE, NULL, 0,
3587         "BodyPartSignatures/_item", HFILL }},
3588     { &hf_x420_body_part_signature,
3589       { "body-part-signature", "x420.body_part_signature",
3590         FT_NONE, BASE_NONE, NULL, 0,
3591         "BodyPartSignatures/_item/body-part-signature", HFILL }},
3592     { &hf_x420_originator_certificate_selector,
3593       { "originator-certificate-selector", "x420.originator_certificate_selector",
3594         FT_NONE, BASE_NONE, NULL, 0,
3595         "BodyPartSignatures/_item/originator-certificate-selector", HFILL }},
3596     { &hf_x420_content_security_label,
3597       { "content-security-label", "x420.content_security_label",
3598         FT_NONE, BASE_NONE, NULL, 0,
3599         "IPMSecurityLabel/content-security-label", HFILL }},
3600     { &hf_x420_heading_security_label,
3601       { "heading-security-label", "x420.heading_security_label",
3602         FT_NONE, BASE_NONE, NULL, 0,
3603         "IPMSecurityLabel/heading-security-label", HFILL }},
3604     { &hf_x420_body_part_security_labels,
3605       { "body-part-security-labels", "x420.body_part_security_labels",
3606         FT_UINT32, BASE_DEC, NULL, 0,
3607         "IPMSecurityLabel/body-part-security-labels", HFILL }},
3608     { &hf_x420_body_part_security_labels_item,
3609       { "Item", "x420.body_part_security_labels_item",
3610         FT_UINT32, BASE_DEC, VALS(x420_BodyPartSecurityLabel_vals), 0,
3611         "IPMSecurityLabel/body-part-security-labels/_item", HFILL }},
3612     { &hf_x420_body_part_unlabelled,
3613       { "body-part-unlabelled", "x420.body_part_unlabelled",
3614         FT_NONE, BASE_NONE, NULL, 0,
3615         "BodyPartSecurityLabel/body-part-unlabelled", HFILL }},
3616     { &hf_x420_body_part_security_label,
3617       { "body-part-security-label", "x420.body_part_security_label",
3618         FT_NONE, BASE_NONE, NULL, 0,
3619         "BodyPartSecurityLabel/body-part-security-label", HFILL }},
3620     { &hf_x420_CirculationList_item,
3621       { "Item", "x420.CirculationList_item",
3622         FT_NONE, BASE_NONE, NULL, 0,
3623         "CirculationList/_item", HFILL }},
3624     { &hf_x420_circulation_recipient,
3625       { "circulation-recipient", "x420.circulation_recipient",
3626         FT_NONE, BASE_NONE, NULL, 0,
3627         "CirculationMember/circulation-recipient", HFILL }},
3628     { &hf_x420_checked,
3629       { "checked", "x420.checked",
3630         FT_UINT32, BASE_DEC, VALS(x420_Checkmark_vals), 0,
3631         "CirculationMember/checked", HFILL }},
3632     { &hf_x420_simple,
3633       { "simple", "x420.simple",
3634         FT_NONE, BASE_NONE, NULL, 0,
3635         "Checkmark/simple", HFILL }},
3636     { &hf_x420_timestamped,
3637       { "timestamped", "x420.timestamped",
3638         FT_STRING, BASE_NONE, NULL, 0,
3639         "Checkmark/timestamped", HFILL }},
3640     { &hf_x420_signed,
3641       { "signed", "x420.signed",
3642         FT_NONE, BASE_NONE, NULL, 0,
3643         "Checkmark/signed", HFILL }},
3644     { &hf_x420_circulation_signature_algorithm_identifier,
3645       { "algorithm-identifier", "x420.algorithm_identifier",
3646         FT_NONE, BASE_NONE, NULL, 0,
3647         "CirculationSignatureData/algorithm-identifier", HFILL }},
3648     { &hf_x420_timestamp,
3649       { "timestamp", "x420.timestamp",
3650         FT_STRING, BASE_NONE, NULL, 0,
3651         "CirculationSignatureData/timestamp", HFILL }},
3652     { &hf_x420_circulation_signature_data,
3653       { "circulation-signature-data", "x420.circulation_signature_data",
3654         FT_NONE, BASE_NONE, NULL, 0,
3655         "CirculationSignature/circulation-signature-data", HFILL }},
3656     { &hf_x420_DistributionCodes_item,
3657       { "Item", "x420.DistributionCodes_item",
3658         FT_NONE, BASE_NONE, NULL, 0,
3659         "DistributionCodes/_item", HFILL }},
3660     { &hf_x420_oid_code,
3661       { "oid-code", "x420.oid_code",
3662         FT_OID, BASE_NONE, NULL, 0,
3663         "DistributionCode/oid-code", HFILL }},
3664     { &hf_x420_alphanumeric_code,
3665       { "alphanumeric-code", "x420.alphanumeric_code",
3666         FT_NONE, BASE_NONE, NULL, 0,
3667         "DistributionCode/alphanumeric-code", HFILL }},
3668     { &hf_x420_or_descriptor,
3669       { "or-descriptor", "x420.or_descriptor",
3670         FT_NONE, BASE_NONE, NULL, 0,
3671         "DistributionCode/or-descriptor", HFILL }},
3672     { &hf_x420_InformationCategories_item,
3673       { "Item", "x420.InformationCategories_item",
3674         FT_NONE, BASE_NONE, NULL, 0,
3675         "InformationCategories/_item", HFILL }},
3676     { &hf_x420_reference,
3677       { "reference", "x420.reference",
3678         FT_OID, BASE_NONE, NULL, 0,
3679         "InformationCategory/reference", HFILL }},
3680     { &hf_x420_description,
3681       { "description", "x420.description",
3682         FT_NONE, BASE_NONE, NULL, 0,
3683         "InformationCategory/description", HFILL }},
3684     { &hf_x420_ManualHandlingInstructions_item,
3685       { "Item", "x420.ManualHandlingInstructions_item",
3686         FT_NONE, BASE_NONE, NULL, 0,
3687         "ManualHandlingInstructions/_item", HFILL }},
3688     { &hf_x420_GeneralTextParameters_item,
3689       { "Item", "x420.GeneralTextParameters_item",
3690         FT_UINT32, BASE_DEC, NULL, 0,
3691         "GeneralTextParameters/_item", HFILL }},
3692     { &hf_x420_voice_message_duration,
3693       { "voice-message-duration", "x420.voice_message_duration",
3694         FT_INT32, BASE_DEC, NULL, 0,
3695         "VoiceParameters/voice-message-duration", HFILL }},
3696     { &hf_x420_voice_encoding_type,
3697       { "voice-encoding-type", "x420.voice_encoding_type",
3698         FT_OID, BASE_NONE, NULL, 0,
3699         "VoiceParameters/voice-encoding-type", HFILL }},
3700     { &hf_x420_supplementary_information,
3701       { "supplementary-information", "x420.supplementary_information",
3702         FT_STRING, BASE_NONE, NULL, 0,
3703         "VoiceParameters/supplementary-information", HFILL }},
3704     { &hf_x420_mts_identifier,
3705       { "mts-identifier", "x420.mts_identifier",
3706         FT_NONE, BASE_NONE, NULL, 0,
3707         "ForwardedContentParameters/mts-identifier", HFILL }},
3708     { &hf_x420_submission_proof,
3709       { "submission-proof", "x420.submission_proof",
3710         FT_NONE, BASE_NONE, NULL, 0,
3711         "ForwardedContentParameters/submission-proof", HFILL }},
3712     { &hf_x420_proof_of_submission,
3713       { "proof-of-submission", "x420.proof_of_submission",
3714         FT_NONE, BASE_NONE, NULL, 0,
3715         "SubmissionProof/proof-of-submission", HFILL }},
3716     { &hf_x420_originating_MTA_certificate,
3717       { "originating-MTA-certificate", "x420.originating_MTA_certificate",
3718         FT_NONE, BASE_NONE, NULL, 0,
3719         "SubmissionProof/originating-MTA-certificate", HFILL }},
3720     { &hf_x420_message_submission_envelope,
3721       { "message-submission-envelope", "x420.message_submission_envelope",
3722         FT_NONE, BASE_NONE, NULL, 0,
3723         "SubmissionProof/message-submission-envelope", HFILL }},
3724     { &hf_x420_NotificationRequests_rn,
3725       { "rn", "x420.rn",
3726         FT_BOOLEAN, 8, NULL, 0x80,
3727         "", HFILL }},
3728     { &hf_x420_NotificationRequests_nrn,
3729       { "nrn", "x420.nrn",
3730         FT_BOOLEAN, 8, NULL, 0x40,
3731         "", HFILL }},
3732     { &hf_x420_NotificationRequests_ipm_return,
3733       { "ipm-return", "x420.ipm-return",
3734         FT_BOOLEAN, 8, NULL, 0x20,
3735         "", HFILL }},
3736     { &hf_x420_NotificationRequests_an_supported,
3737       { "an-supported", "x420.an-supported",
3738         FT_BOOLEAN, 8, NULL, 0x10,
3739         "", HFILL }},
3740     { &hf_x420_NotificationRequests_suppress_an,
3741       { "suppress-an", "x420.suppress-an",
3742         FT_BOOLEAN, 8, NULL, 0x08,
3743         "", HFILL }},
3744
3745 /*--- End of included file: packet-x420-hfarr.c ---*/
3746 #line 124 "packet-x420-template.c"
3747   };
3748
3749   /* List of subtrees */
3750   static gint *ett[] = {
3751     &ett_x420,
3752
3753 /*--- Included file: packet-x420-ettarr.c ---*/
3754 #line 1 "packet-x420-ettarr.c"
3755     &ett_x420_InformationObject,
3756     &ett_x420_IPM,
3757     &ett_x420_IPMSExtension,
3758     &ett_x420_Heading,
3759     &ett_x420_IPMIdentifier,
3760     &ett_x420_RecipientSpecifier,
3761     &ett_x420_ORDescriptor,
3762     &ett_x420_NotificationRequests,
3763     &ett_x420_RecipientExtensionsField,
3764     &ett_x420_AuthorizingUsersField,
3765     &ett_x420_PrimaryRecipientsField,
3766     &ett_x420_CopyRecipientsField,
3767     &ett_x420_BlindCopyRecipientsField,
3768     &ett_x420_ObsoletedIPMsField,
3769     &ett_x420_RelatedIPMsField,
3770     &ett_x420_ReplyRecipientsField,
3771     &ett_x420_ExtensionsField,
3772     &ett_x420_Body,
3773     &ett_x420_BodyPart,
3774     &ett_x420_ExtendedBodyPart,
3775     &ett_x420_IA5TextBodyPart,
3776     &ett_x420_IA5TextParameters,
3777     &ett_x420_G3FacsimileBodyPart,
3778     &ett_x420_G3FacsimileParameters,
3779     &ett_x420_G3FacsimileData,
3780     &ett_x420_G4Class1Data,
3781     &ett_x420_MixedModeData,
3782     &ett_x420_TeletexBodyPart,
3783     &ett_x420_TeletexParameters,
3784     &ett_x420_TeletexData,
3785     &ett_x420_VideotexBodyPart,
3786     &ett_x420_VideotexParameters,
3787     &ett_x420_EncryptedBodyPart,
3788     &ett_x420_EncryptedParameters,
3789     &ett_x420_MessageBodyPart,
3790     &ett_x420_MessageParameters,
3791     &ett_x420_IPN,
3792     &ett_x420_T_choice,
3793     &ett_x420_NonReceiptFields,
3794     &ett_x420_ReceiptFields,
3795     &ett_x420_NotificationExtensionsField,
3796     &ett_x420_NRNExtensionsField,
3797     &ett_x420_RNExtensionsField,
3798     &ett_x420_OtherNotificationTypeFields,
3799     &ett_x420_AbsenceAdvice,
3800     &ett_x420_ChangeOfAddressAdvice,
3801     &ett_x420_IPMAssemblyInstructions,
3802     &ett_x420_BodyPartReferences,
3803     &ett_x420_BodyPartReference,