summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asn1/acse/Makefile4
-rw-r--r--asn1/acse/acse.asn5
-rw-r--r--asn1/acse/acse.cnf15
-rw-r--r--asn1/acse/packet-acse-template.c27
-rw-r--r--asn1/cmip/packet-cmip-template.c6
-rw-r--r--epan/dissectors/packet-acse.c49
-rw-r--r--epan/dissectors/packet-cmip.c5
-rw-r--r--epan/dissectors/packet-ftam.c7
8 files changed, 46 insertions, 72 deletions
diff --git a/asn1/acse/Makefile b/asn1/acse/Makefile
index af24ddd4d7..7321e4595b 100644
--- a/asn1/acse/Makefile
+++ b/asn1/acse/Makefile
@@ -13,7 +13,5 @@ clean:
rm -f parsetab.py $(DISSECTOR_FILES)
copy_files: generate_dissector
-# cp $(DISSECTOR_FILES) ../../epan/dissectors
- echo "Dont use this dissector yet, there are two bugs in it you will"
- echo "have to fix manually first. See packet-acse.c comment at top "
+ cp $(DISSECTOR_FILES) ../../epan/dissectors
diff --git a/asn1/acse/acse.asn b/asn1/acse/acse.asn
index ab2cbe6388..eea7559e94 100644
--- a/asn1/acse/acse.asn
+++ b/asn1/acse/acse.asn
@@ -18,7 +18,10 @@ IMPORTS
-- ITU-T Rec. X.501 | ISO/IEC 9594-2.
-
+-- Workaround for bug in ASN2ETH in the .cnf file
+-- to handle the lack of support for tagged assignments.
+-- remove that workaround once asn2eth learns how to handle
+-- tagged assignments.
EXTERNAL ::= [UNIVERSAL 8] IMPLICIT SEQUENCE
{
direct-reference OBJECT IDENTIFIER OPTIONAL,
diff --git a/asn1/acse/acse.cnf b/asn1/acse/acse.cnf
index 8ed7c9d569..a6ce2a9283 100644
--- a/asn1/acse/acse.cnf
+++ b/asn1/acse/acse.cnf
@@ -23,6 +23,21 @@ AARQ-apdu/aSO-context-name AARQ_aSO_context_name
AARE-apdu/aSO-context-name AARE_aSO_context_name
ACRQ-apdu/aSO-context-name ACRQ_aSO_context_name
+#.FN_BODY EXTERNAL
+ gint8 class;
+ gboolean pc, ind_field;
+ gint32 tag;
+ gint32 len1;
+
+ /* XXX asn2eth can not yet handle tagged assignment so for the
+ * time being just remove this tag manually inside the EXTERNAL
+ * dissector.
+ */
+ offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
+ offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
+ offset = dissect_ber_sequence(TRUE, pinfo, tree, tvb, offset,
+ EXTERNAL_sequence, hf_index, ett_acse_EXTERNAL);
+
#.FN_BODY Authentication-value-other/other-mechanism-name
offset = dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
hf_index, object_identifier_id);
diff --git a/asn1/acse/packet-acse-template.c b/asn1/acse/packet-acse-template.c
index 8c2e38496c..f558a82e4f 100644
--- a/asn1/acse/packet-acse-template.c
+++ b/asn1/acse/packet-acse-template.c
@@ -1,25 +1,9 @@
/*XXX
- there is a bug in the generated code
- static const ber_sequence_t Association_data_sequence_of[1] = {
- { BER_CLASS_UNI, 8, BER_FLAGS_NOOWNTAG, dissect_Association_data_item },
- };
- must be changed into
- static const ber_sequence_t Association_data_sequence_of[1] = {
- { BER_CLASS_UNI, 8, NULL, dissect_Association_data_item },
- };
+ There is a bug in asn2eth that it can not yet handle tagged assignments such
+ as EXTERNAL ::= [UNIVERSAL 8] IMPLICIT SEQUENCE {
- and
- static int dissect_Association_data_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- int ret;
- ret=dissect_acse_EXTERNAL(FALSE, tvb, offset, pinfo, tree, hf_acse_Association_data_item);
- return ret;
- }
- must be changed into
- static int dissect_Association_data_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- int ret;
- ret=dissect_acse_EXTERNAL(TRUE, tvb, offset, pinfo, tree, hf_acse_Association_data_item);
- return ret;
- }
+ This bug is workedaround by some .cnf magic but this should be cleaned up
+ once asn2eth learns how to deal with tagged assignments
*/
/* packet-acse.c
@@ -299,9 +283,6 @@ void proto_register_acse(void) {
proto_register_field_array(proto_acse, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
-/*XXX remove later just to keep the other dissectors happy */
-register_dissector_table("acse.application_context", "Application context OID", FT_STRING, BASE_NONE);
-
register_init_routine(acse_init);
}
diff --git a/asn1/cmip/packet-cmip-template.c b/asn1/cmip/packet-cmip-template.c
index 088c003a46..afe58aaece 100644
--- a/asn1/cmip/packet-cmip-template.c
+++ b/asn1/cmip/packet-cmip-template.c
@@ -177,12 +177,6 @@ void proto_register_cmip(void) {
/*--- proto_reg_handoff_cmip -------------------------------------------*/
void proto_reg_handoff_cmip(void) {
- dissector_handle_t cmip_handle;
-
- /*XXX this to be removed later and shoved into the conformance file */
- /*XXX remove this later when ACSE is converted to ASN2ETH */
- cmip_handle = create_dissector_handle(dissect_cmip,proto_cmip);
- dissector_add_string("acse.application_context", "2.9.0.0.2", cmip_handle);
register_ber_oid_dissector("2.9.0.0.2", dissect_cmip, proto_cmip, "cmip");
}
diff --git a/epan/dissectors/packet-acse.c b/epan/dissectors/packet-acse.c
index f0c569e2fa..9cb93c829f 100644
--- a/epan/dissectors/packet-acse.c
+++ b/epan/dissectors/packet-acse.c
@@ -6,33 +6,19 @@
/* Input file: packet-acse-template.c */
/*XXX
- there is a bug in the generated code
- static const ber_sequence_t Association_data_sequence_of[1] = {
- { BER_CLASS_UNI, 8, BER_FLAGS_NOOWNTAG, dissect_Association_data_item },
- };
- must be changed into
- static const ber_sequence_t Association_data_sequence_of[1] = {
- { BER_CLASS_UNI, 8, NULL, dissect_Association_data_item },
- };
+ There is a bug in asn2eth that it can not yet handle tagged assignments such
+ as EXTERNAL ::= [UNIVERSAL 8] IMPLICIT SEQUENCE {
- and
- static int dissect_Association_data_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- int ret;
- ret=dissect_acse_EXTERNAL(FALSE, tvb, offset, pinfo, tree, hf_acse_Association_data_item);
- return ret;
- }
- must be changed into
- static int dissect_Association_data_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- int ret;
- ret=dissect_acse_EXTERNAL(TRUE, tvb, offset, pinfo, tree, hf_acse_Association_data_item);
- return ret;
- }
+ This bug is workedaround by some .cnf magic but this should be cleaned up
+ once asn2eth learns how to deal with tagged assignments
*/
/* packet-acse.c
* Routines for ACSE packet dissection
* Ronnie Sahlberg 2005
- * dissect_acse() from original handwritten dissector by Sid
+ * dissect_acse() based original handwritten dissector by Sid
+ * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
+ *
*
* $Id$
*
@@ -455,13 +441,25 @@ static const ber_sequence_t EXTERNAL_sequence[] = {
static int
dissect_acse_EXTERNAL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ gint8 class;
+ gboolean pc, ind_field;
+ gint32 tag;
+ gint32 len1;
+
+ /* XXX asn2eth can not yet handle tagged assignment so for the
+ * time being just remove this tag manually inside the EXTERNAL
+ * dissector.
+ */
+ offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
+ offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
+ offset = dissect_ber_sequence(TRUE, pinfo, tree, tvb, offset,
EXTERNAL_sequence, hf_index, ett_acse_EXTERNAL);
+
return offset;
}
static int dissect_Association_data_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_acse_EXTERNAL(TRUE, tvb, offset, pinfo, tree, hf_acse_Association_data_item);
+ return dissect_acse_EXTERNAL(FALSE, tvb, offset, pinfo, tree, hf_acse_Association_data_item);
}
static int dissect_external_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_acse_EXTERNAL(TRUE, tvb, offset, pinfo, tree, hf_acse_external);
@@ -1065,7 +1063,7 @@ static int dissect_calling_asoi_tag_impl(packet_info *pinfo, proto_tree *tree, t
}
static const ber_sequence_t Association_data_sequence_of[1] = {
- { BER_CLASS_UNI, 8, NULL, dissect_Association_data_item },
+ { BER_CLASS_UNI, 8, BER_FLAGS_NOOWNTAG, dissect_Association_data_item },
};
static int
@@ -2387,9 +2385,6 @@ void proto_register_acse(void) {
proto_register_field_array(proto_acse, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
-/*XXX remove later just to keep the other dissectors happy */
-register_dissector_table("acse.application_context", "Application context OID", FT_STRING, BASE_NONE);
-
register_init_routine(acse_init);
}
diff --git a/epan/dissectors/packet-cmip.c b/epan/dissectors/packet-cmip.c
index 234d219e23..82af0bb4ac 100644
--- a/epan/dissectors/packet-cmip.c
+++ b/epan/dissectors/packet-cmip.c
@@ -3153,11 +3153,6 @@ void proto_register_cmip(void) {
/*--- proto_reg_handoff_cmip -------------------------------------------*/
void proto_reg_handoff_cmip(void) {
- dissector_handle_t cmip_handle;
-
- /*XXX this to be removed later and shoved into the conformance file */
- cmip_handle = create_dissector_handle(dissect_cmip,proto_cmip);
- dissector_add_string("acse.application_context", "2.9.0.0.2", cmip_handle);
register_ber_oid_dissector("2.9.0.0.2", dissect_cmip, proto_cmip, "cmip");
}
diff --git a/epan/dissectors/packet-ftam.c b/epan/dissectors/packet-ftam.c
index 8b6953aba1..02a4bc6109 100644
--- a/epan/dissectors/packet-ftam.c
+++ b/epan/dissectors/packet-ftam.c
@@ -3810,15 +3810,8 @@ proto_register_ftam(void)
void
proto_reg_handoff_ftam(void)
{
- dissector_handle_t ftam_handle;
-
/* find data dissector */
data_handle = find_dissector("data");
- ftam_handle = create_dissector_handle(dissect_ftam,proto_ftam);
- /* Register in acse oid table */
- /* remove this when ACSE is replaced later */
- dissector_add_string("acse.application_context", "1.0.8571.1.1", ftam_handle);
-
register_ber_oid_dissector("1.0.8571.1.1", dissect_ftam, proto_ftam, "ftam");
}