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