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