1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
4 /* asn2wrs.py -b -C -q -L -p acse -c ./acse.cnf -s ./packet-acse-template -D . -O ../.. acse.asn */
7 There is a bug in asn2wrs that it can not yet handle tagged assignments such
8 as EXTERNAL ::= [UNIVERSAL 8] IMPLICIT SEQUENCE {
10 This bug is workedaround by some .cnf magic but this should be cleaned up
11 once asn2wrs learns how to deal with tagged assignments
15 * Routines for ACSE packet dissection
16 * Ronnie Sahlberg 2005
17 * dissect_acse() based original handwritten dissector by Sid
18 * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
20 * Wireshark - Network traffic analyzer
21 * By Gerald Combs <gerald@wireshark.org>
22 * Copyright 1998 Gerald Combs
24 * SPDX-License-Identifier: GPL-2.0-or-later
29 #include <epan/packet.h>
30 #include <epan/exceptions.h>
31 #include <epan/expert.h>
32 #include <epan/oids.h>
33 #include <epan/asn1.h>
34 #include <wsutil/array.h>
36 #include "packet-ber.h"
37 #include "packet-acse.h"
38 #include "packet-ses.h"
39 #include "packet-pres.h"
40 #include "packet-x509if.h"
42 #define PNAME "ISO 8650-1 OSI Association Control Service"
46 #define CLPNAME "ISO 10035-1 OSI Connectionless Association Control Service"
47 #define CLPSNAME "CLACSE"
48 #define CLPFNAME "clacse"
50 #define ACSE_APDU_OID "2.2.1.0.1"
52 void proto_register_acse(void);
53 void proto_reg_handoff_acse(void);
55 /* Initialize the protocol and registered fields */
61 static int hf_acse_direct_reference
; /* T_direct_reference */
62 static int hf_acse_indirect_reference
; /* T_indirect_reference */
63 static int hf_acse_data_value_descriptor
; /* ObjectDescriptor */
64 static int hf_acse_encoding
; /* T_encoding */
65 static int hf_acse_single_ASN1_type
; /* T_single_ASN1_type */
66 static int hf_acse_octet_aligned
; /* T_octet_aligned */
67 static int hf_acse_arbitrary
; /* BIT_STRING */
68 static int hf_acse_aarq
; /* AARQ_apdu */
69 static int hf_acse_aare
; /* AARE_apdu */
70 static int hf_acse_rlrq
; /* RLRQ_apdu */
71 static int hf_acse_rlre
; /* RLRE_apdu */
72 static int hf_acse_abrt
; /* ABRT_apdu */
73 static int hf_acse_adt
; /* A_DT_apdu */
74 static int hf_acse_acrq
; /* ACRQ_apdu */
75 static int hf_acse_acrp
; /* ACRP_apdu */
76 static int hf_acse_aARQ_protocol_version
; /* T_AARQ_protocol_version */
77 static int hf_acse_aARQ_aSO_context_name
; /* T_AARQ_aSO_context_name */
78 static int hf_acse_called_AP_title
; /* AP_title */
79 static int hf_acse_called_AE_qualifier
; /* AE_qualifier */
80 static int hf_acse_called_AP_invocation_identifier
; /* AP_invocation_identifier */
81 static int hf_acse_called_AE_invocation_identifier
; /* AE_invocation_identifier */
82 static int hf_acse_calling_AP_title
; /* AP_title */
83 static int hf_acse_calling_AE_qualifier
; /* AE_qualifier */
84 static int hf_acse_calling_AP_invocation_identifier
; /* AP_invocation_identifier */
85 static int hf_acse_calling_AE_invocation_identifier
; /* AE_invocation_identifier */
86 static int hf_acse_sender_acse_requirements
; /* ACSE_requirements */
87 static int hf_acse_mechanism_name
; /* Mechanism_name */
88 static int hf_acse_calling_authentication_value
; /* Authentication_value */
89 static int hf_acse_aSO_context_name_list
; /* ASO_context_name_list */
90 static int hf_acse_implementation_information
; /* Implementation_data */
91 static int hf_acse_p_context_definition_list
; /* Syntactic_context_list */
92 static int hf_acse_called_asoi_tag
; /* ASOI_tag */
93 static int hf_acse_calling_asoi_tag
; /* ASOI_tag */
94 static int hf_acse_aARQ_user_information
; /* Association_data */
95 static int hf_acse_aARE_protocol_version
; /* T_AARE_protocol_version */
96 static int hf_acse_aARE_aSO_context_name
; /* T_AARE_aSO_context_name */
97 static int hf_acse_result
; /* Associate_result */
98 static int hf_acse_result_source_diagnostic
; /* Associate_source_diagnostic */
99 static int hf_acse_responding_AP_title
; /* AP_title */
100 static int hf_acse_responding_AE_qualifier
; /* AE_qualifier */
101 static int hf_acse_responding_AP_invocation_identifier
; /* AP_invocation_identifier */
102 static int hf_acse_responding_AE_invocation_identifier
; /* AE_invocation_identifier */
103 static int hf_acse_responder_acse_requirements
; /* ACSE_requirements */
104 static int hf_acse_responding_authentication_value
; /* Authentication_value */
105 static int hf_acse_p_context_result_list
; /* P_context_result_list */
106 static int hf_acse_aARE_user_information
; /* Association_data */
107 static int hf_acse_rLRQ_reason
; /* Release_request_reason */
108 static int hf_acse_aso_qualifier
; /* ASO_qualifier */
109 static int hf_acse_asoi_identifier
; /* ASOI_identifier */
110 static int hf_acse_rLRQ_user_information
; /* Association_data */
111 static int hf_acse_rLRE_reason
; /* Release_response_reason */
112 static int hf_acse_rLRE_user_information
; /* Association_data */
113 static int hf_acse_abort_source
; /* ABRT_source */
114 static int hf_acse_abort_diagnostic
; /* ABRT_diagnostic */
115 static int hf_acse_aBRT_user_information
; /* Association_data */
116 static int hf_acse_a_user_data
; /* User_Data */
117 static int hf_acse_aCRQ_aSO_context_name
; /* T_ACRQ_aSO_context_name */
118 static int hf_acse_user_information
; /* User_information */
119 static int hf_acse_aSO_context_name
; /* T_ACRP_aSO_context_name */
120 static int hf_acse_ap_title_form1
; /* AP_title_form1 */
121 static int hf_acse_ap_title_form2
; /* AP_title_form2 */
122 static int hf_acse_ap_title_form3
; /* AP_title_form3 */
123 static int hf_acse_aso_qualifier_form1
; /* ASO_qualifier_form1 */
124 static int hf_acse_aso_qualifier_form2
; /* ASO_qualifier_form2 */
125 static int hf_acse_aso_qualifier_form3
; /* ASO_qualifier_form3 */
126 static int hf_acse_aso_qualifier_form_any_octets
; /* ASO_qualifier_form_octets */
127 static int hf_acse_ae_title_form1
; /* AE_title_form1 */
128 static int hf_acse_ae_title_form2
; /* AE_title_form2 */
129 static int hf_acse_ASOI_tag_item
; /* ASOI_tag_item */
130 static int hf_acse_qualifier
; /* ASO_qualifier */
131 static int hf_acse_identifier
; /* ASOI_identifier */
132 static int hf_acse_ASO_context_name_list_item
; /* ASO_context_name */
133 static int hf_acse_context_list
; /* Context_list */
134 static int hf_acse_default_contact_list
; /* Default_Context_List */
135 static int hf_acse_Context_list_item
; /* Context_list_item */
136 static int hf_acse_pci
; /* Presentation_context_identifier */
137 static int hf_acse_abstract_syntax
; /* Abstract_syntax_name */
138 static int hf_acse_transfer_syntaxes
; /* SEQUENCE_OF_TransferSyntaxName */
139 static int hf_acse_transfer_syntaxes_item
; /* TransferSyntaxName */
140 static int hf_acse_Default_Context_List_item
; /* Default_Context_List_item */
141 static int hf_acse_abstract_syntax_name
; /* Abstract_syntax_name */
142 static int hf_acse_transfer_syntax_name
; /* TransferSyntaxName */
143 static int hf_acse_P_context_result_list_item
; /* P_context_result_list_item */
144 static int hf_acse_pcontext_result
; /* Result */
145 static int hf_acse_concrete_syntax_name
; /* Concrete_syntax_name */
146 static int hf_acse_provider_reason
; /* T_provider_reason */
147 static int hf_acse_service_user
; /* T_service_user */
148 static int hf_acse_service_provider
; /* T_service_provider */
149 static int hf_acse_Association_data_item
; /* EXTERNALt */
150 static int hf_acse_simply_encoded_data
; /* Simply_encoded_data */
151 static int hf_acse_fully_encoded_data
; /* PDV_list */
152 static int hf_acse_presentation_context_identifier
; /* Presentation_context_identifier */
153 static int hf_acse_presentation_data_values
; /* T_presentation_data_values */
154 static int hf_acse_simple_ASN1_type
; /* T_simple_ASN1_type */
155 static int hf_acse_pDVList_octet_aligned
; /* OCTET_STRING */
156 static int hf_acse_other_mechanism_name
; /* T_other_mechanism_name */
157 static int hf_acse_other_mechanism_value
; /* T_other_mechanism_value */
158 static int hf_acse_charstring
; /* GraphicString */
159 static int hf_acse_bitstring
; /* BIT_STRING */
160 static int hf_acse_external
; /* EXTERNALt */
161 static int hf_acse_other
; /* Authentication_value_other */
163 static int hf_acse_T_AARQ_protocol_version_version1
;
164 static int hf_acse_T_AARE_protocol_version_version1
;
165 static int hf_acse_ACSE_requirements_authentication
;
166 static int hf_acse_ACSE_requirements_aSO_context_negotiation
;
167 static int hf_acse_ACSE_requirements_higher_level_association
;
168 static int hf_acse_ACSE_requirements_nested_association
;
169 static int hf_acse_user_data
;
171 /* Initialize the subtree pointers */
173 static int ett_acse_EXTERNALt_U
;
174 static int ett_acse_T_encoding
;
175 static int ett_acse_ACSE_apdu
;
176 static int ett_acse_AARQ_apdu_U
;
177 static int ett_acse_T_AARQ_protocol_version
;
178 static int ett_acse_AARE_apdu_U
;
179 static int ett_acse_T_AARE_protocol_version
;
180 static int ett_acse_RLRQ_apdu_U
;
181 static int ett_acse_RLRE_apdu_U
;
182 static int ett_acse_ABRT_apdu_U
;
183 static int ett_acse_A_DT_apdu_U
;
184 static int ett_acse_ACRQ_apdu_U
;
185 static int ett_acse_ACRP_apdu_U
;
186 static int ett_acse_ACSE_requirements
;
187 static int ett_acse_AP_title
;
188 static int ett_acse_ASO_qualifier
;
189 static int ett_acse_AE_title
;
190 static int ett_acse_ASOI_tag
;
191 static int ett_acse_ASOI_tag_item
;
192 static int ett_acse_ASO_context_name_list
;
193 static int ett_acse_Syntactic_context_list
;
194 static int ett_acse_Context_list
;
195 static int ett_acse_Context_list_item
;
196 static int ett_acse_SEQUENCE_OF_TransferSyntaxName
;
197 static int ett_acse_Default_Context_List
;
198 static int ett_acse_Default_Context_List_item
;
199 static int ett_acse_P_context_result_list
;
200 static int ett_acse_P_context_result_list_item
;
201 static int ett_acse_Associate_source_diagnostic
;
202 static int ett_acse_Association_data
;
203 static int ett_acse_User_Data
;
204 static int ett_acse_PDV_list
;
205 static int ett_acse_T_presentation_data_values
;
206 static int ett_acse_Authentication_value_other
;
207 static int ett_acse_Authentication_value
;
209 static expert_field ei_acse_dissector_not_available
;
210 static expert_field ei_acse_malformed
;
211 static expert_field ei_acse_invalid_oid
;
213 static dissector_handle_t acse_handle
;
215 /* indirect_reference, used to pick up the signalling so we know what
216 kind of data is transferred in SES_DATA_TRANSFER_PDUs */
217 static uint32_t indir_ref
=0;
220 /* to keep track of presentation context identifiers and protocol-oids */
221 typedef struct _acse_ctx_oid_t
{
222 /* XXX here we should keep track of ADDRESS/PORT as well */
226 static wmem_map_t
*acse_ctx_oid_table
;
229 acse_ctx_oid_hash(const void *k
)
231 acse_ctx_oid_t
*aco
=(acse_ctx_oid_t
*)k
;
234 /* XXX this one should be made ADDRESS/PORT aware */
236 acse_ctx_oid_equal(const void *k1
, const void *k2
)
238 acse_ctx_oid_t
*aco1
=(acse_ctx_oid_t
*)k1
;
239 acse_ctx_oid_t
*aco2
=(acse_ctx_oid_t
*)k2
;
240 return aco1
->ctx_id
==aco2
->ctx_id
;
244 register_ctx_id_and_oid(packet_info
*pinfo _U_
, uint32_t idx
, char *oid
)
246 acse_ctx_oid_t
*aco
, *tmpaco
;
247 aco
=wmem_new(wmem_file_scope(), acse_ctx_oid_t
);
249 aco
->oid
=wmem_strdup(wmem_file_scope(), oid
);
251 /* if this ctx already exists, remove the old one first */
252 tmpaco
=(acse_ctx_oid_t
*)wmem_map_lookup(acse_ctx_oid_table
, aco
);
254 wmem_map_remove(acse_ctx_oid_table
, tmpaco
);
256 wmem_map_insert(acse_ctx_oid_table
, aco
, aco
);
259 find_oid_by_ctx_id(packet_info
*pinfo _U_
, uint32_t idx
)
261 acse_ctx_oid_t aco
, *tmpaco
;
263 tmpaco
=(acse_ctx_oid_t
*)wmem_map_lookup(acse_ctx_oid_table
, &aco
);
270 # endif /* NOT_NEEDED */
275 dissect_acse_T_direct_reference(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
276 offset
= dissect_ber_object_identifier_str(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &actx
->external
.direct_reference
);
278 actx
->external
.direct_ref_present
= (actx
->external
.direct_reference
!= NULL
) ? true : false;
287 dissect_acse_T_indirect_reference(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
289 struct SESSION_DATA_STRUCTURE
* session
= (struct SESSION_DATA_STRUCTURE
*) actx
->private_data
;
291 offset
= dissect_ber_integer(false, actx
, tree
, tvb
, offset
,
292 hf_acse_indirect_reference
,
295 /* look up the indirect reference */
296 if((oid
= find_oid_by_pres_ctx_id(actx
->pinfo
, indir_ref
)) != NULL
) {
297 actx
->external
.direct_reference
= wmem_strdup(actx
->pinfo
->pool
, oid
);
298 actx
->external
.direct_ref_present
= true;
302 session
->pres_ctx_id
= indir_ref
;
311 dissect_acse_ObjectDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
312 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_ObjectDescriptor
,
313 actx
, tree
, tvb
, offset
, hf_index
,
322 dissect_acse_T_single_ASN1_type(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
323 if (actx
->external
.direct_ref_present
) {
324 offset
=call_ber_oid_callback(actx
->external
.direct_reference
, tvb
, offset
, actx
->pinfo
, actx
->subtree
.top_tree
? actx
->subtree
.top_tree
: tree
, actx
->private_data
);
334 dissect_acse_T_octet_aligned(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 if (actx
->external
.direct_ref_present
) {
336 offset
=call_ber_oid_callback(actx
->external
.direct_reference
, tvb
, offset
, actx
->pinfo
, actx
->subtree
.top_tree
? actx
->subtree
.top_tree
: tree
, actx
->private_data
);
346 dissect_acse_BIT_STRING(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
347 offset
= dissect_ber_bitstring(implicit_tag
, actx
, tree
, tvb
, offset
,
348 NULL
, 0, hf_index
, -1,
355 static const value_string acse_T_encoding_vals
[] = {
356 { 0, "single-ASN1-type" },
357 { 1, "octet-aligned" },
362 static const ber_choice_t T_encoding_choice
[] = {
363 { 0, &hf_acse_single_ASN1_type
, BER_CLASS_CON
, 0, 0, dissect_acse_T_single_ASN1_type
},
364 { 1, &hf_acse_octet_aligned
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_acse_T_octet_aligned
},
365 { 2, &hf_acse_arbitrary
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_acse_BIT_STRING
},
366 { 0, NULL
, 0, 0, 0, NULL
}
370 dissect_acse_T_encoding(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
371 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
372 T_encoding_choice
, hf_index
, ett_acse_T_encoding
,
379 static const ber_sequence_t EXTERNALt_U_sequence
[] = {
380 { &hf_acse_direct_reference
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_acse_T_direct_reference
},
381 { &hf_acse_indirect_reference
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_acse_T_indirect_reference
},
382 { &hf_acse_data_value_descriptor
, BER_CLASS_UNI
, BER_UNI_TAG_ObjectDescriptor
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_acse_ObjectDescriptor
},
383 { &hf_acse_encoding
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_acse_T_encoding
},
384 { NULL
, 0, 0, 0, NULL
}
388 dissect_acse_EXTERNALt_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
389 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
390 EXTERNALt_U_sequence
, hf_index
, ett_acse_EXTERNALt_U
);
398 dissect_acse_EXTERNALt(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
399 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
400 hf_index
, BER_CLASS_UNI
, 8, true, dissect_acse_EXTERNALt_U
);
406 static int * const T_AARQ_protocol_version_bits
[] = {
407 &hf_acse_T_AARQ_protocol_version_version1
,
412 dissect_acse_T_AARQ_protocol_version(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
413 offset
= dissect_ber_bitstring(implicit_tag
, actx
, tree
, tvb
, offset
,
414 T_AARQ_protocol_version_bits
, 1, hf_index
, ett_acse_T_AARQ_protocol_version
,
423 dissect_acse_ASO_context_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
424 offset
= dissect_ber_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
432 dissect_acse_T_AARQ_aSO_context_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
433 offset
= dissect_ber_object_identifier_str(false, actx
, tree
, tvb
, offset
,
434 hf_index
, &actx
->external
.direct_reference
);
435 actx
->external
.direct_ref_present
= (actx
->external
.direct_reference
!= NULL
) ? true : false;
444 dissect_acse_AP_title_form1(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
445 offset
= dissect_x509if_Name(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
453 dissect_acse_AP_title_form2(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
454 offset
= dissect_ber_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
462 dissect_acse_AP_title_form3(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
463 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_PrintableString
,
464 actx
, tree
, tvb
, offset
, hf_index
,
471 const value_string acse_AP_title_vals
[] = {
472 { 0, "ap-title-form1" },
473 { 1, "ap-title-form2" },
474 { 2, "ap-title-form3" },
478 static const ber_choice_t AP_title_choice
[] = {
479 { 0, &hf_acse_ap_title_form1
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
, dissect_acse_AP_title_form1
},
480 { 1, &hf_acse_ap_title_form2
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_acse_AP_title_form2
},
481 { 2, &hf_acse_ap_title_form3
, BER_CLASS_UNI
, BER_UNI_TAG_PrintableString
, BER_FLAGS_NOOWNTAG
, dissect_acse_AP_title_form3
},
482 { 0, NULL
, 0, 0, 0, NULL
}
486 dissect_acse_AP_title(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
487 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
488 AP_title_choice
, hf_index
, ett_acse_AP_title
,
497 dissect_acse_ASO_qualifier_form1(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
498 offset
= dissect_x509if_RelativeDistinguishedName(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
506 dissect_acse_ASO_qualifier_form2(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
507 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
516 dissect_acse_ASO_qualifier_form3(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
517 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_PrintableString
,
518 actx
, tree
, tvb
, offset
, hf_index
,
527 dissect_acse_ASO_qualifier_form_octets(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
528 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
535 const value_string acse_ASO_qualifier_vals
[] = {
536 { 0, "aso-qualifier-form1" },
537 { 1, "aso-qualifier-form2" },
538 { 2, "aso-qualifier-form3" },
539 { 3, "aso-qualifier-form-any-octets" },
543 static const ber_choice_t ASO_qualifier_choice
[] = {
544 { 0, &hf_acse_aso_qualifier_form1
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_acse_ASO_qualifier_form1
},
545 { 1, &hf_acse_aso_qualifier_form2
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_NOOWNTAG
, dissect_acse_ASO_qualifier_form2
},
546 { 2, &hf_acse_aso_qualifier_form3
, BER_CLASS_UNI
, BER_UNI_TAG_PrintableString
, BER_FLAGS_NOOWNTAG
, dissect_acse_ASO_qualifier_form3
},
547 { 3, &hf_acse_aso_qualifier_form_any_octets
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_acse_ASO_qualifier_form_octets
},
548 { 0, NULL
, 0, 0, 0, NULL
}
552 dissect_acse_ASO_qualifier(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_choice(actx
, tree
, tvb
, offset
,
554 ASO_qualifier_choice
, hf_index
, ett_acse_ASO_qualifier
,
563 dissect_acse_AE_qualifier(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
564 offset
= dissect_acse_ASO_qualifier(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
572 dissect_acse_AP_invocation_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_
) {
573 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
582 dissect_acse_AE_invocation_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_
) {
583 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
590 static int * const ACSE_requirements_bits
[] = {
591 &hf_acse_ACSE_requirements_authentication
,
592 &hf_acse_ACSE_requirements_aSO_context_negotiation
,
593 &hf_acse_ACSE_requirements_higher_level_association
,
594 &hf_acse_ACSE_requirements_nested_association
,
599 dissect_acse_ACSE_requirements(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
600 offset
= dissect_ber_bitstring(implicit_tag
, actx
, tree
, tvb
, offset
,
601 ACSE_requirements_bits
, 4, hf_index
, ett_acse_ACSE_requirements
,
610 dissect_acse_Mechanism_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
611 offset
= dissect_ber_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
619 dissect_acse_GraphicString(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
620 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_GraphicString
,
621 actx
, tree
, tvb
, offset
, hf_index
,
630 dissect_acse_T_other_mechanism_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
631 offset
= dissect_ber_object_identifier_str(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &actx
->external
.direct_reference
);
633 actx
->external
.direct_ref_present
= (actx
->external
.direct_reference
!= NULL
) ? true : false;
642 dissect_acse_T_other_mechanism_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_
) {
643 if (actx
->external
.direct_ref_present
) {
644 offset
=call_ber_oid_callback(actx
->external
.direct_reference
, tvb
, offset
, actx
->pinfo
, actx
->subtree
.top_tree
, actx
->private_data
);
652 static const ber_sequence_t Authentication_value_other_sequence
[] = {
653 { &hf_acse_other_mechanism_name
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_acse_T_other_mechanism_name
},
654 { &hf_acse_other_mechanism_value
, BER_CLASS_ANY
, 0, BER_FLAGS_NOOWNTAG
, dissect_acse_T_other_mechanism_value
},
655 { NULL
, 0, 0, 0, NULL
}
659 dissect_acse_Authentication_value_other(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
660 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
661 Authentication_value_other_sequence
, hf_index
, ett_acse_Authentication_value_other
);
667 static const value_string acse_Authentication_value_vals
[] = {
675 static const ber_choice_t Authentication_value_choice
[] = {
676 { 0, &hf_acse_charstring
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_acse_GraphicString
},
677 { 1, &hf_acse_bitstring
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_acse_BIT_STRING
},
678 { 2, &hf_acse_external
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_acse_EXTERNALt
},
679 { 3, &hf_acse_other
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_acse_Authentication_value_other
},
680 { 0, NULL
, 0, 0, 0, NULL
}
684 dissect_acse_Authentication_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_
) {
685 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
686 Authentication_value_choice
, hf_index
, ett_acse_Authentication_value
,
693 static const ber_sequence_t ASO_context_name_list_sequence_of
[1] = {
694 { &hf_acse_ASO_context_name_list_item
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_acse_ASO_context_name
},
698 dissect_acse_ASO_context_name_list(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
699 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
700 ASO_context_name_list_sequence_of
, hf_index
, ett_acse_ASO_context_name_list
);
708 dissect_acse_Implementation_data(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
709 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_GraphicString
,
710 actx
, tree
, tvb
, offset
, hf_index
,
719 dissect_acse_Presentation_context_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_
) {
720 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
729 dissect_acse_Abstract_syntax_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
730 offset
= dissect_ber_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
738 dissect_acse_TransferSyntaxName(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_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
745 static const ber_sequence_t SEQUENCE_OF_TransferSyntaxName_sequence_of
[1] = {
746 { &hf_acse_transfer_syntaxes_item
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_acse_TransferSyntaxName
},
750 dissect_acse_SEQUENCE_OF_TransferSyntaxName(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
751 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
752 SEQUENCE_OF_TransferSyntaxName_sequence_of
, hf_index
, ett_acse_SEQUENCE_OF_TransferSyntaxName
);
758 static const ber_sequence_t Context_list_item_sequence
[] = {
759 { &hf_acse_pci
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_NOOWNTAG
, dissect_acse_Presentation_context_identifier
},
760 { &hf_acse_abstract_syntax
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_acse_Abstract_syntax_name
},
761 { &hf_acse_transfer_syntaxes
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_acse_SEQUENCE_OF_TransferSyntaxName
},
762 { NULL
, 0, 0, 0, NULL
}
766 dissect_acse_Context_list_item(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
767 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
768 Context_list_item_sequence
, hf_index
, ett_acse_Context_list_item
);
774 static const ber_sequence_t Context_list_sequence_of
[1] = {
775 { &hf_acse_Context_list_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_acse_Context_list_item
},
779 dissect_acse_Context_list(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
780 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
781 Context_list_sequence_of
, hf_index
, ett_acse_Context_list
);
787 static const ber_sequence_t Default_Context_List_item_sequence
[] = {
788 { &hf_acse_abstract_syntax_name
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Abstract_syntax_name
},
789 { &hf_acse_transfer_syntax_name
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_acse_TransferSyntaxName
},
790 { NULL
, 0, 0, 0, NULL
}
794 dissect_acse_Default_Context_List_item(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(implicit_tag
, actx
, tree
, tvb
, offset
,
796 Default_Context_List_item_sequence
, hf_index
, ett_acse_Default_Context_List_item
);
802 static const ber_sequence_t Default_Context_List_sequence_of
[1] = {
803 { &hf_acse_Default_Context_List_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_acse_Default_Context_List_item
},
807 dissect_acse_Default_Context_List(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
808 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
809 Default_Context_List_sequence_of
, hf_index
, ett_acse_Default_Context_List
);
815 static const value_string acse_Syntactic_context_list_vals
[] = {
816 { 0, "context-list" },
817 { 1, "default-contact-list" },
821 static const ber_choice_t Syntactic_context_list_choice
[] = {
822 { 0, &hf_acse_context_list
, BER_CLASS_CON
, 0, 0, dissect_acse_Context_list
},
823 { 1, &hf_acse_default_contact_list
, BER_CLASS_CON
, 1, 0, dissect_acse_Default_Context_List
},
824 { 0, NULL
, 0, 0, 0, NULL
}
828 dissect_acse_Syntactic_context_list(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
829 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
830 Syntactic_context_list_choice
, hf_index
, ett_acse_Syntactic_context_list
,
839 dissect_acse_ASOI_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_
) {
840 offset
= dissect_ber_constrained_integer(implicit_tag
, actx
, tree
, tvb
, offset
,
841 1U, 128U, hf_index
, NULL
);
847 static const ber_sequence_t ASOI_tag_item_sequence
[] = {
848 { &hf_acse_qualifier
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_ASO_qualifier
},
849 { &hf_acse_identifier
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
, dissect_acse_ASOI_identifier
},
850 { NULL
, 0, 0, 0, NULL
}
854 dissect_acse_ASOI_tag_item(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
855 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
856 ASOI_tag_item_sequence
, hf_index
, ett_acse_ASOI_tag_item
);
862 static const ber_sequence_t ASOI_tag_sequence_of
[1] = {
863 { &hf_acse_ASOI_tag_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_acse_ASOI_tag_item
},
867 dissect_acse_ASOI_tag(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
868 offset
= dissect_ber_constrained_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
869 0, 7, ASOI_tag_sequence_of
, hf_index
, ett_acse_ASOI_tag
);
875 static const ber_sequence_t Association_data_sequence_of
[1] = {
876 { &hf_acse_Association_data_item
, BER_CLASS_UNI
, 8, BER_FLAGS_NOOWNTAG
, dissect_acse_EXTERNALt
},
880 dissect_acse_Association_data(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
881 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
882 Association_data_sequence_of
, hf_index
, ett_acse_Association_data
);
888 static const ber_sequence_t AARQ_apdu_U_sequence
[] = {
889 { &hf_acse_aARQ_protocol_version
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_T_AARQ_protocol_version
},
890 { &hf_acse_aARQ_aSO_context_name
, BER_CLASS_CON
, 1, 0, dissect_acse_T_AARQ_aSO_context_name
},
891 { &hf_acse_called_AP_title
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_AP_title
},
892 { &hf_acse_called_AE_qualifier
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_AE_qualifier
},
893 { &hf_acse_called_AP_invocation_identifier
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
, dissect_acse_AP_invocation_identifier
},
894 { &hf_acse_called_AE_invocation_identifier
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
, dissect_acse_AE_invocation_identifier
},
895 { &hf_acse_calling_AP_title
, BER_CLASS_CON
, 6, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_AP_title
},
896 { &hf_acse_calling_AE_qualifier
, BER_CLASS_CON
, 7, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_AE_qualifier
},
897 { &hf_acse_calling_AP_invocation_identifier
, BER_CLASS_CON
, 8, BER_FLAGS_OPTIONAL
, dissect_acse_AP_invocation_identifier
},
898 { &hf_acse_calling_AE_invocation_identifier
, BER_CLASS_CON
, 9, BER_FLAGS_OPTIONAL
, dissect_acse_AE_invocation_identifier
},
899 { &hf_acse_sender_acse_requirements
, BER_CLASS_CON
, 10, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ACSE_requirements
},
900 { &hf_acse_mechanism_name
, BER_CLASS_CON
, 11, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Mechanism_name
},
901 { &hf_acse_calling_authentication_value
, BER_CLASS_CON
, 12, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_Authentication_value
},
902 { &hf_acse_aSO_context_name_list
, BER_CLASS_CON
, 13, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASO_context_name_list
},
903 { &hf_acse_implementation_information
, BER_CLASS_CON
, 29, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Implementation_data
},
904 { &hf_acse_p_context_definition_list
, BER_CLASS_CON
, 14, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_Syntactic_context_list
},
905 { &hf_acse_called_asoi_tag
, BER_CLASS_CON
, 15, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_tag
},
906 { &hf_acse_calling_asoi_tag
, BER_CLASS_CON
, 16, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_tag
},
907 { &hf_acse_aARQ_user_information
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Association_data
},
908 { NULL
, 0, 0, 0, NULL
}
912 dissect_acse_AARQ_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
913 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
914 AARQ_apdu_U_sequence
, hf_index
, ett_acse_AARQ_apdu_U
);
922 dissect_acse_AARQ_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
923 col_append_str(actx
->pinfo
->cinfo
, COL_INFO
, "A-Associate-Request");
925 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
926 hf_index
, BER_CLASS_APP
, 0, true, dissect_acse_AARQ_apdu_U
);
934 static int * const T_AARE_protocol_version_bits
[] = {
935 &hf_acse_T_AARE_protocol_version_version1
,
940 dissect_acse_T_AARE_protocol_version(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
941 offset
= dissect_ber_bitstring(implicit_tag
, actx
, tree
, tvb
, offset
,
942 T_AARE_protocol_version_bits
, 1, hf_index
, ett_acse_T_AARE_protocol_version
,
951 dissect_acse_T_AARE_aSO_context_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
952 offset
= dissect_ber_object_identifier_str(false, actx
, tree
, tvb
, offset
,
953 hf_index
, &actx
->external
.direct_reference
);
954 actx
->external
.direct_ref_present
= (actx
->external
.direct_reference
!= NULL
) ? true : false;
961 static const value_string acse_Associate_result_vals
[] = {
963 { 1, "rejected-permanent" },
964 { 2, "rejected-transient" },
970 dissect_acse_Associate_result(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
971 offset
= dissect_ber_constrained_integer(implicit_tag
, actx
, tree
, tvb
, offset
,
972 0U, 2U, hf_index
, NULL
);
978 static const value_string acse_T_service_user_vals
[] = {
980 { 1, "no-reason-given" },
981 { 2, "application-context-name-not-supported" },
982 { 3, "calling-AP-title-not-recognized" },
983 { 4, "calling-AP-invocation-identifier-not-recognized" },
984 { 5, "calling-AE-qualifier-not-recognized" },
985 { 6, "calling-AE-invocation-identifier-not-recognized" },
986 { 7, "called-AP-title-not-recognized" },
987 { 8, "called-AP-invocation-identifier-not-recognized" },
988 { 9, "called-AE-qualifier-not-recognized" },
989 { 10, "called-AE-invocation-identifier-not-recognized" },
990 { 11, "authentication-mechanism-name-not-recognized" },
991 { 12, "authentication-mechanism-name-required" },
992 { 13, "authentication-failure" },
993 { 14, "authentication-required" },
999 dissect_acse_T_service_user(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1000 offset
= dissect_ber_constrained_integer(implicit_tag
, actx
, tree
, tvb
, offset
,
1001 0U, 14U, hf_index
, NULL
);
1007 static const value_string acse_T_service_provider_vals
[] = {
1009 { 1, "no-reason-given" },
1010 { 2, "no-common-acse-version" },
1016 dissect_acse_T_service_provider(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1017 offset
= dissect_ber_constrained_integer(implicit_tag
, actx
, tree
, tvb
, offset
,
1018 0U, 2U, hf_index
, NULL
);
1024 static const value_string acse_Associate_source_diagnostic_vals
[] = {
1025 { 1, "service-user" },
1026 { 2, "service-provider" },
1030 static const ber_choice_t Associate_source_diagnostic_choice
[] = {
1031 { 1, &hf_acse_service_user
, BER_CLASS_CON
, 1, 0, dissect_acse_T_service_user
},
1032 { 2, &hf_acse_service_provider
, BER_CLASS_CON
, 2, 0, dissect_acse_T_service_provider
},
1033 { 0, NULL
, 0, 0, 0, NULL
}
1037 dissect_acse_Associate_source_diagnostic(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1038 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1039 Associate_source_diagnostic_choice
, hf_index
, ett_acse_Associate_source_diagnostic
,
1046 static const value_string acse_Result_vals
[] = {
1047 { 0, "acceptance" },
1048 { 1, "user-rejection" },
1049 { 2, "provider-rejection" },
1055 dissect_acse_Result(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1056 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1065 dissect_acse_Concrete_syntax_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1066 offset
= dissect_acse_TransferSyntaxName(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
1072 static const value_string acse_T_provider_reason_vals
[] = {
1073 { 0, "reason-not-specified" },
1074 { 1, "abstract-syntax-not-supported" },
1075 { 2, "proposed-transfer-syntaxes-not-supported" },
1076 { 3, "local-limit-on-DCS-exceeded" },
1082 dissect_acse_T_provider_reason(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1083 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1090 static const ber_sequence_t P_context_result_list_item_sequence
[] = {
1091 { &hf_acse_pcontext_result
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_acse_Result
},
1092 { &hf_acse_concrete_syntax_name
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Concrete_syntax_name
},
1093 { &hf_acse_provider_reason
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_T_provider_reason
},
1094 { NULL
, 0, 0, 0, NULL
}
1098 dissect_acse_P_context_result_list_item(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1099 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1100 P_context_result_list_item_sequence
, hf_index
, ett_acse_P_context_result_list_item
);
1106 static const ber_sequence_t P_context_result_list_sequence_of
[1] = {
1107 { &hf_acse_P_context_result_list_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_acse_P_context_result_list_item
},
1111 dissect_acse_P_context_result_list(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1112 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
1113 P_context_result_list_sequence_of
, hf_index
, ett_acse_P_context_result_list
);
1119 static const ber_sequence_t AARE_apdu_U_sequence
[] = {
1120 { &hf_acse_aARE_protocol_version
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_T_AARE_protocol_version
},
1121 { &hf_acse_aARE_aSO_context_name
, BER_CLASS_CON
, 1, 0, dissect_acse_T_AARE_aSO_context_name
},
1122 { &hf_acse_result
, BER_CLASS_CON
, 2, 0, dissect_acse_Associate_result
},
1123 { &hf_acse_result_source_diagnostic
, BER_CLASS_CON
, 3, BER_FLAGS_NOTCHKTAG
, dissect_acse_Associate_source_diagnostic
},
1124 { &hf_acse_responding_AP_title
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_AP_title
},
1125 { &hf_acse_responding_AE_qualifier
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_AE_qualifier
},
1126 { &hf_acse_responding_AP_invocation_identifier
, BER_CLASS_CON
, 6, BER_FLAGS_OPTIONAL
, dissect_acse_AP_invocation_identifier
},
1127 { &hf_acse_responding_AE_invocation_identifier
, BER_CLASS_CON
, 7, BER_FLAGS_OPTIONAL
, dissect_acse_AE_invocation_identifier
},
1128 { &hf_acse_responder_acse_requirements
, BER_CLASS_CON
, 8, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ACSE_requirements
},
1129 { &hf_acse_mechanism_name
, BER_CLASS_CON
, 9, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Mechanism_name
},
1130 { &hf_acse_responding_authentication_value
, BER_CLASS_CON
, 10, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_Authentication_value
},
1131 { &hf_acse_aSO_context_name_list
, BER_CLASS_CON
, 11, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASO_context_name_list
},
1132 { &hf_acse_implementation_information
, BER_CLASS_CON
, 29, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Implementation_data
},
1133 { &hf_acse_p_context_result_list
, BER_CLASS_CON
, 12, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_P_context_result_list
},
1134 { &hf_acse_called_asoi_tag
, BER_CLASS_CON
, 13, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_tag
},
1135 { &hf_acse_calling_asoi_tag
, BER_CLASS_CON
, 14, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_tag
},
1136 { &hf_acse_aARE_user_information
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Association_data
},
1137 { NULL
, 0, 0, 0, NULL
}
1141 dissect_acse_AARE_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1142 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1143 AARE_apdu_U_sequence
, hf_index
, ett_acse_AARE_apdu_U
);
1151 dissect_acse_AARE_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1152 col_append_str(actx
->pinfo
->cinfo
, COL_INFO
, "A-Associate-Response");
1154 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
1155 hf_index
, BER_CLASS_APP
, 1, true, dissect_acse_AARE_apdu_U
);
1163 static const value_string acse_Release_request_reason_vals
[] = {
1166 { 30, "user-defined" },
1172 dissect_acse_Release_request_reason(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1175 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1180 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " (%s)", val_to_str(reason
, acse_Release_request_reason_vals
, "reason(%d)"));
1187 static const ber_sequence_t RLRQ_apdu_U_sequence
[] = {
1188 { &hf_acse_rLRQ_reason
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Release_request_reason
},
1189 { &hf_acse_aso_qualifier
, BER_CLASS_CON
, 13, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_ASO_qualifier
},
1190 { &hf_acse_asoi_identifier
, BER_CLASS_CON
, 14, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_identifier
},
1191 { &hf_acse_rLRQ_user_information
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Association_data
},
1192 { NULL
, 0, 0, 0, NULL
}
1196 dissect_acse_RLRQ_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1197 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1198 RLRQ_apdu_U_sequence
, hf_index
, ett_acse_RLRQ_apdu_U
);
1206 dissect_acse_RLRQ_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1207 col_append_str(actx
->pinfo
->cinfo
, COL_INFO
, "Release-Request");
1209 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
1210 hf_index
, BER_CLASS_APP
, 2, true, dissect_acse_RLRQ_apdu_U
);
1218 static const value_string acse_Release_response_reason_vals
[] = {
1220 { 1, "not-finished" },
1221 { 30, "user-defined" },
1227 dissect_acse_Release_response_reason(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1230 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1235 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " (%s)", val_to_str(reason
, acse_Release_response_reason_vals
, "reason(%d)"));
1242 static const ber_sequence_t RLRE_apdu_U_sequence
[] = {
1243 { &hf_acse_rLRE_reason
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Release_response_reason
},
1244 { &hf_acse_aso_qualifier
, BER_CLASS_CON
, 13, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_ASO_qualifier
},
1245 { &hf_acse_asoi_identifier
, BER_CLASS_CON
, 14, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_identifier
},
1246 { &hf_acse_rLRE_user_information
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Association_data
},
1247 { NULL
, 0, 0, 0, NULL
}
1251 dissect_acse_RLRE_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1252 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1253 RLRE_apdu_U_sequence
, hf_index
, ett_acse_RLRE_apdu_U
);
1261 dissect_acse_RLRE_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1262 col_append_str(actx
->pinfo
->cinfo
, COL_INFO
, "Release-Response");
1264 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
1265 hf_index
, BER_CLASS_APP
, 3, true, dissect_acse_RLRE_apdu_U
);
1273 static const value_string acse_ABRT_source_vals
[] = {
1274 { 0, "service-user" },
1275 { 1, "service-provider" },
1281 dissect_acse_ABRT_source(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1284 offset
= dissect_ber_constrained_integer(implicit_tag
, actx
, tree
, tvb
, offset
,
1285 0U, 1U, hf_index
, &source
);
1289 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " (%s)", val_to_str(source
, acse_ABRT_source_vals
, "source(%d)"));
1296 static const value_string acse_ABRT_diagnostic_vals
[] = {
1297 { 1, "no-reason-given" },
1298 { 2, "protocol-error" },
1299 { 3, "authentication-mechanism-name-not-recognized" },
1300 { 4, "authentication-mechanism-name-required" },
1301 { 5, "authentication-failure" },
1302 { 6, "authentication-required" },
1308 dissect_acse_ABRT_diagnostic(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1309 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1316 static const ber_sequence_t ABRT_apdu_U_sequence
[] = {
1317 { &hf_acse_abort_source
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_acse_ABRT_source
},
1318 { &hf_acse_abort_diagnostic
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ABRT_diagnostic
},
1319 { &hf_acse_aso_qualifier
, BER_CLASS_CON
, 13, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_ASO_qualifier
},
1320 { &hf_acse_asoi_identifier
, BER_CLASS_CON
, 14, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_identifier
},
1321 { &hf_acse_aBRT_user_information
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_Association_data
},
1322 { NULL
, 0, 0, 0, NULL
}
1326 dissect_acse_ABRT_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1327 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1328 ABRT_apdu_U_sequence
, hf_index
, ett_acse_ABRT_apdu_U
);
1336 dissect_acse_ABRT_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1337 col_append_str(actx
->pinfo
->cinfo
, COL_INFO
, "Abort");
1339 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
1340 hf_index
, BER_CLASS_APP
, 4, true, dissect_acse_ABRT_apdu_U
);
1350 dissect_acse_User_information(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1351 offset
= dissect_acse_Association_data(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
1359 dissect_acse_Simply_encoded_data(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1360 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1369 dissect_acse_T_simple_ASN1_type(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1370 /*XXX not implemented yet */
1379 dissect_acse_OCTET_STRING(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1380 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1387 static const value_string acse_T_presentation_data_values_vals
[] = {
1388 { 0, "simple-ASN1-type" },
1389 { 1, "octet-aligned" },
1394 static const ber_choice_t T_presentation_data_values_choice
[] = {
1395 { 0, &hf_acse_simple_ASN1_type
, BER_CLASS_CON
, 0, 0, dissect_acse_T_simple_ASN1_type
},
1396 { 1, &hf_acse_pDVList_octet_aligned
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_acse_OCTET_STRING
},
1397 { 2, &hf_acse_arbitrary
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_acse_BIT_STRING
},
1398 { 0, NULL
, 0, 0, 0, NULL
}
1402 dissect_acse_T_presentation_data_values(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1403 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1404 T_presentation_data_values_choice
, hf_index
, ett_acse_T_presentation_data_values
,
1411 static const ber_sequence_t PDV_list_sequence
[] = {
1412 { &hf_acse_transfer_syntax_name
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_acse_TransferSyntaxName
},
1413 { &hf_acse_presentation_context_identifier
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_NOOWNTAG
, dissect_acse_Presentation_context_identifier
},
1414 { &hf_acse_presentation_data_values
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_acse_T_presentation_data_values
},
1415 { NULL
, 0, 0, 0, NULL
}
1419 dissect_acse_PDV_list(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1420 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1421 PDV_list_sequence
, hf_index
, ett_acse_PDV_list
);
1427 static const value_string acse_User_Data_vals
[] = {
1428 { 0, "user-information" },
1429 { 1, "simply-encoded-data" },
1430 { 2, "fully-encoded-data" },
1434 static const ber_choice_t User_Data_choice
[] = {
1435 { 0, &hf_acse_user_information
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_acse_User_information
},
1436 { 1, &hf_acse_simply_encoded_data
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_acse_Simply_encoded_data
},
1437 { 2, &hf_acse_fully_encoded_data
, BER_CLASS_CON
, 0, 0, dissect_acse_PDV_list
},
1438 { 0, NULL
, 0, 0, 0, NULL
}
1442 dissect_acse_User_Data(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1443 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1444 User_Data_choice
, hf_index
, ett_acse_User_Data
,
1451 static const ber_sequence_t A_DT_apdu_U_sequence
[] = {
1452 { &hf_acse_aso_qualifier
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_ASO_qualifier
},
1453 { &hf_acse_asoi_identifier
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_identifier
},
1454 { &hf_acse_a_user_data
, BER_CLASS_CON
, 30, BER_FLAGS_NOTCHKTAG
, dissect_acse_User_Data
},
1455 { NULL
, 0, 0, 0, NULL
}
1459 dissect_acse_A_DT_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1460 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1461 A_DT_apdu_U_sequence
, hf_index
, ett_acse_A_DT_apdu_U
);
1469 dissect_acse_A_DT_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1470 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
1471 hf_index
, BER_CLASS_APP
, 5, true, dissect_acse_A_DT_apdu_U
);
1479 dissect_acse_T_ACRQ_aSO_context_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1480 offset
= dissect_ber_object_identifier_str(false, actx
, tree
, tvb
, offset
,
1481 hf_index
, &actx
->external
.direct_reference
);
1482 actx
->external
.direct_ref_present
= (actx
->external
.direct_reference
!= NULL
) ? true : false;
1489 static const ber_sequence_t ACRQ_apdu_U_sequence
[] = {
1490 { &hf_acse_aso_qualifier
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_ASO_qualifier
},
1491 { &hf_acse_asoi_identifier
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_identifier
},
1492 { &hf_acse_aCRQ_aSO_context_name
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_T_ACRQ_aSO_context_name
},
1493 { &hf_acse_aSO_context_name_list
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASO_context_name_list
},
1494 { &hf_acse_p_context_definition_list
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_Syntactic_context_list
},
1495 { &hf_acse_user_information
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_User_information
},
1496 { NULL
, 0, 0, 0, NULL
}
1500 dissect_acse_ACRQ_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1501 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1502 ACRQ_apdu_U_sequence
, hf_index
, ett_acse_ACRQ_apdu_U
);
1510 dissect_acse_ACRQ_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1511 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
1512 hf_index
, BER_CLASS_APP
, 6, true, dissect_acse_ACRQ_apdu_U
);
1520 dissect_acse_T_ACRP_aSO_context_name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1521 offset
= dissect_ber_object_identifier_str(false, actx
, tree
, tvb
, offset
,
1522 hf_index
, &actx
->external
.direct_reference
);
1523 actx
->external
.direct_ref_present
= (actx
->external
.direct_reference
!= NULL
) ? true : false;
1530 static const ber_sequence_t ACRP_apdu_U_sequence
[] = {
1531 { &hf_acse_aso_qualifier
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOTCHKTAG
, dissect_acse_ASO_qualifier
},
1532 { &hf_acse_asoi_identifier
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_ASOI_identifier
},
1533 { &hf_acse_aSO_context_name
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_T_ACRP_aSO_context_name
},
1534 { &hf_acse_p_context_result_list
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_P_context_result_list
},
1535 { &hf_acse_user_information
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_acse_User_information
},
1536 { NULL
, 0, 0, 0, NULL
}
1540 dissect_acse_ACRP_apdu_U(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1541 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1542 ACRP_apdu_U_sequence
, hf_index
, ett_acse_ACRP_apdu_U
);
1550 dissect_acse_ACRP_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1551 offset
= dissect_ber_tagged_type(implicit_tag
, actx
, tree
, tvb
, offset
,
1552 hf_index
, BER_CLASS_APP
, 7, true, dissect_acse_ACRP_apdu_U
);
1558 static const ber_choice_t ACSE_apdu_choice
[] = {
1559 { 0, &hf_acse_aarq
, BER_CLASS_APP
, 0, BER_FLAGS_IMPLTAG
, dissect_acse_AARQ_apdu
},
1560 { 1, &hf_acse_aare
, BER_CLASS_APP
, 1, BER_FLAGS_IMPLTAG
, dissect_acse_AARE_apdu
},
1561 { 2, &hf_acse_rlrq
, BER_CLASS_APP
, 2, BER_FLAGS_IMPLTAG
, dissect_acse_RLRQ_apdu
},
1562 { 3, &hf_acse_rlre
, BER_CLASS_APP
, 3, BER_FLAGS_IMPLTAG
, dissect_acse_RLRE_apdu
},
1563 { 4, &hf_acse_abrt
, BER_CLASS_APP
, 4, BER_FLAGS_IMPLTAG
, dissect_acse_ABRT_apdu
},
1564 { 5, &hf_acse_adt
, BER_CLASS_APP
, 5, BER_FLAGS_IMPLTAG
, dissect_acse_A_DT_apdu
},
1565 { 6, &hf_acse_acrq
, BER_CLASS_APP
, 6, BER_FLAGS_IMPLTAG
, dissect_acse_ACRQ_apdu
},
1566 { 7, &hf_acse_acrp
, BER_CLASS_APP
, 7, BER_FLAGS_IMPLTAG
, dissect_acse_ACRP_apdu
},
1567 { 0, NULL
, 0, 0, 0, NULL
}
1571 dissect_acse_ACSE_apdu(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1572 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1573 ACSE_apdu_choice
, hf_index
, ett_acse_ACSE_apdu
,
1582 dissect_acse_AE_title_form1(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1583 offset
= dissect_x509if_Name(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
1591 dissect_acse_AE_title_form2(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1592 offset
= dissect_ber_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
1598 const value_string acse_AE_title_vals
[] = {
1599 { 0, "ae-title-form1" },
1600 { 1, "ae-title-form2" },
1604 static const ber_choice_t AE_title_choice
[] = {
1605 { 0, &hf_acse_ae_title_form1
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
, dissect_acse_AE_title_form1
},
1606 { 1, &hf_acse_ae_title_form2
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_acse_AE_title_form2
},
1607 { 0, NULL
, 0, 0, 0, NULL
}
1611 dissect_acse_AE_title(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1612 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1613 AE_title_choice
, hf_index
, ett_acse_AE_title
,
1622 * Dissect ACSE PDUs inside a PPDU.
1625 dissect_acse(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, void* data
)
1631 struct SESSION_DATA_STRUCTURE
* session
;
1632 asn1_ctx_t asn1_ctx
;
1633 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1635 /* do we have spdu type from the session dissector? */
1640 /* first, try to check length */
1641 /* do we have at least 2 bytes */
1642 if (!tvb_bytes_exist(tvb
, 0, 2)) {
1643 proto_tree_add_item(parent_tree
, hf_acse_user_data
, tvb
, offset
,
1644 tvb_reported_length_remaining(tvb
,offset
), ENC_NA
);
1645 return 0; /* no, it isn't a ACSE PDU */
1648 session
= ( (struct SESSION_DATA_STRUCTURE
*)data
);
1649 if (session
->spdu_type
== 0) {
1651 REPORT_DISSECTOR_BUG("Wrong spdu type %x from session dissector.",session
->spdu_type
);
1656 asn1_ctx
.private_data
= session
;
1657 /* save parent_tree so subdissectors can create new top nodes */
1658 asn1_ctx
.subtree
.top_tree
= parent_tree
;
1660 /* ACSE has only AARQ,AARE,RLRQ,RLRE,ABRT type of pdu */
1661 /* reject everything else */
1662 /* data pdu is not ACSE pdu and has to go directly to app dissector */
1663 switch (session
->spdu_type
) {
1664 case SES_CONNECTION_REQUEST
: /* AARQ */
1665 case SES_CONNECTION_ACCEPT
: /* AARE */
1666 case SES_REFUSE
: /* RLRE */
1667 case SES_DISCONNECT
: /* RLRQ */
1668 case SES_FINISH
: /* RLRE */
1669 case SES_ABORT
: /* ABRT */
1670 case CLSES_UNIT_DATA
: /* AARQ Connectionless session */
1672 case SES_DATA_TRANSFER
:
1673 oid
=find_oid_by_pres_ctx_id(pinfo
, indir_ref
);
1675 if (strcmp(oid
, ACSE_APDU_OID
) == 0) {
1676 proto_tree_add_expert_format(parent_tree
, pinfo
, &ei_acse_invalid_oid
, tvb
, offset
, -1,
1677 "Invalid OID: %s", ACSE_APDU_OID
);
1680 call_ber_oid_callback(oid
, tvb
, offset
, pinfo
, parent_tree
, NULL
);
1683 proto_tree_add_expert(parent_tree
, pinfo
, &ei_acse_dissector_not_available
,
1691 if (session
->spdu_type
== CLSES_UNIT_DATA
) {
1692 /* create display subtree for the connectionless protocol */
1693 item
= proto_tree_add_item(parent_tree
, proto_clacse
, tvb
, 0, -1, ENC_NA
);
1694 tree
= proto_item_add_subtree(item
, ett_acse
);
1696 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "CL-ACSE");
1697 col_clear(pinfo
->cinfo
, COL_INFO
);
1699 /* create display subtree for the protocol */
1700 item
= proto_tree_add_item(parent_tree
, proto_acse
, tvb
, 0, -1, ENC_NA
);
1701 tree
= proto_item_add_subtree(item
, ett_acse
);
1703 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "ACSE");
1704 col_clear(pinfo
->cinfo
, COL_INFO
);
1707 /* we can't make any additional checking here */
1708 /* postpone it before dissector will have more information */
1709 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
1710 int old_offset
=offset
;
1711 offset
= dissect_acse_ACSE_apdu(false, tvb
, offset
, &asn1_ctx
, tree
, -1);
1712 if (offset
== old_offset
) {
1713 proto_tree_add_expert(tree
, pinfo
, &ei_acse_malformed
, tvb
, offset
, -1);
1718 return tvb_captured_length(tvb
);
1721 /*--- proto_register_acse ----------------------------------------------*/
1722 void proto_register_acse(void) {
1724 /* List of fields */
1725 static hf_register_info hf
[] = {
1726 { &hf_acse_user_data
,
1727 { "User data", "acse.user_data",
1728 FT_BYTES
, BASE_NONE
, NULL
, 0,
1730 { &hf_acse_direct_reference
,
1731 { "direct-reference", "acse.direct_reference",
1732 FT_OID
, BASE_NONE
, NULL
, 0,
1733 "T_direct_reference", HFILL
}},
1734 { &hf_acse_indirect_reference
,
1735 { "indirect-reference", "acse.indirect_reference",
1736 FT_INT32
, BASE_DEC
, NULL
, 0,
1737 "T_indirect_reference", HFILL
}},
1738 { &hf_acse_data_value_descriptor
,
1739 { "data-value-descriptor", "acse.data_value_descriptor",
1740 FT_STRING
, BASE_NONE
, NULL
, 0,
1741 "ObjectDescriptor", HFILL
}},
1742 { &hf_acse_encoding
,
1743 { "encoding", "acse.encoding",
1744 FT_UINT32
, BASE_DEC
, VALS(acse_T_encoding_vals
), 0,
1746 { &hf_acse_single_ASN1_type
,
1747 { "single-ASN1-type", "acse.single_ASN1_type_element",
1748 FT_NONE
, BASE_NONE
, NULL
, 0,
1750 { &hf_acse_octet_aligned
,
1751 { "octet-aligned", "acse.octet_aligned",
1752 FT_BYTES
, BASE_NONE
, NULL
, 0,
1753 "T_octet_aligned", HFILL
}},
1754 { &hf_acse_arbitrary
,
1755 { "arbitrary", "acse.arbitrary",
1756 FT_BYTES
, BASE_NONE
, NULL
, 0,
1757 "BIT_STRING", HFILL
}},
1759 { "aarq", "acse.aarq_element",
1760 FT_NONE
, BASE_NONE
, NULL
, 0,
1761 "AARQ_apdu", HFILL
}},
1763 { "aare", "acse.aare_element",
1764 FT_NONE
, BASE_NONE
, NULL
, 0,
1765 "AARE_apdu", HFILL
}},
1767 { "rlrq", "acse.rlrq_element",
1768 FT_NONE
, BASE_NONE
, NULL
, 0,
1769 "RLRQ_apdu", HFILL
}},
1771 { "rlre", "acse.rlre_element",
1772 FT_NONE
, BASE_NONE
, NULL
, 0,
1773 "RLRE_apdu", HFILL
}},
1775 { "abrt", "acse.abrt_element",
1776 FT_NONE
, BASE_NONE
, NULL
, 0,
1777 "ABRT_apdu", HFILL
}},
1779 { "adt", "acse.adt_element",
1780 FT_NONE
, BASE_NONE
, NULL
, 0,
1781 "A_DT_apdu", HFILL
}},
1783 { "acrq", "acse.acrq_element",
1784 FT_NONE
, BASE_NONE
, NULL
, 0,
1785 "ACRQ_apdu", HFILL
}},
1787 { "acrp", "acse.acrp_element",
1788 FT_NONE
, BASE_NONE
, NULL
, 0,
1789 "ACRP_apdu", HFILL
}},
1790 { &hf_acse_aARQ_protocol_version
,
1791 { "protocol-version", "acse.aARQ_protocol_version",
1792 FT_BYTES
, BASE_NONE
, NULL
, 0,
1793 "T_AARQ_protocol_version", HFILL
}},
1794 { &hf_acse_aARQ_aSO_context_name
,
1795 { "aSO-context-name", "acse.aARQ_aSO_context_name",
1796 FT_OID
, BASE_NONE
, NULL
, 0,
1797 "T_AARQ_aSO_context_name", HFILL
}},
1798 { &hf_acse_called_AP_title
,
1799 { "called-AP-title", "acse.called_AP_title",
1800 FT_UINT32
, BASE_DEC
, VALS(acse_AP_title_vals
), 0,
1801 "AP_title", HFILL
}},
1802 { &hf_acse_called_AE_qualifier
,
1803 { "called-AE-qualifier", "acse.called_AE_qualifier",
1804 FT_UINT32
, BASE_DEC
, VALS(acse_ASO_qualifier_vals
), 0,
1805 "AE_qualifier", HFILL
}},
1806 { &hf_acse_called_AP_invocation_identifier
,
1807 { "called-AP-invocation-identifier", "acse.called_AP_invocation_identifier",
1808 FT_INT32
, BASE_DEC
, NULL
, 0,
1809 "AP_invocation_identifier", HFILL
}},
1810 { &hf_acse_called_AE_invocation_identifier
,
1811 { "called-AE-invocation-identifier", "acse.called_AE_invocation_identifier",
1812 FT_INT32
, BASE_DEC
, NULL
, 0,
1813 "AE_invocation_identifier", HFILL
}},
1814 { &hf_acse_calling_AP_title
,
1815 { "calling-AP-title", "acse.calling_AP_title",
1816 FT_UINT32
, BASE_DEC
, VALS(acse_AP_title_vals
), 0,
1817 "AP_title", HFILL
}},
1818 { &hf_acse_calling_AE_qualifier
,
1819 { "calling-AE-qualifier", "acse.calling_AE_qualifier",
1820 FT_UINT32
, BASE_DEC
, VALS(acse_ASO_qualifier_vals
), 0,
1821 "AE_qualifier", HFILL
}},
1822 { &hf_acse_calling_AP_invocation_identifier
,
1823 { "calling-AP-invocation-identifier", "acse.calling_AP_invocation_identifier",
1824 FT_INT32
, BASE_DEC
, NULL
, 0,
1825 "AP_invocation_identifier", HFILL
}},
1826 { &hf_acse_calling_AE_invocation_identifier
,
1827 { "calling-AE-invocation-identifier", "acse.calling_AE_invocation_identifier",
1828 FT_INT32
, BASE_DEC
, NULL
, 0,
1829 "AE_invocation_identifier", HFILL
}},
1830 { &hf_acse_sender_acse_requirements
,
1831 { "sender-acse-requirements", "acse.sender_acse_requirements",
1832 FT_BYTES
, BASE_NONE
, NULL
, 0,
1833 "ACSE_requirements", HFILL
}},
1834 { &hf_acse_mechanism_name
,
1835 { "mechanism-name", "acse.mechanism_name",
1836 FT_OID
, BASE_NONE
, NULL
, 0,
1838 { &hf_acse_calling_authentication_value
,
1839 { "calling-authentication-value", "acse.calling_authentication_value",
1840 FT_UINT32
, BASE_DEC
, VALS(acse_Authentication_value_vals
), 0,
1841 "Authentication_value", HFILL
}},
1842 { &hf_acse_aSO_context_name_list
,
1843 { "aSO-context-name-list", "acse.aSO_context_name_list",
1844 FT_UINT32
, BASE_DEC
, NULL
, 0,
1846 { &hf_acse_implementation_information
,
1847 { "implementation-information", "acse.implementation_information",
1848 FT_STRING
, BASE_NONE
, NULL
, 0,
1849 "Implementation_data", HFILL
}},
1850 { &hf_acse_p_context_definition_list
,
1851 { "p-context-definition-list", "acse.p_context_definition_list",
1852 FT_UINT32
, BASE_DEC
, VALS(acse_Syntactic_context_list_vals
), 0,
1853 "Syntactic_context_list", HFILL
}},
1854 { &hf_acse_called_asoi_tag
,
1855 { "called-asoi-tag", "acse.called_asoi_tag",
1856 FT_UINT32
, BASE_DEC
, NULL
, 0,
1857 "ASOI_tag", HFILL
}},
1858 { &hf_acse_calling_asoi_tag
,
1859 { "calling-asoi-tag", "acse.calling_asoi_tag",
1860 FT_UINT32
, BASE_DEC
, NULL
, 0,
1861 "ASOI_tag", HFILL
}},
1862 { &hf_acse_aARQ_user_information
,
1863 { "user-information", "acse.aARQ_user_information",
1864 FT_UINT32
, BASE_DEC
, NULL
, 0,
1865 "Association_data", HFILL
}},
1866 { &hf_acse_aARE_protocol_version
,
1867 { "protocol-version", "acse.aARE_protocol_version",
1868 FT_BYTES
, BASE_NONE
, NULL
, 0,
1869 "T_AARE_protocol_version", HFILL
}},
1870 { &hf_acse_aARE_aSO_context_name
,
1871 { "aSO-context-name", "acse.aARE_aSO_context_name",
1872 FT_OID
, BASE_NONE
, NULL
, 0,
1873 "T_AARE_aSO_context_name", HFILL
}},
1875 { "result", "acse.result",
1876 FT_UINT32
, BASE_DEC
, VALS(acse_Associate_result_vals
), 0,
1877 "Associate_result", HFILL
}},
1878 { &hf_acse_result_source_diagnostic
,
1879 { "result-source-diagnostic", "acse.result_source_diagnostic",
1880 FT_UINT32
, BASE_DEC
, VALS(acse_Associate_source_diagnostic_vals
), 0,
1881 "Associate_source_diagnostic", HFILL
}},
1882 { &hf_acse_responding_AP_title
,
1883 { "responding-AP-title", "acse.responding_AP_title",
1884 FT_UINT32
, BASE_DEC
, VALS(acse_AP_title_vals
), 0,
1885 "AP_title", HFILL
}},
1886 { &hf_acse_responding_AE_qualifier
,
1887 { "responding-AE-qualifier", "acse.responding_AE_qualifier",
1888 FT_UINT32
, BASE_DEC
, VALS(acse_ASO_qualifier_vals
), 0,
1889 "AE_qualifier", HFILL
}},
1890 { &hf_acse_responding_AP_invocation_identifier
,
1891 { "responding-AP-invocation-identifier", "acse.responding_AP_invocation_identifier",
1892 FT_INT32
, BASE_DEC
, NULL
, 0,
1893 "AP_invocation_identifier", HFILL
}},
1894 { &hf_acse_responding_AE_invocation_identifier
,
1895 { "responding-AE-invocation-identifier", "acse.responding_AE_invocation_identifier",
1896 FT_INT32
, BASE_DEC
, NULL
, 0,
1897 "AE_invocation_identifier", HFILL
}},
1898 { &hf_acse_responder_acse_requirements
,
1899 { "responder-acse-requirements", "acse.responder_acse_requirements",
1900 FT_BYTES
, BASE_NONE
, NULL
, 0,
1901 "ACSE_requirements", HFILL
}},
1902 { &hf_acse_responding_authentication_value
,
1903 { "responding-authentication-value", "acse.responding_authentication_value",
1904 FT_UINT32
, BASE_DEC
, VALS(acse_Authentication_value_vals
), 0,
1905 "Authentication_value", HFILL
}},
1906 { &hf_acse_p_context_result_list
,
1907 { "p-context-result-list", "acse.p_context_result_list",
1908 FT_UINT32
, BASE_DEC
, NULL
, 0,
1910 { &hf_acse_aARE_user_information
,
1911 { "user-information", "acse.aARE_user_information",
1912 FT_UINT32
, BASE_DEC
, NULL
, 0,
1913 "Association_data", HFILL
}},
1914 { &hf_acse_rLRQ_reason
,
1915 { "reason", "acse.rLRQ_reason",
1916 FT_INT32
, BASE_DEC
, VALS(acse_Release_request_reason_vals
), 0,
1917 "Release_request_reason", HFILL
}},
1918 { &hf_acse_aso_qualifier
,
1919 { "aso-qualifier", "acse.aso_qualifier",
1920 FT_UINT32
, BASE_DEC
, VALS(acse_ASO_qualifier_vals
), 0,
1922 { &hf_acse_asoi_identifier
,
1923 { "asoi-identifier", "acse.asoi_identifier",
1924 FT_UINT32
, BASE_DEC
, NULL
, 0,
1926 { &hf_acse_rLRQ_user_information
,
1927 { "user-information", "acse.rLRQ_user_information",
1928 FT_UINT32
, BASE_DEC
, NULL
, 0,
1929 "Association_data", HFILL
}},
1930 { &hf_acse_rLRE_reason
,
1931 { "reason", "acse.rLRE_reason",
1932 FT_INT32
, BASE_DEC
, VALS(acse_Release_response_reason_vals
), 0,
1933 "Release_response_reason", HFILL
}},
1934 { &hf_acse_rLRE_user_information
,
1935 { "user-information", "acse.rLRE_user_information",
1936 FT_UINT32
, BASE_DEC
, NULL
, 0,
1937 "Association_data", HFILL
}},
1938 { &hf_acse_abort_source
,
1939 { "abort-source", "acse.abort_source",
1940 FT_UINT32
, BASE_DEC
, VALS(acse_ABRT_source_vals
), 0,
1941 "ABRT_source", HFILL
}},
1942 { &hf_acse_abort_diagnostic
,
1943 { "abort-diagnostic", "acse.abort_diagnostic",
1944 FT_UINT32
, BASE_DEC
, VALS(acse_ABRT_diagnostic_vals
), 0,
1945 "ABRT_diagnostic", HFILL
}},
1946 { &hf_acse_aBRT_user_information
,
1947 { "user-information", "acse.aBRT_user_information",
1948 FT_UINT32
, BASE_DEC
, NULL
, 0,
1949 "Association_data", HFILL
}},
1950 { &hf_acse_a_user_data
,
1951 { "a-user-data", "acse.a_user_data",
1952 FT_UINT32
, BASE_DEC
, VALS(acse_User_Data_vals
), 0,
1953 "User_Data", HFILL
}},
1954 { &hf_acse_aCRQ_aSO_context_name
,
1955 { "aSO-context-name", "acse.aCRQ_aSO_context_name",
1956 FT_OID
, BASE_NONE
, NULL
, 0,
1957 "T_ACRQ_aSO_context_name", HFILL
}},
1958 { &hf_acse_user_information
,
1959 { "user-information", "acse.user_information",
1960 FT_UINT32
, BASE_DEC
, NULL
, 0,
1962 { &hf_acse_aSO_context_name
,
1963 { "aSO-context-name", "acse.aSO_context_name",
1964 FT_OID
, BASE_NONE
, NULL
, 0,
1965 "T_ACRP_aSO_context_name", HFILL
}},
1966 { &hf_acse_ap_title_form1
,
1967 { "ap-title-form1", "acse.ap_title_form1",
1968 FT_UINT32
, BASE_DEC
, VALS(x509if_Name_vals
), 0,
1970 { &hf_acse_ap_title_form2
,
1971 { "ap-title-form2", "acse.ap_title_form2",
1972 FT_OID
, BASE_NONE
, NULL
, 0,
1974 { &hf_acse_ap_title_form3
,
1975 { "ap-title-form3", "acse.ap_title_form3",
1976 FT_STRING
, BASE_NONE
, NULL
, 0,
1978 { &hf_acse_aso_qualifier_form1
,
1979 { "aso-qualifier-form1", "acse.aso_qualifier_form1",
1980 FT_UINT32
, BASE_DEC
, NULL
, 0,
1982 { &hf_acse_aso_qualifier_form2
,
1983 { "aso-qualifier-form2", "acse.aso_qualifier_form2",
1984 FT_INT32
, BASE_DEC
, NULL
, 0,
1986 { &hf_acse_aso_qualifier_form3
,
1987 { "aso-qualifier-form3", "acse.aso_qualifier_form3",
1988 FT_STRING
, BASE_NONE
, NULL
, 0,
1990 { &hf_acse_aso_qualifier_form_any_octets
,
1991 { "aso-qualifier-form-any-octets", "acse.aso_qualifier_form_any_octets",
1992 FT_BYTES
, BASE_NONE
, NULL
, 0,
1993 "ASO_qualifier_form_octets", HFILL
}},
1994 { &hf_acse_ae_title_form1
,
1995 { "ae-title-form1", "acse.ae_title_form1",
1996 FT_UINT32
, BASE_DEC
, VALS(x509if_Name_vals
), 0,
1998 { &hf_acse_ae_title_form2
,
1999 { "ae-title-form2", "acse.ae_title_form2",
2000 FT_OID
, BASE_NONE
, NULL
, 0,
2002 { &hf_acse_ASOI_tag_item
,
2003 { "ASOI-tag item", "acse.ASOI_tag_item_element",
2004 FT_NONE
, BASE_NONE
, NULL
, 0,
2006 { &hf_acse_qualifier
,
2007 { "qualifier", "acse.qualifier",
2008 FT_UINT32
, BASE_DEC
, VALS(acse_ASO_qualifier_vals
), 0,
2009 "ASO_qualifier", HFILL
}},
2010 { &hf_acse_identifier
,
2011 { "identifier", "acse.identifier",
2012 FT_UINT32
, BASE_DEC
, NULL
, 0,
2013 "ASOI_identifier", HFILL
}},
2014 { &hf_acse_ASO_context_name_list_item
,
2015 { "ASO-context-name", "acse.ASO_context_name",
2016 FT_OID
, BASE_NONE
, NULL
, 0,
2018 { &hf_acse_context_list
,
2019 { "context-list", "acse.context_list",
2020 FT_UINT32
, BASE_DEC
, NULL
, 0,
2022 { &hf_acse_default_contact_list
,
2023 { "default-contact-list", "acse.default_contact_list",
2024 FT_UINT32
, BASE_DEC
, NULL
, 0,
2025 "Default_Context_List", HFILL
}},
2026 { &hf_acse_Context_list_item
,
2027 { "Context-list item", "acse.Context_list_item_element",
2028 FT_NONE
, BASE_NONE
, NULL
, 0,
2031 { "pci", "acse.pci",
2032 FT_INT32
, BASE_DEC
, NULL
, 0,
2033 "Presentation_context_identifier", HFILL
}},
2034 { &hf_acse_abstract_syntax
,
2035 { "abstract-syntax", "acse.abstract_syntax",
2036 FT_OID
, BASE_NONE
, NULL
, 0,
2037 "Abstract_syntax_name", HFILL
}},
2038 { &hf_acse_transfer_syntaxes
,
2039 { "transfer-syntaxes", "acse.transfer_syntaxes",
2040 FT_UINT32
, BASE_DEC
, NULL
, 0,
2041 "SEQUENCE_OF_TransferSyntaxName", HFILL
}},
2042 { &hf_acse_transfer_syntaxes_item
,
2043 { "TransferSyntaxName", "acse.TransferSyntaxName",
2044 FT_OID
, BASE_NONE
, NULL
, 0,
2046 { &hf_acse_Default_Context_List_item
,
2047 { "Default-Context-List item", "acse.Default_Context_List_item_element",
2048 FT_NONE
, BASE_NONE
, NULL
, 0,
2050 { &hf_acse_abstract_syntax_name
,
2051 { "abstract-syntax-name", "acse.abstract_syntax_name",
2052 FT_OID
, BASE_NONE
, NULL
, 0,
2054 { &hf_acse_transfer_syntax_name
,
2055 { "transfer-syntax-name", "acse.transfer_syntax_name",
2056 FT_OID
, BASE_NONE
, NULL
, 0,
2057 "TransferSyntaxName", HFILL
}},
2058 { &hf_acse_P_context_result_list_item
,
2059 { "P-context-result-list item", "acse.P_context_result_list_item_element",
2060 FT_NONE
, BASE_NONE
, NULL
, 0,
2062 { &hf_acse_pcontext_result
,
2063 { "result", "acse.pcontext.result",
2064 FT_INT32
, BASE_DEC
, VALS(acse_Result_vals
), 0,
2066 { &hf_acse_concrete_syntax_name
,
2067 { "concrete-syntax-name", "acse.concrete_syntax_name",
2068 FT_OID
, BASE_NONE
, NULL
, 0,
2070 { &hf_acse_provider_reason
,
2071 { "provider-reason", "acse.provider_reason",
2072 FT_INT32
, BASE_DEC
, VALS(acse_T_provider_reason_vals
), 0,
2074 { &hf_acse_service_user
,
2075 { "service-user", "acse.service_user",
2076 FT_UINT32
, BASE_DEC
, VALS(acse_T_service_user_vals
), 0,
2078 { &hf_acse_service_provider
,
2079 { "service-provider", "acse.service_provider",
2080 FT_UINT32
, BASE_DEC
, VALS(acse_T_service_provider_vals
), 0,
2082 { &hf_acse_Association_data_item
,
2083 { "Association-data", "acse.EXTERNALt_element",
2084 FT_NONE
, BASE_NONE
, NULL
, 0,
2085 "EXTERNALt", HFILL
}},
2086 { &hf_acse_simply_encoded_data
,
2087 { "simply-encoded-data", "acse.simply_encoded_data",
2088 FT_BYTES
, BASE_NONE
, NULL
, 0,
2090 { &hf_acse_fully_encoded_data
,
2091 { "fully-encoded-data", "acse.fully_encoded_data_element",
2092 FT_NONE
, BASE_NONE
, NULL
, 0,
2093 "PDV_list", HFILL
}},
2094 { &hf_acse_presentation_context_identifier
,
2095 { "presentation-context-identifier", "acse.presentation_context_identifier",
2096 FT_INT32
, BASE_DEC
, NULL
, 0,
2098 { &hf_acse_presentation_data_values
,
2099 { "presentation-data-values", "acse.presentation_data_values",
2100 FT_UINT32
, BASE_DEC
, VALS(acse_T_presentation_data_values_vals
), 0,
2102 { &hf_acse_simple_ASN1_type
,
2103 { "simple-ASN1-type", "acse.simple_ASN1_type_element",
2104 FT_NONE
, BASE_NONE
, NULL
, 0,
2106 { &hf_acse_pDVList_octet_aligned
,
2107 { "octet-aligned", "acse.pDVList_octet_aligned",
2108 FT_BYTES
, BASE_NONE
, NULL
, 0,
2109 "OCTET_STRING", HFILL
}},
2110 { &hf_acse_other_mechanism_name
,
2111 { "other-mechanism-name", "acse.other_mechanism_name",
2112 FT_OID
, BASE_NONE
, NULL
, 0,
2114 { &hf_acse_other_mechanism_value
,
2115 { "other-mechanism-value", "acse.other_mechanism_value_element",
2116 FT_NONE
, BASE_NONE
, NULL
, 0,
2118 { &hf_acse_charstring
,
2119 { "charstring", "acse.charstring",
2120 FT_STRING
, BASE_NONE
, NULL
, 0,
2121 "GraphicString", HFILL
}},
2122 { &hf_acse_bitstring
,
2123 { "bitstring", "acse.bitstring",
2124 FT_BYTES
, BASE_NONE
, NULL
, 0,
2125 "BIT_STRING", HFILL
}},
2126 { &hf_acse_external
,
2127 { "external", "acse.external_element",
2128 FT_NONE
, BASE_NONE
, NULL
, 0,
2129 "EXTERNALt", HFILL
}},
2131 { "other", "acse.other_element",
2132 FT_NONE
, BASE_NONE
, NULL
, 0,
2133 "Authentication_value_other", HFILL
}},
2134 { &hf_acse_T_AARQ_protocol_version_version1
,
2135 { "version1", "acse.T.AARQ.protocol.version.version1",
2136 FT_BOOLEAN
, 8, NULL
, 0x80,
2138 { &hf_acse_T_AARE_protocol_version_version1
,
2139 { "version1", "acse.T.AARE.protocol.version.version1",
2140 FT_BOOLEAN
, 8, NULL
, 0x80,
2142 { &hf_acse_ACSE_requirements_authentication
,
2143 { "authentication", "acse.ACSE.requirements.authentication",
2144 FT_BOOLEAN
, 8, NULL
, 0x80,
2146 { &hf_acse_ACSE_requirements_aSO_context_negotiation
,
2147 { "aSO-context-negotiation", "acse.ACSE.requirements.aSO.context.negotiation",
2148 FT_BOOLEAN
, 8, NULL
, 0x40,
2150 { &hf_acse_ACSE_requirements_higher_level_association
,
2151 { "higher-level-association", "acse.ACSE.requirements.higher.level.association",
2152 FT_BOOLEAN
, 8, NULL
, 0x20,
2154 { &hf_acse_ACSE_requirements_nested_association
,
2155 { "nested-association", "acse.ACSE.requirements.nested.association",
2156 FT_BOOLEAN
, 8, NULL
, 0x10,
2160 /* List of subtrees */
2161 static int *ett
[] = {
2163 &ett_acse_EXTERNALt_U
,
2164 &ett_acse_T_encoding
,
2165 &ett_acse_ACSE_apdu
,
2166 &ett_acse_AARQ_apdu_U
,
2167 &ett_acse_T_AARQ_protocol_version
,
2168 &ett_acse_AARE_apdu_U
,
2169 &ett_acse_T_AARE_protocol_version
,
2170 &ett_acse_RLRQ_apdu_U
,
2171 &ett_acse_RLRE_apdu_U
,
2172 &ett_acse_ABRT_apdu_U
,
2173 &ett_acse_A_DT_apdu_U
,
2174 &ett_acse_ACRQ_apdu_U
,
2175 &ett_acse_ACRP_apdu_U
,
2176 &ett_acse_ACSE_requirements
,
2178 &ett_acse_ASO_qualifier
,
2181 &ett_acse_ASOI_tag_item
,
2182 &ett_acse_ASO_context_name_list
,
2183 &ett_acse_Syntactic_context_list
,
2184 &ett_acse_Context_list
,
2185 &ett_acse_Context_list_item
,
2186 &ett_acse_SEQUENCE_OF_TransferSyntaxName
,
2187 &ett_acse_Default_Context_List
,
2188 &ett_acse_Default_Context_List_item
,
2189 &ett_acse_P_context_result_list
,
2190 &ett_acse_P_context_result_list_item
,
2191 &ett_acse_Associate_source_diagnostic
,
2192 &ett_acse_Association_data
,
2193 &ett_acse_User_Data
,
2195 &ett_acse_T_presentation_data_values
,
2196 &ett_acse_Authentication_value_other
,
2197 &ett_acse_Authentication_value
,
2200 static ei_register_info ei
[] = {
2201 { &ei_acse_dissector_not_available
, { "acse.dissector_not_available", PI_UNDECODED
, PI_WARN
, "Dissector is not available", EXPFILL
}},
2202 { &ei_acse_malformed
, { "acse.malformed", PI_MALFORMED
, PI_ERROR
, "Malformed packet", EXPFILL
}},
2203 { &ei_acse_invalid_oid
, { "acse.invalid_oid", PI_UNDECODED
, PI_WARN
, "Invalid OID", EXPFILL
}},
2206 expert_module_t
* expert_acse
;
2208 /* Register protocol */
2209 proto_acse
= proto_register_protocol(PNAME
, PSNAME
, PFNAME
);
2210 acse_handle
= register_dissector("acse", dissect_acse
, proto_acse
);
2212 /* Register connectionless protocol */
2213 proto_clacse
= proto_register_protocol(CLPNAME
, CLPSNAME
, CLPFNAME
);
2216 /* Register fields and subtrees */
2217 proto_register_field_array(proto_acse
, hf
, array_length(hf
));
2218 proto_register_subtree_array(ett
, array_length(ett
));
2219 expert_acse
= expert_register_protocol(proto_acse
);
2220 expert_register_field_array(expert_acse
, ei
, array_length(ei
));
2223 acse_ctx_oid_table
= wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), acse_ctx_oid_hash
,
2224 acse_ctx_oid_equal
);
2229 /*--- proto_reg_handoff_acse -------------------------------------------*/
2230 void proto_reg_handoff_acse(void) {
2231 /*#include "packet-acse-dis-tab.c"*/
2232 oid_add_from_string("id-aCSE","2.2.3.1.1");
2233 register_ber_oid_dissector_handle(ACSE_APDU_OID
, acse_handle
, proto_acse
, "id-as-acse");