H.501 Mobility protocol implemented
authorkukosa <kukosa@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 26 Oct 2007 07:42:29 +0000 (07:42 +0000)
committerkukosa <kukosa@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 26 Oct 2007 07:42:29 +0000 (07:42 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@23275 f5534014-38df-0310-8fa8-9805f1628bb7

asn1/Makefile.am
asn1/Makefile.nmake
asn1/h501/H501-MESSAGES.asn [new file with mode: 0644]
asn1/h501/Makefile.am [new file with mode: 0644]
asn1/h501/Makefile.common [new file with mode: 0644]
asn1/h501/Makefile.nmake [new file with mode: 0644]
asn1/h501/h501.cnf [new file with mode: 0644]
asn1/h501/packet-h501-template.c [new file with mode: 0644]
configure.in
epan/dissectors/Makefile.common
epan/dissectors/packet-h501.c [new file with mode: 0644]

index 1c3f0e5fd7a30b791a1d6e5bba11630f942cdd90..da2f695019040423dc47caa0152b122aa39da829 100644 (file)
@@ -47,6 +47,7 @@ SUBDIRS = \
        h450            \
        h450-ros        \
        h460            \
+       h501            \
        inap            \
        ldap            \
        logotype-cert-extn      \
index 728e8ec0785c685ed263387b33da98a239523a1d..84e96196ab65e851301f9ba1d61d2e749e69d61b 100644 (file)
@@ -86,6 +86,7 @@ per: \
        h450    \
        h450-ros        \
        h460    \
+       h501    \
        nbap    \
        mpeg-audio      \
        mpeg-pes        \
@@ -167,6 +168,9 @@ clean:
        cd h460
        $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
        cd ..
+       cd h501
+       $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
+       cd ..
        cd inap
        $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
        cd ..
@@ -423,6 +427,11 @@ h460::
        $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
        cd ..
 
+h501::
+       cd h501
+       $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
+       cd ..
+
 inap::
        cd inap
        $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
diff --git a/asn1/h501/H501-MESSAGES.asn b/asn1/h501/H501-MESSAGES.asn
new file mode 100644 (file)
index 0000000..e63148f
--- /dev/null
@@ -0,0 +1,658 @@
+-- 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
+--
+-- $Id$
+--
+
+-- 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/asn1/h501/Makefile.am b/asn1/h501/Makefile.am
new file mode 100644 (file)
index 0000000..462af31
--- /dev/null
@@ -0,0 +1,26 @@
+# $Id$
+#
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+
+include ../Makefile.preinc
+include Makefile.common
+include ../Makefile.inc
+
diff --git a/asn1/h501/Makefile.common b/asn1/h501/Makefile.common
new file mode 100644 (file)
index 0000000..e4ba5f8
--- /dev/null
@@ -0,0 +1,55 @@
+# $Id$
+#
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+
+PROTOCOL_NAME = h501
+
+DISSECTOR_FILES = \
+       packet-$(PROTOCOL_NAME).c
+
+# NEED_PACKET_PROTO_H =
+
+EXT_ASN_FILE_LIST = 
+
+ASN_FILE_LIST = \
+       H501-MESSAGES.asn 
+
+EXTRA_DIST = \
+       $(ASN_FILE_LIST) \
+       packet-$(PROTOCOL_NAME)-template.c \
+       $(PROTOCOL_NAME).cnf
+
+SRC_FILES = \
+       $(EXTRA_DIST) \
+       $(EXT_ASN_FILE_LIST)
+
+A2W_FLAGS = 
+
+EXTRA_CNF = \
+       ../h225/h225-exp.cnf    \
+       ../h235/h235-exp.cnf
+
+../h225/h225-exp.cnf:
+       (cd ../h225 && $(MAKE_CNF_EXPORT))
+
+../h235/h235-exp.cnf:
+       (cd ../h235 && $(MAKE_CNF_EXPORT))
+
diff --git a/asn1/h501/Makefile.nmake b/asn1/h501/Makefile.nmake
new file mode 100644 (file)
index 0000000..5a32997
--- /dev/null
@@ -0,0 +1,29 @@
+## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
+#
+# $Id$
+#
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+
+include ../../config.nmake
+include ../Makefile.preinc.nmake
+include Makefile.common
+include ../Makefile.inc.nmake
+
diff --git a/asn1/h501/h501.cnf b/asn1/h501/h501.cnf
new file mode 100644 (file)
index 0000000..9083d06
--- /dev/null
@@ -0,0 +1,17 @@
+# h501.cnf
+# H.501 conformation file
+# 2007  Tomas Kukosa
+
+# $Id$
+
+#.INCLUDE ../h225/h225-exp.cnf
+#.INCLUDE ../h235/h235-exp.cnf
+
+#.OPT
+PER
+ALIGNED
+#.END
+
+#.PDU_NEW
+Message
+#.END
diff --git a/asn1/h501/packet-h501-template.c b/asn1/h501/packet-h501-template.c
new file mode 100644 (file)
index 0000000..e08a045
--- /dev/null
@@ -0,0 +1,167 @@
+/* packet-h501.c
+ * Routines for H.501 packet dissection
+ * 2007  Tomas Kukosa
+ *
+ * $Id$
+ *
+ * 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., 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/prefs.h>
+#include <epan/conversation.h>
+#include <epan/oids.h>
+#include <epan/asn1.h>
+
+#include <stdio.h>
+#include <string.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"
+
+/* Initialize the protocol and registered fields */
+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 = NULL;
+static dissector_handle_t h501_udp_handle = NULL;
+static dissector_handle_t h501_tcp_handle = NULL;
+
+/* Preferences */
+static guint h501_udp_port = 2099;
+static guint h501_tcp_port = 2099;
+static gboolean h501_desegment_tcp = TRUE;
+
+/* Gloabl variables */
+static guint saved_h501_udp_port;
+static guint saved_h501_tcp_port;
+
+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)
+{
+  proto_item  *ti = NULL;
+  proto_tree  *h501_tree = NULL;
+
+  if (check_col(pinfo->cinfo, COL_PROTOCOL))
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, PNAME);
+
+  ti = proto_tree_add_item(tree, proto_h501, tvb, 0, -1, FALSE);
+  h501_tree = proto_item_add_subtree(ti, ett_h501);
+
+  return dissect_Message_PDU(tvb, pinfo, h501_tree);
+}
+
+static int
+dissect_h501_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  dissect_tpkt_encap(tvb, pinfo, tree, FALSE, h501_pdu_handle);
+  return tvb_length(tvb);
+}
+
+static int
+dissect_h501_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  dissect_tpkt_encap(tvb, pinfo, tree, h501_desegment_tcp, h501_pdu_handle);
+  return tvb_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_pdu_handle = find_dissector(PFNAME);
+
+  h501_udp_handle = new_create_dissector_handle(dissect_h501_udp, proto_h501);
+  h501_tcp_handle = new_create_dissector_handle(dissect_h501_tcp, 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;
+
+  if (h501_prefs_initialized) {
+    dissector_delete("udp.port", saved_h501_udp_port, h501_udp_handle);
+    dissector_delete("tcp.port", saved_h501_tcp_port, h501_tcp_handle);
+  } else {
+    h501_prefs_initialized = TRUE;
+  }
+
+  /* Set our port number for future use */
+  saved_h501_udp_port = h501_udp_port;
+  dissector_add("udp.port", saved_h501_udp_port, h501_udp_handle);
+  saved_h501_tcp_port = h501_tcp_port;
+  dissector_add("tcp.port", saved_h501_tcp_port, h501_tcp_handle);
+
+}
+
index d3946bd8997388f70b0824c02edfc36ac03cedc8..7d4047cb2fc8cd4727927e805e422b6b6c7e7552 100644 (file)
@@ -1495,6 +1495,7 @@ AC_OUTPUT(
   asn1/h450/Makefile
   asn1/h450-ros/Makefile
   asn1/h460/Makefile
+  asn1/h501/Makefile
   asn1/inap/Makefile
   asn1/ldap/Makefile
   asn1/logotype-cert-extn/Makefile
index 1fa78020d6a8bf10e7b0d27c6ed6ccb0bd0887b2..d2ddc4740e39af5082a8f0f2ec41bb6a4981a6bc 100644 (file)
@@ -106,6 +106,7 @@ ASN_DISSECTOR_SRC = \
        packet-h450.c \
        packet-h450-ros.c \
        packet-h460.c \
+       packet-h501.c \
        packet-inap.c \
        packet-ldap.c \
        packet-logotypecertextn.c \
diff --git a/epan/dissectors/packet-h501.c b/epan/dissectors/packet-h501.c
new file mode 100644 (file)
index 0000000..ec786dd
--- /dev/null
@@ -0,0 +1,3724 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
+/* packet-h501.c                                                              */
+/* ../../tools/asn2wrs.py -p h501 -c h501.cnf -s packet-h501-template H501-MESSAGES.asn */
+
+/* Input file: packet-h501-template.c */
+
+#line 1 "packet-h501-template.c"
+/* packet-h501.c
+ * Routines for H.501 packet dissection
+ * 2007  Tomas Kukosa
+ *
+ * $Id$
+ *
+ * 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., 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/prefs.h>
+#include <epan/conversation.h>
+#include <epan/oids.h>
+#include <epan/asn1.h>
+
+#include <stdio.h>
+#include <string.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"
+
+/* Initialize the protocol and registered fields */
+int proto_h501 = -1;
+
+/*--- Included file: packet-h501-hf.c ---*/
+#line 1 "packet-h501-hf.c"
+static int hf_h501_Message_PDU = -1;              /* Message */
+static int hf_h501_body = -1;                     /* MessageBody */
+static int hf_h501_common = -1;                   /* MessageCommonInfo */
+static int hf_h501_serviceRequest = -1;           /* ServiceRequest */
+static int hf_h501_serviceConfirmation = -1;      /* ServiceConfirmation */
+static int hf_h501_serviceRejection = -1;         /* ServiceRejection */
+static int hf_h501_serviceRelease = -1;           /* ServiceRelease */
+static int hf_h501_descriptorRequest = -1;        /* DescriptorRequest */
+static int hf_h501_descriptorConfirmation = -1;   /* DescriptorConfirmation */
+static int hf_h501_descriptorRejection = -1;      /* DescriptorRejection */
+static int hf_h501_descriptorIDRequest = -1;      /* DescriptorIDRequest */
+static int hf_h501_descriptorIDConfirmation = -1;  /* DescriptorIDConfirmation */
+static int hf_h501_descriptorIDRejection = -1;    /* DescriptorIDRejection */
+static int hf_h501_descriptorUpdate = -1;         /* DescriptorUpdate */
+static int hf_h501_descriptorUpdateAck = -1;      /* DescriptorUpdateAck */
+static int hf_h501_accessRequest = -1;            /* AccessRequest */
+static int hf_h501_accessConfirmation = -1;       /* AccessConfirmation */
+static int hf_h501_accessRejection = -1;          /* AccessRejection */
+static int hf_h501_requestInProgress = -1;        /* RequestInProgress */
+static int hf_h501_nonStandardRequest = -1;       /* NonStandardRequest */
+static int hf_h501_nonStandardConfirmation = -1;  /* NonStandardConfirmation */
+static int hf_h501_nonStandardRejection = -1;     /* NonStandardRejection */
+static int hf_h501_unknownMessageResponse = -1;   /* UnknownMessageResponse */
+static int hf_h501_usageRequest = -1;             /* UsageRequest */
+static int hf_h501_usageConfirmation = -1;        /* UsageConfirmation */
+static int hf_h501_usageIndication = -1;          /* UsageIndication */
+static int hf_h501_usageIndicationConfirmation = -1;  /* UsageIndicationConfirmation */
+static int hf_h501_usageIndicationRejection = -1;  /* UsageIndicationRejection */
+static int hf_h501_usageRejection = -1;           /* UsageRejection */
+static int hf_h501_validationRequest = -1;        /* ValidationRequest */
+static int hf_h501_validationConfirmation = -1;   /* ValidationConfirmation */
+static int hf_h501_validationRejection = -1;      /* ValidationRejection */
+static int hf_h501_authenticationRequest = -1;    /* AuthenticationRequest */
+static int hf_h501_authenticationConfirmation = -1;  /* AuthenticationConfirmation */
+static int hf_h501_authenticationRejection = -1;  /* AuthenticationRejection */
+static int hf_h501_sequenceNumber = -1;           /* INTEGER_0_65535 */
+static int hf_h501_annexGversion = -1;            /* ProtocolVersion */
+static int hf_h501_hopCount = -1;                 /* INTEGER_1_255 */
+static int hf_h501_replyAddress = -1;             /* SEQUENCE_OF_TransportAddress */
+static int hf_h501_replyAddress_item = -1;        /* TransportAddress */
+static int hf_h501_integrityCheckValue = -1;      /* ICV */
+static int hf_h501_tokens = -1;                   /* SEQUENCE_OF_ClearToken */
+static int hf_h501_tokens_item = -1;              /* ClearToken */
+static int hf_h501_cryptoTokens = -1;             /* SEQUENCE_OF_CryptoH323Token */
+static int hf_h501_cryptoTokens_item = -1;        /* CryptoH323Token */
+static int hf_h501_nonStandard = -1;              /* SEQUENCE_OF_NonStandardParameter */
+static int hf_h501_nonStandard_item = -1;         /* NonStandardParameter */
+static int hf_h501_serviceID = -1;                /* ServiceID */
+static int hf_h501_genericData = -1;              /* SEQUENCE_OF_GenericData */
+static int hf_h501_genericData_item = -1;         /* GenericData */
+static int hf_h501_featureSet = -1;               /* FeatureSet */
+static int hf_h501_version = -1;                  /* ProtocolVersion */
+static int hf_h501_elementIdentifier = -1;        /* ElementIdentifier */
+static int hf_h501_domainIdentifier = -1;         /* AliasAddress */
+static int hf_h501_securityMode = -1;             /* SEQUENCE_OF_SecurityMode */
+static int hf_h501_securityMode_item = -1;        /* SecurityMode */
+static int hf_h501_timeToLive = -1;               /* INTEGER_1_4294967295 */
+static int hf_h501_usageSpec = -1;                /* UsageSpecification */
+static int hf_h501_authentication = -1;           /* AuthenticationMechanism */
+static int hf_h501_integrity = -1;                /* IntegrityMechanism */
+static int hf_h501_algorithmOIDs = -1;            /* T_algorithmOIDs */
+static int hf_h501_algorithmOIDs_item = -1;       /* OBJECT_IDENTIFIER */
+static int hf_h501_alternates = -1;               /* AlternatePEInfo */
+static int hf_h501_securityMode_01 = -1;          /* SecurityMode */
+static int hf_h501_reason = -1;                   /* ServiceRejectionReason */
+static int hf_h501_serviceUnavailable = -1;       /* NULL */
+static int hf_h501_serviceRedirected = -1;        /* NULL */
+static int hf_h501_security = -1;                 /* NULL */
+static int hf_h501_continue = -1;                 /* NULL */
+static int hf_h501_undefined = -1;                /* NULL */
+static int hf_h501_unknownServiceID = -1;         /* NULL */
+static int hf_h501_cannotSupportUsageSpec = -1;   /* NULL */
+static int hf_h501_neededFeature = -1;            /* NULL */
+static int hf_h501_genericDataReason = -1;        /* NULL */
+static int hf_h501_usageUnavailable = -1;         /* NULL */
+static int hf_h501_unknownUsageSendTo = -1;       /* NULL */
+static int hf_h501_reason_01 = -1;                /* ServiceReleaseReason */
+static int hf_h501_outOfService = -1;             /* NULL */
+static int hf_h501_maintenance = -1;              /* NULL */
+static int hf_h501_terminated = -1;               /* NULL */
+static int hf_h501_expired = -1;                  /* NULL */
+static int hf_h501_descriptorID = -1;             /* SEQUENCE_OF_DescriptorID */
+static int hf_h501_descriptorID_item = -1;        /* DescriptorID */
+static int hf_h501_descriptor = -1;               /* SEQUENCE_OF_Descriptor */
+static int hf_h501_descriptor_item = -1;          /* Descriptor */
+static int hf_h501_reason_02 = -1;                /* DescriptorRejectionReason */
+static int hf_h501_descriptorID_01 = -1;          /* DescriptorID */
+static int hf_h501_packetSizeExceeded = -1;       /* NULL */
+static int hf_h501_illegalID = -1;                /* NULL */
+static int hf_h501_hopCountExceeded = -1;         /* NULL */
+static int hf_h501_noServiceRelationship = -1;    /* NULL */
+static int hf_h501_descriptorInfo = -1;           /* SEQUENCE_OF_DescriptorInfo */
+static int hf_h501_descriptorInfo_item = -1;      /* DescriptorInfo */
+static int hf_h501_reason_03 = -1;                /* DescriptorIDRejectionReason */
+static int hf_h501_noDescriptors = -1;            /* NULL */
+static int hf_h501_sender = -1;                   /* AliasAddress */
+static int hf_h501_updateInfo = -1;               /* SEQUENCE_OF_UpdateInformation */
+static int hf_h501_updateInfo_item = -1;          /* UpdateInformation */
+static int hf_h501_descriptorInfo_01 = -1;        /* T_descriptorInfo */
+static int hf_h501_descriptor_01 = -1;            /* Descriptor */
+static int hf_h501_updateType = -1;               /* T_updateType */
+static int hf_h501_added = -1;                    /* NULL */
+static int hf_h501_deleted = -1;                  /* NULL */
+static int hf_h501_changed = -1;                  /* NULL */
+static int hf_h501_destinationInfo = -1;          /* PartyInformation */
+static int hf_h501_sourceInfo = -1;               /* PartyInformation */
+static int hf_h501_callInfo = -1;                 /* CallInformation */
+static int hf_h501_desiredProtocols = -1;         /* SEQUENCE_OF_SupportedProtocols */
+static int hf_h501_desiredProtocols_item = -1;    /* SupportedProtocols */
+static int hf_h501_templates = -1;                /* SEQUENCE_OF_AddressTemplate */
+static int hf_h501_templates_item = -1;           /* AddressTemplate */
+static int hf_h501_partialResponse = -1;          /* BOOLEAN */
+static int hf_h501_supportedProtocols = -1;       /* SEQUENCE_OF_SupportedProtocols */
+static int hf_h501_supportedProtocols_item = -1;  /* SupportedProtocols */
+static int hf_h501_serviceControl = -1;           /* SEQUENCE_OF_ServiceControlSession */
+static int hf_h501_serviceControl_item = -1;      /* ServiceControlSession */
+static int hf_h501_reason_04 = -1;                /* AccessRejectionReason */
+static int hf_h501_noMatch = -1;                  /* NULL */
+static int hf_h501_needCallInformation = -1;      /* NULL */
+static int hf_h501_destinationUnavailable = -1;   /* NULL */
+static int hf_h501_aliasesInconsistent = -1;      /* NULL */
+static int hf_h501_resourceUnavailable = -1;      /* NULL */
+static int hf_h501_incompleteAddress = -1;        /* NULL */
+static int hf_h501_reason_05 = -1;                /* UsageRejectReason */
+static int hf_h501_accessTokens = -1;             /* SEQUENCE_OF_AccessToken */
+static int hf_h501_accessTokens_item = -1;        /* AccessToken */
+static int hf_h501_senderRole = -1;               /* Role */
+static int hf_h501_usageCallStatus = -1;          /* UsageCallStatus */
+static int hf_h501_srcInfo = -1;                  /* PartyInformation */
+static int hf_h501_destAddress = -1;              /* PartyInformation */
+static int hf_h501_startTime = -1;                /* TimeStamp */
+static int hf_h501_endTime = -1;                  /* TimeStamp */
+static int hf_h501_terminationCause = -1;         /* TerminationCause */
+static int hf_h501_usageFields = -1;              /* SEQUENCE_OF_UsageField */
+static int hf_h501_usageFields_item = -1;         /* UsageField */
+static int hf_h501_id = -1;                       /* OBJECT_IDENTIFIER */
+static int hf_h501_value = -1;                    /* OCTET_STRING */
+static int hf_h501_invalidCall = -1;              /* NULL */
+static int hf_h501_unavailable = -1;              /* NULL */
+static int hf_h501_reason_06 = -1;                /* UsageIndicationRejectionReason */
+static int hf_h501_unknownCall = -1;              /* NULL */
+static int hf_h501_incomplete = -1;               /* NULL */
+static int hf_h501_accessToken = -1;              /* SEQUENCE_OF_AccessToken */
+static int hf_h501_accessToken_item = -1;         /* AccessToken */
+static int hf_h501_reason_07 = -1;                /* ValidationRejectionReason */
+static int hf_h501_tokenNotValid = -1;            /* NULL */
+static int hf_h501_missingSourceInfo = -1;        /* NULL */
+static int hf_h501_missingDestInfo = -1;          /* NULL */
+static int hf_h501_delay = -1;                    /* INTEGER_1_65535 */
+static int hf_h501_reason_08 = -1;                /* NonStandardRejectionReason */
+static int hf_h501_notSupported = -1;             /* NULL */
+static int hf_h501_unknownMessage = -1;           /* OCTET_STRING */
+static int hf_h501_reason_09 = -1;                /* UnknownMessageReason */
+static int hf_h501_notUnderstood = -1;            /* NULL */
+static int hf_h501_applicationMessage = -1;       /* ApplicationMessage */
+static int hf_h501_reason_10 = -1;                /* AuthenticationRejectionReason */
+static int hf_h501_securityWrongSyncTime = -1;    /* NULL */
+static int hf_h501_securityReplay = -1;           /* NULL */
+static int hf_h501_securityWrongGeneralID = -1;   /* NULL */
+static int hf_h501_securityWrongSendersID = -1;   /* NULL */
+static int hf_h501_securityIntegrityFailed = -1;  /* NULL */
+static int hf_h501_securityWrongOID = -1;         /* NULL */
+static int hf_h501_pattern = -1;                  /* SEQUENCE_OF_Pattern */
+static int hf_h501_pattern_item = -1;             /* Pattern */
+static int hf_h501_routeInfo = -1;                /* SEQUENCE_OF_RouteInformation */
+static int hf_h501_routeInfo_item = -1;           /* RouteInformation */
+static int hf_h501_specific = -1;                 /* AliasAddress */
+static int hf_h501_wildcard = -1;                 /* AliasAddress */
+static int hf_h501_range = -1;                    /* T_range */
+static int hf_h501_startOfRange = -1;             /* PartyNumber */
+static int hf_h501_endOfRange = -1;               /* PartyNumber */
+static int hf_h501_messageType = -1;              /* T_messageType */
+static int hf_h501_sendAccessRequest = -1;        /* NULL */
+static int hf_h501_sendSetup = -1;                /* NULL */
+static int hf_h501_nonExistent = -1;              /* NULL */
+static int hf_h501_callSpecific = -1;             /* BOOLEAN */
+static int hf_h501_priceInfo = -1;                /* SEQUENCE_OF_PriceInfoSpec */
+static int hf_h501_priceInfo_item = -1;           /* PriceInfoSpec */
+static int hf_h501_contacts = -1;                 /* SEQUENCE_OF_ContactInformation */
+static int hf_h501_contacts_item = -1;            /* ContactInformation */
+static int hf_h501_type = -1;                     /* EndpointType */
+static int hf_h501_circuitID = -1;                /* CircuitInfo */
+static int hf_h501_supportedCircuits = -1;        /* SEQUENCE_OF_CircuitIdentifier */
+static int hf_h501_supportedCircuits_item = -1;   /* CircuitIdentifier */
+static int hf_h501_transportAddress = -1;         /* AliasAddress */
+static int hf_h501_priority = -1;                 /* INTEGER_0_127 */
+static int hf_h501_transportQoS = -1;             /* TransportQOS */
+static int hf_h501_security_01 = -1;              /* SEQUENCE_OF_SecurityMode */
+static int hf_h501_security_item = -1;            /* SecurityMode */
+static int hf_h501_multipleCalls = -1;            /* BOOLEAN */
+static int hf_h501_currency = -1;                 /* IA5String_SIZE_3 */
+static int hf_h501_currencyScale = -1;            /* INTEGER_M127_127 */
+static int hf_h501_validFrom = -1;                /* GlobalTimeStamp */
+static int hf_h501_validUntil = -1;               /* GlobalTimeStamp */
+static int hf_h501_hoursFrom = -1;                /* IA5String_SIZE_6 */
+static int hf_h501_hoursUntil = -1;               /* IA5String_SIZE_6 */
+static int hf_h501_priceElement = -1;             /* SEQUENCE_OF_PriceElement */
+static int hf_h501_priceElement_item = -1;        /* PriceElement */
+static int hf_h501_priceFormula = -1;             /* IA5String_SIZE_1_2048 */
+static int hf_h501_amount = -1;                   /* INTEGER_0_4294967295 */
+static int hf_h501_quantum = -1;                  /* INTEGER_0_4294967295 */
+static int hf_h501_units = -1;                    /* T_units */
+static int hf_h501_seconds = -1;                  /* NULL */
+static int hf_h501_packets = -1;                  /* NULL */
+static int hf_h501_bytes = -1;                    /* NULL */
+static int hf_h501_initial = -1;                  /* NULL */
+static int hf_h501_minimum = -1;                  /* NULL */
+static int hf_h501_maximum = -1;                  /* NULL */
+static int hf_h501_descriptorInfo_02 = -1;        /* DescriptorInfo */
+static int hf_h501_gatekeeperID = -1;             /* GatekeeperIdentifier */
+static int hf_h501_lastChanged = -1;              /* GlobalTimeStamp */
+static int hf_h501_alternatePE = -1;              /* SEQUENCE_OF_AlternatePE */
+static int hf_h501_alternatePE_item = -1;         /* AlternatePE */
+static int hf_h501_alternateIsPermanent = -1;     /* BOOLEAN */
+static int hf_h501_contactAddress = -1;           /* AliasAddress */
+static int hf_h501_priority_01 = -1;              /* INTEGER_1_127 */
+static int hf_h501_token = -1;                    /* ClearToken */
+static int hf_h501_cryptoToken = -1;              /* CryptoH323Token */
+static int hf_h501_genericData_01 = -1;           /* GenericData */
+static int hf_h501_callIdentifier = -1;           /* CallIdentifier */
+static int hf_h501_conferenceID = -1;             /* ConferenceIdentifier */
+static int hf_h501_preConnect = -1;               /* NULL */
+static int hf_h501_callInProgress = -1;           /* NULL */
+static int hf_h501_callEnded = -1;                /* NULL */
+static int hf_h501_registrationLost = -1;         /* NULL */
+static int hf_h501_userIdentifier = -1;           /* AliasAddress */
+static int hf_h501_userAuthenticator = -1;        /* SEQUENCE_OF_CryptoH323Token */
+static int hf_h501_userAuthenticator_item = -1;   /* CryptoH323Token */
+static int hf_h501_sendTo = -1;                   /* ElementIdentifier */
+static int hf_h501_when = -1;                     /* T_when */
+static int hf_h501_never = -1;                    /* NULL */
+static int hf_h501_start = -1;                    /* NULL */
+static int hf_h501_end = -1;                      /* NULL */
+static int hf_h501_period = -1;                   /* INTEGER_1_65535 */
+static int hf_h501_failures = -1;                 /* NULL */
+static int hf_h501_required = -1;                 /* T_required */
+static int hf_h501_required_item = -1;            /* OBJECT_IDENTIFIER */
+static int hf_h501_preferred = -1;                /* T_preferred */
+static int hf_h501_preferred_item = -1;           /* OBJECT_IDENTIFIER */
+static int hf_h501_sendToPEAddress = -1;          /* AliasAddress */
+static int hf_h501_logicalAddresses = -1;         /* SEQUENCE_OF_AliasAddress */
+static int hf_h501_logicalAddresses_item = -1;    /* AliasAddress */
+static int hf_h501_endpointType = -1;             /* EndpointType */
+static int hf_h501_userInfo = -1;                 /* UserInformation */
+static int hf_h501_timeZone = -1;                 /* TimeZone */
+static int hf_h501_originator = -1;               /* NULL */
+static int hf_h501_destination = -1;              /* NULL */
+static int hf_h501_nonStandardData = -1;          /* NonStandardParameter */
+static int hf_h501_releaseCompleteReason = -1;    /* ReleaseCompleteReason */
+static int hf_h501_causeIE = -1;                  /* INTEGER_1_65535 */
+
+/*--- End of included file: packet-h501-hf.c ---*/
+#line 52 "packet-h501-template.c"
+
+/* Initialize the subtree pointers */
+static int ett_h501 = -1;
+
+/*--- Included file: packet-h501-ett.c ---*/
+#line 1 "packet-h501-ett.c"
+static gint ett_h501_Message = -1;
+static gint ett_h501_MessageBody = -1;
+static gint ett_h501_MessageCommonInfo = -1;
+static gint ett_h501_SEQUENCE_OF_TransportAddress = -1;
+static gint ett_h501_SEQUENCE_OF_ClearToken = -1;
+static gint ett_h501_SEQUENCE_OF_CryptoH323Token = -1;
+static gint ett_h501_SEQUENCE_OF_NonStandardParameter = -1;
+static gint ett_h501_SEQUENCE_OF_GenericData = -1;
+static gint ett_h501_ServiceRequest = -1;
+static gint ett_h501_SEQUENCE_OF_SecurityMode = -1;
+static gint ett_h501_SecurityMode = -1;
+static gint ett_h501_T_algorithmOIDs = -1;
+static gint ett_h501_ServiceConfirmation = -1;
+static gint ett_h501_ServiceRejection = -1;
+static gint ett_h501_ServiceRejectionReason = -1;
+static gint ett_h501_ServiceRelease = -1;
+static gint ett_h501_ServiceReleaseReason = -1;
+static gint ett_h501_DescriptorRequest = -1;
+static gint ett_h501_SEQUENCE_OF_DescriptorID = -1;
+static gint ett_h501_DescriptorConfirmation = -1;
+static gint ett_h501_SEQUENCE_OF_Descriptor = -1;
+static gint ett_h501_DescriptorRejection = -1;
+static gint ett_h501_DescriptorRejectionReason = -1;
+static gint ett_h501_DescriptorIDRequest = -1;
+static gint ett_h501_DescriptorIDConfirmation = -1;
+static gint ett_h501_SEQUENCE_OF_DescriptorInfo = -1;
+static gint ett_h501_DescriptorIDRejection = -1;
+static gint ett_h501_DescriptorIDRejectionReason = -1;
+static gint ett_h501_DescriptorUpdate = -1;
+static gint ett_h501_SEQUENCE_OF_UpdateInformation = -1;
+static gint ett_h501_UpdateInformation = -1;
+static gint ett_h501_T_descriptorInfo = -1;
+static gint ett_h501_T_updateType = -1;
+static gint ett_h501_DescriptorUpdateAck = -1;
+static gint ett_h501_AccessRequest = -1;
+static gint ett_h501_SEQUENCE_OF_SupportedProtocols = -1;
+static gint ett_h501_AccessConfirmation = -1;
+static gint ett_h501_SEQUENCE_OF_AddressTemplate = -1;
+static gint ett_h501_SEQUENCE_OF_ServiceControlSession = -1;
+static gint ett_h501_AccessRejection = -1;
+static gint ett_h501_AccessRejectionReason = -1;
+static gint ett_h501_UsageRequest = -1;
+static gint ett_h501_UsageConfirmation = -1;
+static gint ett_h501_UsageRejection = -1;
+static gint ett_h501_UsageIndication = -1;
+static gint ett_h501_SEQUENCE_OF_AccessToken = -1;
+static gint ett_h501_SEQUENCE_OF_UsageField = -1;
+static gint ett_h501_UsageField = -1;
+static gint ett_h501_UsageRejectReason = -1;
+static gint ett_h501_UsageIndicationConfirmation = -1;
+static gint ett_h501_UsageIndicationRejection = -1;
+static gint ett_h501_UsageIndicationRejectionReason = -1;
+static gint ett_h501_ValidationRequest = -1;
+static gint ett_h501_ValidationConfirmation = -1;
+static gint ett_h501_ValidationRejection = -1;
+static gint ett_h501_ValidationRejectionReason = -1;
+static gint ett_h501_RequestInProgress = -1;
+static gint ett_h501_NonStandardRequest = -1;
+static gint ett_h501_NonStandardConfirmation = -1;
+static gint ett_h501_NonStandardRejection = -1;
+static gint ett_h501_NonStandardRejectionReason = -1;
+static gint ett_h501_UnknownMessageResponse = -1;
+static gint ett_h501_UnknownMessageReason = -1;
+static gint ett_h501_AuthenticationRequest = -1;
+static gint ett_h501_AuthenticationConfirmation = -1;
+static gint ett_h501_AuthenticationRejection = -1;
+static gint ett_h501_AuthenticationRejectionReason = -1;
+static gint ett_h501_AddressTemplate = -1;
+static gint ett_h501_SEQUENCE_OF_Pattern = -1;
+static gint ett_h501_SEQUENCE_OF_RouteInformation = -1;
+static gint ett_h501_Pattern = -1;
+static gint ett_h501_T_range = -1;
+static gint ett_h501_RouteInformation = -1;
+static gint ett_h501_T_messageType = -1;
+static gint ett_h501_SEQUENCE_OF_PriceInfoSpec = -1;
+static gint ett_h501_SEQUENCE_OF_ContactInformation = -1;
+static gint ett_h501_SEQUENCE_OF_CircuitIdentifier = -1;
+static gint ett_h501_ContactInformation = -1;
+static gint ett_h501_PriceInfoSpec = -1;
+static gint ett_h501_SEQUENCE_OF_PriceElement = -1;
+static gint ett_h501_PriceElement = -1;
+static gint ett_h501_T_units = -1;
+static gint ett_h501_Descriptor = -1;
+static gint ett_h501_DescriptorInfo = -1;
+static gint ett_h501_AlternatePEInfo = -1;
+static gint ett_h501_SEQUENCE_OF_AlternatePE = -1;
+static gint ett_h501_AlternatePE = -1;
+static gint ett_h501_AccessToken = -1;
+static gint ett_h501_CallInformation = -1;
+static gint ett_h501_UsageCallStatus = -1;
+static gint ett_h501_UserInformation = -1;
+static gint ett_h501_UsageSpecification = -1;
+static gint ett_h501_T_when = -1;
+static gint ett_h501_T_required = -1;
+static gint ett_h501_T_preferred = -1;
+static gint ett_h501_PartyInformation = -1;
+static gint ett_h501_SEQUENCE_OF_AliasAddress = -1;
+static gint ett_h501_Role = -1;
+static gint ett_h501_TerminationCause = -1;
+
+/*--- End of included file: packet-h501-ett.c ---*/
+#line 56 "packet-h501-template.c"
+
+/* Dissectors */
+static dissector_handle_t h501_pdu_handle = NULL;
+static dissector_handle_t h501_udp_handle = NULL;
+static dissector_handle_t h501_tcp_handle = NULL;
+
+/* Preferences */
+static guint h501_udp_port = 2099;
+static guint h501_tcp_port = 2099;
+static gboolean h501_desegment_tcp = TRUE;
+
+/* Gloabl variables */
+static guint saved_h501_udp_port;
+static guint saved_h501_tcp_port;
+
+void proto_reg_handoff_h501(void);
+
+
+/*--- Included file: packet-h501-fn.c ---*/
+#line 1 "packet-h501-fn.c"
+
+
+static int
+dissect_h501_ElementIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_BMPString(tvb, offset, actx, tree, hf_index,
+                                          1, 128);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t T_algorithmOIDs_sequence_of[1] = {
+  { &hf_h501_algorithmOIDs_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_OBJECT_IDENTIFIER },
+};
+
+static int
+dissect_h501_T_algorithmOIDs(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_T_algorithmOIDs, T_algorithmOIDs_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t SecurityMode_sequence[] = {
+  { &hf_h501_authentication , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h235_AuthenticationMechanism },
+  { &hf_h501_integrity      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_IntegrityMechanism },
+  { &hf_h501_algorithmOIDs  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_T_algorithmOIDs },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_SecurityMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_SecurityMode, SecurityMode_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_SecurityMode_sequence_of[1] = {
+  { &hf_h501_securityMode_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_SecurityMode },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_SecurityMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_SecurityMode, SEQUENCE_OF_SecurityMode_sequence_of);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_1_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              1U, 4294967295U, NULL, FALSE);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_1_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              1U, 65535U, NULL, FALSE);
+
+  return offset;
+}
+
+
+static const per_sequence_t T_when_sequence[] = {
+  { &hf_h501_never          , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_NULL },
+  { &hf_h501_start          , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_NULL },
+  { &hf_h501_end            , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_NULL },
+  { &hf_h501_period         , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_INTEGER_1_65535 },
+  { &hf_h501_failures       , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_NULL },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_T_when(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_T_when, T_when_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t T_required_sequence_of[1] = {
+  { &hf_h501_required_item  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_OBJECT_IDENTIFIER },
+};
+
+static int
+dissect_h501_T_required(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_T_required, T_required_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t T_preferred_sequence_of[1] = {
+  { &hf_h501_preferred_item , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_OBJECT_IDENTIFIER },
+};
+
+static int
+dissect_h501_T_preferred(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_T_preferred, T_preferred_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageSpecification_sequence[] = {
+  { &hf_h501_sendTo         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_ElementIdentifier },
+  { &hf_h501_when           , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_T_when },
+  { &hf_h501_required       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_T_required },
+  { &hf_h501_preferred      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_T_preferred },
+  { &hf_h501_sendToPEAddress, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_AliasAddress },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageSpecification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageSpecification, UsageSpecification_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t ServiceRequest_sequence[] = {
+  { &hf_h501_elementIdentifier, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_ElementIdentifier },
+  { &hf_h501_domainIdentifier, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_AliasAddress },
+  { &hf_h501_securityMode   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_SecurityMode },
+  { &hf_h501_timeToLive     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_INTEGER_1_4294967295 },
+  { &hf_h501_usageSpec      , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_UsageSpecification },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ServiceRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ServiceRequest, ServiceRequest_sequence);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_1_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              1U, 127U, NULL, FALSE);
+
+  return offset;
+}
+
+
+static const per_sequence_t AlternatePE_sequence[] = {
+  { &hf_h501_contactAddress , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+  { &hf_h501_priority_01    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_1_127 },
+  { &hf_h501_elementIdentifier, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_ElementIdentifier },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AlternatePE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AlternatePE, AlternatePE_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_AlternatePE_sequence_of[1] = {
+  { &hf_h501_alternatePE_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_AlternatePE },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_AlternatePE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_AlternatePE, SEQUENCE_OF_AlternatePE_sequence_of);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t AlternatePEInfo_sequence[] = {
+  { &hf_h501_alternatePE    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_AlternatePE },
+  { &hf_h501_alternateIsPermanent, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_BOOLEAN },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AlternatePEInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AlternatePEInfo, AlternatePEInfo_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t ServiceConfirmation_sequence[] = {
+  { &hf_h501_elementIdentifier, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_ElementIdentifier },
+  { &hf_h501_domainIdentifier, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+  { &hf_h501_alternates     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_AlternatePEInfo },
+  { &hf_h501_securityMode_01, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SecurityMode },
+  { &hf_h501_timeToLive     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_INTEGER_1_4294967295 },
+  { &hf_h501_usageSpec      , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_UsageSpecification },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ServiceConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ServiceConfirmation, ServiceConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_ServiceRejectionReason_vals[] = {
+  {   0, "serviceUnavailable" },
+  {   1, "serviceRedirected" },
+  {   2, "security" },
+  {   3, "continue" },
+  {   4, "undefined" },
+  {   5, "unknownServiceID" },
+  {   6, "cannotSupportUsageSpec" },
+  {   7, "neededFeature" },
+  {   8, "genericDataReason" },
+  {   9, "usageUnavailable" },
+  {  10, "unknownUsageSendTo" },
+  { 0, NULL }
+};
+
+static const per_choice_t ServiceRejectionReason_choice[] = {
+  {   0, &hf_h501_serviceUnavailable, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_serviceRedirected, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_continue       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   6, &hf_h501_cannotSupportUsageSpec, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   7, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   8, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   9, &hf_h501_usageUnavailable, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  10, &hf_h501_unknownUsageSendTo, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_ServiceRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_ServiceRejectionReason, ServiceRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t ServiceRejection_sequence[] = {
+  { &hf_h501_reason         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_ServiceRejectionReason },
+  { &hf_h501_alternates     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_AlternatePEInfo },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ServiceRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ServiceRejection, ServiceRejection_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_ServiceReleaseReason_vals[] = {
+  {   0, "outOfService" },
+  {   1, "maintenance" },
+  {   2, "terminated" },
+  {   3, "expired" },
+  { 0, NULL }
+};
+
+static const per_choice_t ServiceReleaseReason_choice[] = {
+  {   0, &hf_h501_outOfService   , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_maintenance    , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_terminated     , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_expired        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_ServiceReleaseReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_ServiceReleaseReason, ServiceReleaseReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t ServiceRelease_sequence[] = {
+  { &hf_h501_reason_01      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_ServiceReleaseReason },
+  { &hf_h501_alternates     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_AlternatePEInfo },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ServiceRelease(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ServiceRelease, ServiceRelease_sequence);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_DescriptorID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_h225_GloballyUniqueID(tvb, offset, actx, tree, hf_index);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_DescriptorID_sequence_of[1] = {
+  { &hf_h501_descriptorID_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_DescriptorID },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_DescriptorID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_DescriptorID, SEQUENCE_OF_DescriptorID_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorRequest_sequence[] = {
+  { &hf_h501_descriptorID   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_DescriptorID },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorRequest, DescriptorRequest_sequence);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_GlobalTimeStamp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+                                          14, 14);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorInfo_sequence[] = {
+  { &hf_h501_descriptorID_01, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_DescriptorID },
+  { &hf_h501_lastChanged    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_GlobalTimeStamp },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorInfo, DescriptorInfo_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t T_range_sequence[] = {
+  { &hf_h501_startOfRange   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_PartyNumber },
+  { &hf_h501_endOfRange     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_PartyNumber },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_T_range(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_T_range, T_range_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_Pattern_vals[] = {
+  {   0, "specific" },
+  {   1, "wildcard" },
+  {   2, "range" },
+  { 0, NULL }
+};
+
+static const per_choice_t Pattern_choice[] = {
+  {   0, &hf_h501_specific       , ASN1_EXTENSION_ROOT    , dissect_h225_AliasAddress },
+  {   1, &hf_h501_wildcard       , ASN1_EXTENSION_ROOT    , dissect_h225_AliasAddress },
+  {   2, &hf_h501_range          , ASN1_EXTENSION_ROOT    , dissect_h501_T_range },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_Pattern(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_Pattern, Pattern_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_Pattern_sequence_of[1] = {
+  { &hf_h501_pattern_item   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_Pattern },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_Pattern(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_Pattern, SEQUENCE_OF_Pattern_sequence_of);
+
+  return offset;
+}
+
+
+static const value_string h501_T_messageType_vals[] = {
+  {   0, "sendAccessRequest" },
+  {   1, "sendSetup" },
+  {   2, "nonExistent" },
+  { 0, NULL }
+};
+
+static const per_choice_t T_messageType_choice[] = {
+  {   0, &hf_h501_sendAccessRequest, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_sendSetup      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_nonExistent    , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_T_messageType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_T_messageType, T_messageType_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_IA5String_SIZE_3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+                                          3, 3);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_M127_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              -127, 127U, NULL, FALSE);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_IA5String_SIZE_6(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+                                          6, 6);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              0U, 4294967295U, NULL, FALSE);
+
+  return offset;
+}
+
+
+static const value_string h501_T_units_vals[] = {
+  {   0, "seconds" },
+  {   1, "packets" },
+  {   2, "bytes" },
+  {   3, "initial" },
+  {   4, "minimum" },
+  {   5, "maximum" },
+  { 0, NULL }
+};
+
+static const per_choice_t T_units_choice[] = {
+  {   0, &hf_h501_seconds        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_packets        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_bytes          , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_initial        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_minimum        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_maximum        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_T_units(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_T_units, T_units_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t PriceElement_sequence[] = {
+  { &hf_h501_amount         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_0_4294967295 },
+  { &hf_h501_quantum        , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_0_4294967295 },
+  { &hf_h501_units          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_T_units },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_PriceElement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_PriceElement, PriceElement_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_PriceElement_sequence_of[1] = {
+  { &hf_h501_priceElement_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_PriceElement },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_PriceElement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_PriceElement, SEQUENCE_OF_PriceElement_sequence_of);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_IA5String_SIZE_1_2048(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+                                          1, 2048);
+
+  return offset;
+}
+
+
+static const per_sequence_t PriceInfoSpec_sequence[] = {
+  { &hf_h501_currency       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_IA5String_SIZE_3 },
+  { &hf_h501_currencyScale  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_M127_127 },
+  { &hf_h501_validFrom      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_GlobalTimeStamp },
+  { &hf_h501_validUntil     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_GlobalTimeStamp },
+  { &hf_h501_hoursFrom      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_IA5String_SIZE_6 },
+  { &hf_h501_hoursUntil     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_IA5String_SIZE_6 },
+  { &hf_h501_priceElement   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_PriceElement },
+  { &hf_h501_priceFormula   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_IA5String_SIZE_1_2048 },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_PriceInfoSpec(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_PriceInfoSpec, PriceInfoSpec_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_PriceInfoSpec_sequence_of[1] = {
+  { &hf_h501_priceInfo_item , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_PriceInfoSpec },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_PriceInfoSpec(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_PriceInfoSpec, SEQUENCE_OF_PriceInfoSpec_sequence_of);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_0_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              0U, 127U, NULL, FALSE);
+
+  return offset;
+}
+
+
+static const value_string h501_AccessToken_vals[] = {
+  {   0, "token" },
+  {   1, "cryptoToken" },
+  {   2, "genericData" },
+  { 0, NULL }
+};
+
+static const per_choice_t AccessToken_choice[] = {
+  {   0, &hf_h501_token          , ASN1_EXTENSION_ROOT    , dissect_h235_ClearToken },
+  {   1, &hf_h501_cryptoToken    , ASN1_EXTENSION_ROOT    , dissect_h225_CryptoH323Token },
+  {   2, &hf_h501_genericData_01 , ASN1_NOT_EXTENSION_ROOT, dissect_h225_GenericData },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_AccessToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_AccessToken, AccessToken_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_AccessToken_sequence_of[1] = {
+  { &hf_h501_accessTokens_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_AccessToken },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_AccessToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_AccessToken, SEQUENCE_OF_AccessToken_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_CircuitIdentifier_sequence_of[1] = {
+  { &hf_h501_supportedCircuits_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_CircuitIdentifier },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_CircuitIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_CircuitIdentifier, SEQUENCE_OF_CircuitIdentifier_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t ContactInformation_sequence[] = {
+  { &hf_h501_transportAddress, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+  { &hf_h501_priority       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_0_127 },
+  { &hf_h501_transportQoS   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_TransportQOS },
+  { &hf_h501_security_01    , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_SecurityMode },
+  { &hf_h501_accessTokens   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_AccessToken },
+  { &hf_h501_multipleCalls  , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_BOOLEAN },
+  { &hf_h501_featureSet     , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_FeatureSet },
+  { &hf_h501_circuitID      , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_CircuitInfo },
+  { &hf_h501_supportedCircuits, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_CircuitIdentifier },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ContactInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ContactInformation, ContactInformation_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_ContactInformation_sequence_of[1] = {
+  { &hf_h501_contacts_item  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_ContactInformation },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_ContactInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_ContactInformation, SEQUENCE_OF_ContactInformation_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t RouteInformation_sequence[] = {
+  { &hf_h501_messageType    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_T_messageType },
+  { &hf_h501_callSpecific   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_BOOLEAN },
+  { &hf_h501_usageSpec      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_UsageSpecification },
+  { &hf_h501_priceInfo      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_PriceInfoSpec },
+  { &hf_h501_contacts       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_ContactInformation },
+  { &hf_h501_type           , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_EndpointType },
+  { &hf_h501_featureSet     , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_FeatureSet },
+  { &hf_h501_circuitID      , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_CircuitInfo },
+  { &hf_h501_supportedCircuits, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_CircuitIdentifier },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_RouteInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_RouteInformation, RouteInformation_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_RouteInformation_sequence_of[1] = {
+  { &hf_h501_routeInfo_item , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_RouteInformation },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_RouteInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_RouteInformation, SEQUENCE_OF_RouteInformation_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_SupportedProtocols_sequence_of[1] = {
+  { &hf_h501_desiredProtocols_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_SupportedProtocols },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_SupportedProtocols(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_SupportedProtocols, SEQUENCE_OF_SupportedProtocols_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t AddressTemplate_sequence[] = {
+  { &hf_h501_pattern        , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_Pattern },
+  { &hf_h501_routeInfo      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_RouteInformation },
+  { &hf_h501_timeToLive     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_1_4294967295 },
+  { &hf_h501_supportedProtocols, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_SupportedProtocols },
+  { &hf_h501_featureSet     , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_FeatureSet },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AddressTemplate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AddressTemplate, AddressTemplate_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_AddressTemplate_sequence_of[1] = {
+  { &hf_h501_templates_item , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_AddressTemplate },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_AddressTemplate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_AddressTemplate, SEQUENCE_OF_AddressTemplate_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t Descriptor_sequence[] = {
+  { &hf_h501_descriptorInfo_02, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_DescriptorInfo },
+  { &hf_h501_templates      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_AddressTemplate },
+  { &hf_h501_gatekeeperID   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_GatekeeperIdentifier },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_Descriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_Descriptor, Descriptor_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_Descriptor_sequence_of[1] = {
+  { &hf_h501_descriptor_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_Descriptor },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_Descriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_Descriptor, SEQUENCE_OF_Descriptor_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorConfirmation_sequence[] = {
+  { &hf_h501_descriptor     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_Descriptor },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorConfirmation, DescriptorConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_DescriptorRejectionReason_vals[] = {
+  {   0, "packetSizeExceeded" },
+  {   1, "illegalID" },
+  {   2, "security" },
+  {   3, "hopCountExceeded" },
+  {   4, "noServiceRelationship" },
+  {   5, "undefined" },
+  {   6, "neededFeature" },
+  {   7, "genericDataReason" },
+  {   8, "unknownServiceID" },
+  { 0, NULL }
+};
+
+static const per_choice_t DescriptorRejectionReason_choice[] = {
+  {   0, &hf_h501_packetSizeExceeded, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_illegalID      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_hopCountExceeded, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   6, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   7, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   8, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_DescriptorRejectionReason, DescriptorRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorRejection_sequence[] = {
+  { &hf_h501_reason_02      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_DescriptorRejectionReason },
+  { &hf_h501_descriptorID_01, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_DescriptorID },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorRejection, DescriptorRejection_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorIDRequest_sequence[] = {
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorIDRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorIDRequest, DescriptorIDRequest_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_DescriptorInfo_sequence_of[1] = {
+  { &hf_h501_descriptorInfo_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_DescriptorInfo },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_DescriptorInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_DescriptorInfo, SEQUENCE_OF_DescriptorInfo_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorIDConfirmation_sequence[] = {
+  { &hf_h501_descriptorInfo , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_DescriptorInfo },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorIDConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorIDConfirmation, DescriptorIDConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_DescriptorIDRejectionReason_vals[] = {
+  {   0, "noDescriptors" },
+  {   1, "security" },
+  {   2, "hopCountExceeded" },
+  {   3, "noServiceRelationship" },
+  {   4, "undefined" },
+  {   5, "neededFeature" },
+  {   6, "genericDataReason" },
+  {   7, "unknownServiceID" },
+  { 0, NULL }
+};
+
+static const per_choice_t DescriptorIDRejectionReason_choice[] = {
+  {   0, &hf_h501_noDescriptors  , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_hopCountExceeded, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   6, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   7, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorIDRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_DescriptorIDRejectionReason, DescriptorIDRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorIDRejection_sequence[] = {
+  { &hf_h501_reason_03      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_DescriptorIDRejectionReason },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorIDRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorIDRejection, DescriptorIDRejection_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_T_descriptorInfo_vals[] = {
+  {   0, "descriptorID" },
+  {   1, "descriptor" },
+  { 0, NULL }
+};
+
+static const per_choice_t T_descriptorInfo_choice[] = {
+  {   0, &hf_h501_descriptorID_01, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorID },
+  {   1, &hf_h501_descriptor_01  , ASN1_EXTENSION_ROOT    , dissect_h501_Descriptor },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_T_descriptorInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_T_descriptorInfo, T_descriptorInfo_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const value_string h501_T_updateType_vals[] = {
+  {   0, "added" },
+  {   1, "deleted" },
+  {   2, "changed" },
+  { 0, NULL }
+};
+
+static const per_choice_t T_updateType_choice[] = {
+  {   0, &hf_h501_added          , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_deleted        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_changed        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_T_updateType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_T_updateType, T_updateType_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t UpdateInformation_sequence[] = {
+  { &hf_h501_descriptorInfo_01, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_T_descriptorInfo },
+  { &hf_h501_updateType     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_T_updateType },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UpdateInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UpdateInformation, UpdateInformation_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_UpdateInformation_sequence_of[1] = {
+  { &hf_h501_updateInfo_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_UpdateInformation },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_UpdateInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_UpdateInformation, SEQUENCE_OF_UpdateInformation_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorUpdate_sequence[] = {
+  { &hf_h501_sender         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+  { &hf_h501_updateInfo     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_UpdateInformation },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorUpdate, DescriptorUpdate_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t DescriptorUpdateAck_sequence[] = {
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_DescriptorUpdateAck(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_DescriptorUpdateAck, DescriptorUpdateAck_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_AliasAddress_sequence_of[1] = {
+  { &hf_h501_logicalAddresses_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_AliasAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_AliasAddress, SEQUENCE_OF_AliasAddress_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_CryptoH323Token_sequence_of[1] = {
+  { &hf_h501_cryptoTokens_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_CryptoH323Token },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_CryptoH323Token(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_CryptoH323Token, SEQUENCE_OF_CryptoH323Token_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t UserInformation_sequence[] = {
+  { &hf_h501_userIdentifier , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+  { &hf_h501_userAuthenticator, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_CryptoH323Token },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UserInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UserInformation, UserInformation_sequence);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_TimeZone(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              -43200, 43200U, NULL, FALSE);
+
+  return offset;
+}
+
+
+static const per_sequence_t PartyInformation_sequence[] = {
+  { &hf_h501_logicalAddresses, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_AliasAddress },
+  { &hf_h501_domainIdentifier, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_AliasAddress },
+  { &hf_h501_transportAddress, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_AliasAddress },
+  { &hf_h501_endpointType   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_EndpointType },
+  { &hf_h501_userInfo       , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_UserInformation },
+  { &hf_h501_timeZone       , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_TimeZone },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_PartyInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_PartyInformation, PartyInformation_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t CallInformation_sequence[] = {
+  { &hf_h501_callIdentifier , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier },
+  { &hf_h501_conferenceID   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_ConferenceIdentifier },
+  { &hf_h501_circuitID      , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_CircuitInfo },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_CallInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_CallInformation, CallInformation_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t AccessRequest_sequence[] = {
+  { &hf_h501_destinationInfo, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_PartyInformation },
+  { &hf_h501_sourceInfo     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_PartyInformation },
+  { &hf_h501_callInfo       , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_CallInformation },
+  { &hf_h501_usageSpec      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_UsageSpecification },
+  { &hf_h501_desiredProtocols, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_SupportedProtocols },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AccessRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AccessRequest, AccessRequest_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_ServiceControlSession_sequence_of[1] = {
+  { &hf_h501_serviceControl_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_ServiceControlSession },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_ServiceControlSession(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_ServiceControlSession, SEQUENCE_OF_ServiceControlSession_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t AccessConfirmation_sequence[] = {
+  { &hf_h501_templates      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_AddressTemplate },
+  { &hf_h501_partialResponse, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_BOOLEAN },
+  { &hf_h501_supportedProtocols, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_SupportedProtocols },
+  { &hf_h501_serviceControl , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_ServiceControlSession },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AccessConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AccessConfirmation, AccessConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_AccessRejectionReason_vals[] = {
+  {   0, "noMatch" },
+  {   1, "packetSizeExceeded" },
+  {   2, "security" },
+  {   3, "hopCountExceeded" },
+  {   4, "needCallInformation" },
+  {   5, "noServiceRelationship" },
+  {   6, "undefined" },
+  {   7, "neededFeature" },
+  {   8, "genericDataReason" },
+  {   9, "destinationUnavailable" },
+  {  10, "aliasesInconsistent" },
+  {  11, "resourceUnavailable" },
+  {  12, "incompleteAddress" },
+  {  13, "unknownServiceID" },
+  {  14, "usageUnavailable" },
+  {  15, "cannotSupportUsageSpec" },
+  {  16, "unknownUsageSendTo" },
+  { 0, NULL }
+};
+
+static const per_choice_t AccessRejectionReason_choice[] = {
+  {   0, &hf_h501_noMatch        , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_packetSizeExceeded, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_hopCountExceeded, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_needCallInformation, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   6, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   7, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   8, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   9, &hf_h501_destinationUnavailable, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  10, &hf_h501_aliasesInconsistent, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  11, &hf_h501_resourceUnavailable, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  12, &hf_h501_incompleteAddress, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  13, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  14, &hf_h501_usageUnavailable, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  15, &hf_h501_cannotSupportUsageSpec, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {  16, &hf_h501_unknownUsageSendTo, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_AccessRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_AccessRejectionReason, AccessRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t AccessRejection_sequence[] = {
+  { &hf_h501_reason_04      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_AccessRejectionReason },
+  { &hf_h501_serviceControl , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_ServiceControlSession },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AccessRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AccessRejection, AccessRejection_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t RequestInProgress_sequence[] = {
+  { &hf_h501_delay          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_1_65535 },
+  { &hf_h501_serviceControl , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_ServiceControlSession },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_RequestInProgress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_RequestInProgress, RequestInProgress_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t NonStandardRequest_sequence[] = {
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_NonStandardRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_NonStandardRequest, NonStandardRequest_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t NonStandardConfirmation_sequence[] = {
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_NonStandardConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_NonStandardConfirmation, NonStandardConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_NonStandardRejectionReason_vals[] = {
+  {   0, "notSupported" },
+  {   1, "noServiceRelationship" },
+  {   2, "undefined" },
+  {   3, "neededFeature" },
+  {   4, "genericDataReason" },
+  {   5, "unknownServiceID" },
+  { 0, NULL }
+};
+
+static const per_choice_t NonStandardRejectionReason_choice[] = {
+  {   0, &hf_h501_notSupported   , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   4, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   5, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_NonStandardRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_NonStandardRejectionReason, NonStandardRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t NonStandardRejection_sequence[] = {
+  { &hf_h501_reason_08      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_NonStandardRejectionReason },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_NonStandardRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_NonStandardRejection, NonStandardRejection_sequence);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+                                       NO_BOUND, NO_BOUND, NULL);
+
+  return offset;
+}
+
+
+static const value_string h501_UnknownMessageReason_vals[] = {
+  {   0, "notUnderstood" },
+  {   1, "undefined" },
+  { 0, NULL }
+};
+
+static const per_choice_t UnknownMessageReason_choice[] = {
+  {   0, &hf_h501_notUnderstood  , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_UnknownMessageReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_UnknownMessageReason, UnknownMessageReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t UnknownMessageResponse_sequence[] = {
+  { &hf_h501_unknownMessage , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_OCTET_STRING },
+  { &hf_h501_reason_09      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_UnknownMessageReason },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UnknownMessageResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UnknownMessageResponse, UnknownMessageResponse_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageRequest_sequence[] = {
+  { &hf_h501_callInfo       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_CallInformation },
+  { &hf_h501_usageSpec      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_UsageSpecification },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageRequest, UsageRequest_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageConfirmation_sequence[] = {
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageConfirmation, UsageConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_Role_vals[] = {
+  {   0, "originator" },
+  {   1, "destination" },
+  {   2, "nonStandardData" },
+  { 0, NULL }
+};
+
+static const per_choice_t Role_choice[] = {
+  {   0, &hf_h501_originator     , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_destination    , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_nonStandardData, ASN1_EXTENSION_ROOT    , dissect_h225_NonStandardParameter },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_Role(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_Role, Role_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const value_string h501_UsageCallStatus_vals[] = {
+  {   0, "preConnect" },
+  {   1, "callInProgress" },
+  {   2, "callEnded" },
+  {   3, "registrationLost" },
+  { 0, NULL }
+};
+
+static const per_choice_t UsageCallStatus_choice[] = {
+  {   0, &hf_h501_preConnect     , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_callInProgress , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_callEnded      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_registrationLost, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_UsageCallStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_UsageCallStatus, UsageCallStatus_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t TerminationCause_sequence[] = {
+  { &hf_h501_releaseCompleteReason, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_ReleaseCompleteReason },
+  { &hf_h501_causeIE        , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_INTEGER_1_65535 },
+  { &hf_h501_nonStandardData, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_NonStandardParameter },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_TerminationCause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_TerminationCause, TerminationCause_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageField_sequence[] = {
+  { &hf_h501_id             , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_OBJECT_IDENTIFIER },
+  { &hf_h501_value          , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_OCTET_STRING },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageField(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageField, UsageField_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_UsageField_sequence_of[1] = {
+  { &hf_h501_usageFields_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h501_UsageField },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_UsageField(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_UsageField, SEQUENCE_OF_UsageField_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageIndication_sequence[] = {
+  { &hf_h501_callInfo       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_CallInformation },
+  { &hf_h501_accessTokens   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_AccessToken },
+  { &hf_h501_senderRole     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_Role },
+  { &hf_h501_usageCallStatus, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_UsageCallStatus },
+  { &hf_h501_srcInfo        , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_PartyInformation },
+  { &hf_h501_destAddress    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_PartyInformation },
+  { &hf_h501_startTime      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h235_TimeStamp },
+  { &hf_h501_endTime        , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h235_TimeStamp },
+  { &hf_h501_terminationCause, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_TerminationCause },
+  { &hf_h501_usageFields    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_SEQUENCE_OF_UsageField },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageIndication, UsageIndication_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageIndicationConfirmation_sequence[] = {
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageIndicationConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageIndicationConfirmation, UsageIndicationConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_UsageIndicationRejectionReason_vals[] = {
+  {   0, "unknownCall" },
+  {   1, "incomplete" },
+  {   2, "security" },
+  {   3, "noServiceRelationship" },
+  {   4, "undefined" },
+  {   5, "neededFeature" },
+  {   6, "genericDataReason" },
+  {   7, "unknownServiceID" },
+  { 0, NULL }
+};
+
+static const per_choice_t UsageIndicationRejectionReason_choice[] = {
+  {   0, &hf_h501_unknownCall    , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_incomplete     , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   6, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   7, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_UsageIndicationRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_UsageIndicationRejectionReason, UsageIndicationRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageIndicationRejection_sequence[] = {
+  { &hf_h501_reason_06      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_UsageIndicationRejectionReason },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageIndicationRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageIndicationRejection, UsageIndicationRejection_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_UsageRejectReason_vals[] = {
+  {   0, "invalidCall" },
+  {   1, "unavailable" },
+  {   2, "security" },
+  {   3, "noServiceRelationship" },
+  {   4, "undefined" },
+  {   5, "neededFeature" },
+  {   6, "genericDataReason" },
+  {   7, "unknownServiceID" },
+  { 0, NULL }
+};
+
+static const per_choice_t UsageRejectReason_choice[] = {
+  {   0, &hf_h501_invalidCall    , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_unavailable    , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   6, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   7, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_UsageRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_UsageRejectReason, UsageRejectReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t UsageRejection_sequence[] = {
+  { &hf_h501_reason_05      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_UsageRejectReason },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_UsageRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_UsageRejection, UsageRejection_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t ValidationRequest_sequence[] = {
+  { &hf_h501_accessToken    , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_AccessToken },
+  { &hf_h501_destinationInfo, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_PartyInformation },
+  { &hf_h501_sourceInfo     , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_PartyInformation },
+  { &hf_h501_callInfo       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_CallInformation },
+  { &hf_h501_usageSpec      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_UsageSpecification },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ValidationRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ValidationRequest, ValidationRequest_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t ValidationConfirmation_sequence[] = {
+  { &hf_h501_destinationInfo, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_PartyInformation },
+  { &hf_h501_usageSpec      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_UsageSpecification },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ValidationConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ValidationConfirmation, ValidationConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_ValidationRejectionReason_vals[] = {
+  {   0, "tokenNotValid" },
+  {   1, "security" },
+  {   2, "hopCountExceeded" },
+  {   3, "missingSourceInfo" },
+  {   4, "missingDestInfo" },
+  {   5, "noServiceRelationship" },
+  {   6, "undefined" },
+  {   7, "neededFeature" },
+  {   8, "genericDataReason" },
+  {   9, "unknownServiceID" },
+  { 0, NULL }
+};
+
+static const per_choice_t ValidationRejectionReason_choice[] = {
+  {   0, &hf_h501_tokenNotValid  , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_hopCountExceeded, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_missingSourceInfo, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_missingDestInfo, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   6, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   7, &hf_h501_neededFeature  , ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   8, &hf_h501_genericDataReason, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  {   9, &hf_h501_unknownServiceID, ASN1_NOT_EXTENSION_ROOT, dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_ValidationRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_ValidationRejectionReason, ValidationRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t ValidationRejection_sequence[] = {
+  { &hf_h501_reason_07      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_ValidationRejectionReason },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_ValidationRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_ValidationRejection, ValidationRejection_sequence);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_ApplicationMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+                                       NO_BOUND, NO_BOUND, NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t AuthenticationRequest_sequence[] = {
+  { &hf_h501_applicationMessage, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_ApplicationMessage },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AuthenticationRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AuthenticationRequest, AuthenticationRequest_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t AuthenticationConfirmation_sequence[] = {
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AuthenticationConfirmation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AuthenticationConfirmation, AuthenticationConfirmation_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_AuthenticationRejectionReason_vals[] = {
+  {   0, "security" },
+  {   1, "hopCountExceeded" },
+  {   2, "noServiceRelationship" },
+  {   3, "undefined" },
+  {   4, "neededFeature" },
+  {   5, "genericDataReason" },
+  {   6, "unknownServiceID" },
+  {   7, "securityWrongSyncTime" },
+  {   8, "securityReplay" },
+  {   9, "securityWrongGeneralID" },
+  {  10, "securityWrongSendersID" },
+  {  11, "securityIntegrityFailed" },
+  {  12, "securityWrongOID" },
+  { 0, NULL }
+};
+
+static const per_choice_t AuthenticationRejectionReason_choice[] = {
+  {   0, &hf_h501_security       , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   1, &hf_h501_hopCountExceeded, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   2, &hf_h501_noServiceRelationship, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   3, &hf_h501_undefined      , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   4, &hf_h501_neededFeature  , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   5, &hf_h501_genericDataReason, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   6, &hf_h501_unknownServiceID, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   7, &hf_h501_securityWrongSyncTime, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   8, &hf_h501_securityReplay , ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {   9, &hf_h501_securityWrongGeneralID, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {  10, &hf_h501_securityWrongSendersID, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {  11, &hf_h501_securityIntegrityFailed, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  {  12, &hf_h501_securityWrongOID, ASN1_EXTENSION_ROOT    , dissect_h501_NULL },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_AuthenticationRejectionReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_AuthenticationRejectionReason, AuthenticationRejectionReason_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const per_sequence_t AuthenticationRejection_sequence[] = {
+  { &hf_h501_reason_10      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_AuthenticationRejectionReason },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_AuthenticationRejection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_AuthenticationRejection, AuthenticationRejection_sequence);
+
+  return offset;
+}
+
+
+static const value_string h501_MessageBody_vals[] = {
+  {   0, "serviceRequest" },
+  {   1, "serviceConfirmation" },
+  {   2, "serviceRejection" },
+  {   3, "serviceRelease" },
+  {   4, "descriptorRequest" },
+  {   5, "descriptorConfirmation" },
+  {   6, "descriptorRejection" },
+  {   7, "descriptorIDRequest" },
+  {   8, "descriptorIDConfirmation" },
+  {   9, "descriptorIDRejection" },
+  {  10, "descriptorUpdate" },
+  {  11, "descriptorUpdateAck" },
+  {  12, "accessRequest" },
+  {  13, "accessConfirmation" },
+  {  14, "accessRejection" },
+  {  15, "requestInProgress" },
+  {  16, "nonStandardRequest" },
+  {  17, "nonStandardConfirmation" },
+  {  18, "nonStandardRejection" },
+  {  19, "unknownMessageResponse" },
+  {  20, "usageRequest" },
+  {  21, "usageConfirmation" },
+  {  22, "usageIndication" },
+  {  23, "usageIndicationConfirmation" },
+  {  24, "usageIndicationRejection" },
+  {  25, "usageRejection" },
+  {  26, "validationRequest" },
+  {  27, "validationConfirmation" },
+  {  28, "validationRejection" },
+  {  29, "authenticationRequest" },
+  {  30, "authenticationConfirmation" },
+  {  31, "authenticationRejection" },
+  { 0, NULL }
+};
+
+static const per_choice_t MessageBody_choice[] = {
+  {   0, &hf_h501_serviceRequest , ASN1_EXTENSION_ROOT    , dissect_h501_ServiceRequest },
+  {   1, &hf_h501_serviceConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_ServiceConfirmation },
+  {   2, &hf_h501_serviceRejection, ASN1_EXTENSION_ROOT    , dissect_h501_ServiceRejection },
+  {   3, &hf_h501_serviceRelease , ASN1_EXTENSION_ROOT    , dissect_h501_ServiceRelease },
+  {   4, &hf_h501_descriptorRequest, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorRequest },
+  {   5, &hf_h501_descriptorConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorConfirmation },
+  {   6, &hf_h501_descriptorRejection, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorRejection },
+  {   7, &hf_h501_descriptorIDRequest, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorIDRequest },
+  {   8, &hf_h501_descriptorIDConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorIDConfirmation },
+  {   9, &hf_h501_descriptorIDRejection, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorIDRejection },
+  {  10, &hf_h501_descriptorUpdate, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorUpdate },
+  {  11, &hf_h501_descriptorUpdateAck, ASN1_EXTENSION_ROOT    , dissect_h501_DescriptorUpdateAck },
+  {  12, &hf_h501_accessRequest  , ASN1_EXTENSION_ROOT    , dissect_h501_AccessRequest },
+  {  13, &hf_h501_accessConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_AccessConfirmation },
+  {  14, &hf_h501_accessRejection, ASN1_EXTENSION_ROOT    , dissect_h501_AccessRejection },
+  {  15, &hf_h501_requestInProgress, ASN1_EXTENSION_ROOT    , dissect_h501_RequestInProgress },
+  {  16, &hf_h501_nonStandardRequest, ASN1_EXTENSION_ROOT    , dissect_h501_NonStandardRequest },
+  {  17, &hf_h501_nonStandardConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_NonStandardConfirmation },
+  {  18, &hf_h501_nonStandardRejection, ASN1_EXTENSION_ROOT    , dissect_h501_NonStandardRejection },
+  {  19, &hf_h501_unknownMessageResponse, ASN1_EXTENSION_ROOT    , dissect_h501_UnknownMessageResponse },
+  {  20, &hf_h501_usageRequest   , ASN1_EXTENSION_ROOT    , dissect_h501_UsageRequest },
+  {  21, &hf_h501_usageConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_UsageConfirmation },
+  {  22, &hf_h501_usageIndication, ASN1_EXTENSION_ROOT    , dissect_h501_UsageIndication },
+  {  23, &hf_h501_usageIndicationConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_UsageIndicationConfirmation },
+  {  24, &hf_h501_usageIndicationRejection, ASN1_EXTENSION_ROOT    , dissect_h501_UsageIndicationRejection },
+  {  25, &hf_h501_usageRejection , ASN1_EXTENSION_ROOT    , dissect_h501_UsageRejection },
+  {  26, &hf_h501_validationRequest, ASN1_EXTENSION_ROOT    , dissect_h501_ValidationRequest },
+  {  27, &hf_h501_validationConfirmation, ASN1_EXTENSION_ROOT    , dissect_h501_ValidationConfirmation },
+  {  28, &hf_h501_validationRejection, ASN1_EXTENSION_ROOT    , dissect_h501_ValidationRejection },
+  {  29, &hf_h501_authenticationRequest, ASN1_NOT_EXTENSION_ROOT, dissect_h501_AuthenticationRequest },
+  {  30, &hf_h501_authenticationConfirmation, ASN1_NOT_EXTENSION_ROOT, dissect_h501_AuthenticationConfirmation },
+  {  31, &hf_h501_authenticationRejection, ASN1_NOT_EXTENSION_ROOT, dissect_h501_AuthenticationRejection },
+  { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h501_MessageBody(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+                                 ett_h501_MessageBody, MessageBody_choice,
+                                 NULL);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              0U, 65535U, NULL, FALSE);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_ProtocolVersion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_INTEGER_1_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+                                              1U, 255U, NULL, FALSE);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_TransportAddress_sequence_of[1] = {
+  { &hf_h501_replyAddress_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_TransportAddress },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_TransportAddress, SEQUENCE_OF_TransportAddress_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_ClearToken_sequence_of[1] = {
+  { &hf_h501_tokens_item    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h235_ClearToken },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_ClearToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_ClearToken, SEQUENCE_OF_ClearToken_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_NonStandardParameter_sequence_of[1] = {
+  { &hf_h501_nonStandard_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_NonStandardParameter },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_NonStandardParameter, SEQUENCE_OF_NonStandardParameter_sequence_of);
+
+  return offset;
+}
+
+
+
+static int
+dissect_h501_ServiceID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_h225_GloballyUniqueID(tvb, offset, actx, tree, hf_index);
+
+  return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_OF_GenericData_sequence_of[1] = {
+  { &hf_h501_genericData_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_GenericData },
+};
+
+static int
+dissect_h501_SEQUENCE_OF_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
+                                      ett_h501_SEQUENCE_OF_GenericData, SEQUENCE_OF_GenericData_sequence_of);
+
+  return offset;
+}
+
+
+static const per_sequence_t MessageCommonInfo_sequence[] = {
+  { &hf_h501_sequenceNumber , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_0_65535 },
+  { &hf_h501_annexGversion  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_ProtocolVersion },
+  { &hf_h501_hopCount       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_INTEGER_1_255 },
+  { &hf_h501_replyAddress   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_TransportAddress },
+  { &hf_h501_integrityCheckValue, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_ICV },
+  { &hf_h501_tokens         , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_ClearToken },
+  { &hf_h501_cryptoTokens   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_CryptoH323Token },
+  { &hf_h501_nonStandard    , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_NonStandardParameter },
+  { &hf_h501_serviceID      , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_ServiceID },
+  { &hf_h501_genericData    , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h501_SEQUENCE_OF_GenericData },
+  { &hf_h501_featureSet     , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_h225_FeatureSet },
+  { &hf_h501_version        , ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_h501_ProtocolVersion },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_MessageCommonInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_MessageCommonInfo, MessageCommonInfo_sequence);
+
+  return offset;
+}
+
+
+static const per_sequence_t Message_sequence[] = {
+  { &hf_h501_body           , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_MessageBody },
+  { &hf_h501_common         , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h501_MessageCommonInfo },
+  { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h501_Message(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+                                   ett_h501_Message, Message_sequence);
+
+  return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_Message_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+  offset = dissect_h501_Message(tvb, offset, &asn1_ctx, tree, hf_h501_Message_PDU);
+  offset += 7; offset >>= 3;
+  return offset;
+}
+
+
+/*--- End of included file: packet-h501-fn.c ---*/
+#line 74 "packet-h501-template.c"
+
+static int
+dissect_h501_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  proto_item  *ti = NULL;
+  proto_tree  *h501_tree = NULL;
+
+  if (check_col(pinfo->cinfo, COL_PROTOCOL))
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, PNAME);
+
+  ti = proto_tree_add_item(tree, proto_h501, tvb, 0, -1, FALSE);
+  h501_tree = proto_item_add_subtree(ti, ett_h501);
+
+  return dissect_Message_PDU(tvb, pinfo, h501_tree);
+}
+
+static int
+dissect_h501_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  dissect_tpkt_encap(tvb, pinfo, tree, FALSE, h501_pdu_handle);
+  return tvb_length(tvb);
+}
+
+static int
+dissect_h501_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  dissect_tpkt_encap(tvb, pinfo, tree, h501_desegment_tcp, h501_pdu_handle);
+  return tvb_length(tvb);
+}
+
+/*--- proto_register_h501 ----------------------------------------------*/
+void proto_register_h501(void) {
+  module_t *h501_module;
+
+  /* List of fields */
+  static hf_register_info hf[] = {
+
+/*--- Included file: packet-h501-hfarr.c ---*/
+#line 1 "packet-h501-hfarr.c"
+    { &hf_h501_Message_PDU,
+      { "Message", "h501.Message",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.Message", HFILL }},
+    { &hf_h501_body,
+      { "body", "h501.body",
+        FT_UINT32, BASE_DEC, VALS(h501_MessageBody_vals), 0,
+        "h501.MessageBody", HFILL }},
+    { &hf_h501_common,
+      { "common", "h501.common",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.MessageCommonInfo", HFILL }},
+    { &hf_h501_serviceRequest,
+      { "serviceRequest", "h501.serviceRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ServiceRequest", HFILL }},
+    { &hf_h501_serviceConfirmation,
+      { "serviceConfirmation", "h501.serviceConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ServiceConfirmation", HFILL }},
+    { &hf_h501_serviceRejection,
+      { "serviceRejection", "h501.serviceRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ServiceRejection", HFILL }},
+    { &hf_h501_serviceRelease,
+      { "serviceRelease", "h501.serviceRelease",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ServiceRelease", HFILL }},
+    { &hf_h501_descriptorRequest,
+      { "descriptorRequest", "h501.descriptorRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorRequest", HFILL }},
+    { &hf_h501_descriptorConfirmation,
+      { "descriptorConfirmation", "h501.descriptorConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorConfirmation", HFILL }},
+    { &hf_h501_descriptorRejection,
+      { "descriptorRejection", "h501.descriptorRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorRejection", HFILL }},
+    { &hf_h501_descriptorIDRequest,
+      { "descriptorIDRequest", "h501.descriptorIDRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorIDRequest", HFILL }},
+    { &hf_h501_descriptorIDConfirmation,
+      { "descriptorIDConfirmation", "h501.descriptorIDConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorIDConfirmation", HFILL }},
+    { &hf_h501_descriptorIDRejection,
+      { "descriptorIDRejection", "h501.descriptorIDRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorIDRejection", HFILL }},
+    { &hf_h501_descriptorUpdate,
+      { "descriptorUpdate", "h501.descriptorUpdate",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorUpdate", HFILL }},
+    { &hf_h501_descriptorUpdateAck,
+      { "descriptorUpdateAck", "h501.descriptorUpdateAck",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorUpdateAck", HFILL }},
+    { &hf_h501_accessRequest,
+      { "accessRequest", "h501.accessRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AccessRequest", HFILL }},
+    { &hf_h501_accessConfirmation,
+      { "accessConfirmation", "h501.accessConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AccessConfirmation", HFILL }},
+    { &hf_h501_accessRejection,
+      { "accessRejection", "h501.accessRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AccessRejection", HFILL }},
+    { &hf_h501_requestInProgress,
+      { "requestInProgress", "h501.requestInProgress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.RequestInProgress", HFILL }},
+    { &hf_h501_nonStandardRequest,
+      { "nonStandardRequest", "h501.nonStandardRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NonStandardRequest", HFILL }},
+    { &hf_h501_nonStandardConfirmation,
+      { "nonStandardConfirmation", "h501.nonStandardConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NonStandardConfirmation", HFILL }},
+    { &hf_h501_nonStandardRejection,
+      { "nonStandardRejection", "h501.nonStandardRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NonStandardRejection", HFILL }},
+    { &hf_h501_unknownMessageResponse,
+      { "unknownMessageResponse", "h501.unknownMessageResponse",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UnknownMessageResponse", HFILL }},
+    { &hf_h501_usageRequest,
+      { "usageRequest", "h501.usageRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageRequest", HFILL }},
+    { &hf_h501_usageConfirmation,
+      { "usageConfirmation", "h501.usageConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageConfirmation", HFILL }},
+    { &hf_h501_usageIndication,
+      { "usageIndication", "h501.usageIndication",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageIndication", HFILL }},
+    { &hf_h501_usageIndicationConfirmation,
+      { "usageIndicationConfirmation", "h501.usageIndicationConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageIndicationConfirmation", HFILL }},
+    { &hf_h501_usageIndicationRejection,
+      { "usageIndicationRejection", "h501.usageIndicationRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageIndicationRejection", HFILL }},
+    { &hf_h501_usageRejection,
+      { "usageRejection", "h501.usageRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageRejection", HFILL }},
+    { &hf_h501_validationRequest,
+      { "validationRequest", "h501.validationRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ValidationRequest", HFILL }},
+    { &hf_h501_validationConfirmation,
+      { "validationConfirmation", "h501.validationConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ValidationConfirmation", HFILL }},
+    { &hf_h501_validationRejection,
+      { "validationRejection", "h501.validationRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ValidationRejection", HFILL }},
+    { &hf_h501_authenticationRequest,
+      { "authenticationRequest", "h501.authenticationRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AuthenticationRequest", HFILL }},
+    { &hf_h501_authenticationConfirmation,
+      { "authenticationConfirmation", "h501.authenticationConfirmation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AuthenticationConfirmation", HFILL }},
+    { &hf_h501_authenticationRejection,
+      { "authenticationRejection", "h501.authenticationRejection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AuthenticationRejection", HFILL }},
+    { &hf_h501_sequenceNumber,
+      { "sequenceNumber", "h501.sequenceNumber",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_0_65535", HFILL }},
+    { &hf_h501_annexGversion,
+      { "annexGversion", "h501.annexGversion",
+        FT_OID, BASE_NONE, NULL, 0,
+        "h501.ProtocolVersion", HFILL }},
+    { &hf_h501_hopCount,
+      { "hopCount", "h501.hopCount",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_1_255", HFILL }},
+    { &hf_h501_replyAddress,
+      { "replyAddress", "h501.replyAddress",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_TransportAddress", HFILL }},
+    { &hf_h501_replyAddress_item,
+      { "Item", "h501.replyAddress_item",
+        FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
+        "h225.TransportAddress", HFILL }},
+    { &hf_h501_integrityCheckValue,
+      { "integrityCheckValue", "h501.integrityCheckValue",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.ICV", HFILL }},
+    { &hf_h501_tokens,
+      { "tokens", "h501.tokens",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_ClearToken", HFILL }},
+    { &hf_h501_tokens_item,
+      { "Item", "h501.tokens_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h235.ClearToken", HFILL }},
+    { &hf_h501_cryptoTokens,
+      { "cryptoTokens", "h501.cryptoTokens",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_CryptoH323Token", HFILL }},
+    { &hf_h501_cryptoTokens_item,
+      { "Item", "h501.cryptoTokens_item",
+        FT_UINT32, BASE_DEC, VALS(h225_CryptoH323Token_vals), 0,
+        "h225.CryptoH323Token", HFILL }},
+    { &hf_h501_nonStandard,
+      { "nonStandard", "h501.nonStandard",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_NonStandardParameter", HFILL }},
+    { &hf_h501_nonStandard_item,
+      { "Item", "h501.nonStandard_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.NonStandardParameter", HFILL }},
+    { &hf_h501_serviceID,
+      { "serviceID", "h501.serviceID",
+        FT_GUID, BASE_NONE, NULL, 0,
+        "h501.ServiceID", HFILL }},
+    { &hf_h501_genericData,
+      { "genericData", "h501.genericData",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_GenericData", HFILL }},
+    { &hf_h501_genericData_item,
+      { "Item", "h501.genericData_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.GenericData", HFILL }},
+    { &hf_h501_featureSet,
+      { "featureSet", "h501.featureSet",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.FeatureSet", HFILL }},
+    { &hf_h501_version,
+      { "version", "h501.version",
+        FT_OID, BASE_NONE, NULL, 0,
+        "h501.ProtocolVersion", HFILL }},
+    { &hf_h501_elementIdentifier,
+      { "elementIdentifier", "h501.elementIdentifier",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.ElementIdentifier", HFILL }},
+    { &hf_h501_domainIdentifier,
+      { "domainIdentifier", "h501.domainIdentifier",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_securityMode,
+      { "securityMode", "h501.securityMode",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_SecurityMode", HFILL }},
+    { &hf_h501_securityMode_item,
+      { "Item", "h501.securityMode_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.SecurityMode", HFILL }},
+    { &hf_h501_timeToLive,
+      { "timeToLive", "h501.timeToLive",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_1_4294967295", HFILL }},
+    { &hf_h501_usageSpec,
+      { "usageSpec", "h501.usageSpec",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageSpecification", HFILL }},
+    { &hf_h501_authentication,
+      { "authentication", "h501.authentication",
+        FT_UINT32, BASE_DEC, VALS(h235_AuthenticationMechanism_vals), 0,
+        "h235.AuthenticationMechanism", HFILL }},
+    { &hf_h501_integrity,
+      { "integrity", "h501.integrity",
+        FT_UINT32, BASE_DEC, VALS(h225_IntegrityMechanism_vals), 0,
+        "h225.IntegrityMechanism", HFILL }},
+    { &hf_h501_algorithmOIDs,
+      { "algorithmOIDs", "h501.algorithmOIDs",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.T_algorithmOIDs", HFILL }},
+    { &hf_h501_algorithmOIDs_item,
+      { "Item", "h501.algorithmOIDs_item",
+        FT_OID, BASE_NONE, NULL, 0,
+        "h501.OBJECT_IDENTIFIER", HFILL }},
+    { &hf_h501_alternates,
+      { "alternates", "h501.alternates",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AlternatePEInfo", HFILL }},
+    { &hf_h501_securityMode_01,
+      { "securityMode", "h501.securityMode",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.SecurityMode", HFILL }},
+    { &hf_h501_reason,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_ServiceRejectionReason_vals), 0,
+        "h501.ServiceRejectionReason", HFILL }},
+    { &hf_h501_serviceUnavailable,
+      { "serviceUnavailable", "h501.serviceUnavailable",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_serviceRedirected,
+      { "serviceRedirected", "h501.serviceRedirected",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_security,
+      { "security", "h501.security",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_continue,
+      { "continue", "h501.continue",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_undefined,
+      { "undefined", "h501.undefined",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_unknownServiceID,
+      { "unknownServiceID", "h501.unknownServiceID",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_cannotSupportUsageSpec,
+      { "cannotSupportUsageSpec", "h501.cannotSupportUsageSpec",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_neededFeature,
+      { "neededFeature", "h501.neededFeature",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_genericDataReason,
+      { "genericDataReason", "h501.genericDataReason",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_usageUnavailable,
+      { "usageUnavailable", "h501.usageUnavailable",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_unknownUsageSendTo,
+      { "unknownUsageSendTo", "h501.unknownUsageSendTo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_reason_01,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_ServiceReleaseReason_vals), 0,
+        "h501.ServiceReleaseReason", HFILL }},
+    { &hf_h501_outOfService,
+      { "outOfService", "h501.outOfService",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_maintenance,
+      { "maintenance", "h501.maintenance",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_terminated,
+      { "terminated", "h501.terminated",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_expired,
+      { "expired", "h501.expired",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_descriptorID,
+      { "descriptorID", "h501.descriptorID",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_DescriptorID", HFILL }},
+    { &hf_h501_descriptorID_item,
+      { "Item", "h501.descriptorID_item",
+        FT_GUID, BASE_NONE, NULL, 0,
+        "h501.DescriptorID", HFILL }},
+    { &hf_h501_descriptor,
+      { "descriptor", "h501.descriptor",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_Descriptor", HFILL }},
+    { &hf_h501_descriptor_item,
+      { "Item", "h501.descriptor_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.Descriptor", HFILL }},
+    { &hf_h501_reason_02,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_DescriptorRejectionReason_vals), 0,
+        "h501.DescriptorRejectionReason", HFILL }},
+    { &hf_h501_descriptorID_01,
+      { "descriptorID", "h501.descriptorID",
+        FT_GUID, BASE_NONE, NULL, 0,
+        "h501.DescriptorID", HFILL }},
+    { &hf_h501_packetSizeExceeded,
+      { "packetSizeExceeded", "h501.packetSizeExceeded",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_illegalID,
+      { "illegalID", "h501.illegalID",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_hopCountExceeded,
+      { "hopCountExceeded", "h501.hopCountExceeded",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_noServiceRelationship,
+      { "noServiceRelationship", "h501.noServiceRelationship",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_descriptorInfo,
+      { "descriptorInfo", "h501.descriptorInfo",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_DescriptorInfo", HFILL }},
+    { &hf_h501_descriptorInfo_item,
+      { "Item", "h501.descriptorInfo_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorInfo", HFILL }},
+    { &hf_h501_reason_03,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_DescriptorIDRejectionReason_vals), 0,
+        "h501.DescriptorIDRejectionReason", HFILL }},
+    { &hf_h501_noDescriptors,
+      { "noDescriptors", "h501.noDescriptors",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_sender,
+      { "sender", "h501.sender",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_updateInfo,
+      { "updateInfo", "h501.updateInfo",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_UpdateInformation", HFILL }},
+    { &hf_h501_updateInfo_item,
+      { "Item", "h501.updateInfo_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UpdateInformation", HFILL }},
+    { &hf_h501_descriptorInfo_01,
+      { "descriptorInfo", "h501.descriptorInfo",
+        FT_UINT32, BASE_DEC, VALS(h501_T_descriptorInfo_vals), 0,
+        "h501.T_descriptorInfo", HFILL }},
+    { &hf_h501_descriptor_01,
+      { "descriptor", "h501.descriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.Descriptor", HFILL }},
+    { &hf_h501_updateType,
+      { "updateType", "h501.updateType",
+        FT_UINT32, BASE_DEC, VALS(h501_T_updateType_vals), 0,
+        "h501.T_updateType", HFILL }},
+    { &hf_h501_added,
+      { "added", "h501.added",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_deleted,
+      { "deleted", "h501.deleted",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_changed,
+      { "changed", "h501.changed",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_destinationInfo,
+      { "destinationInfo", "h501.destinationInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.PartyInformation", HFILL }},
+    { &hf_h501_sourceInfo,
+      { "sourceInfo", "h501.sourceInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.PartyInformation", HFILL }},
+    { &hf_h501_callInfo,
+      { "callInfo", "h501.callInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.CallInformation", HFILL }},
+    { &hf_h501_desiredProtocols,
+      { "desiredProtocols", "h501.desiredProtocols",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_SupportedProtocols", HFILL }},
+    { &hf_h501_desiredProtocols_item,
+      { "Item", "h501.desiredProtocols_item",
+        FT_UINT32, BASE_DEC, VALS(h225_SupportedProtocols_vals), 0,
+        "h225.SupportedProtocols", HFILL }},
+    { &hf_h501_templates,
+      { "templates", "h501.templates",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_AddressTemplate", HFILL }},
+    { &hf_h501_templates_item,
+      { "Item", "h501.templates_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AddressTemplate", HFILL }},
+    { &hf_h501_partialResponse,
+      { "partialResponse", "h501.partialResponse",
+        FT_BOOLEAN, 8, NULL, 0,
+        "h501.BOOLEAN", HFILL }},
+    { &hf_h501_supportedProtocols,
+      { "supportedProtocols", "h501.supportedProtocols",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_SupportedProtocols", HFILL }},
+    { &hf_h501_supportedProtocols_item,
+      { "Item", "h501.supportedProtocols_item",
+        FT_UINT32, BASE_DEC, VALS(h225_SupportedProtocols_vals), 0,
+        "h225.SupportedProtocols", HFILL }},
+    { &hf_h501_serviceControl,
+      { "serviceControl", "h501.serviceControl",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_ServiceControlSession", HFILL }},
+    { &hf_h501_serviceControl_item,
+      { "Item", "h501.serviceControl_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.ServiceControlSession", HFILL }},
+    { &hf_h501_reason_04,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_AccessRejectionReason_vals), 0,
+        "h501.AccessRejectionReason", HFILL }},
+    { &hf_h501_noMatch,
+      { "noMatch", "h501.noMatch",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_needCallInformation,
+      { "needCallInformation", "h501.needCallInformation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_destinationUnavailable,
+      { "destinationUnavailable", "h501.destinationUnavailable",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_aliasesInconsistent,
+      { "aliasesInconsistent", "h501.aliasesInconsistent",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_resourceUnavailable,
+      { "resourceUnavailable", "h501.resourceUnavailable",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_incompleteAddress,
+      { "incompleteAddress", "h501.incompleteAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_reason_05,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_UsageRejectReason_vals), 0,
+        "h501.UsageRejectReason", HFILL }},
+    { &hf_h501_accessTokens,
+      { "accessTokens", "h501.accessTokens",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_AccessToken", HFILL }},
+    { &hf_h501_accessTokens_item,
+      { "Item", "h501.accessTokens_item",
+        FT_UINT32, BASE_DEC, VALS(h501_AccessToken_vals), 0,
+        "h501.AccessToken", HFILL }},
+    { &hf_h501_senderRole,
+      { "senderRole", "h501.senderRole",
+        FT_UINT32, BASE_DEC, VALS(h501_Role_vals), 0,
+        "h501.Role", HFILL }},
+    { &hf_h501_usageCallStatus,
+      { "usageCallStatus", "h501.usageCallStatus",
+        FT_UINT32, BASE_DEC, VALS(h501_UsageCallStatus_vals), 0,
+        "h501.UsageCallStatus", HFILL }},
+    { &hf_h501_srcInfo,
+      { "srcInfo", "h501.srcInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.PartyInformation", HFILL }},
+    { &hf_h501_destAddress,
+      { "destAddress", "h501.destAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.PartyInformation", HFILL }},
+    { &hf_h501_startTime,
+      { "startTime", "h501.startTime",
+        FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0,
+        "h235.TimeStamp", HFILL }},
+    { &hf_h501_endTime,
+      { "endTime", "h501.endTime",
+        FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0,
+        "h235.TimeStamp", HFILL }},
+    { &hf_h501_terminationCause,
+      { "terminationCause", "h501.terminationCause",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.TerminationCause", HFILL }},
+    { &hf_h501_usageFields,
+      { "usageFields", "h501.usageFields",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_UsageField", HFILL }},
+    { &hf_h501_usageFields_item,
+      { "Item", "h501.usageFields_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UsageField", HFILL }},
+    { &hf_h501_id,
+      { "id", "h501.id",
+        FT_OID, BASE_NONE, NULL, 0,
+        "h501.OBJECT_IDENTIFIER", HFILL }},
+    { &hf_h501_value,
+      { "value", "h501.value",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "h501.OCTET_STRING", HFILL }},
+    { &hf_h501_invalidCall,
+      { "invalidCall", "h501.invalidCall",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_unavailable,
+      { "unavailable", "h501.unavailable",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_reason_06,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_UsageIndicationRejectionReason_vals), 0,
+        "h501.UsageIndicationRejectionReason", HFILL }},
+    { &hf_h501_unknownCall,
+      { "unknownCall", "h501.unknownCall",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_incomplete,
+      { "incomplete", "h501.incomplete",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_accessToken,
+      { "accessToken", "h501.accessToken",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_AccessToken", HFILL }},
+    { &hf_h501_accessToken_item,
+      { "Item", "h501.accessToken_item",
+        FT_UINT32, BASE_DEC, VALS(h501_AccessToken_vals), 0,
+        "h501.AccessToken", HFILL }},
+    { &hf_h501_reason_07,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_ValidationRejectionReason_vals), 0,
+        "h501.ValidationRejectionReason", HFILL }},
+    { &hf_h501_tokenNotValid,
+      { "tokenNotValid", "h501.tokenNotValid",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_missingSourceInfo,
+      { "missingSourceInfo", "h501.missingSourceInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_missingDestInfo,
+      { "missingDestInfo", "h501.missingDestInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_delay,
+      { "delay", "h501.delay",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_1_65535", HFILL }},
+    { &hf_h501_reason_08,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_NonStandardRejectionReason_vals), 0,
+        "h501.NonStandardRejectionReason", HFILL }},
+    { &hf_h501_notSupported,
+      { "notSupported", "h501.notSupported",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_unknownMessage,
+      { "unknownMessage", "h501.unknownMessage",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "h501.OCTET_STRING", HFILL }},
+    { &hf_h501_reason_09,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_UnknownMessageReason_vals), 0,
+        "h501.UnknownMessageReason", HFILL }},
+    { &hf_h501_notUnderstood,
+      { "notUnderstood", "h501.notUnderstood",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_applicationMessage,
+      { "applicationMessage", "h501.applicationMessage",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "h501.ApplicationMessage", HFILL }},
+    { &hf_h501_reason_10,
+      { "reason", "h501.reason",
+        FT_UINT32, BASE_DEC, VALS(h501_AuthenticationRejectionReason_vals), 0,
+        "h501.AuthenticationRejectionReason", HFILL }},
+    { &hf_h501_securityWrongSyncTime,
+      { "securityWrongSyncTime", "h501.securityWrongSyncTime",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_securityReplay,
+      { "securityReplay", "h501.securityReplay",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_securityWrongGeneralID,
+      { "securityWrongGeneralID", "h501.securityWrongGeneralID",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_securityWrongSendersID,
+      { "securityWrongSendersID", "h501.securityWrongSendersID",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_securityIntegrityFailed,
+      { "securityIntegrityFailed", "h501.securityIntegrityFailed",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_securityWrongOID,
+      { "securityWrongOID", "h501.securityWrongOID",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_pattern,
+      { "pattern", "h501.pattern",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_Pattern", HFILL }},
+    { &hf_h501_pattern_item,
+      { "Item", "h501.pattern_item",
+        FT_UINT32, BASE_DEC, VALS(h501_Pattern_vals), 0,
+        "h501.Pattern", HFILL }},
+    { &hf_h501_routeInfo,
+      { "routeInfo", "h501.routeInfo",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_RouteInformation", HFILL }},
+    { &hf_h501_routeInfo_item,
+      { "Item", "h501.routeInfo_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.RouteInformation", HFILL }},
+    { &hf_h501_specific,
+      { "specific", "h501.specific",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_wildcard,
+      { "wildcard", "h501.wildcard",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_range,
+      { "range", "h501.range",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.T_range", HFILL }},
+    { &hf_h501_startOfRange,
+      { "startOfRange", "h501.startOfRange",
+        FT_UINT32, BASE_DEC, VALS(h225_PartyNumber_vals), 0,
+        "h225.PartyNumber", HFILL }},
+    { &hf_h501_endOfRange,
+      { "endOfRange", "h501.endOfRange",
+        FT_UINT32, BASE_DEC, VALS(h225_PartyNumber_vals), 0,
+        "h225.PartyNumber", HFILL }},
+    { &hf_h501_messageType,
+      { "messageType", "h501.messageType",
+        FT_UINT32, BASE_DEC, VALS(h501_T_messageType_vals), 0,
+        "h501.T_messageType", HFILL }},
+    { &hf_h501_sendAccessRequest,
+      { "sendAccessRequest", "h501.sendAccessRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_sendSetup,
+      { "sendSetup", "h501.sendSetup",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_nonExistent,
+      { "nonExistent", "h501.nonExistent",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_callSpecific,
+      { "callSpecific", "h501.callSpecific",
+        FT_BOOLEAN, 8, NULL, 0,
+        "h501.BOOLEAN", HFILL }},
+    { &hf_h501_priceInfo,
+      { "priceInfo", "h501.priceInfo",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_PriceInfoSpec", HFILL }},
+    { &hf_h501_priceInfo_item,
+      { "Item", "h501.priceInfo_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.PriceInfoSpec", HFILL }},
+    { &hf_h501_contacts,
+      { "contacts", "h501.contacts",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_ContactInformation", HFILL }},
+    { &hf_h501_contacts_item,
+      { "Item", "h501.contacts_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.ContactInformation", HFILL }},
+    { &hf_h501_type,
+      { "type", "h501.type",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.EndpointType", HFILL }},
+    { &hf_h501_circuitID,
+      { "circuitID", "h501.circuitID",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.CircuitInfo", HFILL }},
+    { &hf_h501_supportedCircuits,
+      { "supportedCircuits", "h501.supportedCircuits",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_CircuitIdentifier", HFILL }},
+    { &hf_h501_supportedCircuits_item,
+      { "Item", "h501.supportedCircuits_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.CircuitIdentifier", HFILL }},
+    { &hf_h501_transportAddress,
+      { "transportAddress", "h501.transportAddress",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_priority,
+      { "priority", "h501.priority",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_0_127", HFILL }},
+    { &hf_h501_transportQoS,
+      { "transportQoS", "h501.transportQoS",
+        FT_UINT32, BASE_DEC, VALS(h225_TransportQOS_vals), 0,
+        "h225.TransportQOS", HFILL }},
+    { &hf_h501_security_01,
+      { "security", "h501.security",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_SecurityMode", HFILL }},
+    { &hf_h501_security_item,
+      { "Item", "h501.security_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.SecurityMode", HFILL }},
+    { &hf_h501_multipleCalls,
+      { "multipleCalls", "h501.multipleCalls",
+        FT_BOOLEAN, 8, NULL, 0,
+        "h501.BOOLEAN", HFILL }},
+    { &hf_h501_currency,
+      { "currency", "h501.currency",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.IA5String_SIZE_3", HFILL }},
+    { &hf_h501_currencyScale,
+      { "currencyScale", "h501.currencyScale",
+        FT_INT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_M127_127", HFILL }},
+    { &hf_h501_validFrom,
+      { "validFrom", "h501.validFrom",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.GlobalTimeStamp", HFILL }},
+    { &hf_h501_validUntil,
+      { "validUntil", "h501.validUntil",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.GlobalTimeStamp", HFILL }},
+    { &hf_h501_hoursFrom,
+      { "hoursFrom", "h501.hoursFrom",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.IA5String_SIZE_6", HFILL }},
+    { &hf_h501_hoursUntil,
+      { "hoursUntil", "h501.hoursUntil",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.IA5String_SIZE_6", HFILL }},
+    { &hf_h501_priceElement,
+      { "priceElement", "h501.priceElement",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_PriceElement", HFILL }},
+    { &hf_h501_priceElement_item,
+      { "Item", "h501.priceElement_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.PriceElement", HFILL }},
+    { &hf_h501_priceFormula,
+      { "priceFormula", "h501.priceFormula",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.IA5String_SIZE_1_2048", HFILL }},
+    { &hf_h501_amount,
+      { "amount", "h501.amount",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_0_4294967295", HFILL }},
+    { &hf_h501_quantum,
+      { "quantum", "h501.quantum",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_0_4294967295", HFILL }},
+    { &hf_h501_units,
+      { "units", "h501.units",
+        FT_UINT32, BASE_DEC, VALS(h501_T_units_vals), 0,
+        "h501.T_units", HFILL }},
+    { &hf_h501_seconds,
+      { "seconds", "h501.seconds",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_packets,
+      { "packets", "h501.packets",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_bytes,
+      { "bytes", "h501.bytes",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_initial,
+      { "initial", "h501.initial",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_minimum,
+      { "minimum", "h501.minimum",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_maximum,
+      { "maximum", "h501.maximum",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_descriptorInfo_02,
+      { "descriptorInfo", "h501.descriptorInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.DescriptorInfo", HFILL }},
+    { &hf_h501_gatekeeperID,
+      { "gatekeeperID", "h501.gatekeeperID",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h225.GatekeeperIdentifier", HFILL }},
+    { &hf_h501_lastChanged,
+      { "lastChanged", "h501.lastChanged",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.GlobalTimeStamp", HFILL }},
+    { &hf_h501_alternatePE,
+      { "alternatePE", "h501.alternatePE",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_AlternatePE", HFILL }},
+    { &hf_h501_alternatePE_item,
+      { "Item", "h501.alternatePE_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.AlternatePE", HFILL }},
+    { &hf_h501_alternateIsPermanent,
+      { "alternateIsPermanent", "h501.alternateIsPermanent",
+        FT_BOOLEAN, 8, NULL, 0,
+        "h501.BOOLEAN", HFILL }},
+    { &hf_h501_contactAddress,
+      { "contactAddress", "h501.contactAddress",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_priority_01,
+      { "priority", "h501.priority",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_1_127", HFILL }},
+    { &hf_h501_token,
+      { "token", "h501.token",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h235.ClearToken", HFILL }},
+    { &hf_h501_cryptoToken,
+      { "cryptoToken", "h501.cryptoToken",
+        FT_UINT32, BASE_DEC, VALS(h225_CryptoH323Token_vals), 0,
+        "h225.CryptoH323Token", HFILL }},
+    { &hf_h501_genericData_01,
+      { "genericData", "h501.genericData",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.GenericData", HFILL }},
+    { &hf_h501_callIdentifier,
+      { "callIdentifier", "h501.callIdentifier",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.CallIdentifier", HFILL }},
+    { &hf_h501_conferenceID,
+      { "conferenceID", "h501.conferenceID",
+        FT_GUID, BASE_NONE, NULL, 0,
+        "h225.ConferenceIdentifier", HFILL }},
+    { &hf_h501_preConnect,
+      { "preConnect", "h501.preConnect",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_callInProgress,
+      { "callInProgress", "h501.callInProgress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_callEnded,
+      { "callEnded", "h501.callEnded",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_registrationLost,
+      { "registrationLost", "h501.registrationLost",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_userIdentifier,
+      { "userIdentifier", "h501.userIdentifier",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_userAuthenticator,
+      { "userAuthenticator", "h501.userAuthenticator",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_CryptoH323Token", HFILL }},
+    { &hf_h501_userAuthenticator_item,
+      { "Item", "h501.userAuthenticator_item",
+        FT_UINT32, BASE_DEC, VALS(h225_CryptoH323Token_vals), 0,
+        "h225.CryptoH323Token", HFILL }},
+    { &hf_h501_sendTo,
+      { "sendTo", "h501.sendTo",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "h501.ElementIdentifier", HFILL }},
+    { &hf_h501_when,
+      { "when", "h501.when",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.T_when", HFILL }},
+    { &hf_h501_never,
+      { "never", "h501.never",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_start,
+      { "start", "h501.start",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_end,
+      { "end", "h501.end",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_period,
+      { "period", "h501.period",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_1_65535", HFILL }},
+    { &hf_h501_failures,
+      { "failures", "h501.failures",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_required,
+      { "required", "h501.required",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.T_required", HFILL }},
+    { &hf_h501_required_item,
+      { "Item", "h501.required_item",
+        FT_OID, BASE_NONE, NULL, 0,
+        "h501.OBJECT_IDENTIFIER", HFILL }},
+    { &hf_h501_preferred,
+      { "preferred", "h501.preferred",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.T_preferred", HFILL }},
+    { &hf_h501_preferred_item,
+      { "Item", "h501.preferred_item",
+        FT_OID, BASE_NONE, NULL, 0,
+        "h501.OBJECT_IDENTIFIER", HFILL }},
+    { &hf_h501_sendToPEAddress,
+      { "sendToPEAddress", "h501.sendToPEAddress",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_logicalAddresses,
+      { "logicalAddresses", "h501.logicalAddresses",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.SEQUENCE_OF_AliasAddress", HFILL }},
+    { &hf_h501_logicalAddresses_item,
+      { "Item", "h501.logicalAddresses_item",
+        FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+        "h225.AliasAddress", HFILL }},
+    { &hf_h501_endpointType,
+      { "endpointType", "h501.endpointType",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.EndpointType", HFILL }},
+    { &hf_h501_userInfo,
+      { "userInfo", "h501.userInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.UserInformation", HFILL }},
+    { &hf_h501_timeZone,
+      { "timeZone", "h501.timeZone",
+        FT_INT32, BASE_DEC, NULL, 0,
+        "h501.TimeZone", HFILL }},
+    { &hf_h501_originator,
+      { "originator", "h501.originator",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_destination,
+      { "destination", "h501.destination",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h501.NULL", HFILL }},
+    { &hf_h501_nonStandardData,
+      { "nonStandardData", "h501.nonStandardData",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "h225.NonStandardParameter", HFILL }},
+    { &hf_h501_releaseCompleteReason,
+      { "releaseCompleteReason", "h501.releaseCompleteReason",
+        FT_UINT32, BASE_DEC, VALS(h225_ReleaseCompleteReason_vals), 0,
+        "h225.ReleaseCompleteReason", HFILL }},
+    { &hf_h501_causeIE,
+      { "causeIE", "h501.causeIE",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "h501.INTEGER_1_65535", HFILL }},
+
+/*--- End of included file: packet-h501-hfarr.c ---*/
+#line 111 "packet-h501-template.c"
+  };
+
+  /* List of subtrees */
+  static gint *ett[] = {
+    &ett_h501,
+
+/*--- Included file: packet-h501-ettarr.c ---*/
+#line 1 "packet-h501-ettarr.c"
+    &ett_h501_Message,
+    &ett_h501_MessageBody,
+    &ett_h501_MessageCommonInfo,
+    &ett_h501_SEQUENCE_OF_TransportAddress,
+    &ett_h501_SEQUENCE_OF_ClearToken,
+    &ett_h501_SEQUENCE_OF_CryptoH323Token,
+    &ett_h501_SEQUENCE_OF_NonStandardParameter,
+    &ett_h501_SEQUENCE_OF_GenericData,
+    &ett_h501_ServiceRequest,
+    &ett_h501_SEQUENCE_OF_SecurityMode,
+    &ett_h501_SecurityMode,
+    &ett_h501_T_algorithmOIDs,
+    &ett_h501_ServiceConfirmation,
+    &ett_h501_ServiceRejection,
+    &ett_h501_ServiceRejectionReason,
+    &ett_h501_ServiceRelease,
+    &ett_h501_ServiceReleaseReason,
+    &ett_h501_DescriptorRequest,
+    &ett_h501_SEQUENCE_OF_DescriptorID,
+    &ett_h501_DescriptorConfirmation,
+    &ett_h501_SEQUENCE_OF_Descriptor,
+    &ett_h501_DescriptorRejection,
+    &ett_h501_DescriptorRejectionReason,
+    &ett_h501_DescriptorIDRequest,
+    &ett_h501_DescriptorIDConfirmation,
+    &ett_h501_SEQUENCE_OF_DescriptorInfo,
+    &ett_h501_DescriptorIDRejection,
+    &ett_h501_DescriptorIDRejectionReason,
+    &ett_h501_DescriptorUpdate,
+    &ett_h501_SEQUENCE_OF_UpdateInformation,
+    &ett_h501_UpdateInformation,
+    &ett_h501_T_descriptorInfo,
+    &ett_h501_T_updateType,
+    &ett_h501_DescriptorUpdateAck,
+    &ett_h501_AccessRequest,
+    &ett_h501_SEQUENCE_OF_SupportedProtocols,
+    &ett_h501_AccessConfirmation,
+    &ett_h501_SEQUENCE_OF_AddressTemplate,
+    &ett_h501_SEQUENCE_OF_ServiceControlSession,
+    &ett_h501_AccessRejection,
+    &ett_h501_AccessRejectionReason,
+    &ett_h501_UsageRequest,
+    &ett_h501_UsageConfirmation,
+    &ett_h501_UsageRejection,
+    &ett_h501_UsageIndication,
+    &ett_h501_SEQUENCE_OF_AccessToken,
+    &ett_h501_SEQUENCE_OF_UsageField,
+    &ett_h501_UsageField,
+    &ett_h501_UsageRejectReason,
+    &ett_h501_UsageIndicationConfirmation,
+    &ett_h501_UsageIndicationRejection,
+    &ett_h501_UsageIndicationRejectionReason,
+    &ett_h501_ValidationRequest,
+    &ett_h501_ValidationConfirmation,
+    &ett_h501_ValidationRejection,
+    &ett_h501_ValidationRejectionReason,
+    &ett_h501_RequestInProgress,
+    &ett_h501_NonStandardRequest,
+    &ett_h501_NonStandardConfirmation,
+    &ett_h501_NonStandardRejection,
+    &ett_h501_NonStandardRejectionReason,
+    &ett_h501_UnknownMessageResponse,
+    &ett_h501_UnknownMessageReason,
+    &ett_h501_AuthenticationRequest,
+    &ett_h501_AuthenticationConfirmation,
+    &ett_h501_AuthenticationRejection,
+    &ett_h501_AuthenticationRejectionReason,
+    &ett_h501_AddressTemplate,
+    &ett_h501_SEQUENCE_OF_Pattern,
+    &ett_h501_SEQUENCE_OF_RouteInformation,
+    &ett_h501_Pattern,
+    &ett_h501_T_range,
+    &ett_h501_RouteInformation,
+    &ett_h501_T_messageType,
+    &ett_h501_SEQUENCE_OF_PriceInfoSpec,
+    &ett_h501_SEQUENCE_OF_ContactInformation,
+    &ett_h501_SEQUENCE_OF_CircuitIdentifier,
+    &ett_h501_ContactInformation,
+    &ett_h501_PriceInfoSpec,
+    &ett_h501_SEQUENCE_OF_PriceElement,
+    &ett_h501_PriceElement,
+    &ett_h501_T_units,
+    &ett_h501_Descriptor,
+    &ett_h501_DescriptorInfo,
+    &ett_h501_AlternatePEInfo,
+    &ett_h501_SEQUENCE_OF_AlternatePE,
+    &ett_h501_AlternatePE,
+    &ett_h501_AccessToken,
+    &ett_h501_CallInformation,
+    &ett_h501_UsageCallStatus,
+    &ett_h501_UserInformation,
+    &ett_h501_UsageSpecification,
+    &ett_h501_T_when,
+    &ett_h501_T_required,
+    &ett_h501_T_preferred,
+    &ett_h501_PartyInformation,
+    &ett_h501_SEQUENCE_OF_AliasAddress,
+    &ett_h501_Role,
+    &ett_h501_TerminationCause,
+
+/*--- End of included file: packet-h501-ettarr.c ---*/
+#line 117 "packet-h501-template.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_pdu_handle = find_dissector(PFNAME);
+
+  h501_udp_handle = new_create_dissector_handle(dissect_h501_udp, proto_h501);
+  h501_tcp_handle = new_create_dissector_handle(dissect_h501_tcp, 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;
+
+  if (h501_prefs_initialized) {
+    dissector_delete("udp.port", saved_h501_udp_port, h501_udp_handle);
+    dissector_delete("tcp.port", saved_h501_tcp_port, h501_tcp_handle);
+  } else {
+    h501_prefs_initialized = TRUE;
+  }
+
+  /* Set our port number for future use */
+  saved_h501_udp_port = h501_udp_port;
+  dissector_add("udp.port", saved_h501_udp_port, h501_udp_handle);
+  saved_h501_tcp_port = h501_tcp_port;
+  dissector_add("tcp.port", saved_h501_tcp_port, h501_tcp_handle);
+
+}
+