Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-p772.c
blob3c4575339e7c4cfc4a4dec2578a0227a4487c231
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-p772.c */
4 /* asn2wrs.py -b -C -q -L -p p772 -c ./p772.cnf -s ./packet-p772-template -D . -O ../.. MMSAbstractService.asn MMSInformationObjects.asn MMSOtherNotificationTypeExtensions.asn MMSObjectIdentifiers.asn MMSHeadingExtensions.asn MMSUpperBounds.asn MMSExtendedBodyPartTypes.asn MMSPerRecipientSpecifierExtensions.asn */
6 /* packet-p772.c
7 * Routines for STANAG 4406 (X.400 Military Message Extensions) packet dissection
8 * Graeme Lunt 2005
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
17 #include "config.h"
19 #include <epan/packet.h>
20 #include <epan/asn1.h>
21 #include <wsutil/array.h>
23 #include "packet-ber.h"
25 #include "packet-x509if.h"
27 #include "packet-p772.h"
28 #include "packet-p1.h"
29 #include "packet-p22.h"
31 #define PNAME "STANAG 4406 Message"
32 #define PSNAME "P772"
33 #define PFNAME "p772"
35 void proto_register_p772(void);
36 void proto_reg_handoff_p772(void);
39 /* Initialize the protocol and registered fields */
40 static int proto_p772;
42 #define id_mmhs "1.3.26.0.4406.0"
43 #define id_mod id_mmhs".0"
44 #define id_mm id_mmhs".2"
45 #define id_hat id_mmhs".3"
46 #define id_mcont id_mmhs".4"
47 #define id_policy id_mmhs".5"
48 #define id_cat id_mmhs".6"
49 #define id_et id_mmhs".7"
50 #define id_mmts id_mmhs".8"
51 #define id_nat id_mmhs".9"
52 #define id_mot id_mmhs".10"
53 #define id_mpt id_mmhs".11"
54 #define id_ref id_mmhs".12"
55 #define id_informationlabel id_mmhs".13"
56 #define id_mod_upper_bounds id_mod".0"
57 #define id_mod_mms id_mod".1"
58 #define id_mod_functional_objects id_mod".2"
59 #define id_mod_abstract_service id_mod".3"
60 #define id_mod_heading_extension id_mod".6"
61 #define id_mod_extended_body_part_types id_mod".7"
62 #define id_mod_message_store_attributes id_mod".8"
63 #define id_mod_per_recipient_specifier_extensions id_mod".11"
64 #define id_mod_other_notification_type_extensions id_mod".12"
65 #define id_mot_mmme id_mot".0"
66 #define id_mot_mms_user id_mot".1"
67 #define id_mot_mms id_mot".2"
68 #define id_mot_mms_ua id_mot".3"
69 #define id_mot_mms_ms id_mot".4"
70 #define id_mot_acp127au id_mot".5"
71 #define id_mot_pdau id_mot".6"
72 #define id_mpt_origination id_mpt".0"
73 #define id_mpt_reception id_mpt".1"
74 #define id_mpt_management id_mpt".2"
75 #define id_ref_primary id_ref".0"
76 #define id_ref_secondary id_ref".1"
77 #define id_nato_mmhs_et_adatp3 id_et".0"
78 #define id_nato_mmhs_et_corrections id_et".1"
79 #define id_nato_mmhs_et_adatp3_parameters id_et".2"
80 #define id_nato_mmhs_et_corrections_parameters id_et".3"
81 #define id_nato_mmhs_et_forwarded_encrypted id_et".6"
82 #define id_nato_mmhs_et_forwarded_encrypted_parameters id_et".7"
83 #define id_nato_mmhs_et_mm_message id_et".9"
84 #define id_nato_mmhs_et_mm_message_parameters id_et".10"
85 #define id_nato_mmhs_et_mm_acp127data id_et".12"
86 #define id_nato_mmhs_et_mm_acp127data_parameters id_et".13"
87 #define id_nato_mmhs_mm_primary_precedence id_mm".0"
88 #define id_nato_mmhs_mm_copy_precedence id_mm".1"
89 #define id_nato_mmhs_mm_message_type id_mm".2"
90 #define id_nato_mmhs_mm_address_list_indicator id_mm".3"
91 #define id_nato_mmhs_mm_exempted_address id_mm".4"
92 #define id_nato_mmhs_mm_extended_authorisation_info id_mm".5"
93 #define id_nato_mmhs_mm_distribution_codes id_mm".6"
94 #define id_nato_mmhs_mm_handling_instructions id_mm".7"
95 #define id_nato_mmhs_mm_message_instructions id_mm".8"
96 #define id_nato_mmhs_mm_codress_message id_mm".9"
97 #define id_nato_mmhs_mm_originator_reference id_mm".10"
98 #define id_nato_mmhs_mm_other_recipients_indicator id_mm".11"
99 #define id_nato_mmhs_mm_pilot_forwarding_info id_mm".12"
100 #define id_nato_mmhs_mm_acp127_message_identifier id_mm".13"
101 #define id_nato_mmhs_mm_originator_plad id_mm".14"
102 #define id_nato_mmhs_mm_information_labels id_mm".17"
103 #define id_nato_mmhs_mm_acp127_notification_request id_mm".15"
104 #define id_nato_mmhs_mm_acp127_notification_response id_mm".16"
105 #define id_nato_mmhs_hat_primary_precedence id_hat".0"
106 #define id_nato_mmhs_hat_copy_precedence id_hat".1"
107 #define id_nato_mmhs_hat_message_type id_hat".2"
108 #define id_nato_mmhs_hat_address_list_indicator id_hat".3"
109 #define id_nato_mmhs_hat_exempted_address id_hat".4"
110 #define id_nato_mmhs_hat_extended_authorisation_info id_hat".5"
111 #define id_nato_mmhs_hat_distribution_codes id_hat".6"
112 #define id_nato_mmhs_hat_handling_instructions id_hat".7"
113 #define id_nato_mmhs_hat_message_instructions id_hat".8"
114 #define id_nato_mmhs_hat_codress_message id_hat".9"
115 #define id_nato_mmhs_hat_originator_reference id_hat".10"
116 #define id_nato_mmhs_hat_other_recipients_indicator id_hat".11"
117 #define id_nato_mmhs_hat_pilot_forwarding_info id_hat".12"
118 #define id_nato_mmhs_hat_acp127_message_identifier id_hat".13"
119 #define id_nato_mmhs_hat_originator_plad id_hat".14"
120 #define id_nato_mmhs_hat_acp127_notification_request id_hat".15"
121 #define id_nato_mmhs_hat_sic_codes id_hat".16"
122 #define id_nato_mmhs_hat_distribution_extensions id_hat".17"
123 #define id_nato_mmhs_hat_body_part_information_label id_hat".18"
124 #define id_nato_mmhs_hat_security_information_labels id_hat".19"
125 #define id_nato_mmhs_cat id_cat".0"
126 #define id_nato_mmhs_cat_atomal id_cat".1"
127 #define id_nato_mmhs_cat_cryptosecurity id_cat".2"
128 #define id_nato_mmhs_cat_specialhandlingintel id_cat".3"
129 #define id_nato_mmhs_cat_ussiopesi id_cat".4"
130 #define id_nato_mmhs_cat_eyesonly id_cat".5"
131 #define id_nato_mmhs_cat_exclusive id_cat".6"
132 #define id_nato_mmhs_cat_information_label id_cat".7"
133 #define id_nato_mmhs_informationlabel_atomal id_informationlabel".1"
134 #define id_nato_mmhs_informationlabel_cryptosecurity id_informationlabel".2"
135 #define id_nato_mmhs_informationlabel_specialhandlingintel id_informationlabel".3"
136 #define id_nato_mmhs_informationlabel_ussiopesi id_informationlabel".4"
137 #define id_nato_mmhs_informationlabel_eyesonly id_informationlabel".5"
138 #define id_nato_mmhs_informationlabel_exclusive id_informationlabel".6"
139 #define id_nato_mmhs_nat_acp127_notification_response id_nat".0"
140 #define id_mct_p772 id_mcont".1"
141 #define ub_military_string 69
142 #define ub_military_number_of_sics 8
143 #define lb_military_sic 3
144 #define ub_military_sic 8
145 #define ub_military_bigstring 128
146 #define ub_data_size 65535
148 static int hf_p772_InformationObject_PDU; /* InformationObject */
149 static int hf_p772_Acp127NotificationResponse_PDU; /* Acp127NotificationResponse */
150 static int hf_p772_ExemptedAddressSeq_PDU; /* ExemptedAddressSeq */
151 static int hf_p772_ExtendedAuthorisationInfo_PDU; /* ExtendedAuthorisationInfo */
152 static int hf_p772_DistributionCodes_PDU; /* DistributionCodes */
153 static int hf_p772_HandlingInstructions_PDU; /* HandlingInstructions */
154 static int hf_p772_MessageInstructions_PDU; /* MessageInstructions */
155 static int hf_p772_CodressMessage_PDU; /* CodressMessage */
156 static int hf_p772_OriginatorReference_PDU; /* OriginatorReference */
157 static int hf_p772_PrimaryPrecedence_PDU; /* PrimaryPrecedence */
158 static int hf_p772_CopyPrecedence_PDU; /* CopyPrecedence */
159 static int hf_p772_MessageType_PDU; /* MessageType */
160 static int hf_p772_AddressListDesignatorSeq_PDU; /* AddressListDesignatorSeq */
161 static int hf_p772_OtherRecipientDesignatorSeq_PDU; /* OtherRecipientDesignatorSeq */
162 static int hf_p772_PilotInformationSeq_PDU; /* PilotInformationSeq */
163 static int hf_p772_Acp127MessageIdentifier_PDU; /* Acp127MessageIdentifier */
164 static int hf_p772_OriginatorPlad_PDU; /* OriginatorPlad */
165 static int hf_p772_SecurityInformationLabels_PDU; /* SecurityInformationLabels */
166 static int hf_p772_PriorityLevelQualifier_PDU; /* PriorityLevelQualifier */
167 static int hf_p772_ADatP3Parameters_PDU; /* ADatP3Parameters */
168 static int hf_p772_ADatP3Data_PDU; /* ADatP3Data */
169 static int hf_p772_CorrectionsParameters_PDU; /* CorrectionsParameters */
170 static int hf_p772_CorrectionsData_PDU; /* CorrectionsData */
171 static int hf_p772_ForwardedEncryptedParameters_PDU; /* ForwardedEncryptedParameters */
172 static int hf_p772_ForwardedEncryptedData_PDU; /* ForwardedEncryptedData */
173 static int hf_p772_MMMessageParameters_PDU; /* MMMessageParameters */
174 static int hf_p772_MMMessageData_PDU; /* MMMessageData */
175 static int hf_p772_ACP127DataParameters_PDU; /* ACP127DataParameters */
176 static int hf_p772_ACP127DataData_PDU; /* ACP127DataData */
177 static int hf_p772_Acp127NotificationType_PDU; /* Acp127NotificationType */
178 static int hf_p772_mm; /* IPM */
179 static int hf_p772_mn; /* IPN */
180 static int hf_p772_acp127_notification_type; /* Acp127NotificationType */
181 static int hf_p772_receipt_time; /* ReceiptTimeField */
182 static int hf_p772_addressListIndicator; /* AddressListIndicator */
183 static int hf_p772_acp127_recipient; /* Acp127Recipient */
184 static int hf_p772_acp127_supp_info; /* Acp127SuppInfo */
185 static int hf_p772_AddressListIndicator_item; /* AddressListDesignator */
186 static int hf_p772_ExemptedAddressSeq_item; /* ExemptedAddress */
187 static int hf_p772_sics; /* SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic */
188 static int hf_p772_sics_item; /* Sic */
189 static int hf_p772_dist_Extensions; /* SEQUENCE_OF_DistributionExtensionField */
190 static int hf_p772_dist_Extensions_item; /* DistributionExtensionField */
191 static int hf_p772_dist_type; /* OBJECT_IDENTIFIER */
192 static int hf_p772_dist_value; /* T_dist_value */
193 static int hf_p772_HandlingInstructions_item; /* MilitaryString */
194 static int hf_p772_MessageInstructions_item; /* MilitaryString */
195 static int hf_p772_message_type_type; /* TypeMessage */
196 static int hf_p772_identifier; /* MessageIdentifier */
197 static int hf_p772_AddressListDesignatorSeq_item; /* AddressListDesignator */
198 static int hf_p772_address_list_type; /* AddressListType */
199 static int hf_p772_listName; /* ORDescriptor */
200 static int hf_p772_notificationRequest; /* AddressListRequest */
201 static int hf_p772_replyRequest; /* AddressListRequest */
202 static int hf_p772_OtherRecipientDesignatorSeq_item; /* OtherRecipientDesignator */
203 static int hf_p772_other_recipient_type; /* OtherRecipientType */
204 static int hf_p772_designator; /* MilitaryString */
205 static int hf_p772_PilotInformationSeq_item; /* PilotInformation */
206 static int hf_p772_pilotPrecedence; /* MMHSPrecedence */
207 static int hf_p772_pilotRecipient; /* SEQUENCE_OF_ORDescriptor */
208 static int hf_p772_pilotRecipient_item; /* ORDescriptor */
209 static int hf_p772_pilotSecurity; /* SecurityLabel */
210 static int hf_p772_pilotHandling; /* SEQUENCE_OF_MilitaryString */
211 static int hf_p772_pilotHandling_item; /* MilitaryString */
212 static int hf_p772_content_security_label; /* SecurityLabel */
213 static int hf_p772_heading_security_label; /* SecurityLabel */
214 static int hf_p772_body_part_security_labels; /* SEQUENCE_OF_BodyPartSecurityLabel */
215 static int hf_p772_body_part_security_labels_item; /* BodyPartSecurityLabel */
216 static int hf_p772_body_part_security_label; /* SecurityLabel */
217 static int hf_p772_body_part_sequence_number; /* BodyPartSequenceNumber */
218 static int hf_p772_lineOriented; /* IA5String */
219 static int hf_p772_setOriented; /* T_setOriented */
220 static int hf_p772_setOriented_item; /* IA5String */
221 static int hf_p772_delivery_time; /* MessageDeliveryTime */
222 static int hf_p772_delivery_envelope; /* OtherMessageDeliveryFields */
223 /* named bits */
224 static int hf_p772_Acp127NotificationType_acp127_nn;
225 static int hf_p772_Acp127NotificationType_acp127_pn;
226 static int hf_p772_Acp127NotificationType_acp127_tn;
228 /* Initialize the subtree pointers */
229 static int ett_p772;
230 static int ett_p772_InformationObject;
231 static int ett_p772_Acp127NotificationResponse;
232 static int ett_p772_AddressListIndicator;
233 static int ett_p772_ExemptedAddressSeq;
234 static int ett_p772_DistributionCodes;
235 static int ett_p772_SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic;
236 static int ett_p772_SEQUENCE_OF_DistributionExtensionField;
237 static int ett_p772_DistributionExtensionField;
238 static int ett_p772_HandlingInstructions;
239 static int ett_p772_MessageInstructions;
240 static int ett_p772_MessageType;
241 static int ett_p772_AddressListDesignatorSeq;
242 static int ett_p772_AddressListDesignator;
243 static int ett_p772_OtherRecipientDesignatorSeq;
244 static int ett_p772_OtherRecipientDesignator;
245 static int ett_p772_PilotInformationSeq;
246 static int ett_p772_PilotInformation;
247 static int ett_p772_SEQUENCE_OF_ORDescriptor;
248 static int ett_p772_SEQUENCE_OF_MilitaryString;
249 static int ett_p772_SecurityInformationLabels;
250 static int ett_p772_SEQUENCE_OF_BodyPartSecurityLabel;
251 static int ett_p772_BodyPartSecurityLabel;
252 static int ett_p772_ADatP3Data;
253 static int ett_p772_T_setOriented;
254 static int ett_p772_ForwardedEncryptedParameters;
255 static int ett_p772_MMMessageParameters;
256 static int ett_p772_Acp127NotificationType;
259 static const ber_choice_t InformationObject_choice[] = {
260 { 0, &hf_p772_mm , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p22_IPM },
261 { 1, &hf_p772_mn , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_p22_IPN },
262 { 0, NULL, 0, 0, 0, NULL }
265 static int
266 dissect_p772_InformationObject(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
267 offset = dissect_ber_choice(actx, tree, tvb, offset,
268 InformationObject_choice, hf_index, ett_p772_InformationObject,
269 NULL);
271 return offset;
275 static int * const Acp127NotificationType_bits[] = {
276 &hf_p772_Acp127NotificationType_acp127_nn,
277 &hf_p772_Acp127NotificationType_acp127_pn,
278 &hf_p772_Acp127NotificationType_acp127_tn,
279 NULL
282 static int
283 dissect_p772_Acp127NotificationType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
284 offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
285 Acp127NotificationType_bits, 3, hf_index, ett_p772_Acp127NotificationType,
286 NULL);
288 return offset;
292 static const value_string p772_AddressListType_vals[] = {
293 { 0, "primaryAddressList" },
294 { 1, "copyAddressList" },
295 { 0, NULL }
299 static int
300 dissect_p772_AddressListType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
301 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
302 NULL);
304 return offset;
308 static const value_string p772_AddressListRequest_vals[] = {
309 { 0, "action" },
310 { 1, "info" },
311 { 2, "both" },
312 { 0, NULL }
316 static int
317 dissect_p772_AddressListRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
318 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
319 NULL);
321 return offset;
325 static const ber_sequence_t AddressListDesignator_set[] = {
326 { &hf_p772_address_list_type, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p772_AddressListType },
327 { &hf_p772_listName , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_p22_ORDescriptor },
328 { &hf_p772_notificationRequest, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_AddressListRequest },
329 { &hf_p772_replyRequest , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_AddressListRequest },
330 { NULL, 0, 0, 0, NULL }
333 static int
334 dissect_p772_AddressListDesignator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
335 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
336 AddressListDesignator_set, hf_index, ett_p772_AddressListDesignator);
338 return offset;
342 static const ber_sequence_t AddressListIndicator_sequence_of[1] = {
343 { &hf_p772_AddressListIndicator_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_p772_AddressListDesignator },
346 static int
347 dissect_p772_AddressListIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
348 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
349 AddressListIndicator_sequence_of, hf_index, ett_p772_AddressListIndicator);
351 return offset;
356 static int
357 dissect_p772_Acp127Recipient(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
358 offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
359 actx, tree, tvb, offset,
360 1, ub_military_bigstring, hf_index, NULL);
362 return offset;
367 static int
368 dissect_p772_Acp127SuppInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
369 offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
370 actx, tree, tvb, offset,
371 1, ub_military_bigstring, hf_index, NULL);
373 return offset;
377 static const ber_sequence_t Acp127NotificationResponse_set[] = {
378 { &hf_p772_acp127_notification_type, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p772_Acp127NotificationType },
379 { &hf_p772_receipt_time , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_p22_ReceiptTimeField },
380 { &hf_p772_addressListIndicator, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_AddressListIndicator },
381 { &hf_p772_acp127_recipient, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_Acp127Recipient },
382 { &hf_p772_acp127_supp_info, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_Acp127SuppInfo },
383 { NULL, 0, 0, 0, NULL }
386 static int
387 dissect_p772_Acp127NotificationResponse(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
388 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
389 Acp127NotificationResponse_set, hf_index, ett_p772_Acp127NotificationResponse);
391 return offset;
396 static int
397 dissect_p772_ExemptedAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
398 offset = dissect_p22_ORDescriptor(implicit_tag, tvb, offset, actx, tree, hf_index);
400 return offset;
404 static const ber_sequence_t ExemptedAddressSeq_sequence_of[1] = {
405 { &hf_p772_ExemptedAddressSeq_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_p772_ExemptedAddress },
408 static int
409 dissect_p772_ExemptedAddressSeq(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
410 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
411 ExemptedAddressSeq_sequence_of, hf_index, ett_p772_ExemptedAddressSeq);
413 return offset;
418 static int
419 dissect_p772_ExtendedAuthorisationInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
420 offset = dissect_ber_UTCTime(implicit_tag, actx, tree, tvb, offset, hf_index, NULL, NULL);
422 return offset;
427 static int
428 dissect_p772_Sic(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
429 offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
430 actx, tree, tvb, offset,
431 lb_military_sic, ub_military_sic, hf_index, NULL);
433 return offset;
437 static const ber_sequence_t SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic_sequence_of[1] = {
438 { &hf_p772_sics_item , BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_p772_Sic },
441 static int
442 dissect_p772_SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
443 offset = dissect_ber_constrained_sequence_of(implicit_tag, actx, tree, tvb, offset,
444 1, ub_military_number_of_sics, SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic_sequence_of, hf_index, ett_p772_SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic);
446 return offset;
451 static int
452 dissect_p772_OBJECT_IDENTIFIER(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
453 offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
455 return offset;
460 static int
461 dissect_p772_T_dist_value(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
462 /* XXX: not implemented */
463 offset = dissect_unknown_ber(actx->pinfo, tvb, offset, tree);
466 return offset;
470 static const ber_sequence_t DistributionExtensionField_sequence[] = {
471 { &hf_p772_dist_type , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_p772_OBJECT_IDENTIFIER },
472 { &hf_p772_dist_value , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_p772_T_dist_value },
473 { NULL, 0, 0, 0, NULL }
476 static int
477 dissect_p772_DistributionExtensionField(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
478 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
479 DistributionExtensionField_sequence, hf_index, ett_p772_DistributionExtensionField);
481 return offset;
485 static const ber_sequence_t SEQUENCE_OF_DistributionExtensionField_sequence_of[1] = {
486 { &hf_p772_dist_Extensions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_p772_DistributionExtensionField },
489 static int
490 dissect_p772_SEQUENCE_OF_DistributionExtensionField(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
491 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
492 SEQUENCE_OF_DistributionExtensionField_sequence_of, hf_index, ett_p772_SEQUENCE_OF_DistributionExtensionField);
494 return offset;
498 static const ber_sequence_t DistributionCodes_set[] = {
499 { &hf_p772_sics , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic },
500 { &hf_p772_dist_Extensions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_SEQUENCE_OF_DistributionExtensionField },
501 { NULL, 0, 0, 0, NULL }
504 static int
505 dissect_p772_DistributionCodes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
506 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
507 DistributionCodes_set, hf_index, ett_p772_DistributionCodes);
509 return offset;
514 static int
515 dissect_p772_MilitaryString(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
516 offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
517 actx, tree, tvb, offset,
518 1, ub_military_string, hf_index, NULL);
520 return offset;
524 static const ber_sequence_t HandlingInstructions_sequence_of[1] = {
525 { &hf_p772_HandlingInstructions_item, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_p772_MilitaryString },
528 static int
529 dissect_p772_HandlingInstructions(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
530 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
531 HandlingInstructions_sequence_of, hf_index, ett_p772_HandlingInstructions);
533 return offset;
537 static const ber_sequence_t MessageInstructions_sequence_of[1] = {
538 { &hf_p772_MessageInstructions_item, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_p772_MilitaryString },
541 static int
542 dissect_p772_MessageInstructions(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
543 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
544 MessageInstructions_sequence_of, hf_index, ett_p772_MessageInstructions);
546 return offset;
551 static int
552 dissect_p772_CodressMessage(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
553 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
554 NULL);
556 return offset;
561 static int
562 dissect_p772_OriginatorReference(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
563 offset = dissect_p772_MilitaryString(implicit_tag, tvb, offset, actx, tree, hf_index);
565 return offset;
569 static const value_string p772_MMHSPrecedence_vals[] = {
570 { 0, "deferred" },
571 { 1, "routine" },
572 { 2, "priority" },
573 { 3, "immediate" },
574 { 4, "flash" },
575 { 5, "override" },
576 { 16, "ecp" },
577 { 17, "critic" },
578 { 18, "override" },
579 { 0, NULL }
583 static int
584 dissect_p772_MMHSPrecedence(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
585 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
586 NULL);
588 return offset;
592 static const value_string p772_PrimaryPrecedence_vals[] = {
593 { 0, "deferred" },
594 { 1, "routine" },
595 { 2, "priority" },
596 { 3, "immediate" },
597 { 4, "flash" },
598 { 5, "override" },
599 { 16, "ecp" },
600 { 17, "critic" },
601 { 18, "override" },
602 { 0, NULL }
606 static int
607 dissect_p772_PrimaryPrecedence(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
608 int precedence = -1;
609 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
610 &precedence);
612 if(precedence != -1)
613 col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (primary=%s)", val_to_str(precedence, p772_PrimaryPrecedence_vals, "precedence(%d)"));
616 return offset;
620 static const value_string p772_CopyPrecedence_vals[] = {
621 { 0, "deferred" },
622 { 1, "routine" },
623 { 2, "priority" },
624 { 3, "immediate" },
625 { 4, "flash" },
626 { 5, "override" },
627 { 16, "ecp" },
628 { 17, "critic" },
629 { 18, "override" },
630 { 0, NULL }
634 static int
635 dissect_p772_CopyPrecedence(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
636 int precedence = -1;
637 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
638 &precedence);
640 if(precedence != -1)
641 col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (copy=%s)", val_to_str(precedence, p772_CopyPrecedence_vals, "precedence(%d)"));
643 return offset;
647 static const value_string p772_TypeMessage_vals[] = {
648 { 0, "exercise" },
649 { 1, "operation" },
650 { 2, "project" },
651 { 3, "drill" },
652 { 0, NULL }
656 static int
657 dissect_p772_TypeMessage(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
658 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
659 NULL);
661 return offset;
666 static int
667 dissect_p772_MessageIdentifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
668 offset = dissect_p772_MilitaryString(implicit_tag, tvb, offset, actx, tree, hf_index);
670 return offset;
674 static const ber_sequence_t MessageType_set[] = {
675 { &hf_p772_message_type_type, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p772_TypeMessage },
676 { &hf_p772_identifier , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_MessageIdentifier },
677 { NULL, 0, 0, 0, NULL }
680 static int
681 dissect_p772_MessageType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
682 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
683 MessageType_set, hf_index, ett_p772_MessageType);
685 return offset;
689 static const ber_sequence_t AddressListDesignatorSeq_sequence_of[1] = {
690 { &hf_p772_AddressListDesignatorSeq_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_p772_AddressListDesignator },
693 static int
694 dissect_p772_AddressListDesignatorSeq(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
695 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
696 AddressListDesignatorSeq_sequence_of, hf_index, ett_p772_AddressListDesignatorSeq);
698 return offset;
702 static const value_string p772_OtherRecipientType_vals[] = {
703 { 0, "primary" },
704 { 1, "copy" },
705 { 0, NULL }
709 static int
710 dissect_p772_OtherRecipientType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
711 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
712 NULL);
714 return offset;
718 static const ber_sequence_t OtherRecipientDesignator_set[] = {
719 { &hf_p772_other_recipient_type, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p772_OtherRecipientType },
720 { &hf_p772_designator , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_p772_MilitaryString },
721 { NULL, 0, 0, 0, NULL }
724 static int
725 dissect_p772_OtherRecipientDesignator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
726 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
727 OtherRecipientDesignator_set, hf_index, ett_p772_OtherRecipientDesignator);
729 return offset;
733 static const ber_sequence_t OtherRecipientDesignatorSeq_sequence_of[1] = {
734 { &hf_p772_OtherRecipientDesignatorSeq_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_p772_OtherRecipientDesignator },
737 static int
738 dissect_p772_OtherRecipientDesignatorSeq(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
739 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
740 OtherRecipientDesignatorSeq_sequence_of, hf_index, ett_p772_OtherRecipientDesignatorSeq);
742 return offset;
746 static const ber_sequence_t SEQUENCE_OF_ORDescriptor_sequence_of[1] = {
747 { &hf_p772_pilotRecipient_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_p22_ORDescriptor },
750 static int
751 dissect_p772_SEQUENCE_OF_ORDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
752 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
753 SEQUENCE_OF_ORDescriptor_sequence_of, hf_index, ett_p772_SEQUENCE_OF_ORDescriptor);
755 return offset;
759 static const ber_sequence_t SEQUENCE_OF_MilitaryString_sequence_of[1] = {
760 { &hf_p772_pilotHandling_item, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_p772_MilitaryString },
763 static int
764 dissect_p772_SEQUENCE_OF_MilitaryString(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
765 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
766 SEQUENCE_OF_MilitaryString_sequence_of, hf_index, ett_p772_SEQUENCE_OF_MilitaryString);
768 return offset;
772 static const ber_sequence_t PilotInformation_sequence[] = {
773 { &hf_p772_pilotPrecedence, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_MMHSPrecedence },
774 { &hf_p772_pilotRecipient , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_SEQUENCE_OF_ORDescriptor },
775 { &hf_p772_pilotSecurity , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p1_SecurityLabel },
776 { &hf_p772_pilotHandling , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_SEQUENCE_OF_MilitaryString },
777 { NULL, 0, 0, 0, NULL }
780 static int
781 dissect_p772_PilotInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
782 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
783 PilotInformation_sequence, hf_index, ett_p772_PilotInformation);
785 return offset;
789 static const ber_sequence_t PilotInformationSeq_sequence_of[1] = {
790 { &hf_p772_PilotInformationSeq_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_p772_PilotInformation },
793 static int
794 dissect_p772_PilotInformationSeq(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
795 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
796 PilotInformationSeq_sequence_of, hf_index, ett_p772_PilotInformationSeq);
798 return offset;
803 static int
804 dissect_p772_Acp127MessageIdentifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
805 offset = dissect_p772_MilitaryString(implicit_tag, tvb, offset, actx, tree, hf_index);
807 return offset;
812 static int
813 dissect_p772_OriginatorPlad(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
814 offset = dissect_p772_MilitaryString(implicit_tag, tvb, offset, actx, tree, hf_index);
816 return offset;
821 static int
822 dissect_p772_BodyPartSequenceNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
823 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
824 NULL);
826 return offset;
830 static const ber_sequence_t BodyPartSecurityLabel_set[] = {
831 { &hf_p772_body_part_security_label, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p1_SecurityLabel },
832 { &hf_p772_body_part_sequence_number, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_BodyPartSequenceNumber },
833 { NULL, 0, 0, 0, NULL }
836 static int
837 dissect_p772_BodyPartSecurityLabel(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
838 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
839 BodyPartSecurityLabel_set, hf_index, ett_p772_BodyPartSecurityLabel);
841 return offset;
845 static const ber_sequence_t SEQUENCE_OF_BodyPartSecurityLabel_sequence_of[1] = {
846 { &hf_p772_body_part_security_labels_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_p772_BodyPartSecurityLabel },
849 static int
850 dissect_p772_SEQUENCE_OF_BodyPartSecurityLabel(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
851 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
852 SEQUENCE_OF_BodyPartSecurityLabel_sequence_of, hf_index, ett_p772_SEQUENCE_OF_BodyPartSecurityLabel);
854 return offset;
858 static const ber_sequence_t SecurityInformationLabels_sequence[] = {
859 { &hf_p772_content_security_label, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p1_SecurityLabel },
860 { &hf_p772_heading_security_label, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p1_SecurityLabel },
861 { &hf_p772_body_part_security_labels, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p772_SEQUENCE_OF_BodyPartSecurityLabel },
862 { NULL, 0, 0, 0, NULL }
865 static int
866 dissect_p772_SecurityInformationLabels(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
867 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
868 SecurityInformationLabels_sequence, hf_index, ett_p772_SecurityInformationLabels);
870 return offset;
874 static const value_string p772_PriorityLevelQualifier_vals[] = {
875 { 0, "low" },
876 { 1, "high" },
877 { 0, NULL }
881 static int
882 dissect_p772_PriorityLevelQualifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
883 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
884 NULL);
886 return offset;
891 static int
892 dissect_p772_ADatP3Parameters(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
893 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
894 NULL);
896 return offset;
901 static int
902 dissect_p772_IA5String(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
903 offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
904 actx, tree, tvb, offset, hf_index,
905 NULL);
907 return offset;
911 static const ber_sequence_t T_setOriented_sequence_of[1] = {
912 { &hf_p772_setOriented_item, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_p772_IA5String },
915 static int
916 dissect_p772_T_setOriented(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
917 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
918 T_setOriented_sequence_of, hf_index, ett_p772_T_setOriented);
920 return offset;
924 static const value_string p772_ADatP3Data_vals[] = {
925 { 0, "lineOriented" },
926 { 1, "setOriented" },
927 { 0, NULL }
930 static const ber_choice_t ADatP3Data_choice[] = {
931 { 0, &hf_p772_lineOriented , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_p772_IA5String },
932 { 1, &hf_p772_setOriented , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_p772_T_setOriented },
933 { 0, NULL, 0, 0, 0, NULL }
936 static int
937 dissect_p772_ADatP3Data(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
938 offset = dissect_ber_choice(actx, tree, tvb, offset,
939 ADatP3Data_choice, hf_index, ett_p772_ADatP3Data,
940 NULL);
942 return offset;
947 static int
948 dissect_p772_CorrectionsParameters(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
949 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
950 NULL);
952 return offset;
957 static int
958 dissect_p772_CorrectionsData(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
959 offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
960 actx, tree, tvb, offset, hf_index,
961 NULL);
963 return offset;
967 static const ber_sequence_t ForwardedEncryptedParameters_set[] = {
968 { &hf_p772_delivery_time , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p1_MessageDeliveryTime },
969 { &hf_p772_delivery_envelope, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_p1_OtherMessageDeliveryFields },
970 { NULL, 0, 0, 0, NULL }
973 static int
974 dissect_p772_ForwardedEncryptedParameters(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
975 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
976 ForwardedEncryptedParameters_set, hf_index, ett_p772_ForwardedEncryptedParameters);
978 return offset;
983 static int
984 dissect_p772_ForwardedEncryptedData(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
985 offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
986 NULL, 0, hf_index, -1,
987 NULL);
989 return offset;
993 static const ber_sequence_t MMMessageParameters_set[] = {
994 { &hf_p772_delivery_time , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_p1_MessageDeliveryTime },
995 { &hf_p772_delivery_envelope, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_p1_OtherMessageDeliveryFields },
996 { NULL, 0, 0, 0, NULL }
999 static int
1000 dissect_p772_MMMessageParameters(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1001 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1002 MMMessageParameters_set, hf_index, ett_p772_MMMessageParameters);
1004 return offset;
1009 static int
1010 dissect_p772_MMMessageData(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1011 offset = dissect_p22_IPM(implicit_tag, tvb, offset, actx, tree, hf_index);
1013 return offset;
1018 static int
1019 dissect_p772_ACP127DataParameters(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1020 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1021 NULL);
1023 return offset;
1028 static int
1029 dissect_p772_ACP127DataData(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1030 offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
1031 actx, tree, tvb, offset,
1032 1, ub_data_size, hf_index, NULL);
1034 return offset;
1037 /*--- PDUs ---*/
1039 static int dissect_InformationObject_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1040 int offset = 0;
1041 asn1_ctx_t asn1_ctx;
1042 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1043 offset = dissect_p772_InformationObject(false, tvb, offset, &asn1_ctx, tree, hf_p772_InformationObject_PDU);
1044 return offset;
1046 static int dissect_Acp127NotificationResponse_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1047 int offset = 0;
1048 asn1_ctx_t asn1_ctx;
1049 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1050 offset = dissect_p772_Acp127NotificationResponse(false, tvb, offset, &asn1_ctx, tree, hf_p772_Acp127NotificationResponse_PDU);
1051 return offset;
1053 static int dissect_ExemptedAddressSeq_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1054 int offset = 0;
1055 asn1_ctx_t asn1_ctx;
1056 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1057 offset = dissect_p772_ExemptedAddressSeq(false, tvb, offset, &asn1_ctx, tree, hf_p772_ExemptedAddressSeq_PDU);
1058 return offset;
1060 static int dissect_ExtendedAuthorisationInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1061 int offset = 0;
1062 asn1_ctx_t asn1_ctx;
1063 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1064 offset = dissect_p772_ExtendedAuthorisationInfo(false, tvb, offset, &asn1_ctx, tree, hf_p772_ExtendedAuthorisationInfo_PDU);
1065 return offset;
1067 static int dissect_DistributionCodes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1068 int offset = 0;
1069 asn1_ctx_t asn1_ctx;
1070 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1071 offset = dissect_p772_DistributionCodes(false, tvb, offset, &asn1_ctx, tree, hf_p772_DistributionCodes_PDU);
1072 return offset;
1074 static int dissect_HandlingInstructions_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1075 int offset = 0;
1076 asn1_ctx_t asn1_ctx;
1077 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1078 offset = dissect_p772_HandlingInstructions(false, tvb, offset, &asn1_ctx, tree, hf_p772_HandlingInstructions_PDU);
1079 return offset;
1081 static int dissect_MessageInstructions_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1082 int offset = 0;
1083 asn1_ctx_t asn1_ctx;
1084 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1085 offset = dissect_p772_MessageInstructions(false, tvb, offset, &asn1_ctx, tree, hf_p772_MessageInstructions_PDU);
1086 return offset;
1088 static int dissect_CodressMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1089 int offset = 0;
1090 asn1_ctx_t asn1_ctx;
1091 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1092 offset = dissect_p772_CodressMessage(false, tvb, offset, &asn1_ctx, tree, hf_p772_CodressMessage_PDU);
1093 return offset;
1095 static int dissect_OriginatorReference_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1096 int offset = 0;
1097 asn1_ctx_t asn1_ctx;
1098 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1099 offset = dissect_p772_OriginatorReference(false, tvb, offset, &asn1_ctx, tree, hf_p772_OriginatorReference_PDU);
1100 return offset;
1102 static int dissect_PrimaryPrecedence_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1103 int offset = 0;
1104 asn1_ctx_t asn1_ctx;
1105 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1106 offset = dissect_p772_PrimaryPrecedence(false, tvb, offset, &asn1_ctx, tree, hf_p772_PrimaryPrecedence_PDU);
1107 return offset;
1109 static int dissect_CopyPrecedence_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1110 int offset = 0;
1111 asn1_ctx_t asn1_ctx;
1112 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1113 offset = dissect_p772_CopyPrecedence(false, tvb, offset, &asn1_ctx, tree, hf_p772_CopyPrecedence_PDU);
1114 return offset;
1116 static int dissect_MessageType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1117 int offset = 0;
1118 asn1_ctx_t asn1_ctx;
1119 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1120 offset = dissect_p772_MessageType(false, tvb, offset, &asn1_ctx, tree, hf_p772_MessageType_PDU);
1121 return offset;
1123 static int dissect_AddressListDesignatorSeq_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1124 int offset = 0;
1125 asn1_ctx_t asn1_ctx;
1126 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1127 offset = dissect_p772_AddressListDesignatorSeq(false, tvb, offset, &asn1_ctx, tree, hf_p772_AddressListDesignatorSeq_PDU);
1128 return offset;
1130 static int dissect_OtherRecipientDesignatorSeq_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1131 int offset = 0;
1132 asn1_ctx_t asn1_ctx;
1133 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1134 offset = dissect_p772_OtherRecipientDesignatorSeq(false, tvb, offset, &asn1_ctx, tree, hf_p772_OtherRecipientDesignatorSeq_PDU);
1135 return offset;
1137 static int dissect_PilotInformationSeq_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1138 int offset = 0;
1139 asn1_ctx_t asn1_ctx;
1140 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1141 offset = dissect_p772_PilotInformationSeq(false, tvb, offset, &asn1_ctx, tree, hf_p772_PilotInformationSeq_PDU);
1142 return offset;
1144 static int dissect_Acp127MessageIdentifier_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1145 int offset = 0;
1146 asn1_ctx_t asn1_ctx;
1147 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1148 offset = dissect_p772_Acp127MessageIdentifier(false, tvb, offset, &asn1_ctx, tree, hf_p772_Acp127MessageIdentifier_PDU);
1149 return offset;
1151 static int dissect_OriginatorPlad_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1152 int offset = 0;
1153 asn1_ctx_t asn1_ctx;
1154 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1155 offset = dissect_p772_OriginatorPlad(false, tvb, offset, &asn1_ctx, tree, hf_p772_OriginatorPlad_PDU);
1156 return offset;
1158 static int dissect_SecurityInformationLabels_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1159 int offset = 0;
1160 asn1_ctx_t asn1_ctx;
1161 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1162 offset = dissect_p772_SecurityInformationLabels(false, tvb, offset, &asn1_ctx, tree, hf_p772_SecurityInformationLabels_PDU);
1163 return offset;
1165 static int dissect_PriorityLevelQualifier_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1166 int offset = 0;
1167 asn1_ctx_t asn1_ctx;
1168 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1169 offset = dissect_p772_PriorityLevelQualifier(false, tvb, offset, &asn1_ctx, tree, hf_p772_PriorityLevelQualifier_PDU);
1170 return offset;
1172 static int dissect_ADatP3Parameters_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1173 int offset = 0;
1174 asn1_ctx_t asn1_ctx;
1175 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1176 offset = dissect_p772_ADatP3Parameters(false, tvb, offset, &asn1_ctx, tree, hf_p772_ADatP3Parameters_PDU);
1177 return offset;
1179 static int dissect_ADatP3Data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1180 int offset = 0;
1181 asn1_ctx_t asn1_ctx;
1182 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1183 offset = dissect_p772_ADatP3Data(false, tvb, offset, &asn1_ctx, tree, hf_p772_ADatP3Data_PDU);
1184 return offset;
1186 static int dissect_CorrectionsParameters_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1187 int offset = 0;
1188 asn1_ctx_t asn1_ctx;
1189 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1190 offset = dissect_p772_CorrectionsParameters(false, tvb, offset, &asn1_ctx, tree, hf_p772_CorrectionsParameters_PDU);
1191 return offset;
1193 static int dissect_CorrectionsData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1194 int offset = 0;
1195 asn1_ctx_t asn1_ctx;
1196 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1197 offset = dissect_p772_CorrectionsData(false, tvb, offset, &asn1_ctx, tree, hf_p772_CorrectionsData_PDU);
1198 return offset;
1200 static int dissect_ForwardedEncryptedParameters_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1201 int offset = 0;
1202 asn1_ctx_t asn1_ctx;
1203 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1204 offset = dissect_p772_ForwardedEncryptedParameters(false, tvb, offset, &asn1_ctx, tree, hf_p772_ForwardedEncryptedParameters_PDU);
1205 return offset;
1207 static int dissect_ForwardedEncryptedData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1208 int offset = 0;
1209 asn1_ctx_t asn1_ctx;
1210 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1211 offset = dissect_p772_ForwardedEncryptedData(false, tvb, offset, &asn1_ctx, tree, hf_p772_ForwardedEncryptedData_PDU);
1212 return offset;
1214 static int dissect_MMMessageParameters_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1215 int offset = 0;
1216 asn1_ctx_t asn1_ctx;
1217 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1218 offset = dissect_p772_MMMessageParameters(false, tvb, offset, &asn1_ctx, tree, hf_p772_MMMessageParameters_PDU);
1219 return offset;
1221 static int dissect_MMMessageData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1222 int offset = 0;
1223 asn1_ctx_t asn1_ctx;
1224 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1225 offset = dissect_p772_MMMessageData(false, tvb, offset, &asn1_ctx, tree, hf_p772_MMMessageData_PDU);
1226 return offset;
1228 static int dissect_ACP127DataParameters_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1229 int offset = 0;
1230 asn1_ctx_t asn1_ctx;
1231 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1232 offset = dissect_p772_ACP127DataParameters(false, tvb, offset, &asn1_ctx, tree, hf_p772_ACP127DataParameters_PDU);
1233 return offset;
1235 static int dissect_ACP127DataData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1236 int offset = 0;
1237 asn1_ctx_t asn1_ctx;
1238 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1239 offset = dissect_p772_ACP127DataData(false, tvb, offset, &asn1_ctx, tree, hf_p772_ACP127DataData_PDU);
1240 return offset;
1242 static int dissect_Acp127NotificationType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1243 int offset = 0;
1244 asn1_ctx_t asn1_ctx;
1245 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1246 offset = dissect_p772_Acp127NotificationType(false, tvb, offset, &asn1_ctx, tree, hf_p772_Acp127NotificationType_PDU);
1247 return offset;
1253 * Dissect STANAG 4406 PDUs inside a PPDU.
1255 static int
1256 dissect_p772(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data _U_)
1258 int offset = 0;
1259 proto_item *item=NULL;
1260 proto_tree *tree=NULL;
1261 asn1_ctx_t asn1_ctx;
1262 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1264 if (parent_tree) {
1265 item = proto_tree_add_item(parent_tree, proto_p772, tvb, 0, -1, ENC_NA);
1266 tree = proto_item_add_subtree(item, ett_p772);
1269 col_set_str(pinfo->cinfo, COL_PROTOCOL, "P772");
1270 col_set_str(pinfo->cinfo, COL_INFO, "Military");
1272 dissect_p772_InformationObject(true, tvb, offset, &asn1_ctx , tree, -1);
1273 return tvb_captured_length(tvb);
1278 /*--- proto_register_p772 -------------------------------------------*/
1279 void proto_register_p772(void) {
1281 /* List of fields */
1282 static hf_register_info hf[] =
1284 { &hf_p772_InformationObject_PDU,
1285 { "InformationObject", "p772.InformationObject",
1286 FT_UINT32, BASE_DEC, VALS(p22_InformationObject_vals), 0,
1287 NULL, HFILL }},
1288 { &hf_p772_Acp127NotificationResponse_PDU,
1289 { "Acp127NotificationResponse", "p772.Acp127NotificationResponse_element",
1290 FT_NONE, BASE_NONE, NULL, 0,
1291 NULL, HFILL }},
1292 { &hf_p772_ExemptedAddressSeq_PDU,
1293 { "ExemptedAddressSeq", "p772.ExemptedAddressSeq",
1294 FT_UINT32, BASE_DEC, NULL, 0,
1295 NULL, HFILL }},
1296 { &hf_p772_ExtendedAuthorisationInfo_PDU,
1297 { "ExtendedAuthorisationInfo", "p772.ExtendedAuthorisationInfo",
1298 FT_STRING, BASE_NONE, NULL, 0,
1299 NULL, HFILL }},
1300 { &hf_p772_DistributionCodes_PDU,
1301 { "DistributionCodes", "p772.DistributionCodes_element",
1302 FT_NONE, BASE_NONE, NULL, 0,
1303 NULL, HFILL }},
1304 { &hf_p772_HandlingInstructions_PDU,
1305 { "HandlingInstructions", "p772.HandlingInstructions",
1306 FT_UINT32, BASE_DEC, NULL, 0,
1307 NULL, HFILL }},
1308 { &hf_p772_MessageInstructions_PDU,
1309 { "MessageInstructions", "p772.MessageInstructions",
1310 FT_UINT32, BASE_DEC, NULL, 0,
1311 NULL, HFILL }},
1312 { &hf_p772_CodressMessage_PDU,
1313 { "CodressMessage", "p772.CodressMessage",
1314 FT_INT32, BASE_DEC, NULL, 0,
1315 NULL, HFILL }},
1316 { &hf_p772_OriginatorReference_PDU,
1317 { "OriginatorReference", "p772.OriginatorReference",
1318 FT_STRING, BASE_NONE, NULL, 0,
1319 NULL, HFILL }},
1320 { &hf_p772_PrimaryPrecedence_PDU,
1321 { "PrimaryPrecedence", "p772.PrimaryPrecedence",
1322 FT_INT32, BASE_DEC, VALS(p772_PrimaryPrecedence_vals), 0,
1323 NULL, HFILL }},
1324 { &hf_p772_CopyPrecedence_PDU,
1325 { "CopyPrecedence", "p772.CopyPrecedence",
1326 FT_INT32, BASE_DEC, VALS(p772_CopyPrecedence_vals), 0,
1327 NULL, HFILL }},
1328 { &hf_p772_MessageType_PDU,
1329 { "MessageType", "p772.MessageType_element",
1330 FT_NONE, BASE_NONE, NULL, 0,
1331 NULL, HFILL }},
1332 { &hf_p772_AddressListDesignatorSeq_PDU,
1333 { "AddressListDesignatorSeq", "p772.AddressListDesignatorSeq",
1334 FT_UINT32, BASE_DEC, NULL, 0,
1335 NULL, HFILL }},
1336 { &hf_p772_OtherRecipientDesignatorSeq_PDU,
1337 { "OtherRecipientDesignatorSeq", "p772.OtherRecipientDesignatorSeq",
1338 FT_UINT32, BASE_DEC, NULL, 0,
1339 NULL, HFILL }},
1340 { &hf_p772_PilotInformationSeq_PDU,
1341 { "PilotInformationSeq", "p772.PilotInformationSeq",
1342 FT_UINT32, BASE_DEC, NULL, 0,
1343 NULL, HFILL }},
1344 { &hf_p772_Acp127MessageIdentifier_PDU,
1345 { "Acp127MessageIdentifier", "p772.Acp127MessageIdentifier",
1346 FT_STRING, BASE_NONE, NULL, 0,
1347 NULL, HFILL }},
1348 { &hf_p772_OriginatorPlad_PDU,
1349 { "OriginatorPlad", "p772.OriginatorPlad",
1350 FT_STRING, BASE_NONE, NULL, 0,
1351 NULL, HFILL }},
1352 { &hf_p772_SecurityInformationLabels_PDU,
1353 { "SecurityInformationLabels", "p772.SecurityInformationLabels_element",
1354 FT_NONE, BASE_NONE, NULL, 0,
1355 NULL, HFILL }},
1356 { &hf_p772_PriorityLevelQualifier_PDU,
1357 { "PriorityLevelQualifier", "p772.PriorityLevelQualifier",
1358 FT_UINT32, BASE_DEC, VALS(p772_PriorityLevelQualifier_vals), 0,
1359 NULL, HFILL }},
1360 { &hf_p772_ADatP3Parameters_PDU,
1361 { "ADatP3Parameters", "p772.ADatP3Parameters",
1362 FT_INT32, BASE_DEC, NULL, 0,
1363 NULL, HFILL }},
1364 { &hf_p772_ADatP3Data_PDU,
1365 { "ADatP3Data", "p772.ADatP3Data",
1366 FT_UINT32, BASE_DEC, VALS(p772_ADatP3Data_vals), 0,
1367 NULL, HFILL }},
1368 { &hf_p772_CorrectionsParameters_PDU,
1369 { "CorrectionsParameters", "p772.CorrectionsParameters",
1370 FT_INT32, BASE_DEC, NULL, 0,
1371 NULL, HFILL }},
1372 { &hf_p772_CorrectionsData_PDU,
1373 { "CorrectionsData", "p772.CorrectionsData",
1374 FT_STRING, BASE_NONE, NULL, 0,
1375 NULL, HFILL }},
1376 { &hf_p772_ForwardedEncryptedParameters_PDU,
1377 { "ForwardedEncryptedParameters", "p772.ForwardedEncryptedParameters_element",
1378 FT_NONE, BASE_NONE, NULL, 0,
1379 NULL, HFILL }},
1380 { &hf_p772_ForwardedEncryptedData_PDU,
1381 { "ForwardedEncryptedData", "p772.ForwardedEncryptedData",
1382 FT_BYTES, BASE_NONE, NULL, 0,
1383 NULL, HFILL }},
1384 { &hf_p772_MMMessageParameters_PDU,
1385 { "MMMessageParameters", "p772.MMMessageParameters_element",
1386 FT_NONE, BASE_NONE, NULL, 0,
1387 NULL, HFILL }},
1388 { &hf_p772_MMMessageData_PDU,
1389 { "MMMessageData", "p772.MMMessageData_element",
1390 FT_NONE, BASE_NONE, NULL, 0,
1391 NULL, HFILL }},
1392 { &hf_p772_ACP127DataParameters_PDU,
1393 { "ACP127DataParameters", "p772.ACP127DataParameters",
1394 FT_INT32, BASE_DEC, NULL, 0,
1395 NULL, HFILL }},
1396 { &hf_p772_ACP127DataData_PDU,
1397 { "ACP127DataData", "p772.ACP127DataData",
1398 FT_STRING, BASE_NONE, NULL, 0,
1399 NULL, HFILL }},
1400 { &hf_p772_Acp127NotificationType_PDU,
1401 { "Acp127NotificationType", "p772.Acp127NotificationType",
1402 FT_BYTES, BASE_NONE, NULL, 0,
1403 NULL, HFILL }},
1404 { &hf_p772_mm,
1405 { "mm", "p772.mm_element",
1406 FT_NONE, BASE_NONE, NULL, 0,
1407 "IPM", HFILL }},
1408 { &hf_p772_mn,
1409 { "mn", "p772.mn_element",
1410 FT_NONE, BASE_NONE, NULL, 0,
1411 "IPN", HFILL }},
1412 { &hf_p772_acp127_notification_type,
1413 { "acp127-notification-type", "p772.acp127_notification_type",
1414 FT_BYTES, BASE_NONE, NULL, 0,
1415 "Acp127NotificationType", HFILL }},
1416 { &hf_p772_receipt_time,
1417 { "receipt-time", "p772.receipt_time",
1418 FT_STRING, BASE_NONE, NULL, 0,
1419 "ReceiptTimeField", HFILL }},
1420 { &hf_p772_addressListIndicator,
1421 { "addressListIndicator", "p772.addressListIndicator",
1422 FT_UINT32, BASE_DEC, NULL, 0,
1423 NULL, HFILL }},
1424 { &hf_p772_acp127_recipient,
1425 { "acp127-recipient", "p772.acp127_recipient",
1426 FT_STRING, BASE_NONE, NULL, 0,
1427 "Acp127Recipient", HFILL }},
1428 { &hf_p772_acp127_supp_info,
1429 { "acp127-supp-info", "p772.acp127_supp_info",
1430 FT_STRING, BASE_NONE, NULL, 0,
1431 "Acp127SuppInfo", HFILL }},
1432 { &hf_p772_AddressListIndicator_item,
1433 { "AddressListDesignator", "p772.AddressListDesignator_element",
1434 FT_NONE, BASE_NONE, NULL, 0,
1435 NULL, HFILL }},
1436 { &hf_p772_ExemptedAddressSeq_item,
1437 { "ExemptedAddress", "p772.ExemptedAddress_element",
1438 FT_NONE, BASE_NONE, NULL, 0,
1439 NULL, HFILL }},
1440 { &hf_p772_sics,
1441 { "sics", "p772.sics",
1442 FT_UINT32, BASE_DEC, NULL, 0,
1443 "SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic", HFILL }},
1444 { &hf_p772_sics_item,
1445 { "Sic", "p772.Sic",
1446 FT_STRING, BASE_NONE, NULL, 0,
1447 NULL, HFILL }},
1448 { &hf_p772_dist_Extensions,
1449 { "dist-Extensions", "p772.dist_Extensions",
1450 FT_UINT32, BASE_DEC, NULL, 0,
1451 "SEQUENCE_OF_DistributionExtensionField", HFILL }},
1452 { &hf_p772_dist_Extensions_item,
1453 { "DistributionExtensionField", "p772.DistributionExtensionField_element",
1454 FT_NONE, BASE_NONE, NULL, 0,
1455 NULL, HFILL }},
1456 { &hf_p772_dist_type,
1457 { "dist-type", "p772.dist_type",
1458 FT_OID, BASE_NONE, NULL, 0,
1459 "OBJECT_IDENTIFIER", HFILL }},
1460 { &hf_p772_dist_value,
1461 { "dist-value", "p772.dist_value_element",
1462 FT_NONE, BASE_NONE, NULL, 0,
1463 "T_dist_value", HFILL }},
1464 { &hf_p772_HandlingInstructions_item,
1465 { "MilitaryString", "p772.MilitaryString",
1466 FT_STRING, BASE_NONE, NULL, 0,
1467 NULL, HFILL }},
1468 { &hf_p772_MessageInstructions_item,
1469 { "MilitaryString", "p772.MilitaryString",
1470 FT_STRING, BASE_NONE, NULL, 0,
1471 NULL, HFILL }},
1472 { &hf_p772_message_type_type,
1473 { "type", "p772.message_type_type",
1474 FT_INT32, BASE_DEC, VALS(p772_TypeMessage_vals), 0,
1475 "TypeMessage", HFILL }},
1476 { &hf_p772_identifier,
1477 { "identifier", "p772.identifier",
1478 FT_STRING, BASE_NONE, NULL, 0,
1479 "MessageIdentifier", HFILL }},
1480 { &hf_p772_AddressListDesignatorSeq_item,
1481 { "AddressListDesignator", "p772.AddressListDesignator_element",
1482 FT_NONE, BASE_NONE, NULL, 0,
1483 NULL, HFILL }},
1484 { &hf_p772_address_list_type,
1485 { "type", "p772.address_list_type",
1486 FT_INT32, BASE_DEC, VALS(p772_AddressListType_vals), 0,
1487 "AddressListType", HFILL }},
1488 { &hf_p772_listName,
1489 { "listName", "p772.listName_element",
1490 FT_NONE, BASE_NONE, NULL, 0,
1491 "ORDescriptor", HFILL }},
1492 { &hf_p772_notificationRequest,
1493 { "notificationRequest", "p772.notificationRequest",
1494 FT_INT32, BASE_DEC, VALS(p772_AddressListRequest_vals), 0,
1495 "AddressListRequest", HFILL }},
1496 { &hf_p772_replyRequest,
1497 { "replyRequest", "p772.replyRequest",
1498 FT_INT32, BASE_DEC, VALS(p772_AddressListRequest_vals), 0,
1499 "AddressListRequest", HFILL }},
1500 { &hf_p772_OtherRecipientDesignatorSeq_item,
1501 { "OtherRecipientDesignator", "p772.OtherRecipientDesignator_element",
1502 FT_NONE, BASE_NONE, NULL, 0,
1503 NULL, HFILL }},
1504 { &hf_p772_other_recipient_type,
1505 { "type", "p772.other_recipient_type",
1506 FT_INT32, BASE_DEC, VALS(p772_OtherRecipientType_vals), 0,
1507 "OtherRecipientType", HFILL }},
1508 { &hf_p772_designator,
1509 { "designator", "p772.designator",
1510 FT_STRING, BASE_NONE, NULL, 0,
1511 "MilitaryString", HFILL }},
1512 { &hf_p772_PilotInformationSeq_item,
1513 { "PilotInformation", "p772.PilotInformation_element",
1514 FT_NONE, BASE_NONE, NULL, 0,
1515 NULL, HFILL }},
1516 { &hf_p772_pilotPrecedence,
1517 { "pilotPrecedence", "p772.pilotPrecedence",
1518 FT_INT32, BASE_DEC, VALS(p772_MMHSPrecedence_vals), 0,
1519 "MMHSPrecedence", HFILL }},
1520 { &hf_p772_pilotRecipient,
1521 { "pilotRecipient", "p772.pilotRecipient",
1522 FT_UINT32, BASE_DEC, NULL, 0,
1523 "SEQUENCE_OF_ORDescriptor", HFILL }},
1524 { &hf_p772_pilotRecipient_item,
1525 { "ORDescriptor", "p772.ORDescriptor_element",
1526 FT_NONE, BASE_NONE, NULL, 0,
1527 NULL, HFILL }},
1528 { &hf_p772_pilotSecurity,
1529 { "pilotSecurity", "p772.pilotSecurity_element",
1530 FT_NONE, BASE_NONE, NULL, 0,
1531 "SecurityLabel", HFILL }},
1532 { &hf_p772_pilotHandling,
1533 { "pilotHandling", "p772.pilotHandling",
1534 FT_UINT32, BASE_DEC, NULL, 0,
1535 "SEQUENCE_OF_MilitaryString", HFILL }},
1536 { &hf_p772_pilotHandling_item,
1537 { "MilitaryString", "p772.MilitaryString",
1538 FT_STRING, BASE_NONE, NULL, 0,
1539 NULL, HFILL }},
1540 { &hf_p772_content_security_label,
1541 { "content-security-label", "p772.content_security_label_element",
1542 FT_NONE, BASE_NONE, NULL, 0,
1543 "SecurityLabel", HFILL }},
1544 { &hf_p772_heading_security_label,
1545 { "heading-security-label", "p772.heading_security_label_element",
1546 FT_NONE, BASE_NONE, NULL, 0,
1547 "SecurityLabel", HFILL }},
1548 { &hf_p772_body_part_security_labels,
1549 { "body-part-security-labels", "p772.body_part_security_labels",
1550 FT_UINT32, BASE_DEC, NULL, 0,
1551 "SEQUENCE_OF_BodyPartSecurityLabel", HFILL }},
1552 { &hf_p772_body_part_security_labels_item,
1553 { "BodyPartSecurityLabel", "p772.BodyPartSecurityLabel_element",
1554 FT_NONE, BASE_NONE, NULL, 0,
1555 NULL, HFILL }},
1556 { &hf_p772_body_part_security_label,
1557 { "body-part-security-label", "p772.body_part_security_label_element",
1558 FT_NONE, BASE_NONE, NULL, 0,
1559 "SecurityLabel", HFILL }},
1560 { &hf_p772_body_part_sequence_number,
1561 { "body-part-sequence-number", "p772.body_part_sequence_number",
1562 FT_INT32, BASE_DEC, NULL, 0,
1563 "BodyPartSequenceNumber", HFILL }},
1564 { &hf_p772_lineOriented,
1565 { "lineOriented", "p772.lineOriented",
1566 FT_STRING, BASE_NONE, NULL, 0,
1567 "IA5String", HFILL }},
1568 { &hf_p772_setOriented,
1569 { "setOriented", "p772.setOriented",
1570 FT_UINT32, BASE_DEC, NULL, 0,
1571 NULL, HFILL }},
1572 { &hf_p772_setOriented_item,
1573 { "setOriented item", "p772.setOriented_item",
1574 FT_STRING, BASE_NONE, NULL, 0,
1575 "IA5String", HFILL }},
1576 { &hf_p772_delivery_time,
1577 { "delivery-time", "p772.delivery_time",
1578 FT_STRING, BASE_NONE, NULL, 0,
1579 "MessageDeliveryTime", HFILL }},
1580 { &hf_p772_delivery_envelope,
1581 { "delivery-envelope", "p772.delivery_envelope_element",
1582 FT_NONE, BASE_NONE, NULL, 0,
1583 "OtherMessageDeliveryFields", HFILL }},
1584 { &hf_p772_Acp127NotificationType_acp127_nn,
1585 { "acp127-nn", "p772.Acp127NotificationType.acp127.nn",
1586 FT_BOOLEAN, 8, NULL, 0x80,
1587 NULL, HFILL }},
1588 { &hf_p772_Acp127NotificationType_acp127_pn,
1589 { "acp127-pn", "p772.Acp127NotificationType.acp127.pn",
1590 FT_BOOLEAN, 8, NULL, 0x40,
1591 NULL, HFILL }},
1592 { &hf_p772_Acp127NotificationType_acp127_tn,
1593 { "acp127-tn", "p772.Acp127NotificationType.acp127.tn",
1594 FT_BOOLEAN, 8, NULL, 0x20,
1595 NULL, HFILL }},
1598 /* List of subtrees */
1599 static int *ett[] = {
1600 &ett_p772,
1601 &ett_p772_InformationObject,
1602 &ett_p772_Acp127NotificationResponse,
1603 &ett_p772_AddressListIndicator,
1604 &ett_p772_ExemptedAddressSeq,
1605 &ett_p772_DistributionCodes,
1606 &ett_p772_SEQUENCE_SIZE_1_ub_military_number_of_sics_OF_Sic,
1607 &ett_p772_SEQUENCE_OF_DistributionExtensionField,
1608 &ett_p772_DistributionExtensionField,
1609 &ett_p772_HandlingInstructions,
1610 &ett_p772_MessageInstructions,
1611 &ett_p772_MessageType,
1612 &ett_p772_AddressListDesignatorSeq,
1613 &ett_p772_AddressListDesignator,
1614 &ett_p772_OtherRecipientDesignatorSeq,
1615 &ett_p772_OtherRecipientDesignator,
1616 &ett_p772_PilotInformationSeq,
1617 &ett_p772_PilotInformation,
1618 &ett_p772_SEQUENCE_OF_ORDescriptor,
1619 &ett_p772_SEQUENCE_OF_MilitaryString,
1620 &ett_p772_SecurityInformationLabels,
1621 &ett_p772_SEQUENCE_OF_BodyPartSecurityLabel,
1622 &ett_p772_BodyPartSecurityLabel,
1623 &ett_p772_ADatP3Data,
1624 &ett_p772_T_setOriented,
1625 &ett_p772_ForwardedEncryptedParameters,
1626 &ett_p772_MMMessageParameters,
1627 &ett_p772_Acp127NotificationType,
1630 /* Register protocol */
1631 proto_p772 = proto_register_protocol(PNAME, PSNAME, PFNAME);
1632 register_dissector("p772", dissect_p772, proto_p772);
1634 /* Register fields and subtrees */
1635 proto_register_field_array(proto_p772, hf, array_length(hf));
1636 proto_register_subtree_array(ett, array_length(ett));
1638 register_ber_syntax_dissector("STANAG 4406", proto_p772, dissect_p772);
1639 register_ber_oid_syntax(".p772", NULL, "STANAG 4406");
1643 /*--- proto_reg_handoff_p772 --- */
1644 void proto_reg_handoff_p772(void) {
1645 register_ber_oid_dissector("1.3.26.0.4406.0.2.0", dissect_PrimaryPrecedence_PDU, proto_p772, "primary-precedence");
1646 register_ber_oid_dissector("1.3.26.0.4406.0.2.1", dissect_CopyPrecedence_PDU, proto_p772, "copy-precedence");
1647 register_ber_oid_dissector("1.3.26.0.4406.0.2.2", dissect_MessageType_PDU, proto_p772, "message-type");
1648 register_ber_oid_dissector("1.3.26.0.4406.0.2.3", dissect_AddressListDesignatorSeq_PDU, proto_p772, "address-list-indicator");
1649 register_ber_oid_dissector("1.3.26.0.4406.0.2.4", dissect_ExemptedAddressSeq_PDU, proto_p772, "exempted-address");
1650 register_ber_oid_dissector("1.3.26.0.4406.0.2.5", dissect_ExtendedAuthorisationInfo_PDU, proto_p772, "extended-authorisation-info");
1651 register_ber_oid_dissector("1.3.26.0.4406.0.2.6", dissect_DistributionCodes_PDU, proto_p772, "distribution-codes");
1652 register_ber_oid_dissector("1.3.26.0.4406.0.2.7", dissect_HandlingInstructions_PDU, proto_p772, "handling-instructions");
1653 register_ber_oid_dissector("1.3.26.0.4406.0.2.8", dissect_MessageInstructions_PDU, proto_p772, "message-instructions");
1654 register_ber_oid_dissector("1.3.26.0.4406.0.2.9", dissect_CodressMessage_PDU, proto_p772, "codress-message");
1655 register_ber_oid_dissector("1.3.26.0.4406.0.2.10", dissect_OriginatorReference_PDU, proto_p772, "originator-reference");
1656 register_ber_oid_dissector("1.3.26.0.4406.0.2.11", dissect_OtherRecipientDesignatorSeq_PDU, proto_p772, "other-recipients-indicator");
1657 register_ber_oid_dissector("1.3.26.0.4406.0.2.12", dissect_PilotInformationSeq_PDU, proto_p772, "pilot-forwarding-info");
1658 register_ber_oid_dissector("1.3.26.0.4406.0.2.13", dissect_Acp127MessageIdentifier_PDU, proto_p772, "acp127-message-identifier");
1659 register_ber_oid_dissector("1.3.26.0.4406.0.2.14", dissect_OriginatorPlad_PDU, proto_p772, "originator-plad");
1660 register_ber_oid_dissector("1.3.26.0.4406.0.2.15", dissect_Acp127NotificationType_PDU, proto_p772, "acp127-notification-request");
1661 register_ber_oid_dissector("1.3.26.0.4406.0.2.16", dissect_Acp127NotificationResponse_PDU, proto_p772, "acp127-notification-response");
1662 register_ber_oid_dissector("1.3.26.0.4406.0.2.17", dissect_SecurityInformationLabels_PDU, proto_p772, "information-labels");
1663 register_ber_oid_dissector("1.3.26.0.4406.0.8.0", dissect_PriorityLevelQualifier_PDU, proto_p772, "priority-level-qualifier");
1664 register_ber_oid_dissector(id_nato_mmhs_et_adatp3, dissect_ADatP3Data_PDU, proto_p772, "adatp3");
1665 register_ber_oid_dissector(id_nato_mmhs_et_adatp3_parameters, dissect_ADatP3Parameters_PDU, proto_p772, "adatp3-parameters");
1666 register_ber_oid_dissector(id_nato_mmhs_et_corrections, dissect_CorrectionsData_PDU, proto_p772, "corrections");
1667 register_ber_oid_dissector(id_nato_mmhs_et_corrections_parameters, dissect_CorrectionsParameters_PDU, proto_p772, "corrections-parameters");
1668 register_ber_oid_dissector(id_nato_mmhs_et_forwarded_encrypted, dissect_ForwardedEncryptedData_PDU, proto_p772, "forwarded-encrypted");
1669 register_ber_oid_dissector(id_nato_mmhs_et_forwarded_encrypted_parameters, dissect_ForwardedEncryptedParameters_PDU, proto_p772, "forwarded-encrypted-parameters");
1670 register_ber_oid_dissector(id_nato_mmhs_et_mm_message, dissect_MMMessageData_PDU, proto_p772, "mm-message");
1671 register_ber_oid_dissector(id_nato_mmhs_et_mm_message_parameters, dissect_MMMessageParameters_PDU, proto_p772, "mm-message-parameters");
1672 register_ber_oid_dissector(id_nato_mmhs_et_mm_acp127data, dissect_ACP127DataData_PDU, proto_p772, "acp127-data");
1673 register_ber_oid_dissector(id_nato_mmhs_et_mm_acp127data_parameters, dissect_ACP127DataParameters_PDU, proto_p772, "acp127-data-parameters");
1674 register_ber_oid_dissector("2.6.1.4.17.1.3.26.0.4406.0.4.1", dissect_InformationObject_PDU, proto_p772, "id-et-content-p772");
1677 register_ber_oid_dissector("1.3.26.0.4406.0.4.1", dissect_p772, proto_p772, "STANAG 4406");