New autogenerated ACSE dissector.
authorsahlberg <sahlberg@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 19 Jun 2005 11:51:23 +0000 (11:51 +0000)
committersahlberg <sahlberg@f5534014-38df-0310-8fa8-9805f1628bb7>
Sun, 19 Jun 2005 11:51:23 +0000 (11:51 +0000)
There is a bug in ASN2ETH which means one can not do make copy_files
instead one needs to change two bugs in the generated code manually.
These two changes are in the comment at the top of the template/generated file

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@14698 f5534014-38df-0310-8fa8-9805f1628bb7

asn1/acse/Makefile [new file with mode: 0644]
asn1/acse/Makefile.nmake [new file with mode: 0644]
asn1/acse/acse.asn [new file with mode: 0644]
asn1/acse/acse.cnf [new file with mode: 0644]
asn1/acse/packet-acse-template.c [new file with mode: 0644]
asn1/acse/packet-acse-template.h [new file with mode: 0644]

diff --git a/asn1/acse/Makefile b/asn1/acse/Makefile
new file mode 100644 (file)
index 0000000..af24ddd
--- /dev/null
@@ -0,0 +1,19 @@
+# $Id: Makefile 13071 2005-01-16 10:19:21Z guy $
+
+DISSECTOR_FILES=packet-acse.c packet-acse.h
+
+all: generate_dissector
+
+generate_dissector: $(DISSECTOR_FILES)
+
+$(DISSECTOR_FILES): ../../tools/asn2eth.py acse.asn packet-acse-template.c packet-acse-template.h acse.cnf
+       python ../../tools/asn2eth.py -X -b -e -p acse -c acse.cnf -s packet-acse-template acse.asn
+
+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 "
+
diff --git a/asn1/acse/Makefile.nmake b/asn1/acse/Makefile.nmake
new file mode 100644 (file)
index 0000000..eb2104b
--- /dev/null
@@ -0,0 +1,42 @@
+## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
+#
+# $Id: Makefile.nmake 13077 2005-01-16 23:26:02Z lroland $
+
+include ../../config.nmake
+
+UNIX2DOS=$(PERL) ../../tools/unix2dos.pl
+
+PROTOCOL_NAME=acse
+DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).h
+
+all: generate_dissector
+
+generate_dissector: $(DISSECTOR_FILES)
+
+$(DISSECTOR_FILES): ../../tools/asn2eth.py acse.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 acse.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/acse/acse.asn b/asn1/acse/acse.asn
new file mode 100644 (file)
index 0000000..ab2cbe6
--- /dev/null
@@ -0,0 +1,425 @@
+-- ACSE definition from 
+--   http://www.itu.int/ITU-T/asn1/database/itu-t/x/x227bis/1998/ACSE-1.html
+-- and modified to pass through ASN2ETH
+--
+--
+-- Module ACSE-1 (X.227bis:09/1998)
+ACSE-1 {joint-iso-itu-t association-control(2) modules(0) acse1(1) version1(1)}
+--  ACSE-1 refers to ACSE version 1
+DEFINITIONS ::=
+BEGIN
+
+IMPORTS
+  Name, RelativeDistinguishedName
+    FROM InformationFramework {joint-iso-itu-t ds(5) module(1)
+      informationFramework(1) 3};
+
+--  The data types Name and RelativeDistinguishedName are imported from
+--  ITU-T Rec. X.501 | ISO/IEC 9594-2.
+
+
+
+EXTERNAL  ::=  [UNIVERSAL 8] IMPLICIT SEQUENCE
+     {
+      direct-reference  OBJECT IDENTIFIER OPTIONAL,
+      indirect-reference  INTEGER OPTIONAL,
+      data-value-descriptor  ObjectDescriptor  OPTIONAL,
+      encoding  CHOICE
+                  {single-ASN1-type  [0] ANY,
+                   octet-aligned     [1] IMPLICIT OCTET STRING,
+                   arbitrary         [2] IMPLICIT BIT STRING}
+     }
+
+--  object identifier assignments
+acse-as-id OBJECT IDENTIFIER ::=
+  {joint-iso-itu-t association-control(2) abstract-syntax(1) apdus(0)
+   version1(1)}
+
+--  may be used to reference the abstract syntax of the ACSE APDUs.
+aCSE-id OBJECT IDENTIFIER ::=
+  {joint-iso-itu-t association-control(2) ase-id(3) acse-ase(1) version(1)}
+
+--  may be used to identify the Association Control ASE.
+--  top level CHOICE
+ACSE-apdu ::= CHOICE {
+--ASN2ETH bug
+--  aarq  AARQ-apdu,
+  aarq  [APPLICATION 0] IMPLICIT AARQ-apdu,
+--ASN2ETH bug
+--  aare  AARE-apdu,
+  aare  [APPLICATION 1] IMPLICIT AARE-apdu,
+--ASN2ETH bug
+--  rlrq  RLRQ-apdu,
+  rlrq  [APPLICATION 2] IMPLICIT RLRQ-apdu,
+--ASN2ETH bug
+--  rlre  RLRE-apdu,
+  rlre  [APPLICATION 3] IMPLICIT RLRE-apdu,
+--ASN2ETH bug
+--  abrt  ABRT-apdu,
+  abrt  [APPLICATION 4] IMPLICIT ABRT-apdu,
+  ...,
+  --  Extensions for higher level association FU
+--ASN2ETH bug
+--  adt   A-DT-apdu,
+  adt   [APPLICATION 5] IMPLICIT A-DT-apdu,
+--ASN2ETH bug
+--  acrq  ACRQ-apdu,
+  acrq  [APPLICATION 6] IMPLICIT ACRQ-apdu,
+--ASN2ETH bug
+--  acrp  ACRP-apdu
+  acrp  [APPLICATION 7] IMPLICIT ACRP-apdu
+}
+
+AARQ-apdu ::= [APPLICATION 0] IMPLICIT SEQUENCE {
+  protocol-version
+    [0] IMPLICIT BIT STRING {version1(0)} DEFAULT {version1},
+  aSO-context-name                  [1]  ASO-context-name,
+  called-AP-title                   [2]  AP-title OPTIONAL,
+  called-AE-qualifier               [3]  AE-qualifier OPTIONAL,
+  called-AP-invocation-identifier   [4]  AP-invocation-identifier OPTIONAL,
+  called-AE-invocation-identifier   [5]  AE-invocation-identifier OPTIONAL,
+  calling-AP-title                  [6]  AP-title OPTIONAL,
+  calling-AE-qualifier              [7]  AE-qualifier OPTIONAL,
+  calling-AP-invocation-identifier  [8]  AP-invocation-identifier OPTIONAL,
+  calling-AE-invocation-identifier  [9]  AE-invocation-identifier OPTIONAL,
+  --  The following field shall not be present if only the Kernel is used.
+  sender-acse-requirements          [10] IMPLICIT ACSE-requirements OPTIONAL,
+  --  The following field shall only be present if the Authentication functional unit is selected.
+  mechanism-name                    [11] IMPLICIT Mechanism-name OPTIONAL,
+  --  The following field shall only be present if the Authentication functional unit is selected.
+  calling-authentication-value      [12] EXPLICIT Authentication-value OPTIONAL,
+  aSO-context-name-list
+    [13] IMPLICIT ASO-context-name-list OPTIONAL,
+  --  The above field shall only be present if the Application Context Negotiation functional unit is selected.
+  implementation-information        [29] IMPLICIT Implementation-data OPTIONAL,
+  ...,
+  --  Extensions for higher level association FU
+  p-context-definition-list         [14]  Syntactic-context-list OPTIONAL,
+  called-asoi-tag                   [15] IMPLICIT ASOI-tag OPTIONAL,
+  calling-asoi-tag                  [16] IMPLICIT ASOI-tag OPTIONAL,
+  --  End of extensions for higher level association FU
+--  ...,
+  user-information                  [30] IMPLICIT Association-data OPTIONAL
+}
+
+AARE-apdu ::= [APPLICATION 1] IMPLICIT SEQUENCE {
+  protocol-version
+    [0] IMPLICIT BIT STRING {version1(0)} DEFAULT {version1},
+  aSO-context-name                     [1]  ASO-context-name,
+  result                               [2]  Associate-result,
+  result-source-diagnostic             [3]  Associate-source-diagnostic,
+  responding-AP-title                  [4]  AP-title OPTIONAL,
+  responding-AE-qualifier              [5]  AE-qualifier OPTIONAL,
+  responding-AP-invocation-identifier  [6]  AP-invocation-identifier OPTIONAL,
+  responding-AE-invocation-identifier  [7]  AE-invocation-identifier OPTIONAL,
+  --  The following field shall not be present if only the Kernel is used.
+  responder-acse-requirements          [8] IMPLICIT ACSE-requirements OPTIONAL,
+  --  The following field shall only be present if the Authentication functional unit is selected.
+  mechanism-name                       [9] IMPLICIT Mechanism-name OPTIONAL,
+  --  This following field shall only be present if the Authentication functional unit is selected.
+  responding-authentication-value
+    [10] EXPLICIT Authentication-value OPTIONAL,
+  aSO-context-name-list
+    [11] IMPLICIT ASO-context-name-list OPTIONAL,
+  --  The above field shall only be present if the Application Context Negotiation functional unit is selected.
+  implementation-information
+    [29] IMPLICIT Implementation-data OPTIONAL,
+  ...,
+  --  Extensions for higher level association FU
+  p-context-result-list
+    [12] IMPLICIT P-context-result-list OPTIONAL,
+  called-asoi-tag                      [13] IMPLICIT ASOI-tag OPTIONAL,
+  calling-asoi-tag                     [14] IMPLICIT ASOI-tag OPTIONAL,
+  --  End of extensions for higher level association FU
+--  ...,
+  user-information                     [30] IMPLICIT Association-data OPTIONAL
+}
+
+RLRQ-apdu ::= [APPLICATION 2] IMPLICIT SEQUENCE {
+  reason              [0] IMPLICIT Release-request-reason OPTIONAL,
+  ...,
+  --  Extensions for higher level association FU
+  aso-qualifier       [13]  ASO-qualifier OPTIONAL,
+  asoi-identifier     [14] IMPLICIT ASOI-identifier OPTIONAL,
+  --  End of extensions for higher level association FU
+--  ...,
+  user-information    [30] IMPLICIT Association-data OPTIONAL
+}
+
+RLRE-apdu ::= [APPLICATION 3] IMPLICIT SEQUENCE {
+  reason              [0] IMPLICIT Release-response-reason OPTIONAL,
+  ...,
+  --  Extensions for higher level association FU
+  aso-qualifier       [13]  ASO-qualifier OPTIONAL,
+  asoi-identifier     [14] IMPLICIT ASOI-identifier OPTIONAL,
+  --  End of extensions for higher level association FU
+--  ...,
+  user-information    [30] IMPLICIT Association-data OPTIONAL
+}
+
+ABRT-apdu ::= [APPLICATION 4] IMPLICIT SEQUENCE {
+  abort-source        [0] IMPLICIT ABRT-source,
+  abort-diagnostic    [1] IMPLICIT ABRT-diagnostic OPTIONAL,
+  --  This field shall not be present if only the Kernel is used.
+  ...,
+  --  Extensions for higher level association FU
+  aso-qualifier       [13]  ASO-qualifier OPTIONAL,
+  asoi-identifier     [14] IMPLICIT ASOI-identifier OPTIONAL,
+  --  End of extensions for higher level association FU
+--  ...,
+  user-information    [30] IMPLICIT Association-data OPTIONAL
+}
+
+A-DT-apdu ::= [APPLICATION 5] IMPLICIT SEQUENCE {
+  aso-qualifier    [0]  ASO-qualifier OPTIONAL,
+  asoi-identifier  [1] IMPLICIT ASOI-identifier OPTIONAL,
+  ...,
+--  ...,
+  a-user-data      [30]  User-Data
+}
+
+ACRQ-apdu ::= [APPLICATION 6] IMPLICIT SEQUENCE {
+  aso-qualifier              [0]  ASO-qualifier OPTIONAL,
+  asoi-identifier            [1] IMPLICIT ASOI-identifier OPTIONAL,
+  aSO-context-name           [3] IMPLICIT ASO-context-name OPTIONAL,
+  aSO-context-name-list      [4] IMPLICIT ASO-context-name-list OPTIONAL,
+  p-context-definition-list  [5]  Syntactic-context-list OPTIONAL,
+  ...,
+--  ...,
+  user-information           [30] IMPLICIT User-information OPTIONAL
+}
+
+ACRP-apdu ::= [APPLICATION 7] IMPLICIT SEQUENCE {
+  aso-qualifier          [0]  ASO-qualifier OPTIONAL,
+  asoi-identifier        [1] IMPLICIT ASOI-identifier OPTIONAL,
+  aSO-context-name       [3] IMPLICIT ASO-context-name-list OPTIONAL,
+  p-context-result-list  [4] IMPLICIT P-context-result-list OPTIONAL,
+  ...,
+--  ...,
+  user-information       [30] IMPLICIT User-information OPTIONAL
+}
+
+ABRT-diagnostic ::= ENUMERATED {
+  no-reason-given(1), protocol-error(2),
+  authentication-mechanism-name-not-recognized(3),
+  authentication-mechanism-name-required(4), authentication-failure(5),
+  authentication-required(6), ...
+  }
+
+ABRT-source ::= INTEGER {acse-service-user(0), acse-service-provider(1)
+}(0..1, ...)
+
+ACSE-requirements ::= BIT STRING {
+  authentication(0), aSO-context-negotiation(1), higher-level-association(2),
+  nested-association(3)}
+
+Application-context-name ::= ASO-context-name
+
+ASO-context-name ::= OBJECT IDENTIFIER
+
+--  Application-entity title productions follow (not in alphabetical order).
+AP-title ::= CHOICE {
+  ap-title-form1  AP-title-form1,
+  ap-title-form2  AP-title-form2,
+  ...,
+  ap-title-form3  AP-title-form3
+}
+
+AE-qualifier ::= ASO-qualifier
+
+ASO-qualifier ::= CHOICE {
+  aso-qualifier-form1  ASO-qualifier-form1,
+  aso-qualifier-form2  ASO-qualifier-form2,
+  ...,
+  aso-qualifier-form3  ASO-qualifier-form3
+}
+
+--  When both AP-title and AE-qualifier data values are present in an AARQ or AARE APDU, both must
+--  have the same form to allow the construction of an AE-title as discussed in itu-t Rec. X.665 |
+--  ISO/IEC 9834-6
+AP-title-form1 ::=
+  Name
+
+--  The value assigned to AP-title-form1 is The Directory Name of an application-process title.
+ASO-qualifier-form1 ::=
+  RelativeDistinguishedName
+
+--  The value assigned to AE-qualifier-form1 is the relative distinguished name of a particular
+--  application-entity of the application-process identified by AP-title-form1.
+AP-title-form2 ::= OBJECT IDENTIFIER
+
+ASO-qualifier-form2 ::= INTEGER
+
+AP-title-form3 ::= PrintableString
+
+ASO-qualifier-form3 ::= PrintableString
+
+AE-title ::= CHOICE {
+  ae-title-form1  AE-title-form1,
+  ae-title-form2  AE-title-form2,
+  ...
+}
+
+--  As defined in ITU-T Rec. X.650 | ISO/IEC 7498-3, an application-entity title is composed of an application process
+--  title and an application-entity qualifier. The ACSE protocol provides for the transfer of an application-entity title
+--  value by the transfer of its component values. However, the following data type is provided for International
+--  Standards that reference a single syntactic structure for AE titles.
+AE-title-form1 ::=
+  Name
+
+--  For access to The Directory (see ITU-T Rec. X.500 series | ISO/IEC 9594), an AE title has AE-title-form1. This value
+--  can be constructed from AP-title-form1 and AE-qualifier-form1 values contained in an AARQ or AARE APDU.
+--  A discussion of forming an AE-title-form1 from AP-title-form1 and AE-qualifier form1 may be found in itu-t
+--  Rec X.665 | ISO/IEC 9834-6.
+AE-title-form2 ::= OBJECT IDENTIFIER
+
+--  A discussion of forming an AE-title-form2 from AP-title-form2 and AE-qualifier-form2 may be found in
+--  itu-t Rec. X.665 | ISO/IEC 9834-6.
+AE-invocation-identifier ::= INTEGER
+
+AP-invocation-identifier ::= INTEGER
+
+ASOI-identifier ::= INTEGER(1..128, ...)
+
+ASOI-tag ::=
+  SEQUENCE SIZE (0..7, ...) OF
+    SEQUENCE {qualifier   [0]  ASO-qualifier OPTIONAL,
+              identifier  [1]  ASOI-identifier OPTIONAL}
+
+--  End of Application-entity title productions
+ASO-context-name-list ::= SEQUENCE OF ASO-context-name
+
+Syntactic-context-list ::= CHOICE {
+  context-list          [0]  Context-list,
+  default-contact-list  [1]  Default-Context-List
+}
+
+Context-list ::=
+  SEQUENCE OF
+    SEQUENCE {pci                Presentation-context-identifier,
+              abstract-syntax    Abstract-syntax-name,
+-- bug in ASN2ETH
+--              transfer-syntaxes  SEQUENCE OF Transfer-syntax-name}
+              transfer-syntaxes  SEQUENCE OF TransferSyntaxName}
+
+Default-Context-List ::=
+  SEQUENCE OF
+    SEQUENCE {abstract-syntax-name  [0] IMPLICIT Abstract-syntax-name OPTIONAL,
+-- bug in ASN2ETH
+--              transfer-syntax-name  [1] IMPLICIT Transfer-syntax-name
+              transfer-syntax-name  [1] IMPLICIT TransferSyntaxName
+    }
+
+Abstract-syntax-name ::= OBJECT IDENTIFIER
+
+P-context-result-list ::=
+  SEQUENCE OF
+    SEQUENCE {result                [0] IMPLICIT Result,
+              concrete-syntax-name  [1] IMPLICIT Concrete-syntax-name OPTIONAL,
+              provider-reason
+                [2] IMPLICIT INTEGER {reason-not-specified(0),
+                                      abstract-syntax-not-supported(1),
+                                      proposed-transfer-syntaxes-not-supported(2),
+                                      local-limit-on-DCS-exceeded(3)} OPTIONAL
+    }
+
+Result ::= INTEGER {acceptance(0), user-rejection(1), provider-rejection(2)}
+
+--bug in ASN2ETH
+--Concrete-syntax-name ::= Transfer-syntax-name
+Concrete-syntax-name ::= TransferSyntaxName
+
+--bug in ASN2ETH
+--Transfer-syntax-name ::= OBJECT IDENTIFIER
+TransferSyntaxName ::= OBJECT IDENTIFIER
+
+Associate-result ::= INTEGER {
+  accepted(0), rejected-permanent(1), rejected-transient(2)}(0..2, ...)
+
+Associate-source-diagnostic ::= CHOICE {
+  acse-service-user
+    [1]  INTEGER {null(0), no-reason-given(1),
+                  application-context-name-not-supported(2),
+                  calling-AP-title-not-recognized(3),
+                  calling-AP-invocation-identifier-not-recognized(4),
+                  calling-AE-qualifier-not-recognized(5),
+                  calling-AE-invocation-identifier-not-recognized(6),
+                  called-AP-title-not-recognized(7),
+                  called-AP-invocation-identifier-not-recognized(8),
+                  called-AE-qualifier-not-recognized(9),
+                  called-AE-invocation-identifier-not-recognized(10),
+                  authentication-mechanism-name-not-recognized(11),
+                  authentication-mechanism-name-required(12),
+                  authentication-failure(13), authentication-required(14)}
+                                                                    (0..14, ...),
+  acse-service-provider
+    [2]  INTEGER {null(0), no-reason-given(1), no-common-acse-version(2)}
+                                                                    (0..2, ...)
+}
+
+User-information ::= Association-data
+
+Association-data ::= SEQUENCE OF EXTERNAL
+
+Simply-encoded-data ::= OCTET STRING
+
+User-Data ::= CHOICE {
+  user-information     User-information,
+  simply-encoded-data  Simply-encoded-data,
+  fully-encoded-data   [0]  PDV-list
+}
+
+--  see ITU-T Rec. X.226 | ISO/IEC 8823-1.
+PDV-list ::= SEQUENCE {
+--bug in ASN2ETH
+--  transfer-syntax-name             Transfer-syntax-name OPTIONAL,
+  transfer-syntax-name             TransferSyntaxName OPTIONAL,
+  presentation-context-identifier  Presentation-context-identifier,
+  presentation-data-values
+    CHOICE {simple-ASN1-type
+              [0]  ANY
+                     (CONSTRAINED BY {
+                        
+                        --  Type corresponding to presentation context identifier
+                        }),
+            octet-aligned     [1] IMPLICIT OCTET STRING,
+            arbitrary         [2] IMPLICIT BIT STRING}
+  --  see ITU-T Rec. X.226 | ISO/IEC 8823-1.
+}
+
+Presentation-context-identifier ::= INTEGER
+
+Authentication-value-other ::= SEQUENCE {
+  other-mechanism-name     OBJECT IDENTIFIER,
+  other-mechanism-value    ANY
+}
+
+Authentication-value ::= CHOICE {
+  charstring  [0] IMPLICIT GraphicString,
+  bitstring   [1] IMPLICIT BIT STRING,
+  external    [2] IMPLICIT EXTERNAL,
+  other
+    [3] IMPLICIT Authentication-value-other
+}
+
+--  The abstract syntax of (calling/responding) authentication-value is determined by the authentication mechanism used
+--  during association establishment. The authentication mechanism is either explicitly denoted by the &id field (of type
+--  OBJECT IDENTIFIER) for a mechanism belonging to the class MECHANISM-NAME, or it is known implicitly by
+--  prior agreement between the communicating partners. If the "other" component is chosen, then the
+--  "mechanism-name" component must be present in accordance with ITU-T Rec. X.680 | ISO/IEC 8824-1. If the value
+--  "mechanism-name" occurs in the AARQ-apdu or the AARE-apdu, then that value must be the same as the value for
+--  "other-mechanism-name".
+Implementation-data ::= GraphicString
+
+Mechanism-name ::= OBJECT IDENTIFIER
+
+Release-request-reason ::= INTEGER {normal(0), urgent(1), user-defined(30)
+}
+
+Release-response-reason ::= INTEGER {
+  normal(0), not-finished(1), user-defined(30)}
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/acse/acse.cnf b/asn1/acse/acse.cnf
new file mode 100644 (file)
index 0000000..8ed7c9d
--- /dev/null
@@ -0,0 +1,60 @@
+#.MODULE_IMPORT
+InformationFramework x509if
+
+#.INCLUDE ../x509if/x509if-exp.cnf
+
+#.TYPE_RENAME
+AARQ-apdu/protocol-version     T_AARQ_protocol_version
+AARE-apdu/protocol-version     T_AARE_protocol_version
+
+#.FIELD_RENAME
+AARQ-apdu/user-information     AARQ_user_information
+AARE-apdu/user-information     AARE_user_information
+ABRT-apdu/user-information     ABRT_user_information
+RLRE-apdu/user-information     RLRE_user_information
+RLRQ-apdu/user-information     RLRQ_user_information
+AARE-apdu/result               AARE_result
+P-context-result-list/_item/result     Pcontext_result
+RLRE-apdu/reason               RLRE_reason
+RLRQ-apdu/reason               RLRQ_reason
+AARQ-apdu/protocol-version     AARQ_protocol_version
+AARE-apdu/protocol-version     AARE_protocol_version
+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 Authentication-value-other/other-mechanism-name
+  offset = dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
+                                         hf_index, object_identifier_id);
+
+#.FN_BODY Authentication-value-other/other-mechanism-value
+  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, top_tree);
+
+#.FN_BODY PDV-list/presentation-data-values/simple-ASN1-type
+/*XXX not implemented yet */
+
+#.FN_BODY AARQ-apdu/aSO-context-name
+  offset = dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
+                                         hf_index, object_identifier_id);
+
+#.FN_BODY AARE-apdu/aSO-context-name
+  offset = dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
+                                         hf_index, object_identifier_id);
+
+#.FN_BODY ACRQ-apdu/aSO-context-name
+  offset = dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
+                                         hf_index, object_identifier_id);
+
+#.FN_BODY ACRP-apdu/aSO-context-name
+  offset = dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
+                                         hf_index, object_identifier_id);
+
+#.FN_BODY EXTERNAL/indirect-reference
+  offset = dissect_ber_integer(FALSE, pinfo, tree, tvb, offset,
+                hf_acse_indirect_reference,
+                &indir_ref);
+
+#.FN_BODY EXTERNAL/encoding/single-ASN1-type
+  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, top_tree);
+
+#.END
diff --git a/asn1/acse/packet-acse-template.c b/asn1/acse/packet-acse-template.c
new file mode 100644 (file)
index 0000000..e9e007a
--- /dev/null
@@ -0,0 +1,311 @@
+/*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 },
+  };
+
+  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;
+  }
+*/
+
+/* packet-acse.c
+ * Routines for ACSE packet dissection
+ *   Ronnie Sahlberg 2005
+ * dissect_acse() from original handwritten dissector by Sid
+ *
+ * $Id: packet-acse-template.c 12740 2004-12-13 08:15:34Z sahlberg $
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-ber.h"
+#include "packet-acse.h"
+#include "packet-ses.h"
+#include "packet-x509if.h"
+
+#define PNAME  "ACSE"
+#define PSNAME "ACSE"
+#define PFNAME "acse"
+
+/* Initialize the protocol and registered fields */
+int proto_acse = -1;
+#include "packet-acse-hf.c"
+
+/* Initialize the subtree pointers */
+static gint ett_acse = -1;
+#include "packet-acse-ett.c"
+
+static struct SESSION_DATA_STRUCTURE* session = NULL;
+
+static char object_identifier_id[64]; /*64 chars should be long enough? */
+/* indirect_reference, used to pick up the signalling so we know what
+   kind of data is transferred in SES_DATA_TRANSFER_PDUs */
+static guint32 indir_ref=0;
+
+static proto_tree *top_tree=NULL;
+
+/* to keep track of presentation context identifiers and protocol-oids */
+static GMemChunk *acse_ctx_oid_chunk = NULL;
+static int acse_ctx_oid_count = 500;
+typedef struct _acse_ctx_oid_t {
+       /* XXX here we should keep track of ADDRESS/PORT as well */
+       guint32 ctx_id;
+       char *oid;
+} acse_ctx_oid_t;
+static GHashTable *acse_ctx_oid_table = NULL;
+
+static gboolean
+free_all_ctx_oid_strings(gpointer key_arg, gpointer value _U_, gpointer user_data _U_)
+{
+       acse_ctx_oid_t *aco=(acse_ctx_oid_t *)key_arg;
+       if(aco->oid){
+               g_free(aco->oid);
+               aco->oid=NULL;
+       }
+       return TRUE;
+}
+static guint
+acse_ctx_oid_hash(gconstpointer k)
+{
+       acse_ctx_oid_t *aco=(acse_ctx_oid_t *)k;
+       return aco->ctx_id;
+}
+/* XXX this one should be made ADDRESS/PORT aware */
+static gint
+acse_ctx_oid_equal(gconstpointer k1, gconstpointer k2)
+{
+       acse_ctx_oid_t *aco1=(acse_ctx_oid_t *)k1;
+       acse_ctx_oid_t *aco2=(acse_ctx_oid_t *)k2;
+       return aco1->ctx_id==aco2->ctx_id;
+}
+
+static void
+acse_init(void)
+{
+       if( acse_ctx_oid_table ){
+               g_hash_table_foreach_remove(acse_ctx_oid_table,
+                       free_all_ctx_oid_strings, NULL);
+               g_hash_table_destroy(acse_ctx_oid_table);
+               acse_ctx_oid_table = NULL;
+       }
+       acse_ctx_oid_table = g_hash_table_new(acse_ctx_oid_hash,
+                       acse_ctx_oid_equal);
+
+       if (acse_ctx_oid_chunk) {
+               g_mem_chunk_destroy(acse_ctx_oid_chunk);
+               acse_ctx_oid_chunk = NULL;
+       }
+       acse_ctx_oid_chunk = g_mem_chunk_new("acse_ctx_oid_chunk",
+                       sizeof(acse_ctx_oid_t),
+                       acse_ctx_oid_count * sizeof(acse_ctx_oid_t),
+                       G_ALLOC_ONLY);
+}
+
+static void
+register_ctx_id_and_oid(packet_info *pinfo _U_, guint32 idx, char *oid)
+{
+       acse_ctx_oid_t *aco, *tmpaco;
+       aco=g_mem_chunk_alloc(acse_ctx_oid_chunk);
+       aco->ctx_id=idx;
+       aco->oid=g_strdup(oid);
+
+       /* if this ctx already exists, remove the old one first */
+       tmpaco=(acse_ctx_oid_t *)g_hash_table_lookup(acse_ctx_oid_table, aco);
+       if(tmpaco){
+               g_hash_table_remove(acse_ctx_oid_table, tmpaco);
+               g_free(tmpaco->oid);
+               tmpaco->oid=NULL;
+               g_mem_chunk_free(acse_ctx_oid_chunk, tmpaco);
+       }
+       g_hash_table_insert(acse_ctx_oid_table, aco, aco);
+}
+static char *
+find_oid_by_ctx_id(packet_info *pinfo _U_, guint32 idx)
+{
+       acse_ctx_oid_t aco, *tmpaco;
+       aco.ctx_id=idx;
+       tmpaco=(acse_ctx_oid_t *)g_hash_table_lookup(acse_ctx_oid_table, &aco);
+       if(tmpaco){
+               return tmpaco->oid;
+       }
+       return NULL;
+}
+
+
+#include "packet-acse-fn.c"
+
+
+/*
+* Dissect ACSE PDUs inside a PPDU.
+*/
+static void
+dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
+{
+       int offset = 0;
+       proto_item    *item=NULL;
+       proto_tree    *tree=NULL;
+       char *oid;
+
+       /* save parent_tree so subdissectors can create new top nodes */
+       top_tree=parent_tree;
+
+       /* create display subtree for the protocol */
+       if(parent_tree){
+               item = proto_tree_add_item(parent_tree, proto_acse, tvb, 0, -1, FALSE);
+               tree = proto_item_add_subtree(item, ett_acse);
+       }
+       if (check_col(pinfo->cinfo, COL_PROTOCOL))
+               col_set_str(pinfo->cinfo, COL_PROTOCOL, "ACSE");
+       if (check_col(pinfo->cinfo, COL_INFO))
+               col_clear(pinfo->cinfo, COL_INFO);
+
+
+       /* first, try to check length   */
+       /* do we have at least 2 bytes  */
+       if (!tvb_bytes_exist(tvb, 0, 2)){
+               proto_tree_add_text(tree, tvb, offset, 
+                       tvb_reported_length_remaining(tvb,offset),
+                       "User data");
+               return;  /* no, it isn't a ACSE PDU */
+       }
+       /* do we have spdu type from the session dissector?  */
+       if( !pinfo->private_data ){
+               if(tree){
+                       proto_tree_add_text(tree, tvb, offset, -1,
+                               "Internal error:can't get spdu type from session dissector.");
+               } 
+               return  ;
+       } else {
+               session  = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) );
+               if(session->spdu_type == 0 ) {
+                       if(tree){
+                               proto_tree_add_text(tree, tvb, offset, -1,
+                                       "Internal error:wrong spdu type %x from session dissector.",session->spdu_type);
+                               return  ;
+                       }
+               }
+       }
+       /*  ACSE has only AARQ,AARE,RLRQ,RLRE,ABRT type of pdu */
+       /*  reject everything else                              */
+       /*  data pdu is not ACSE pdu and has to go directly to app dissector */
+       switch(session->spdu_type){
+       case SES_CONNECTION_REQUEST:            /*   AARQ   */
+       case SES_CONNECTION_ACCEPT:             /*   AARE   */
+       case SES_REFUSE:                        /*   RLRE   */
+       case SES_DISCONNECT:                    /*   RLRQ   */
+       case SES_FINISH:                        /*   RLRE   */
+       case SES_ABORT:                         /*   ABRT   */
+               break;
+       case SES_DATA_TRANSFER:
+               oid=find_oid_by_ctx_id(pinfo, indir_ref);
+               if(oid){
+                       call_ber_oid_callback(oid, tvb, offset, pinfo, top_tree);
+               } else {
+                       proto_tree_add_text(tree, tvb, offset, -1,
+                           "dissector is not available");
+               }
+               return;
+       default:
+               return;
+       }
+
+       /*  we can't make any additional checking here   */
+       /*  postpone it before dissector will have more information */
+       while (tvb_reported_length_remaining(tvb, offset) > 0){
+               offset = dissect_acse_ACSE_apdu(FALSE, tvb, offset, pinfo, tree, -1);
+               if(offset == FALSE ){
+                       proto_tree_add_text(tree, tvb, offset, -1,"Internal error");
+                       offset = tvb_length(tvb);
+                       break;
+               }
+       }
+
+       switch(session->spdu_type){
+       case SES_CONNECTION_REQUEST:            /*   AARQ   */
+       case SES_CONNECTION_ACCEPT:             /*   AARE   */
+               /* these two functions are used to set up the association
+                  between a presentation identifier (indir_ref) and
+                  a protocol identified by a oid.
+                  it is ugly to handle it with global variables but
+                  better than nothing.
+               */
+               register_ctx_id_and_oid(pinfo, indir_ref, object_identifier_id);
+               break;
+       }
+}
+
+/*--- proto_register_acse ----------------------------------------------*/
+void proto_register_acse(void) {
+
+  /* List of fields */
+  static hf_register_info hf[] = {
+#include "packet-acse-hfarr.c"
+  };
+
+  /* List of subtrees */
+  static gint *ett[] = {
+    &ett_acse,
+#include "packet-acse-ettarr.c"
+  };
+
+  /* Register protocol */
+  proto_acse = proto_register_protocol(PNAME, PSNAME, PFNAME);
+  register_dissector("acse", dissect_acse, proto_acse);
+
+  /* Register fields and subtrees */
+  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);
+}
+
+
+/*--- proto_reg_handoff_acse -------------------------------------------*/
+void proto_reg_handoff_acse(void) {
+/*#include "packet-acse-dis-tab.c"*/
+}
+
diff --git a/asn1/acse/packet-acse-template.h b/asn1/acse/packet-acse-template.h
new file mode 100644 (file)
index 0000000..c18b3be
--- /dev/null
@@ -0,0 +1,32 @@
+/* packet-acse.h
+ * Routines for ACSE packet dissection
+ *   Ronnie Sahlberg 2005
+ *
+ * $Id: packet-acse-template.h 12573 2004-11-22 03:36:26Z sahlberg $
+ *
+ * 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_ACSE_H
+#define PACKET_ACSE_H
+
+/*#include "packet-acse-exp.h"*/
+
+#endif  /* PACKET_ACSE_H */
+