diff options
author | Anders Broman <anders.broman@ericsson.com> | 2005-11-23 07:24:18 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2005-11-23 07:24:18 +0000 |
commit | 704e12625318ce9cc26ca7155d249f53fc5ed077 (patch) | |
tree | f1f054fab595f0d36e337353101b7087df418c62 | |
parent | c845a16144afc52fd333cfed3753388758d03229 (diff) | |
download | wireshark-704e12625318ce9cc26ca7155d249f53fc5ed077.tar.gz wireshark-704e12625318ce9cc26ca7155d249f53fc5ed077.tar.bz2 wireshark-704e12625318ce9cc26ca7155d249f53fc5ed077.zip |
Add cdt
svn path=/trunk/; revision=16564
-rw-r--r-- | asn1/cdt/Makefile | 17 | ||||
-rw-r--r-- | asn1/cdt/Makefile.nmake | 41 | ||||
-rw-r--r-- | asn1/cdt/cdt-exp.cnf | 8 | ||||
-rw-r--r-- | asn1/cdt/cdt.asn | 36 | ||||
-rw-r--r-- | asn1/cdt/cdt.cnf | 97 | ||||
-rw-r--r-- | asn1/cdt/packet-cdt-template.c | 106 | ||||
-rw-r--r-- | asn1/cdt/packet-cdt-template.h | 35 |
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 */ + |