aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2005-11-23 07:24:18 +0000
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2005-11-23 07:24:18 +0000
commit8976e5b6f6278c406ef2951bcdd32f60c5780603 (patch)
treef1f054fab595f0d36e337353101b7087df418c62
parent7d8438cd3ce1a7a90c57e52c82dcd205cc78521a (diff)
Add cdt
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@16564 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--asn1/cdt/Makefile17
-rw-r--r--asn1/cdt/Makefile.nmake41
-rw-r--r--asn1/cdt/cdt-exp.cnf8
-rw-r--r--asn1/cdt/cdt.asn36
-rw-r--r--asn1/cdt/cdt.cnf97
-rw-r--r--asn1/cdt/packet-cdt-template.c106
-rw-r--r--asn1/cdt/packet-cdt-template.h35
7 files changed, 340 insertions, 0 deletions
diff --git a/asn1/cdt/Makefile b/asn1/cdt/Makefile
new file mode 100644
index 0000000000..637f956215
--- /dev/null
+++ b/asn1/cdt/Makefile
@@ -0,0 +1,17 @@
+# $Id$
+
+PROTOCOL_NAME=cdt
+DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).h
+
+all: generate_dissector
+
+generate_dissector: $(DISSECTOR_FILES)
+
+$(DISSECTOR_FILES): ../../tools/asn2eth.py $(PROTOCOL_NAME).asn packet-$(PROTOCOL_NAME)-template.c packet-$(PROTOCOL_NAME)-template.h $(PROTOCOL_NAME).cnf
+ python ../../tools/asn2eth.py -X -b -e -p $(PROTOCOL_NAME) -c $(PROTOCOL_NAME).cnf -s packet-$(PROTOCOL_NAME)-template $(PROTOCOL_NAME).asn
+
+clean:
+ rm -f parsetab.py $(DISSECTOR_FILES)
+
+copy_files: generate_dissector
+ cp $(DISSECTOR_FILES) ../../epan/dissectors
diff --git a/asn1/cdt/Makefile.nmake b/asn1/cdt/Makefile.nmake
new file mode 100644
index 0000000000..f9e07f2364
--- /dev/null
+++ b/asn1/cdt/Makefile.nmake
@@ -0,0 +1,41 @@
+## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
+#
+# $Id$
+
+include ../../config.nmake
+
+UNIX2DOS=$(PERL) ../../tools/unix2dos.pl
+
+PROTOCOL_NAME=cdt
+DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).h
+
+all: generate_dissector
+
+generate_dissector: $(DISSECTOR_FILES)
+
+$(DISSECTOR_FILES): ../../tools/asn2eth.py $(PROTOCOL_NAME).asn packet-$(PROTOCOL_NAME)-template.c packet-$(PROTOCOL_NAME)-template.h $(PROTOCOL_NAME).cnf
+!IFDEF PYTHON
+ $(PYTHON) ../../tools/asn2eth.py -X -b -e -p $(PROTOCOL_NAME) -c $(PROTOCOL_NAME).cnf -s packet-$(PROTOCOL_NAME)-template $(PROTOCOL_NAME).asn
+!ELSE
+ @echo Error: You need Python to use asn2eth.py
+ @exit 1
+!ENDIF
+
+clean:
+ rm -f parsetab.py $(DISSECTOR_FILES)
+
+# Fix EOL in generated dissectors. Cygwin's python generates files with
+# mixed EOL styles, which can't be commited to the SVN repository.
+# Stuff included from template and "cnf" files has "\r\n" on windows, while
+# the generated stuff has "\n".
+
+fix_eol: generate_dissector
+ move packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).c.tmp
+ move packet-$(PROTOCOL_NAME).h packet-$(PROTOCOL_NAME).h.tmp
+ $(UNIX2DOS) < packet-$(PROTOCOL_NAME).c.tmp > packet-$(PROTOCOL_NAME).c
+ $(UNIX2DOS) < packet-$(PROTOCOL_NAME).h.tmp > packet-$(PROTOCOL_NAME).h
+ del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
+
+copy_files: generate_dissector fix_eol
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/cdt/cdt-exp.cnf b/asn1/cdt/cdt-exp.cnf
new file mode 100644
index 0000000000..9f1111de9d
--- /dev/null
+++ b/asn1/cdt/cdt-exp.cnf
@@ -0,0 +1,8 @@
+#.IMPORT_TAG
+CompressedData BER_CLASS_UNI BER_UNI_TAG_SEQUENCE
+#.END
+
+#.TYPE_ATTR
+CompressedData TYPE = FT_NONE DISPLAY = BASE_NONE STRINGS = NULL BITMASK = 0
+#.END
+
diff --git a/asn1/cdt/cdt.asn b/asn1/cdt/cdt.asn
new file mode 100644
index 0000000000..9acc2da46c
--- /dev/null
+++ b/asn1/cdt/cdt.asn
@@ -0,0 +1,36 @@
+CompressedDataType
+ { iso(1) identified-organization(3) nato(26) stanags(0)
+ mmhs(4406) object-identifiers(0) id-mcont(4) 2 }
+
+DEFINITIONS ::=
+BEGIN
+
+CompressedData ::= SEQUENCE {
+ compressionAlgorithm CompressionAlgorithmIdentifier,
+ compressedContentInfo CompressedContentInfo }
+
+CompressionAlgorithmIdentifier ::= CHOICE {
+ algorithmID-ShortForm [0] IMPLICIT AlgorithmID-ShortForm,
+ algorithmID-OID [1] IMPLICIT OBJECT IDENTIFIER }
+
+AlgorithmID-ShortForm ::= INTEGER {
+ zlibCompress (0) }
+
+CompressedContentInfo ::= SEQUENCE {
+ contentType CHOICE {
+ contentType-ShortForm [0] IMPLICIT ContentType-ShortForm,
+ contentType-OID [1] IMPLICIT OBJECT IDENTIFIER
+ },
+ compressedContent [0] EXPLICIT CompressedContent }
+
+CompressedContent ::= OCTET STRING
+
+ContentType-ShortForm ::= INTEGER {
+ unidentified (0),
+ external (1), -- identified by the object-identifier
+ -- of the EXTERNAL content
+ p1 (2),
+ p3 (3),
+ p7 (4) }
+
+END
diff --git a/asn1/cdt/cdt.cnf b/asn1/cdt/cdt.cnf
new file mode 100644
index 0000000000..e7e1ee8ae1
--- /dev/null
+++ b/asn1/cdt/cdt.cnf
@@ -0,0 +1,97 @@
+# cdt.cnf
+# Compressed Data Type conformation file
+
+# $Id$
+
+#.EXPORTS
+CompressedData
+
+#.REGISTER
+CompressedData B "1.3.26.0.4406.0.4.2" "cdt"
+
+#.FN_PARS AlgorithmID_ShortForm
+ VAL_PTR = &value
+
+#.FN_BODY AlgorithmID_ShortForm
+ guint32 value;
+
+ %(DEFAULT_BODY)s
+ proto_item_append_text (cdt_item, ", %%s",
+ val_to_str (value, cdt_AlgorithmID_ShortForm_vals,
+ "unknown"));
+
+ if (check_col (pinfo->cinfo, COL_INFO))
+ col_append_fstr (pinfo->cinfo, COL_INFO, "%%s ",
+ val_to_str (value, cdt_AlgorithmID_ShortForm_vals,
+ "unknown"));
+
+#.FN_PARS ContentType_ShortForm
+ VAL_PTR = &value
+
+#.FN_BODY ContentType_ShortForm
+ guint32 value;
+
+ %(DEFAULT_BODY)s
+ proto_item_append_text (cdt_item, ", %%s",
+ val_to_str (value, cdt_ContentType_ShortForm_vals,
+ "unknown"));
+
+ if (check_col (pinfo->cinfo, COL_INFO))
+ col_append_fstr (pinfo->cinfo, COL_INFO, "%%s ",
+ val_to_str (value, cdt_ContentType_ShortForm_vals,
+ "unknown"));
+
+#.FN_PARS OBJECT_IDENTIFIER
+ FN_VARIANT = _str VAL_PTR = &obj_id
+
+#.FN_BODY OBJECT_IDENTIFIER
+ const char *obj_id = NULL;
+
+ %(DEFAULT_BODY)s
+ if (obj_id) {
+ const char *name = get_ber_oid_name (obj_id);
+
+ if (!name) {
+ name = obj_id;
+ }
+
+ proto_item_append_text (cdt_item, ", %%s", name);
+
+ if (check_col (pinfo->cinfo, COL_INFO))
+ col_append_fstr (pinfo->cinfo, COL_INFO, "%%s ", name);
+ }
+
+#.FN_PARS CompressedContent
+ VAL_PTR = &compr_tvb
+
+#.FN_BODY CompressedContent
+ tvbuff_t *next_tvb = NULL, *compr_tvb = NULL;
+ int save_offset = offset;
+
+ %(DEFAULT_BODY)s
+ if (compr_tvb == NULL) {
+ proto_tree_add_text (top_tree, tvb, save_offset, -1,
+ "[Error: Unable to get compressed content]");
+ if (check_col (pinfo->cinfo, COL_INFO))
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ "[Error: Unable to get compressed content]");
+ return offset;
+ }
+
+ next_tvb = tvb_uncompress (compr_tvb, 0, tvb_length (compr_tvb));
+
+ if (next_tvb == NULL) {
+ proto_tree_add_text (top_tree, tvb, save_offset, -1,
+ "[Error: Unable to uncompress content]");
+ if (check_col (pinfo->cinfo, COL_INFO))
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ "[Error: Unable to uncompress content]");
+ return offset;
+ }
+
+ tvb_set_child_real_data_tvbuff (tvb, next_tvb);
+ add_new_data_source (pinfo, next_tvb, "Uncompressed Content");
+
+ dissect_x411_mts_apdu (next_tvb, pinfo, top_tree);
+
+#.END
diff --git a/asn1/cdt/packet-cdt-template.c b/asn1/cdt/packet-cdt-template.c
new file mode 100644
index 0000000000..f8a7fb090f
--- /dev/null
+++ b/asn1/cdt/packet-cdt-template.c
@@ -0,0 +1,106 @@
+/* packet-cdt.c
+ *
+ * Routines for Compressed Data Type packet dissection.
+ *
+ * Copyright 2005, Stig Bj>rlykke <stig@bjorlykke.org>, Thales Norway AS
+ *
+ * $Id$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Ref: STANAG 4406 Annex E
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <epan/packet.h>
+
+#include "packet-ber.h"
+#include "packet-x411.h"
+
+#define PNAME "Compressed Data Type"
+#define PSNAME "CDT"
+#define PFNAME "cdt"
+
+static proto_tree *top_tree = NULL;
+static proto_item *cdt_item = NULL;
+
+/* Initialize the protocol and registered fields */
+int proto_cdt = -1;
+#include "packet-cdt-hf.c"
+
+/* Initialize the subtree pointers */
+#include "packet-cdt-ett.c"
+
+#include "packet-cdt-fn.c"
+
+
+/*--- proto_register_cdt -------------------------------------------*/
+
+/*
+** Dissect Compressed Data Type
+*/
+void dissect_cdt (tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
+{
+ proto_tree *tree = NULL;
+
+ /* save parent_tree so subdissectors can create new top nodes */
+ top_tree = parent_tree;
+
+ if (parent_tree) {
+ cdt_item = proto_tree_add_item (parent_tree, proto_cdt, tvb, 0, -1, FALSE);
+ tree = proto_item_add_subtree (cdt_item, ett_cdt_CompressedData);
+ }
+
+ if (check_col (pinfo->cinfo, COL_PROTOCOL))
+ col_set_str (pinfo->cinfo, COL_PROTOCOL, "CDT");
+ if (check_col (pinfo->cinfo, COL_INFO))
+ col_clear (pinfo->cinfo, COL_INFO);
+
+ dissect_CompressedData_PDU (tvb, pinfo, tree);
+}
+
+void proto_register_cdt (void) {
+
+ /* List of fields */
+ static hf_register_info hf[] = {
+#include "packet-cdt-hfarr.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+#include "packet-cdt-ettarr.c"
+ };
+
+ /* Register protocol */
+ proto_cdt = proto_register_protocol (PNAME, PSNAME, PFNAME);
+
+ /* Register fields and subtrees */
+ proto_register_field_array (proto_cdt, hf, array_length(hf));
+ proto_register_subtree_array (ett, array_length(ett));
+
+}
+
+
+/*--- proto_reg_handoff_cdt ---------------------------------------*/
+void proto_reg_handoff_cdt (void) {
+#include "packet-cdt-dis-tab.c"
+}
diff --git a/asn1/cdt/packet-cdt-template.h b/asn1/cdt/packet-cdt-template.h
new file mode 100644
index 0000000000..8ec0fc596c
--- /dev/null
+++ b/asn1/cdt/packet-cdt-template.h
@@ -0,0 +1,35 @@
+/* packet-cdt.h
+ *
+ * Routines for Compressed Data Type packet dissection.
+ *
+ * Copyright 2005, Stig Bj>rlykke <stig@bjorlykke.org>, Thales Norway AS
+ *
+ * $Id$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PACKET_CDT_H
+#define PACKET_CDT_H
+
+void dissect_cdt (tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree);
+#include "packet-cdt-exp.h"
+
+#endif /* PACKET_CDT_H */
+