aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/h501
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/asn1/h501')
-rw-r--r--epan/dissectors/asn1/h501/CMakeLists.txt52
-rw-r--r--epan/dissectors/asn1/h501/H501-MESSAGES.asn656
-rw-r--r--epan/dissectors/asn1/h501/Makefile.am23
-rw-r--r--epan/dissectors/asn1/h501/Makefile.common48
-rw-r--r--epan/dissectors/asn1/h501/Makefile.nmake26
-rw-r--r--epan/dissectors/asn1/h501/h501.cnf26
-rw-r--r--epan/dissectors/asn1/h501/packet-h501-template.c156
7 files changed, 987 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/h501/CMakeLists.txt b/epan/dissectors/asn1/h501/CMakeLists.txt
new file mode 100644
index 0000000000..dc4e5a02eb
--- /dev/null
+++ b/epan/dissectors/asn1/h501/CMakeLists.txt
@@ -0,0 +1,52 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+set( PROTOCOL_NAME h501 )
+
+set( PROTO_OPT )
+
+set( EXT_ASN_FILE_LIST
+)
+
+set( ASN_FILE_LIST
+ H501-MESSAGES.asn
+)
+
+set( EXTRA_DIST
+ ${ASN_FILE_LIST}
+ packet-${PROTOCOL_NAME}-template.c
+ ${PROTOCOL_NAME}.cnf
+)
+
+set( SRC_FILES
+ ${EXTRA_DIST}
+ ${EXT_ASN_FILE_LIST}
+)
+
+set( A2W_FLAGS )
+
+set( EXTRA_CNF
+ "${CMAKE_CURRENT_BINARY_DIR}/../h225/h225-exp.cnf"
+ "${CMAKE_CURRENT_BINARY_DIR}/../h235/h235-exp.cnf"
+)
+
+ASN2WRS()
+
diff --git a/epan/dissectors/asn1/h501/H501-MESSAGES.asn b/epan/dissectors/asn1/h501/H501-MESSAGES.asn
new file mode 100644
index 0000000000..a33dfd8bfe
--- /dev/null
+++ b/epan/dissectors/asn1/h501/H501-MESSAGES.asn
@@ -0,0 +1,656 @@
+-- H501-MESSAGES.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h501/2002/H501-MESSAGES.asn
+--
+
+-- Module H501-MESSAGES (H.501:03/2002)
+H501-MESSAGES DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS
+ AuthenticationMechanism, TimeStamp, ClearToken
+ FROM H235-SECURITY-MESSAGES
+ AliasAddress, TransportAddress, ReleaseCompleteReason, ConferenceIdentifier,
+ CallIdentifier, CryptoH323Token, CryptoToken, EndpointType,
+ GatekeeperIdentifier, GloballyUniqueID, NonStandardParameter, NumberDigits,
+ PartyNumber, SupportedProtocols, TransportQOS, VendorIdentifier,
+ IntegrityMechanism, ICV, FeatureSet, GenericData, EnumeratedParameter,
+ ServiceControlSession, CircuitInfo, CircuitIdentifier
+ FROM H323-MESSAGES;
+
+Message ::= SEQUENCE {body MessageBody,
+ common MessageCommonInfo,
+ ...
+}
+
+MessageBody ::= CHOICE {
+ serviceRequest ServiceRequest,
+ serviceConfirmation ServiceConfirmation,
+ serviceRejection ServiceRejection,
+ serviceRelease ServiceRelease,
+ descriptorRequest DescriptorRequest,
+ descriptorConfirmation DescriptorConfirmation,
+ descriptorRejection DescriptorRejection,
+ descriptorIDRequest DescriptorIDRequest,
+ descriptorIDConfirmation DescriptorIDConfirmation,
+ descriptorIDRejection DescriptorIDRejection,
+ descriptorUpdate DescriptorUpdate,
+ descriptorUpdateAck DescriptorUpdateAck,
+ accessRequest AccessRequest,
+ accessConfirmation AccessConfirmation,
+ accessRejection AccessRejection,
+ requestInProgress RequestInProgress,
+ nonStandardRequest NonStandardRequest,
+ nonStandardConfirmation NonStandardConfirmation,
+ nonStandardRejection NonStandardRejection,
+ unknownMessageResponse UnknownMessageResponse,
+ usageRequest UsageRequest,
+ usageConfirmation UsageConfirmation,
+ usageIndication UsageIndication,
+ usageIndicationConfirmation UsageIndicationConfirmation,
+ usageIndicationRejection UsageIndicationRejection,
+ usageRejection UsageRejection,
+ validationRequest ValidationRequest,
+ validationConfirmation ValidationConfirmation,
+ validationRejection ValidationRejection,
+ ...,
+ authenticationRequest AuthenticationRequest,
+ authenticationConfirmation AuthenticationConfirmation,
+ authenticationRejection AuthenticationRejection
+}
+
+MessageCommonInfo ::= SEQUENCE {
+ sequenceNumber INTEGER(0..65535),
+ annexGversion ProtocolVersion, -- set to "H.225.0 Annex G V2"
+ hopCount INTEGER(1..255),
+ replyAddress SEQUENCE OF TransportAddress OPTIONAL,
+ -- Must be present in request
+ integrityCheckValue ICV OPTIONAL,
+ tokens SEQUENCE OF ClearToken OPTIONAL,
+ cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL,
+ nonStandard SEQUENCE OF NonStandardParameter OPTIONAL,
+ ...,
+ serviceID ServiceID OPTIONAL,
+ genericData SEQUENCE OF GenericData OPTIONAL,
+ featureSet FeatureSet OPTIONAL,
+ version ProtocolVersion -- current H.501 protocol version
+}
+
+ServiceID ::= GloballyUniqueID
+
+--
+-- H.501 messages
+--
+ServiceRequest ::= SEQUENCE {
+ elementIdentifier ElementIdentifier OPTIONAL,
+ domainIdentifier AliasAddress OPTIONAL,
+ securityMode SEQUENCE OF SecurityMode OPTIONAL,
+ timeToLive INTEGER(1..4294967295) OPTIONAL,
+ ...,
+ usageSpec UsageSpecification OPTIONAL
+}
+
+SecurityMode ::= SEQUENCE {
+ authentication AuthenticationMechanism OPTIONAL,
+ integrity IntegrityMechanism OPTIONAL,
+ algorithmOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+ ...
+}
+
+ServiceConfirmation ::= SEQUENCE {
+ elementIdentifier ElementIdentifier,
+ domainIdentifier AliasAddress,
+ alternates AlternatePEInfo OPTIONAL,
+ securityMode SecurityMode OPTIONAL,
+ timeToLive INTEGER(1..4294967295) OPTIONAL,
+ ...,
+ usageSpec UsageSpecification OPTIONAL
+}
+
+ServiceRejection ::= SEQUENCE {
+ reason ServiceRejectionReason,
+ alternates AlternatePEInfo OPTIONAL,
+ ...
+}
+
+ServiceRejectionReason ::= CHOICE {
+ serviceUnavailable NULL,
+ serviceRedirected NULL,
+ security NULL,
+ continue NULL,
+ undefined NULL,
+ ...,
+ unknownServiceID NULL,
+ cannotSupportUsageSpec NULL, -- Cannot comply with proposed spec
+ neededFeature NULL,
+ genericDataReason NULL,
+ usageUnavailable NULL, -- Usage reporting not supported
+ unknownUsageSendTo NULL -- Usage sendTo could not be resolved
+}
+
+ServiceRelease ::= SEQUENCE {
+ reason ServiceReleaseReason,
+ alternates AlternatePEInfo OPTIONAL,
+ ...
+}
+
+ServiceReleaseReason ::= CHOICE {
+ outOfService NULL,
+ maintenance NULL,
+ terminated NULL,
+ expired NULL,
+ ...
+}
+
+DescriptorRequest ::= SEQUENCE {descriptorID SEQUENCE OF DescriptorID,
+ ...
+}
+
+DescriptorConfirmation ::= SEQUENCE {descriptor SEQUENCE OF Descriptor,
+ ...
+}
+
+DescriptorRejection ::= SEQUENCE {
+ reason DescriptorRejectionReason,
+ descriptorID DescriptorID OPTIONAL,
+ ...
+}
+
+DescriptorRejectionReason ::= CHOICE {
+ packetSizeExceeded NULL, -- use other transport type
+ illegalID NULL, -- no descriptor for provided descriptorID
+ security NULL, -- request did not meet security requirements
+ hopCountExceeded NULL,
+ noServiceRelationship NULL,
+ undefined NULL,
+ ...,
+ neededFeature NULL,
+ genericDataReason NULL,
+ unknownServiceID NULL-- The serviceID is not recognized by--
+ -- the peer element
+}
+
+DescriptorIDRequest ::= SEQUENCE {...
+}
+
+DescriptorIDConfirmation ::= SEQUENCE {
+ descriptorInfo SEQUENCE OF DescriptorInfo,
+ ...
+}
+
+DescriptorIDRejection ::= SEQUENCE {reason DescriptorIDRejectionReason,
+ ...
+}
+
+DescriptorIDRejectionReason ::= CHOICE {
+ noDescriptors NULL, -- no descriptors to report
+ security NULL, -- request did not meet security requirements
+ hopCountExceeded NULL,
+ noServiceRelationship NULL,
+ undefined NULL,
+ ...,
+ neededFeature NULL,
+ genericDataReason NULL,
+ unknownServiceID NULL-- The serviceID is not recognized by--
+ -- the peer element
+}
+
+DescriptorUpdate ::= SEQUENCE {
+ sender AliasAddress,
+ updateInfo SEQUENCE OF UpdateInformation,
+ ...
+}
+
+UpdateInformation ::= SEQUENCE {
+ descriptorInfo
+ CHOICE {descriptorID DescriptorID,
+ descriptor Descriptor,
+ ...},
+ updateType CHOICE {added NULL,
+ deleted NULL,
+ changed NULL,
+ ...},
+ ...
+}
+
+DescriptorUpdateAck ::= SEQUENCE {...
+}
+
+AccessRequest ::= SEQUENCE {
+ destinationInfo PartyInformation,
+ sourceInfo PartyInformation OPTIONAL,
+ callInfo CallInformation OPTIONAL,
+ usageSpec UsageSpecification OPTIONAL,
+ ...,
+ desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL
+}
+
+AccessConfirmation ::= SEQUENCE {
+ templates SEQUENCE OF AddressTemplate,
+ partialResponse BOOLEAN,
+ ...,
+ supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL,
+ serviceControl SEQUENCE OF ServiceControlSession OPTIONAL
+}
+
+AccessRejection ::= SEQUENCE {
+ reason AccessRejectionReason,
+ ...,
+ serviceControl SEQUENCE OF ServiceControlSession OPTIONAL
+}
+
+AccessRejectionReason ::= CHOICE {
+ noMatch NULL, -- no template matched the destinationInfo
+ packetSizeExceeded NULL, -- use other transport type
+ security NULL, -- request did not meet security requirements
+ hopCountExceeded NULL,
+ needCallInformation NULL, -- Call Information must be specified
+ noServiceRelationship NULL,
+ undefined NULL,
+ ...,
+ neededFeature NULL,
+ genericDataReason NULL,
+ destinationUnavailable NULL, -- Destination was resolved but is
+
+ -- unavailable
+ aliasesInconsistent NULL, -- Multiple aliases identify distinct
+
+ -- destinations
+ resourceUnavailable NULL, -- One or more required resources are
+
+ -- unavailable
+ incompleteAddress NULL, -- Destination cannot be distinctly
+
+ -- identified
+ unknownServiceID NULL, -- The serviceID is not recognized by
+
+ -- the peer element
+ usageUnavailable NULL, -- Usage reporting not supported
+ cannotSupportUsageSpec NULL, -- Cannot comply with proposed spec
+ unknownUsageSendTo NULL -- Usage sendTo could not be resolved
+}
+
+UsageRequest ::= SEQUENCE {
+ callInfo CallInformation,
+ usageSpec UsageSpecification,
+ ...
+}
+
+UsageConfirmation ::= SEQUENCE {...
+}
+
+UsageRejection ::= SEQUENCE {reason UsageRejectReason,
+ ...
+}
+
+UsageIndication ::= SEQUENCE {
+ callInfo CallInformation,
+ accessTokens SEQUENCE OF AccessToken OPTIONAL,
+ senderRole Role,
+ usageCallStatus UsageCallStatus,
+ srcInfo PartyInformation OPTIONAL,
+ destAddress PartyInformation,
+ startTime TimeStamp OPTIONAL,
+ endTime TimeStamp OPTIONAL,
+ terminationCause TerminationCause OPTIONAL,
+ usageFields SEQUENCE OF UsageField,
+ ...
+}
+
+UsageField ::= SEQUENCE {id OBJECT IDENTIFIER,
+ value OCTET STRING,
+ ...
+}
+
+UsageRejectReason ::= CHOICE {
+ invalidCall NULL,
+ unavailable NULL,
+ security NULL,
+ noServiceRelationship NULL,
+ undefined NULL,
+ ...,
+ neededFeature NULL,
+ genericDataReason NULL,
+ unknownServiceID NULL-- The serviceID is not recognized by--
+ -- the peer element
+}
+
+UsageIndicationConfirmation ::= SEQUENCE {...
+}
+
+UsageIndicationRejection ::= SEQUENCE {
+ reason UsageIndicationRejectionReason,
+ ...
+}
+
+UsageIndicationRejectionReason ::= CHOICE {
+ unknownCall NULL,
+ incomplete NULL,
+ security NULL,
+ noServiceRelationship NULL,
+ undefined NULL,
+ ...,
+ neededFeature NULL,
+ genericDataReason NULL,
+ unknownServiceID NULL-- The serviceID is not recognized by--
+ -- the peer element
+}
+
+ValidationRequest ::= SEQUENCE {
+ accessToken SEQUENCE OF AccessToken OPTIONAL,
+ destinationInfo PartyInformation OPTIONAL,
+ sourceInfo PartyInformation OPTIONAL,
+ callInfo CallInformation,
+ usageSpec UsageSpecification OPTIONAL,
+ ...
+}
+
+ValidationConfirmation ::= SEQUENCE {
+ destinationInfo PartyInformation OPTIONAL,
+ usageSpec UsageSpecification OPTIONAL,
+ ...
+}
+
+ValidationRejection ::= SEQUENCE {reason ValidationRejectionReason,
+ ...
+}
+
+ValidationRejectionReason ::= CHOICE {
+ tokenNotValid NULL,
+ security NULL, -- request did not meet security requirements
+ hopCountExceeded NULL,
+ missingSourceInfo NULL,
+ missingDestInfo NULL,
+ noServiceRelationship NULL,
+ undefined NULL,
+ ...,
+ neededFeature NULL,
+ genericDataReason NULL,
+ unknownServiceID NULL-- The serviceID is not recognized by--
+ -- the peer element
+}
+
+RequestInProgress ::= SEQUENCE {
+ delay INTEGER(1..65535),
+ ...,
+ serviceControl SEQUENCE OF ServiceControlSession OPTIONAL
+}
+
+NonStandardRequest ::= SEQUENCE {...
+}
+
+NonStandardConfirmation ::= SEQUENCE {...
+}
+
+NonStandardRejection ::= SEQUENCE {reason NonStandardRejectionReason,
+ ...
+}
+
+NonStandardRejectionReason ::= CHOICE {
+ notSupported NULL,
+ noServiceRelationship NULL,
+ undefined NULL,
+ ...,
+ neededFeature NULL,
+ genericDataReason NULL,
+ unknownServiceID NULL-- The serviceID is not recognized by--
+ -- the peer element
+}
+
+UnknownMessageResponse ::= SEQUENCE {
+ unknownMessage OCTET STRING,
+ reason UnknownMessageReason,
+ ...
+}
+
+UnknownMessageReason ::= CHOICE {notUnderstood NULL,
+ undefined NULL,
+ ...
+}
+
+AuthenticationRequest ::= SEQUENCE {
+ applicationMessage ApplicationMessage, -- e.g. RAS message in
+
+ -- ITU-T Rec. H.323
+ ...
+}
+
+ApplicationMessage ::= OCTET STRING
+
+AuthenticationConfirmation ::= SEQUENCE {...
+}
+
+AuthenticationRejection ::= SEQUENCE {
+ reason AuthenticationRejectionReason,
+ ...
+}
+
+AuthenticationRejectionReason ::= CHOICE {
+ security NULL,
+ hopCountExceeded NULL,
+ noServiceRelationship NULL,
+ undefined NULL,
+ neededFeature NULL,
+ genericDataReason NULL,
+ unknownServiceID NULL,
+ securityWrongSyncTime NULL, -- time server problem or network delay
+ securityReplay NULL, -- replay attack encountered
+ securityWrongGeneralID NULL, -- wrong general ID
+ securityWrongSendersID NULL, -- wrong senders ID
+ securityIntegrityFailed NULL, -- integrity check failed
+ securityWrongOID NULL, -- wrong token OIDs or crypto alg OIDs
+ ...
+}
+
+--
+-- structures common to multiple messages
+--
+AddressTemplate ::= SEQUENCE {
+ pattern SEQUENCE OF Pattern,
+ routeInfo SEQUENCE OF RouteInformation,
+ timeToLive INTEGER(1..4294967295),
+ ...,
+ supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL,
+ featureSet FeatureSet OPTIONAL
+}
+
+Pattern ::= CHOICE {
+ specific AliasAddress,
+ wildcard AliasAddress,
+ range SEQUENCE {startOfRange PartyNumber,
+ endOfRange PartyNumber},
+ ...
+}
+
+RouteInformation ::= SEQUENCE {
+ messageType
+ CHOICE {sendAccessRequest NULL,
+ sendSetup NULL,
+ nonExistent NULL,
+ ...},
+ callSpecific BOOLEAN,
+ usageSpec UsageSpecification OPTIONAL,
+ priceInfo SEQUENCE OF PriceInfoSpec OPTIONAL,
+ contacts SEQUENCE OF ContactInformation,
+ type EndpointType OPTIONAL,
+ -- must be present if messageType = sendSetup
+ ...,
+ featureSet FeatureSet OPTIONAL,
+ circuitID CircuitInfo OPTIONAL,
+ supportedCircuits SEQUENCE OF CircuitIdentifier OPTIONAL
+}
+
+ContactInformation ::= SEQUENCE {
+ transportAddress AliasAddress,
+ priority INTEGER(0..127),
+ transportQoS TransportQOS OPTIONAL,
+ security SEQUENCE OF SecurityMode OPTIONAL,
+ accessTokens SEQUENCE OF AccessToken OPTIONAL,
+ ...,
+ multipleCalls BOOLEAN OPTIONAL,
+ featureSet FeatureSet OPTIONAL,
+ circuitID CircuitInfo OPTIONAL,
+ supportedCircuits SEQUENCE OF CircuitIdentifier OPTIONAL
+}
+
+PriceInfoSpec ::= SEQUENCE {
+ currency IA5String(SIZE (3)), -- e.g. "USD"
+ currencyScale INTEGER(-127..127),
+ validFrom GlobalTimeStamp OPTIONAL,
+ validUntil GlobalTimeStamp OPTIONAL,
+ hoursFrom IA5String(SIZE (6)) OPTIONAL, -- "HHMMSS" UTC
+ hoursUntil IA5String(SIZE (6)) OPTIONAL, -- "HHMMSS" UTC
+ priceElement SEQUENCE OF PriceElement OPTIONAL,
+ priceFormula IA5String(SIZE (1..2048)) OPTIONAL,
+ ...
+}
+
+PriceElement ::= SEQUENCE {
+ amount INTEGER(0..4294967295), -- meter increment
+ quantum INTEGER(0..4294967295), -- each or part thereof
+ units
+ CHOICE {seconds NULL,
+ packets NULL,
+ bytes NULL,
+ initial NULL,
+ minimum NULL,
+ maximum NULL,
+ ...},
+ ...
+}
+
+Descriptor ::= SEQUENCE {
+ descriptorInfo DescriptorInfo,
+ templates SEQUENCE OF AddressTemplate,
+ gatekeeperID GatekeeperIdentifier OPTIONAL,
+ ...
+}
+
+DescriptorInfo ::= SEQUENCE {
+ descriptorID DescriptorID,
+ lastChanged GlobalTimeStamp,
+ ...
+}
+
+AlternatePEInfo ::= SEQUENCE {
+ alternatePE SEQUENCE OF AlternatePE,
+ alternateIsPermanent BOOLEAN,
+ ...
+}
+
+AlternatePE ::= SEQUENCE {
+ contactAddress AliasAddress,
+ priority INTEGER(1..127),
+ elementIdentifier ElementIdentifier OPTIONAL,
+ ...
+}
+
+AccessToken ::= CHOICE {
+ token ClearToken,
+ cryptoToken CryptoH323Token,
+ ...,
+ genericData GenericData
+}
+
+CallInformation ::= SEQUENCE {
+ callIdentifier CallIdentifier,
+ conferenceID ConferenceIdentifier,
+ ...,
+ circuitID CircuitInfo OPTIONAL
+}
+
+UsageCallStatus ::= CHOICE {
+ preConnect NULL, -- Call has not started
+ callInProgress NULL, -- Call is in progress
+ callEnded NULL, -- Call ended
+ ...,
+ registrationLost NULL -- Uncertain if call ended or not
+}
+
+UserInformation ::= SEQUENCE {
+ userIdentifier AliasAddress,
+ userAuthenticator SEQUENCE OF CryptoH323Token OPTIONAL,
+ ...
+}
+
+UsageSpecification ::= SEQUENCE {
+ sendTo ElementIdentifier,
+ when
+ SEQUENCE {never NULL OPTIONAL,
+ start NULL OPTIONAL,
+ end NULL OPTIONAL,
+ period INTEGER(1..65535) OPTIONAL, -- in seconds--
+ failures NULL OPTIONAL,
+ ...},
+ required SEQUENCE OF OBJECT IDENTIFIER,
+ preferred SEQUENCE OF OBJECT IDENTIFIER,
+ ...,
+ sendToPEAddress AliasAddress OPTIONAL
+}
+
+PartyInformation ::= SEQUENCE {
+ logicalAddresses SEQUENCE OF AliasAddress,
+ domainIdentifier AliasAddress OPTIONAL,
+ transportAddress AliasAddress OPTIONAL,
+ endpointType EndpointType OPTIONAL,
+ userInfo UserInformation OPTIONAL,
+ timeZone TimeZone OPTIONAL,
+ ...
+}
+
+Role ::= CHOICE {
+ originator NULL,
+ destination NULL,
+ nonStandardData NonStandardParameter,
+ ...
+}
+
+TimeZone ::= INTEGER(-43200..43200) -- number of seconds relative to UTC
+
+
+-- including DST if appropriate
+TerminationCause ::= SEQUENCE {
+ releaseCompleteReason ReleaseCompleteReason,
+ causeIE INTEGER(1..65535) OPTIONAL,
+ nonStandardData NonStandardParameter OPTIONAL,
+ ...
+}
+
+ProtocolVersion ::= OBJECT IDENTIFIER
+
+-- shall be set to
+-- {itu-t(0) recommendation(0) h(8) h-225-0(2250) annex(1) g(7)
+-- version(0) 2} in field annexGversion;
+-- {itu-t(0) recommendation(0) h(8) 501 version(0) 1}
+-- in field version
+DescriptorID ::=
+ GloballyUniqueID
+
+ElementIdentifier ::= BMPString(SIZE (1..128))
+
+GlobalTimeStamp ::= IA5String(SIZE (14))
+
+-- UTC, in the form YYYYMMDDHHmmSS
+-- where YYYY = year, MM = month, DD = day,
+-- HH = hour, mm = minute, SS = second
+-- (for example, 19981219120000 for noon
+-- 19 December 1998)
+--
+-- REPOSITORY FOR APPLICATION SPECIFIC DATA
+--
+-- H.225.0 Annex-G profile data
+--
+idAnnexGProfiles INTEGER ::=
+ 0
+
+idAnnexGProfileA INTEGER ::= 1
+
+--annexGProfileA EnumeratedParameter ::=
+--{
+-- id standard:idAnnexGProfileA
+--}
+END -- of H501-MESSAGES
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/epan/dissectors/asn1/h501/Makefile.am b/epan/dissectors/asn1/h501/Makefile.am
new file mode 100644
index 0000000000..72d28e600b
--- /dev/null
+++ b/epan/dissectors/asn1/h501/Makefile.am
@@ -0,0 +1,23 @@
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+include ../Makefile.preinc
+include Makefile.common
+include ../Makefile.inc
+
diff --git a/epan/dissectors/asn1/h501/Makefile.common b/epan/dissectors/asn1/h501/Makefile.common
new file mode 100644
index 0000000000..2bb469357a
--- /dev/null
+++ b/epan/dissectors/asn1/h501/Makefile.common
@@ -0,0 +1,48 @@
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+PROTOCOL_NAME = h501
+
+EXT_ASN_FILE_LIST =
+
+ASN_FILE_LIST = \
+ H501-MESSAGES.asn
+
+EXTRA_DIST = \
+ $(EXTRA_DIST_COMMON) \
+ $(ASN_FILE_LIST) \
+ packet-$(PROTOCOL_NAME)-template.c \
+ $(PROTOCOL_NAME).cnf
+
+SRC_FILES = \
+ $(EXTRA_DIST) \
+ $(EXT_ASN_FILE_LIST)
+
+A2W_FLAGS =
+
+EXTRA_CNF = \
+ $(builddir)/../h225/h225-exp.cnf \
+ $(builddir)/../h235/h235-exp.cnf
+
+$(builddir)/../h225/h225-exp.cnf:
+ (cd $(builddir)/../h225 && $(MAKE_CNF_EXPORT))
+
+$(builddir)/../h235/h235-exp.cnf:
+ (cd $(builddir)/../h235 && $(MAKE_CNF_EXPORT))
+
diff --git a/epan/dissectors/asn1/h501/Makefile.nmake b/epan/dissectors/asn1/h501/Makefile.nmake
new file mode 100644
index 0000000000..d296638ddd
--- /dev/null
+++ b/epan/dissectors/asn1/h501/Makefile.nmake
@@ -0,0 +1,26 @@
+## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+include ../../../../config.nmake
+include ../Makefile.preinc.nmake
+include Makefile.common
+include ../Makefile.inc.nmake
+
diff --git a/epan/dissectors/asn1/h501/h501.cnf b/epan/dissectors/asn1/h501/h501.cnf
new file mode 100644
index 0000000000..0664c39596
--- /dev/null
+++ b/epan/dissectors/asn1/h501/h501.cnf
@@ -0,0 +1,26 @@
+# h501.cnf
+# H.501 conformation file
+# 2007 Tomas Kukosa
+
+#.INCLUDE ../h225/h225-exp.cnf
+#.INCLUDE ../h235/h235-exp.cnf
+
+#.OPT
+PER
+ALIGNED
+#.END
+
+#.PDU
+Message
+#.END
+
+#.FN_PARS MessageBody
+ VAL_PTR = &msg_type
+#.FN_HDR
+ gint32 msg_type = -1;
+ const gchar *p = NULL;
+#.FN_FTR
+ p = try_val_to_str(msg_type, VALS(h501_MessageBody_vals));
+ if (p )
+ col_set_str(actx->pinfo->cinfo, COL_INFO, p);
+#.END
diff --git a/epan/dissectors/asn1/h501/packet-h501-template.c b/epan/dissectors/asn1/h501/packet-h501-template.c
new file mode 100644
index 0000000000..f4ee5e2c50
--- /dev/null
+++ b/epan/dissectors/asn1/h501/packet-h501-template.c
@@ -0,0 +1,156 @@
+/* packet-h501.c
+ * Routines for H.501 packet dissection
+ * 2007 Tomas Kukosa
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/prefs.h>
+#include <epan/oids.h>
+#include <epan/asn1.h>
+
+#include "packet-tpkt.h"
+#include "packet-per.h"
+#include "packet-h225.h"
+#include "packet-h235.h"
+
+#define PNAME "H.501 Mobility"
+#define PSNAME "H.501"
+#define PFNAME "h501"
+
+void proto_register_h501(void);
+
+/* Initialize the protocol and registered fields */
+static int proto_h501 = -1;
+#include "packet-h501-hf.c"
+
+/* Initialize the subtree pointers */
+static int ett_h501 = -1;
+#include "packet-h501-ett.c"
+
+/* Dissectors */
+static dissector_handle_t h501_pdu_handle;
+
+/* Preferences */
+static guint h501_udp_port = 2099;
+static guint h501_tcp_port = 2099;
+static gboolean h501_desegment_tcp = TRUE;
+
+void proto_reg_handoff_h501(void);
+
+#include "packet-h501-fn.c"
+
+static int
+dissect_h501_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ proto_item *ti = NULL;
+ proto_tree *h501_tree = NULL;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME);
+
+ ti = proto_tree_add_item(tree, proto_h501, tvb, 0, -1, ENC_NA);
+ h501_tree = proto_item_add_subtree(ti, ett_h501);
+
+ return dissect_Message_PDU(tvb, pinfo, h501_tree, NULL);
+}
+
+static int
+dissect_h501_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ dissect_tpkt_encap(tvb, pinfo, tree, FALSE, h501_pdu_handle);
+ return tvb_captured_length(tvb);
+}
+
+static int
+dissect_h501_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ dissect_tpkt_encap(tvb, pinfo, tree, h501_desegment_tcp, h501_pdu_handle);
+ return tvb_captured_length(tvb);
+}
+
+/*--- proto_register_h501 ----------------------------------------------*/
+void proto_register_h501(void) {
+ module_t *h501_module;
+
+ /* List of fields */
+ static hf_register_info hf[] = {
+#include "packet-h501-hfarr.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+ &ett_h501,
+#include "packet-h501-ettarr.c"
+ };
+
+ /* Register protocol */
+ proto_h501 = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_h501, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ register_dissector(PFNAME, dissect_h501_pdu, proto_h501);
+
+ h501_module = prefs_register_protocol(proto_h501, proto_reg_handoff_h501);
+ prefs_register_uint_preference(h501_module, "udp.port",
+ "UDP port",
+ "Port to be decoded as h501",
+ 10, &h501_udp_port);
+ prefs_register_uint_preference(h501_module, "tcp.port",
+ "TCP port",
+ "Port to be decoded as h501",
+ 10, &h501_tcp_port);
+ prefs_register_bool_preference(h501_module, "desegment",
+ "Desegment H.501 over TCP",
+ "Desegment H.501 messages that span more TCP segments",
+ &h501_desegment_tcp);
+
+}
+
+/*--- proto_reg_handoff_h501 -------------------------------------------*/
+void proto_reg_handoff_h501(void)
+{
+ static gboolean h501_prefs_initialized = FALSE;
+ static dissector_handle_t h501_udp_handle;
+ static dissector_handle_t h501_tcp_handle;
+ static guint saved_h501_udp_port;
+ static guint saved_h501_tcp_port;
+
+ if (!h501_prefs_initialized) {
+ h501_pdu_handle = find_dissector(PFNAME);
+ h501_udp_handle = create_dissector_handle(dissect_h501_udp, proto_h501);
+ h501_tcp_handle = create_dissector_handle(dissect_h501_tcp, proto_h501);
+ h501_prefs_initialized = TRUE;
+ } else {
+ dissector_delete_uint("udp.port", saved_h501_udp_port, h501_udp_handle);
+ dissector_delete_uint("tcp.port", saved_h501_tcp_port, h501_tcp_handle);
+ }
+
+ /* Set our port number for future use */
+ saved_h501_udp_port = h501_udp_port;
+ dissector_add_uint("udp.port", saved_h501_udp_port, h501_udp_handle);
+ saved_h501_tcp_port = h501_tcp_port;
+ dissector_add_uint("tcp.port", saved_h501_tcp_port, h501_tcp_handle);
+
+}
+