From Graeme Lunt
[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 Ethereal dissector compiler    */
3 /* .\packet-x420.c                                                            */
4 /* ../../tools/asn2eth.py -X -b -e -p x420 -c x420.cnf -s packet-x420-template x420.asn */
5
6 /* Input file: packet-x420-template.c */
7
8 /* packet-x420.c
9  * Routines for X.420 (X.400 Message Transfer)  packet dissection
10  * Graeme Lunt 2005
11  *
12  * $Id$
13  *
14  * Ethereal - Network traffic analyzer
15  * By Gerald Combs <gerald@ethereal.com>
16  * Copyright 1998 Gerald Combs
17  *
18  * This program is free software; you can redistribute it and/or
19  * modify it under the terms of the GNU General Public License
20  * as published by the Free Software Foundation; either version 2
21  * of the License, or (at your option) any later version.
22  *
23  * This program is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26  * GNU General Public License for more details.
27  *
28  * You should have received a copy of the GNU General Public License
29  * along with this program; if not, write to the Free Software
30  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
31  */
32
33 #ifdef HAVE_CONFIG_H
34 # include "config.h"
35 #endif
36
37 #include <glib.h>
38 #include <epan/packet.h>
39 #include <epan/conversation.h>
40
41 #include <stdio.h>
42 #include <string.h>
43
44 #include "packet-ber.h"
45 #include "packet-acse.h"
46 #include "packet-ros.h"
47
48 #include "packet-x509af.h"
49 #include "packet-x411.h"
50
51 #include "packet-x420.h"
52
53 #define PNAME  "X.420 OSI Information Object"
54 #define PSNAME "X420"
55 #define PFNAME "x420"
56
57 /* Initialize the protocol and registered fields */
58 int proto_x420 = -1;
59
60 static char object_identifier_id[BER_MAX_OID_STR_LEN]; /* content type identifier */
61
62
63 /*--- Included file: packet-x420-hf.c ---*/
64
65 static int hf_x420_OriginatingUA_PDU = -1;        /* OriginatingUA */
66 static int hf_x420_ipm = -1;                      /* IPM */
67 static int hf_x420_ipn = -1;                      /* IPN */
68 static int hf_x420_heading = -1;                  /* Heading */
69 static int hf_x420_body = -1;                     /* Body */
70 static int hf_x420_type = -1;                     /* T_type */
71 static int hf_x420_value = -1;                    /* T_value */
72 static int hf_x420_this_IPM = -1;                 /* ThisIPMField */
73 static int hf_x420_originator = -1;               /* OriginatorField */
74 static int hf_x420_authorizing_users = -1;        /* AuthorizingUsersField */
75 static int hf_x420_primary_recipients = -1;       /* PrimaryRecipientsField */
76 static int hf_x420_copy_recipients = -1;          /* CopyRecipientsField */
77 static int hf_x420_blind_copy_recipients = -1;    /* BlindCopyRecipientsField */
78 static int hf_x420_replied_to_IPM = -1;           /* RepliedToIPMField */
79 static int hf_x420_obsoleted_IPMs = -1;           /* ObsoletedIPMsField */
80 static int hf_x420_related_IPMs = -1;             /* RelatedIPMsField */
81 static int hf_x420_subject = -1;                  /* SubjectField */
82 static int hf_x420_expiry_time = -1;              /* ExpiryTimeField */
83 static int hf_x420_reply_time = -1;               /* ReplyTimeField */
84 static int hf_x420_reply_recipients = -1;         /* ReplyRecipientsField */
85 static int hf_x420_importance = -1;               /* ImportanceField */
86 static int hf_x420_sensitivity = -1;              /* SensitivityField */
87 static int hf_x420_auto_forwarded = -1;           /* AutoForwardedField */
88 static int hf_x420_extensions = -1;               /* ExtensionsField */
89 static int hf_x420_user = -1;                     /* ORName */
90 static int hf_x420_user_relative_identifier = -1;  /* LocalIPMIdentifier */
91 static int hf_x420_recipient = -1;                /* ORDescriptor */
92 static int hf_x420_notification_requests = -1;    /* NotificationRequests */
93 static int hf_x420_reply_requested = -1;          /* BOOLEAN */
94 static int hf_x420_recipient_extensions = -1;     /* RecipientExtensionsField */
95 static int hf_x420_formal_name = -1;              /* ORName */
96 static int hf_x420_free_form_name = -1;           /* FreeFormName */
97 static int hf_x420_telephone_number = -1;         /* TelephoneNumber */
98 static int hf_x420_RecipientExtensionsField_item = -1;  /* IPMSExtension */
99 static int hf_x420_AuthorizingUsersField_item = -1;  /* AuthorizingUsersSubfield */
100 static int hf_x420_PrimaryRecipientsField_item = -1;  /* PrimaryRecipientsSubfield */
101 static int hf_x420_CopyRecipientsField_item = -1;  /* CopyRecipientsSubfield */
102 static int hf_x420_BlindCopyRecipientsField_item = -1;  /* BlindCopyRecipientsSubfield */
103 static int hf_x420_ObsoletedIPMsField_item = -1;  /* ObsoletedIPMsSubfield */
104 static int hf_x420_RelatedIPMsField_item = -1;    /* RelatedIPMsSubfield */
105 static int hf_x420_ReplyRecipientsField_item = -1;  /* ReplyRecipientsSubfield */
106 static int hf_x420_ExtensionsField_item = -1;     /* IPMSExtension */
107 static int hf_x420_Body_item = -1;                /* BodyPart */
108 static int hf_x420_ia5_text = -1;                 /* IA5TextBodyPart */
109 static int hf_x420_g3_facsimile = -1;             /* G3FacsimileBodyPart */
110 static int hf_x420_g4_class1 = -1;                /* G4Class1BodyPart */
111 static int hf_x420_teletex = -1;                  /* TeletexBodyPart */
112 static int hf_x420_videotex = -1;                 /* VideotexBodyPart */
113 static int hf_x420_encrypted = -1;                /* EncryptedBodyPart */
114 static int hf_x420_message = -1;                  /* MessageBodyPart */
115 static int hf_x420_mixed_mode = -1;               /* MixedModeBodyPart */
116 static int hf_x420_bilaterally_defined = -1;      /* BilaterallyDefinedBodyPart */
117 static int hf_x420_nationally_defined = -1;       /* NationallyDefinedBodyPart */
118 static int hf_x420_extended = -1;                 /* ExtendedBodyPart */
119 static int hf_x420_extended_parameters = -1;      /* OBJECT_IDENTIFIER */
120 static int hf_x420_extended_data = -1;            /* T_data */
121 static int hf_x420_ia5text_parameters = -1;       /* IA5TextParameters */
122 static int hf_x420_ia5text_data = -1;             /* IA5TextData */
123 static int hf_x420_repertoire = -1;               /* Repertoire */
124 static int hf_x420_g3facsimile_parameters = -1;   /* G3FacsimileParameters */
125 static int hf_x420_g3facsimile_data = -1;         /* G3FacsimileData */
126 static int hf_x420_number_of_pages = -1;          /* INTEGER */
127 static int hf_x420_g3facsimile_non_basic_parameters = -1;  /* G3FacsimileNonBasicParameters */
128 static int hf_x420_G3FacsimileData_item = -1;     /* BIT_STRING */
129 static int hf_x420_G4Class1BodyPart_item = -1;    /* Interchange_Data_Element */
130 static int hf_x420_MixedModeBodyPart_item = -1;   /* Interchange_Data_Element */
131 static int hf_x420_teletex_parameters = -1;       /* TeletexParameters */
132 static int hf_x420_teletex_data = -1;             /* TeletexData */
133 static int hf_x420_telex_compatible = -1;         /* BOOLEAN */
134 static int hf_x420_teletex_non_basic_parameters = -1;  /* TeletexNonBasicParameters */
135 static int hf_x420_TeletexData_item = -1;         /* TeletexString */
136 static int hf_x420_videotex_parameters = -1;      /* VideotexParameters */
137 static int hf_x420_videotex_data = -1;            /* VideotexData */
138 static int hf_x420_syntax = -1;                   /* VideotexSyntax */
139 static int hf_x420_encrypted_parameters = -1;     /* EncryptedParameters */
140 static int hf_x420_encrypted_data = -1;           /* EncryptedData */
141 static int hf_x420_algorithm_identifier = -1;     /* AlgorithmIdentifier */
142 static int hf_x420_originator_certificates = -1;  /* ExtendedCertificates */
143 static int hf_x420_message_parameters = -1;       /* MessageParameters */
144 static int hf_x420_message_data = -1;             /* MessageData */
145 static int hf_x420_delivery_time = -1;            /* MessageDeliveryTime */
146 static int hf_x420_delivery_envelope = -1;        /* OtherMessageDeliveryFields */
147 static int hf_x420_subject_ipm = -1;              /* SubjectIPMField */
148 static int hf_x420_ipn_originator = -1;           /* IPNOriginatorField */
149 static int hf_x420_ipm_intended_recipient = -1;   /* IPMIntendedRecipientField */
150 static int hf_x420_conversion_eits = -1;          /* ConversionEITsField */
151 static int hf_x420_notification_extensions = -1;  /* NotificationExtensionsField */
152 static int hf_x420_choice = -1;                   /* T_choice */
153 static int hf_x420_non_receipt_fields = -1;       /* NonReceiptFields */
154 static int hf_x420_receipt_fields = -1;           /* ReceiptFields */
155 static int hf_x420_other_notification_type_fields = -1;  /* OtherNotificationTypeFields */
156 static int hf_x420_non_receipt_reason = -1;       /* NonReceiptReasonField */
157 static int hf_x420_discard_reason = -1;           /* DiscardReasonField */
158 static int hf_x420_auto_forward_comment = -1;     /* AutoForwardCommentField */
159 static int hf_x420_returned_ipm = -1;             /* ReturnedIPMField */
160 static int hf_x420_nrn_extensions = -1;           /* NRNExtensionsField */
161 static int hf_x420_receipt_time = -1;             /* ReceiptTimeField */
162 static int hf_x420_acknowledgment_mode = -1;      /* AcknowledgmentModeField */
163 static int hf_x420_suppl_receipt_info = -1;       /* SupplReceiptInfoField */
164 static int hf_x420_rn_extensions = -1;            /* RNExtensionsField */
165 static int hf_x420_NotificationExtensionsField_item = -1;  /* IPMSExtension */
166 static int hf_x420_NRNExtensionsField_item = -1;  /* IPMSExtension */
167 static int hf_x420_RNExtensionsField_item = -1;   /* IPMSExtension */
168 static int hf_x420_OtherNotificationTypeFields_item = -1;  /* IPMSExtension */
169 static int hf_x420_advice = -1;                   /* BodyPart */
170 static int hf_x420_next_available = -1;           /* Time */
171 static int hf_x420_new_address = -1;              /* ORDescriptor */
172 static int hf_x420_effective_from = -1;           /* Time */
173 static int hf_x420_assembly_instructions = -1;    /* BodyPartReferences */
174 static int hf_x420_BodyPartReferences_item = -1;  /* BodyPartReference */
175 static int hf_x420_stored_entry = -1;             /* SequenceNumber */
176 static int hf_x420_stored_content = -1;           /* SequenceNumber */
177 static int hf_x420_submitted_body_part = -1;      /* INTEGER_1_MAX */
178 static int hf_x420_stored_body_part = -1;         /* T_stored_body_part */
179 static int hf_x420_message_entry = -1;            /* SequenceNumber */
180 static int hf_x420_body_part_number = -1;         /* INTEGER_1_MAX */
181 /* named bits */
182 static int hf_x420_NotificationRequests_rn = -1;
183 static int hf_x420_NotificationRequests_nrn = -1;
184 static int hf_x420_NotificationRequests_ipm_return = -1;
185 static int hf_x420_NotificationRequests_an_supported = -1;
186 static int hf_x420_NotificationRequests_suppress_an = -1;
187
188 /*--- End of included file: packet-x420-hf.c ---*/
189
190
191 /* Initialize the subtree pointers */
192 static gint ett_x420 = -1;
193
194 /*--- Included file: packet-x420-ett.c ---*/
195
196 static gint ett_x420_InformationObject = -1;
197 static gint ett_x420_IPM = -1;
198 static gint ett_x420_IPMSExtension = -1;
199 static gint ett_x420_Heading = -1;
200 static gint ett_x420_IPMIdentifier = -1;
201 static gint ett_x420_RecipientSpecifier = -1;
202 static gint ett_x420_ORDescriptor = -1;
203 static gint ett_x420_NotificationRequests = -1;
204 static gint ett_x420_RecipientExtensionsField = -1;
205 static gint ett_x420_AuthorizingUsersField = -1;
206 static gint ett_x420_PrimaryRecipientsField = -1;
207 static gint ett_x420_CopyRecipientsField = -1;
208 static gint ett_x420_BlindCopyRecipientsField = -1;
209 static gint ett_x420_ObsoletedIPMsField = -1;
210 static gint ett_x420_RelatedIPMsField = -1;
211 static gint ett_x420_ReplyRecipientsField = -1;
212 static gint ett_x420_ExtensionsField = -1;
213 static gint ett_x420_Body = -1;
214 static gint ett_x420_BodyPart = -1;
215 static gint ett_x420_ExtendedBodyPart = -1;
216 static gint ett_x420_IA5TextBodyPart = -1;
217 static gint ett_x420_IA5TextParameters = -1;
218 static gint ett_x420_G3FacsimileBodyPart = -1;
219 static gint ett_x420_G3FacsimileParameters = -1;
220 static gint ett_x420_G3FacsimileData = -1;
221 static gint ett_x420_G4Class1BodyPart = -1;
222 static gint ett_x420_MixedModeBodyPart = -1;
223 static gint ett_x420_TeletexBodyPart = -1;
224 static gint ett_x420_TeletexParameters = -1;
225 static gint ett_x420_TeletexData = -1;
226 static gint ett_x420_VideotexBodyPart = -1;
227 static gint ett_x420_VideotexParameters = -1;
228 static gint ett_x420_EncryptedBodyPart = -1;
229 static gint ett_x420_EncryptedParameters = -1;
230 static gint ett_x420_MessageBodyPart = -1;
231 static gint ett_x420_MessageParameters = -1;
232 static gint ett_x420_IPN = -1;
233 static gint ett_x420_T_choice = -1;
234 static gint ett_x420_CommonFields = -1;
235 static gint ett_x420_NonReceiptFields = -1;
236 static gint ett_x420_ReceiptFields = -1;
237 static gint ett_x420_NotificationExtensionsField = -1;
238 static gint ett_x420_NRNExtensionsField = -1;
239 static gint ett_x420_RNExtensionsField = -1;
240 static gint ett_x420_OtherNotificationTypeFields = -1;
241 static gint ett_x420_AbsenceAdvice = -1;
242 static gint ett_x420_ChangeOfAddressAdvice = -1;
243 static gint ett_x420_IPMAssemblyInstructions = -1;
244 static gint ett_x420_BodyPartReferences = -1;
245 static gint ett_x420_BodyPartReference = -1;
246 static gint ett_x420_T_stored_body_part = -1;
247
248 /*--- End of included file: packet-x420-ett.c ---*/
249
250
251
252 /*--- Included file: packet-x420-fn.c ---*/
253
254 /*--- Cyclic dependencies ---*/
255
256 /* IPM -> Body -> BodyPart -> MessageBodyPart -> MessageData -> IPM */
257 static int dissect_x420_IPM(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
258
259 static int dissect_ipm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
260   return dissect_x420_IPM(TRUE, tvb, offset, pinfo, tree, hf_x420_ipm);
261 }
262
263
264 /*--- Fields for imported types ---*/
265
266 static int dissect_user(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
267   return dissect_x411_ORName(FALSE, tvb, offset, pinfo, tree, hf_x420_user);
268 }
269 static int dissect_formal_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
270   return dissect_x411_ORName(FALSE, tvb, offset, pinfo, tree, hf_x420_formal_name);
271 }
272 static int dissect_g3facsimile_non_basic_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
273   return dissect_x411_G3FacsimileNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_non_basic_parameters);
274 }
275 static int dissect_teletex_non_basic_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
276   return dissect_x411_TeletexNonBasicParameters(TRUE, tvb, offset, pinfo, tree, hf_x420_teletex_non_basic_parameters);
277 }
278 static int dissect_algorithm_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
279   return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_algorithm_identifier);
280 }
281 static int dissect_originator_certificates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
282   return dissect_x411_ExtendedCertificates(FALSE, tvb, offset, pinfo, tree, hf_x420_originator_certificates);
283 }
284 static int dissect_delivery_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
285   return dissect_x411_MessageDeliveryTime(TRUE, tvb, offset, pinfo, tree, hf_x420_delivery_time);
286 }
287 static int dissect_delivery_envelope_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
288   return dissect_x411_OtherMessageDeliveryFields(TRUE, tvb, offset, pinfo, tree, hf_x420_delivery_envelope);
289 }
290
291
292
293 static int
294 dissect_x420_Time(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
295   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
296                                             pinfo, tree, tvb, offset, hf_index,
297                                             NULL);
298
299   return offset;
300 }
301 static int dissect_next_available(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
302   return dissect_x420_Time(FALSE, tvb, offset, pinfo, tree, hf_x420_next_available);
303 }
304 static int dissect_effective_from_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
305   return dissect_x420_Time(TRUE, tvb, offset, pinfo, tree, hf_x420_effective_from);
306 }
307
308
309
310 static int
311 dissect_x420_LocalIPMIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
312   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
313                                             pinfo, tree, tvb, offset, hf_index,
314                                             NULL);
315
316   return offset;
317 }
318 static int dissect_user_relative_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
319   return dissect_x420_LocalIPMIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x420_user_relative_identifier);
320 }
321
322
323 static const ber_sequence_t IPMIdentifier_set[] = {
324   { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_user },
325   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_user_relative_identifier },
326   { 0, 0, 0, NULL }
327 };
328
329 static int
330 dissect_x420_IPMIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
331   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
332                               IPMIdentifier_set, hf_index, ett_x420_IPMIdentifier);
333
334   return offset;
335 }
336
337
338
339 static int
340 dissect_x420_ThisIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
341   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
342
343   return offset;
344 }
345 static int dissect_this_IPM(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
346   return dissect_x420_ThisIPMField(FALSE, tvb, offset, pinfo, tree, hf_x420_this_IPM);
347 }
348
349
350
351 static int
352 dissect_x420_FreeFormName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
353   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
354                                             pinfo, tree, tvb, offset, hf_index,
355                                             NULL);
356
357   return offset;
358 }
359 static int dissect_free_form_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
360   return dissect_x420_FreeFormName(TRUE, tvb, offset, pinfo, tree, hf_x420_free_form_name);
361 }
362
363
364
365 static int
366 dissect_x420_TelephoneNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
367   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
368                                             pinfo, tree, tvb, offset, hf_index,
369                                             NULL);
370
371   return offset;
372 }
373 static int dissect_telephone_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
374   return dissect_x420_TelephoneNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_telephone_number);
375 }
376
377
378 static const ber_sequence_t ORDescriptor_set[] = {
379   { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_formal_name },
380   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_free_form_name_impl },
381   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_telephone_number_impl },
382   { 0, 0, 0, NULL }
383 };
384
385 int
386 dissect_x420_ORDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
387   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
388                               ORDescriptor_set, hf_index, ett_x420_ORDescriptor);
389
390   return offset;
391 }
392 static int dissect_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
393   return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_x420_recipient);
394 }
395 static int dissect_new_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
396   return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_x420_new_address);
397 }
398
399
400
401 static int
402 dissect_x420_OriginatorField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
403   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
404
405   return offset;
406 }
407 static int dissect_originator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
408   return dissect_x420_OriginatorField(TRUE, tvb, offset, pinfo, tree, hf_x420_originator);
409 }
410
411
412
413 static int
414 dissect_x420_AuthorizingUsersSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
415   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
416
417   return offset;
418 }
419 static int dissect_AuthorizingUsersField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
420   return dissect_x420_AuthorizingUsersSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_AuthorizingUsersField_item);
421 }
422
423
424 static const ber_sequence_t AuthorizingUsersField_sequence_of[1] = {
425   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_AuthorizingUsersField_item },
426 };
427
428 static int
429 dissect_x420_AuthorizingUsersField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
430   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
431                                       AuthorizingUsersField_sequence_of, hf_index, ett_x420_AuthorizingUsersField);
432
433   return offset;
434 }
435 static int dissect_authorizing_users_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
436   return dissect_x420_AuthorizingUsersField(TRUE, tvb, offset, pinfo, tree, hf_x420_authorizing_users);
437 }
438
439
440 static const asn_namedbit NotificationRequests_bits[] = {
441   {  0, &hf_x420_NotificationRequests_rn, -1, -1, "rn", NULL },
442   {  1, &hf_x420_NotificationRequests_nrn, -1, -1, "nrn", NULL },
443   {  2, &hf_x420_NotificationRequests_ipm_return, -1, -1, "ipm-return", NULL },
444   {  3, &hf_x420_NotificationRequests_an_supported, -1, -1, "an-supported", NULL },
445   {  4, &hf_x420_NotificationRequests_suppress_an, -1, -1, "suppress-an", NULL },
446   { 0, NULL, 0, 0, NULL, NULL }
447 };
448
449 static int
450 dissect_x420_NotificationRequests(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
451   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
452                                     NotificationRequests_bits, hf_index, ett_x420_NotificationRequests,
453                                     NULL);
454
455   return offset;
456 }
457 static int dissect_notification_requests_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
458   return dissect_x420_NotificationRequests(TRUE, tvb, offset, pinfo, tree, hf_x420_notification_requests);
459 }
460
461
462
463 static int
464 dissect_x420_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
465   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
466
467   return offset;
468 }
469 static int dissect_reply_requested_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
470   return dissect_x420_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_requested);
471 }
472 static int dissect_telex_compatible_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
473   return dissect_x420_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_x420_telex_compatible);
474 }
475
476
477
478 static int
479 dissect_x420_T_type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
480
481   offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index,
482                                             object_identifier_id);
483
484
485   return offset;
486 }
487 static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
488   return dissect_x420_T_type(FALSE, tvb, offset, pinfo, tree, hf_x420_type);
489 }
490
491
492
493 static int
494 dissect_x420_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
495
496   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
497
498
499   return offset;
500 }
501 static int dissect_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
502   return dissect_x420_T_value(FALSE, tvb, offset, pinfo, tree, hf_x420_value);
503 }
504
505
506 static const ber_sequence_t IPMSExtension_sequence[] = {
507   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
508   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_value },
509   { 0, 0, 0, NULL }
510 };
511
512 static int
513 dissect_x420_IPMSExtension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
514   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
515                                    IPMSExtension_sequence, hf_index, ett_x420_IPMSExtension);
516
517   return offset;
518 }
519 static int dissect_RecipientExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
520   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_RecipientExtensionsField_item);
521 }
522 static int dissect_ExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
523   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_ExtensionsField_item);
524 }
525 static int dissect_NotificationExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
526   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_NotificationExtensionsField_item);
527 }
528 static int dissect_NRNExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
529   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_NRNExtensionsField_item);
530 }
531 static int dissect_RNExtensionsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
532   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_RNExtensionsField_item);
533 }
534 static int dissect_OtherNotificationTypeFields_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
535   return dissect_x420_IPMSExtension(FALSE, tvb, offset, pinfo, tree, hf_x420_OtherNotificationTypeFields_item);
536 }
537
538
539 static const ber_sequence_t RecipientExtensionsField_set_of[1] = {
540   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RecipientExtensionsField_item },
541 };
542
543 static int
544 dissect_x420_RecipientExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
545   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
546                                  RecipientExtensionsField_set_of, hf_index, ett_x420_RecipientExtensionsField);
547
548   return offset;
549 }
550 static int dissect_recipient_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
551   return dissect_x420_RecipientExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_recipient_extensions);
552 }
553
554
555 static const ber_sequence_t RecipientSpecifier_set[] = {
556   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_recipient_impl },
557   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_requests_impl },
558   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_requested_impl },
559   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_extensions_impl },
560   { 0, 0, 0, NULL }
561 };
562
563 static int
564 dissect_x420_RecipientSpecifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
565   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
566                               RecipientSpecifier_set, hf_index, ett_x420_RecipientSpecifier);
567
568   return offset;
569 }
570
571
572
573 static int
574 dissect_x420_PrimaryRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
575   offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
576
577   return offset;
578 }
579 static int dissect_PrimaryRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
580   return dissect_x420_PrimaryRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_PrimaryRecipientsField_item);
581 }
582
583
584 static const ber_sequence_t PrimaryRecipientsField_sequence_of[1] = {
585   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_PrimaryRecipientsField_item },
586 };
587
588 static int
589 dissect_x420_PrimaryRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
590   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
591                                       PrimaryRecipientsField_sequence_of, hf_index, ett_x420_PrimaryRecipientsField);
592
593   return offset;
594 }
595 static int dissect_primary_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
596   return dissect_x420_PrimaryRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_primary_recipients);
597 }
598
599
600
601 static int
602 dissect_x420_CopyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
603   offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
604
605   return offset;
606 }
607 static int dissect_CopyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
608   return dissect_x420_CopyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_CopyRecipientsField_item);
609 }
610
611
612 static const ber_sequence_t CopyRecipientsField_sequence_of[1] = {
613   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_CopyRecipientsField_item },
614 };
615
616 static int
617 dissect_x420_CopyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
618   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
619                                       CopyRecipientsField_sequence_of, hf_index, ett_x420_CopyRecipientsField);
620
621   return offset;
622 }
623 static int dissect_copy_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
624   return dissect_x420_CopyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_copy_recipients);
625 }
626
627
628
629 static int
630 dissect_x420_BlindCopyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
631   offset = dissect_x420_RecipientSpecifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
632
633   return offset;
634 }
635 static int dissect_BlindCopyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
636   return dissect_x420_BlindCopyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_BlindCopyRecipientsField_item);
637 }
638
639
640 static const ber_sequence_t BlindCopyRecipientsField_sequence_of[1] = {
641   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_BlindCopyRecipientsField_item },
642 };
643
644 static int
645 dissect_x420_BlindCopyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
646   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
647                                       BlindCopyRecipientsField_sequence_of, hf_index, ett_x420_BlindCopyRecipientsField);
648
649   return offset;
650 }
651 static int dissect_blind_copy_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
652   return dissect_x420_BlindCopyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_blind_copy_recipients);
653 }
654
655
656
657 static int
658 dissect_x420_RepliedToIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
659   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
660
661   return offset;
662 }
663 static int dissect_replied_to_IPM_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
664   return dissect_x420_RepliedToIPMField(TRUE, tvb, offset, pinfo, tree, hf_x420_replied_to_IPM);
665 }
666
667
668
669 static int
670 dissect_x420_ObsoletedIPMsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
671   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
672
673   return offset;
674 }
675 static int dissect_ObsoletedIPMsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
676   return dissect_x420_ObsoletedIPMsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_ObsoletedIPMsField_item);
677 }
678
679
680 static const ber_sequence_t ObsoletedIPMsField_sequence_of[1] = {
681   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_ObsoletedIPMsField_item },
682 };
683
684 static int
685 dissect_x420_ObsoletedIPMsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
686   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
687                                       ObsoletedIPMsField_sequence_of, hf_index, ett_x420_ObsoletedIPMsField);
688
689   return offset;
690 }
691 static int dissect_obsoleted_IPMs_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
692   return dissect_x420_ObsoletedIPMsField(TRUE, tvb, offset, pinfo, tree, hf_x420_obsoleted_IPMs);
693 }
694
695
696
697 static int
698 dissect_x420_RelatedIPMsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
699   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
700
701   return offset;
702 }
703 static int dissect_RelatedIPMsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
704   return dissect_x420_RelatedIPMsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_RelatedIPMsField_item);
705 }
706
707
708 static const ber_sequence_t RelatedIPMsField_sequence_of[1] = {
709   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_RelatedIPMsField_item },
710 };
711
712 static int
713 dissect_x420_RelatedIPMsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
714   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
715                                       RelatedIPMsField_sequence_of, hf_index, ett_x420_RelatedIPMsField);
716
717   return offset;
718 }
719 static int dissect_related_IPMs_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
720   return dissect_x420_RelatedIPMsField(TRUE, tvb, offset, pinfo, tree, hf_x420_related_IPMs);
721 }
722
723
724
725 static int
726 dissect_x420_SubjectField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
727   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
728                                             pinfo, tree, tvb, offset, hf_index,
729                                             NULL);
730
731   return offset;
732 }
733 static int dissect_subject(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
734   return dissect_x420_SubjectField(FALSE, tvb, offset, pinfo, tree, hf_x420_subject);
735 }
736
737
738
739 static int
740 dissect_x420_ExpiryTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
741   offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index);
742
743   return offset;
744 }
745 static int dissect_expiry_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
746   return dissect_x420_ExpiryTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_expiry_time);
747 }
748
749
750
751 static int
752 dissect_x420_ReplyTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
753   offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index);
754
755   return offset;
756 }
757 static int dissect_reply_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
758   return dissect_x420_ReplyTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_time);
759 }
760
761
762
763 static int
764 dissect_x420_ReplyRecipientsSubfield(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
765   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
766
767   return offset;
768 }
769 static int dissect_ReplyRecipientsField_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
770   return dissect_x420_ReplyRecipientsSubfield(FALSE, tvb, offset, pinfo, tree, hf_x420_ReplyRecipientsField_item);
771 }
772
773
774 static const ber_sequence_t ReplyRecipientsField_sequence_of[1] = {
775   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ReplyRecipientsField_item },
776 };
777
778 static int
779 dissect_x420_ReplyRecipientsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
780   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
781                                       ReplyRecipientsField_sequence_of, hf_index, ett_x420_ReplyRecipientsField);
782
783   return offset;
784 }
785 static int dissect_reply_recipients_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
786   return dissect_x420_ReplyRecipientsField(TRUE, tvb, offset, pinfo, tree, hf_x420_reply_recipients);
787 }
788
789
790 static const value_string x420_ImportanceField_vals[] = {
791   {   0, "low" },
792   {   1, "normal" },
793   {   2, "high" },
794   { 0, NULL }
795 };
796
797
798 static int
799 dissect_x420_ImportanceField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
800   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
801                                   NULL);
802
803   return offset;
804 }
805 static int dissect_importance_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
806   return dissect_x420_ImportanceField(TRUE, tvb, offset, pinfo, tree, hf_x420_importance);
807 }
808
809
810 static const value_string x420_SensitivityField_vals[] = {
811   {   1, "personal" },
812   {   2, "private" },
813   {   3, "company-confidential" },
814   { 0, NULL }
815 };
816
817
818 static int
819 dissect_x420_SensitivityField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
820   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
821                                   NULL);
822
823   return offset;
824 }
825 static int dissect_sensitivity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
826   return dissect_x420_SensitivityField(TRUE, tvb, offset, pinfo, tree, hf_x420_sensitivity);
827 }
828
829
830
831 static int
832 dissect_x420_AutoForwardedField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
833   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
834
835   return offset;
836 }
837 static int dissect_auto_forwarded_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
838   return dissect_x420_AutoForwardedField(TRUE, tvb, offset, pinfo, tree, hf_x420_auto_forwarded);
839 }
840
841
842 static const ber_sequence_t ExtensionsField_set_of[1] = {
843   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ExtensionsField_item },
844 };
845
846 static int
847 dissect_x420_ExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
848   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
849                                  ExtensionsField_set_of, hf_index, ett_x420_ExtensionsField);
850
851   return offset;
852 }
853 static int dissect_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
854   return dissect_x420_ExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_extensions);
855 }
856
857
858 static const ber_sequence_t Heading_set[] = {
859   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_this_IPM },
860   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originator_impl },
861   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizing_users_impl },
862   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_primary_recipients_impl },
863   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_copy_recipients_impl },
864   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_blind_copy_recipients_impl },
865   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_replied_to_IPM_impl },
866   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_obsoleted_IPMs_impl },
867   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_related_IPMs_impl },
868   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_subject },
869   { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_expiry_time_impl },
870   { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_time_impl },
871   { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reply_recipients_impl },
872   { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_importance_impl },
873   { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sensitivity_impl },
874   { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auto_forwarded_impl },
875   { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
876   { 0, 0, 0, NULL }
877 };
878
879 static int
880 dissect_x420_Heading(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
881   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
882                               Heading_set, hf_index, ett_x420_Heading);
883
884   return offset;
885 }
886 static int dissect_heading(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
887   return dissect_x420_Heading(FALSE, tvb, offset, pinfo, tree, hf_x420_heading);
888 }
889
890
891 static const value_string x420_Repertoire_vals[] = {
892   {   2, "ita2" },
893   {   5, "ia5" },
894   { 0, NULL }
895 };
896
897
898 static int
899 dissect_x420_Repertoire(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
900   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
901                                   NULL);
902
903   return offset;
904 }
905 static int dissect_repertoire_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
906   return dissect_x420_Repertoire(TRUE, tvb, offset, pinfo, tree, hf_x420_repertoire);
907 }
908
909
910 static const ber_sequence_t IA5TextParameters_set[] = {
911   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_repertoire_impl },
912   { 0, 0, 0, NULL }
913 };
914
915 static int
916 dissect_x420_IA5TextParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
917   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
918                               IA5TextParameters_set, hf_index, ett_x420_IA5TextParameters);
919
920   return offset;
921 }
922 static int dissect_ia5text_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
923   return dissect_x420_IA5TextParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_ia5text_parameters);
924 }
925
926
927
928 static int
929 dissect_x420_IA5TextData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
930   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
931                                             pinfo, tree, tvb, offset, hf_index,
932                                             NULL);
933
934   return offset;
935 }
936 static int dissect_ia5text_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
937   return dissect_x420_IA5TextData(FALSE, tvb, offset, pinfo, tree, hf_x420_ia5text_data);
938 }
939
940
941 static const ber_sequence_t IA5TextBodyPart_sequence[] = {
942   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ia5text_parameters },
943   { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_ia5text_data },
944   { 0, 0, 0, NULL }
945 };
946
947 static int
948 dissect_x420_IA5TextBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
949   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
950                                    IA5TextBodyPart_sequence, hf_index, ett_x420_IA5TextBodyPart);
951
952   return offset;
953 }
954 static int dissect_ia5_text_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
955   return dissect_x420_IA5TextBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_ia5_text);
956 }
957
958
959
960 static int
961 dissect_x420_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
962   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
963                                   NULL);
964
965   return offset;
966 }
967 static int dissect_number_of_pages_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
968   return dissect_x420_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_x420_number_of_pages);
969 }
970
971
972 static const ber_sequence_t G3FacsimileParameters_set[] = {
973   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_number_of_pages_impl },
974   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_g3facsimile_non_basic_parameters_impl },
975   { 0, 0, 0, NULL }
976 };
977
978 static int
979 dissect_x420_G3FacsimileParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
980   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
981                               G3FacsimileParameters_set, hf_index, ett_x420_G3FacsimileParameters);
982
983   return offset;
984 }
985 static int dissect_g3facsimile_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
986   return dissect_x420_G3FacsimileParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_parameters);
987 }
988
989
990
991 static int
992 dissect_x420_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
993   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
994                                     NULL, hf_index, -1,
995                                     NULL);
996
997   return offset;
998 }
999 static int dissect_G3FacsimileData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1000   return dissect_x420_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_x420_G3FacsimileData_item);
1001 }
1002
1003
1004 static const ber_sequence_t G3FacsimileData_sequence_of[1] = {
1005   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_G3FacsimileData_item },
1006 };
1007
1008 static int
1009 dissect_x420_G3FacsimileData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1010   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1011                                       G3FacsimileData_sequence_of, hf_index, ett_x420_G3FacsimileData);
1012
1013   return offset;
1014 }
1015 static int dissect_g3facsimile_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1016   return dissect_x420_G3FacsimileData(FALSE, tvb, offset, pinfo, tree, hf_x420_g3facsimile_data);
1017 }
1018
1019
1020 static const ber_sequence_t G3FacsimileBodyPart_sequence[] = {
1021   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_g3facsimile_parameters },
1022   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_g3facsimile_data },
1023   { 0, 0, 0, NULL }
1024 };
1025
1026 static int
1027 dissect_x420_G3FacsimileBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1028   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1029                                    G3FacsimileBodyPart_sequence, hf_index, ett_x420_G3FacsimileBodyPart);
1030
1031   return offset;
1032 }
1033 static int dissect_g3_facsimile_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1034   return dissect_x420_G3FacsimileBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_g3_facsimile);
1035 }
1036
1037
1038
1039 static int
1040 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_) {
1041 /* XXX Not implemented yet */
1042
1043
1044   return offset;
1045 }
1046 static int dissect_G4Class1BodyPart_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1047   return dissect_x420_Interchange_Data_Element(FALSE, tvb, offset, pinfo, tree, hf_x420_G4Class1BodyPart_item);
1048 }
1049 static int dissect_MixedModeBodyPart_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1050   return dissect_x420_Interchange_Data_Element(FALSE, tvb, offset, pinfo, tree, hf_x420_MixedModeBodyPart_item);
1051 }
1052
1053
1054 static const ber_sequence_t G4Class1BodyPart_sequence_of[1] = {
1055   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_G4Class1BodyPart_item },
1056 };
1057
1058 static int
1059 dissect_x420_G4Class1BodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1060   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1061                                       G4Class1BodyPart_sequence_of, hf_index, ett_x420_G4Class1BodyPart);
1062
1063   return offset;
1064 }
1065 static int dissect_g4_class1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1066   return dissect_x420_G4Class1BodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_g4_class1);
1067 }
1068
1069
1070 static const ber_sequence_t TeletexParameters_set[] = {
1071   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_number_of_pages_impl },
1072   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_telex_compatible_impl },
1073   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_non_basic_parameters_impl },
1074   { 0, 0, 0, NULL }
1075 };
1076
1077 static int
1078 dissect_x420_TeletexParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1079   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1080                               TeletexParameters_set, hf_index, ett_x420_TeletexParameters);
1081
1082   return offset;
1083 }
1084 static int dissect_teletex_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1085   return dissect_x420_TeletexParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_teletex_parameters);
1086 }
1087
1088
1089
1090 static int
1091 dissect_x420_TeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1092   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
1093                                             pinfo, tree, tvb, offset, hf_index,
1094                                             NULL);
1095
1096   return offset;
1097 }
1098 static int dissect_TeletexData_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1099   return dissect_x420_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_x420_TeletexData_item);
1100 }
1101
1102
1103 static const ber_sequence_t TeletexData_sequence_of[1] = {
1104   { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_TeletexData_item },
1105 };
1106
1107 static int
1108 dissect_x420_TeletexData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1109   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1110                                       TeletexData_sequence_of, hf_index, ett_x420_TeletexData);
1111
1112   return offset;
1113 }
1114 static int dissect_teletex_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1115   return dissect_x420_TeletexData(FALSE, tvb, offset, pinfo, tree, hf_x420_teletex_data);
1116 }
1117
1118
1119 static const ber_sequence_t TeletexBodyPart_sequence[] = {
1120   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_teletex_parameters },
1121   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_teletex_data },
1122   { 0, 0, 0, NULL }
1123 };
1124
1125 static int
1126 dissect_x420_TeletexBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1127   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1128                                    TeletexBodyPart_sequence, hf_index, ett_x420_TeletexBodyPart);
1129
1130   return offset;
1131 }
1132 static int dissect_teletex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1133   return dissect_x420_TeletexBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_teletex);
1134 }
1135
1136
1137 static const value_string x420_VideotexSyntax_vals[] = {
1138   {   0, "ids" },
1139   {   1, "data-syntax1" },
1140   {   2, "data-syntax2" },
1141   {   3, "data-syntax3" },
1142   { 0, NULL }
1143 };
1144
1145
1146 static int
1147 dissect_x420_VideotexSyntax(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1148   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1149                                   NULL);
1150
1151   return offset;
1152 }
1153 static int dissect_syntax_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1154   return dissect_x420_VideotexSyntax(TRUE, tvb, offset, pinfo, tree, hf_x420_syntax);
1155 }
1156
1157
1158 static const ber_sequence_t VideotexParameters_set[] = {
1159   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_syntax_impl },
1160   { 0, 0, 0, NULL }
1161 };
1162
1163 static int
1164 dissect_x420_VideotexParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1165   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1166                               VideotexParameters_set, hf_index, ett_x420_VideotexParameters);
1167
1168   return offset;
1169 }
1170 static int dissect_videotex_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1171   return dissect_x420_VideotexParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_videotex_parameters);
1172 }
1173
1174
1175
1176 static int
1177 dissect_x420_VideotexData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1178   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_VideotexString,
1179                                             pinfo, tree, tvb, offset, hf_index,
1180                                             NULL);
1181
1182   return offset;
1183 }
1184 static int dissect_videotex_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1185   return dissect_x420_VideotexData(FALSE, tvb, offset, pinfo, tree, hf_x420_videotex_data);
1186 }
1187
1188
1189 static const ber_sequence_t VideotexBodyPart_sequence[] = {
1190   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_videotex_parameters },
1191   { BER_CLASS_UNI, BER_UNI_TAG_VideotexString, BER_FLAGS_NOOWNTAG, dissect_videotex_data },
1192   { 0, 0, 0, NULL }
1193 };
1194
1195 static int
1196 dissect_x420_VideotexBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1197   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1198                                    VideotexBodyPart_sequence, hf_index, ett_x420_VideotexBodyPart);
1199
1200   return offset;
1201 }
1202 static int dissect_videotex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1203   return dissect_x420_VideotexBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_videotex);
1204 }
1205
1206
1207 static const ber_sequence_t EncryptedParameters_set[] = {
1208   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithm_identifier },
1209   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_originator_certificates },
1210   { 0, 0, 0, NULL }
1211 };
1212
1213 static int
1214 dissect_x420_EncryptedParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1215   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1216                               EncryptedParameters_set, hf_index, ett_x420_EncryptedParameters);
1217
1218   return offset;
1219 }
1220 static int dissect_encrypted_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1221   return dissect_x420_EncryptedParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_encrypted_parameters);
1222 }
1223
1224
1225
1226 static int
1227 dissect_x420_EncryptedData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1228   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
1229                                     NULL, hf_index, -1,
1230                                     NULL);
1231
1232   return offset;
1233 }
1234 static int dissect_encrypted_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1235   return dissect_x420_EncryptedData(FALSE, tvb, offset, pinfo, tree, hf_x420_encrypted_data);
1236 }
1237
1238
1239 static const ber_sequence_t EncryptedBodyPart_sequence[] = {
1240   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_encrypted_parameters },
1241   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted_data },
1242   { 0, 0, 0, NULL }
1243 };
1244
1245 static int
1246 dissect_x420_EncryptedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1247   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1248                                    EncryptedBodyPart_sequence, hf_index, ett_x420_EncryptedBodyPart);
1249
1250   return offset;
1251 }
1252 static int dissect_encrypted_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1253   return dissect_x420_EncryptedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_encrypted);
1254 }
1255
1256
1257 static const ber_sequence_t MessageParameters_set[] = {
1258   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_time_impl },
1259   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_envelope_impl },
1260   { 0, 0, 0, NULL }
1261 };
1262
1263 static int
1264 dissect_x420_MessageParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1265   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1266                               MessageParameters_set, hf_index, ett_x420_MessageParameters);
1267
1268   return offset;
1269 }
1270 static int dissect_message_parameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1271   return dissect_x420_MessageParameters(FALSE, tvb, offset, pinfo, tree, hf_x420_message_parameters);
1272 }
1273
1274
1275
1276 static int
1277 dissect_x420_MessageData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1278   offset = dissect_x420_IPM(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1279
1280   return offset;
1281 }
1282 static int dissect_message_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1283   return dissect_x420_MessageData(FALSE, tvb, offset, pinfo, tree, hf_x420_message_data);
1284 }
1285
1286
1287 static const ber_sequence_t MessageBodyPart_sequence[] = {
1288   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_parameters },
1289   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_message_data },
1290   { 0, 0, 0, NULL }
1291 };
1292
1293 static int
1294 dissect_x420_MessageBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1295   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1296                                    MessageBodyPart_sequence, hf_index, ett_x420_MessageBodyPart);
1297
1298   return offset;
1299 }
1300 static int dissect_message_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1301   return dissect_x420_MessageBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_message);
1302 }
1303
1304
1305 static const ber_sequence_t MixedModeBodyPart_sequence_of[1] = {
1306   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_MixedModeBodyPart_item },
1307 };
1308
1309 static int
1310 dissect_x420_MixedModeBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1311   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1312                                       MixedModeBodyPart_sequence_of, hf_index, ett_x420_MixedModeBodyPart);
1313
1314   return offset;
1315 }
1316 static int dissect_mixed_mode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1317   return dissect_x420_MixedModeBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_mixed_mode);
1318 }
1319
1320
1321
1322 static int
1323 dissect_x420_BilaterallyDefinedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1324   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1325                                        NULL);
1326
1327   return offset;
1328 }
1329 static int dissect_bilaterally_defined_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1330   return dissect_x420_BilaterallyDefinedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_bilaterally_defined);
1331 }
1332
1333
1334
1335 static int
1336 dissect_x420_NationallyDefinedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1337 /* XXX Not implemented yet */
1338
1339
1340   return offset;
1341 }
1342 static int dissect_nationally_defined_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1343   return dissect_x420_NationallyDefinedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_nationally_defined);
1344 }
1345
1346
1347
1348 static int
1349 dissect_x420_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1350   offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1351                                             NULL);
1352
1353   return offset;
1354 }
1355 static int dissect_extended_parameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1356   return dissect_x420_OBJECT_IDENTIFIER(TRUE, tvb, offset, pinfo, tree, hf_x420_extended_parameters);
1357 }
1358
1359
1360
1361 static int
1362 dissect_x420_T_data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1363 /* XXX Not implemented yet */
1364
1365
1366   return offset;
1367 }
1368 static int dissect_extended_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1369   return dissect_x420_T_data(FALSE, tvb, offset, pinfo, tree, hf_x420_extended_data);
1370 }
1371
1372
1373 static const ber_sequence_t ExtendedBodyPart_sequence[] = {
1374   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_extended_parameters_impl },
1375   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_extended_data },
1376   { 0, 0, 0, NULL }
1377 };
1378
1379 static int
1380 dissect_x420_ExtendedBodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1381   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1382                                    ExtendedBodyPart_sequence, hf_index, ett_x420_ExtendedBodyPart);
1383
1384   return offset;
1385 }
1386 static int dissect_extended_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1387   return dissect_x420_ExtendedBodyPart(TRUE, tvb, offset, pinfo, tree, hf_x420_extended);
1388 }
1389
1390
1391 static const value_string x420_BodyPart_vals[] = {
1392   {   0, "ia5-text" },
1393   {   3, "g3-facsimile" },
1394   {   4, "g4-class1" },
1395   {   5, "teletex" },
1396   {   6, "videotex" },
1397   {   8, "encrypted" },
1398   {   9, "message" },
1399   {  11, "mixed-mode" },
1400   {  14, "bilaterally-defined" },
1401   {   7, "nationally-defined" },
1402   {  15, "extended" },
1403   { 0, NULL }
1404 };
1405
1406 static const ber_choice_t BodyPart_choice[] = {
1407   {   0, BER_CLASS_CON, 0, 0, dissect_ia5_text_impl },
1408   {   3, BER_CLASS_CON, 3, 0, dissect_g3_facsimile_impl },
1409   {   4, BER_CLASS_CON, 4, 0, dissect_g4_class1_impl },
1410   {   5, BER_CLASS_CON, 5, 0, dissect_teletex_impl },
1411   {   6, BER_CLASS_CON, 6, 0, dissect_videotex_impl },
1412   {   8, BER_CLASS_CON, 8, 0, dissect_encrypted_impl },
1413   {   9, BER_CLASS_CON, 9, 0, dissect_message_impl },
1414   {  11, BER_CLASS_CON, 11, 0, dissect_mixed_mode_impl },
1415   {  14, BER_CLASS_CON, 14, 0, dissect_bilaterally_defined_impl },
1416   {   7, BER_CLASS_CON, 7, 0, dissect_nationally_defined_impl },
1417   {  15, BER_CLASS_CON, 15, 0, dissect_extended_impl },
1418   { 0, 0, 0, 0, NULL }
1419 };
1420
1421 static int
1422 dissect_x420_BodyPart(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1423   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1424                                  BodyPart_choice, hf_index, ett_x420_BodyPart,
1425                                  NULL);
1426
1427   return offset;
1428 }
1429 static int dissect_Body_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1430   return dissect_x420_BodyPart(FALSE, tvb, offset, pinfo, tree, hf_x420_Body_item);
1431 }
1432 static int dissect_advice(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1433   return dissect_x420_BodyPart(FALSE, tvb, offset, pinfo, tree, hf_x420_advice);
1434 }
1435
1436
1437 static const ber_sequence_t Body_sequence_of[1] = {
1438   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_Body_item },
1439 };
1440
1441 static int
1442 dissect_x420_Body(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1443   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1444                                       Body_sequence_of, hf_index, ett_x420_Body);
1445
1446   return offset;
1447 }
1448 static int dissect_body(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1449   return dissect_x420_Body(FALSE, tvb, offset, pinfo, tree, hf_x420_body);
1450 }
1451
1452
1453 static const ber_sequence_t IPM_sequence[] = {
1454   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_heading },
1455   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_body },
1456   { 0, 0, 0, NULL }
1457 };
1458
1459 static int
1460 dissect_x420_IPM(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1461   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1462                                    IPM_sequence, hf_index, ett_x420_IPM);
1463
1464   return offset;
1465 }
1466
1467
1468
1469 static int
1470 dissect_x420_SubjectIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1471   offset = dissect_x420_IPMIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1472
1473   return offset;
1474 }
1475 static int dissect_subject_ipm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1476   return dissect_x420_SubjectIPMField(FALSE, tvb, offset, pinfo, tree, hf_x420_subject_ipm);
1477 }
1478
1479
1480
1481 static int
1482 dissect_x420_IPNOriginatorField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1483   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1484
1485   return offset;
1486 }
1487 static int dissect_ipn_originator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1488   return dissect_x420_IPNOriginatorField(TRUE, tvb, offset, pinfo, tree, hf_x420_ipn_originator);
1489 }
1490
1491
1492
1493 static int
1494 dissect_x420_IPMIntendedRecipientField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1495   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1496
1497   return offset;
1498 }
1499 static int dissect_ipm_intended_recipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1500   return dissect_x420_IPMIntendedRecipientField(TRUE, tvb, offset, pinfo, tree, hf_x420_ipm_intended_recipient);
1501 }
1502
1503
1504
1505 static int
1506 dissect_x420_ConversionEITsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1507   offset = dissect_x411_EncodedInformationTypes(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1508
1509   return offset;
1510 }
1511 static int dissect_conversion_eits(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1512   return dissect_x420_ConversionEITsField(FALSE, tvb, offset, pinfo, tree, hf_x420_conversion_eits);
1513 }
1514
1515
1516 static const ber_sequence_t NotificationExtensionsField_set_of[1] = {
1517   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_NotificationExtensionsField_item },
1518 };
1519
1520 static int
1521 dissect_x420_NotificationExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1522   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1523                                  NotificationExtensionsField_set_of, hf_index, ett_x420_NotificationExtensionsField);
1524
1525   return offset;
1526 }
1527 static int dissect_notification_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1528   return dissect_x420_NotificationExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_notification_extensions);
1529 }
1530
1531
1532 static const value_string x420_NonReceiptReasonField_vals[] = {
1533   {   0, "ipm-discarded" },
1534   {   1, "ipm-auto-forwarded" },
1535   { 0, NULL }
1536 };
1537
1538
1539 static int
1540 dissect_x420_NonReceiptReasonField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1541   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1542                                   NULL);
1543
1544   return offset;
1545 }
1546 static int dissect_non_receipt_reason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1547   return dissect_x420_NonReceiptReasonField(TRUE, tvb, offset, pinfo, tree, hf_x420_non_receipt_reason);
1548 }
1549
1550
1551 static const value_string x420_DiscardReasonField_vals[] = {
1552   {   0, "ipm-expired" },
1553   {   1, "ipm-obsoleted" },
1554   {   2, "user-subscription-terminated" },
1555   {   3, "not-used" },
1556   { 0, NULL }
1557 };
1558
1559
1560 static int
1561 dissect_x420_DiscardReasonField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1562   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1563                                   NULL);
1564
1565   return offset;
1566 }
1567 static int dissect_discard_reason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1568   return dissect_x420_DiscardReasonField(TRUE, tvb, offset, pinfo, tree, hf_x420_discard_reason);
1569 }
1570
1571
1572
1573 static int
1574 dissect_x420_AutoForwardComment(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1575   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
1576                                             pinfo, tree, tvb, offset, hf_index,
1577                                             NULL);
1578
1579   return offset;
1580 }
1581
1582
1583
1584 static int
1585 dissect_x420_AutoForwardCommentField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1586   offset = dissect_x420_AutoForwardComment(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1587
1588   return offset;
1589 }
1590 static int dissect_auto_forward_comment_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1591   return dissect_x420_AutoForwardCommentField(TRUE, tvb, offset, pinfo, tree, hf_x420_auto_forward_comment);
1592 }
1593
1594
1595
1596 static int
1597 dissect_x420_ReturnedIPMField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1598   offset = dissect_x420_IPM(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1599
1600   return offset;
1601 }
1602 static int dissect_returned_ipm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1603   return dissect_x420_ReturnedIPMField(TRUE, tvb, offset, pinfo, tree, hf_x420_returned_ipm);
1604 }
1605
1606
1607 static const ber_sequence_t NRNExtensionsField_set_of[1] = {
1608   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_NRNExtensionsField_item },
1609 };
1610
1611 static int
1612 dissect_x420_NRNExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1613   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1614                                  NRNExtensionsField_set_of, hf_index, ett_x420_NRNExtensionsField);
1615
1616   return offset;
1617 }
1618 static int dissect_nrn_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1619   return dissect_x420_NRNExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_nrn_extensions);
1620 }
1621
1622
1623 static const ber_sequence_t NonReceiptFields_set[] = {
1624   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_non_receipt_reason_impl },
1625   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_discard_reason_impl },
1626   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auto_forward_comment_impl },
1627   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_returned_ipm_impl },
1628   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nrn_extensions_impl },
1629   { 0, 0, 0, NULL }
1630 };
1631
1632 static int
1633 dissect_x420_NonReceiptFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1634   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1635                               NonReceiptFields_set, hf_index, ett_x420_NonReceiptFields);
1636
1637   return offset;
1638 }
1639 static int dissect_non_receipt_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1640   return dissect_x420_NonReceiptFields(TRUE, tvb, offset, pinfo, tree, hf_x420_non_receipt_fields);
1641 }
1642
1643
1644
1645 static int
1646 dissect_x420_ReceiptTimeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1647   offset = dissect_x420_Time(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1648
1649   return offset;
1650 }
1651 static int dissect_receipt_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1652   return dissect_x420_ReceiptTimeField(TRUE, tvb, offset, pinfo, tree, hf_x420_receipt_time);
1653 }
1654
1655
1656 static const value_string x420_AcknowledgmentModeField_vals[] = {
1657   {   0, "manual" },
1658   {   1, "automatic" },
1659   { 0, NULL }
1660 };
1661
1662
1663 static int
1664 dissect_x420_AcknowledgmentModeField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1665   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1666                                   NULL);
1667
1668   return offset;
1669 }
1670 static int dissect_acknowledgment_mode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1671   return dissect_x420_AcknowledgmentModeField(TRUE, tvb, offset, pinfo, tree, hf_x420_acknowledgment_mode);
1672 }
1673
1674
1675
1676 static int
1677 dissect_x420_SupplReceiptInfoField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1678   offset = dissect_x411_SupplementaryInformation(implicit_tag, tvb, offset, pinfo, tree, hf_index);
1679
1680   return offset;
1681 }
1682 static int dissect_suppl_receipt_info_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1683   return dissect_x420_SupplReceiptInfoField(TRUE, tvb, offset, pinfo, tree, hf_x420_suppl_receipt_info);
1684 }
1685
1686
1687 static const ber_sequence_t RNExtensionsField_set_of[1] = {
1688   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RNExtensionsField_item },
1689 };
1690
1691 static int
1692 dissect_x420_RNExtensionsField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1693   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1694                                  RNExtensionsField_set_of, hf_index, ett_x420_RNExtensionsField);
1695
1696   return offset;
1697 }
1698 static int dissect_rn_extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1699   return dissect_x420_RNExtensionsField(TRUE, tvb, offset, pinfo, tree, hf_x420_rn_extensions);
1700 }
1701
1702
1703 static const ber_sequence_t ReceiptFields_set[] = {
1704   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_receipt_time_impl },
1705   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acknowledgment_mode_impl },
1706   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suppl_receipt_info_impl },
1707   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_rn_extensions_impl },
1708   { 0, 0, 0, NULL }
1709 };
1710
1711 static int
1712 dissect_x420_ReceiptFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1713   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1714                               ReceiptFields_set, hf_index, ett_x420_ReceiptFields);
1715
1716   return offset;
1717 }
1718 static int dissect_receipt_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1719   return dissect_x420_ReceiptFields(TRUE, tvb, offset, pinfo, tree, hf_x420_receipt_fields);
1720 }
1721
1722
1723 static const ber_sequence_t OtherNotificationTypeFields_set_of[1] = {
1724   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_OtherNotificationTypeFields_item },
1725 };
1726
1727 static int
1728 dissect_x420_OtherNotificationTypeFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1729   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1730                                  OtherNotificationTypeFields_set_of, hf_index, ett_x420_OtherNotificationTypeFields);
1731
1732   return offset;
1733 }
1734 static int dissect_other_notification_type_fields_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1735   return dissect_x420_OtherNotificationTypeFields(TRUE, tvb, offset, pinfo, tree, hf_x420_other_notification_type_fields);
1736 }
1737
1738
1739 static const value_string x420_T_choice_vals[] = {
1740   {   0, "non-receipt-fields" },
1741   {   1, "receipt-fields" },
1742   {   2, "other-notification-type-fields" },
1743   { 0, NULL }
1744 };
1745
1746 static const ber_choice_t T_choice_choice[] = {
1747   {   0, BER_CLASS_CON, 0, 0, dissect_non_receipt_fields_impl },
1748   {   1, BER_CLASS_CON, 1, 0, dissect_receipt_fields_impl },
1749   {   2, BER_CLASS_CON, 2, 0, dissect_other_notification_type_fields_impl },
1750   { 0, 0, 0, 0, NULL }
1751 };
1752
1753 static int
1754 dissect_x420_T_choice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1755   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1756                                  T_choice_choice, hf_index, ett_x420_T_choice,
1757                                  NULL);
1758
1759   return offset;
1760 }
1761 static int dissect_choice_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1762   return dissect_x420_T_choice(TRUE, tvb, offset, pinfo, tree, hf_x420_choice);
1763 }
1764
1765
1766 static const ber_sequence_t IPN_set[] = {
1767   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_subject_ipm },
1768   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipn_originator_impl },
1769   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipm_intended_recipient_impl },
1770   { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_conversion_eits },
1771   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_extensions_impl },
1772   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_choice_impl },
1773   { 0, 0, 0, NULL }
1774 };
1775
1776 static int
1777 dissect_x420_IPN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1778   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1779                               IPN_set, hf_index, ett_x420_IPN);
1780
1781   return offset;
1782 }
1783 static int dissect_ipn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1784   return dissect_x420_IPN(TRUE, tvb, offset, pinfo, tree, hf_x420_ipn);
1785 }
1786
1787
1788 static const value_string x420_InformationObject_vals[] = {
1789   {   0, "ipm" },
1790   {   1, "ipn" },
1791   { 0, NULL }
1792 };
1793
1794 static const ber_choice_t InformationObject_choice[] = {
1795   {   0, BER_CLASS_CON, 0, 0, dissect_ipm_impl },
1796   {   1, BER_CLASS_CON, 1, 0, dissect_ipn_impl },
1797   { 0, 0, 0, 0, NULL }
1798 };
1799
1800 static int
1801 dissect_x420_InformationObject(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1802   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1803                                  InformationObject_choice, hf_index, ett_x420_InformationObject,
1804                                  NULL);
1805
1806   return offset;
1807 }
1808
1809
1810 static const ber_sequence_t CommonFields_set[] = {
1811   { BER_CLASS_APP, 11, BER_FLAGS_NOOWNTAG, dissect_subject_ipm },
1812   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipn_originator_impl },
1813   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ipm_intended_recipient_impl },
1814   { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_conversion_eits },
1815   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notification_extensions_impl },
1816   { 0, 0, 0, NULL }
1817 };
1818
1819 static int
1820 dissect_x420_CommonFields(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1821   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1822                               CommonFields_set, hf_index, ett_x420_CommonFields);
1823
1824   return offset;
1825 }
1826
1827
1828 static const ber_sequence_t AbsenceAdvice_sequence[] = {
1829   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_advice },
1830   { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_next_available },
1831   { 0, 0, 0, NULL }
1832 };
1833
1834 static int
1835 dissect_x420_AbsenceAdvice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1836   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1837                                    AbsenceAdvice_sequence, hf_index, ett_x420_AbsenceAdvice);
1838
1839   return offset;
1840 }
1841
1842
1843 static const ber_sequence_t ChangeOfAddressAdvice_sequence[] = {
1844   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_new_address_impl },
1845   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_effective_from_impl },
1846   { 0, 0, 0, NULL }
1847 };
1848
1849 static int
1850 dissect_x420_ChangeOfAddressAdvice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1851   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1852                                    ChangeOfAddressAdvice_sequence, hf_index, ett_x420_ChangeOfAddressAdvice);
1853
1854   return offset;
1855 }
1856
1857
1858
1859 static int
1860 dissect_x420_SequenceNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1861   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1862                                   NULL);
1863
1864   return offset;
1865 }
1866 static int dissect_stored_entry_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1867   return dissect_x420_SequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_entry);
1868 }
1869 static int dissect_stored_content_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1870   return dissect_x420_SequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_content);
1871 }
1872 static int dissect_message_entry(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1873   return dissect_x420_SequenceNumber(FALSE, tvb, offset, pinfo, tree, hf_x420_message_entry);
1874 }
1875
1876
1877
1878 static int
1879 dissect_x420_INTEGER_1_MAX(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1880   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1881                                   NULL);
1882
1883   return offset;
1884 }
1885 static int dissect_submitted_body_part_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1886   return dissect_x420_INTEGER_1_MAX(TRUE, tvb, offset, pinfo, tree, hf_x420_submitted_body_part);
1887 }
1888 static int dissect_body_part_number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1889   return dissect_x420_INTEGER_1_MAX(FALSE, tvb, offset, pinfo, tree, hf_x420_body_part_number);
1890 }
1891
1892
1893 static const ber_sequence_t T_stored_body_part_sequence[] = {
1894   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_message_entry },
1895   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_body_part_number },
1896   { 0, 0, 0, NULL }
1897 };
1898
1899 static int
1900 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_) {
1901   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1902                                    T_stored_body_part_sequence, hf_index, ett_x420_T_stored_body_part);
1903
1904   return offset;
1905 }
1906 static int dissect_stored_body_part_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1907   return dissect_x420_T_stored_body_part(TRUE, tvb, offset, pinfo, tree, hf_x420_stored_body_part);
1908 }
1909
1910
1911 static const value_string x420_BodyPartReference_vals[] = {
1912   {   0, "stored-entry" },
1913   {   1, "stored-content" },
1914   {   2, "submitted-body-part" },
1915   {   3, "stored-body-part" },
1916   { 0, NULL }
1917 };
1918
1919 static const ber_choice_t BodyPartReference_choice[] = {
1920   {   0, BER_CLASS_CON, 0, 0, dissect_stored_entry_impl },
1921   {   1, BER_CLASS_CON, 1, 0, dissect_stored_content_impl },
1922   {   2, BER_CLASS_CON, 2, 0, dissect_submitted_body_part_impl },
1923   {   3, BER_CLASS_CON, 3, 0, dissect_stored_body_part_impl },
1924   { 0, 0, 0, 0, NULL }
1925 };
1926
1927 static int
1928 dissect_x420_BodyPartReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1929   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1930                                  BodyPartReference_choice, hf_index, ett_x420_BodyPartReference,
1931                                  NULL);
1932
1933   return offset;
1934 }
1935 static int dissect_BodyPartReferences_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1936   return dissect_x420_BodyPartReference(FALSE, tvb, offset, pinfo, tree, hf_x420_BodyPartReferences_item);
1937 }
1938
1939
1940 static const ber_sequence_t BodyPartReferences_sequence_of[1] = {
1941   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BodyPartReferences_item },
1942 };
1943
1944 static int
1945 dissect_x420_BodyPartReferences(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1946   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1947                                       BodyPartReferences_sequence_of, hf_index, ett_x420_BodyPartReferences);
1948
1949   return offset;
1950 }
1951 static int dissect_assembly_instructions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1952   return dissect_x420_BodyPartReferences(TRUE, tvb, offset, pinfo, tree, hf_x420_assembly_instructions);
1953 }
1954
1955
1956 static const ber_sequence_t IPMAssemblyInstructions_set[] = {
1957   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_assembly_instructions_impl },
1958   { 0, 0, 0, NULL }
1959 };
1960
1961 static int
1962 dissect_x420_IPMAssemblyInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1963   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
1964                               IPMAssemblyInstructions_set, hf_index, ett_x420_IPMAssemblyInstructions);
1965
1966   return offset;
1967 }
1968
1969
1970
1971 static int
1972 dissect_x420_OriginatingUA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1973   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
1974                                             pinfo, tree, tvb, offset, hf_index,
1975                                             NULL);
1976
1977   return offset;
1978 }
1979
1980 /*--- PDUs ---*/
1981
1982 static void dissect_OriginatingUA_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1983   dissect_x420_OriginatingUA(FALSE, tvb, 0, pinfo, tree, hf_x420_OriginatingUA_PDU);
1984 }
1985
1986
1987 /*--- End of included file: packet-x420-fn.c ---*/
1988
1989
1990 /*
1991 * Dissect X420 PDUs inside a PPDU.
1992 */
1993 static void
1994 dissect_x420(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
1995 {
1996         int offset = 0;
1997         proto_item *item=NULL;
1998         proto_tree *tree=NULL;
1999         int (*x420_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) = NULL;
2000
2001         if(parent_tree){
2002                 item = proto_tree_add_item(parent_tree, proto_x420, tvb, 0, -1, FALSE);
2003                 tree = proto_item_add_subtree(item, ett_x420);
2004         }
2005         if (check_col(pinfo->cinfo, COL_PROTOCOL))
2006                 col_set_str(pinfo->cinfo, COL_PROTOCOL, "X420");
2007         if (check_col(pinfo->cinfo, COL_INFO))
2008           col_add_str(pinfo->cinfo, COL_INFO, "Interpersonal Message");
2009
2010         dissect_x420_InformationObject(TRUE, tvb, offset, pinfo , tree, -1);
2011 }
2012
2013
2014 /*--- proto_register_x420 -------------------------------------------*/
2015 void proto_register_x420(void) {
2016
2017   /* List of fields */
2018   static hf_register_info hf[] =
2019   {
2020
2021 /*--- Included file: packet-x420-hfarr.c ---*/
2022
2023     { &hf_x420_OriginatingUA_PDU,
2024       { "OriginatingUA", "x420.OriginatingUA",
2025         FT_STRING, BASE_NONE, NULL, 0,
2026         "OriginatingUA", HFILL }},
2027     { &hf_x420_ipm,
2028       { "ipm", "x420.ipm",
2029         FT_NONE, BASE_NONE, NULL, 0,
2030         "InformationObject/ipm", HFILL }},
2031     { &hf_x420_ipn,
2032       { "ipn", "x420.ipn",
2033         FT_NONE, BASE_NONE, NULL, 0,
2034         "InformationObject/ipn", HFILL }},
2035     { &hf_x420_heading,
2036       { "heading", "x420.heading",
2037         FT_NONE, BASE_NONE, NULL, 0,
2038         "IPM/heading", HFILL }},
2039     { &hf_x420_body,
2040       { "body", "x420.body",
2041         FT_UINT32, BASE_DEC, NULL, 0,
2042         "IPM/body", HFILL }},
2043     { &hf_x420_type,
2044       { "type", "x420.type",
2045         FT_STRING, BASE_NONE, NULL, 0,
2046         "IPMSExtension/type", HFILL }},
2047     { &hf_x420_value,
2048       { "value", "x420.value",
2049         FT_NONE, BASE_NONE, NULL, 0,
2050         "IPMSExtension/value", HFILL }},
2051     { &hf_x420_this_IPM,
2052       { "this-IPM", "x420.this_IPM",
2053         FT_NONE, BASE_NONE, NULL, 0,
2054         "Heading/this-IPM", HFILL }},
2055     { &hf_x420_originator,
2056       { "originator", "x420.originator",
2057         FT_NONE, BASE_NONE, NULL, 0,
2058         "Heading/originator", HFILL }},
2059     { &hf_x420_authorizing_users,
2060       { "authorizing-users", "x420.authorizing_users",
2061         FT_UINT32, BASE_DEC, NULL, 0,
2062         "Heading/authorizing-users", HFILL }},
2063     { &hf_x420_primary_recipients,
2064       { "primary-recipients", "x420.primary_recipients",
2065         FT_UINT32, BASE_DEC, NULL, 0,
2066         "Heading/primary-recipients", HFILL }},
2067     { &hf_x420_copy_recipients,
2068       { "copy-recipients", "x420.copy_recipients",
2069         FT_UINT32, BASE_DEC, NULL, 0,
2070         "Heading/copy-recipients", HFILL }},
2071     { &hf_x420_blind_copy_recipients,
2072       { "blind-copy-recipients", "x420.blind_copy_recipients",
2073         FT_UINT32, BASE_DEC, NULL, 0,
2074         "Heading/blind-copy-recipients", HFILL }},
2075     { &hf_x420_replied_to_IPM,
2076       { "replied-to-IPM", "x420.replied_to_IPM",
2077         FT_NONE, BASE_NONE, NULL, 0,
2078         "Heading/replied-to-IPM", HFILL }},
2079     { &hf_x420_obsoleted_IPMs,
2080       { "obsoleted-IPMs", "x420.obsoleted_IPMs",
2081         FT_UINT32, BASE_DEC, NULL, 0,
2082         "Heading/obsoleted-IPMs", HFILL }},
2083     { &hf_x420_related_IPMs,
2084       { "related-IPMs", "x420.related_IPMs",
2085         FT_UINT32, BASE_DEC, NULL, 0,
2086         "Heading/related-IPMs", HFILL }},
2087     { &hf_x420_subject,
2088       { "subject", "x420.subject",
2089         FT_STRING, BASE_NONE, NULL, 0,
2090         "Heading/subject", HFILL }},
2091     { &hf_x420_expiry_time,
2092       { "expiry-time", "x420.expiry_time",
2093         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2094         "Heading/expiry-time", HFILL }},
2095     { &hf_x420_reply_time,
2096       { "reply-time", "x420.reply_time",
2097         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2098         "Heading/reply-time", HFILL }},
2099     { &hf_x420_reply_recipients,
2100       { "reply-recipients", "x420.reply_recipients",
2101         FT_UINT32, BASE_DEC, NULL, 0,
2102         "Heading/reply-recipients", HFILL }},
2103     { &hf_x420_importance,
2104       { "importance", "x420.importance",
2105         FT_UINT32, BASE_DEC, VALS(x420_ImportanceField_vals), 0,
2106         "Heading/importance", HFILL }},
2107     { &hf_x420_sensitivity,
2108       { "sensitivity", "x420.sensitivity",
2109         FT_UINT32, BASE_DEC, VALS(x420_SensitivityField_vals), 0,
2110         "Heading/sensitivity", HFILL }},
2111     { &hf_x420_auto_forwarded,
2112       { "auto-forwarded", "x420.auto_forwarded",
2113         FT_BOOLEAN, 8, NULL, 0,
2114         "Heading/auto-forwarded", HFILL }},
2115     { &hf_x420_extensions,
2116       { "extensions", "x420.extensions",
2117         FT_UINT32, BASE_DEC, NULL, 0,
2118         "Heading/extensions", HFILL }},
2119     { &hf_x420_user,
2120       { "user", "x420.user",
2121         FT_NONE, BASE_NONE, NULL, 0,
2122         "IPMIdentifier/user", HFILL }},
2123     { &hf_x420_user_relative_identifier,
2124       { "user-relative-identifier", "x420.user_relative_identifier",
2125         FT_STRING, BASE_NONE, NULL, 0,
2126         "IPMIdentifier/user-relative-identifier", HFILL }},
2127     { &hf_x420_recipient,
2128       { "recipient", "x420.recipient",
2129         FT_NONE, BASE_NONE, NULL, 0,
2130         "RecipientSpecifier/recipient", HFILL }},
2131     { &hf_x420_notification_requests,
2132       { "notification-requests", "x420.notification_requests",
2133         FT_BYTES, BASE_HEX, NULL, 0,
2134         "RecipientSpecifier/notification-requests", HFILL }},
2135     { &hf_x420_reply_requested,
2136       { "reply-requested", "x420.reply_requested",
2137         FT_BOOLEAN, 8, NULL, 0,
2138         "RecipientSpecifier/reply-requested", HFILL }},
2139     { &hf_x420_recipient_extensions,
2140       { "recipient-extensions", "x420.recipient_extensions",
2141         FT_UINT32, BASE_DEC, NULL, 0,
2142         "RecipientSpecifier/recipient-extensions", HFILL }},
2143     { &hf_x420_formal_name,
2144       { "formal-name", "x420.formal_name",
2145         FT_NONE, BASE_NONE, NULL, 0,
2146         "ORDescriptor/formal-name", HFILL }},
2147     { &hf_x420_free_form_name,
2148       { "free-form-name", "x420.free_form_name",
2149         FT_STRING, BASE_NONE, NULL, 0,
2150         "ORDescriptor/free-form-name", HFILL }},
2151     { &hf_x420_telephone_number,
2152       { "telephone-number", "x420.telephone_number",
2153         FT_STRING, BASE_NONE, NULL, 0,
2154         "ORDescriptor/telephone-number", HFILL }},
2155     { &hf_x420_RecipientExtensionsField_item,
2156       { "Item", "x420.RecipientExtensionsField_item",
2157         FT_NONE, BASE_NONE, NULL, 0,
2158         "RecipientExtensionsField/_item", HFILL }},
2159     { &hf_x420_AuthorizingUsersField_item,
2160       { "Item", "x420.AuthorizingUsersField_item",
2161         FT_NONE, BASE_NONE, NULL, 0,
2162         "AuthorizingUsersField/_item", HFILL }},
2163     { &hf_x420_PrimaryRecipientsField_item,
2164       { "Item", "x420.PrimaryRecipientsField_item",
2165         FT_NONE, BASE_NONE, NULL, 0,
2166         "PrimaryRecipientsField/_item", HFILL }},
2167     { &hf_x420_CopyRecipientsField_item,
2168       { "Item", "x420.CopyRecipientsField_item",
2169         FT_NONE, BASE_NONE, NULL, 0,
2170         "CopyRecipientsField/_item", HFILL }},
2171     { &hf_x420_BlindCopyRecipientsField_item,
2172       { "Item", "x420.BlindCopyRecipientsField_item",
2173         FT_NONE, BASE_NONE, NULL, 0,
2174         "BlindCopyRecipientsField/_item", HFILL }},
2175     { &hf_x420_ObsoletedIPMsField_item,
2176       { "Item", "x420.ObsoletedIPMsField_item",
2177         FT_NONE, BASE_NONE, NULL, 0,
2178         "ObsoletedIPMsField/_item", HFILL }},
2179     { &hf_x420_RelatedIPMsField_item,
2180       { "Item", "x420.RelatedIPMsField_item",
2181         FT_NONE, BASE_NONE, NULL, 0,
2182         "RelatedIPMsField/_item", HFILL }},
2183     { &hf_x420_ReplyRecipientsField_item,
2184       { "Item", "x420.ReplyRecipientsField_item",
2185         FT_NONE, BASE_NONE, NULL, 0,
2186         "ReplyRecipientsField/_item", HFILL }},
2187     { &hf_x420_ExtensionsField_item,
2188       { "Item", "x420.ExtensionsField_item",
2189         FT_NONE, BASE_NONE, NULL, 0,
2190         "ExtensionsField/_item", HFILL }},
2191     { &hf_x420_Body_item,
2192       { "Item", "x420.Body_item",
2193         FT_UINT32, BASE_DEC, VALS(x420_BodyPart_vals), 0,
2194         "Body/_item", HFILL }},
2195     { &hf_x420_ia5_text,
2196       { "ia5-text", "x420.ia5_text",
2197         FT_NONE, BASE_NONE, NULL, 0,
2198         "BodyPart/ia5-text", HFILL }},
2199     { &hf_x420_g3_facsimile,
2200       { "g3-facsimile", "x420.g3_facsimile",
2201         FT_NONE, BASE_NONE, NULL, 0,
2202         "BodyPart/g3-facsimile", HFILL }},
2203     { &hf_x420_g4_class1,
2204       { "g4-class1", "x420.g4_class1",
2205         FT_UINT32, BASE_DEC, NULL, 0,
2206         "BodyPart/g4-class1", HFILL }},
2207     { &hf_x420_teletex,
2208       { "teletex", "x420.teletex",
2209         FT_NONE, BASE_NONE, NULL, 0,
2210         "BodyPart/teletex", HFILL }},
2211     { &hf_x420_videotex,
2212       { "videotex", "x420.videotex",
2213         FT_NONE, BASE_NONE, NULL, 0,
2214         "BodyPart/videotex", HFILL }},
2215     { &hf_x420_encrypted,
2216       { "encrypted", "x420.encrypted",
2217         FT_NONE, BASE_NONE, NULL, 0,
2218         "BodyPart/encrypted", HFILL }},
2219     { &hf_x420_message,
2220       { "message", "x420.message",
2221         FT_NONE, BASE_NONE, NULL, 0,
2222         "BodyPart/message", HFILL }},
2223     { &hf_x420_mixed_mode,
2224       { "mixed-mode", "x420.mixed_mode",
2225         FT_UINT32, BASE_DEC, NULL, 0,
2226         "BodyPart/mixed-mode", HFILL }},
2227     { &hf_x420_bilaterally_defined,
2228       { "bilaterally-defined", "x420.bilaterally_defined",
2229         FT_BYTES, BASE_HEX, NULL, 0,
2230         "BodyPart/bilaterally-defined", HFILL }},
2231     { &hf_x420_nationally_defined,
2232       { "nationally-defined", "x420.nationally_defined",
2233         FT_NONE, BASE_NONE, NULL, 0,
2234         "BodyPart/nationally-defined", HFILL }},
2235     { &hf_x420_extended,
2236       { "extended", "x420.extended",
2237         FT_NONE, BASE_NONE, NULL, 0,
2238         "BodyPart/extended", HFILL }},
2239     { &hf_x420_extended_parameters,
2240       { "parameters", "x420.parameters",
2241         FT_STRING, BASE_NONE, NULL, 0,
2242         "ExtendedBodyPart/parameters", HFILL }},
2243     { &hf_x420_extended_data,
2244       { "data", "x420.data",
2245         FT_NONE, BASE_NONE, NULL, 0,
2246         "ExtendedBodyPart/data", HFILL }},
2247     { &hf_x420_ia5text_parameters,
2248       { "parameters", "x420.parameters",
2249         FT_NONE, BASE_NONE, NULL, 0,
2250         "IA5TextBodyPart/parameters", HFILL }},
2251     { &hf_x420_ia5text_data,
2252       { "data", "x420.data",
2253         FT_STRING, BASE_NONE, NULL, 0,
2254         "IA5TextBodyPart/data", HFILL }},
2255     { &hf_x420_repertoire,
2256       { "repertoire", "x420.repertoire",
2257         FT_UINT32, BASE_DEC, VALS(x420_Repertoire_vals), 0,
2258         "IA5TextParameters/repertoire", HFILL }},
2259     { &hf_x420_g3facsimile_parameters,
2260       { "parameters", "x420.parameters",
2261         FT_NONE, BASE_NONE, NULL, 0,
2262         "G3FacsimileBodyPart/parameters", HFILL }},
2263     { &hf_x420_g3facsimile_data,
2264       { "data", "x420.data",
2265         FT_UINT32, BASE_DEC, NULL, 0,
2266         "G3FacsimileBodyPart/data", HFILL }},
2267     { &hf_x420_number_of_pages,
2268       { "number-of-pages", "x420.number_of_pages",
2269         FT_INT32, BASE_DEC, NULL, 0,
2270         "", HFILL }},
2271     { &hf_x420_g3facsimile_non_basic_parameters,
2272       { "non-basic-parameters", "x420.non_basic_parameters",
2273         FT_BYTES, BASE_HEX, NULL, 0,
2274         "G3FacsimileParameters/non-basic-parameters", HFILL }},
2275     { &hf_x420_G3FacsimileData_item,
2276       { "Item", "x420.G3FacsimileData_item",
2277         FT_BYTES, BASE_HEX, NULL, 0,
2278         "G3FacsimileData/_item", HFILL }},
2279     { &hf_x420_G4Class1BodyPart_item,
2280       { "Item", "x420.G4Class1BodyPart_item",
2281         FT_NONE, BASE_NONE, NULL, 0,
2282         "G4Class1BodyPart/_item", HFILL }},
2283     { &hf_x420_MixedModeBodyPart_item,
2284       { "Item", "x420.MixedModeBodyPart_item",
2285         FT_NONE, BASE_NONE, NULL, 0,
2286         "MixedModeBodyPart/_item", HFILL }},
2287     { &hf_x420_teletex_parameters,
2288       { "parameters", "x420.parameters",
2289         FT_NONE, BASE_NONE, NULL, 0,
2290         "TeletexBodyPart/parameters", HFILL }},
2291     { &hf_x420_teletex_data,
2292       { "data", "x420.data",
2293         FT_UINT32, BASE_DEC, NULL, 0,
2294         "TeletexBodyPart/data", HFILL }},
2295     { &hf_x420_telex_compatible,
2296       { "telex-compatible", "x420.telex_compatible",
2297         FT_BOOLEAN, 8, NULL, 0,
2298         "TeletexParameters/telex-compatible", HFILL }},
2299     { &hf_x420_teletex_non_basic_parameters,
2300       { "non-basic-parameters", "x420.non_basic_parameters",
2301         FT_NONE, BASE_NONE, NULL, 0,
2302         "TeletexParameters/non-basic-parameters", HFILL }},
2303     { &hf_x420_TeletexData_item,
2304       { "Item", "x420.TeletexData_item",
2305         FT_STRING, BASE_NONE, NULL, 0,
2306         "TeletexData/_item", HFILL }},
2307     { &hf_x420_videotex_parameters,
2308       { "parameters", "x420.parameters",
2309         FT_NONE, BASE_NONE, NULL, 0,
2310         "VideotexBodyPart/parameters", HFILL }},
2311     { &hf_x420_videotex_data,
2312       { "data", "x420.data",
2313         FT_STRING, BASE_NONE, NULL, 0,
2314         "VideotexBodyPart/data", HFILL }},
2315     { &hf_x420_syntax,
2316       { "syntax", "x420.syntax",
2317         FT_INT32, BASE_DEC, VALS(x420_VideotexSyntax_vals), 0,
2318         "VideotexParameters/syntax", HFILL }},
2319     { &hf_x420_encrypted_parameters,
2320       { "parameters", "x420.parameters",
2321         FT_NONE, BASE_NONE, NULL, 0,
2322         "EncryptedBodyPart/parameters", HFILL }},
2323     { &hf_x420_encrypted_data,
2324       { "data", "x420.data",
2325         FT_BYTES, BASE_HEX, NULL, 0,
2326         "EncryptedBodyPart/data", HFILL }},
2327     { &hf_x420_algorithm_identifier,
2328       { "algorithm-identifier", "x420.algorithm_identifier",
2329         FT_NONE, BASE_NONE, NULL, 0,
2330         "EncryptedParameters/algorithm-identifier", HFILL }},
2331     { &hf_x420_originator_certificates,
2332       { "originator-certificates", "x420.originator_certificates",
2333         FT_UINT32, BASE_DEC, NULL, 0,
2334         "EncryptedParameters/originator-certificates", HFILL }},
2335     { &hf_x420_message_parameters,
2336       { "parameters", "x420.parameters",
2337         FT_NONE, BASE_NONE, NULL, 0,
2338         "MessageBodyPart/parameters", HFILL }},
2339     { &hf_x420_message_data,
2340       { "data", "x420.data",
2341         FT_NONE, BASE_NONE, NULL, 0,
2342         "MessageBodyPart/data", HFILL }},
2343     { &hf_x420_delivery_time,
2344       { "delivery-time", "x420.delivery_time",
2345         FT_STRING, BASE_NONE, NULL, 0,
2346         "MessageParameters/delivery-time", HFILL }},
2347     { &hf_x420_delivery_envelope,
2348       { "delivery-envelope", "x420.delivery_envelope",
2349         FT_NONE, BASE_NONE, NULL, 0,
2350         "MessageParameters/delivery-envelope", HFILL }},
2351     { &hf_x420_subject_ipm,
2352       { "subject-ipm", "x420.subject_ipm",
2353         FT_NONE, BASE_NONE, NULL, 0,
2354         "", HFILL }},
2355     { &hf_x420_ipn_originator,
2356       { "ipn-originator", "x420.ipn_originator",
2357         FT_NONE, BASE_NONE, NULL, 0,
2358         "", HFILL }},
2359     { &hf_x420_ipm_intended_recipient,
2360       { "ipm-intended-recipient", "x420.ipm_intended_recipient",
2361         FT_NONE, BASE_NONE, NULL, 0,
2362         "", HFILL }},
2363     { &hf_x420_conversion_eits,
2364       { "conversion-eits", "x420.conversion_eits",
2365         FT_NONE, BASE_NONE, NULL, 0,
2366         "", HFILL }},
2367     { &hf_x420_notification_extensions,
2368       { "notification-extensions", "x420.notification_extensions",
2369         FT_UINT32, BASE_DEC, NULL, 0,
2370         "", HFILL }},
2371     { &hf_x420_choice,
2372       { "choice", "x420.choice",
2373         FT_UINT32, BASE_DEC, VALS(x420_T_choice_vals), 0,
2374         "IPN/choice", HFILL }},
2375     { &hf_x420_non_receipt_fields,
2376       { "non-receipt-fields", "x420.non_receipt_fields",
2377         FT_NONE, BASE_NONE, NULL, 0,
2378         "IPN/choice/non-receipt-fields", HFILL }},
2379     { &hf_x420_receipt_fields,
2380       { "receipt-fields", "x420.receipt_fields",
2381         FT_NONE, BASE_NONE, NULL, 0,
2382         "IPN/choice/receipt-fields", HFILL }},
2383     { &hf_x420_other_notification_type_fields,
2384       { "other-notification-type-fields", "x420.other_notification_type_fields",
2385         FT_UINT32, BASE_DEC, NULL, 0,
2386         "IPN/choice/other-notification-type-fields", HFILL }},
2387     { &hf_x420_non_receipt_reason,
2388       { "non-receipt-reason", "x420.non_receipt_reason",
2389         FT_UINT32, BASE_DEC, VALS(x420_NonReceiptReasonField_vals), 0,
2390         "NonReceiptFields/non-receipt-reason", HFILL }},
2391     { &hf_x420_discard_reason,
2392       { "discard-reason", "x420.discard_reason",
2393         FT_UINT32, BASE_DEC, VALS(x420_DiscardReasonField_vals), 0,
2394         "NonReceiptFields/discard-reason", HFILL }},
2395     { &hf_x420_auto_forward_comment,
2396       { "auto-forward-comment", "x420.auto_forward_comment",
2397         FT_STRING, BASE_NONE, NULL, 0,
2398         "NonReceiptFields/auto-forward-comment", HFILL }},
2399     { &hf_x420_returned_ipm,
2400       { "returned-ipm", "x420.returned_ipm",
2401         FT_NONE, BASE_NONE, NULL, 0,
2402         "NonReceiptFields/returned-ipm", HFILL }},
2403     { &hf_x420_nrn_extensions,
2404       { "nrn-extensions", "x420.nrn_extensions",
2405         FT_UINT32, BASE_DEC, NULL, 0,
2406         "NonReceiptFields/nrn-extensions", HFILL }},
2407     { &hf_x420_receipt_time,
2408       { "receipt-time", "x420.receipt_time",
2409         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2410         "ReceiptFields/receipt-time", HFILL }},
2411     { &hf_x420_acknowledgment_mode,
2412       { "acknowledgment-mode", "x420.acknowledgment_mode",
2413         FT_UINT32, BASE_DEC, VALS(x420_AcknowledgmentModeField_vals), 0,
2414         "ReceiptFields/acknowledgment-mode", HFILL }},
2415     { &hf_x420_suppl_receipt_info,
2416       { "suppl-receipt-info", "x420.suppl_receipt_info",
2417         FT_STRING, BASE_NONE, NULL, 0,
2418         "ReceiptFields/suppl-receipt-info", HFILL }},
2419     { &hf_x420_rn_extensions,
2420       { "rn-extensions", "x420.rn_extensions",
2421         FT_UINT32, BASE_DEC, NULL, 0,
2422         "ReceiptFields/rn-extensions", HFILL }},
2423     { &hf_x420_NotificationExtensionsField_item,
2424       { "Item", "x420.NotificationExtensionsField_item",
2425         FT_NONE, BASE_NONE, NULL, 0,
2426         "NotificationExtensionsField/_item", HFILL }},
2427     { &hf_x420_NRNExtensionsField_item,
2428       { "Item", "x420.NRNExtensionsField_item",
2429         FT_NONE, BASE_NONE, NULL, 0,
2430         "NRNExtensionsField/_item", HFILL }},
2431     { &hf_x420_RNExtensionsField_item,
2432       { "Item", "x420.RNExtensionsField_item",
2433         FT_NONE, BASE_NONE, NULL, 0,
2434         "RNExtensionsField/_item", HFILL }},
2435     { &hf_x420_OtherNotificationTypeFields_item,
2436       { "Item", "x420.OtherNotificationTypeFields_item",
2437         FT_NONE, BASE_NONE, NULL, 0,
2438         "OtherNotificationTypeFields/_item", HFILL }},
2439     { &hf_x420_advice,
2440       { "advice", "x420.advice",
2441         FT_UINT32, BASE_DEC, VALS(x420_BodyPart_vals), 0,
2442         "AbsenceAdvice/advice", HFILL }},
2443     { &hf_x420_next_available,
2444       { "next-available", "x420.next_available",
2445         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2446         "AbsenceAdvice/next-available", HFILL }},
2447     { &hf_x420_new_address,
2448       { "new-address", "x420.new_address",
2449         FT_NONE, BASE_NONE, NULL, 0,
2450         "ChangeOfAddressAdvice/new-address", HFILL }},
2451     { &hf_x420_effective_from,
2452       { "effective-from", "x420.effective_from",
2453         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2454         "ChangeOfAddressAdvice/effective-from", HFILL }},
2455     { &hf_x420_assembly_instructions,
2456       { "assembly-instructions", "x420.assembly_instructions",
2457         FT_UINT32, BASE_DEC, NULL, 0,
2458         "IPMAssemblyInstructions/assembly-instructions", HFILL }},
2459     { &hf_x420_BodyPartReferences_item,
2460       { "Item", "x420.BodyPartReferences_item",
2461         FT_UINT32, BASE_DEC, VALS(x420_BodyPartReference_vals), 0,
2462         "BodyPartReferences/_item", HFILL }},
2463     { &hf_x420_stored_entry,
2464       { "stored-entry", "x420.stored_entry",
2465         FT_INT32, BASE_DEC, NULL, 0,
2466         "BodyPartReference/stored-entry", HFILL }},
2467     { &hf_x420_stored_content,
2468       { "stored-content", "x420.stored_content",
2469         FT_INT32, BASE_DEC, NULL, 0,
2470         "BodyPartReference/stored-content", HFILL }},
2471     { &hf_x420_submitted_body_part,
2472       { "submitted-body-part", "x420.submitted_body_part",
2473         FT_UINT32, BASE_DEC, NULL, 0,
2474         "BodyPartReference/submitted-body-part", HFILL }},
2475     { &hf_x420_stored_body_part,
2476       { "stored-body-part", "x420.stored_body_part",
2477         FT_NONE, BASE_NONE, NULL, 0,
2478         "BodyPartReference/stored-body-part", HFILL }},
2479     { &hf_x420_message_entry,
2480       { "message-entry", "x420.message_entry",
2481         FT_INT32, BASE_DEC, NULL, 0,
2482         "BodyPartReference/stored-body-part/message-entry", HFILL }},
2483     { &hf_x420_body_part_number,
2484       { "body-part-number", "x420.body_part_number",
2485         FT_UINT32, BASE_DEC, NULL, 0,
2486         "BodyPartReference/stored-body-part/body-part-number", HFILL }},
2487     { &hf_x420_NotificationRequests_rn,
2488       { "rn", "x420.rn",
2489         FT_BOOLEAN, 8, NULL, 0x80,
2490         "", HFILL }},
2491     { &hf_x420_NotificationRequests_nrn,
2492       { "nrn", "x420.nrn",
2493         FT_BOOLEAN, 8, NULL, 0x40,
2494         "", HFILL }},
2495     { &hf_x420_NotificationRequests_ipm_return,
2496       { "ipm-return", "x420.ipm-return",
2497         FT_BOOLEAN, 8, NULL, 0x20,
2498         "", HFILL }},
2499     { &hf_x420_NotificationRequests_an_supported,
2500       { "an-supported", "x420.an-supported",
2501         FT_BOOLEAN, 8, NULL, 0x10,
2502         "", HFILL }},
2503     { &hf_x420_NotificationRequests_suppress_an,
2504       { "suppress-an", "x420.suppress-an",
2505         FT_BOOLEAN, 8, NULL, 0x08,
2506         "", HFILL }},
2507
2508 /*--- End of included file: packet-x420-hfarr.c ---*/
2509
2510   };
2511
2512   /* List of subtrees */
2513   static gint *ett[] = {
2514     &ett_x420,
2515
2516 /*--- Included file: packet-x420-ettarr.c ---*/
2517
2518     &ett_x420_InformationObject,
2519     &ett_x420_IPM,
2520     &ett_x420_IPMSExtension,
2521     &ett_x420_Heading,
2522     &ett_x420_IPMIdentifier,
2523     &ett_x420_RecipientSpecifier,
2524     &ett_x420_ORDescriptor,
2525     &ett_x420_NotificationRequests,
2526     &ett_x420_RecipientExtensionsField,
2527     &ett_x420_AuthorizingUsersField,
2528     &ett_x420_PrimaryRecipientsField,
2529     &ett_x420_CopyRecipientsField,
2530     &ett_x420_BlindCopyRecipientsField,
2531     &ett_x420_ObsoletedIPMsField,
2532     &ett_x420_RelatedIPMsField,
2533     &ett_x420_ReplyRecipientsField,
2534     &ett_x420_ExtensionsField,
2535     &ett_x420_Body,
2536     &ett_x420_BodyPart,
2537     &ett_x420_ExtendedBodyPart,
2538     &ett_x420_IA5TextBodyPart,
2539     &ett_x420_IA5TextParameters,
2540     &ett_x420_G3FacsimileBodyPart,
2541     &ett_x420_G3FacsimileParameters,
2542     &ett_x420_G3FacsimileData,
2543     &ett_x420_G4Class1BodyPart,
2544     &ett_x420_MixedModeBodyPart,
2545     &ett_x420_TeletexBodyPart,
2546     &ett_x420_TeletexParameters,
2547     &ett_x420_TeletexData,
2548     &ett_x420_VideotexBodyPart,
2549     &ett_x420_VideotexParameters,
2550     &ett_x420_EncryptedBodyPart,
2551     &ett_x420_EncryptedParameters,
2552     &ett_x420_MessageBodyPart,
2553     &ett_x420_MessageParameters,
2554     &ett_x420_IPN,
2555     &ett_x420_T_choice,
2556     &ett_x420_CommonFields,
2557     &ett_x420_NonReceiptFields,
2558     &ett_x420_ReceiptFields,
2559     &ett_x420_NotificationExtensionsField,
2560     &ett_x420_NRNExtensionsField,
2561     &ett_x420_RNExtensionsField,
2562     &ett_x420_OtherNotificationTypeFields,
2563     &ett_x420_AbsenceAdvice,
2564     &ett_x420_ChangeOfAddressAdvice,
2565     &ett_x420_IPMAssemblyInstructions,
2566     &ett_x420_BodyPartReferences,
2567     &ett_x420_BodyPartReference,
2568     &ett_x420_T_stored_body_part,
2569
2570 /*--- End of included file: packet-x420-ettarr.c ---*/
2571
2572   };
2573
2574   /* Register protocol */
2575   proto_x420 = proto_register_protocol(PNAME, PSNAME, PFNAME);
2576   register_dissector("x420", dissect_x420, proto_x420);
2577   /* Register fields and subtrees */
2578   proto_register_field_array(proto_x420, hf, array_length(hf));
2579   proto_register_subtree_array(ett, array_length(ett));
2580
2581 }
2582
2583
2584 /*--- proto_reg_handoff_x420 --- */
2585 void proto_reg_handoff_x420(void) {
2586
2587
2588 /*--- Included file: packet-x420-dis-tab.c ---*/
2589
2590   register_ber_oid_dissector("1.2.826.0.1004.10.1.1", dissect_OriginatingUA_PDU, proto_x420, "nexor-originating-ua");
2591
2592
2593 /*--- End of included file: packet-x420-dis-tab.c ---*/
2594
2595
2596   register_ber_oid_dissector("2.6.1.10.0", dissect_x420, proto_x420, "InterPersonal Message (1984)");
2597   register_ber_oid_dissector("2.6.1.10.1", dissect_x420, proto_x420, "InterPersonal Message (1988)");
2598   register_ber_oid_dissector("1.3.26.0.4406.0.4.1", dissect_x420, proto_x420, "Military Message");
2599
2600 }