Better split between dissectors and fixes for s4406 SEQ OF defined extensions
[obnox/wireshark/wip.git] / epan / dissectors / packet-s4406.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
3 /* ./packet-s4406.c                                                           */
4 /* ../../tools/asn2eth.py -X -b -e -p s4406 -c s4406.cnf -s packet-s4406-template s4406.asn */
5
6 /* Input file: packet-s4406-template.c */
7
8 #line 1 "packet-s4406-template.c"
9 /* packet-s4406.c
10  * Routines for STANAG 4406 (X.400 Military Message Extensions)  packet dissection
11  * Graeme Lunt 2005
12  *
13  * $Id$
14  *
15  * Ethereal - Network traffic analyzer
16  * By Gerald Combs <gerald@ethereal.com>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/conversation.h>
41
42 #include <stdio.h>
43 #include <string.h>
44
45 #include "packet-ber.h"
46
47 #include "packet-x509if.h"
48
49 #include "packet-s4406.h"
50 #include "packet-x411.h" 
51 #include "packet-x420.h" 
52
53 #define PNAME  "STANAG 4406 Military Message"
54 #define PSNAME "STANAG 4406"
55 #define PFNAME "s4406"
56
57 /* Initialize the protocol and registered fields */
58 int proto_s4406 = -1;
59
60
61 /*--- Included file: packet-s4406-hf.c ---*/
62 #line 1 "packet-s4406-hf.c"
63 static int hf_s4406_InformationObject_PDU = -1;   /* InformationObject */
64 static int hf_s4406_MMMessageData_PDU = -1;       /* MMMessageData */
65 static int hf_s4406_MMMessageParameters_PDU = -1;  /* MMMessageParameters */
66 static int hf_s4406_ExemptedAddressSeq_PDU = -1;  /* ExemptedAddressSeq */
67 static int hf_s4406_ExemptedAddress_PDU = -1;     /* ExemptedAddress */
68 static int hf_s4406_ExtendedAuthorisationInfo_PDU = -1;  /* ExtendedAuthorisationInfo */
69 static int hf_s4406_DistributionCodes_PDU = -1;   /* DistributionCodes */
70 static int hf_s4406_HandlingInstructions_PDU = -1;  /* HandlingInstructions */
71 static int hf_s4406_MessageInstructions_PDU = -1;  /* MessageInstructions */
72 static int hf_s4406_CodressMessage_PDU = -1;      /* CodressMessage */
73 static int hf_s4406_OriginatorReference_PDU = -1;  /* OriginatorReference */
74 static int hf_s4406_PrimaryPrecedence_PDU = -1;   /* PrimaryPrecedence */
75 static int hf_s4406_CopyPrecedence_PDU = -1;      /* CopyPrecedence */
76 static int hf_s4406_MessageType_PDU = -1;         /* MessageType */
77 static int hf_s4406_AddressListDesignatorSeq_PDU = -1;  /* AddressListDesignatorSeq */
78 static int hf_s4406_AddressListDesignator_PDU = -1;  /* AddressListDesignator */
79 static int hf_s4406_OtherRecipientDesignatorSeq_PDU = -1;  /* OtherRecipientDesignatorSeq */
80 static int hf_s4406_OtherRecipientDesignator_PDU = -1;  /* OtherRecipientDesignator */
81 static int hf_s4406_PilotInformationSeq_PDU = -1;  /* PilotInformationSeq */
82 static int hf_s4406_PilotInformation_PDU = -1;    /* PilotInformation */
83 static int hf_s4406_Acp127MessageIdentifier_PDU = -1;  /* Acp127MessageIdentifier */
84 static int hf_s4406_OriginatorPlad_PDU = -1;      /* OriginatorPlad */
85 static int hf_s4406_SecurityInformationLabels_PDU = -1;  /* SecurityInformationLabels */
86 static int hf_s4406_PriorityLevelQualifier_PDU = -1;  /* PriorityLevelQualifier */
87 static int hf_s4406_mm = -1;                      /* IPM */
88 static int hf_s4406_mn = -1;                      /* IPN */
89 static int hf_s4406_sics = -1;                    /* SEQUENCE_OF_Sic */
90 static int hf_s4406_sics_item = -1;               /* Sic */
91 static int hf_s4406_dist_Extensions = -1;         /* SEQUENCE_OF_DistributionExtensionField */
92 static int hf_s4406_dist_Extensions_item = -1;    /* DistributionExtensionField */
93 static int hf_s4406_dist_type = -1;               /* OBJECT_IDENTIFIER */
94 static int hf_s4406_dist_value = -1;              /* T_dist_value */
95 static int hf_s4406_HandlingInstructions_item = -1;  /* MilitaryString */
96 static int hf_s4406_MessageInstructions_item = -1;  /* MilitaryString */
97 static int hf_s4406_message_type_type = -1;       /* TypeMessage */
98 static int hf_s4406_identifier = -1;              /* MessageIdentifier */
99 static int hf_s4406_AddressListDesignatorSeq_item = -1;  /* AddressListDesignator */
100 static int hf_s4406_address_list_type = -1;       /* AddressListType */
101 static int hf_s4406_listName = -1;                /* ORDescriptor */
102 static int hf_s4406_notificationRequest = -1;     /* AddressListRequest */
103 static int hf_s4406_replyRequest = -1;            /* AddressListRequest */
104 static int hf_s4406_OtherRecipientDesignatorSeq_item = -1;  /* OtherRecipientDesignator */
105 static int hf_s4406_other_recipient_type = -1;    /* OtherRecipientType */
106 static int hf_s4406_designator = -1;              /* MilitaryString */
107 static int hf_s4406_PilotInformationSeq_item = -1;  /* PilotInformation */
108 static int hf_s4406_pilotPrecedence = -1;         /* PilotPrecedence */
109 static int hf_s4406_pilotRecipient = -1;          /* SEQUENCE_OF_ORDescriptor */
110 static int hf_s4406_pilotRecipient_item = -1;     /* ORDescriptor */
111 static int hf_s4406_pilotSecurity = -1;           /* SecurityLabel */
112 static int hf_s4406_pilotHandling = -1;           /* SEQUENCE_OF_MilitaryString */
113 static int hf_s4406_pilotHandling_item = -1;      /* MilitaryString */
114 static int hf_s4406_content_security_label = -1;  /* SecurityLabel */
115 static int hf_s4406_heading_security_label = -1;  /* SecurityLabel */
116 static int hf_s4406_body_part_security_labels = -1;  /* SEQUENCE_OF_BodyPartSecurityLabel */
117 static int hf_s4406_body_part_security_labels_item = -1;  /* BodyPartSecurityLabel */
118 static int hf_s4406_body_part_security_label = -1;  /* SecurityLabel */
119 static int hf_s4406_body_part_sequence_number = -1;  /* BodyPartSequenceNumber */
120
121 /*--- End of included file: packet-s4406-hf.c ---*/
122 #line 53 "packet-s4406-template.c"
123
124 /* Initialize the subtree pointers */
125 static gint ett_s4406 = -1;
126
127 /*--- Included file: packet-s4406-ett.c ---*/
128 #line 1 "packet-s4406-ett.c"
129 static gint ett_s4406_InformationObject = -1;
130 static gint ett_s4406_DistributionCodes = -1;
131 static gint ett_s4406_SEQUENCE_OF_Sic = -1;
132 static gint ett_s4406_SEQUENCE_OF_DistributionExtensionField = -1;
133 static gint ett_s4406_DistributionExtensionField = -1;
134 static gint ett_s4406_HandlingInstructions = -1;
135 static gint ett_s4406_MessageInstructions = -1;
136 static gint ett_s4406_MessageType = -1;
137 static gint ett_s4406_AddressListDesignatorSeq = -1;
138 static gint ett_s4406_AddressListDesignator = -1;
139 static gint ett_s4406_OtherRecipientDesignatorSeq = -1;
140 static gint ett_s4406_OtherRecipientDesignator = -1;
141 static gint ett_s4406_PilotInformationSeq = -1;
142 static gint ett_s4406_PilotInformation = -1;
143 static gint ett_s4406_SEQUENCE_OF_ORDescriptor = -1;
144 static gint ett_s4406_SEQUENCE_OF_MilitaryString = -1;
145 static gint ett_s4406_SecurityInformationLabels = -1;
146 static gint ett_s4406_SEQUENCE_OF_BodyPartSecurityLabel = -1;
147 static gint ett_s4406_BodyPartSecurityLabel = -1;
148
149 /*--- End of included file: packet-s4406-ett.c ---*/
150 #line 57 "packet-s4406-template.c"
151
152
153 /*--- Included file: packet-s4406-fn.c ---*/
154 #line 1 "packet-s4406-fn.c"
155 /*--- Fields for imported types ---*/
156
157 static int dissect_mm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
158   return dissect_x420_IPM(TRUE, tvb, offset, pinfo, tree, hf_s4406_mm);
159 }
160 static int dissect_mn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
161   return dissect_x420_IPN(TRUE, tvb, offset, pinfo, tree, hf_s4406_mn);
162 }
163 static int dissect_listName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
164   return dissect_x420_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_s4406_listName);
165 }
166 static int dissect_pilotRecipient_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
167   return dissect_x420_ORDescriptor(FALSE, tvb, offset, pinfo, tree, hf_s4406_pilotRecipient_item);
168 }
169 static int dissect_pilotSecurity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
170   return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotSecurity);
171 }
172 static int dissect_content_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
173   return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_content_security_label);
174 }
175 static int dissect_heading_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
176   return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_heading_security_label);
177 }
178 static int dissect_body_part_security_label_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
179   return dissect_x411_SecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_body_part_security_label);
180 }
181
182
183 static const value_string s4406_InformationObject_vals[] = {
184   {   0, "mm" },
185   {   1, "mn" },
186   { 0, NULL }
187 };
188
189 static const ber_choice_t InformationObject_choice[] = {
190   {   0, BER_CLASS_CON, 0, 0, dissect_mm_impl },
191   {   1, BER_CLASS_CON, 1, 0, dissect_mn_impl },
192   { 0, 0, 0, 0, NULL }
193 };
194
195 static int
196 dissect_s4406_InformationObject(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
197   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
198                                  InformationObject_choice, hf_index, ett_s4406_InformationObject,
199                                  NULL);
200
201   return offset;
202 }
203
204
205
206 static int
207 dissect_s4406_MMMessageData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
208   offset = dissect_x420_IPM(implicit_tag, tvb, offset, pinfo, tree, hf_index);
209
210   return offset;
211 }
212
213
214
215 static int
216 dissect_s4406_MMMessageParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
217   offset = dissect_x420_MessageParameters(implicit_tag, tvb, offset, pinfo, tree, hf_index);
218
219   return offset;
220 }
221
222
223
224 static int
225 dissect_s4406_ExemptedAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
226   offset = dissect_x420_ORDescriptor(implicit_tag, tvb, offset, pinfo, tree, hf_index);
227
228   return offset;
229 }
230
231
232
233 static int
234 dissect_s4406_ExemptedAddressSeq(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
235   offset = dissect_s4406_ExemptedAddress(implicit_tag, tvb, offset, pinfo, tree, hf_index);
236
237   return offset;
238 }
239
240
241
242 static int
243 dissect_s4406_ExtendedAuthorisationInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
244   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
245                                             pinfo, tree, tvb, offset, hf_index,
246                                             NULL);
247
248   return offset;
249 }
250
251
252
253 static int
254 dissect_s4406_Sic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
255   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
256                                             pinfo, tree, tvb, offset, hf_index,
257                                             NULL);
258
259   return offset;
260 }
261 static int dissect_sics_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
262   return dissect_s4406_Sic(FALSE, tvb, offset, pinfo, tree, hf_s4406_sics_item);
263 }
264
265
266 static const ber_sequence_t SEQUENCE_OF_Sic_sequence_of[1] = {
267   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_sics_item },
268 };
269
270 static int
271 dissect_s4406_SEQUENCE_OF_Sic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
272   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
273                                       SEQUENCE_OF_Sic_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_Sic);
274
275   return offset;
276 }
277 static int dissect_sics_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
278   return dissect_s4406_SEQUENCE_OF_Sic(TRUE, tvb, offset, pinfo, tree, hf_s4406_sics);
279 }
280
281
282
283 static int
284 dissect_s4406_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
285   offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
286
287   return offset;
288 }
289 static int dissect_dist_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
290   return dissect_s4406_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_s4406_dist_type);
291 }
292
293
294
295 static int
296 dissect_s4406_T_dist_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
297 #line 64 "s4406.cnf"
298 /* XXX: not implemented */
299
300
301
302   return offset;
303 }
304 static int dissect_dist_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
305   return dissect_s4406_T_dist_value(FALSE, tvb, offset, pinfo, tree, hf_s4406_dist_value);
306 }
307
308
309 static const ber_sequence_t DistributionExtensionField_sequence[] = {
310   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_dist_type },
311   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_dist_value },
312   { 0, 0, 0, NULL }
313 };
314
315 static int
316 dissect_s4406_DistributionExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
317   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
318                                    DistributionExtensionField_sequence, hf_index, ett_s4406_DistributionExtensionField);
319
320   return offset;
321 }
322 static int dissect_dist_Extensions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
323   return dissect_s4406_DistributionExtensionField(FALSE, tvb, offset, pinfo, tree, hf_s4406_dist_Extensions_item);
324 }
325
326
327 static const ber_sequence_t SEQUENCE_OF_DistributionExtensionField_sequence_of[1] = {
328   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dist_Extensions_item },
329 };
330
331 static int
332 dissect_s4406_SEQUENCE_OF_DistributionExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
333   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
334                                       SEQUENCE_OF_DistributionExtensionField_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_DistributionExtensionField);
335
336   return offset;
337 }
338 static int dissect_dist_Extensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
339   return dissect_s4406_SEQUENCE_OF_DistributionExtensionField(TRUE, tvb, offset, pinfo, tree, hf_s4406_dist_Extensions);
340 }
341
342
343 static const ber_sequence_t DistributionCodes_set[] = {
344   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sics_impl },
345   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dist_Extensions_impl },
346   { 0, 0, 0, NULL }
347 };
348
349 static int
350 dissect_s4406_DistributionCodes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
351   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
352                               DistributionCodes_set, hf_index, ett_s4406_DistributionCodes);
353
354   return offset;
355 }
356
357
358
359 static int
360 dissect_s4406_MilitaryString(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_PrintableString,
362                                             pinfo, tree, tvb, offset, hf_index,
363                                             NULL);
364
365   return offset;
366 }
367 static int dissect_HandlingInstructions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
368   return dissect_s4406_MilitaryString(FALSE, tvb, offset, pinfo, tree, hf_s4406_HandlingInstructions_item);
369 }
370 static int dissect_MessageInstructions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
371   return dissect_s4406_MilitaryString(FALSE, tvb, offset, pinfo, tree, hf_s4406_MessageInstructions_item);
372 }
373 static int dissect_designator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
374   return dissect_s4406_MilitaryString(TRUE, tvb, offset, pinfo, tree, hf_s4406_designator);
375 }
376 static int dissect_pilotHandling_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
377   return dissect_s4406_MilitaryString(FALSE, tvb, offset, pinfo, tree, hf_s4406_pilotHandling_item);
378 }
379
380
381 static const ber_sequence_t HandlingInstructions_sequence_of[1] = {
382   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_HandlingInstructions_item },
383 };
384
385 static int
386 dissect_s4406_HandlingInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
387   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
388                                       HandlingInstructions_sequence_of, hf_index, ett_s4406_HandlingInstructions);
389
390   return offset;
391 }
392
393
394 static const ber_sequence_t MessageInstructions_sequence_of[1] = {
395   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_MessageInstructions_item },
396 };
397
398 static int
399 dissect_s4406_MessageInstructions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
400   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
401                                       MessageInstructions_sequence_of, hf_index, ett_s4406_MessageInstructions);
402
403   return offset;
404 }
405
406
407
408 static int
409 dissect_s4406_CodressMessage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
410   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
411                                   NULL);
412
413   return offset;
414 }
415
416
417
418 static int
419 dissect_s4406_OriginatorReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
420   offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
421
422   return offset;
423 }
424
425
426 static const value_string s4406_PrimaryPrecedence_vals[] = {
427   {   0, "deferred" },
428   {   1, "routine" },
429   {   2, "priority" },
430   {   3, "immediate" },
431   {   4, "flash" },
432   {   5, "override" },
433   {  16, "ecp" },
434   {  17, "critic" },
435   {  18, "override" },
436   { 0, NULL }
437 };
438
439
440 static int
441 dissect_s4406_PrimaryPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
442 #line 69 "s4406.cnf"
443   int precedence = -1;
444     offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
445                                   &precedence);
446
447   if((precedence != -1) && check_col(pinfo->cinfo, COL_INFO))
448    col_append_fstr(pinfo->cinfo, COL_INFO, " (primary=%s)", val_to_str(precedence, s4406_PrimaryPrecedence_vals, "precedence(%d)"));
449
450
451
452   return offset;
453 }
454
455
456 static const value_string s4406_CopyPrecedence_vals[] = {
457   {   0, "deferred" },
458   {   1, "routine" },
459   {   2, "priority" },
460   {   3, "immediate" },
461   {   4, "flash" },
462   {   5, "override" },
463   {  16, "ecp" },
464   {  17, "critic" },
465   {  18, "override" },
466   { 0, NULL }
467 };
468
469
470 static int
471 dissect_s4406_CopyPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
472 #line 77 "s4406.cnf"
473   int precedence = -1;
474     offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
475                                   &precedence);
476
477   if((precedence != -1) && check_col(pinfo->cinfo, COL_INFO))
478    col_append_fstr(pinfo->cinfo, COL_INFO, " (copy=%s)", val_to_str(precedence, s4406_CopyPrecedence_vals, "precedence(%d)"));
479
480
481   return offset;
482 }
483
484
485 static const value_string s4406_TypeMessage_vals[] = {
486   {   0, "exercise" },
487   {   1, "operation" },
488   {   2, "project" },
489   {   3, "drill" },
490   { 0, NULL }
491 };
492
493
494 static int
495 dissect_s4406_TypeMessage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
496   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
497                                   NULL);
498
499   return offset;
500 }
501 static int dissect_message_type_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
502   return dissect_s4406_TypeMessage(TRUE, tvb, offset, pinfo, tree, hf_s4406_message_type_type);
503 }
504
505
506
507 static int
508 dissect_s4406_MessageIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
509   offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
510
511   return offset;
512 }
513 static int dissect_identifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
514   return dissect_s4406_MessageIdentifier(TRUE, tvb, offset, pinfo, tree, hf_s4406_identifier);
515 }
516
517
518 static const ber_sequence_t MessageType_set[] = {
519   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_message_type_type_impl },
520   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_identifier_impl },
521   { 0, 0, 0, NULL }
522 };
523
524 static int
525 dissect_s4406_MessageType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
526   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
527                               MessageType_set, hf_index, ett_s4406_MessageType);
528
529   return offset;
530 }
531
532
533 static const value_string s4406_AddressListType_vals[] = {
534   {   0, "primaryAddressList" },
535   {   1, "copyAddressList" },
536   { 0, NULL }
537 };
538
539
540 static int
541 dissect_s4406_AddressListType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
542   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
543                                   NULL);
544
545   return offset;
546 }
547 static int dissect_address_list_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
548   return dissect_s4406_AddressListType(TRUE, tvb, offset, pinfo, tree, hf_s4406_address_list_type);
549 }
550
551
552 static const value_string s4406_AddressListRequest_vals[] = {
553   {   0, "action" },
554   {   1, "info" },
555   {   2, "both" },
556   { 0, NULL }
557 };
558
559
560 static int
561 dissect_s4406_AddressListRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
562   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
563                                   NULL);
564
565   return offset;
566 }
567 static int dissect_notificationRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
568   return dissect_s4406_AddressListRequest(TRUE, tvb, offset, pinfo, tree, hf_s4406_notificationRequest);
569 }
570 static int dissect_replyRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
571   return dissect_s4406_AddressListRequest(TRUE, tvb, offset, pinfo, tree, hf_s4406_replyRequest);
572 }
573
574
575 static const ber_sequence_t AddressListDesignator_set[] = {
576   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_address_list_type_impl },
577   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_listName_impl },
578   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notificationRequest_impl },
579   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_replyRequest_impl },
580   { 0, 0, 0, NULL }
581 };
582
583 static int
584 dissect_s4406_AddressListDesignator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
585   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
586                               AddressListDesignator_set, hf_index, ett_s4406_AddressListDesignator);
587
588   return offset;
589 }
590 static int dissect_AddressListDesignatorSeq_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
591   return dissect_s4406_AddressListDesignator(FALSE, tvb, offset, pinfo, tree, hf_s4406_AddressListDesignatorSeq_item);
592 }
593
594
595 static const ber_sequence_t AddressListDesignatorSeq_sequence_of[1] = {
596   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_AddressListDesignatorSeq_item },
597 };
598
599 static int
600 dissect_s4406_AddressListDesignatorSeq(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
601   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
602                                       AddressListDesignatorSeq_sequence_of, hf_index, ett_s4406_AddressListDesignatorSeq);
603
604   return offset;
605 }
606
607
608 static const value_string s4406_OtherRecipientType_vals[] = {
609   {   0, "primary" },
610   {   1, "copy" },
611   { 0, NULL }
612 };
613
614
615 static int
616 dissect_s4406_OtherRecipientType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
617   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
618                                   NULL);
619
620   return offset;
621 }
622 static int dissect_other_recipient_type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
623   return dissect_s4406_OtherRecipientType(TRUE, tvb, offset, pinfo, tree, hf_s4406_other_recipient_type);
624 }
625
626
627 static const ber_sequence_t OtherRecipientDesignator_set[] = {
628   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_other_recipient_type_impl },
629   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_designator_impl },
630   { 0, 0, 0, NULL }
631 };
632
633 static int
634 dissect_s4406_OtherRecipientDesignator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
635   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
636                               OtherRecipientDesignator_set, hf_index, ett_s4406_OtherRecipientDesignator);
637
638   return offset;
639 }
640 static int dissect_OtherRecipientDesignatorSeq_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
641   return dissect_s4406_OtherRecipientDesignator(FALSE, tvb, offset, pinfo, tree, hf_s4406_OtherRecipientDesignatorSeq_item);
642 }
643
644
645 static const ber_sequence_t OtherRecipientDesignatorSeq_sequence_of[1] = {
646   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_OtherRecipientDesignatorSeq_item },
647 };
648
649 static int
650 dissect_s4406_OtherRecipientDesignatorSeq(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
651   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
652                                       OtherRecipientDesignatorSeq_sequence_of, hf_index, ett_s4406_OtherRecipientDesignatorSeq);
653
654   return offset;
655 }
656
657
658 static const value_string s4406_PilotPrecedence_vals[] = {
659   {   0, "deferred" },
660   {   1, "routine" },
661   {   2, "priority" },
662   {   3, "immediate" },
663   {   4, "flash" },
664   {   5, "override" },
665   {  16, "ecp" },
666   {  17, "critic" },
667   {  18, "override" },
668   { 0, NULL }
669 };
670
671
672 static int
673 dissect_s4406_PilotPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
674   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
675                                   NULL);
676
677   return offset;
678 }
679 static int dissect_pilotPrecedence_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
680   return dissect_s4406_PilotPrecedence(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotPrecedence);
681 }
682
683
684 static const ber_sequence_t SEQUENCE_OF_ORDescriptor_sequence_of[1] = {
685   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_pilotRecipient_item },
686 };
687
688 static int
689 dissect_s4406_SEQUENCE_OF_ORDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
690   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
691                                       SEQUENCE_OF_ORDescriptor_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_ORDescriptor);
692
693   return offset;
694 }
695 static int dissect_pilotRecipient_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
696   return dissect_s4406_SEQUENCE_OF_ORDescriptor(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotRecipient);
697 }
698
699
700 static const ber_sequence_t SEQUENCE_OF_MilitaryString_sequence_of[1] = {
701   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_pilotHandling_item },
702 };
703
704 static int
705 dissect_s4406_SEQUENCE_OF_MilitaryString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
706   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
707                                       SEQUENCE_OF_MilitaryString_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_MilitaryString);
708
709   return offset;
710 }
711 static int dissect_pilotHandling_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
712   return dissect_s4406_SEQUENCE_OF_MilitaryString(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotHandling);
713 }
714
715
716 static const ber_sequence_t PilotInformation_sequence[] = {
717   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotPrecedence_impl },
718   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotRecipient_impl },
719   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotSecurity_impl },
720   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotHandling_impl },
721   { 0, 0, 0, NULL }
722 };
723
724 static int
725 dissect_s4406_PilotInformation(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(implicit_tag, pinfo, tree, tvb, offset,
727                                    PilotInformation_sequence, hf_index, ett_s4406_PilotInformation);
728
729   return offset;
730 }
731 static int dissect_PilotInformationSeq_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
732   return dissect_s4406_PilotInformation(FALSE, tvb, offset, pinfo, tree, hf_s4406_PilotInformationSeq_item);
733 }
734
735
736 static const ber_sequence_t PilotInformationSeq_sequence_of[1] = {
737   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PilotInformationSeq_item },
738 };
739
740 static int
741 dissect_s4406_PilotInformationSeq(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
742   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
743                                       PilotInformationSeq_sequence_of, hf_index, ett_s4406_PilotInformationSeq);
744
745   return offset;
746 }
747
748
749
750 static int
751 dissect_s4406_Acp127MessageIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
752   offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
753
754   return offset;
755 }
756
757
758
759 static int
760 dissect_s4406_OriginatorPlad(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
761   offset = dissect_s4406_MilitaryString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
762
763   return offset;
764 }
765
766
767
768 static int
769 dissect_s4406_BodyPartSequenceNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
770   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
771                                   NULL);
772
773   return offset;
774 }
775 static int dissect_body_part_sequence_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
776   return dissect_s4406_BodyPartSequenceNumber(TRUE, tvb, offset, pinfo, tree, hf_s4406_body_part_sequence_number);
777 }
778
779
780 static const ber_sequence_t BodyPartSecurityLabel_set[] = {
781   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_body_part_security_label_impl },
782   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_body_part_sequence_number_impl },
783   { 0, 0, 0, NULL }
784 };
785
786 static int
787 dissect_s4406_BodyPartSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
788   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
789                               BodyPartSecurityLabel_set, hf_index, ett_s4406_BodyPartSecurityLabel);
790
791   return offset;
792 }
793 static int dissect_body_part_security_labels_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
794   return dissect_s4406_BodyPartSecurityLabel(FALSE, tvb, offset, pinfo, tree, hf_s4406_body_part_security_labels_item);
795 }
796
797
798 static const ber_sequence_t SEQUENCE_OF_BodyPartSecurityLabel_sequence_of[1] = {
799   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_body_part_security_labels_item },
800 };
801
802 static int
803 dissect_s4406_SEQUENCE_OF_BodyPartSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
804   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
805                                       SEQUENCE_OF_BodyPartSecurityLabel_sequence_of, hf_index, ett_s4406_SEQUENCE_OF_BodyPartSecurityLabel);
806
807   return offset;
808 }
809 static int dissect_body_part_security_labels_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
810   return dissect_s4406_SEQUENCE_OF_BodyPartSecurityLabel(TRUE, tvb, offset, pinfo, tree, hf_s4406_body_part_security_labels);
811 }
812
813
814 static const ber_sequence_t SecurityInformationLabels_sequence[] = {
815   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_content_security_label_impl },
816   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_heading_security_label_impl },
817   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_body_part_security_labels_impl },
818   { 0, 0, 0, NULL }
819 };
820
821 static int
822 dissect_s4406_SecurityInformationLabels(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
823   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
824                                    SecurityInformationLabels_sequence, hf_index, ett_s4406_SecurityInformationLabels);
825
826   return offset;
827 }
828
829
830 static const value_string s4406_PriorityLevelQualifier_vals[] = {
831   {   0, "low" },
832   {   1, "high" },
833   { 0, NULL }
834 };
835
836
837 static int
838 dissect_s4406_PriorityLevelQualifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
839   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
840                                   NULL);
841
842   return offset;
843 }
844
845 /*--- PDUs ---*/
846
847 static void dissect_InformationObject_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
848   dissect_s4406_InformationObject(FALSE, tvb, 0, pinfo, tree, hf_s4406_InformationObject_PDU);
849 }
850 static void dissect_MMMessageData_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
851   dissect_s4406_MMMessageData(FALSE, tvb, 0, pinfo, tree, hf_s4406_MMMessageData_PDU);
852 }
853 static void dissect_MMMessageParameters_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
854   dissect_s4406_MMMessageParameters(FALSE, tvb, 0, pinfo, tree, hf_s4406_MMMessageParameters_PDU);
855 }
856 static void dissect_ExemptedAddressSeq_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
857   dissect_s4406_ExemptedAddressSeq(FALSE, tvb, 0, pinfo, tree, hf_s4406_ExemptedAddressSeq_PDU);
858 }
859 static void dissect_ExemptedAddress_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
860   dissect_s4406_ExemptedAddress(FALSE, tvb, 0, pinfo, tree, hf_s4406_ExemptedAddress_PDU);
861 }
862 static void dissect_ExtendedAuthorisationInfo_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
863   dissect_s4406_ExtendedAuthorisationInfo(FALSE, tvb, 0, pinfo, tree, hf_s4406_ExtendedAuthorisationInfo_PDU);
864 }
865 static void dissect_DistributionCodes_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
866   dissect_s4406_DistributionCodes(FALSE, tvb, 0, pinfo, tree, hf_s4406_DistributionCodes_PDU);
867 }
868 static void dissect_HandlingInstructions_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
869   dissect_s4406_HandlingInstructions(FALSE, tvb, 0, pinfo, tree, hf_s4406_HandlingInstructions_PDU);
870 }
871 static void dissect_MessageInstructions_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
872   dissect_s4406_MessageInstructions(FALSE, tvb, 0, pinfo, tree, hf_s4406_MessageInstructions_PDU);
873 }
874 static void dissect_CodressMessage_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
875   dissect_s4406_CodressMessage(FALSE, tvb, 0, pinfo, tree, hf_s4406_CodressMessage_PDU);
876 }
877 static void dissect_OriginatorReference_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
878   dissect_s4406_OriginatorReference(FALSE, tvb, 0, pinfo, tree, hf_s4406_OriginatorReference_PDU);
879 }
880 static void dissect_PrimaryPrecedence_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
881   dissect_s4406_PrimaryPrecedence(FALSE, tvb, 0, pinfo, tree, hf_s4406_PrimaryPrecedence_PDU);
882 }
883 static void dissect_CopyPrecedence_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
884   dissect_s4406_CopyPrecedence(FALSE, tvb, 0, pinfo, tree, hf_s4406_CopyPrecedence_PDU);
885 }
886 static void dissect_MessageType_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
887   dissect_s4406_MessageType(FALSE, tvb, 0, pinfo, tree, hf_s4406_MessageType_PDU);
888 }
889 static void dissect_AddressListDesignatorSeq_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
890   dissect_s4406_AddressListDesignatorSeq(FALSE, tvb, 0, pinfo, tree, hf_s4406_AddressListDesignatorSeq_PDU);
891 }
892 static void dissect_AddressListDesignator_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
893   dissect_s4406_AddressListDesignator(FALSE, tvb, 0, pinfo, tree, hf_s4406_AddressListDesignator_PDU);
894 }
895 static void dissect_OtherRecipientDesignatorSeq_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
896   dissect_s4406_OtherRecipientDesignatorSeq(FALSE, tvb, 0, pinfo, tree, hf_s4406_OtherRecipientDesignatorSeq_PDU);
897 }
898 static void dissect_OtherRecipientDesignator_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
899   dissect_s4406_OtherRecipientDesignator(FALSE, tvb, 0, pinfo, tree, hf_s4406_OtherRecipientDesignator_PDU);
900 }
901 static void dissect_PilotInformationSeq_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
902   dissect_s4406_PilotInformationSeq(FALSE, tvb, 0, pinfo, tree, hf_s4406_PilotInformationSeq_PDU);
903 }
904 static void dissect_PilotInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
905   dissect_s4406_PilotInformation(FALSE, tvb, 0, pinfo, tree, hf_s4406_PilotInformation_PDU);
906 }
907 static void dissect_Acp127MessageIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
908   dissect_s4406_Acp127MessageIdentifier(FALSE, tvb, 0, pinfo, tree, hf_s4406_Acp127MessageIdentifier_PDU);
909 }
910 static void dissect_OriginatorPlad_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
911   dissect_s4406_OriginatorPlad(FALSE, tvb, 0, pinfo, tree, hf_s4406_OriginatorPlad_PDU);
912 }
913 static void dissect_SecurityInformationLabels_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
914   dissect_s4406_SecurityInformationLabels(FALSE, tvb, 0, pinfo, tree, hf_s4406_SecurityInformationLabels_PDU);
915 }
916 static void dissect_PriorityLevelQualifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
917   dissect_s4406_PriorityLevelQualifier(FALSE, tvb, 0, pinfo, tree, hf_s4406_PriorityLevelQualifier_PDU);
918 }
919
920
921 /*--- End of included file: packet-s4406-fn.c ---*/
922 #line 59 "packet-s4406-template.c"
923
924
925 /*
926 * Dissect STANAG 4406 PDUs inside a PPDU.
927 */
928 static void
929 dissect_s4406(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
930 {
931         int offset = 0;
932         proto_item *item=NULL;
933         proto_tree *tree=NULL;
934
935         if(parent_tree){
936                 item = proto_tree_add_item(parent_tree, proto_s4406, tvb, 0, -1, FALSE);
937                 tree = proto_item_add_subtree(item, ett_s4406);
938         }
939
940         if (check_col(pinfo->cinfo, COL_PROTOCOL))
941                 col_set_str(pinfo->cinfo, COL_PROTOCOL, "S4406");
942         if (check_col(pinfo->cinfo, COL_INFO))
943           col_add_str(pinfo->cinfo, COL_INFO, "Military");
944
945         dissect_s4406_InformationObject(TRUE, tvb, offset, pinfo , tree, -1);
946 }
947
948
949
950 /*--- proto_register_s4406 -------------------------------------------*/
951 void proto_register_s4406(void) {
952
953   /* List of fields */
954   static hf_register_info hf[] =
955   {
956
957 /*--- Included file: packet-s4406-hfarr.c ---*/
958 #line 1 "packet-s4406-hfarr.c"
959     { &hf_s4406_InformationObject_PDU,
960       { "InformationObject", "s4406.InformationObject",
961         FT_UINT32, BASE_DEC, VALS(x420_InformationObject_vals), 0,
962         "InformationObject", HFILL }},
963     { &hf_s4406_MMMessageData_PDU,
964       { "MMMessageData", "s4406.MMMessageData",
965         FT_NONE, BASE_NONE, NULL, 0,
966         "MMMessageData", HFILL }},
967     { &hf_s4406_MMMessageParameters_PDU,
968       { "MMMessageParameters", "s4406.MMMessageParameters",
969         FT_NONE, BASE_NONE, NULL, 0,
970         "MMMessageParameters", HFILL }},
971     { &hf_s4406_ExemptedAddressSeq_PDU,
972       { "ExemptedAddressSeq", "s4406.ExemptedAddressSeq",
973         FT_NONE, BASE_NONE, NULL, 0,
974         "ExemptedAddressSeq", HFILL }},
975     { &hf_s4406_ExemptedAddress_PDU,
976       { "ExemptedAddress", "s4406.ExemptedAddress",
977         FT_NONE, BASE_NONE, NULL, 0,
978         "ExemptedAddress", HFILL }},
979     { &hf_s4406_ExtendedAuthorisationInfo_PDU,
980       { "ExtendedAuthorisationInfo", "s4406.ExtendedAuthorisationInfo",
981         FT_STRING, BASE_NONE, NULL, 0,
982         "ExtendedAuthorisationInfo", HFILL }},
983     { &hf_s4406_DistributionCodes_PDU,
984       { "DistributionCodes", "s4406.DistributionCodes",
985         FT_NONE, BASE_NONE, NULL, 0,
986         "DistributionCodes", HFILL }},
987     { &hf_s4406_HandlingInstructions_PDU,
988       { "HandlingInstructions", "s4406.HandlingInstructions",
989         FT_UINT32, BASE_DEC, NULL, 0,
990         "HandlingInstructions", HFILL }},
991     { &hf_s4406_MessageInstructions_PDU,
992       { "MessageInstructions", "s4406.MessageInstructions",
993         FT_UINT32, BASE_DEC, NULL, 0,
994         "MessageInstructions", HFILL }},
995     { &hf_s4406_CodressMessage_PDU,
996       { "CodressMessage", "s4406.CodressMessage",
997         FT_INT32, BASE_DEC, NULL, 0,
998         "CodressMessage", HFILL }},
999     { &hf_s4406_OriginatorReference_PDU,
1000       { "OriginatorReference", "s4406.OriginatorReference",
1001         FT_STRING, BASE_NONE, NULL, 0,
1002         "OriginatorReference", HFILL }},
1003     { &hf_s4406_PrimaryPrecedence_PDU,
1004       { "PrimaryPrecedence", "s4406.PrimaryPrecedence",
1005         FT_INT32, BASE_DEC, VALS(s4406_PrimaryPrecedence_vals), 0,
1006         "PrimaryPrecedence", HFILL }},
1007     { &hf_s4406_CopyPrecedence_PDU,
1008       { "CopyPrecedence", "s4406.CopyPrecedence",
1009         FT_INT32, BASE_DEC, VALS(s4406_CopyPrecedence_vals), 0,
1010         "CopyPrecedence", HFILL }},
1011     { &hf_s4406_MessageType_PDU,
1012       { "MessageType", "s4406.MessageType",
1013         FT_NONE, BASE_NONE, NULL, 0,
1014         "MessageType", HFILL }},
1015     { &hf_s4406_AddressListDesignatorSeq_PDU,
1016       { "AddressListDesignatorSeq", "s4406.AddressListDesignatorSeq",
1017         FT_UINT32, BASE_DEC, NULL, 0,
1018         "AddressListDesignatorSeq", HFILL }},
1019     { &hf_s4406_AddressListDesignator_PDU,
1020       { "AddressListDesignator", "s4406.AddressListDesignator",
1021         FT_NONE, BASE_NONE, NULL, 0,
1022         "AddressListDesignator", HFILL }},
1023     { &hf_s4406_OtherRecipientDesignatorSeq_PDU,
1024       { "OtherRecipientDesignatorSeq", "s4406.OtherRecipientDesignatorSeq",
1025         FT_UINT32, BASE_DEC, NULL, 0,
1026         "OtherRecipientDesignatorSeq", HFILL }},
1027     { &hf_s4406_OtherRecipientDesignator_PDU,
1028       { "OtherRecipientDesignator", "s4406.OtherRecipientDesignator",
1029         FT_NONE, BASE_NONE, NULL, 0,
1030         "OtherRecipientDesignator", HFILL }},
1031     { &hf_s4406_PilotInformationSeq_PDU,
1032       { "PilotInformationSeq", "s4406.PilotInformationSeq",
1033         FT_UINT32, BASE_DEC, NULL, 0,
1034         "PilotInformationSeq", HFILL }},
1035     { &hf_s4406_PilotInformation_PDU,
1036       { "PilotInformation", "s4406.PilotInformation",
1037         FT_NONE, BASE_NONE, NULL, 0,
1038         "PilotInformation", HFILL }},
1039     { &hf_s4406_Acp127MessageIdentifier_PDU,
1040       { "Acp127MessageIdentifier", "s4406.Acp127MessageIdentifier",
1041         FT_STRING, BASE_NONE, NULL, 0,
1042         "Acp127MessageIdentifier", HFILL }},
1043     { &hf_s4406_OriginatorPlad_PDU,
1044       { "OriginatorPlad", "s4406.OriginatorPlad",
1045         FT_STRING, BASE_NONE, NULL, 0,
1046         "OriginatorPlad", HFILL }},
1047     { &hf_s4406_SecurityInformationLabels_PDU,
1048       { "SecurityInformationLabels", "s4406.SecurityInformationLabels",
1049         FT_NONE, BASE_NONE, NULL, 0,
1050         "SecurityInformationLabels", HFILL }},
1051     { &hf_s4406_PriorityLevelQualifier_PDU,
1052       { "PriorityLevelQualifier", "s4406.PriorityLevelQualifier",
1053         FT_UINT32, BASE_DEC, VALS(s4406_PriorityLevelQualifier_vals), 0,
1054         "PriorityLevelQualifier", HFILL }},
1055     { &hf_s4406_mm,
1056       { "mm", "s4406.mm",
1057         FT_NONE, BASE_NONE, NULL, 0,
1058         "InformationObject/mm", HFILL }},
1059     { &hf_s4406_mn,
1060       { "mn", "s4406.mn",
1061         FT_NONE, BASE_NONE, NULL, 0,
1062         "InformationObject/mn", HFILL }},
1063     { &hf_s4406_sics,
1064       { "sics", "s4406.sics",
1065         FT_UINT32, BASE_DEC, NULL, 0,
1066         "DistributionCodes/sics", HFILL }},
1067     { &hf_s4406_sics_item,
1068       { "Item", "s4406.sics_item",
1069         FT_STRING, BASE_NONE, NULL, 0,
1070         "DistributionCodes/sics/_item", HFILL }},
1071     { &hf_s4406_dist_Extensions,
1072       { "dist-Extensions", "s4406.dist_Extensions",
1073         FT_UINT32, BASE_DEC, NULL, 0,
1074         "DistributionCodes/dist-Extensions", HFILL }},
1075     { &hf_s4406_dist_Extensions_item,
1076       { "Item", "s4406.dist_Extensions_item",
1077         FT_NONE, BASE_NONE, NULL, 0,
1078         "DistributionCodes/dist-Extensions/_item", HFILL }},
1079     { &hf_s4406_dist_type,
1080       { "dist-type", "s4406.dist_type",
1081         FT_OID, BASE_NONE, NULL, 0,
1082         "DistributionExtensionField/dist-type", HFILL }},
1083     { &hf_s4406_dist_value,
1084       { "dist-value", "s4406.dist_value",
1085         FT_NONE, BASE_NONE, NULL, 0,
1086         "DistributionExtensionField/dist-value", HFILL }},
1087     { &hf_s4406_HandlingInstructions_item,
1088       { "Item", "s4406.HandlingInstructions_item",
1089         FT_STRING, BASE_NONE, NULL, 0,
1090         "HandlingInstructions/_item", HFILL }},
1091     { &hf_s4406_MessageInstructions_item,
1092       { "Item", "s4406.MessageInstructions_item",
1093         FT_STRING, BASE_NONE, NULL, 0,
1094         "MessageInstructions/_item", HFILL }},
1095     { &hf_s4406_message_type_type,
1096       { "type", "s4406.type",
1097         FT_INT32, BASE_DEC, VALS(s4406_TypeMessage_vals), 0,
1098         "MessageType/type", HFILL }},
1099     { &hf_s4406_identifier,
1100       { "identifier", "s4406.identifier",
1101         FT_STRING, BASE_NONE, NULL, 0,
1102         "MessageType/identifier", HFILL }},
1103     { &hf_s4406_AddressListDesignatorSeq_item,
1104       { "Item", "s4406.AddressListDesignatorSeq_item",
1105         FT_NONE, BASE_NONE, NULL, 0,
1106         "AddressListDesignatorSeq/_item", HFILL }},
1107     { &hf_s4406_address_list_type,
1108       { "type", "s4406.type",
1109         FT_INT32, BASE_DEC, VALS(s4406_AddressListType_vals), 0,
1110         "AddressListDesignator/type", HFILL }},
1111     { &hf_s4406_listName,
1112       { "listName", "s4406.listName",
1113         FT_NONE, BASE_NONE, NULL, 0,
1114         "AddressListDesignator/listName", HFILL }},
1115     { &hf_s4406_notificationRequest,
1116       { "notificationRequest", "s4406.notificationRequest",
1117         FT_INT32, BASE_DEC, VALS(s4406_AddressListRequest_vals), 0,
1118         "AddressListDesignator/notificationRequest", HFILL }},
1119     { &hf_s4406_replyRequest,
1120       { "replyRequest", "s4406.replyRequest",
1121         FT_INT32, BASE_DEC, VALS(s4406_AddressListRequest_vals), 0,
1122         "AddressListDesignator/replyRequest", HFILL }},
1123     { &hf_s4406_OtherRecipientDesignatorSeq_item,
1124       { "Item", "s4406.OtherRecipientDesignatorSeq_item",
1125         FT_NONE, BASE_NONE, NULL, 0,
1126         "OtherRecipientDesignatorSeq/_item", HFILL }},
1127     { &hf_s4406_other_recipient_type,
1128       { "type", "s4406.type",
1129         FT_INT32, BASE_DEC, VALS(s4406_OtherRecipientType_vals), 0,
1130         "OtherRecipientDesignator/type", HFILL }},
1131     { &hf_s4406_designator,
1132       { "designator", "s4406.designator",
1133         FT_STRING, BASE_NONE, NULL, 0,
1134         "OtherRecipientDesignator/designator", HFILL }},
1135     { &hf_s4406_PilotInformationSeq_item,
1136       { "Item", "s4406.PilotInformationSeq_item",
1137         FT_NONE, BASE_NONE, NULL, 0,
1138         "PilotInformationSeq/_item", HFILL }},
1139     { &hf_s4406_pilotPrecedence,
1140       { "pilotPrecedence", "s4406.pilotPrecedence",
1141         FT_INT32, BASE_DEC, VALS(s4406_PilotPrecedence_vals), 0,
1142         "PilotInformation/pilotPrecedence", HFILL }},
1143     { &hf_s4406_pilotRecipient,
1144       { "pilotRecipient", "s4406.pilotRecipient",
1145         FT_UINT32, BASE_DEC, NULL, 0,
1146         "PilotInformation/pilotRecipient", HFILL }},
1147     { &hf_s4406_pilotRecipient_item,
1148       { "Item", "s4406.pilotRecipient_item",
1149         FT_NONE, BASE_NONE, NULL, 0,
1150         "PilotInformation/pilotRecipient/_item", HFILL }},
1151     { &hf_s4406_pilotSecurity,
1152       { "pilotSecurity", "s4406.pilotSecurity",
1153         FT_NONE, BASE_NONE, NULL, 0,
1154         "PilotInformation/pilotSecurity", HFILL }},
1155     { &hf_s4406_pilotHandling,
1156       { "pilotHandling", "s4406.pilotHandling",
1157         FT_UINT32, BASE_DEC, NULL, 0,
1158         "PilotInformation/pilotHandling", HFILL }},
1159     { &hf_s4406_pilotHandling_item,
1160       { "Item", "s4406.pilotHandling_item",
1161         FT_STRING, BASE_NONE, NULL, 0,
1162         "PilotInformation/pilotHandling/_item", HFILL }},
1163     { &hf_s4406_content_security_label,
1164       { "content-security-label", "s4406.content_security_label",
1165         FT_NONE, BASE_NONE, NULL, 0,
1166         "SecurityInformationLabels/content-security-label", HFILL }},
1167     { &hf_s4406_heading_security_label,
1168       { "heading-security-label", "s4406.heading_security_label",
1169         FT_NONE, BASE_NONE, NULL, 0,
1170         "SecurityInformationLabels/heading-security-label", HFILL }},
1171     { &hf_s4406_body_part_security_labels,
1172       { "body-part-security-labels", "s4406.body_part_security_labels",
1173         FT_UINT32, BASE_DEC, NULL, 0,
1174         "SecurityInformationLabels/body-part-security-labels", HFILL }},
1175     { &hf_s4406_body_part_security_labels_item,
1176       { "Item", "s4406.body_part_security_labels_item",
1177         FT_NONE, BASE_NONE, NULL, 0,
1178         "SecurityInformationLabels/body-part-security-labels/_item", HFILL }},
1179     { &hf_s4406_body_part_security_label,
1180       { "body-part-security-label", "s4406.body_part_security_label",
1181         FT_NONE, BASE_NONE, NULL, 0,
1182         "BodyPartSecurityLabel/body-part-security-label", HFILL }},
1183     { &hf_s4406_body_part_sequence_number,
1184       { "body-part-sequence-number", "s4406.body_part_sequence_number",
1185         FT_INT32, BASE_DEC, NULL, 0,
1186         "BodyPartSecurityLabel/body-part-sequence-number", HFILL }},
1187
1188 /*--- End of included file: packet-s4406-hfarr.c ---*/
1189 #line 93 "packet-s4406-template.c"
1190   };
1191
1192   /* List of subtrees */
1193   static gint *ett[] = {
1194     &ett_s4406,
1195
1196 /*--- Included file: packet-s4406-ettarr.c ---*/
1197 #line 1 "packet-s4406-ettarr.c"
1198     &ett_s4406_InformationObject,
1199     &ett_s4406_DistributionCodes,
1200     &ett_s4406_SEQUENCE_OF_Sic,
1201     &ett_s4406_SEQUENCE_OF_DistributionExtensionField,
1202     &ett_s4406_DistributionExtensionField,
1203     &ett_s4406_HandlingInstructions,
1204     &ett_s4406_MessageInstructions,
1205     &ett_s4406_MessageType,
1206     &ett_s4406_AddressListDesignatorSeq,
1207     &ett_s4406_AddressListDesignator,
1208     &ett_s4406_OtherRecipientDesignatorSeq,
1209     &ett_s4406_OtherRecipientDesignator,
1210     &ett_s4406_PilotInformationSeq,
1211     &ett_s4406_PilotInformation,
1212     &ett_s4406_SEQUENCE_OF_ORDescriptor,
1213     &ett_s4406_SEQUENCE_OF_MilitaryString,
1214     &ett_s4406_SecurityInformationLabels,
1215     &ett_s4406_SEQUENCE_OF_BodyPartSecurityLabel,
1216     &ett_s4406_BodyPartSecurityLabel,
1217
1218 /*--- End of included file: packet-s4406-ettarr.c ---*/
1219 #line 99 "packet-s4406-template.c"
1220   };
1221
1222   /* Register protocol */
1223   proto_s4406 = proto_register_protocol(PNAME, PSNAME, PFNAME);
1224
1225   /* Register fields and subtrees */
1226   proto_register_field_array(proto_s4406, hf, array_length(hf));
1227   proto_register_subtree_array(ett, array_length(ett));
1228
1229 }
1230
1231
1232 /*--- proto_reg_handoff_s4406 --- */
1233 void proto_reg_handoff_s4406(void) {
1234
1235 /*--- Included file: packet-s4406-dis-tab.c ---*/
1236 #line 1 "packet-s4406-dis-tab.c"
1237   register_ber_oid_dissector("1.3.26.0.4406.0.2.0", dissect_PrimaryPrecedence_PDU, proto_s4406, "primary-precedence");
1238   register_ber_oid_dissector("1.3.26.0.4406.0.2.1", dissect_CopyPrecedence_PDU, proto_s4406, "copy-precedence");
1239   register_ber_oid_dissector("1.3.26.0.4406.0.2.2", dissect_MessageType_PDU, proto_s4406, "message-type");
1240   register_ber_oid_dissector("1.3.26.0.4406.0.2.3", dissect_AddressListDesignatorSeq_PDU, proto_s4406, "address-list-indicator");
1241   register_ber_oid_dissector("1.3.26.0.4406.0.2.4", dissect_ExemptedAddressSeq_PDU, proto_s4406, "exempted-address");
1242   register_ber_oid_dissector("1.3.26.0.4406.0.2.5", dissect_ExtendedAuthorisationInfo_PDU, proto_s4406, "extended-authorisation-info");
1243   register_ber_oid_dissector("1.3.26.0.4406.0.2.6", dissect_DistributionCodes_PDU, proto_s4406, "distribution-codes");
1244   register_ber_oid_dissector("1.3.26.0.4406.0.2.7", dissect_HandlingInstructions_PDU, proto_s4406, "handling-instructions");
1245   register_ber_oid_dissector("1.3.26.0.4406.0.2.8", dissect_MessageInstructions_PDU, proto_s4406, "message-instructions");
1246   register_ber_oid_dissector("1.3.26.0.4406.0.2.9", dissect_CodressMessage_PDU, proto_s4406, "codress-message");
1247   register_ber_oid_dissector("1.3.26.0.4406.0.2.10", dissect_OriginatorReference_PDU, proto_s4406, "originator-reference");
1248   register_ber_oid_dissector("1.3.26.0.4406.0.2.11", dissect_OtherRecipientDesignatorSeq_PDU, proto_s4406, "other-recipients-indicator");
1249   register_ber_oid_dissector("1.3.26.0.4406.0.2.12", dissect_PilotInformationSeq_PDU, proto_s4406, "pilot-forwarding-info");
1250   register_ber_oid_dissector("1.3.26.0.4406.0.2.13", dissect_Acp127MessageIdentifier_PDU, proto_s4406, "acp127-message-identifierr");
1251   register_ber_oid_dissector("1.3.26.0.4406.0.2.14", dissect_OriginatorPlad_PDU, proto_s4406, "originator-plad");
1252   register_ber_oid_dissector("1.3.26.0.4406.0.2.17", dissect_SecurityInformationLabels_PDU, proto_s4406, "information-labels");
1253   register_ber_oid_dissector("1.3.26.0.4406.0.8.0", dissect_PriorityLevelQualifier_PDU, proto_s4406, "priority-level-qualifier");
1254   register_ber_oid_dissector("1.3.26.0.4406.0.7.9", dissect_MMMessageData_PDU, proto_s4406, "mm-message");
1255   register_ber_oid_dissector("1.3.26.0.4406.0.7.10", dissect_MMMessageParameters_PDU, proto_s4406, "mm-message-parameters");
1256   register_ber_oid_dissector("2.6.1.4.17.1.3.26.0.4406.0.4.1", dissect_InformationObject_PDU, proto_s4406, "id-et-content-p772");
1257
1258
1259 /*--- End of included file: packet-s4406-dis-tab.c ---*/
1260 #line 114 "packet-s4406-template.c"
1261
1262   register_ber_oid_dissector("1.3.26.0.4406.0.4.1", dissect_s4406, proto_s4406, "Military Message");
1263 }