forked from osmocom/wireshark
New autogenerated ACSE dissector.
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 svn path=/trunk/; revision=14698
This commit is contained in:
parent
f8a0c37aca
commit
fddc09d930
|
@ -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 "
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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"*/
|
||||
}
|
||||
|
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue