/* packet-h225.c
 * Routines for H.225 packet dissection
 * 2003  Ronnie Sahlberg
 *
 * Maintained by Andreas Sikkema (h323@ramdyne.nl)
 *
 * $Id: packet-h225.c,v 1.47 2004/06/24 21:50:03 sahlberg Exp $
 *
 * Ethereal - Network traffic analyzer
 * By Gerald Combs <gerald@ethereal.com>
 * Copyright 1998 Gerald Combs
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#ifdef HAVE_CONFIG_H
# include "config.h"
#endif

#include <glib.h>
#include <epan/packet.h>
#include <epan/conversation.h>

#include <stdio.h>
#include <string.h>

#include "prefs.h"
#include "tap.h"
#include "packet-tpkt.h"
#include "packet-per.h"
#include "packet-h225.h"
#include "packet-h235.h"
#include "packet-h245.h"
#include "t35.h"
#include "h225-persistentdata.h"

#define UDP_PORT_RAS1 1718
#define UDP_PORT_RAS2 1719
#define TCP_PORT_CS   1720

static void reset_h225_packet_info(h225_packet_info *pi);
static void ras_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, h225_packet_info *pi);

static h225_packet_info h225_pi;

static dissector_handle_t h225ras_handle;
static dissector_handle_t H323UserInformation_handle;
static dissector_handle_t data_handle;

static int h225_tap = -1;
static int proto_h225 = -1;
static int hf_h225_cname = -1;
static int hf_h225_route = -1;
static int hf_h225_nonStandardUsageTypes = -1;
static int hf_h225_nonStandardUsageTypes_item = -1;
static int hf_h225_PresentationIndicator = -1;
static int hf_h225_CryptoH323Token = -1;
static int hf_h225_conferenceGoal = -1;
static int hf_h225_ScnConnectionType = -1;
static int hf_h225_ScnConnectionAggregation = -1;
static int hf_h225_FacilityReason = -1;
static int hf_h225_PublicTypeOfNumber = -1;
static int hf_h225_PrivateTypeOfNumber = -1;
static int hf_h225_UseSpecifiedTransport = -1;
static int hf_h225_SecurityErrors = -1;
static int hf_h225_SecurityErrors2 = -1;
static int hf_h225_ServiceControlSession_reason = -1;
static int hf_h225_billingMode = -1;
static int hf_h225_CCSCcallStartingPoint = -1;
static int hf_h225_GatekeeperRejectReason = -1;
static int hf_h225_UnregRequestReason = -1;
static int hf_h225_UnregRejectReason = -1;
static int hf_h225_CallType = -1;
static int hf_h225_CallModel = -1;
static int hf_h225_TransportQOS = -1;
static int hf_h225_BandRejectReason = -1;
static int hf_h225_DisengageReason = -1;
static int hf_h225_DisengageRejectReason = -1;
static int hf_h225_InfoRequestNakReason = -1;
static int hf_h225_SCRresult = -1;
static int hf_h225_GatekeeperInfo = -1;
static int hf_h225_SecurityServiceMode_encryption = -1;
static int hf_h225_SecurityServiceMode_authentication = -1;
static int hf_h225_SecurityServiceMode_integrity = -1;
static int hf_h225_SecurityCapabilities_tls = -1;
static int hf_h225_SecurityCapabilities_ipsec = -1;
static int hf_h225_H245Security = -1;
static int hf_h225_RasUsageInfoTypes = -1;
static int hf_h225_usageReportingCapability = -1;
static int hf_h225_BandWidth = -1;
static int hf_h225_channelRate = -1;
static int hf_h225_totalBandwidthRestriction = -1;
static int hf_h225_allowedBandWidth = -1;
static int hf_h225_channelMultiplier = -1;
static int hf_h225_DataRate = -1;
static int hf_h225_gatewayDataRate = -1;
static int hf_h225_dataRatesSupported = -1;
static int hf_h225_TerminalInfo = -1;
static int hf_h225_h248Message = -1;
static int hf_h225_StimulusControl = -1;
static int hf_h225_conferenceID = -1;
static int hf_h225_Generic_nonStandard = -1;
static int hf_h225_guid = -1;
static int hf_h225_replaceWithConferenceInvite = -1;
static int hf_h225_ReleaseCompleteReason = -1;
static int hf_h225_numberOfScnConnections = -1;
static int hf_h225_connectionParameters = -1;
static int hf_h225_RequestSeqNum = -1;
static int hf_h225_RasUsageSpecification_when = -1;
static int hf_h225_RasUsageSpecification_callStartingPoint = -1;
static int hf_h225_RasUsageSpecification = -1;
static int hf_h225_ipAddress_ip = -1;
static int hf_h225_ipAddress_port = -1;
static int hf_h225_ipAddress = -1;
static int hf_h225_routing = -1;
static int hf_h225_ipSourceRoute = -1;
static int hf_h225_ipxNode = -1;
static int hf_h225_ipxNetnum = -1;
static int hf_h225_ipxPort = -1;
static int hf_h225_ipxAddress = -1;
static int hf_h225_ipv6Address_ip = -1;
static int hf_h225_ipv6Address_port = -1;
static int hf_h225_ip6Address = -1;
static int hf_h225_netBios = -1;
static int hf_h225_nsap = -1;
static int hf_h225_TransportAddress = -1;
static int hf_h225_replyAddress = -1;
static int hf_h225_rasAddress = -1;
static int hf_h225_h245Address = -1;
static int hf_h225_destCallSignalAddress = -1;
static int hf_h225_sourceCallSignalAddress = -1;
static int hf_h225_CallSignalAddress2 = -1;
static int hf_h225_alternativeAddress = -1;
static int hf_h225_transportID = -1;
static int hf_h225_sendAddress = -1;
static int hf_h225_recvAddress = -1;
static int hf_h225_rtpAddress = -1;
static int hf_h225_rtcpAddress = -1;
static int hf_h225_h245 = -1;
static int hf_h225_callSignaling = -1;
static int hf_h225_carrierName = -1;
static int hf_h225_carrierIdentificationCode = -1;
static int hf_h225_CarrierInfo = -1;
static int hf_h225_segment = -1;
static int hf_h225_InfoRequestResponseStatus = -1;
static int hf_h225_CallIdentifier = -1;
static int hf_h225_globalCallId = -1;
static int hf_h225_threadId = -1;
static int hf_h225_CallLinkage = -1;
static int hf_h225_tokens = -1;
static int hf_h225_CryptoH323Tokens = -1;
static int hf_h225_needToRegister = -1;
static int hf_h225_priority = -1;
static int hf_h225_AlternateGK = -1;
static int hf_h225_alternateGatekeeper = -1;
static int hf_h225_altGKisPermanent = -1;
static int hf_h225_AltGKInfo = -1;
static int hf_h225_annexE = -1;
static int hf_h225_sctp = -1;
static int hf_h225_AlternateTransportAddress = -1;
static int hf_h225_setup_bool = -1;
static int hf_h225_callProceeding_bool = -1;
static int hf_h225_connect_bool = -1;
static int hf_h225_alerting_bool = -1;
static int hf_h225_information_bool = -1;
static int hf_h225_releaseComplete_bool = -1;
static int hf_h225_facility_bool = -1;
static int hf_h225_progress_bool = -1;
static int hf_h225_empty_bool = -1;
static int hf_h225_status_bool = -1;
static int hf_h225_statusInquiry_bool = -1;
static int hf_h225_setupAcknowledge_bool = -1;
static int hf_h225_notify_bool = -1;
static int hf_h225_UUIEsRequested = -1;
static int hf_h225_conferenceCalling = -1;
static int hf_h225_threePartyService = -1;
static int hf_h225_Q954Details = -1;
static int hf_h225_q932Full = -1;
static int hf_h225_q951Full = -1;
static int hf_h225_q952Full = -1;
static int hf_h225_q953Full = -1;
static int hf_h225_q955Full = -1;
static int hf_h225_q956Full = -1;
static int hf_h225_q957Full = -1;
static int hf_h225_QseriesOptions = -1;
static int hf_h225_ssrc = -1;
static int hf_h225_RTPsessionId = -1;
static int hf_h225_associatedSessionIds = -1;
static int hf_h225_RTPSession = -1;
static int hf_h225_ProtocolIdentifier = -1;
static int hf_h225_isoAlgorithm = -1;
static int hf_h225_iso9797 = -1;
static int hf_h225_algorithmOID = -1;
static int hf_h225_hMAC_iso10118_3 = -1;
static int hf_h225_enterpriseNumber = -1;
static int hf_h225_Generic_oid = -1;
static int hf_h225_tunnelledProtocolObjectID = -1;
static int hf_h225_StatusUUIE = -1;
static int hf_h225_StatusInquiryUUIE = -1;
static int hf_h225_SetupAcknowledgeUUIE = -1;
static int hf_h225_NotifyUUIE = -1;
static int hf_h225_imsi = -1;
static int hf_h225_tmsi = -1;
static int hf_h225_msisdn = -1;
static int hf_h225_imei = -1;
static int hf_h225_hplmn = -1;
static int hf_h225_vplmn = -1;
static int hf_h225_GSMUIM = -1;
static int hf_h225_sid = -1;
static int hf_h225_mid = -1;
static int hf_h225_systemid = -1;
static int hf_h225_min = -1;
static int hf_h225_mdn = -1;
static int hf_h225_esn = -1;
static int hf_h225_mscid = -1;
static int hf_h225_systemMyTypeCode = -1;
static int hf_h225_systemAccessType = -1;
static int hf_h225_qualificationInformationCode = -1;
static int hf_h225_sesn = -1;
static int hf_h225_soc = -1;
static int hf_h225_ANSI41UIM = -1;
static int hf_h225_MobileUIM = -1;
static int hf_h225_dataPartyNumber = -1;
static int hf_h225_telexPartyNumber = -1;
static int hf_h225_nationalStandardPartyNumber = -1;
static int hf_h225_publicNumberDigits = -1;
static int hf_h225_privateNumberDigits = -1;
static int hf_h225_e164Number = -1;
static int hf_h225_privateNumber = -1;
static int hf_h225_PartyNumber = -1;
static int hf_h225_startOfRange = -1;
static int hf_h225_endOfRange = -1;
static int hf_h225_protocolType = -1;
static int hf_h225_protocolVariant = -1;
static int hf_h225_TunnelledProtocolAlternateIdentifier = -1;
static int hf_h225_dialedDigits = -1;
static int hf_h225_urlId = -1;
static int hf_h225_h323ID = -1;
static int hf_h225_unicode = -1;
static int hf_h225_GatekeeperIdentifier = -1;
static int hf_h225_EndpointIdentifier = -1;
static int hf_h225_emailId = -1;
static int hf_h225_AliasAddress = -1;
static int hf_h225_featureServerAlias = -1;
static int hf_h225_RemoteExtensionAddress = -1;
static int hf_h225_conferenceAlias = -1;
static int hf_h225_wildcard = -1;
static int hf_h225_prefix = -1;
static int hf_h225_SupportedPrefix = -1;
static int hf_h225_SupportedPrefixes = -1;
static int hf_h225_H310Caps = -1;
static int hf_h225_H320Caps = -1;
static int hf_h225_H321Caps = -1;
static int hf_h225_H322Caps = -1;
static int hf_h225_H323Caps = -1;
static int hf_h225_H324Caps = -1;
static int hf_h225_VoiceCaps = -1;
static int hf_h225_T120OnlyCaps = -1;
static int hf_h225_NonStandardProtocol = -1;
static int hf_h225_SIPCaps = -1;
static int hf_h225_AddressPattern_range = -1;
static int hf_h225_AddressPattern = -1;
static int hf_h225_ConferenceList = -1;
static int hf_h225_conferences = -1;
static int hf_h225_T38FaxAnnexbOnlyCaps = -1;
static int hf_h225_SupportedProtocols = -1;
static int hf_h225_protocol = -1;
static int hf_h225_GatewayInfo = -1;
static int hf_h225_McuInfo = -1;
static int hf_h225_TunnelledProtocol_id = -1;
static int hf_h225_TunnelledProtocol_subIdentifier = -1;
static int hf_h225_TunnelledProtocol = -1;
static int hf_h225_TunnelledProtocols = -1;
static int hf_h225_desiredTunnelledProtocol = -1;
static int hf_h225_CicInfo_cic_item = -1;
static int hf_h225_CicInfo_pointCode = -1;
static int hf_h225_CicInfo_cic = -1;
static int hf_h225_CicInfo = -1;
static int hf_h225_GroupID_member_item = -1;
static int hf_h225_GroupID_member = -1;
static int hf_h225_GroupID_group = -1;
static int hf_h225_GroupID = -1;
static int hf_h225_sourceCircuitID = -1;
static int hf_h225_destinationCircuitID = -1;
static int hf_h225_Generic_standard = -1;
static int hf_h225_GenericIdentifier = -1;
static int hf_h225_EnumeratedParameter = -1;
static int hf_h225_parameters = -1;
static int hf_h225_GenericData = -1;
static int hf_h225_FeatureDescriptor = -1;
static int hf_h225_Content_raw = -1;
static int hf_h225_Content_text = -1;
static int hf_h225_Content = -1;
static int hf_h225_Content_bool = -1;
static int hf_h225_Content_number8 = -1;
static int hf_h225_number16 = -1;
static int hf_h225_Content_number32 = -1;
static int hf_h225_Content_compound = -1;
static int hf_h225_Content_nested = -1;
static int hf_h225_replacementFeatureSet = -1;
static int hf_h225_neededFeatures = -1;
static int hf_h225_desiredFeatures = -1;
static int hf_h225_supportedFeatures = -1;
static int hf_h225_FeatureSet = -1;
static int hf_h225_CallsAvailable_calls = -1;
static int hf_h225_CallsAvailable_group = -1;
static int hf_h225_CallsAvailable = -1;
static int hf_h225_voiceGwCallsAvailable = -1;
static int hf_h225_h310GwCallsAvailable = -1;
static int hf_h225_h320GwCallsAvailable = -1;
static int hf_h225_h321GwCallsAvailable = -1;
static int hf_h225_h322GwCallsAvailable = -1;
static int hf_h225_h323GwCallsAvailable = -1;
static int hf_h225_h324GwCallsAvailable = -1;
static int hf_h225_t120OnlyGwCallsAvailable = -1;
static int hf_h225_t38FaxAnnexbOnlyGwCallsAvailable = -1;
static int hf_h225_terminalCallsAvailable = -1;
static int hf_h225_mcuCallsAvailable = -1;
static int hf_h225_sipGwCallsAvailable = -1;
static int hf_h225_maximumCallCapacity = -1;
static int hf_h225_currentCallCapacity = -1;
static int hf_h225_CallCapacity = -1;
static int hf_h225_productID = -1;
static int hf_h225_versionID = -1;
static int hf_h225_VendorIdentifier = -1;
static int hf_h225_canReportCallCapacity = -1;
static int hf_h225_CapacityReportingCapability = -1;
static int hf_h225_canDisplayAmountString = -1;
static int hf_h225_canEnforceDurationLimit = -1;
static int hf_h225_CallCreditCapability = -1;
static int hf_h225_BandwidthDetails_sender = -1;
static int hf_h225_BandwidthDetails_multicast = -1;
static int hf_h225_BandwidthDetails = -1;
static int hf_h225_releaseCompleteCauseIE = -1;
static int hf_h225_CallTerminationCause = -1;
static int hf_h225_CircuitInfo = -1;
static int hf_h225_genericData = -1;
static int hf_h225_fastStart_item_length = -1;
static int hf_h225_fastStart = -1;
static int hf_h225_fastConnectRefused = -1;
static int hf_h225_InformationUUIE = -1;
static int hf_h225_routeCallToSCN = -1;
static int hf_h225_AdmissionRejectReason = -1;
static int hf_h225_hMAC_iso10118_2_s = -1;
static int hf_h225_hMAC_iso10118_2_l = -1;
static int hf_h225_NonIsoIntegrityMechanism = -1;
static int hf_h225_IntegrityMechanism = -1;
static int hf_h225_LocationRejectReason = -1;
static int hf_h225_mc = -1;
static int hf_h225_undefinedNode = -1;
static int hf_h225_EndPointType = -1;
static int hf_h225_terminalType = -1;
static int hf_h225_sourceInfo = -1;
static int hf_h225_destinationInfo = -1;
static int hf_h225_multipleCalls = -1;
static int hf_h225_maintainConnection = -1;
static int hf_h225_CallProceedingUUIE = -1;
static int hf_h225_CapacityReportingSpecification_when = -1;
static int hf_h225_CapacityReportingSpecification = -1;
static int hf_h225_ProgressUUIE = -1;
static int hf_h225_EndPoint = -1;
static int hf_h225_destinationType = -1;
static int hf_h225_destExtraCallInfo = -1;
static int hf_h225_remoteExtensionAddress = -1;
static int hf_h225_rasAddress_sequence = -1;
static int hf_h225_callSignalAddress = -1;
static int hf_h225_ICV = -1;
static int hf_h225_BandwidthConfirm = -1;
static int hf_h225_UnregistrationConfirm = -1;
static int hf_h225_NonStandardMessage = -1;
static int hf_h225_InfoRequestAck = -1;
static int hf_h225_InfoRequestNak = -1;
static int hf_h225_ResourcesAvailableConfirm = -1;
static int hf_h225_GatekeeperRequest = -1;
static int hf_h225_integrity = -1;
static int hf_h225_algorithmOIDs = -1;
static int hf_h225_alternateEndpoints = -1;
static int hf_h225_endpointAlias = -1;
static int hf_h225_ServiceControlResponse = -1;
static int hf_h225_DisengageReject = -1;
static int hf_h225_BandwidthReject = -1;
static int hf_h225_UnregistrationReject = -1;
static int hf_h225_UnregistrationRequest = -1;
static int hf_h225_endpointAliasPattern = -1;
static int hf_h225_RegistrationReject = -1;
static int hf_h225_invalidTerminalAliases = -1;
static int hf_h225_terminalAlias = -1;
static int hf_h225_terminalAliasPattern = -1;
static int hf_h225_RegistrationRejectReason = -1;
static int hf_h225_duplicateAlias = -1;
static int hf_h225_GatekeeperReject = -1;
static int hf_h225_almostOutOfResources = -1;
static int hf_h225_ResourcesAvailableIndicate = -1;
static int hf_h225_protocols = -1;
static int hf_h225_callDurationLimit = -1;
static int hf_h225_enforceCallDurationLimit = -1;
static int hf_h225_CallCreditServiceControl = -1;
static int hf_h225_ScreeningIndicator = -1;
static int hf_h225_ExtendedAliasAddress = -1;
static int hf_h225_messageNotUnderstood = -1;
static int hf_h225_UnknownMessageResponse = -1;
static int hf_h225_CallReferenceValue = -1;
static int hf_h225_AdmissionRequest = -1;
static int hf_h225_canMapSrcAlias = -1;
static int hf_h225_desiredProtocols = -1;
static int hf_h225_willSupplyUUIEs = -1;
static int hf_h225_destAlternatives = -1;
static int hf_h225_srcAlternatives = -1;
static int hf_h225_canMapAlias = -1;
static int hf_h225_activeMC = -1;
static int hf_h225_srcInfo = -1;
static int hf_h225_DestinationInfo = -1;
static int hf_h225_InfoRequest = -1;
static int hf_h225_nextSegmentRequested = -1;
static int hf_h225_delay = -1;
static int hf_h225_RequestInProgress = -1;
static int hf_h225_H248SignalsDescriptor = -1;
static int hf_h225_url = -1;
static int hf_h225_ServiceControlDescriptor = -1;
static int hf_h225_ServiceControlSession = -1;
static int hf_h225_sessionId = -1;
static int hf_h225_AlertingUUIE = -1;
static int hf_h225_serviceControl = -1;
static int hf_h225_alertingAddress = -1;
static int hf_h225_ReleaseCompleteUUIE = -1;
static int hf_h225_busyAddress = -1;
static int hf_h225_FacilityUUIE = -1;
static int hf_h225_alternativeAliasAddress = -1;
static int hf_h225_AdmissionReject = -1;
static int hf_h225_hopCount = -1;
static int hf_h225_parallelH245Control = -1;
static int hf_h225_language = -1;
static int hf_h225_languages = -1;
static int hf_h225_mediaWaitForConnect = -1;
static int hf_h225_canOverlapSend = -1;
static int hf_h225_SetupUUIE = -1;
static int hf_h225_sourceAddress = -1;
static int hf_h225_destinationAddress = -1;
static int hf_h225_destExtraCRV = -1;
static int hf_h225_h245SecurityCapability = -1;
static int hf_h225_additionalSourceAddresses = -1;
static int hf_h225_ConnectUUIE = -1;
static int hf_h225_connectedAddress = -1;
static int hf_h225_h323_message_body = -1;
static int hf_h225_LocationConfirm = -1;
static int hf_h225_supportedProtocols = -1;
static int hf_h225_modifiedSrcInfo = -1;
static int hf_h225_LocationReject = -1;
static int hf_h225_callSpecific = -1;
static int hf_h225_answeredCall = -1;
static int hf_h225_ServiceControlIndication = -1;
static int hf_h225_RasUsageInformation = -1;
static int hf_h225_nonStandardUsageFields = -1;
static int hf_h225_nonStandardUsageFields_item = -1;
static int hf_h225_TimeToLive = -1;
static int hf_h225_GatekeeperConfirm = -1;
static int hf_h225_RegistrationRequest = -1;
static int hf_h225_discoveryComplete = -1;
static int hf_h225_keepAlive = -1;
static int hf_h225_H248PackagesDescriptor = -1;
static int hf_h225_supportedH248Packages = -1;
static int hf_h225_DisengageConfirm = -1;
static int hf_h225_AdmissionConfirm = -1;
static int hf_h225_irrFrequency = -1;
static int hf_h225_willRespondToIRR = -1;
static int hf_h225_usageSpec = -1;
static int hf_h225_DisengageRequest = -1;
static int hf_h225_LocationRequest = -1;
static int hf_h225_SourceInfo = -1;
static int hf_h225_hopCount255 = -1;
static int hf_h225_sourceEndpointInfo = -1;
static int hf_h225_BandwidthRequest = -1;
static int hf_h225_bandwidthDetails = -1;
static int hf_h225_admissionConfirmSequence = -1;
static int hf_h225_tunnelledSignallingMessage = -1;
static int hf_h225_messageContent_item = -1;
static int hf_h225_messageContent = -1;
static int hf_h225_H323_UU_PDU = -1;
static int hf_h225_h4501SupplementaryService = -1;
static int hf_h225_h245Tunneling = -1;
static int hf_h225_h245Control = -1;
static int hf_h225_nonStandardControl = -1;
static int hf_h225_nonStandardControl_item = -1;
static int hf_h225_preGrantedARQ = -1;
static int hf_h225_makeCall = -1;
static int hf_h225_useGKCallSignalAddressToMakeCall = -1;
static int hf_h225_answerCall = -1;
static int hf_h225_useGKCallSignalAddressToAnswer = -1;
static int hf_h225_RegistrationConfirm = -1;
static int hf_h225_pdu_item = -1;
static int hf_h225_sent = -1;
static int hf_h225_pdu = -1;
static int hf_h225_perCallInfo_item = -1;
static int hf_h225_originator = -1;
static int hf_h225_audio = -1;
static int hf_h225_video = -1;
static int hf_h225_data = -1;
static int hf_h225_substituteConfIDs = -1;
static int hf_h225_perCallInfo = -1;
static int hf_h225_InfoRequestResponse = -1;
static int hf_h225_needResponse = -1;
static int hf_h225_unsolicited = -1;
static int hf_h225_RasMessage = -1;
static int hf_h225_H323_UserInformation = -1;
static int hf_h225_user_data = -1;
static int hf_h225_protocol_discriminator = -1;
static int hf_h225_user_information = -1;
static int hf_h225_object = -1;
static int hf_h225_t35CountryCode = -1;
static int hf_h225_t35Extension = -1;
static int hf_h225_manufacturerCode = -1;
static int hf_h221Manufacturer = -1;
static int hf_h225_h221NonStandard = -1;
static int hf_h225_nonStandardIdentifier = -1;
static int hf_h225_nsp_data = -1;
static int hf_h225_nonStandardData = -1;
static int hf_h225_nonStandard = -1;
static int hf_h225_nonStandardReason = -1;
static int hf_h225_nonStandardAddress = -1;
static int hf_h225_aliasAddress_sequence = -1;
static int hf_h225_ras_req_frame = -1;
static int hf_h225_ras_rsp_frame = -1;
static int hf_h225_ras_dup = -1;
static int hf_h225_ras_deltatime = -1;
static int hf_h225_cleartoken = -1;
static int hf_h225_cryptoEPPwdHash = -1;          /* T_cryptoEPPwdHash */
static int hf_h225_cryptoGKPwdHash = -1;          /* T_cryptoGKPwdHash */
static int hf_h225_timeStamp = -1;                /* TimeStamp */
static int hf_h225_token = -1;                    /* HASHEDxxx */
static int hf_h225_cryptoEPPwdEncr = -1;          /* ENCRYPTEDxxx */
static int hf_h225_cryptoGKPwdEncr = -1;          /* ENCRYPTEDxxx */
static int hf_h225_cryptoEPCert = -1;             /* SIGNEDxxx */
static int hf_h225_cryptoGKCert = -1;             /* SIGNEDxxx */
static int hf_h225_cryptoFastStart = -1;          /* SIGNEDxxx */
static int hf_h225_nestedcryptoToken = -1;        /* CryptoToken */
static int hf_h225_cryptoTokens_item = -1;        /* CryptoH323Token */
static int hf_h225_authenticationCapability = -1;  /* SEQUENCE_OF_AuthenticationMechanism */
static int hf_h225_authenticationCapability_item = -1;  /* AuthenticationMechanism */
static int hf_h225_authenticationMode = -1;       /* AuthenticationMechanism */
static int hf_h225_alertingTime = -1;             /* TimeStamp */
static int hf_h225_connectTime = -1;              /* TimeStamp */
static int hf_h225_endTimeStamp = -1;             /* TimeStamp */
/*aaa*/

static gint ett_h225 = -1;
static gint ett_h225_T_nonStandardUsageTypes = -1;
static gint ett_h225_PresentationIndicator = -1;
static gint ett_h225_CryptoH323Token = -1;
static gint ett_h225_conferenceGoal = -1;
static gint ett_h225_ScnConnectionType = -1;
static gint ett_h225_ScnConnectionAggregation = -1;
static gint ett_h225_FacilityReason = -1;
static gint ett_h225_PublicTypeOfNumber = -1;
static gint ett_h225_PrivateTypeOfNumber = -1;
static gint ett_h225_UseSpecifiedTransport = -1;
static gint ett_h225_SecurityErrors = -1;
static gint ett_h225_SecurityErrors2 = -1;
static gint ett_h225_ServiceControlSession_reason = -1;
static gint ett_h225_billingMode = -1;
static gint ett_h225_CCSCcallStartingPoint = -1;
static gint ett_h225_GatekeeperRejectReason = -1;
static gint ett_h225_UnregRequestReason = -1;
static gint ett_h225_UnregRejectReason = -1;
static gint ett_h225_CallType = -1;
static gint ett_h225_CallModel = -1;
static gint ett_h225_TransportQOS = -1;
static gint ett_h225_BandRejectReason = -1;
static gint ett_h225_DisengageReason = -1;
static gint ett_h225_DisengageRejectReason = -1;
static gint ett_h225_InfoRequestNakReason = -1;
static gint ett_h225_SCRresult = -1;
static gint ett_h225_GatekeeperInfo = -1;
static gint ett_h225_SecurityServiceMode_encryption = -1;
static gint ett_h225_SecurityServiceMode_authentication = -1;
static gint ett_h225_SecurityServiceMode_integrity = -1;
static gint ett_h225_SecurityCapabilities_tls = -1;
static gint ett_h225_SecurityCapabilities_ipsec = -1;
static gint ett_h225_H245Security = -1;
static gint ett_h225_RasUsageInfoTypes = -1;
static gint ett_h225_DataRate = -1;
static gint ett_h225_dataRatesSupported = -1;
static gint ett_h225_TerminalInfo = -1;
static gint ett_h225_StimulusControl = -1;
static gint ett_h225_ReleaseCompleteReason = -1;
static gint ett_h225_connectionParameters = -1;
static gint ett_h225_RasUsageSpecification_when = -1;
static gint ett_h225_RasUsageSpecification_callStartingPoint = -1;
static gint ett_h225_RasUsageSpecification = -1;
static gint ett_h225_ipAddress = -1;
static gint ett_h225_routing = -1;
static gint ett_h225_route = -1;
static gint ett_h225_ipSourceRoute = -1;
static gint ett_h225_ipxAddress = -1;
static gint ett_h225_ip6Address = -1;
static gint ett_h225_TransportAddress = -1;
static gint ett_h225_TransportChannelInfo = -1;
static gint ett_h225_CarrierInfo = -1;
static gint ett_h225_InfoRequestResponseStatus = -1;
static gint ett_h225_CallIdentifier = -1;
static gint ett_h225_CallLinkage = -1;
static gint ett_h225_tokens = -1;
static gint ett_h225_CryptoH323Tokens = -1;
static gint ett_h225_AlternateGK = -1;
static gint ett_h225_alternateGatekeeper = -1;
static gint ett_h225_AltGKInfo = -1;
static gint ett_h225_annexE = -1;
static gint ett_h225_sctp = -1;
static gint ett_h225_AlternateTransportAddress = -1;
static gint ett_h225_UUIEsRequested = -1;
static gint ett_h225_Q954Details = -1;
static gint ett_h225_QseriesOptions = -1;
static gint ett_h225_associatedSessionIds = -1;
static gint ett_h225_RTPSession = -1;
static gint ett_h225_StatusUUIE = -1;
static gint ett_h225_StatusInquiryUUIE = -1;
static gint ett_h225_SetupAcknowledgeUUIE = -1;
static gint ett_h225_NotifyUUIE = -1;
static gint ett_h225_GSMUIM = -1;
static gint ett_h225_systemid = -1;
static gint ett_h225_ANSI41UIM = -1;
static gint ett_h225_MobileUIM = -1;
static gint ett_h225_e164Number = -1;
static gint ett_h225_privateNumber = -1;
static gint ett_h225_PartyNumber = -1;
static gint ett_h225_TunnelledProtocolAlternateIdentifier = -1;
static gint ett_h225_AliasAddress = -1;
static gint ett_h225_SupportedPrefix = -1;
static gint ett_h225_SupportedPrefixes = -1;
static gint ett_h225_H310Caps = -1;
static gint ett_h225_H320Caps = -1;
static gint ett_h225_H321Caps = -1;
static gint ett_h225_H322Caps = -1;
static gint ett_h225_H323Caps = -1;
static gint ett_h225_H324Caps = -1;
static gint ett_h225_VoiceCaps = -1;
static gint ett_h225_T120OnlyCaps = -1;
static gint ett_h225_NonStandardProtocol = -1;
static gint ett_h225_SIPCaps = -1;
static gint ett_h225_AddressPattern_range = -1;
static gint ett_h225_AddressPattern = -1;
static gint ett_h225_ConferenceList = -1;
static gint ett_h225_conferences = -1;
static gint ett_h225_T38FaxAnnexbOnlyCaps = -1;
static gint ett_h225_SupportedProtocols = -1;
static gint ett_h225_protocol = -1;
static gint ett_h225_GatewayInfo = -1;
static gint ett_h225_McuInfo = -1;
static gint ett_h225_TunnelledProtocol_id = -1;
static gint ett_h225_TunnelledProtocol = -1;
static gint ett_h225_TunnelledProtocols = -1;
static gint ett_h225_CicInfo_cic = -1;
static gint ett_h225_CicInfo = -1;
static gint ett_h225_GroupID_member = -1;
static gint ett_h225_GroupID = -1;
static gint ett_h225_CircuitIdentifier = -1;
static gint ett_h225_GenericIdentifier = -1;
static gint ett_h225_EnumeratedParameter = -1;
static gint ett_h225_parameters = -1;
static gint ett_h225_GenericData = -1;
static gint ett_h225_Content = -1;
static gint ett_h225_Content_compound = -1;
static gint ett_h225_Content_nested = -1;
static gint ett_h225_neededFeatures = -1;
static gint ett_h225_desiredFeatures = -1;
static gint ett_h225_supportedFeatures = -1;
static gint ett_h225_FeatureSet = -1;
static gint ett_h225_CallsAvailable = -1;
static gint ett_h225_voiceGwCallsAvailable = -1;
static gint ett_h225_h310GwCallsAvailable = -1;
static gint ett_h225_h320GwCallsAvailable = -1;
static gint ett_h225_h321GwCallsAvailable = -1;
static gint ett_h225_h322GwCallsAvailable = -1;
static gint ett_h225_h323GwCallsAvailable = -1;
static gint ett_h225_h324GwCallsAvailable = -1;
static gint ett_h225_t120OnlyGwCallsAvailable = -1;
static gint ett_h225_t38FaxAnnexbOnlyGwCallsAvailable = -1;
static gint ett_h225_terminalCallsAvailable = -1;
static gint ett_h225_mcuCallsAvailable = -1;
static gint ett_h225_sipGwCallsAvailable = -1;
static gint ett_h225_CallCapacityInfo = -1;
static gint ett_h225_CallCapacity = -1;
static gint ett_h225_VendorIdentifier = -1;
static gint ett_h225_CapacityReportingCapability = -1;
static gint ett_h225_CallCreditCapability = -1;
static gint ett_h225_BandwidthDetails = -1;
static gint ett_h225_CallTerminationCause = -1;
static gint ett_h225_CircuitInfo = -1;
static gint ett_h225_genericData = -1;
static gint ett_h225_fastStart = -1;
static gint ett_h225_InformationUUIE = -1;
static gint ett_h225_routeCallToSCN = -1;
static gint ett_h225_AdmissionRejectReason = -1;
static gint ett_h225_EncryptIntAlg = -1;
static gint ett_h225_NonIsoIntegrityMechanism = -1;
static gint ett_h225_IntegrityMechanism = -1;
static gint ett_h225_LocationRejectReason = -1;
static gint ett_h225_EndPointType = -1;
static gint ett_h225_CallProceedingUUIE = -1;
static gint ett_h225_CapacityReportingSpecification_when = -1;
static gint ett_h225_CapacityReportingSpecification = -1;
static gint ett_h225_ProgressUUIE = -1;
static gint ett_h225_EndPoint = -1;
static gint ett_h225_destExtraCallInfo = -1;
static gint ett_h225_remoteExtensionAddress = -1;
static gint ett_h225_rasAddress_sequence = -1;
static gint ett_h225_callSignalAddress = -1;
static gint ett_h225_ICV = -1;
static gint ett_h225_BandwidthConfirm = -1;
static gint ett_h225_UnregistrationConfirm = -1;
static gint ett_h225_NonStandardMessage = -1;
static gint ett_h225_InfoRequestAck = -1;
static gint ett_h225_InfoRequestNak = -1;
static gint ett_h225_ResourcesAvailableConfirm = -1;
static gint ett_h225_GatekeeperRequest = -1;
static gint ett_h225_integrity = -1;
static gint ett_h225_algorithmOIDs = -1;
static gint ett_h225_alternateEndpoints = -1;
static gint ett_h225_endpointAlias = -1;
static gint ett_h225_ServiceControlResponse = -1;
static gint ett_h225_DisengageReject = -1;
static gint ett_h225_BandwidthReject = -1;
static gint ett_h225_UnregistrationReject = -1;
static gint ett_h225_UnregistrationRequest = -1;
static gint ett_h225_endpointAliasPattern = -1;
static gint ett_h225_RegistrationReject = -1;
static gint ett_h225_invalidTerminalAliases = -1;
static gint ett_h225_terminalAlias = -1;
static gint ett_h225_terminalAliasPattern = -1;
static gint ett_h225_RegistrationRejectReason = -1;
static gint ett_h225_duplicateAlias = -1;
static gint ett_h225_GatekeeperReject = -1;
static gint ett_h225_ResourcesAvailableIndicate = -1;
static gint ett_h225_protocols = -1;
static gint ett_h225_CallCreditServiceControl = -1;
static gint ett_h225_ExtendedAliasAddress = -1;
static gint ett_h225_UnknownMessageResponse = -1;
static gint ett_h225_AdmissionRequest = -1;
static gint ett_h225_desiredProtocols = -1;
static gint ett_h225_destAlternatives = -1;
static gint ett_h225_srcAlternatives = -1;
static gint ett_h225_srcInfo = -1;
static gint ett_h225_DestinationInfo = -1;
static gint ett_h225_InfoRequest = -1;
static gint ett_h225_RequestInProgress = -1;
static gint ett_h225_ServiceControlDescriptor = -1;
static gint ett_h225_ServiceControlSession = -1;
static gint ett_h225_AlertingUUIE = -1;
static gint ett_h225_serviceControl = -1;
static gint ett_h225_alertingAddress = -1;
static gint ett_h225_ReleaseCompleteUUIE = -1;
static gint ett_h225_busyAddress = -1;
static gint ett_h225_FacilityUUIE = -1;
static gint ett_h225_alternativeAliasAddress = -1;
static gint ett_h225_AdmissionReject = -1;
static gint ett_h225_parallelH245Control = -1;
static gint ett_h225_languages = -1;
static gint ett_h225_SetupUUIE = -1;
static gint ett_h225_sourceAddress = -1;
static gint ett_h225_destinationAddress = -1;
static gint ett_h225_destExtraCRV = -1;
static gint ett_h225_h245SecurityCapability = -1;
static gint ett_h225_additionalSourceAddresses = -1;
static gint ett_h225_ConnectUUIE = -1;
static gint ett_h225_connectedAddress = -1;
static gint ett_h225_h323_message_body = -1;
static gint ett_h225_LocationConfirm = -1;
static gint ett_h225_supportedProtocols = -1;
static gint ett_h225_modifiedSrcInfo = -1;
static gint ett_h225_LocationReject = -1;
static gint ett_h225_callSpecific = -1;
static gint ett_h225_ServiceControlIndication = -1;
static gint ett_h225_RasUsageInformation = -1;
static gint ett_h225_T_nonStandardUsageFields = -1;
static gint ett_h225_GatekeeperConfirm = -1;
static gint ett_h225_RegistrationRequest = -1;
static gint ett_h225_supportedH248Packages = -1;
static gint ett_h225_DisengageConfirm = -1;
static gint ett_h225_AdmissionConfirm = -1;
static gint ett_h225_usageSpec = -1;
static gint ett_h225_DisengageRequest = -1;
static gint ett_h225_LocationRequest = -1;
static gint ett_h225_SourceInfo = -1;
static gint ett_h225_sourceEndpointInfo = -1;
static gint ett_h225_BandwidthRequest = -1;
static gint ett_h225_bandwidthDetails = -1;
static gint ett_h225_admissionConfirmSequence = -1;
static gint ett_h225_tunnelledSignallingMessage = -1;
static gint ett_h225_messageContent = -1;
static gint ett_h225_H323_UU_PDU = -1;
static gint ett_h225_h4501SupplementaryService = -1;
static gint ett_h225_h245Control = -1;
static gint ett_h225_T_nonStandardControl = -1;
static gint ett_h225_preGrantedARQ = -1;
static gint ett_h225_RegistrationConfirm = -1;
static gint ett_h225_pdu_item = -1;
static gint ett_h225_pdu = -1;
static gint ett_h225_perCallInfo_item = -1;
static gint ett_h225_audio = -1;
static gint ett_h225_video = -1;
static gint ett_h225_data = -1;
static gint ett_h225_substituteConfIDs = -1;
static gint ett_h225_perCallInfo = -1;
static gint ett_h225_InfoRequestResponse = -1;
static gint ett_h225_RasMessage = -1;
static gint ett_h225_H323_UserInformation = -1;
static gint ett_h225_user_data = -1;
static gint ett_h225_H221NonStandard = -1;
static gint ett_h225_NonStandardIdentifier = -1;
static gint ett_h225_NonStandardParameter = -1;
static gint ett_h225_aliasAddress_sequence = -1;
static gint ett_h225_T_cryptoEPPwdHash = -1;
static gint ett_h225_T_cryptoGKPwdHash = -1;
static gint ett_h225_AuthenticationMechanism_sequence_of = -1;
/*bbb*/

/* Subdissector tables */
static dissector_table_t nsp_object_dissector_table;
static dissector_table_t nsp_h221_dissector_table;
static dissector_table_t tp_dissector_table;


static dissector_handle_t h245_handle=NULL;
static dissector_handle_t h245dg_handle=NULL;
static dissector_handle_t h4501_handle=NULL;


static dissector_handle_t nsp_handle;
static dissector_handle_t tp_handle;

static guint32  ipv4_address;
static guint32  ipv4_port;
static char object[256];
static guint32 t35CountryCode;
static guint32 t35Extension;
static guint32 manufacturerCode;
static guint32 h221NonStandard;
static char tpID[256];

static gboolean contains_faststart = FALSE;

static const true_false_string tfs_unsolicited_bit = {
	"unsolicited bit is SET",
	"unsolicited bit is NOT set"
};

static const true_false_string tfs_needResponse_bit = {
	"needResponse bit is SET",
	"needResponse bit is NOT set"
};

static const true_false_string tfs_originator_bit = {
	"originator bit is SET",
	"originator bit is NOT set"
};

static const true_false_string tfs_sent_bit = {
	"sent bit is SET",
	"sent bit is NOT set"
};

static const true_false_string tfs_useGKCallSignalAddressToAnswer_bit = {
	"useGKCallSignalAddressToAnswer bit is SET",
	"useGKCallSignalAddressToAnswer bit is NOT set"
};

static const true_false_string tfs_answerCall_bit = {
	"answerCall bit is SET",
	"answerCall bit is NOT set"
};

static const true_false_string tfs_useGKCallSignalAddressToMakeCall_bit = {
	"useGKCallSignalAddressToMakeCall bit is SET",
	"useGKCallSignalAddressToMakeCall bit is NOT set"
};

static const true_false_string tfs_makeCall_bit = {
	"makeCall bit is SET",
	"makeCall bit is NOT set"
};

static const true_false_string tfs_h245Tunneling_bit = {
	"h245Tunneling bit is SET",
	"h245Tunneling bit is NOT set"
};

static const true_false_string tfs_willRespondToIRR_bit = {
	"willRespondToIRR bit is SET",
	"willRespondToIRR bit is NOT set"
};

static const true_false_string tfs_keepAlive_bit = {
	"keepAlive bit is SET",
	"keepAlive bit is NOT set"
};

static const true_false_string tfs_discoveryComplete_bit = {
	"discoveryComplete bit is SET",
	"discoveryComplete bit is NOT set"
};

static const true_false_string tfs_answeredCall_bit = {
	"answeredCall bit is SET",
	"answeredCall bit is NOT set"
};

static const true_false_string tfs_canOverlapSend_bit = {
	"canOverlapSend bit is SET",
	"canOverlapSend bit is NOT set"
};

static const true_false_string tfs_mediaWaitForConnect_bit = {
	"mediaWaitForConnect bit is SET",
	"mediaWaitForConnect bit is NOT set"
};

static const true_false_string tfs_activeMC_bit = {
	"activeMC bit is SET",
	"activeMC bit is NOT set"
};

static const true_false_string tfs_canMapAlias_bit = {
	"canMapAlias bit is SET",
	"canMapAlias bit is NOT set"
};

static const true_false_string tfs_willSupplyUUIEs_bit = {
	"willSupplyUUIEs bit is SET",
	"willSupplyUUIEs bit is NOT set"
};

static const true_false_string tfs_canMapSrcAlias_bit = {
	"canMapSrcAlias bit is SET",
	"canMapSrcAlias bit is NOT set"
};

static const true_false_string tfs_enforceCallDurationLimit_bit = {
	"enforceCallDurationLimit bit is SET",
	"enforceCallDurationLimit bit is NOT set"
};

static const true_false_string tfs_almostOutOfResources_bit = {
	"almostOutOfResources bit is SET",
	"almostOutOfResources bit is NOT set"
};

static const true_false_string tfs_maintainConnection_bit = {
	"maintainConnection bit is SET",
	"maintainConnection bit is NOT set"
};

static const true_false_string tfs_multipleCalls_bit = {
	"multipleCalls bit is SET",
	"multipleCalls bit is NOT set"
};

static const true_false_string tfs_undefinedNode_bit = {
	"undefinedNode bit is SET",
	"undefinedNode bit is NOT set"
};

static const true_false_string tfs_mc_bit = {
	"mc bit is SET",
	"mc bit is NOT set"
};


static const true_false_string tfs_fastConnectRefused_bit = {
	"fastConnectRefused bit is SET",
	"fastConnectRefused bit is NOT set"
};

static const true_false_string tfs_BandwidthDetails_multicast_bit = {
	"BandwidthDetails_multicast bit is SET",
	"BandwidthDetails_multicast bit is NOT set"
};

static const true_false_string tfs_BandwidthDetails_sender_bit = {
	"BandwidthDetails_sender bit is SET",
	"BandwidthDetails_sender bit is NOT set"
};

static const true_false_string tfs_canEnforceDurationLimit_bit = {
	"canEnforceDurationLimit bit is SET",
	"canEnforceDurationLimit bit is NOT set"
};

static const true_false_string tfs_canDisplayAmountString_bit = {
	"canDisplayAmountString bit is SET",
	"canDisplayAmountString bit is NOT set"
};

static const true_false_string tfs_canReportCallCapacity_bit = {
	"canReportCallCapacity bit is SET",
	"canReportCallCapacity bit is NOT set"
};

static const true_false_string tfs_replacementFeatureSet_bit = {
	"replacementFeatureSet bit is SET",
	"replacementFeatureSet bit is NOT set"
};

static const true_false_string tfs_Content_bool_bit = {
	"Content_bool bit is SET",
	"Content_bool bit is NOT set"
};

static const true_false_string tfs_q957Full_bit = {
	"q957Full bit is SET",
	"q957Full bit is NOT set"
};

static const true_false_string tfs_q956Full_bit = {
	"q956Full bit is SET",
	"q956Full bit is NOT set"
};

static const true_false_string tfs_q955Full_bit = {
	"q955Full bit is SET",
	"q955Full bit is NOT set"
};

static const true_false_string tfs_q953Full_bit = {
	"q953Full bit is SET",
	"q953Full bit is NOT set"
};

static const true_false_string tfs_q952Full_bit = {
	"q952Full bit is SET",
	"q952Full bit is NOT set"
};

static const true_false_string tfs_q951Full_bit = {
	"q951Full bit is SET",
	"q951Full bit is NOT set"
};

static const true_false_string tfs_q932Full_bit = {
	"q932Full bit is SET",
	"q932Full bit is NOT set"
};

static const true_false_string tfs_threePartyService_bit = {
	"threePartyService bit is SET",
	"threePartyService bit is NOT set"
};

static const true_false_string tfs_conferenceCalling_bit = {
	"conferenceCalling bit is SET",
	"conferenceCalling bit is NOT set"
};

static const true_false_string tfs_notify_bool_bit = {
	"notify_bool bit is SET",
	"notify_bool bit is NOT set"
};

static const true_false_string tfs_setupAcknowledge_bool_bit = {
	"setupAcknowledge_bool bit is SET",
	"setupAcknowledge_bool bit is NOT set"
};

static const true_false_string tfs_statusInquiry_bool_bit = {
	"statusInquiry_bool bit is SET",
	"statusInquiry_bool bit is NOT set"
};

static const true_false_string tfs_status_bool_bit = {
	"status_bool bit is SET",
	"status_bool bit is NOT set"
};

static const true_false_string tfs_empty_bool_bit = {
	"empty_bool bit is SET",
	"empty_bool bit is NOT set"
};

static const true_false_string tfs_progress_bool_bit = {
	"progress_bool bit is SET",
	"progress_bool bit is NOT set"
};

static const true_false_string tfs_facility_bool_bit = {
	"facility_bool bit is SET",
	"facility_bool bit is NOT set"
};

static const true_false_string tfs_releaseComplete_bool_bit = {
	"releaseComplete_bool bit is SET",
	"releaseComplete_bool bit is NOT set"
};

static const true_false_string tfs_information_bool_bit = {
	"information_bool bit is SET",
	"information_bool bit is NOT set"
};

static const true_false_string tfs_alerting_bool_bit = {
	"alerting_bool bit is SET",
	"alerting_bool bit is NOT set"
};

static const true_false_string tfs_connect_bool_bit = {
	"connect_bool bit is SET",
	"connect_bool bit is NOT set"
};

static const true_false_string tfs_callProceeding_bool_bit = {
	"callProceeding_bool bit is SET",
	"callProceeding_bool bit is NOT set"
};

static const true_false_string tfs_setup_bool_bit = {
	"setup_bool bit is SET",
	"setup_bool bit is NOT set"
};

static const true_false_string tfs_altGKisPermanent_bit = {
	"altGKisPermanent bit is SET",
	"altGKisPermanent bit is NOT set"
};

static const true_false_string tfs_needToRegister_bit = {
	"needToRegister bit is SET",
	"needToRegister bit is NOT set"
};



static gboolean h225_reassembly = TRUE;



static int
dissect_h225_NULL(tvbuff_t *tvb _U_, int offset, packet_info *pinfo _U_, proto_tree *tree _U_)
{
	return offset;
}

static const value_string PresentationIndicator_vals[] = {
	{ 0, "presentationAllowed" },
	{ 1, "presentationRestricted" },
	{ 2, "addressNotAvailable" },
	{ 0, NULL}
};
static per_choice_t PresentationIndicator_choice[] = {
	{ 0, "presentationAllowed", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL},
	{ 1, "presentationRestricted", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL},
	{ 2, "addressNotAvailable", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL},
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_PresentationIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_PresentationIndicator, ett_h225_PresentationIndicator, PresentationIndicator_choice, "PresentationIndicator", NULL);
	return offset;
}


static const value_string conferenceGoal_vals[] = {
	{ 0, "create" },
	{ 1, "join" },
	{ 2, "invite" },
	{ 3, "capability-negotiation" },
	{ 4, "callIndependentSupplementaryService" },
	{ 0, NULL}
};
static per_choice_t conferenceGoal_choice[] = {
	{ 0, "create", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "join", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "invite", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "capability-negotiation", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "callIndependentSupplementaryService", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_conferenceGoal(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_conferenceGoal, ett_h225_conferenceGoal, conferenceGoal_choice, "conferenceGoal", NULL);
	return offset;
}


static const value_string ScnConnectionType_vals[] = {
	{ 0, "unknown" },
	{ 1, "bChannel" },
	{ 2, "hybrid2x64" },
	{ 3, "hybrid384" },
	{ 4, "hybrid1536" },
	{ 5, "hybrid1920" },
	{ 6, "multirate" },
	{ 0, NULL}
};
static per_choice_t ScnConnectionType_choice[] = {
	{ 0, "unknown", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "bChannel", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "hybrid2x64", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "hybrid384", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "hybrid1536", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "hybrid1920", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "multirate", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_ScnConnectionType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_ScnConnectionType, ett_h225_ScnConnectionType, ScnConnectionType_choice, "ScnConnectionType", NULL);
	return offset;
}


static const value_string ScnConnectionAggregation_vals[] = {
	{ 0, "auto" },
	{ 1, "none" },
	{ 2, "h221" },
	{ 3, "bonded-mode1" },
	{ 4, "bonded-mode2" },
	{ 5, "bonded-mode3" },
	{ 0, NULL}
};
static per_choice_t ScnConnectionAggregation_choice[] = {
	{ 0, "auto", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "none", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "h221", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "bonded-mode1", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "bonded-mode2", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "bonded-mode3", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_ScnConnectionAggregation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_ScnConnectionAggregation, ett_h225_ScnConnectionAggregation, ScnConnectionAggregation_choice, "ScnConnectionAggregation", NULL);
	return offset;
}


const value_string FacilityReason_vals[] = {
	{ 0, "routeCallToGatekeeper" },
	{ 1, "callForwarded" },
	{ 2, "routeCallToMC" },
	{ 3, "undefinedReason" },
	{ 4, "conferenceListChoice" },
	{ 5, "startH245" },
	{ 6, "noH245" },
	{ 7, "newTokens" },
	{ 8, "featureSetUpdate" },
	{ 9, "forwardedElements" },
	{ 10, "transportedInformation" },
	{ 0, NULL}
};
static per_choice_t FacilityReason_choice[] = {
	{ 0, "routeCallToGatekeeper", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "callForwarded", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "routeCallToMC", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "conferenceListChoice", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "startH245", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "noH245", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 7, "newTokens", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 8, "featureSetUpdate", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 9, "forwardedElements", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 10, "transportedInformation", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_FacilityReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_FacilityReason, ett_h225_FacilityReason, FacilityReason_choice, "FacilityReason", &value);
	h225_pi.reason = value;
	return offset;
}



static const value_string PublicTypeOfNumber_vals[] = {
	{ 0, "unknown" },
	{ 1, "internationalNumber" },
	{ 2, "nationalNumber" },
	{ 3, "networkSpecificNumber" },
	{ 4, "subscriberNumber" },
	{ 5, "abbreviatedNumber" },
	{ 0, NULL}
};
static per_choice_t PublicTypeOfNumber_choice[] = {
	{ 0, "unknown", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "internationalNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "nationalNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "networkSpecificNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "subscriberNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "abbreviatedNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_PublicTypeOfNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_PublicTypeOfNumber, ett_h225_PublicTypeOfNumber, PublicTypeOfNumber_choice, "PublicTypeOfNumber", NULL);
	return offset;
}



static const value_string PrivateTypeOfNumber_vals[] = {
	{ 0, "unknown" },
	{ 1, "level2RegionalNumber" },
	{ 2, "level1RegionalNumber" },
	{ 3, "pISNSpecificNumber" },
	{ 4, "localNumber" },
	{ 5, "abbreviatedNumber" },
	{ 0, NULL}
};
static per_choice_t PrivateTypeOfNumber_choice[] = {
	{ 0, "unknown", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "level2RegionalNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "level1RegionalNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "pISNSpecificNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "localNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "abbreviatedNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_PrivateTypeOfNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_PrivateTypeOfNumber, ett_h225_PrivateTypeOfNumber, PrivateTypeOfNumber_choice, "PrivateTypeOfNumber", NULL);
	return offset;
}


static const value_string UseSpecifiedTransport_vals[] = {
	{ 0, "tcp" },
	{ 1, "annexE" },
	{ 2, "sctp" },
	{ 0, NULL}
};
static per_choice_t UseSpecifiedTransport_choice[] = {
	{ 0, "tcp", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "annexE", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "sctp", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_UseSpecifiedTransport(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_UseSpecifiedTransport, ett_h225_UseSpecifiedTransport, UseSpecifiedTransport_choice, "UseSpecifiedTransport", NULL);
	return offset;
}



static const value_string SecurityErrors_vals[] = {
	{ 0, "securityWrongSyncTime" },
	{ 1, "securityReplay" },
	{ 2, "securityWrongGeneralID" },
	{ 3, "securityWrongSendersID" },
	{ 4, "securityIntegrityFailed" },
	{ 5, "securityWrongOID" },
	{ 6, "securityDHmismatch" },
	{ 7, "securityCertificateExpired" },
	{ 8, "securityCertificateDateInvalid" },
	{ 9, "securityCertificateRevoked" },
	{ 10, "securityCertificateNotReadable" },
	{ 11, "securityCertificateSignatureInvalid" },
	{ 12, "securityCertificateMissing" },
	{ 13, "securityCertificateIncomplete" },
	{ 14, "securityUnsupportedCertificateAlgOID" },
	{ 15, "securityUnknownCA" },
	{ 0, NULL}
};
static per_choice_t SecurityErrors_choice[] = {
	{ 0, "securityWrongSyncTime", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "securityReplay", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "securityWrongGeneralID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "securityWrongSendersID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "securityIntegrityFailed", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "securityWrongOID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "securityDHmismatch", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 7, "securityCertificateExpired", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 8, "securityCertificateDateInvalid", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 9, "securityCertificateRevoked", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 10, "securityCertificateNotReadable", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 11, "securityCertificateSignatureInvalid", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 12, "securityCertificateMissing", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 13, "securityCertificateIncomplete", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 14, "securityUnsupportedCertificateAlgOID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 15, "securityUnknownCA", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_SecurityErrors(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_SecurityErrors, ett_h225_SecurityErrors, SecurityErrors_choice, "SecurityErrors", NULL);
	return offset;
}



static const value_string SecurityErrors2_vals[] = {
	{ 0, "securityWrongSyncTime" },
	{ 1, "securityReplay" },
	{ 2, "securityWrongGeneralID" },
	{ 3, "securityWrongSendersID" },
	{ 4, "securityIntegrityFailed" },
	{ 5, "securityWrongOID" },
	{ 0, NULL}
};
static per_choice_t SecurityErrors2_choice[] = {
	{ 0, "securityWrongSyncTime", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "securityReplay", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "securityWrongGeneralID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "securityWrongSendersID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "securityIntegrityFailed", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "securityWrongOID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_SecurityErrors2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_SecurityErrors2, ett_h225_SecurityErrors2, SecurityErrors2_choice, "SecurityErrors2", NULL);
	return offset;
}


static const value_string ServiceControlSession_reason_vals[] = {
	{ 0, "open" },
	{ 1, "refresh" },
	{ 2, "close" },
	{ 0, NULL}
};
static per_choice_t ServiceControlSession_reason_choice[] = {
	{ 0, "open", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "refresh", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "close", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_ServiceControlSession_reason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_ServiceControlSession_reason, ett_h225_ServiceControlSession_reason, ServiceControlSession_reason_choice, "ServiceControlSession_reason", NULL);
	return offset;
}



static const value_string billingMode_vals[] = {
	{ 0, "credit" },
	{ 1, "debit" },
	{ 0, NULL}
};
static per_choice_t billingMode_choice[] = {
	{ 0, "credit", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "debit", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_billingMode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_billingMode, ett_h225_billingMode, billingMode_choice, "billingMode", NULL);
	return offset;
}



static const value_string CCSCcallStartingPoint_vals[] = {
	{ 0, "alerting" },
	{ 1, "connect" },
	{ 0, NULL}
};
static per_choice_t CCSCcallStartingPoint_choice[] = {
	{ 0, "alerting", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "connect", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_CCSCcallStartingPoint(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_CCSCcallStartingPoint, ett_h225_CCSCcallStartingPoint, CCSCcallStartingPoint_choice, "CCSCcallStartingPoint", NULL);
	return offset;
}



const value_string GatekeeperRejectReason_vals[] = {
	{ 0, "resourceUnavailable" },
	{ 1, "terminalExcluded" },
	{ 2, "invalidRevision" },
	{ 3, "undefinedReason" },
	{ 4, "securityDenial" },
	{ 5, "genericDataReason" },
	{ 6, "neededFeatureNotSupported" },
	{ 7, "securityError" },
	{ 0, NULL}
};
static per_choice_t GatekeeperRejectReason_choice[] = {
	{ 0, "resourceUnavailable", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "terminalExcluded", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "invalidRevision", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "securityDenial", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "genericDataReason", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "neededFeatureNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 7, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_GatekeeperRejectReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_GatekeeperRejectReason, ett_h225_GatekeeperRejectReason, GatekeeperRejectReason_choice, "GatekeeperRejectReason", &value);
	h225_pi.reason = value;
	return offset;
}



const value_string UnregRequestReason_vals[] = {
	{ 0, "reregistrationRequired" },
	{ 1, "ttlExpired" },
	{ 2, "securityDenial" },
	{ 3, "undefinedReason" },
	{ 4, "maintenance" },
	{ 5, "securityError" },
	{ 0, NULL}
};
static per_choice_t UnregRequestReason_choice[] = {
	{ 0, "reregistrationRequired", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "ttlExpired", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "securityDenial", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "maintenance", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors2 },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_UnregRequestReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_UnregRequestReason, ett_h225_UnregRequestReason, UnregRequestReason_choice, "UnregRequestReason", &value);
	h225_pi.reason = value;
	return offset;
}



const value_string UnregRejectReason_vals[] = {
	{ 0, "notCurrentlyRegistered" },
	{ 1, "callInProgress" },
	{ 2, "undefinedReason" },
	{ 3, "permissionDenied" },
	{ 4, "securityDenial" },
	{ 5, "securityError" },
	{ 0, NULL}
};
static per_choice_t UnregRejectReason_choice[] = {
	{ 0, "notCurrentlyRegistered", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "callInProgress", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "permissionDenied", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "securityDenial", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors2 },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_UnregRejectReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_UnregRejectReason, ett_h225_UnregRejectReason, UnregRejectReason_choice, "UnregRejectReason", &value);
	h225_pi.reason = value;
	return offset;
}



static const value_string CallType_vals[] = {
	{ 0, "pointToPoint" },
	{ 1, "oneToN" },
	{ 2, "nToOne" },
	{ 3, "nToN" },
	{ 0, NULL}
};
static per_choice_t CallType_choice[] = {
	{ 0, "pointToPoint", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "oneToN", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "nToOne", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "nToN", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_CallType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_CallType, ett_h225_CallType, CallType_choice, "CallType", NULL);
	return offset;
}


static const value_string CallModel_vals[] = {
	{ 0, "direct" },
	{ 1, "gatekeeperRouted" },
	{ 0, NULL}
};
static per_choice_t CallModel_choice[] = {
	{ 0, "direct", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "gatekeeperRouted", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_CallModel(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_CallModel, ett_h225_CallModel, CallModel_choice, "CallModel", NULL);
	return offset;
}



static const value_string TransportQOS_vals[] = {
	{ 0, "endpointControlled" },
	{ 1, "gatekeeperControlled" },
	{ 2, "noControl" },
	{ 0, NULL}
};
static per_choice_t TransportQOS_choice[] = {
	{ 0, "endpointControlled", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "gatekeeperControlled", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "noControl", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_TransportQOS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_TransportQOS, ett_h225_TransportQOS, TransportQOS_choice, "TransportQOS", NULL);
	return offset;
}


const value_string BandRejectReason_vals[] = {
	{ 0, "notBound" },
	{ 1, "invalidConferenceID" },
	{ 2, "invalidPermission" },
	{ 3, "insufficientResources" },
	{ 4, "invalidRevision" },
	{ 5, "undefinedReason" },
	{ 6, "securityDenial" },
	{ 7, "securityError" },
	{ 0, NULL}
};
static per_choice_t BandRejectReason_choice[] = {
	{ 0, "notBound", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "invalidConferenceID", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "invalidPermission", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "insufficientResources", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "invalidRevision", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "securityDenial", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 7, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors2 },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_BandRejectReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_BandRejectReason, ett_h225_BandRejectReason, BandRejectReason_choice, "BandRejectReason", &value);
	h225_pi.reason = value;
	return offset;
}



const value_string DisengageReason_vals[] = {
	{ 0, "forcedDrop" },
	{ 1, "normalDrop" },
	{ 2, "undefinedReason" },
	{ 0, NULL}
};
static per_choice_t DisengageReason_choice[] = {
	{ 0, "forcedDrop", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "normalDrop", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_DisengageReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_DisengageReason, ett_h225_DisengageReason, DisengageReason_choice, "DisengageReason", &value);
	h225_pi.reason = value;
	return offset;
}



const value_string DisengageRejectReason_vals[] = {
	{ 0, "notRegistered" },
	{ 1, "requestToDropOther" },
	{ 2, "securityDenial" },
	{ 3, "securityError" },
	{ 0, NULL}
};
static per_choice_t DisengageRejectReason_choice[] = {
	{ 0, "notRegistered", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "requestToDropOther", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "securityDenial", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors2 },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_DisengageRejectReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_DisengageRejectReason, ett_h225_DisengageRejectReason, DisengageRejectReason_choice, "DisengageRejectReason", &value);
	h225_pi.reason = value;
	return offset;
}




const value_string InfoRequestNakReason_vals[] = {
	{ 0, "notRegistered" },
	{ 1, "securityDenial" },
	{ 2, "undefinedReason" },
	{ 3, "securityError" },
	{ 0, NULL}
};
static per_choice_t InfoRequestNakReason_choice[] = {
	{ 0, "notRegistered", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "securityDenial", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors2 },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_InfoRequestNakReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_InfoRequestNakReason, ett_h225_InfoRequestNakReason, InfoRequestNakReason_choice, "InfoRequestNakReason", &value);
	h225_pi.reason = value;
	return offset;
}



static const value_string SCRresult_vals[] = {
	{ 0, "started" },
	{ 1, "failed" },
	{ 2, "stopped" },
	{ 3, "notAvailable" },
	{ 4, "neededFeatureNotSupported" },
	{ 0, NULL}
};
static per_choice_t SCRresult_choice[] = {
	{ 0, "started", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "failed", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "stopped", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "notAvailable", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "neededFeatureNotSupported", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_SCRresult(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_SCRresult, ett_h225_SCRresult, SCRresult_choice, "SCRresult", NULL);
	return offset;
}

static int
dissect_h225_object(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_object_identifier(tvb, offset, pinfo, tree,
				hf_h225_object,
				object);
	return offset;
}

static int
dissect_h225_t35CountryCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree,
				hf_h225_t35CountryCode, 0, 255,
				&t35CountryCode, NULL, FALSE);
	return offset;
}


static int
dissect_h225_t35Extension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree,
				hf_h225_t35Extension, 0, 255,
				&t35Extension, NULL, FALSE);
	return offset;
}

static int
dissect_h225_manufacturerCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree,
				hf_h225_manufacturerCode, 0, 65535,
				&manufacturerCode, NULL, FALSE);
	return offset;
}

static per_sequence_t H221NonStandard_sequence[] = {
	{ "t35CountryCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_t35CountryCode },
	{ "t35Extension", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_t35Extension },
	{ "manufacturerCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_manufacturerCode },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_h221NonStandard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	t35CountryCode = 0;
	t35Extension = 0;
	manufacturerCode = 0;

	offset = dissect_per_sequence(tvb, offset, pinfo, tree,
				hf_h225_h221NonStandard,
				ett_h225_H221NonStandard, H221NonStandard_sequence);

	h221NonStandard = ((t35CountryCode * 256) + t35Extension) * 65536 + manufacturerCode;

	proto_tree_add_uint(tree, hf_h221Manufacturer, tvb, (offset>>3)-4,4,h221NonStandard);

   	return offset;
}

static const value_string NonStandardIdentifier_vals[] = {
	{ 0,	"object" },
	{ 1,	"h221NonStandard" },
	{ 0, NULL }
};
static per_choice_t NonStandardIdentifier_choice[] = {
	{ 0,	"object", ASN1_EXTENSION_ROOT,
		dissect_h225_object },
	{ 1,	"h221NonStandard", ASN1_EXTENSION_ROOT,
		dissect_h225_h221NonStandard },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_nonStandardIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;

	*object = '\0';
	h221NonStandard = 0;

	offset = dissect_per_choice(tvb, offset, pinfo, tree,
				hf_h225_nonStandardIdentifier,
				ett_h225_NonStandardIdentifier, NonStandardIdentifier_choice, "NonStandardIdentifier",
				&value);

	switch (value) {
		case 0 :  /* object */
			nsp_handle = dissector_get_string_handle(nsp_object_dissector_table, object);
			break;
		case 1 :  /* h221NonStandard */
			nsp_handle = dissector_get_port_handle(nsp_h221_dissector_table, h221NonStandard);
			break;
		default :
			nsp_handle = NULL;
    }

	return offset;
}

static int
dissect_h225_nsp_data(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value_offset, value_len;
	tvbuff_t *next_tvb;

	offset = dissect_per_octet_string(tvb, offset, pinfo, tree,
				hf_h225_nsp_data, -1, -1,
				&value_offset, &value_len);

	if (value_len > 0) {
		next_tvb = tvb_new_subset(tvb, value_offset, value_len, value_len);
		call_dissector((nsp_handle)?nsp_handle:data_handle, next_tvb, pinfo, tree);
	}

	return offset;
}

static per_sequence_t NonStandardParameter_sequence[] = {
	{ "nonStandardIdentifier", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_nonStandardIdentifier },
	{ "data", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_nsp_data },
	{ NULL, 0, 0, NULL }
};

int
dissect_h225_NonStandardParameter(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index)
{
	nsp_handle = NULL;

	offset = dissect_per_sequence(tvb, offset, pinfo, tree,
				hf_index,
				ett_h225_NonStandardParameter, NonStandardParameter_sequence);

	return offset;
}


static int
dissect_h225_nonStandardData(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree,
				hf_h225_nonStandardData);
	return offset;
}

static per_sequence_t GatekeeperInfo_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_GatekeeperInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GatekeeperInfo, ett_h225_GatekeeperInfo, GatekeeperInfo_sequence);
	return offset;
}

static int
dissect_h225_nonStandard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree,
				hf_h225_nonStandard);
	return offset;
}

static const value_string SecurityServiceMode_vals[] = {
	{ 0, "nonStandard" },
	{ 1, "none" },
	{ 2, "default" },
	{ 0, NULL}
};
static per_choice_t SecurityServiceMode_choice[] = {
	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
		dissect_h225_nonStandard },
	{ 1, "none", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "default", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_SecurityServiceMode_encryption(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_SecurityServiceMode_encryption, ett_h225_SecurityServiceMode_encryption, SecurityServiceMode_choice, "Encryption", NULL);
	return offset;
}
static int
dissect_h225_SecurityServiceMode_authentication(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_SecurityServiceMode_authentication, ett_h225_SecurityServiceMode_authentication, SecurityServiceMode_choice, "Authentication", NULL);
	return offset;
}
static int
dissect_h225_SecurityServiceMode_integrity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_SecurityServiceMode_integrity, ett_h225_SecurityServiceMode_integrity, SecurityServiceMode_choice, "Integrity", NULL);
	return offset;
}



static per_sequence_t SecurityCapabilities_sequence[] = {
	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandard },
	{ "encryption", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SecurityServiceMode_encryption },
	{ "authenticaton", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SecurityServiceMode_authentication },
	{ "integrity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SecurityServiceMode_integrity },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_SecurityCapabilities_tls(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SecurityCapabilities_tls, ett_h225_SecurityCapabilities_tls, SecurityCapabilities_sequence);
	return offset;
}
static int
dissect_h225_SecurityCapabilities_ipsec(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SecurityCapabilities_ipsec, ett_h225_SecurityCapabilities_ipsec, SecurityCapabilities_sequence);
	return offset;
}




static const value_string H245Security_vals[] = {
	{ 0, "nonStandard" },
	{ 1, "noSecurity" },
	{ 2, "tls" },
	{ 3, "ipsec" },
	{ 0, NULL}
};
static per_choice_t H245Security_choice[] = {
	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
		dissect_h225_nonStandard },
	{ 1, "noSecurity", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "tls", ASN1_EXTENSION_ROOT,
		dissect_h225_SecurityCapabilities_tls },
	{ 3, "ipsec", ASN1_EXTENSION_ROOT,
		dissect_h225_SecurityCapabilities_ipsec },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_H245Security(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_H245Security, ett_h225_H245Security, H245Security_choice, "H245Security", NULL);
	return offset;
}

static int
dissect_h225_nonStandardUsageTypes_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree,
				hf_h225_nonStandardUsageTypes_item);
	return offset;
}

static int
dissect_h225_nonStandardUsageTypes(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence_of(tvb, offset, pinfo, tree,
				hf_h225_nonStandardUsageTypes,
				ett_h225_T_nonStandardUsageTypes, dissect_h225_nonStandardUsageTypes_item);
	return offset;
}


static per_sequence_t RasUsageInfoTypes_sequence[] = {
	{ "nonStandardUsageTypes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_nonStandardUsageTypes },
	{ "startTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "endTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "terminationCause", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RasUsageInfoTypes(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RasUsageInfoTypes, ett_h225_RasUsageInfoTypes, RasUsageInfoTypes_sequence);
	return offset;
}
static int
dissect_h225_usageReportingCapability(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_usageReportingCapability, ett_h225_RasUsageInfoTypes, RasUsageInfoTypes_sequence);
	return offset;
}



static int
dissect_h225_BandWidth(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_BandWidth, 0, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}



static int
dissect_h225_channelRate(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_channelRate, 0, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}



static int
dissect_h225_totalBandwidthRestriction(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_totalBandwidthRestriction, 0, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}


static int
dissect_h225_allowedBandWidth(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_allowedBandWidth, 0, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}



static int
dissect_h225_channelMultiplier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_channelMultiplier, 1, 256,
		NULL, NULL, FALSE);
	return offset;
}


static per_sequence_t DataRate_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "channelRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_channelRate },
	{ "channelMultiplier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_channelMultiplier },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_DataRate(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_DataRate, ett_h225_DataRate, DataRate_sequence);
	return offset;
}
static int
dissect_h225_gatewayDataRate(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_gatewayDataRate, ett_h225_DataRate, DataRate_sequence);
	return offset;
}


static int
dissect_h225_dataRatesSupported(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_dataRatesSupported, ett_h225_dataRatesSupported, dissect_h225_DataRate );
	return offset;
}


static per_sequence_t TerminalInfo_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_TerminalInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_TerminalInfo, ett_h225_TerminalInfo, TerminalInfo_sequence);
	return offset;
}


static int
dissect_h225_h248Message(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_h248Message, -1, -1, NULL, NULL);
	return offset;
}


static per_sequence_t StimulusControl_sequence[] = {
	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandard },
	{ "isText", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "h248Message", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h248Message},
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_StimulusControl(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_StimulusControl, ett_h225_StimulusControl, StimulusControl_sequence);
	return offset;
}




static int
dissect_h225_conferenceID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_conferenceID, 16, 16, NULL, NULL);
	return offset;
}



static int
dissect_h225_replaceWithConferenceInvite(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_replaceWithConferenceInvite, 16, 16, NULL, NULL);
	return offset;
}


static int
dissect_h225_nonStandardReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree,
				hf_h225_nonStandardReason);
	return offset;
}

const value_string ReleaseCompleteReason_vals[] = {
	{ 0, "noBandwidth" },
	{ 1, "gatekeeperResources" },
	{ 2, "unreachableDestination" },
	{ 3, "destinationRejection" },
	{ 4, "invalidRevision" },
	{ 5, "noPermission" },
	{ 6, "unreachableGatekeeper" },
	{ 7, "gatewayResources" },
	{ 8, "badFormatAddress" },
	{ 9, "adaptiveBusy" },
	{ 10, "inConf" },
	{ 11, "undefinedReason" },
	{ 12, "facilityCallDeflection" },
	{ 13, "securityDenied" },
	{ 14, "calledPartyNotRegistered" },
	{ 15, "callerNotRegistered" },
	{ 16, "newConnectionNeeded" },
	{ 17, "nonStandardReason" },
	{ 18, "replaceWithConferenceInvite" },
	{ 19, "genericDataReason" },
	{ 20, "neededFeatureNotSupported" },
	{ 21, "tunnelledSignallingRejected" },
	{ 22, "invalidCID" },
	{ 23, "invalidCID" },
	{ 24, "securityError" },
	{ 25, "hopCountExceeded" },
	{ 0, NULL}
};
static per_choice_t ReleaseCompleteReason_choice[] = {
	{ 0, "noBandwidth", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "gatekeeperResources", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "unreachableDestination", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "destinationRejection", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "invalidRevision", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "noPermission", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "unreachableGatekeeper", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 7, "gatewayResources", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 8, "badFormatAddress", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 9, "adaptiveBusy", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 10, "inConf", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 11, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 12, "facilityCallDeflection", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 13, "securityDenied", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 14, "calledPartyNotRegistered", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 15, "callerNotRegistered", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 16, "newConnectionNeeded", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 17, "nonStandardReason", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_nonStandardReason },
	{ 18, "replaceWithConferenceInvite", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_replaceWithConferenceInvite },
	{ 19, "genericDataReason", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 20, "neededFeatureNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 21, "tunnelledSignallingRejected", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 22, "invalidCID", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 23, "invalidCID", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 24, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors },
	{ 25, "hopCountExceeded", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_ReleaseCompleteReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_ReleaseCompleteReason, ett_h225_ReleaseCompleteReason, ReleaseCompleteReason_choice, "ReleaseCompleteReason", &value);
	h225_pi.reason = value;
	return offset;
}



static int
dissect_h225_numberOfScnConnections(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_numberOfScnConnections, 0, 65535,
		NULL, NULL, FALSE);
	return offset;
}

static per_sequence_t connectionParameters_sequence[] = {
	{ "connectionType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ScnConnectionType },
	{ "numberOfScnConnections", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_numberOfScnConnections },
	{ "connectionAggregation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ScnConnectionAggregation },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_connectionParameters(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_connectionParameters, ett_h225_connectionParameters, connectionParameters_sequence);
	return offset;
}




static int
dissect_h225_RequestSeqNum(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_RequestSeqNum, 1, 65535,
		&(h225_pi.requestSeqNum), NULL, FALSE);
	return offset;
}

static per_sequence_t RasUsageSpecification_when_sequence[] = {
	{ "start", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "end", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "inIrr", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RasUsageSpecification_when(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RasUsageSpecification_when, ett_h225_RasUsageSpecification_when, RasUsageSpecification_when_sequence);
	return offset;
}



static per_sequence_t RasUsageSpecification_callStartingPoint_sequence[] = {
	{ "alerting", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "connect", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RasUsageSpecification_callStartingPoint(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RasUsageSpecification_callStartingPoint, ett_h225_RasUsageSpecification_callStartingPoint, RasUsageSpecification_callStartingPoint_sequence);
	return offset;
}




static per_sequence_t RasUsageSpecification_sequence[] = {
	{ "when", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RasUsageSpecification_when },
	{ "callStartingPoint", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RasUsageSpecification_callStartingPoint },
	{ "required", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RasUsageInfoTypes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RasUsageSpecification(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RasUsageSpecification, ett_h225_RasUsageSpecification, RasUsageSpecification_sequence);
	return offset;
}




static int
dissect_h225_ipAddress_ip(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
	/* byte aligned */
	if(offset&0x07){
		offset=(offset&0xfffffff8)+8;
	}
	tvb_memcpy(tvb, (guint8 *)&ipv4_address, offset>>3, 4);
	proto_tree_add_ipv4(tree, hf_h225_ipAddress_ip, tvb, offset>>3, 4, ipv4_address);
	offset+=32;
	return offset;
}



static int
dissect_h225_ipAddress_port(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_ipAddress_port, 0, 65535,
		&ipv4_port, NULL, FALSE);
	return offset;
}



static per_sequence_t ipAddress_sequence[] = {
	{ "ip", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_ipAddress_ip },
	{ "port", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_ipAddress_port },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ipAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ipAddress, ett_h225_ipAddress, ipAddress_sequence);
	return offset;
}



static const value_string routing_vals[] = {
	{ 0, "strict" },
	{ 1, "loose" },
	{ 0, NULL}
};
static per_choice_t routing_choice[] = {
	{ 0, "strict", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "loose", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_routing(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_routing, ett_h225_routing, routing_choice, "routing", NULL);
	return offset;
}




static int
dissect_h225_route(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_route, ett_h225_route, dissect_h225_ipAddress_ip );
	return offset;
}

static per_sequence_t ipSourceRoute_sequence[] = {
	{ "ip", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ipAddress_ip },
	{ "port", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ipAddress_port },
	{ "route", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_route },
	{ "routing", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_routing },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ipSourceRoute(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ipSourceRoute, ett_h225_ipSourceRoute, ipSourceRoute_sequence);
	return offset;
}




static int
dissect_h225_ipxNode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_ipxNode, 6, 6, NULL, NULL);
	return offset;
}



static int
dissect_h225_ipxNetnum(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_ipxNetnum, 4, 4, NULL, NULL);
	return offset;
}


static int
dissect_h225_ipxPort(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_ipxPort, 2, 2, NULL, NULL);
	return offset;
}

static per_sequence_t ipxAddress_sequence[] = {
	{ "node", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_ipxNode },
	{ "netnum", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_ipxNetnum },
	{ "port", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_ipxPort },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ipxAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ipxAddress, ett_h225_ipxAddress, ipxAddress_sequence);
	return offset;
}


static int
dissect_h225_ipv6Address_ip(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_ipv6Address_ip, 16, 16, NULL, NULL);
	return offset;
}

static int
dissect_h225_ipv6Address_port(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_ipv6Address_port, 0, 65535,
		NULL, NULL, FALSE);
	return offset;
}



static per_sequence_t ip6Address_sequence[] = {
	{ "ip", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ipv6Address_ip },
	{ "port", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ipv6Address_port },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ip6Address(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ip6Address, ett_h225_ip6Address, ip6Address_sequence);
	return offset;
}




static int
dissect_h225_netBios(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_netBios, 16, 16, NULL, NULL);
	return offset;
}




static int
dissect_h225_nsap(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_nsap, 1, 20, NULL, NULL);
	return offset;
}

static int
dissect_h225_nonStandardAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree,
				hf_h225_nonStandardAddress);
	return offset;
}

static const value_string TransportAddress_vals[] = {
	{ 0, "ipAddress" },
	{ 1, "ipSourceRoute" },
	{ 2, "ipxAddress" },
	{ 3, "ip6Address" },
	{ 4, "netBios" },
	{ 5, "nsap" },
	{ 6, "nonStandardAddress" },
	{ 0, NULL}
};
static per_choice_t TransportAddress_choice[] = {
	{ 0, "ipAddress", ASN1_EXTENSION_ROOT,
		dissect_h225_ipAddress },
	{ 1, "ipSourceRoute", ASN1_EXTENSION_ROOT,
		dissect_h225_ipSourceRoute },
	{ 2, "ipxAddress", ASN1_EXTENSION_ROOT,
		dissect_h225_ipxAddress },
	{ 3, "ip6Address", ASN1_EXTENSION_ROOT,
		dissect_h225_ip6Address },
	{ 4, "netBios", ASN1_EXTENSION_ROOT,
		dissect_h225_netBios },
	{ 5, "nsap", ASN1_EXTENSION_ROOT,
		dissect_h225_nsap },
	{ 6, "nonStandardAddress", ASN1_EXTENSION_ROOT,
		dissect_h225_nonStandardAddress },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_transportID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_transportID, ett_h225_TransportAddress, TransportAddress_choice, "transportID", NULL);
	return offset;
}
static int
dissect_h225_alternativeAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_alternativeAddress, ett_h225_TransportAddress, TransportAddress_choice, "alternativeAddress", NULL);
	return offset;
}
static int
dissect_h225_sourceCallSignalAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_sourceCallSignalAddress, ett_h225_TransportAddress, TransportAddress_choice, "sourceCallSignalAddress", NULL);
	return offset;
}
static int
dissect_h225_CallSignalAddress2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_CallSignalAddress2, ett_h225_TransportAddress, TransportAddress_choice, "CallSignalAddress2", NULL);
	return offset;
}
static int
dissect_h225_destCallSignalAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_destCallSignalAddress, ett_h225_TransportAddress, TransportAddress_choice, "destCallSignalAddress", NULL);
	return offset;
}

/* this is an indication of where h245 is spoken,  try to pick it up if
   it was ipv4 and register h245 there */
static int
dissect_h225_h245Address(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	ipv4_address=0;
	ipv4_port=0;

	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_h245Address, ett_h225_TransportAddress, TransportAddress_choice, "h245Address", NULL);

	if((!pinfo->fd->flags.visited) && ipv4_address!=0 && ipv4_port!=0 && h245_handle){
		address src_addr;
		conversation_t *conv=NULL;

		src_addr.type=AT_IPv4;
		src_addr.len=4;
		src_addr.data=(const guint8 *)&ipv4_address;

		conv=find_conversation(&src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR_B|NO_PORT_B);
		if(!conv){
			conv=conversation_new(&src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR2|NO_PORT2);
			conversation_set_dissector(conv, h245_handle);
		}
	}
	return offset;
}
static int
dissect_h225_sendAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_sendAddress, ett_h225_TransportAddress, TransportAddress_choice, "sendAddress", NULL);
	return offset;
}
static int
dissect_h225_recvAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_recvAddress, ett_h225_TransportAddress, TransportAddress_choice, "recvAddress", NULL);
	return offset;
}
static int
dissect_h225_rasAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_rasAddress, ett_h225_TransportAddress, TransportAddress_choice, "rasAddress", NULL);
	return offset;
}
static int
dissect_h225_replyAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_replyAddress, ett_h225_TransportAddress, TransportAddress_choice, "replyAddress", NULL);
	return offset;
}
int
dissect_h225_TransportAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_TransportAddress, ett_h225_TransportAddress, TransportAddress_choice, "TransportAddress", NULL);
	return offset;
}


static per_sequence_t TransportChannelInfo_sequence[] = {
	{ "sendAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sendAddress },
	{ "recvAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_recvAddress },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_rtpAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_rtpAddress, ett_h225_TransportChannelInfo, TransportChannelInfo_sequence);
	return offset;
}
static int
dissect_h225_rtcpAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_rtcpAddress, ett_h225_TransportChannelInfo, TransportChannelInfo_sequence);
	return offset;
}
static int
dissect_h225_h245(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_h245, ett_h225_TransportChannelInfo, TransportChannelInfo_sequence);
	return offset;
}
static int
dissect_h225_callSignaling(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_callSignaling, ett_h225_TransportChannelInfo, TransportChannelInfo_sequence);
	return offset;
}

static int
dissect_h225_carrierName(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_carrierName, 1, 128);
	return offset;
}



static int
dissect_h225_carrierIdentificationCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_carrierIdentificationCode, 3, 4, NULL, NULL);
	return offset;
}

static per_sequence_t CarrierInfo_sequence[] = {
	{ "carrierIdentificationCode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_carrierIdentificationCode },
	{ "carrierName", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_carrierName },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CarrierInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CarrierInfo, ett_h225_CarrierInfo, CarrierInfo_sequence);
	return offset;
}

static int
dissect_h225_segment(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_segment, 0, 65535,
		NULL, NULL, FALSE);
	return offset;
}


static const value_string InfoRequestResponseStatus_vals[] = {
	{ 0, "complete" },
	{ 1, "incomplete" },
	{ 2, "segment" },
	{ 3, "invalidCall" },
	{ 0, NULL}
};
static per_choice_t InfoRequestResponseStatus_choice[] = {
	{ 0, "complete", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "incomplete", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "segment", ASN1_EXTENSION_ROOT,
		dissect_h225_segment },
	{ 3, "invalidCall", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_InfoRequestResponseStatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_InfoRequestResponseStatus, ett_h225_InfoRequestResponseStatus, InfoRequestResponseStatus_choice, "InfoRequestResponseStatus", NULL);
	return offset;
}




static int
dissect_h225_guid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value_length;
	guint32 value_offset;

	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_guid, 16, 16, &(value_offset), &(value_length));

	/* save call guid */
	tvb_memcpy(tvb, h225_pi.guid, value_offset, value_length);

	return offset;
}

static per_sequence_t CallIdentifier_sequence[] = {
	{ "guid", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_guid },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CallIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallIdentifier, ett_h225_CallIdentifier, CallIdentifier_sequence);
	return offset;
}


static int
dissect_h225_globalCallId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_globalCallId, 16, 16, NULL, NULL);
	return offset;
}


static int
dissect_h225_algorithmOID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_algorithmOID, NULL);
	return offset;
}


static int
dissect_h225_threadId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_threadId, 16, 16, NULL, NULL);
	return offset;
}


static per_sequence_t CallLinkage_sequence[] = {
	{ "globalCallId", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_globalCallId },
	{ "threadId", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_threadId },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CallLinkage(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallLinkage, ett_h225_CallLinkage, CallLinkage_sequence);
	return offset;
}

static int 
dissect_h225_authenticationCapability_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
  return dissect_h235_AuthenticationMechanism(tvb, offset, pinfo, tree, hf_h225_authenticationCapability_item);
} 
static int
dissect_h225_authenticationCapability(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence_of(tvb, offset, pinfo, tree,
				hf_h225_authenticationCapability,
				ett_h225_AuthenticationMechanism_sequence_of, dissect_h225_authenticationCapability_item);
	return offset;
}

static int
dissect_h225_GatekeeperIdentifier(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
{
	offset=dissect_per_BMPString(tvb, offset, pinfo, tree, hf_h225_GatekeeperIdentifier, 1, 128);
	return offset;
}

static int
dissect_h225_cleartoken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h235_ClearToken(tvb, offset, pinfo, tree, hf_h225_cleartoken);
	return offset;
}

static int
dissect_h225_tokens(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_tokens, ett_h225_tokens, dissect_h225_cleartoken);
	return offset;
}


static int
dissect_h225_timeStamp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_TimeStamp(tvb, offset, pinfo, tree, hf_h225_timeStamp);
}

static int
dissect_h225_token(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_HASHEDxxx(tvb, offset, pinfo, tree, hf_h225_token);
}

static per_sequence_t cryptoEPPwdHash_sequence[] = {
	{ "alias", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_AliasAddress },
	{ "timeStamp", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_timeStamp },
	{ "token", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_token },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_cryptoEPPwdHash(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_cryptoEPPwdHash, ett_h225_T_cryptoEPPwdHash, cryptoEPPwdHash_sequence);

	return offset;
}

static per_sequence_t cryptoGKPwdHash_sequence[] = {
	{ "gatekeeperId", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "timeStamp", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_timeStamp },
	{ "token", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_token },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_cryptoGKPwdHash(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_cryptoGKPwdHash, ett_h225_T_cryptoGKPwdHash, cryptoGKPwdHash_sequence);

	return offset;
}

static int
dissect_h225_cryptoEPPwdEncr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_ENCRYPTEDxxx(tvb, offset, pinfo, tree, hf_h225_cryptoEPPwdEncr);
}

static int
dissect_h225_cryptoGKPwdEncr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_ENCRYPTEDxxx(tvb, offset, pinfo, tree, hf_h225_cryptoGKPwdEncr);
}

static int
dissect_h225_cryptoEPCert(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_SIGNEDxxx(tvb, offset, pinfo, tree, hf_h225_cryptoEPCert);
}

static int
dissect_h225_cryptoGKCert(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_SIGNEDxxx(tvb, offset, pinfo, tree, hf_h225_cryptoGKCert);
}

static int
dissect_h225_cryptoFastStart(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_SIGNEDxxx(tvb, offset, pinfo, tree, hf_h225_cryptoFastStart);
}

static int
dissect_h225_nestedcryptoToken(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) 
{
	return dissect_h235_CryptoToken(tvb, offset, pinfo, tree, hf_h225_nestedcryptoToken);
}

static const value_string CryptoH323Token_vals[] = {
	{ 0, "cryptoEPPwdHash" },
	{ 1, "cryptoGKPwdHash" },
	{ 2, "cryptoEPPwdEncr" },
	{ 3, "cryptoGKPwdEncr" },
	{ 4, "cryptoEPCert" },
	{ 5, "cryptoGKCert" },
	{ 6, "cryptoFastStart" },
	{ 7, "nestedcryptoToken" },
	{ 0, NULL}
};
static per_choice_t CryptoH323Token_choice[] = {
	{ 0, "cryptoEPPwdHash", ASN1_EXTENSION_ROOT,
		dissect_h225_cryptoEPPwdHash },
	{ 1, "cryptoGKPwdHash", ASN1_EXTENSION_ROOT,
		dissect_h225_cryptoGKPwdHash },
	{ 2, "cryptoEPPwdEncr", ASN1_EXTENSION_ROOT,
		dissect_h225_cryptoEPPwdEncr },
	{ 3, "cryptoGKPwdEncr", ASN1_EXTENSION_ROOT,
		dissect_h225_cryptoGKPwdEncr },
	{ 4, "cryptoEPCert", ASN1_EXTENSION_ROOT,
		dissect_h225_cryptoEPCert },
	{ 5, "cryptoGKCert", ASN1_EXTENSION_ROOT,
		dissect_h225_cryptoGKCert },
	{ 6, "cryptoFastStart", ASN1_EXTENSION_ROOT,
		dissect_h225_cryptoFastStart },
	{ 7, "nestedcryptoToken", ASN1_EXTENSION_ROOT,
		dissect_h225_nestedcryptoToken },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_CryptoH323Token(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_CryptoH323Token, ett_h225_CryptoH323Token, CryptoH323Token_choice, "CryptoH323Token", NULL);

	return offset;
}
static int
dissect_h225_CryptoH323Token_sequence_of(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_CryptoH323Tokens, ett_h225_CryptoH323Tokens, dissect_h225_CryptoH323Token);

	return offset;
}

static int
dissect_h225_needToRegister(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_needToRegister, NULL, NULL);
	return offset;
}

static int
dissect_h225_priority(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_priority, 0, 127,
		NULL, NULL, FALSE);
	return offset;
}

static per_sequence_t AlternateGK_sequence[] = {
	{ "rasAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rasAddress },
	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "needToRegister", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_needToRegister },
	{ "priority", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_priority },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AlternateGK(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AlternateGK, ett_h225_AlternateGK, AlternateGK_sequence);
	return offset;
}

static int
dissect_h225_alternateGatekeeper(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_alternateGatekeeper, ett_h225_alternateGatekeeper, dissect_h225_AlternateGK);
	return offset;
}

static int
dissect_h225_altGKisPermanent(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_altGKisPermanent, NULL, NULL);
	return offset;
}

static per_sequence_t AltGKInfo_sequence[] = {
	{ "alternateGatekeeper", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_alternateGatekeeper },
	{ "altGKisPermanent", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_altGKisPermanent },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AltGKInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AltGKInfo, ett_h225_AltGKInfo, AltGKInfo_sequence);
	return offset;
}

static int
dissect_h225_annexE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_annexE, ett_h225_annexE, dissect_h225_TransportAddress);
	return offset;
}

static int
dissect_h225_sctp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_sctp, ett_h225_sctp, dissect_h225_TransportAddress);
	return offset;
}
static per_sequence_t AlternateTransportAddress_sequence[] = {
	{ "annexE", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_annexE },
	{ "sctp", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sctp },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AlternateTransportAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AlternateTransportAddress, ett_h225_AlternateTransportAddress, AlternateTransportAddress_sequence);
	return offset;
}

static int
dissect_h225_callProceeding_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_callProceeding_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_setup_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_setup_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_connect_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_connect_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_alerting_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_alerting_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_information_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_information_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_releaseComplete_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_releaseComplete_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_facility_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_facility_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_progress_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_progress_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_empty_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_empty_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_status_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_status_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_statusInquiry_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_statusInquiry_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_setupAcknowledge_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_setupAcknowledge_bool, NULL, NULL);
	return offset;
}
static int
dissect_h225_notify_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_notify_bool, NULL, NULL);
	return offset;
}


static per_sequence_t UUIEsRequested_sequence[] = {
	{ "setup", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_setup_bool },
	{ "callProceeding", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_callProceeding_bool },
	{ "connect", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_connect_bool },
	{ "alerting", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_alerting_bool },
	{ "information", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_information_bool },
	{ "releaseComplete", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_releaseComplete_bool },
	{ "facility", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_facility_bool },
	{ "progress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_progress_bool },
	{ "empty", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_empty_bool },
	{ "status", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_status_bool },
	{ "statusInquiry", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_statusInquiry_bool },
	{ "setupAcknowledge", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_setupAcknowledge_bool },
	{ "notify", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_notify_bool },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_UUIEsRequested(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_UUIEsRequested, ett_h225_UUIEsRequested, UUIEsRequested_sequence);
	return offset;
}

static int
dissect_h225_conferenceCalling(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_conferenceCalling, NULL, NULL);
	return offset;
}



static int
dissect_h225_threePartyService(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_threePartyService, NULL, NULL);
	return offset;
}


static per_sequence_t Q954Details_sequence[] = {
	{ "conferenceCalling", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceCalling },
	{ "threePartyService", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_threePartyService },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_Q954Info(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_Q954Details, ett_h225_Q954Details, Q954Details_sequence);
	return offset;
}

static int
dissect_h225_q932Full(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_q932Full, NULL, NULL);
	return offset;
}


static int
dissect_h225_q951Full(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_q951Full, NULL, NULL);
	return offset;
}

static int
dissect_h225_q952Full(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_q952Full, NULL, NULL);
	return offset;
}

static int
dissect_h225_q953Full(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_q953Full, NULL, NULL);
	return offset;
}

static int
dissect_h225_q955Full(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_q955Full, NULL, NULL);
	return offset;
}

static int
dissect_h225_q956Full(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_q956Full, NULL, NULL);
	return offset;
}


static int
dissect_h225_q957Full(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_q957Full, NULL, NULL);
	return offset;
}

static per_sequence_t QseriesOptions_sequence[] = {
	{ "q932Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_q932Full },
	{ "q951Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_q951Full },
	{ "q952Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_q952Full },
	{ "q953Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_q953Full },
	{ "q955Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_q955Full },
	{ "q956Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_q956Full },
	{ "q957Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_q957Full },
	{ "q954Info", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_Q954Info },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_callServices(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_QseriesOptions, ett_h225_QseriesOptions, QseriesOptions_sequence);
	return offset;
}

static int
dissect_h225_cname(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_PrintableString(tvb, offset, pinfo, tree, hf_h225_cname, -1, -1);
	return offset;
}


static int
dissect_h225_ssrc(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_ssrc, 1, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}


static int
dissect_h225_RTPsessionId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_RTPsessionId, 1, 255,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_associatedSessionIds(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_associatedSessionIds, ett_h225_associatedSessionIds, dissect_h225_RTPsessionId);
	return offset;
}
static per_sequence_t RTPSession_sequence[] = {
	{ "rtpAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rtpAddress },
	{ "rtcpAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rtcpAddress },
	{ "cname", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_cname },
	{ "ssrc", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ssrc },
	{ "sessionId", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RTPsessionId },
	{ "associatedSessionIds", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_associatedSessionIds },
	{ "multicast", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "bandwidth", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_BandWidth },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RTPSession(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RTPSession, ett_h225_RTPSession, RTPSession_sequence);
	return offset;
}


static int
dissect_h225_ProtocolIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_ProtocolIdentifier, NULL);
	return offset;
}

static per_sequence_t StatusUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_StatusUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_StatusUUIE, ett_h225_StatusUUIE, StatusUUIE_sequence);
	return offset;
}
static per_sequence_t StatusInquiryUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_StatusInquiryUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_StatusInquiryUUIE, ett_h225_StatusInquiryUUIE, StatusInquiryUUIE_sequence);
	return offset;
}
static per_sequence_t SetupAcknowledgeUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_SetupAcknowledgeUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SetupAcknowledgeUUIE, ett_h225_SetupAcknowledgeUUIE, SetupAcknowledgeUUIE_sequence);
	return offset;
}
static per_sequence_t NotifyUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_NotifyUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_NotifyUUIE, ett_h225_NotifyUUIE, NotifyUUIE_sequence);
	return offset;
}

static int
dissect_h225_imsi(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_imsi, 3, 16, "#*0123456789ABC", 15);

	return offset;
}


static int
dissect_h225_tmsi(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_tmsi, 1, 4, NULL, NULL);
	return offset;
}


static int
dissect_h225_msisdn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_msisdn, 3, 16, "#*0123456789ABC", 15);

	return offset;
}


static int
dissect_h225_imei(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_imei, 15, 16, "#*0123456789ABC", 15);

	return offset;
}

static int
dissect_h225_hplmn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_hplmn, 1, 4, "#*0123456789ABC", 15);

	return offset;
}

static int
dissect_h225_vplmn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_vplmn, 1, 4, "#*0123456789ABC", 15);
	return offset;
}


static per_sequence_t GSMUIM_sequence[] = {
	{ "imsi", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_imsi },
	{ "tmsi", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tmsi },
	{ "msisdn", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_msisdn },
	{ "imei", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_imei },
	{ "hplmn", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_hplmn },
	{ "vplmn", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_vplmn },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_GSMUIM(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GSMUIM, ett_h225_GSMUIM, GSMUIM_sequence);
	return offset;
}

static int
dissect_h225_sid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_sid, 1, 4, "#*0123456789ABC", 15);
	return offset;
}


static int
dissect_h225_mid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_mid, 1, 4, "#*0123456789ABC", 15);
	return offset;
}

static const value_string systemid_vals[] = {
	{ 0, "sid" },
	{ 1, "mid" },
	{ 0, NULL}
};
static per_choice_t systemid_choice[] = {
	{ 0, "sid", ASN1_EXTENSION_ROOT,
		dissect_h225_sid },
	{ 1, "mid", ASN1_EXTENSION_ROOT,
		dissect_h225_mid },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_systemid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_systemid, ett_h225_systemid, systemid_choice, "systemid", NULL);
	return offset;
}



static int
dissect_h225_min(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_mid, 3, 16, "#*0123456789ABC", 15);
	return offset;
}


static int
dissect_h225_mdn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_mdn, 3, 16, "#*0123456789ABC", 15);
	return offset;
}

static int
dissect_h225_esn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_esn, 16, 16, "#*0123456789ABC", 15);

	return offset;
}

static int
dissect_h225_mscid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_mscid, 3, 16, "#*0123456789ABC", 15);

	return offset;
}


static int
dissect_h225_systemMyTypeCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_systemMyTypeCode, 1, 1, NULL, NULL);
	return offset;
}

static int
dissect_h225_systemAccessType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_systemAccessType, 1, 1, NULL, NULL);
	return offset;
}

static int
dissect_h225_qualificationInformationCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_qualificationInformationCode, 1, 1, NULL, NULL);
	return offset;
}

static int
dissect_h225_sesn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_sesn, 16, 16, "#*0123456789ABC", 15);
	return offset;
}


static int
dissect_h225_soc(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_soc, 3, 16, "#*0123456789ABC", 15);

	return offset;
}

static per_sequence_t ANSI41UIM_sequence[] = {
	{ "imsi", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_imsi },
	{ "min", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_min },
	{ "mdn", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_mdn },
	{ "msisdn", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_msisdn },
	{ "esn", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_esn },
	{ "mscid", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_mscid },
	{ "systemid", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_systemid },
	{ "systemMyTypeCode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_systemMyTypeCode },
	{ "systemAccessType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_systemAccessType },
	{ "qualificationInformationCode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_qualificationInformationCode },
	{ "sesn", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sesn },
	{ "soc", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_soc },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ANSI41UIM(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ANSI41UIM, ett_h225_ANSI41UIM, ANSI41UIM_sequence);
	return offset;
}


static const value_string MobileUIM_vals[] = {
	{ 0, "ansi41uim" },
	{ 1, "gsmuim" },
	{ 0, NULL}
};
static per_choice_t MobileUIM_choice[] = {
	{ 0, "ansi41uim", ASN1_EXTENSION_ROOT,
		dissect_h225_ANSI41UIM },
	{ 1, "gsmuim", ASN1_EXTENSION_ROOT,
		dissect_h225_GSMUIM },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_MobileUIM(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_MobileUIM, ett_h225_MobileUIM, MobileUIM_choice, "MobileUIM", NULL);
	return offset;
}


static int
dissect_h225_dataPartyNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_dataPartyNumber, 1, 128, "#*,0123456789", 13);

	return offset;
}

static int
dissect_h225_telexPartyNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_telexPartyNumber, 1, 128, "#*,0123456789", 13);
	return offset;
}



static int
dissect_h225_nationalStandardPartyNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_nationalStandardPartyNumber, 1, 128, "#*,0123456789", 13);
	return offset;
}

static int
dissect_h225_publicNumberDigits(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_publicNumberDigits, 1, 128, "#*,0123456789", 13);
	return offset;
}


static int
dissect_h225_privateNumberDigits(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_privateNumberDigits, 1, 128, "#*,0123456789", 13);
	return offset;
}


static per_sequence_t e164Number_sequence[] = {
	{ "publicTypeOfNumber", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_PublicTypeOfNumber },
	{ "publicNumberDigits", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_publicNumberDigits },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_e164Number(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_e164Number, ett_h225_e164Number, e164Number_sequence);
	return offset;
}
static per_sequence_t privateNumber_sequence[] = {
	{ "privateTypeOfNumber", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_PrivateTypeOfNumber },
	{ "privateNumberDigits", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_privateNumberDigits },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_privateNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_privateNumber, ett_h225_privateNumber, privateNumber_sequence);
	return offset;
}

static const value_string PartyNumber_vals[] = {
	{ 0, "e164Number" },
	{ 1, "dataPartyNumber" },
	{ 2, "telexPartyNumber" },
	{ 3, "privateNumber" },
	{ 4, "nationalStandardPartyNumber" },
	{ 0, NULL}
};
static per_choice_t PartyNumber_choice[] = {
	{ 0, "e164Number", ASN1_EXTENSION_ROOT,
		dissect_h225_e164Number },
	{ 1, "dataPartyNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_dataPartyNumber },
	{ 2, "telexPartyNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_telexPartyNumber },
	{ 3, "privateNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_privateNumber },
	{ 4, "nationalStandardPartyNumber", ASN1_EXTENSION_ROOT,
		dissect_h225_nationalStandardPartyNumber },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_PartyNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_PartyNumber, ett_h225_PartyNumber, PartyNumber_choice, "PartyNumber", NULL);
	return offset;
}
static int
dissect_h225_startOfRange(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_startOfRange, ett_h225_PartyNumber, PartyNumber_choice, "startOfRange", NULL);
	return offset;
}
static int
dissect_h225_endOfRange(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_endOfRange, ett_h225_PartyNumber, PartyNumber_choice, "endOfRange", NULL);
	return offset;
}

static int
dissect_h225_protocolType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_protocolType, 1, 64);
	return offset;
}

static int
dissect_h225_protocolVariant(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_protocolVariant, 1, 64);
	return offset;
}
static per_sequence_t TunnelledProtocolAlternateIdentifier_sequence[] = {
	{ "protocolType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_protocolType },
	{ "protocolVariant", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_protocolVariant },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_TunnelledProtocolAlternateIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_TunnelledProtocolAlternateIdentifier, ett_h225_TunnelledProtocolAlternateIdentifier, TunnelledProtocolAlternateIdentifier_sequence);
	return offset;
}

static int
dissect_h225_dialedDigits(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_restricted_character_string(tvb, offset, pinfo, tree, hf_h225_privateNumberDigits, 1, 128, "#,*0123456789", 13);

	return offset;
}

static int
dissect_h225_h323Id(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_BMPString(tvb, offset, pinfo, tree, hf_h225_h323ID, 1, 256);
	return offset;
}

static int
dissect_h225_urlId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_urlId, 1, 512);
	return offset;
}


static int
dissect_h225_emailId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_emailId, 1, 512);
	return offset;
}


static const value_string AliasAddress_vals[] = {
	{ 0, "dialedDigits" },
	{ 1, "h323ID" },
	{ 2, "urlID" },
	{ 3, "transportID" },
	{ 4, "emailID" },
	{ 5, "partyNumber" },
	{ 6, "mobileUIM" },
	{ 0, NULL}
};
static per_choice_t AliasAddress_choice[] = {
	{ 0, "dialedDigits", ASN1_EXTENSION_ROOT,
		dissect_h225_dialedDigits },
	{ 1, "h323ID", ASN1_EXTENSION_ROOT,
		dissect_h225_h323Id },
	{ 2, "urlID", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_urlId },
	{ 3, "transportID", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_transportID },
	{ 4, "emailID", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_emailId },
	{ 5, "partyNumber", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_PartyNumber },
	{ 6, "mobileUIM", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_MobileUIM },
	{ 0, NULL, 0, NULL }
};
int
dissect_h225_AliasAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_AliasAddress, ett_h225_AliasAddress, AliasAddress_choice, "AliasAddress", NULL);
	return offset;
}
static int
dissect_h225_featureServerAlias(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_featureServerAlias, ett_h225_AliasAddress, AliasAddress_choice, "featureServerAlias", NULL);
	return offset;
}
static int
dissect_h225_RemoteExtensionAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_RemoteExtensionAddress, ett_h225_AliasAddress, AliasAddress_choice, "RemoteExtensionAddress", NULL);
	return offset;
}
static int
dissect_h225_conferenceAlias(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_conferenceAlias, ett_h225_AliasAddress, AliasAddress_choice, "conferenceAlias", NULL);
	return offset;
}
static int
dissect_h225_wildcard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_wildcard, ett_h225_AliasAddress, AliasAddress_choice, "wildcard", NULL);
	return offset;
}
static int
dissect_h225_prefix(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_prefix, ett_h225_AliasAddress, AliasAddress_choice, "prefix", NULL);
	return offset;
}

static per_sequence_t SupportedPrefix_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "prefix", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_prefix },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_SupportedPrefix(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SupportedPrefix, ett_h225_SupportedPrefix, SupportedPrefix_sequence);
	return offset;
}

static int
dissect_h225_SupportedPrefixes(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_SupportedPrefixes, ett_h225_SupportedPrefixes, dissect_h225_SupportedPrefix);
	return offset;
}


static per_sequence_t H310Caps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_H310Caps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_H310Caps, ett_h225_H310Caps, H310Caps_sequence);
	return offset;
}


static per_sequence_t H320Caps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_H320Caps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_H320Caps, ett_h225_H320Caps, H320Caps_sequence);
	return offset;
}


static per_sequence_t H321Caps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_H321Caps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_H321Caps, ett_h225_H321Caps, H321Caps_sequence);
	return offset;
}


static per_sequence_t H322Caps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_H322Caps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_H322Caps, ett_h225_H322Caps, H322Caps_sequence);
	return offset;
}


static per_sequence_t H323Caps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_H323Caps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_H323Caps, ett_h225_H323Caps, H323Caps_sequence);
	return offset;
}


static per_sequence_t H324Caps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_H324Caps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_H324Caps, ett_h225_H324Caps, H324Caps_sequence);
	return offset;
}


static per_sequence_t VoiceCaps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_VoiceCaps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_VoiceCaps, ett_h225_VoiceCaps, VoiceCaps_sequence);
	return offset;
}


static per_sequence_t T120OnlyCaps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_T120OnlyCaps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_T120OnlyCaps, ett_h225_T120OnlyCaps, T120OnlyCaps_sequence);
	return offset;
}

static per_sequence_t NonStandardProtocol_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_NonStandardProtocol(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_NonStandardProtocol, ett_h225_NonStandardProtocol, NonStandardProtocol_sequence);
	return offset;
}


static per_sequence_t SIPCaps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_SIPCaps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SIPCaps, ett_h225_SIPCaps, SIPCaps_sequence);
	return offset;
}

static per_sequence_t AddressPattern_range_sequence[] = {
	{ "startOfRange", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_startOfRange },
	{ "endOfRange", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_endOfRange },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AddressPattern_range(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AddressPattern_range, ett_h225_AddressPattern_range, AddressPattern_range_sequence);
	return offset;
}


static const value_string AddressPattern_vals[] = {
	{ 0, "wildcard" },
	{ 1, "range" },
	{ 0, NULL}
};
static per_choice_t AddressPattern_choice[] = {
	{ 0, "wildcard", ASN1_EXTENSION_ROOT,
		dissect_h225_wildcard },
	{ 0, "range", ASN1_EXTENSION_ROOT,
		dissect_h225_AddressPattern_range },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_AddressPattern(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_AddressPattern, ett_h225_AddressPattern, AddressPattern_choice, "AddressPattern", NULL);
	return offset;
}
static per_sequence_t ConferenceList_sequence[] = {
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_conferenceID },
	{ "conferenceAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_conferenceAlias },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ConferenceList(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ConferenceList, ett_h225_ConferenceList, ConferenceList_sequence);
	return offset;
}

static int
dissect_h225_conferences(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_conferences, ett_h225_conferences, dissect_h225_ConferenceList);
	return offset;
}
static per_sequence_t T38FaxAnnexbOnlyCaps_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "dataRatesSupported", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_dataRatesSupported },
	{ "supportedPrefixes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ "t38FaxProtocol", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h245_DataProtocolCapability },
	{ "t38FaxProfile", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h245_T38FaxProfile },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_T38FaxAnnexbOnlyCaps(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_T38FaxAnnexbOnlyCaps, ett_h225_T38FaxAnnexbOnlyCaps, T38FaxAnnexbOnlyCaps_sequence);
	return offset;
}


static const value_string SupportedProtocols_vals[] = {
	{ 0, "nonStandardData" },
	{ 1, "h310" },
	{ 2, "h320" },
	{ 3, "h321" },
	{ 4, "h322" },
	{ 5, "h323" },
	{ 6, "h324" },
	{ 7, "voice" },
	{ 8, "t120-only" },
	{ 9, "nonStandardProtocol" },
	{ 10, "t38FaxAnnexbOnly" },
	{ 11, "sip" },
	{ 0, NULL}
};
static per_choice_t SupportedProtocols_choice[] = {
	{ 0, "nonStandardData", ASN1_EXTENSION_ROOT,
		dissect_h225_nonStandardData },
	{ 1, "h310", ASN1_EXTENSION_ROOT,
		dissect_h225_H310Caps },
	{ 2, "h320", ASN1_EXTENSION_ROOT,
		dissect_h225_H320Caps },
	{ 3, "h321", ASN1_EXTENSION_ROOT,
		dissect_h225_H321Caps },
	{ 4, "h322", ASN1_EXTENSION_ROOT,
		dissect_h225_H322Caps },
	{ 5, "h323", ASN1_EXTENSION_ROOT,
		dissect_h225_H323Caps },
	{ 6, "h324", ASN1_EXTENSION_ROOT,
		dissect_h225_H324Caps },
	{ 7, "voice", ASN1_EXTENSION_ROOT,
		dissect_h225_VoiceCaps },
	{ 8, "t120-only", ASN1_EXTENSION_ROOT,
		dissect_h225_T120OnlyCaps },
	{ 9, "nonStandardProtocol", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NonStandardProtocol },
	{ 10, "t38FaxAnnexbOnly", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_T38FaxAnnexbOnlyCaps },
	{ 11, "sip", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SIPCaps },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_SupportedProtocols(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_SupportedProtocols, ett_h225_SupportedProtocols, SupportedProtocols_choice, "SupportedProtocols", NULL);
	return offset;
}

static int
dissect_h225_protocol(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_protocol, ett_h225_protocol, dissect_h225_SupportedProtocols);
	return offset;
}



static per_sequence_t GatewayInfo_sequence[] = {
	{ "protocol", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_protocol },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_gateway(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GatewayInfo, ett_h225_GatewayInfo, GatewayInfo_sequence);
	return offset;
}
static per_sequence_t McuInfo_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "protocol", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_protocol },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_mcu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_McuInfo, ett_h225_McuInfo, McuInfo_sequence);
	return offset;
}


static int
dissect_h225_tunnelledProtocolObjectID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_tunnelledProtocolObjectID, tpID);
	return offset;
}


static const value_string TunnelledProtocol_id_vals[] = {
	{ 0, "tunnelledProtocolObjectID" },
	{ 1, "tunnelledProtocolAlternateID" },
	{ 0, NULL }
};
static per_choice_t TunnelledProtocol_id_choice[] = {
	{ 0, "tunnelledProtocolObjectID", ASN1_EXTENSION_ROOT,
		dissect_h225_tunnelledProtocolObjectID },
	{ 1, "tunnelledProtocolAlternateID", ASN1_EXTENSION_ROOT,
		dissect_h225_TunnelledProtocolAlternateIdentifier },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_TunnelledProtocol_id(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_TunnelledProtocol_id, ett_h225_TunnelledProtocol_id, TunnelledProtocol_id_choice, "id", NULL);
	return offset;
}

static int
dissect_h225_TunnelledProtocol_subIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_TunnelledProtocol_subIdentifier, 1, 64);
	return offset;
}
static per_sequence_t TunnelledProtocol_sequence[] = {
	{ "id", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_TunnelledProtocol_id },
	{ "subIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_TunnelledProtocol_subIdentifier },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_TunnelledProtocol(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	tpID[0] = '\0';
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_TunnelledProtocol, ett_h225_TunnelledProtocol, TunnelledProtocol_sequence);
	tp_handle = dissector_get_string_handle(tp_dissector_table, tpID);
	return offset;
}
static int
dissect_h225_TunnelledProtocols(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence_of(tvb, offset, pinfo, tree,
				hf_h225_TunnelledProtocols,
				ett_h225_TunnelledProtocols, dissect_h225_TunnelledProtocol);
	return offset;
}

static int
dissect_h225_desiredTunnelledProtocol(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	tpID[0] = '\0';
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_desiredTunnelledProtocol, ett_h225_TunnelledProtocol, TunnelledProtocol_sequence);
	return offset;
}


static int
dissect_h225_CicInfo_cic_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_CicInfo_cic_item, 2, 4, NULL, NULL);
	return offset;
}

static int
dissect_h225_CicInfo_pointCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_CicInfo_pointCode, 2, 5, NULL, NULL);
	return offset;
}

static int
dissect_h225_CicInfo_cic(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_CicInfo_cic, ett_h225_CicInfo_cic, dissect_h225_CicInfo_cic_item);
	return offset;
}

static per_sequence_t CicInfo_sequence[] = {
	{ "cic", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CicInfo_cic },
	{ "pointCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CicInfo_pointCode },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CicInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CicInfo, ett_h225_CicInfo, CicInfo_sequence);
	return offset;
}

static int
dissect_h225_GroupID_member_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_GroupID_member_item, 0, 65535,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_GroupID_member(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_GroupID_member, ett_h225_GroupID_member, dissect_h225_GroupID_member_item);
	return offset;
}

static int
dissect_h225_GroupID_group(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_GroupID_group, 1, 128);
	return offset;
}

static per_sequence_t GroupID_sequence[] = {
	{ "member", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GroupID_member },
	{ "group", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_GroupID_group },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_GroupID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GroupID, ett_h225_GroupID, GroupID_sequence);
	return offset;
}

static per_sequence_t CircuitIdentifier_sequence[] = {
	{ "cic", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CicInfo },
	{ "group", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GroupID },
	{ "carrier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CarrierInfo },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_sourceCircuitID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_sourceCircuitID, ett_h225_CircuitIdentifier, CircuitIdentifier_sequence);
	return offset;
}
static int
dissect_h225_destinationCircuitID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_destinationCircuitID, ett_h225_CircuitIdentifier, CircuitIdentifier_sequence);
	return offset;
}

static int
dissect_h225_Generic_standard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_Generic_standard, 0, 16383,
		NULL, NULL, TRUE);
	return offset;
}


static int
dissect_h225_Generic_oid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_Generic_oid, NULL);
	return offset;
}


static int
dissect_h225_Generic_nonStandard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_Generic_nonStandard, 16, 16, NULL, NULL);
	return offset;
}


static const value_string GenericIdentifier_vals[] = {
	{ 0, "standard" },
	{ 1, "oid" },
	{ 2, "nonStandard" },
	{ 0, NULL}
};
static per_choice_t GenericIdentifier_choice[] = {
	{ 0, "standard", ASN1_EXTENSION_ROOT,
		dissect_h225_Generic_standard },
	{ 1, "oid", ASN1_EXTENSION_ROOT,
		dissect_h225_Generic_oid },
	{ 2, "nonStandard", ASN1_EXTENSION_ROOT,
		dissect_h225_Generic_nonStandard },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_GenericIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_GenericIdentifier, ett_h225_GenericIdentifier, GenericIdentifier_choice, "GenericIdentifier", NULL);
	return offset;
}

static int dissect_h225_Content(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);

static per_sequence_t EnumeratedParameter_sequence[] = {
	{ "id", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_GenericIdentifier },
	{ "content", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_Content },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_EnumeratedParameter(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_EnumeratedParameter, ett_h225_EnumeratedParameter, EnumeratedParameter_sequence);
	return offset;
}


static int
dissect_h225_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_sequence_of(tvb, offset, pinfo, tree, hf_h225_parameters, ett_h225_parameters, dissect_h225_EnumeratedParameter, 1, 512);
	return offset;
}

static per_sequence_t GenericData_sequence[] = {
	{ "id", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_GenericIdentifier },
	{ "parameters", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_parameters },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_GenericData(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GenericData, ett_h225_GenericData, GenericData_sequence);
	return offset;
}
static int
dissect_h225_genericData(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_genericData, ett_h225_genericData, dissect_h225_GenericData);
	return offset;
}
static int
dissect_h225_FeatureDescriptor(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_FeatureDescriptor, ett_h225_GenericData, GenericData_sequence);
	return offset;
}

static int
dissect_h225_Content_raw(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_Content_raw, -1, -1, NULL, NULL);
	return offset;
}


static int
dissect_h225_Content_text(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_Content_text, -1, -1);
	return offset;
}




static int
dissect_h225_Content_unicode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_BMPString(tvb, offset, pinfo, tree, hf_h225_unicode, -1, -1);
	return offset;
}



static int
dissect_h225_Content_bool(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_Content_bool, NULL, NULL);
	return offset;
}



static int
dissect_h225_Content_number8(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_Content_number8, 0, 255,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_number16(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_number16, 0, 65535,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_Content_number32(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_Content_number32, 0, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_Content_compound(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_sequence_of(tvb, offset, pinfo, tree, hf_h225_Content_compound, ett_h225_Content_compound, dissect_h225_EnumeratedParameter, 1, 512);
	return offset;
}

static int
dissect_h225_Content_nested(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_sequence_of(tvb, offset, pinfo, tree, hf_h225_Content_nested, ett_h225_Content_nested, dissect_h225_GenericData, 1, 16);
	return offset;
}





static const value_string Content_vals[] = {
	{ 0, "raw" },
	{ 1, "text" },
	{ 2, "unicode" },
	{ 3, "bool" },
	{ 4, "number8" },
	{ 5, "number16" },
	{ 6, "number32" },
	{ 7, "id" },
	{ 8, "alias" },
	{ 9, "transport" },
	{ 10, "compound" },
	{ 11, "nested" },
	{ 0, NULL}
};
static per_choice_t Content_choice[] = {
	{ 0, "raw", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_raw },
	{ 1, "text", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_text },
	{ 2, "unicode", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_unicode },
	{ 3, "bool", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_bool },
	{ 4, "number8", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_number8 },
	{ 5, "number16", ASN1_EXTENSION_ROOT,
		dissect_h225_number16 },
	{ 6, "number32", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_number32 },
	{ 7, "id", ASN1_EXTENSION_ROOT,
		dissect_h225_GenericIdentifier },
	{ 8, "alias", ASN1_EXTENSION_ROOT,
		dissect_h225_AliasAddress },
	{ 9, "transport", ASN1_EXTENSION_ROOT,
		dissect_h225_TransportAddress },
	{ 10, "compound", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_compound },
	{ 11, "nested", ASN1_EXTENSION_ROOT,
		dissect_h225_Content_nested },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_Content(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_Content, ett_h225_Content, Content_choice, "Content", NULL);
	return offset;
}


static int
dissect_h225_replacementFeatureSet(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_replacementFeatureSet, NULL, NULL);
	return offset;
}

static int
dissect_h225_neededFeatures(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_neededFeatures, ett_h225_neededFeatures, dissect_h225_FeatureDescriptor);
	return offset;
}

static int
dissect_h225_desiredFeatures(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_desiredFeatures, ett_h225_desiredFeatures, dissect_h225_FeatureDescriptor);
	return offset;
}

static int
dissect_h225_supportedFeatures(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_supportedFeatures, ett_h225_supportedFeatures, dissect_h225_FeatureDescriptor);
	return offset;
}

static per_sequence_t FeatureSet_sequence[] = {
	{ "replacementFeatureSet", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_replacementFeatureSet },
	{ "neededFeatures", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_neededFeatures },
	{ "desiredFeatures", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_desiredFeatures },
	{ "supportedFeatures", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_supportedFeatures },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_FeatureSet(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_FeatureSet, ett_h225_FeatureSet, FeatureSet_sequence);
	return offset;
}

static int
dissect_h225_CallsAvailable_calls(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_CallsAvailable_calls, 0, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}


static int
dissect_h225_CallsAvailable_group(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_CallsAvailable_group, 1, 128);
	return offset;
}

static per_sequence_t CallsAvailable_sequence[] = {
	{ "calls", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallsAvailable_calls },
	{ "group", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallsAvailable_group },
	{ "carrier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CarrierInfo },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallsAvailable, ett_h225_CallsAvailable, CallsAvailable_sequence);
	return offset;
}

static int
dissect_h225_voiceGwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_voiceGwCallsAvailable, ett_h225_voiceGwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_h310GwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h310GwCallsAvailable, ett_h225_h310GwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_h320GwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h320GwCallsAvailable, ett_h225_h320GwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_h321GwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h321GwCallsAvailable, ett_h225_h321GwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_h322GwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h322GwCallsAvailable, ett_h225_h322GwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_h323GwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h323GwCallsAvailable, ett_h225_h323GwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_h324GwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h324GwCallsAvailable, ett_h225_h324GwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_t120OnlyGwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_t120OnlyGwCallsAvailable, ett_h225_t120OnlyGwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_t38FaxAnnexbOnlyGwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_t38FaxAnnexbOnlyGwCallsAvailable, ett_h225_t38FaxAnnexbOnlyGwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_terminalCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_terminalCallsAvailable, ett_h225_terminalCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_mcuCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_mcuCallsAvailable, ett_h225_mcuCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}

static int
dissect_h225_sipGwCallsAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_sipGwCallsAvailable, ett_h225_sipGwCallsAvailable, dissect_h225_CallsAvailable);
	return offset;
}
static per_sequence_t CallCapacityInfo_sequence[] = {
	{ "voiceGwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_voiceGwCallsAvailable },
	{ "h310GwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h310GwCallsAvailable },
	{ "h320GwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h320GwCallsAvailable },
	{ "h321GwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h321GwCallsAvailable },
	{ "h322GwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h322GwCallsAvailable },
	{ "h323GwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h323GwCallsAvailable },
	{ "h324GwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h324GwCallsAvailable },
	{ "t120OnlyGwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_t120OnlyGwCallsAvailable },
	{ "t38FaxAnnexbOnlyGwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_t38FaxAnnexbOnlyGwCallsAvailable },
	{ "terminalCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_terminalCallsAvailable },
	{ "mcuCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_mcuCallsAvailable },
	{ "sipGwCallsAvailable", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sipGwCallsAvailable },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_maximumCallCapacity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_maximumCallCapacity, ett_h225_CallCapacityInfo, CallCapacityInfo_sequence);
	return offset;
}
static int
dissect_h225_currentCallCapacity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_currentCallCapacity, ett_h225_CallCapacityInfo, CallCapacityInfo_sequence);
	return offset;
}

static per_sequence_t CallCapacity_sequence[] = {
	{ "maximumCallCapacity", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_maximumCallCapacity },
	{ "currentCallCapacity", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_currentCallCapacity },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CallCapacity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallCapacity, ett_h225_CallCapacity, CallCapacity_sequence);
	return offset;
}

static int
dissect_h225_productID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_productID, 1, 256, NULL, NULL);
	return offset;
}

static int
dissect_h225_versionID(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_versionID, 1, 256, NULL, NULL);
	return offset;
}

static int
dissect_h225_enterpriseNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_enterpriseNumber, NULL);
	return offset;
}

static per_sequence_t VendorIdentifier_sequence[] = {
	{ "vendor", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_h221NonStandard },
	{ "productId", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_productID },
	{ "versionId", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_versionID },
	{ "enterpriseNumber", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_enterpriseNumber },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_VendorIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_VendorIdentifier, ett_h225_VendorIdentifier, VendorIdentifier_sequence);
	return offset;
}


static int
dissect_h225_canReportCallCapacity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_canReportCallCapacity, NULL, NULL);
	return offset;
}

static per_sequence_t CapacityReportingCapability_sequence[] = {
	{ "canReportCallCapacity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_canReportCallCapacity },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CapacityReportingCapability(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CapacityReportingCapability, ett_h225_CapacityReportingCapability, CapacityReportingCapability_sequence);
	return offset;
}

static int
dissect_h225_canDisplayAmountString(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_canDisplayAmountString, NULL, NULL);
	return offset;
}

static int
dissect_h225_canEnforceDurationLimit(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_canEnforceDurationLimit, NULL, NULL);
	return offset;
}

static per_sequence_t CallCreditCapability_sequence[] = {
	{ "canDisplayAmountString", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_canDisplayAmountString },
	{ "canEnforceDurationLimit", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_canEnforceDurationLimit },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CallCreditCapability(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallCreditCapability, ett_h225_CallCreditCapability, CallCreditCapability_sequence);
	return offset;
}

static int
dissect_h225_BandwidthDetails_sender(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_BandwidthDetails_sender, NULL, NULL);
	return offset;
}

static int
dissect_h225_BandwidthDetails_multicast(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_BandwidthDetails_multicast, NULL, NULL);
	return offset;
}

static per_sequence_t BandwidthDetails_sequence[] = {
	{ "sender", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandwidthDetails_sender },
	{ "multicast", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandwidthDetails_multicast },
	{ "bandwidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandWidth },
	{ "rtcpAddresses", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rtcpAddress },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_BandwidthDetails(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_BandwidthDetails, ett_h225_BandwidthDetails, BandwidthDetails_sequence);
	return offset;
}

static int
dissect_h225_releaseCompleteCauseIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_releaseCompleteCauseIE, 2, 32, NULL, NULL);
	return offset;
}

static const value_string CallTerminationCause_vals[] = {
	{ 0, "releaseCompleteReason" },
	{ 1, "releaseCompleteCauseIE" },
	{ 0, NULL}
};
static per_choice_t CallTerminationCause_choice[] = {
	{ 0, "releaseCompleteReason", ASN1_EXTENSION_ROOT,
		dissect_h225_ReleaseCompleteReason },
	{ 1, "releaseCompleteCauseIE", ASN1_EXTENSION_ROOT,
		dissect_h225_releaseCompleteCauseIE },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_CallTerminationCause(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_CallTerminationCause, ett_h225_CallTerminationCause, CallTerminationCause_choice, "CallTerminationCause", NULL);
	return offset;
}

static per_sequence_t CircuitInfo_sequence[] = {
	{ "sourceCircuitID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sourceCircuitID },
	{ "destinationCircuitID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destinationCircuitID },
	{ "genericData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CircuitInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CircuitInfo, ett_h225_CircuitInfo, CircuitInfo_sequence);
	return offset;
}

static int
dissect_h225_fastStart_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 length;
	guint32 newoffset;

	offset=dissect_per_length_determinant(tvb, offset, pinfo, tree, hf_h225_fastStart_item_length, &length);
	newoffset=offset + (length<<3);	/* please note that offset is in bits in
					   PER dissectors, but the item length
					   is in octets */
	offset=dissect_h245_OpenLogicalChannel(tvb, offset, pinfo, tree);

	contains_faststart = TRUE;

	return newoffset;
}

static int
dissect_h225_fastStart(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_fastStart, ett_h225_fastStart, dissect_h225_fastStart_item);
	return offset;
}

static int
dissect_h225_fastConnectRefused(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_fastConnectRefused, NULL, NULL);
	return offset;
}

static per_sequence_t InformationUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "fastStart", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastStart },
	{ "fastConnectRefused", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastConnectRefused },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_InformationUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_InformationUUIE, ett_h225_InformationUUIE, InformationUUIE_sequence);
	return offset;
}

static int
dissect_h225_routeCallToSCN(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_routeCallToSCN, ett_h225_routeCallToSCN, dissect_h225_PartyNumber);
	return offset;
}

const value_string AdmissionRejectReason_vals[] = {
	{ 0, "calledPartyNotRegistered" },
	{ 1, "invalidPermission" },
	{ 2, "requestDenied" },
	{ 3, "undefinedReason" },
	{ 4, "callerNotRegistered" },
	{ 5, "routeCallToGatekeeper" },
	{ 6, "invalidEndpointIdentifier" },
	{ 7, "resourceUnavailable" },
	{ 8, "securityDenial" },
	{ 9, "qosControlNotSupported" },
	{ 10, "incompleteAddress" },
	{ 11, "aliasesInconsistent" },
	{ 12, "routeCallToSCN" },
	{ 13, "exceedsCallCapacity" },
	{ 14, "collectDestination" },
	{ 15, "collectPIN" },
	{ 16, "genericDataReason" },
	{ 17, "neededFeatureNotSupported" },
	{ 18, "securityErrors" },
	{ 19, "securityDHmismatch" },
	{ 20, "noRouteToDestination" },
	{ 21, "unallocatedNumber" },
	{ 0, NULL}
};
static per_choice_t AdmissionRejectReason_choice[] = {
	{ 0, "calledPartyNotRegistered", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "invalidPermission", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "requestDenied", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "callerNotRegistered", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "routeCallToGatekeeper", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "invalidEndpointIdentifier", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 7, "resourceUnavailable", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 8, "securityDenial", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 9, "qosControlNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 10, "incompleteAddress", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 11, "aliasesInconsistent", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 12, "routeCallToSCN", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_routeCallToSCN },
	{ 13, "exceedsCallCapacity", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 14, "collectDestination", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 15, "collectPIN", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 16, "genericDataReason", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 17, "neededFeatureNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 18, "securityErrors", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors2 },
	{ 19, "securityDHmismatch", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 20, "noRouteToDestination", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 21, "unallocatedNumber", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_AdmissionRejectReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_AdmissionRejectReason, ett_h225_AdmissionRejectReason, AdmissionRejectReason_choice, "AdmissionRejectReason", &value);
	h225_pi.reason = value;
	return offset;
}

static int
dissect_h225_isoAlgorithm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_isoAlgorithm, NULL);
	return offset;
}

static const value_string EncryptIntAlg_vals[] = {
	{ 0, "nonStandard" },
	{ 1, "isoAlgorithm" },
	{ 0, NULL}
};
static per_choice_t EncryptIntAlg_choice[] = {
	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
		dissect_h225_nonStandard },
	{ 1, "isoAlgorithm", ASN1_EXTENSION_ROOT,
		dissect_h225_isoAlgorithm },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_hMAC_iso10118_2_s(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_hMAC_iso10118_2_s, ett_h225_EncryptIntAlg, EncryptIntAlg_choice, "hMAC_iso10118_2_s", NULL);
	return offset;
}
static int
dissect_h225_hMAC_iso10118_2_l(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_hMAC_iso10118_2_l, ett_h225_EncryptIntAlg, EncryptIntAlg_choice, "hMAC_iso10118_2_l", NULL);
	return offset;
}

static int
dissect_h225_hMAC_iso10118_3(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_hMAC_iso10118_3, NULL);
	return offset;
}


static const value_string NonIsoIntegrityMechanism_vals[] = {
	{ 0, "hMAC-MD5" },
	{ 1, "hMAC_iso10118_2_s" },
	{ 2, "hMAC_iso10118_2_l" },
	{ 3, "hMAC_iso10118_3" },
	{ 0, NULL}
};
static per_choice_t NonIsoIntegrityMechanism_choice[] = {
	{ 0, "hMAC-MD5", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "hMAC_iso10118_2_s", ASN1_EXTENSION_ROOT,
		dissect_h225_hMAC_iso10118_2_s },
	{ 2, "hMAC_iso10118_2_l", ASN1_EXTENSION_ROOT,
		dissect_h225_hMAC_iso10118_2_l },
	{ 3, "hMAC_iso10118_3", ASN1_EXTENSION_ROOT,
		dissect_h225_hMAC_iso10118_3 },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_NonIsoIntegrityMechanism(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_NonIsoIntegrityMechanism, ett_h225_NonIsoIntegrityMechanism, NonIsoIntegrityMechanism_choice, "NonIsoIntegrityMechanism", NULL);
	return offset;
}

static int
dissect_h225_iso9797(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h225_iso9797, NULL);
	return offset;
}

static const value_string IntegrityMechanism_vals[] = {
	{ 0, "nonStandard" },
	{ 1, "digSig" },
	{ 2, "iso9797" },
	{ 3, "nonIsoIM" },
	{ 0, NULL}
};
static per_choice_t IntegrityMechanism_choice[] = {
	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
		dissect_h225_nonStandard },
	{ 1, "digSig", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "iso9797", ASN1_EXTENSION_ROOT,
		dissect_h225_iso9797 },
	{ 3, "nonIsoIM", ASN1_EXTENSION_ROOT,
		dissect_h225_NonIsoIntegrityMechanism },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_IntegrityMechanism(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_IntegrityMechanism, ett_h225_IntegrityMechanism, IntegrityMechanism_choice, "IntegrityMechanism", NULL);
	return offset;
}

const value_string LocationRejectReason_vals[] = {
	{ 0, "notRegistered" },
	{ 1, "invalidPermission" },
	{ 2, "requestDenied" },
	{ 3, "undefinedReason" },
	{ 4, "securityDenial" },
	{ 5, "aliasesInconsistent" },
	{ 6, "routeCalltoSCN" },
	{ 7, "resourceUnavailable" },
	{ 8, "genericDataReason" },
	{ 9, "neededFeatureNotSupported" },
	{10, "hopCountExceeded" },
	{11, "incompleteAddress" },
	{12, "securityError" },
	{13, "securityDHmismatch" },
	{14, "noRouteToDestination" },
	{15, "unallocatedNumber" },
	{ 0, NULL}
};
static per_choice_t LocationRejectReason_choice[] = {
	{ 0, "notRegistered", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "invalidPermission", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "requestDenied", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "securityDenial", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 5, "aliasesInconsistent", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "routeCalltoSCN", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_routeCallToSCN },
	{ 7, "resourceUnavailable", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 8, "genericDataReason", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 9, "neededFeatureNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{10, "hopCountExceeded", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{11, "incompleteAddress", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{12, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors2 },
	{13, "securityDHmismatch", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{14, "noRouteToDestination", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{15, "unallocatedNumber", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_LocationRejectReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_LocationRejectReason, ett_h225_LocationRejectReason, LocationRejectReason_choice, "LocationRejectReason", &value);
	h225_pi.reason = value;
	return offset;
}


static int
dissect_h225_EndpointType_set(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
PER_NOT_DECODED_YET("EndpointType_set");
	return offset;
}

static int
dissect_h225_mc(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_mc, NULL, NULL);
	return offset;
}

static int
dissect_h225_undefinedNode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_undefinedNode, NULL, NULL);
	return offset;
}


static per_sequence_t EndPointType_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "vendor", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_VendorIdentifier },
	{ "gatekeeper", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperInfo },
	{ "gateway", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_gateway },
	{ "mcu", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_mcu },
	{ "terminal", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_TerminalInfo },
	{ "mc", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_mc },
	{ "undefinedNode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_undefinedNode },
	{ "set", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_EndpointType_set },
	{ "supportedTunnelledProtocols", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_TunnelledProtocols },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_EndPointType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_EndPointType, ett_h225_EndPointType, EndPointType_sequence);
	return offset;
}
static int
dissect_h225_destinationType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_destinationType, ett_h225_EndPointType, EndPointType_sequence);
	return offset;
}
static int
dissect_h225_terminalType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_terminalType, ett_h225_EndPointType, EndPointType_sequence);
	return offset;
}
static int
dissect_h225_sourceInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_sourceInfo, ett_h225_EndPointType, EndPointType_sequence);
	return offset;
}
static int
dissect_h225_destinationInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_destinationInfo, ett_h225_EndPointType, EndPointType_sequence);
	return offset;
}

static int
dissect_h225_multipleCalls(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_multipleCalls, NULL, NULL);
	return offset;
}

static int
dissect_h225_maintainConnection(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_maintainConnection, NULL, NULL);
	return offset;
}
static per_sequence_t CallProceedingUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "destinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_destinationInfo },
	{ "h245Address", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245Address },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "h245SecurityMode", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_H245Security },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "fastStart", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastStart },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "fastConnectRefused", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CallProceedingUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallProceedingUUIE, ett_h225_CallProceedingUUIE, CallProceedingUUIE_sequence);
	return offset;
}

static per_sequence_t CapacityReportingSpecification_when_sequence[] = {
	{ "callStart", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_NULL },
	{ "callEnd", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CapacityReportingSpecification_when(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CapacityReportingSpecification_when, ett_h225_CapacityReportingSpecification_when, CapacityReportingSpecification_when_sequence);
	return offset;
}

static per_sequence_t CapacityReportingSpecification_sequence[] = {
	{ "when", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CapacityReportingSpecification_when },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CapacityReportingSpecification(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CapacityReportingSpecification, ett_h225_CapacityReportingSpecification, CapacityReportingSpecification_sequence);
	return offset;
}
static per_sequence_t ProgressUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "destinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_destinationInfo },
	{ "h245Address", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245Address },
	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "h245SecurityMode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_H245Security },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "fastStart", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastStart },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "fastConnectRefused", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ProgressUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ProgressUUIE, ett_h225_ProgressUUIE, ProgressUUIE_sequence);
	return offset;
}


static int
dissect_h225_destExtraCallInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_destExtraCallInfo, ett_h225_destExtraCallInfo, dissect_h225_AliasAddress);
	return offset;
}

static int
dissect_h225_remoteExtensionAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_remoteExtensionAddress, ett_h225_remoteExtensionAddress, dissect_h225_AliasAddress);
	return offset;
}


static int
dissect_h225_aliasAddress_sequence(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_aliasAddress_sequence, ett_h225_aliasAddress_sequence, dissect_h225_AliasAddress);
	return offset;
}

static int
dissect_h225_rasAddress_sequence(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_rasAddress_sequence, ett_h225_rasAddress_sequence, dissect_h225_TransportAddress);
	return offset;
}

static int
dissect_h225_callSignalAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_callSignalAddress, ett_h225_callSignalAddress, dissect_h225_TransportAddress);
	return offset;
}


static per_sequence_t EndPoint_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "aliasAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_aliasAddress_sequence },
	{ "callSignalAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_callSignalAddress },
	{ "rasAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_rasAddress_sequence },
	{ "endpointType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_EndPointType },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "priority", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_priority },
	{ "remoteExtensionAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_remoteExtensionAddress },
	{ "destExtraCallInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destExtraCallInfo },
	{ "alternateTransportAddresses", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AlternateTransportAddress },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_EndPoint(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_EndPoint, ett_h225_EndPoint, EndPoint_sequence);
	return offset;
}


static int
dissect_h225_icv(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
PER_NOT_DECODED_YET("icv");
	return offset;
}

static per_sequence_t ICV_sequence[] = {
	{ "algorithmOID", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
		dissect_h225_algorithmOID },
	{ "icv", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_icv },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ICV(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ICV, ett_h225_ICV, ICV_sequence);
	return offset;
}

static per_sequence_t BandwidthConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "bandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandWidth },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_BandwidthConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_BandwidthConfirm, ett_h225_BandwidthConfirm, BandwidthConfirm_sequence);
	return offset;
}


static per_sequence_t UnregistrationConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_UnregistrationConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_UnregistrationConfirm, ett_h225_UnregistrationConfirm, UnregistrationConfirm_sequence);
	return offset;
}
static per_sequence_t NonStandardMessage_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_NonStandardMessage(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_NonStandardMessage, ett_h225_NonStandardMessage, NonStandardMessage_sequence);
	return offset;
}


static per_sequence_t InfoRequestAck_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_InfoRequestAck(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_InfoRequestAck, ett_h225_InfoRequestAck, InfoRequestAck_sequence);
	return offset;
}
static per_sequence_t InfoRequestNak_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "nakReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_InfoRequestNakReason },
	{ "altGKInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_InfoRequestNak(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_InfoRequestNak, ett_h225_InfoRequestNak, InfoRequestNak_sequence);
	return offset;
}

static per_sequence_t ResourcesAvailableConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ResourcesAvailableConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ResourcesAvailableConfirm, ett_h225_ResourcesAvailableConfirm, ResourcesAvailableConfirm_sequence);
	return offset;
}



static int
dissect_h225_integrity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_integrity, ett_h225_integrity, dissect_h225_IntegrityMechanism);
	return offset;
}


static int
dissect_h225_algorithmOIDs(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_algorithmOIDs, ett_h225_algorithmOIDs, dissect_h225_algorithmOID);
	return offset;
}


static int
dissect_h225_alternateEndpoints(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_alternateEndpoints, ett_h225_alternateEndpoints, dissect_h225_EndPoint);
	return offset;
}



static int
dissect_h225_endpointAlias(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_endpointAlias, ett_h225_endpointAlias, dissect_h225_AliasAddress);
	return offset;
}


static per_sequence_t GatekeeperRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "rasAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rasAddress },
	{ "endpointType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndPointType },
	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "callServices", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_callServices },
	{ "endpointAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_endpointAlias },
	{ "alternateEndpoints", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateEndpoints },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "authenticationCapability", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_authenticationCapability },
	{ "algorithmOIDs", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_algorithmOIDs },
	{ "integrity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_integrity },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "supportsAltGK", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_GatekeeperRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GatekeeperRequest, ett_h225_GatekeeperRequest, GatekeeperRequest_sequence);
	return offset;
}

static per_sequence_t ServiceControlResponse_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "result", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_SCRresult },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "featureSet", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ServiceControlResponse(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ServiceControlResponse, ett_h225_ServiceControlResponse, ServiceControlResponse_sequence);
	return offset;
}



static per_sequence_t DisengageReject_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_DisengageRejectReason },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "altGKInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_DisengageReject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_DisengageReject, ett_h225_DisengageReject, DisengageReject_sequence);
	return offset;
}



static per_sequence_t BandwidthReject_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandRejectReason },
	{ "allowedBandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_allowedBandWidth },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "altGKInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_BandwidthReject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_BandwidthReject, ett_h225_BandwidthReject, BandwidthReject_sequence);
	return offset;
}



static per_sequence_t UnregistrationReject_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_UnregRejectReason },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "altGKInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_UnregistrationReject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_UnregistrationReject, ett_h225_UnregistrationReject, UnregistrationReject_sequence);
	return offset;
}


static int
dissect_h225_endpointAliasPattern(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_endpointAliasPattern, ett_h225_endpointAliasPattern, dissect_h225_AddressPattern);
	return offset;
}

static int
dissect_h225_EndpointIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_BMPString(tvb, offset, pinfo, tree, hf_h225_EndpointIdentifier, 1, 128);
	return offset;
}

static per_sequence_t UnregistrationRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "callSignalAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_callSignalAddress },
	{ "endpointAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_endpointAlias },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "alternateEndpoints", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateEndpoints },
	{ "gatekeeperIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "reason", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_UnregRequestReason },
	{ "endpointAliasPattern", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_endpointAliasPattern },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ "alternateGatekeeper", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateGatekeeper },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_UnregistrationRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_UnregistrationRequest, ett_h225_UnregistrationRequest, UnregistrationRequest_sequence);
	return offset;
}


static int
dissect_h225_terminalAlias(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_terminalAlias, ett_h225_terminalAlias, dissect_h225_AliasAddress);
	return offset;
}



static int
dissect_h225_terminalAliasPattern(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_terminalAliasPattern, ett_h225_terminalAliasPattern, dissect_h225_AddressPattern);
	return offset;
}


static per_sequence_t invalidTerminalAliases_sequence[] = {
	{ "terminalAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_terminalAlias },
	{ "terminalAliasPattern", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_terminalAliasPattern },
	{ "supportedPrefixes", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_invalidTerminalAliases(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_invalidTerminalAliases, ett_h225_invalidTerminalAliases, invalidTerminalAliases_sequence);
	return offset;
}






static int
dissect_h225_duplicateAlias(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_duplicateAlias, ett_h225_duplicateAlias, dissect_h225_AliasAddress);
	return offset;
}





const value_string RegistrationRejectReason_vals[] = {
	{ 0, "discoveryRequired" },
	{ 1, "invalidRevision" },
	{ 2, "invalidCallSignalAddress" },
	{ 3, "invalidRASAddress" },
	{ 4, "duplicateAlias" },
	{ 5, "invalidTerminalType" },
	{ 6, "undefinedReason" },
	{ 7, "transportNotSupported" },
	{ 8, "transportQOSNotSupported" },
	{ 9, "resourceUnavailable" },
	{ 10, "invalidAlias" },
	{ 11, "securityDenial" },
	{ 12, "fullRegistrationRequired" },
	{ 13, "additiveRegistrationNotSupported" },
	{ 14, "invalidTerminalAliases" },
	{ 15, "genericDataReason" },
	{ 16, "neededFeatureNotSupported" },
	{ 17, "securityError" },
	{ 0, NULL}
};
static per_choice_t RegistrationRejectReason_choice[] = {
	{ 0, "discoveryRequired", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 1, "invalidRevision", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 2, "invalidCallSignalAddress", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 3, "invalidRASAddress", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 4, "duplicateAlias", ASN1_EXTENSION_ROOT,
		dissect_h225_duplicateAlias },
	{ 5, "invalidTerminalType", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 6, "undefinedReason", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 7, "transportNotSupported", ASN1_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 8, "transportQOSNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 9, "resourceUnavailable", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 10, "invalidAlias", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 11, "securityDenial", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 12, "fullRegistrationRequired", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 13, "additiveRegistrationNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 14, "invalidTerminalAliases", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_invalidTerminalAliases },
	{ 15, "genericDataReason", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 16, "neededFeatureNotSupported", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 17, "securityError", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SecurityErrors },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_RegistrationRejectReason(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;
	
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_RegistrationRejectReason, ett_h225_RegistrationRejectReason, RegistrationRejectReason_choice, "RegistrationRejectReason", &value);
	h225_pi.reason = value;
	return offset;
}






static per_sequence_t RegistrationReject_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RegistrationRejectReason },
	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "altGKInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RegistrationReject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RegistrationReject, ett_h225_RegistrationReject, RegistrationReject_sequence);
	return offset;
}


static per_sequence_t GatekeeperReject_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_GatekeeperRejectReason },
	{ "altGKInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_GatekeeperReject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GatekeeperReject, ett_h225_GatekeeperReject, GatekeeperReject_sequence);
	return offset;
}



static int
dissect_h225_almostOutOfResources(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_almostOutOfResources, NULL, NULL);
	return offset;
}


static int
dissect_h225_protocols(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_protocols, ett_h225_protocols, dissect_h225_SupportedProtocols);
	return offset;
}

static per_sequence_t ResourcesAvailableIndicate_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "protocols", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_protocols },
	{ "almostOutOfResources", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_almostOutOfResources },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ResourcesAvailableIndicate(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ResourcesAvailableIndicate, ett_h225_ResourcesAvailableIndicate, ResourcesAvailableIndicate_sequence);
	return offset;
}


static int
dissect_h225_amountString(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
PER_NOT_DECODED_YET("amountString");
	return offset;
}



static int
dissect_h225_callDurationLimit(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_callDurationLimit, 1, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}


static int
dissect_h225_enforceCallDurationLimit(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_enforceCallDurationLimit, NULL, NULL);
	return offset;
}


static per_sequence_t CallCreditServiceControl_sequence[] = {
	{ "amountString", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_amountString },
	{ "billingMode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_billingMode },
	{ "callDurationLimit", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_callDurationLimit },
	{ "enforceCallDurationLimit", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_enforceCallDurationLimit },
	{ "callStartingPoint", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CCSCcallStartingPoint },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_CallCreditServiceControl(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallCreditServiceControl, ett_h225_CallCreditServiceControl, CallCreditServiceControl_sequence);
	return offset;
}



static const value_string ScreeningIndicator_vals[] = {
	{ 0, "userProvidedNotScreened" },
	{ 1, "userProvidedVerifiedAndPassed" },
	{ 2, "userProvidedVerifiedAndFailed" },
	{ 3, "networkProvided" },
	{ 0, NULL },
};

static int
dissect_h225_ScreeningIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_ScreeningIndicator, 0, 3,
		NULL, NULL, TRUE);
	return offset;
}

static per_sequence_t ExtendedAliasAddress_sequence[] = {
	{ "address", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_AliasAddress },
	{ "presentationIndicator", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_PresentationIndicator },
	{ "screeningIndicator", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ScreeningIndicator },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ExtendedAliasAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ExtendedAliasAddress, ett_h225_ExtendedAliasAddress, ExtendedAliasAddress_sequence);
	return offset;
}




static int
dissect_h225_messageNotUnderstood(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_messageNotUnderstood, -1, -1, NULL, NULL);
	return offset;
}

static per_sequence_t UnknownMessageResponse_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "messageNotUnderstood", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_messageNotUnderstood },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_UnknownMessageResponse(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_UnknownMessageResponse, ett_h225_UnknownMessageResponse, UnknownMessageResponse_sequence);
	return offset;
}

static int
dissect_h225_CallReferenceValue(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_CallReferenceValue, 0, 65535,
		NULL, NULL, FALSE);
	return offset;
}




static int
dissect_h225_canMapSrcAlias(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_canMapSrcAlias, NULL, NULL);
	return offset;
}

static int
dissect_h225_desiredProtocols(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_desiredProtocols, ett_h225_desiredProtocols, dissect_h225_SupportedProtocols);
	return offset;
}

static int
dissect_h225_willSupplyUUIEs(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_willSupplyUUIEs, NULL, NULL);
	return offset;
}


static int
dissect_h225_destAlternatives(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_destAlternatives, ett_h225_destAlternatives, dissect_h225_EndPoint);
	return offset;
}

static int
dissect_h225_srcAlternatives(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_srcAlternatives, ett_h225_srcAlternatives, dissect_h225_EndPoint);
	return offset;
}

static int
dissect_h225_canMapAlias(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_canMapAlias, NULL, NULL);
	return offset;
}


static int
dissect_h225_answerCall(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_answerCall, NULL, NULL);
	return offset;
}


static int
dissect_h225_activeMC(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_activeMC, NULL, NULL);
	return offset;
}


static int
dissect_h225_srcInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_srcInfo, ett_h225_srcInfo, dissect_h225_AliasAddress);
	return offset;
}

static int
dissect_h225_DestinationInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_DestinationInfo, ett_h225_DestinationInfo, dissect_h225_AliasAddress);
	return offset;
}






static per_sequence_t AdmissionRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "callType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallType },
	{ "callModel", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallModel },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "DestinationInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_DestinationInfo },
	{ "destCallSignalAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destCallSignalAddress },
	{ "destExtraCallInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destExtraCallInfo },
	{ "srcInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_srcInfo },
	{ "sourceCallSignalAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sourceCallSignalAddress },
	{ "bandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandWidth },
	{ "callReferenceValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallReferenceValue },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "callServices", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_callServices },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceID },
	{ "activeMC", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_activeMC },
	{ "answerCall", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_answerCall },
	{ "canMapAlias", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_canMapAlias },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "srcAlternatives", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_srcAlternatives },
	{ "destAlternatives", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destAlternatives },
	{ "gatekeeperIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "transportQOS", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_TransportQOS },
	{ "willSupplyUUIEs", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_willSupplyUUIEs },
	{ "callLinkage", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallLinkage },
	{ "gatewayDataRate", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_gatewayDataRate },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "desiredProtocols", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_desiredProtocols },
	{ "desiredTunnelledProtocol", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_desiredTunnelledProtocol },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ "canMapSrcAlias", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_canMapSrcAlias },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AdmissionRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AdmissionRequest, ett_h225_AdmissionRequest, AdmissionRequest_sequence);
	return offset;
}



static int
dissect_h225_nextSegmentRequested(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_nextSegmentRequested, 0, 65535,
		NULL, NULL, FALSE);
	return offset;
}

static per_sequence_t InfoRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "callReferenceValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallReferenceValue },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "replyAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_replyAddress },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "uuiesRequested", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_UUIEsRequested },
	{ "callLinkage", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallLinkage },
	{ "usageInfoRequested", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RasUsageInfoTypes },
	{ "segmentedResponseSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "nextSegmentRequested", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nextSegmentRequested },
	{ "capacityInfoRequested", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_InfoRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_InfoRequest, ett_h225_InfoRequest, InfoRequest_sequence);
	return offset;
}


static int
dissect_h225_delay(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_delay, 1, 65535,
		NULL, NULL, FALSE);
	return offset;
}

static per_sequence_t RequestInProgress_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "delay", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_delay },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RequestInProgress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RequestInProgress, ett_h225_RequestInProgress, RequestInProgress_sequence);
	return offset;
}

static int
dissect_h225_H248SignalsDescriptor(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_H248SignalsDescriptor, -1, -1, NULL, NULL);
	return offset;
}


static int
dissect_h225_url(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_url, 0, 512);
	return offset;
}


static const value_string ServiceControlDescriptor_vals[] = {
	{ 0, "url" },
	{ 1, "signal" },
	{ 2, "nonStandard" },
	{ 3, "callCreditServiceControl" },
	{ 0, NULL}
};
static per_choice_t ServiceControlDescriptor_choice[] = {
	{ 0, "url", ASN1_EXTENSION_ROOT,
		dissect_h225_url },
	{ 1, "signal", ASN1_EXTENSION_ROOT,
		dissect_h225_H248SignalsDescriptor },
	{ 2, "nonStandard", ASN1_EXTENSION_ROOT,
		dissect_h225_nonStandard },
	{ 3, "callCreditServiceControl", ASN1_EXTENSION_ROOT,
		dissect_h225_CallCreditServiceControl },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_ServiceControlDescriptor(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_ServiceControlDescriptor, ett_h225_ServiceControlDescriptor, ServiceControlDescriptor_choice, "ServiceControlDescriptor", NULL);
	return offset;
}



static int
dissect_h225_sessionId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_sessionId, 0, 255,
		NULL, NULL, FALSE);
	return offset;
}

static per_sequence_t ServiceControlSession_sequence[] = {
	{ "sessionId", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_sessionId },
	{ "contents", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ServiceControlDescriptor },
	{ "reason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ServiceControlSession_reason },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ServiceControlSession(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ServiceControlSession, ett_h225_ServiceControlSession, ServiceControlSession_sequence);
	return offset;
}



static int
dissect_h225_serviceControl(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_serviceControl, ett_h225_serviceControl, dissect_h225_ServiceControlSession);
	return offset;
}


static int
dissect_h225_alertingAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_alertingAddress, ett_h225_alertingAddress, dissect_h225_AliasAddress);
	return offset;
}


static per_sequence_t AlertingUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "destinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_destinationInfo },
	{ "h245Address", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245Address },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "h245SecurityMode", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_H245Security },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of  },
	{ "fastStart", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastStart },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "alertingAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alertingAddress },
	{ "presentationIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_PresentationIndicator },
	{ "screeningIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ScreeningIndicator },
	{ "fastConnectRefused", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AlertingUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AlertingUUIE, ett_h225_AlertingUUIE, AlertingUUIE_sequence);
	return offset;
}

static int
dissect_h225_busyAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_busyAddress, ett_h225_busyAddress, dissect_h225_AliasAddress);
	return offset;
}


static per_sequence_t ReleaseCompleteUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "reason", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ReleaseCompleteReason },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "busyAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_busyAddress },
	{ "presentationIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_PresentationIndicator },
	{ "screeningIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ScreeningIndicator },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ReleaseCompleteUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ReleaseCompleteUUIE, ett_h225_ReleaseCompleteUUIE, ReleaseCompleteUUIE_sequence);
	return offset;
}

static int
dissect_h225_alternativeAliasAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_alternativeAliasAddress, ett_h225_alternativeAliasAddress, dissect_h225_AliasAddress);
	return offset;
}

static per_sequence_t FacilityUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "alternativeAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternativeAddress },
	{ "alternativeAliasAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternativeAliasAddress },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_conferenceID },
	{ "reason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_FacilityReason },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "destExtraCallInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destExtraCallInfo },
	{ "remoteExtensionAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RemoteExtensionAddress },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "conferences", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_conferences },
	{ "h245Address", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245Address },
	{ "fastStart", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastStart },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "fastConnectRefused", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "destinationInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destinationInfo },
	{ "h245SecurityMode", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_H245Security },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_FacilityUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_FacilityUUIE, ett_h225_FacilityUUIE, FacilityUUIE_sequence);
	return offset;
}

static per_sequence_t AdmissionReject_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_AdmissionRejectReason },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "altGKInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "callSignalAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_callSignalAddress },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AdmissionReject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AdmissionReject, ett_h225_AdmissionReject, AdmissionReject_sequence);
	return offset;
}

static int
dissect_h225_hopCount(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_hopCount, 1, 31,
		NULL, NULL, FALSE);
	return offset;
}


static int
dissect_h225_parallelH245Control_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	tvbuff_t *h245_tvb;
	guint32 h245_offset=0;
	guint32 h245_len=0;

	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, -1, -1, -1, &h245_offset, &h245_len);

	if(h245_len){
		gboolean save_info;

		/* dont update the INFO or PROTOCOL fields of the summary */
		save_info=col_get_writable(pinfo->cinfo);
		col_set_writable(pinfo->cinfo, FALSE);
		h245_tvb = tvb_new_subset(tvb, h245_offset, h245_len, h245_len);
		call_dissector(h245dg_handle, h245_tvb, pinfo, tree);
		col_set_writable(pinfo->cinfo, save_info);
	}

	return offset;
}

static int
dissect_h225_parallelH245Control(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_parallelH245Control, ett_h225_parallelH245Control, dissect_h225_parallelH245Control_item);
	return offset;
}

static int
dissect_h225_language(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_language, 1, 32);
	return offset;
}

static int
dissect_h225_languages(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_languages, ett_h225_languages, dissect_h225_language);
	return offset;
}

static int
dissect_h225_mediaWaitForConnect(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_mediaWaitForConnect, NULL, NULL);
	return offset;
}

static int
dissect_h225_canOverlapSend(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_canOverlapSend, NULL, NULL);
	return offset;
}

static int
dissect_h225_sourceAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_sourceAddress, ett_h225_sourceAddress, dissect_h225_AliasAddress);
	return offset;
}

static int
dissect_h225_destinationAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_destinationAddress, ett_h225_destinationAddress, dissect_h225_AliasAddress);
	return offset;
}


static int
dissect_h225_destExtraCRV(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_destExtraCRV, ett_h225_destExtraCRV, dissect_h225_CallReferenceValue);
	return offset;
}

static int
dissect_h225_h245SecurityCapability(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h245SecurityCapability, ett_h225_h245SecurityCapability, dissect_h225_H245Security);
	return offset;
}

static int
dissect_h225_additionalSourceAddresses(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_additionalSourceAddresses, ett_h225_additionalSourceAddresses, dissect_h225_ExtendedAliasAddress);
	return offset;
}



static per_sequence_t SetupUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "h245Address", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245Address },
	{ "sourceAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sourceAddress },
	{ "sourceInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_sourceInfo },
	{ "destinationAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destinationAddress },
	{ "destCallSignalAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destCallSignalAddress },
	{ "destExtraCallInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destExtraCallInfo },
	{ "destExtraCRV", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destExtraCRV },
	{ "activeMC", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_activeMC },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceID },
	{ "conferenceGoal", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceGoal },
	{ "callServices", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_callServices },
	{ "callType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallType },
	{ "sourceCallSignalAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sourceCallSignalAddress },
	{ "RemoteExtensionAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RemoteExtensionAddress },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "h245SecurityCapability", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245SecurityCapability },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "fastStart", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastStart },
	{ "mediaWaitForConnect", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_mediaWaitForConnect },
	{ "canOverlapSend", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_canOverlapSend },
	{ "endpointIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "connectionParameters", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_connectionParameters },
	{ "languages", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_languages },
	{ "presentationIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_PresentationIndicator },
	{ "screeningIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ScreeningIndicator },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "symmetricOperationRequired", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "desiredProtocols", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_desiredProtocols },
	{ "neededFeatures", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_neededFeatures },
	{ "desiredFeatures", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_desiredFeatures },
	{ "supportedFeatures", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_supportedFeatures },
	{ "parallelH245Control", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_parallelH245Control },
	{ "additionalSourceAddresses", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_additionalSourceAddresses },
	{ "hopCount", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_hopCount },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_SetupUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	contains_faststart = FALSE;
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SetupUUIE, ett_h225_SetupUUIE, SetupUUIE_sequence);
	return offset;
}


static int
dissect_h225_connectedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_connectedAddress, ett_h225_connectedAddress, dissect_h225_AliasAddress);
	return offset;
}

static per_sequence_t ConnectUUIE_sequence[] = {
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "h245Address", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245Address },
	{ "destinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_destinationInfo },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceID },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "h245SecurityMode", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_H245Security },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "fastStart", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_fastStart },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "languages", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_languages },
	{ "connectedAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_connectedAddress },
	{ "presentationIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_PresentationIndicator },
	{ "screeningIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ScreeningIndicator },
	{ "fastConnectRefused", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ConnectUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ConnectUUIE, ett_h225_ConnectUUIE, ConnectUUIE_sequence);
	return offset;
}


const value_string h323_message_body_vals[] = {
	{ 0, "setup" },
	{ 1, "callProceeding" },
	{ 2, "connect" },
	{ 3, "alerting" },
	{ 4, "information" },
	{ 5, "releaseComplete" },
	{ 6, "facility" },
	{ 7, "progress" },
	{ 8, "empty" },
	{ 9, "status" },
	{ 10, "statusInquiry" },
	{ 11, "setupAcknowledge" },
	{ 12, "notify" },
	{ 0, NULL}
};
static per_choice_t h323_message_body_choice[] = {
	{ 0, "setup", ASN1_EXTENSION_ROOT,
		dissect_h225_SetupUUIE },
	{ 1, "callProceeding", ASN1_EXTENSION_ROOT,
		dissect_h225_CallProceedingUUIE },
	{ 2, "connect", ASN1_EXTENSION_ROOT,
		dissect_h225_ConnectUUIE },
	{ 3, "alerting", ASN1_EXTENSION_ROOT,
		dissect_h225_AlertingUUIE },
	{ 4, "information", ASN1_EXTENSION_ROOT,
		dissect_h225_InformationUUIE },
	{ 5, "releaseComplete", ASN1_EXTENSION_ROOT,
		dissect_h225_ReleaseCompleteUUIE },
	{ 6, "facility", ASN1_EXTENSION_ROOT,
		dissect_h225_FacilityUUIE },
	{ 7, "progress", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_ProgressUUIE },
	{ 8, "empty", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NULL },
	{ 9, "status", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_StatusUUIE },
	{ 10, "statusInquiry", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_StatusInquiryUUIE },
	{ 11, "setupAcknowledge", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_SetupAcknowledgeUUIE },
	{ 12, "notify", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_NotifyUUIE },
	{ 0, NULL, 0, NULL }
};
static int
dissect_h225_h323_message_body(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value;

	contains_faststart = FALSE;

	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_h323_message_body, ett_h225_h323_message_body, h323_message_body_choice, "h323_message_body", &(value));

	if (check_col(pinfo->cinfo, COL_INFO)){
		col_append_fstr(pinfo->cinfo, COL_INFO, "CS: %s ",
			val_to_str(value, h323_message_body_vals, "<unknown>"));
        }

	if (h225_pi.msg_type == H225_CS) {
		/* Don't override msg_tag value from IRR */
		h225_pi.msg_tag = value;
	}

	if (contains_faststart == TRUE )
	{
		if (check_col(pinfo->cinfo, COL_INFO))
		{
			col_append_str(pinfo->cinfo, COL_INFO, "OpenLogicalChannel " );
		}
	}

	col_set_fence(pinfo->cinfo,COL_INFO);

	return offset;
}

static int
dissect_h225_supportedProtocols(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_supportedProtocols, ett_h225_supportedProtocols, dissect_h225_SupportedProtocols);
	return offset;
}

static int
dissect_h225_modifiedSrcInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_modifiedSrcInfo, ett_h225_modifiedSrcInfo, dissect_h225_AliasAddress);
	return offset;
}


static per_sequence_t LocationConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "callSignalAddress2", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallSignalAddress2 },
	{ "rasAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rasAddress },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "DestinationInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_DestinationInfo },
	{ "destExtraCallInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destExtraCallInfo },
	{ "destinationType", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destinationType },
	{ "remoteExtensionAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_remoteExtensionAddress },
	{ "alternateEndpoints", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateEndpoints },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "alternateTransportAddresses", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AlternateTransportAddress },
	{ "supportedProtocols", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_supportedProtocols },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "modifiedSrcInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_modifiedSrcInfo },
	{ "bandWidth", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_BandWidth },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_LocationConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_LocationConfirm, ett_h225_LocationConfirm, LocationConfirm_sequence);
	return offset;
}

static per_sequence_t LocationReject_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_LocationRejectReason },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "altGKInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AltGKInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_LocationReject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_LocationReject, ett_h225_LocationReject, LocationReject_sequence);
	return offset;
}


static int
dissect_h225_answeredCall(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_answeredCall, NULL, NULL);
	return offset;
}

static per_sequence_t callSpecific_sequence[] = {
	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceID },
	{ "answeredCall", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_answeredCall },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_callSpecific(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_callSpecific, ett_h225_callSpecific, callSpecific_sequence);
	return offset;
}

static per_sequence_t ServiceControlIndication_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		 dissect_h225_RequestSeqNum },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "serviceControl", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_serviceControl },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "callSpecific", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_callSpecific },
	{ "tokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "featureSet", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_ServiceControlIndication(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ServiceControlIndication, ett_h225_ServiceControlIndication, ServiceControlIndication_sequence);
	return offset;
}

static int
dissect_h225_alertingTime(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	return dissect_h235_TimeStamp(tvb, offset, pinfo, tree, hf_h225_alertingTime);
	return offset;
}
static int
dissect_h225_connectTime(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	return dissect_h235_TimeStamp(tvb, offset, pinfo, tree, hf_h225_connectTime);
	return offset;
}
static int
dissect_h225_endTime(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	return dissect_h235_TimeStamp(tvb, offset, pinfo, tree, hf_h225_endTimeStamp);
	return offset;
}

static int
dissect_h225_nonStandardUsageFields_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree,
				hf_h225_nonStandardUsageFields_item);
	return offset;
}

static int
dissect_h225_nonStandardUsageFields(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence_of(tvb, offset, pinfo, tree,
				hf_h225_nonStandardUsageFields,
				ett_h225_T_nonStandardUsageFields, dissect_h225_nonStandardUsageFields_item);
	return offset;
}


static per_sequence_t RasUsageInformation_sequence[] = {
	{ "nonStandardUsageFields", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_nonStandardUsageFields },
	{ "alertingTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alertingTime },
	{ "connectTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_connectTime },
	{ "endTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_endTime },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RasUsageInformation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RasUsageInformation, ett_h225_RasUsageInformation, RasUsageInformation_sequence);
	return offset;
}



static int
dissect_h225_TimeToLive(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_TimeToLive, 1, 4294967295UL,
		NULL, NULL, FALSE);
	return offset;
}

static int dissect_h225_authenticationMode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
  /* XXX - asn2eth.py should use "int" for offset arguments and return values
     in more cases. */
  return dissect_h235_AuthenticationMechanism(tvb, offset, pinfo, tree, hf_h225_authenticationMode);
}

static per_sequence_t GatekeeperConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "rasAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rasAddress },
	{ "alternateGatekeeper", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateGatekeeper },
	{ "authenticationMode", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL, 
		dissect_h225_authenticationMode },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "algorithmOID", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_algorithmOID },
	{ "integrity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_integrity },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_GatekeeperConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GatekeeperConfirm, ett_h225_GatekeeperConfirm, GatekeeperConfirm_sequence);
	return offset;
}



static int
dissect_h225_discoveryComplete(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_discoveryComplete, NULL, NULL);
	return offset;
}


static int
dissect_h225_keepAlive(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_keepAlive, NULL, NULL);
	return offset;
}


static int
dissect_h225_H248PackagesDescriptor(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_H248PackagesDescriptor, -1, -1, NULL, NULL);
	return offset;
}

static int
dissect_h225_supportedH248Packages(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_supportedH248Packages, ett_h225_supportedH248Packages, dissect_h225_H248PackagesDescriptor);
	return offset;
}


static per_sequence_t RegistrationRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "discoveryComplete", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_discoveryComplete },
	{ "callSignalAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_callSignalAddress },
	{ "rasAddress_sequence", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rasAddress_sequence },
	{ "terminalType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_terminalType },
	{ "terminalAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_terminalAlias },
	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "endpointVendor", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_VendorIdentifier },
	{ "alternateEndpoints", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateEndpoints },
	{ "timeToLive", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_TimeToLive },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "keepAlive", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_keepAlive },
	{ "endpointIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "willSupplyUUIEs", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_willSupplyUUIEs },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "alternateTransportAddresses", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AlternateTransportAddress },
	{ "additiveRegistration", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "terminalAliasPattern", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_terminalAliasPattern },
	{ "supportsAltGK", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "usageReportingCapability", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_usageReportingCapability },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "supportedH248Packages", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_supportedH248Packages },
	{ "callCreditCapability", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCreditCapability },
	{ "capacityReportingCapability", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CapacityReportingCapability },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ "restart", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "supportsACFSequences", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RegistrationRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RegistrationRequest, ett_h225_RegistrationRequest, RegistrationRequest_sequence);
	return offset;
}


static per_sequence_t DisengageConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "usageInformation", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RasUsageInformation },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_DisengageConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_DisengageConfirm, ett_h225_DisengageConfirm, DisengageConfirm_sequence);
	return offset;
}


static int
dissect_h225_irrFrequency(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_irrFrequency, 1, 65535,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_willRespondToIRR(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_willRespondToIRR, NULL, NULL);
	return offset;
}


static int
dissect_h225_usageSpec(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_usageSpec, ett_h225_usageSpec, dissect_h225_RasUsageSpecification);
	return offset;
}

static per_sequence_t AdmissionConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "bandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandWidth },
	{ "callModel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallModel },
	{ "destCallSignalAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_destCallSignalAddress },
	{ "irrFrequency", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_irrFrequency },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "DestinationInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_DestinationInfo },
	{ "destExtraCallInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destExtraCallInfo },
	{ "destinationType", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_destinationType },
	{ "remoteExtensionAddress", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_remoteExtensionAddress },
	{ "alternateEndpoints", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateEndpoints },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "transportQOS", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_TransportQOS },
	{ "willRespondToIRR", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_willRespondToIRR },
	{ "uuiesRequested", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_UUIEsRequested },
	{ "languages", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_languages },
	{ "alternateTransportAddresses", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AlternateTransportAddress },
	{ "useSpecifiedTransport", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_UseSpecifiedTransport },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "usageSpec", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_usageSpec },
	{ "supportedProtocols", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_supportedProtocols },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "multipleCalls", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_multipleCalls },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ "modifiedSrcInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_modifiedSrcInfo },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_AdmissionConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AdmissionConfirm, ett_h225_AdmissionConfirm, AdmissionConfirm_sequence);
	return offset;
}


static per_sequence_t DisengageRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceID },
	{ "callReferenceValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallReferenceValue },
	{ "disengageReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_DisengageReason },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "gatekeeperIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "answeredCall", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_answeredCall },
	{ "callLinkage", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallLinkage },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "usageInformation", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RasUsageInformation },
	{ "terminationCause", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallTerminationCause },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_DisengageRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_DisengageRequest, ett_h225_DisengageRequest, DisengageRequest_sequence);
	return offset;
}


static int
dissect_h225_SourceInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_SourceInfo, ett_h225_SourceInfo, dissect_h225_AliasAddress);
	return offset;
}

static int
dissect_h225_hopCount255(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_hopCount255, 1, 255,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_sourceEndpointInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_sourceEndpointInfo, ett_h225_sourceEndpointInfo, dissect_h225_AliasAddress);
	return offset;
}

static per_sequence_t LocationRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "DestinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_DestinationInfo },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "replyAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_replyAddress },
	{ "SourceInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_SourceInfo },
	{ "canMapAlias", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_canMapAlias },
	{ "gatekeeperIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "desiredProtocols", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_desiredProtocols },
	{ "desiredTunnelledProtocol", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_desiredTunnelledProtocol },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ "hopCount255", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_hopCount255 },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "bandWidth", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_BandWidth },
	{ "sourceEndpointInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_sourceEndpointInfo },
	{ "canMapSrcAlias", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_canMapSrcAlias },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_LocationRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_LocationRequest, ett_h225_LocationRequest, LocationRequest_sequence);
	return offset;
}

static int
dissect_h225_bandwidthDetails(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_bandwidthDetails, ett_h225_bandwidthDetails, dissect_h225_BandwidthDetails);
	return offset;
}

static per_sequence_t BandwidthRequest_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceID },
	{ "callReferenceValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallReferenceValue },
	{ "callType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallType },
	{ "bandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandWidth },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "gatekeeperIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "answeredCall", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_answeredCall },
	{ "callLinkage", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallLinkage },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "usageInformation", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RasUsageInformation },
	{ "bandwidthDetails", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_bandwidthDetails },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_BandwidthRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_BandwidthRequest, ett_h225_BandwidthRequest, BandwidthRequest_sequence);
	return offset;
}


static int
dissect_h225_admissionConfirmSequence(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_admissionConfirmSequence, ett_h225_admissionConfirmSequence, dissect_h225_AdmissionConfirm);
	return offset;
}


static int
dissect_h225_messageContent_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	guint32 value_offset, value_len;
	tvbuff_t *next_tvb;

	offset = dissect_per_octet_string(tvb, offset, pinfo, tree,
				hf_h225_messageContent_item, -1, -1,
				&value_offset, &value_len);

	if (value_len > 0) {
		next_tvb = tvb_new_subset(tvb, value_offset, value_len, value_len);
		call_dissector((tp_handle)?tp_handle:data_handle, next_tvb, pinfo, tree);
	}
	return offset;
}


static int
dissect_h225_messageContent(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_messageContent, ett_h225_messageContent, dissect_h225_messageContent_item);
	return offset;
}


static int
dissect_h225_h4501SupplementaryService_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	tvbuff_t *h4501_tvb;
	guint32 h4501_offset=0;
	guint32 h4501_len=0;

	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, -1, -1, -1, &h4501_offset, &h4501_len);

	if(h4501_len){
		h4501_tvb = tvb_new_subset(tvb, h4501_offset, h4501_len, h4501_len);
		call_dissector(h4501_handle, h4501_tvb, pinfo, tree);
	}
	return offset;
}

static int
dissect_h225_h4501SupplementaryService(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h4501SupplementaryService, ett_h225_h4501SupplementaryService, dissect_h225_h4501SupplementaryService_item);
	return offset;
}


static per_sequence_t tunnelledSignallingMessage_sequence[] = {
	{ "tunnelledProtocolID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_TunnelledProtocol },
	{ "messageContent", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_messageContent },
	{ "tunnellingRequired", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_tunnelledSignallingMessage(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	tp_handle = NULL;
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_tunnelledSignallingMessage, ett_h225_tunnelledSignallingMessage, tunnelledSignallingMessage_sequence);
	return offset;
}


static int
dissect_h225_h245Tunneling(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_h245Tunneling, NULL, NULL);
	return offset;
}


static int
dissect_h225_h245Control_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	tvbuff_t *h245_tvb;
	guint32 h245_offset=0;
	guint32 h245_len=0;

	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, -1, -1, -1, &h245_offset, &h245_len);

	if(h245_len){
		h245_tvb = tvb_new_subset(tvb, h245_offset, h245_len, h245_len);
		call_dissector(h245dg_handle, h245_tvb, pinfo, tree);
	}

	return offset;
}


static int
dissect_h225_h245Control(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_h245Control, ett_h225_h245Control, dissect_h225_h245Control_item);
	return offset;
}


static int
dissect_h225_nonStandardControl_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree,
				hf_h225_nonStandardControl_item);
	return offset;
}

static int
dissect_h225_nonStandardControl(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset = dissect_per_sequence_of(tvb, offset, pinfo, tree,
				hf_h225_nonStandardControl,
				ett_h225_T_nonStandardControl, dissect_h225_nonStandardControl_item);
	return offset;
}


static per_sequence_t H323_UU_PDU_sequence[] = {
	{ "h323_message_body", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_h323_message_body },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "h4501SupplementaryService", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h4501SupplementaryService },
	{ "h245Tunneling", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_h245Tunneling },
	{ "h245Control", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_h245Control },
	{ "nonStandardControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardControl },
	{ "callLinkage", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallLinkage },
	{ "tunnelledSignallingMessage", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tunnelledSignallingMessage },
	{ "provisionalRespToH245Tunneling", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "stimulusControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_StimulusControl },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_H323_UU_PDU(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_H323_UU_PDU, ett_h225_H323_UU_PDU, H323_UU_PDU_sequence);
	return offset;
}


static int
dissect_h225_makeCall(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_makeCall, NULL, NULL);
	return offset;
}

static int
dissect_h225_useGKCallSignalAddressToMakeCall(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_useGKCallSignalAddressToMakeCall, NULL, NULL);
	return offset;
}


static int
dissect_h225_useGKCallSignalAddressToAnswer(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_useGKCallSignalAddressToAnswer, NULL, NULL);
	return offset;
}

static per_sequence_t preGrantedARQ_sequence[] = {
	{ "makeCall", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_makeCall },
	{ "useGKCallSignalAddressToMakeCall", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_useGKCallSignalAddressToMakeCall },
	{ "answerCall", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_answerCall },
	{ "useGKCallSignalAddressToAnswer", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_useGKCallSignalAddressToAnswer },
	{ "irrFrequencyInCall", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_irrFrequency },
	{ "totalBandwidthRestriction", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_totalBandwidthRestriction },
	{ "alternateTransportAddresses", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_AlternateTransportAddress },
	{ "useSpecifiedTransport", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_UseSpecifiedTransport },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_preGrantedARQ(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_preGrantedARQ, ett_h225_preGrantedARQ, preGrantedARQ_sequence);
	return offset;
}



static per_sequence_t RegistrationConfirm_sequence[] = {
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_ProtocolIdentifier },
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "callSignalAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_callSignalAddress },
	{ "terminalAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_terminalAlias },
	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_GatekeeperIdentifier },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "alternateGatekeeper", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_alternateGatekeeper },
	{ "timeToLive", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_TimeToLive },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "willRespondToIRR", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_willRespondToIRR },
	{ "preGrantedARQ", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_preGrantedARQ },
	{ "maintainConnection", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_maintainConnection },
	{ "serviceControl", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_serviceControl },
	{ "supportsAdditiveRegistration", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_NULL },
	{ "terminalAliasPattern", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_terminalAliasPattern },
	{ "supportedPrefixes", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_SupportedPrefixes },
	{ "usageSpec", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_usageSpec },
	{ "featureServerAlias", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_featureServerAlias },
	{ "capacityReportingSpec", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CapacityReportingSpecification },
	{ "featureSet", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_FeatureSet },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_RegistrationConfirm(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_RegistrationConfirm, ett_h225_RegistrationConfirm, RegistrationConfirm_sequence);
	return offset;
}


static int
dissect_h225_sent(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_sent, NULL, NULL);
	return offset;
}

static per_sequence_t pdu_item_sequence[] = {
	{ "h323pdu", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_H323_UU_PDU },
	{ "sent", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
		dissect_h225_sent },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_pdu_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	gboolean save_info;

	/* dont update the INFO or PROTOCOL fields of the summary */
	save_info=col_get_writable(pinfo->cinfo);
	col_set_writable(pinfo->cinfo, FALSE);
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_pdu_item, ett_h225_pdu_item, pdu_item_sequence);
	col_set_writable(pinfo->cinfo, save_info);
	return offset;
}


static int
dissect_h225_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_pdu, ett_h225_pdu, dissect_h225_pdu_item);
	return offset;
}



static int
dissect_h225_originator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_originator, NULL, NULL);
	return offset;
}

static int
dissect_h225_audio(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_audio, ett_h225_audio, dissect_h225_RTPSession);
	return offset;
}

static int
dissect_h225_video(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_video, ett_h225_video, dissect_h225_RTPSession);
	return offset;
}

static int
dissect_h225_data(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_data, ett_h225_data, dissect_h225_RTPSession);
	return offset;
}


static int
dissect_h225_substituteConfIDs(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_substituteConfIDs, ett_h225_substituteConfIDs, dissect_h225_conferenceID);
	return offset;
}


static per_sequence_t perCallInfo_item_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "callReferenceValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallReferenceValue },
	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_conferenceID },
	{ "originator", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_originator },
	{ "audio", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_audio },
	{ "video", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_video },
	{ "data", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_data },
	{ "h245", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_h245 },
	{ "callSignaling", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_callSignaling },
	{ "callType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallType },
	{ "bandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_BandWidth },
	{ "callModel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallModel },
	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_CallIdentifier },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "substituteConfIDs", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_substituteConfIDs },
	{ "pdu", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_pdu },
	{ "callLinkage", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallLinkage },
	{ "usageInformation", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_RasUsageInformation },
	{ "circuitInfo", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CircuitInfo },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_perCallInfo_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_perCallInfo_item, ett_h225_perCallInfo_item, perCallInfo_item_sequence);
	return offset;
}




static int
dissect_h225_perCallInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_perCallInfo, ett_h225_perCallInfo, dissect_h225_perCallInfo_item);
	return offset;
}



static int
dissect_h225_needResponse(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_needResponse, NULL, NULL);
	return offset;
}


static int
dissect_h225_unsolicited(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_unsolicited, NULL, NULL);
	return offset;
}

static per_sequence_t InfoRequestResponse_sequence[] = {
	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_nonStandardData },
	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_RequestSeqNum },
	{ "endpointType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndPointType },
	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_EndpointIdentifier },
	{ "rasAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_rasAddress },
	{ "callSignalAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_callSignalAddress },
	{ "endpointAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_endpointAlias },
	{ "perCallInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_perCallInfo },
	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_tokens },
	{ "cryptoTokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CryptoH323Token_sequence_of },
	{ "integrityCheckValue", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_ICV },
	{ "needResponse", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_needResponse },
	{ "capacity", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_CallCapacity },
	{ "irrStatus", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_InfoRequestResponseStatus },
	{ "unsolicited", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_unsolicited },
	{ "genericData", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_genericData },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_InfoRequestResponse(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_InfoRequestResponse, ett_h225_InfoRequestResponse, InfoRequestResponse_sequence);
	return offset;
}



static int
dissect_h225_protocol_discriminator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_constrained_integer(tvb, offset, pinfo,
		tree, hf_h225_protocol_discriminator, 0, 255,
		NULL, NULL, FALSE);
	return offset;
}

static int
dissect_h225_user_information(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h225_user_information, 1, 131, NULL, NULL);
	return offset;
}

static per_sequence_t user_data_sequence[] = {
	{ "protocol-discriminator", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_protocol_discriminator },
	{ "user-information", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_user_information },
	{ NULL, 0, 0, NULL }
};
static int
dissect_h225_user_data(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_user_data, ett_h225_user_data, user_data_sequence);
	return offset;
}




const value_string RasMessage_vals[] = {
	{ 0, "gatekeeperRequest" },
	{ 1, "gatekeeperConfirm" },
	{ 2, "gatekeeperReject" },
	{ 3, "registrationRequest" },
	{ 4, "registrationConfirm" },
	{ 5, "registrationReject" },
	{ 6, "unregistrationRequest" },
	{ 7, "unregistrationConfirm" },
	{ 8, "unregistrationReject" },
	{ 9, "admissionRequest" },
	{10, "admissionConfirm" },
	{11, "admissionReject" },
	{12, "bandwidthRequest" },
	{13, "bandwidthConfirm" },
	{14, "bandwidthReject" },
	{15, "disengageRequest" },
	{16, "disengageConfirm" },
	{17, "disengageReject" },
	{18, "locationRequest" },
	{19, "locationConfirm" },
	{20, "locationReject" },
	{21, "infoRequest" },
	{22, "infoRequestResponse" },
	{23, "nonStandardMessage" },
	{24, "unknownMessageResponse" },
	{25, "requestInProgress" },
	{26, "resourcesAvailableIndicate" },
	{27, "resourcesAvailableConfirm" },
	{28, "infoRequestAck" },
	{29, "infoRequestNak" },
	{30, "serviceControlIndication" },
	{31, "serviceControlResponse" },
	{32, "admissionConfirmSequence" },
	{ 0, NULL}
};
static per_choice_t RasMessage_choice[] = {
	{ 0, "gatekeeperRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_GatekeeperRequest },
	{ 1, "gatekeeperConfirm", ASN1_EXTENSION_ROOT,
		dissect_h225_GatekeeperConfirm },
	{ 2, "gatekeeperReject", ASN1_EXTENSION_ROOT,
		dissect_h225_GatekeeperReject },
	{ 3, "registrationRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_RegistrationRequest },
	{ 4, "registrationConfirm", ASN1_EXTENSION_ROOT,
		dissect_h225_RegistrationConfirm },
	{ 5, "registrationReject", ASN1_EXTENSION_ROOT,
		dissect_h225_RegistrationReject },
	{ 6, "unregistrationRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_UnregistrationRequest },
	{ 7, "unregistrationConfirm", ASN1_EXTENSION_ROOT,
		dissect_h225_UnregistrationConfirm },
	{ 8, "unregistrationReject", ASN1_EXTENSION_ROOT,
		dissect_h225_UnregistrationReject },
	{ 9, "admissionRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_AdmissionRequest },
	{10, "admissionConfirm", ASN1_EXTENSION_ROOT,
		dissect_h225_AdmissionConfirm },
	{11, "admissionReject", ASN1_EXTENSION_ROOT,
		dissect_h225_AdmissionReject },
	{12, "bandwidthRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_BandwidthRequest },
	{13, "bandwidthConfirm", ASN1_EXTENSION_ROOT,
		dissect_h225_BandwidthConfirm },
	{14, "bandwidthReject", ASN1_EXTENSION_ROOT,
		dissect_h225_BandwidthReject },
	{15, "disengageRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_DisengageRequest },
	{16, "disengageConfirm", ASN1_EXTENSION_ROOT,
		dissect_h225_DisengageConfirm },
	{17, "disengageReject", ASN1_EXTENSION_ROOT,
		dissect_h225_DisengageReject },
	{18, "locationRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_LocationRequest },
	{19, "locationConfirm", ASN1_EXTENSION_ROOT,
		dissect_h225_LocationConfirm },
	{20, "locationReject", ASN1_EXTENSION_ROOT,
		dissect_h225_LocationReject },
	{21, "infoRequest", ASN1_EXTENSION_ROOT,
		dissect_h225_InfoRequest },
	{22, "infoRequestResponse", ASN1_EXTENSION_ROOT,
		dissect_h225_InfoRequestResponse },
	{23, "nonStandardMessage", ASN1_EXTENSION_ROOT,
		dissect_h225_NonStandardMessage },
	{24, "unknownMessageResponse", ASN1_EXTENSION_ROOT,
		dissect_h225_UnknownMessageResponse },
	{25, "requestInProgress", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_RequestInProgress },
	{26, "resourcesAvailableIndicate", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_ResourcesAvailableIndicate },
	{27, "resourcesAvailableConfirm", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_ResourcesAvailableConfirm },
	{28, "infoRequestAck", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_InfoRequestAck },
	{29, "infoRequestNak", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_InfoRequestNak },
	{30, "serviceControlIndication", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_ServiceControlIndication },
	{31, "serviceControlResponse", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_ServiceControlResponse },
	{32, "admissionConfirmSequence", ASN1_NOT_EXTENSION_ROOT,
		dissect_h225_admissionConfirmSequence },
	{ 0, NULL, 0, NULL }
};
static void
dissect_h225_RasMessage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
	proto_item *it;
	proto_tree *tr;
	guint32 offset=0;
	guint32 value;

	/* Init struct for collecting h225_packet_info */
	reset_h225_packet_info(&(h225_pi));
	h225_pi.msg_type = H225_RAS;

	if (check_col(pinfo->cinfo, COL_PROTOCOL)){
		col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.225.0");
	}

	it=proto_tree_add_protocol_format(tree, proto_h225, tvb, 0, tvb_length(tvb), "H.225.0 RAS");
	tr=proto_item_add_subtree(it, ett_h225);

	offset=dissect_per_choice(tvb, offset, pinfo, tr, hf_h225_RasMessage, ett_h225_RasMessage, RasMessage_choice, "RasMessage", &value);

	if (check_col(pinfo->cinfo, COL_INFO)){
		col_add_fstr(pinfo->cinfo, COL_INFO, "RAS: %s ",
			val_to_str(value, RasMessage_vals, "<unknown>"));
	}
	h225_pi.msg_tag = value;

	ras_call_matching(tvb, pinfo, tr, &(h225_pi));

	tap_queue_packet(h225_tap, pinfo, &h225_pi);
}






static per_sequence_t H323_UserInformation_sequence[] = {
	{ "h323_uu_pdu", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
		dissect_h225_H323_UU_PDU },
	{ "user_data", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
		dissect_h225_user_data },
	{ NULL, 0, 0, NULL }
};
static void
dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
	proto_item *it;
	proto_tree *tr;
	guint32 offset=0;

	/* Init struct for collecting h225_packet_info */
	reset_h225_packet_info(&(h225_pi));
	h225_pi.msg_type = H225_CS;

	if (check_col(pinfo->cinfo, COL_PROTOCOL)){
		col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.225.0");
	}
	if (check_col(pinfo->cinfo, COL_INFO)){
		col_clear(pinfo->cinfo, COL_INFO);
	}

	it=proto_tree_add_protocol_format(tree, proto_h225, tvb, 0, tvb_length(tvb), "H.225.0 CS");
	tr=proto_item_add_subtree(it, ett_h225);

	offset=dissect_per_sequence(tvb, offset, pinfo, tr, hf_h225_H323_UserInformation, ett_h225_H323_UserInformation, H323_UserInformation_sequence);

	tap_queue_packet(h225_tap, pinfo, &h225_pi);
}



void
dissect_h225ras(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
	dissect_tpkt_encap(tvb, pinfo, tree, h225_reassembly, h225ras_handle);
}



void
proto_register_h225(void)
{
	static hf_register_info hf[] =
	{
	{ &hf_h225_PresentationIndicator,
		{ "PresentationIndicator", "h225.PresentationIndicator", FT_UINT32, BASE_DEC,
		VALS(PresentationIndicator_vals), 0, "PresentationIndicator choice", HFILL }},
	{ &hf_h225_CryptoH323Token,
		{ "CryptoH323Token", "h225.CryptoH323Token", FT_UINT32, BASE_DEC,
		VALS(CryptoH323Token_vals), 0, "CryptoH323Token choice", HFILL }},
	{ &hf_h225_conferenceGoal,
		{ "conferenceGoal", "h225.conferenceGoal", FT_UINT32, BASE_DEC,
		VALS(conferenceGoal_vals), 0, "conferenceGoal choice", HFILL }},
	{ &hf_h225_ScnConnectionType,
		{ "ScnConnectionType", "h225.ScnConnectionType", FT_UINT32, BASE_DEC,
		VALS(ScnConnectionType_vals), 0, "ScnConnectionType choice", HFILL }},
	{ &hf_h225_ScnConnectionAggregation,
		{ "ScnConnectionAggregation", "h225.ScnConnectionAggregation", FT_UINT32, BASE_DEC,
		VALS(ScnConnectionAggregation_vals), 0, "ScnConnectionAggregation choice", HFILL }},
	{ &hf_h225_FacilityReason,
		{ "FacilityReason", "h225.FacilityReason", FT_UINT32, BASE_DEC,
		VALS(FacilityReason_vals), 0, "FacilityReason choice", HFILL }},
	{ &hf_h225_PublicTypeOfNumber,
		{ "PublicTypeOfNumber", "h225.PublicTypeOfNumber", FT_UINT32, BASE_DEC,
		VALS(PublicTypeOfNumber_vals), 0, "PublicTypeOfNumber choice", HFILL }},
	{ &hf_h225_PrivateTypeOfNumber,
		{ "PrivateTypeOfNumber", "h225.PrivateTypeOfNumber", FT_UINT32, BASE_DEC,
		VALS(PrivateTypeOfNumber_vals), 0, "PrivateTypeOfNumber choice", HFILL }},
	{ &hf_h225_UseSpecifiedTransport,
		{ "UseSpecifiedTransport", "h225.UseSpecifiedTransport", FT_UINT32, BASE_DEC,
		VALS(UseSpecifiedTransport_vals), 0, "UseSpecifiedTransport choice", HFILL }},
	{ &hf_h225_SecurityErrors,
		{ "SecurityErrors", "h225.SecurityErrors", FT_UINT32, BASE_DEC,
		VALS(SecurityErrors_vals), 0, "SecurityErrors choice", HFILL }},
	{ &hf_h225_SecurityErrors2,
		{ "SecurityErrors2", "h225.SecurityErrors2", FT_UINT32, BASE_DEC,
		VALS(SecurityErrors2_vals), 0, "SecurityErrors2 choice", HFILL }},
	{ &hf_h225_ServiceControlSession_reason,
		{ "ServiceControlSession_reason", "h225.ServiceControlSession_reason", FT_UINT32, BASE_DEC,
		VALS(ServiceControlSession_reason_vals), 0, "ServiceControlSession_reason choice", HFILL }},
	{ &hf_h225_billingMode,
		{ "billingMode", "h225.billingMode", FT_UINT32, BASE_DEC,
		VALS(billingMode_vals), 0, "billingMode choice", HFILL }},
	{ &hf_h225_CCSCcallStartingPoint,
		{ "CCSCcallStartingPoint", "h225.CCSCcallStartingPoint", FT_UINT32, BASE_DEC,
		VALS(CCSCcallStartingPoint_vals), 0, "CCSCcallStartingPoint choice", HFILL }},
	{ &hf_h225_GatekeeperRejectReason,
		{ "GatekeeperRejectReason", "h225.GatekeeperRejectReason", FT_UINT32, BASE_DEC,
		VALS(GatekeeperRejectReason_vals), 0, "GatekeeperRejectReason choice", HFILL }},
	{ &hf_h225_UnregRequestReason,
		{ "UnregRequestReason", "h225.UnregRequestReason", FT_UINT32, BASE_DEC,
		VALS(UnregRequestReason_vals), 0, "UnregRequestReason choice", HFILL }},
	{ &hf_h225_UnregRejectReason,
		{ "UnregRejectReason", "h225.UnregRejectReason", FT_UINT32, BASE_DEC,
		VALS(UnregRejectReason_vals), 0, "UnregRejectReason choice", HFILL }},
	{ &hf_h225_CallType,
		{ "CallType", "h225.CallType", FT_UINT32, BASE_DEC,
		VALS(CallType_vals), 0, "CallType choice", HFILL }},
	{ &hf_h225_CallModel,
		{ "CallModel", "h225.CallModel", FT_UINT32, BASE_DEC,
		VALS(CallModel_vals), 0, "CallModel choice", HFILL }},
	{ &hf_h225_TransportQOS,
		{ "TransportQOS", "h225.TransportQOS", FT_UINT32, BASE_DEC,
		VALS(TransportQOS_vals), 0, "TransportQOS choice", HFILL }},
	{ &hf_h225_BandRejectReason,
		{ "BandRejectReason", "h225.BandRejectReason", FT_UINT32, BASE_DEC,
		VALS(BandRejectReason_vals), 0, "BandRejectReason choice", HFILL }},
	{ &hf_h225_DisengageReason,
		{ "DisengageReason", "h225.DisengageReason", FT_UINT32, BASE_DEC,
		VALS(DisengageReason_vals), 0, "DisengageReason choice", HFILL }},
	{ &hf_h225_DisengageRejectReason,
		{ "DisengageRejectReason", "h225.DisengageRejectReason", FT_UINT32, BASE_DEC,
		VALS(DisengageRejectReason_vals), 0, "DisengageRejectReason choice", HFILL }},
	{ &hf_h225_InfoRequestNakReason,
		{ "InfoRequestNakReason", "h225.InfoRequestNakReason", FT_UINT32, BASE_DEC,
		VALS(InfoRequestNakReason_vals), 0, "InfoRequestNakReason choice", HFILL }},
	{ &hf_h225_SCRresult,
		{ "SCRresult", "h225.SCRresult", FT_UINT32, BASE_DEC,
		VALS(SCRresult_vals), 0, "SCRresult choice", HFILL }},
	{ &hf_h225_GatekeeperInfo,
		{ "GatekeeperInfo", "h225.GatekeeperInfo", FT_NONE, BASE_NONE,
		NULL, 0, "GatekeeperInfo sequence", HFILL }},
	{ &hf_h225_SecurityServiceMode_encryption,
		{ "Encryption", "h225.SecurityServiceMode_encryption", FT_UINT32, BASE_DEC,
		VALS(SecurityServiceMode_vals), 0, "Encryption SecurityServiceMode choice", HFILL }},
	{ &hf_h225_SecurityServiceMode_authentication,
		{ "Authentication", "h225.SecurityServiceMode_authentication", FT_UINT32, BASE_DEC,
		VALS(SecurityServiceMode_vals), 0, "Authentication SecurityServiceMode choice", HFILL }},
	{ &hf_h225_SecurityServiceMode_integrity,
		{ "Integrity", "h225.SecurityServiceMode_integrity", FT_UINT32, BASE_DEC,
		VALS(SecurityServiceMode_vals), 0, "Integrity SecurityServiceMode choice", HFILL }},
	{ &hf_h225_SecurityCapabilities_tls,
		{ "TLS", "h225.SecurityCapabilities.tls", FT_NONE, BASE_NONE,
		NULL, 0, "TLS SecurityCapabilities sequence", HFILL }},
	{ &hf_h225_SecurityCapabilities_ipsec,
		{ "IPSec", "h225.SecurityCapabilities.ipsec", FT_NONE, BASE_NONE,
		NULL, 0, "IPSec SecurityCapabilities sequence", HFILL }},
	{ &hf_h225_H245Security,
		{ "H245Security", "h225.H245Security", FT_UINT32, BASE_DEC,
		VALS(H245Security_vals), 0, "H245Security choice", HFILL }},
	{ &hf_h225_nonStandardUsageTypes,
		{ "nonStandardUsageTypes", "h225.nonStandardUsageTypes", FT_NONE, BASE_NONE,
		NULL, 0, "SEQUENCE OF NonStandardParameter", HFILL }},
	{ &hf_h225_nonStandardUsageTypes_item,
		{ "nonStandardUsageTypes", "h225.nonStandardUsageTypes_item", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardParameter", HFILL }},
	{ &hf_h225_route,
		{ "route", "h225.route", FT_NONE, BASE_NONE,
		NULL, 0, "Source Routing route", HFILL }},
	{ &hf_h225_RasUsageInfoTypes,
		{ "RasUsageInfoTypes", "h225.RasUsageInfoTypes", FT_NONE, BASE_NONE,
		NULL, 0, "RasUsageInfoTypes sequence", HFILL }},
	{ &hf_h225_usageReportingCapability,
		{ "usageReportingCapability", "h225.usageReportingCapability", FT_NONE, BASE_NONE,
		NULL, 0, "usageReportingCapability sequence", HFILL }},
	{ &hf_h225_BandWidth,
		{ "BandWidth", "h225.BandWidth", FT_UINT32, BASE_DEC,
		NULL, 0, "BandWidth in units of 100bits", HFILL }},
	{ &hf_h225_channelRate,
		{ "channelRate", "h225.channelRate", FT_UINT32, BASE_DEC,
		NULL, 0, "channelRate in units of 100bits", HFILL }},
	{ &hf_h225_totalBandwidthRestriction,
		{ "totalBandwidthRestriction", "h225.totalBandwidthRestriction", FT_UINT32, BASE_DEC,
		NULL, 0, "totalBandwidthRestriction in units of 100bits", HFILL }},
	{ &hf_h225_allowedBandWidth,
		{ "allowedBandWidth", "h225.allowedBandWidth", FT_UINT32, BASE_DEC,
		NULL, 0, "allowedBandWidth in units of 100bits", HFILL }},
	{ &hf_h225_channelMultiplier,
		{ "channelMultiplier", "h225.channelMultiplier", FT_UINT32, BASE_DEC,
		NULL, 0, "channelMultiplier", HFILL }},
	{ &hf_h225_DataRate,
		{ "DataRate", "h225.DataRate", FT_NONE, BASE_NONE,
		NULL, 0, "DataRate sequence", HFILL }},
	{ &hf_h225_gatewayDataRate,
		{ "gatewayDataRate", "h225.gatewayDataRate", FT_NONE, BASE_NONE,
		NULL, 0, "gatewayDataRate sequence", HFILL }},
	{ &hf_h225_dataRatesSupported,
		{ "dataRatesSupported", "h225.dataRatesSupported", FT_NONE, BASE_NONE,
		NULL, 0, "dataRatesSupported sequence of", HFILL }},
	{ &hf_h225_TerminalInfo,
		{ "TerminalInfo", "h225.TerminalInfo", FT_NONE, BASE_NONE,
		NULL, 0, "TerminalInfo sequence", HFILL }},
	{ &hf_h225_cname,
		{ "cname", "h225.cname", FT_STRING, BASE_NONE,
		NULL, 0, "cname", HFILL }},
	{ &hf_h225_h248Message,
		{ "h248Message", "h225.h248Message", FT_STRING, BASE_NONE,
		NULL, 0, "h248Message", HFILL }},
	{ &hf_h225_conferenceID,
		{ "conferenceID", "h225.conferenceID", FT_BYTES, BASE_HEX,
		NULL, 0, "conferenceID", HFILL }},
	{ &hf_h225_Generic_nonStandard,
		{ "nonStandard", "h225.Generic_nonStandard", FT_BYTES, BASE_HEX,
		NULL, 0, "Generic_nonStandard", HFILL }},
	{ &hf_h225_guid,
		{ "guid", "h225.guid", FT_BYTES, BASE_HEX,
		NULL, 0, "guid", HFILL }},
	{ &hf_h225_replaceWithConferenceInvite,
		{ "replaceWithConferenceInvite", "h225.replaceWithConferenceInvite", FT_BYTES, BASE_HEX,
		NULL, 0, "replaceWithConferenceInvite", HFILL }},
	{ &hf_h225_StimulusControl,
		{ "StimulusControl", "h225.StimulusControl", FT_NONE, BASE_NONE,
		NULL, 0, "StimulusControl sequence", HFILL }},
	{ &hf_h225_ReleaseCompleteReason,
		{ "ReleaseCompleteReason", "h225.ReleaseCompleteReason", FT_UINT32, BASE_DEC,
		VALS(ReleaseCompleteReason_vals), 0, "ReleaseCompleteReason choice", HFILL }},
	{ &hf_h225_numberOfScnConnections,
		{ "numberOfScnConnections", "h225.numberOfScnConnections", FT_UINT32, BASE_DEC,
		NULL, 0, "numberOfScnConnections", HFILL }},
	{ &hf_h225_connectionParameters,
		{ "connectionParameters", "h225.connectionParameters", FT_NONE, BASE_NONE,
		NULL, 0, "connectionParameters sequence", HFILL }},
	{ &hf_h225_RequestSeqNum,
		{ "RequestSeqNum", "h225.RequestSeqNum", FT_UINT32, BASE_DEC,
		NULL, 0, "RequestSeqNum", HFILL }},
	{ &hf_h225_RasUsageSpecification_when,
		{ "RasUsageSpecification_when", "h225.RasUsageSpecification_when", FT_NONE, BASE_NONE,
		NULL, 0, "RasUsageSpecification_when sequence", HFILL }},
	{ &hf_h225_RasUsageSpecification_callStartingPoint,
		{ "RasUsageSpecification_callStartingPoint", "h225.RasUsageSpecification_callStartingPoint", FT_NONE, BASE_NONE,
		NULL, 0, "RasUsageSpecification_callStartingPoint sequence", HFILL }},
	{ &hf_h225_RasUsageSpecification,
		{ "RasUsageSpecification", "h225.RasUsageSpecification", FT_NONE, BASE_NONE,
		NULL, 0, "RasUsageSpecification sequence", HFILL }},
	{ &hf_h225_ipAddress_ip,
		{ "IP", "h245.ipAddress.ip", FT_IPv4, BASE_NONE,
		NULL, 0, "IPv4 Address", HFILL }},
	{ &hf_h225_ipAddress_port,
		{ "Port", "h225.ipAddress.port", FT_UINT16, BASE_DEC,
		NULL, 0, "Port number", HFILL }},
	{ &hf_h225_ipAddress,
		{ "ipAddress", "h225.ipAddress", FT_NONE, BASE_NONE,
		NULL, 0, "ipAddress sequence", HFILL }},
	{ &hf_h225_routing,
		{ "routing", "h225.routing", FT_UINT32, BASE_DEC,
		VALS(routing_vals), 0, "routing choice", HFILL }},
	{ &hf_h225_ipSourceRoute,
		{ "ipSourceRoute", "h225.ipSourceRoute", FT_NONE, BASE_NONE,
		NULL, 0, "ipSourceRoute sequence", HFILL }},
	{ &hf_h225_ipxNode,
		{ "Node", "h225.ipx.node", FT_BYTES, BASE_HEX,
		NULL, 0, "ipx node", HFILL }},
	{ &hf_h225_ipxNetnum,
		{ "Netnum", "h225.ipx.netnum", FT_BYTES, BASE_HEX,
		NULL, 0, "ipx netnum", HFILL }},
	{ &hf_h225_ipxPort,
		{ "Port", "h225.ipx.port", FT_BYTES, BASE_HEX,
		NULL, 0, "ipx port number", HFILL }},
	{ &hf_h225_ipxAddress,
		{ "ipxAddress", "h225.ipxAddress", FT_NONE, BASE_NONE,
		NULL, 0, "ipxAddress sequence", HFILL }},
	{ &hf_h225_ipv6Address_ip,
		{ "IP", "h225.ipv6Address.ip", FT_BYTES, BASE_HEX,
		NULL, 0, "ipv6 address", HFILL }},
	{ &hf_h225_ipv6Address_port,
		{ "Port", "h225.ipv6Address.port", FT_UINT16, BASE_DEC,
		NULL, 0, "Port number", HFILL }},
	{ &hf_h225_ip6Address,
		{ "ip6Address", "h225.ip6Address", FT_NONE, BASE_NONE,
		NULL, 0, "ip6Address sequence", HFILL }},
	{ &hf_h225_netBios,
		{ "netBios", "h225.netBios", FT_BYTES, BASE_HEX,
		NULL, 0, "netBios octet string", HFILL }},
	{ &hf_h225_nsap,
		{ "nsap", "h225.nsap", FT_BYTES, BASE_HEX,
		NULL, 0, "nsap octet string", HFILL }},
	{ &hf_h225_rasAddress,
		{ "rasAddress", "h225.rasAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "rasAddress choice", HFILL }},
	{ &hf_h225_TransportAddress,
		{ "TransportAddress", "h225.TransportAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "TransportAddress choice", HFILL }},
	{ &hf_h225_replyAddress,
		{ "replyAddress", "h225.replyAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "replyAddress choice", HFILL }},
	{ &hf_h225_h245Address,
		{ "h245Address", "h225.h245Address", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "h245Address choice", HFILL }},
	{ &hf_h225_destCallSignalAddress,
		{ "destCallSignalAddress", "h225.destCallSignalAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "destCallSignalAddress choice", HFILL }},
	{ &hf_h225_sourceCallSignalAddress,
		{ "sourceCallSignalAddress", "h225.sourceCallSignalAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "sourceCallSignalAddress choice", HFILL }},
	{ &hf_h225_CallSignalAddress2,
		{ "CallSignalAddress2", "h225.CallSignalAddress2", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "CallSignalAddress2 choice", HFILL }},
	{ &hf_h225_alternativeAddress,
		{ "alternativeAddress", "h225.alternativeAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "alternativeAddress choice", HFILL }},
	{ &hf_h225_transportID,
		{ "transportID", "h225.transportID", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "transportID choice", HFILL }},
	{ &hf_h225_sendAddress,
		{ "sendAddress", "h225.sendAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "sendAddress choice", HFILL }},
	{ &hf_h225_recvAddress,
		{ "recvAddress", "h225.recvAddress", FT_UINT32, BASE_DEC,
		VALS(TransportAddress_vals), 0, "recvAddress choice", HFILL }},
	{ &hf_h225_rtpAddress,
		{ "rtpAddress", "h225.rtpAddress", FT_NONE, BASE_NONE,
		NULL, 0, "rtpAddress sequence", HFILL }},
	{ &hf_h225_rtcpAddress,
		{ "rtcpAddress", "h225.rtcpAddress", FT_NONE, BASE_NONE,
		NULL, 0, "rtcpAddress sequence", HFILL }},
	{ &hf_h225_h245,
		{ "h245", "h225.h245", FT_NONE, BASE_NONE,
		NULL, 0, "h245 sequence", HFILL }},
	{ &hf_h225_callSignaling,
		{ "callSignaling", "h225.callSignaling", FT_NONE, BASE_NONE,
		NULL, 0, "callSignaling sequence", HFILL }},
	{ &hf_h225_carrierName,
		{ "carrierName", "h225.carrierName", FT_BYTES, BASE_HEX,
		NULL, 0, "carrierName IA5String", HFILL }},
	{ &hf_h225_carrierIdentificationCode,
		{ "carrierIdentificationCode", "h225.carrierIdentificationCode", FT_BYTES, BASE_HEX,
		NULL, 0, "carrierIdentificationCode octet string", HFILL }},
	{ &hf_h225_CarrierInfo,
		{ "CarrierInfo", "h225.CarrierInfo", FT_NONE, BASE_NONE,
		NULL, 0, "CarrierInfo sequence", HFILL }},
	{ &hf_h225_segment,
		{ "segment", "h225.segment", FT_UINT32, BASE_DEC,
		NULL, 0, "segment", HFILL }},
	{ &hf_h225_InfoRequestResponseStatus,
		{ "InfoRequestResponseStatus", "h225.InfoRequestResponseStatus", FT_UINT32, BASE_DEC,
		VALS(InfoRequestResponseStatus_vals), 0, "InfoRequestResponseStatus choice", HFILL }},
	{ &hf_h225_CallIdentifier,
		{ "CallIdentifier", "h225.CallIdentifier", FT_NONE, BASE_NONE,
		NULL, 0, "CallIdentifier sequence", HFILL }},
	{ &hf_h225_globalCallId,
		{ "globalCallId", "h225.globalCallId", FT_BYTES, BASE_HEX,
		NULL, 0, "globalCallId octet string", HFILL }},
	{ &hf_h225_threadId,
		{ "threadId", "h225.threadId", FT_BYTES, BASE_HEX,
		NULL, 0, "threadId octet string", HFILL }},
	{ &hf_h225_CallLinkage,
		{ "CallLinkage", "h225.CallLinkage", FT_NONE, BASE_NONE,
		NULL, 0, "CallLinkage sequence", HFILL }},
	{ &hf_h225_tokens,
		{ "tokens", "h225.tokens", FT_NONE, BASE_NONE,
		NULL, 0, "tokens sequence of", HFILL }},
	{ &hf_h225_CryptoH323Tokens,
		{ "CryptoH323Tokens", "h225.cryptoh323tokens", FT_NONE, BASE_NONE,
		NULL, 0, "sequence of cryptoh323tokens", HFILL }},
	{ &hf_h225_needToRegister,
		{ "needToRegister", "h225.needToRegister", FT_BOOLEAN, 8,
		TFS(&tfs_needToRegister_bit), 0x01, "needToRegister boolean", HFILL }},
	{ &hf_h225_priority,
		{ "priority", "h225.priority", FT_UINT32, BASE_DEC,
		NULL, 0, "priority", HFILL }},
	{ &hf_h225_AlternateGK,
		{ "AlternateGK", "h225.AlternateGK", FT_NONE, BASE_NONE,
		NULL, 0, "AlternateGK sequence", HFILL }},
	{ &hf_h225_alternateGatekeeper,
		{ "alternateGatekeeper", "h225.alternateGatekeeper", FT_NONE, BASE_NONE,
		NULL, 0, "alternateGatekeeper sequence of", HFILL }},
	{ &hf_h225_altGKisPermanent,
		{ "altGKisPermanent", "h225.altGKisPermanent", FT_BOOLEAN, 8,
		TFS(&tfs_altGKisPermanent_bit), 0x01, "altGKisPermanent boolean", HFILL }},
	{ &hf_h225_AltGKInfo,
		{ "AltGKInfo", "h225.AltGKInfo", FT_NONE, BASE_NONE,
		NULL, 0, "AltGKInfo sequence", HFILL }},
	{ &hf_h225_annexE,
		{ "annexE", "h225.annexE", FT_NONE, BASE_NONE,
		NULL, 0, "annexE sequence of", HFILL }},
	{ &hf_h225_sctp,
		{ "sctp", "h225.sctp", FT_NONE, BASE_NONE,
		NULL, 0, "sctp sequence of", HFILL }},
	{ &hf_h225_AlternateTransportAddress,
		{ "AlternateTransportAddress", "h225.AlternateTransportAddress", FT_NONE, BASE_NONE,
		NULL, 0, "AlternateTransportAddress sequence", HFILL }},
	{ &hf_h225_setup_bool,
		{ "setup_bool", "h225.setup_bool", FT_BOOLEAN, 8,
		TFS(&tfs_setup_bool_bit), 0x01, "setup_bool boolean", HFILL }},
	{ &hf_h225_callProceeding_bool,
		{ "callProceeding_bool", "h225.callProceeding_bool", FT_BOOLEAN, 8,
		TFS(&tfs_callProceeding_bool_bit), 0x01, "callProceeding_bool boolean", HFILL }},
	{ &hf_h225_connect_bool,
		{ "connect_bool", "h225.connect_bool", FT_BOOLEAN, 8,
		TFS(&tfs_connect_bool_bit), 0x01, "connect_bool boolean", HFILL }},
	{ &hf_h225_alerting_bool,
		{ "alerting_bool", "h225.alerting_bool", FT_BOOLEAN, 8,
		TFS(&tfs_alerting_bool_bit), 0x01, "alerting_bool boolean", HFILL }},
	{ &hf_h225_information_bool,
		{ "information_bool", "h225.information_bool", FT_BOOLEAN, 8,
		TFS(&tfs_information_bool_bit), 0x01, "information_bool boolean", HFILL }},
	{ &hf_h225_releaseComplete_bool,
		{ "releaseComplete_bool", "h225.releaseComplete_bool", FT_BOOLEAN, 8,
		TFS(&tfs_releaseComplete_bool_bit), 0x01, "releaseComplete_bool boolean", HFILL }},
	{ &hf_h225_facility_bool,
		{ "facility_bool", "h225.facility_bool", FT_BOOLEAN, 8,
		TFS(&tfs_facility_bool_bit), 0x01, "facility_bool boolean", HFILL }},
	{ &hf_h225_progress_bool,
		{ "progress_bool", "h225.progress_bool", FT_BOOLEAN, 8,
		TFS(&tfs_progress_bool_bit), 0x01, "progress_bool boolean", HFILL }},
	{ &hf_h225_empty_bool,
		{ "empty_bool", "h225.empty_bool", FT_BOOLEAN, 8,
		TFS(&tfs_empty_bool_bit), 0x01, "empty_bool boolean", HFILL }},
	{ &hf_h225_status_bool,
		{ "status_bool", "h225.status_bool", FT_BOOLEAN, 8,
		TFS(&tfs_status_bool_bit), 0x01, "status_bool boolean", HFILL }},
	{ &hf_h225_statusInquiry_bool,
		{ "statusInquiry_bool", "h225.statusInquiry_bool", FT_BOOLEAN, 8,
		TFS(&tfs_statusInquiry_bool_bit), 0x01, "statusInquiry_bool boolean", HFILL }},
	{ &hf_h225_setupAcknowledge_bool,
		{ "setupAcknowledge_bool", "h225.setupAcknowledge_bool", FT_BOOLEAN, 8,
		TFS(&tfs_setupAcknowledge_bool_bit), 0x01, "setupAcknowledge_bool boolean", HFILL }},
	{ &hf_h225_notify_bool,
		{ "notify_bool", "h225.notify_bool", FT_BOOLEAN, 8,
		TFS(&tfs_notify_bool_bit), 0x01, "notify_bool boolean", HFILL }},
	{ &hf_h225_UUIEsRequested,
		{ "UUIEsRequested", "h225.UUIEsRequested", FT_NONE, BASE_NONE,
		NULL, 0, "UUIEsRequested sequence", HFILL }},
	{ &hf_h225_conferenceCalling,
		{ "conferenceCalling", "h225.conferenceCalling", FT_BOOLEAN, 8,
		TFS(&tfs_conferenceCalling_bit), 0x01, "conferenceCalling boolean", HFILL }},
	{ &hf_h225_threePartyService,
		{ "threePartyService", "h225.threePartyService", FT_BOOLEAN, 8,
		TFS(&tfs_threePartyService_bit), 0x01, "threePartyService boolean", HFILL }},
	{ &hf_h225_Q954Details,
		{ "Q954Details", "h225.Q954Details", FT_NONE, BASE_NONE,
		NULL, 0, "Q954Details sequence", HFILL }},
	{ &hf_h225_q932Full,
		{ "q932Full", "h225.q932Full", FT_BOOLEAN, 8,
		TFS(&tfs_q932Full_bit), 0x01, "q932Full boolean", HFILL }},
	{ &hf_h225_q951Full,
		{ "q951Full", "h225.q951Full", FT_BOOLEAN, 8,
		TFS(&tfs_q951Full_bit), 0x01, "q951Full boolean", HFILL }},
	{ &hf_h225_q952Full,
		{ "q952Full", "h225.q952Full", FT_BOOLEAN, 8,
		TFS(&tfs_q952Full_bit), 0x01, "q952Full boolean", HFILL }},
	{ &hf_h225_q953Full,
		{ "q953Full", "h225.q953Full", FT_BOOLEAN, 8,
		TFS(&tfs_q953Full_bit), 0x01, "q953Full boolean", HFILL }},
	{ &hf_h225_q955Full,
		{ "q955Full", "h225.q955Full", FT_BOOLEAN, 8,
		TFS(&tfs_q955Full_bit), 0x01, "q955Full boolean", HFILL }},
	{ &hf_h225_q956Full,
		{ "q956Full", "h225.q956Full", FT_BOOLEAN, 8,
		TFS(&tfs_q956Full_bit), 0x01, "q956Full boolean", HFILL }},
	{ &hf_h225_q957Full,
		{ "q957Full", "h225.q957Full", FT_BOOLEAN, 8,
		TFS(&tfs_q957Full_bit), 0x01, "q957Full boolean", HFILL }},
	{ &hf_h225_QseriesOptions,
		{ "callServices", "h225.callServices", FT_NONE, BASE_NONE,
		NULL, 0, "QseriesOptions sequence", HFILL }},
	{ &hf_h225_ssrc,
		{ "ssrc", "h225.ssrc", FT_UINT32, BASE_DEC,
		NULL, 0, "ssrc", HFILL }},
	{ &hf_h225_RTPsessionId,
		{ "RTPsessionId", "h225.RTPsessionId", FT_UINT32, BASE_DEC,
		NULL, 0, "RTPsessionId", HFILL }},
	{ &hf_h225_associatedSessionIds,
		{ "associatedSessionIds", "h225.associatedSessionIds", FT_NONE, BASE_NONE,
		NULL, 0, "associatedSessionIds sequence of", HFILL }},
	{ &hf_h225_RTPSession,
		{ "RTPSession", "h225.RTPSession", FT_NONE, BASE_NONE,
		NULL, 0, "RTPSession sequence", HFILL }},
	{ &hf_h225_tunnelledProtocolObjectID,
		{ "tunnelledProtocolObjectID", "h225.tunnelledProtocolObjectID", FT_STRING, BASE_NONE,
		NULL, 0, "tunnelledProtocolObjectID object", HFILL }},
	{ &hf_h225_ProtocolIdentifier,
		{ "ProtocolIdentifier", "h225.ProtocolIdentifier", FT_STRING, BASE_NONE,
		NULL, 0, "ProtocolIdentifier object", HFILL }},
	{ &hf_h225_isoAlgorithm,
		{ "isoAlgorithm", "h225.isoAlgorithm", FT_STRING, BASE_NONE,
		NULL, 0, "isoAlgorithm object", HFILL }},
	{ &hf_h225_algorithmOID,
		{ "algorithmOID", "h225.algorithmOID", FT_STRING, BASE_NONE,
		NULL, 0, "algorithmOID object", HFILL }},
	{ &hf_h225_iso9797,
		{ "iso9797", "h225.iso9797", FT_STRING, BASE_NONE,
		NULL, 0, "iso9797 object", HFILL }},
	{ &hf_h225_hMAC_iso10118_3,
		{ "hMAC_iso10118_3", "h225.hMAC_iso10118_3", FT_STRING, BASE_NONE,
		NULL, 0, "hMAC_iso10118_3 object", HFILL }},
	{ &hf_h225_enterpriseNumber,
		{ "enterpriseNumber", "h225.enterpriseNumber", FT_STRING, BASE_NONE,
		NULL, 0, "enterpriseNumber object", HFILL }},
	{ &hf_h225_Generic_oid,
		{ "OID", "h225.Generic_oid", FT_STRING, BASE_NONE,
		NULL, 0, "Generic OID object", HFILL }},
	{ &hf_h225_StatusUUIE,
		{ "StatusUUIE", "h225.StatusUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "StatusUUIE sequence", HFILL }},
	{ &hf_h225_StatusInquiryUUIE,
		{ "StatusInquiryUUIE", "h225.StatusInquiryUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "StatusInquiryUUIE sequence", HFILL }},
	{ &hf_h225_SetupAcknowledgeUUIE,
		{ "SetupAcknowledgeUUIE", "h225.SetupAcknowledgeUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "SetupAcknowledgeUUIE sequence", HFILL }},
	{ &hf_h225_NotifyUUIE,
		{ "NotifyUUIE", "h225.NotifyUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "NotifyUUIE sequence", HFILL }},
	{ &hf_h225_imsi,
		{ "imsi", "h225.imsi", FT_STRING, BASE_HEX,
		NULL, 0, "imsi string", HFILL }},
	{ &hf_h225_tmsi,
		{ "tmsi", "h225.tmsi", FT_BYTES, BASE_HEX,
		NULL, 0, "tmsi octet string", HFILL }},
	{ &hf_h225_msisdn,
		{ "msisdn", "h225.msisdn", FT_STRING, BASE_HEX,
		NULL, 0, "msisdn string", HFILL }},
	{ &hf_h225_imei,
		{ "imei", "h225.imei", FT_STRING, BASE_HEX,
		NULL, 0, "imei string", HFILL }},
	{ &hf_h225_hplmn,
		{ "hplmn", "h225.hplmn", FT_STRING, BASE_HEX,
		NULL, 0, "hplmn string", HFILL }},
	{ &hf_h225_vplmn,
		{ "vplmn", "h225.vplmn", FT_STRING, BASE_HEX,
		NULL, 0, "vplmn string", HFILL }},
	{ &hf_h225_GSMUIM,
		{ "GSMUIM", "h225.GSMUIM", FT_NONE, BASE_NONE,
		NULL, 0, "GSMUIM sequence", HFILL }},
	{ &hf_h225_sid,
		{ "sid", "h225.sid", FT_STRING, BASE_HEX,
		NULL, 0, "sid string", HFILL }},
	{ &hf_h225_mid,
		{ "mid", "h225.mid", FT_STRING, BASE_HEX,
		NULL, 0, "mid string", HFILL }},
	{ &hf_h225_systemid,
		{ "systemid", "h225.sustemid", FT_UINT32, BASE_DEC,
		VALS(systemid_vals), 0, "systemid choice", HFILL }},
	{ &hf_h225_min,
		{ "min", "h225.min", FT_STRING, BASE_HEX,
		NULL, 0, "min string", HFILL }},
	{ &hf_h225_mdn,
		{ "mdn", "h225.mdn", FT_STRING, BASE_HEX,
		NULL, 0, "mdn string", HFILL }},
	{ &hf_h225_esn,
		{ "esn", "h225.esn", FT_STRING, BASE_HEX,
		NULL, 0, "esn string", HFILL }},
	{ &hf_h225_mscid,
		{ "mscid", "h225.mscid", FT_STRING, BASE_HEX,
		NULL, 0, "mscid string", HFILL }},
	{ &hf_h225_systemMyTypeCode,
		{ "systemMyTypeCode", "h225.systemMyTypeCode", FT_BYTES, BASE_HEX,
		NULL, 0, "systemMyTypeCode octet string", HFILL }},
	{ &hf_h225_systemAccessType,
		{ "systemAccessType", "h225.systemAccessType", FT_BYTES, BASE_HEX,
		NULL, 0, "systemAccessType octet string", HFILL }},
	{ &hf_h225_qualificationInformationCode,
		{ "qualificationInformationCode", "h225.qualificationInformationCode", FT_BYTES, BASE_HEX,
		NULL, 0, "qualificationInformationCode octet string", HFILL }},
	{ &hf_h225_sesn,
		{ "sesn", "h225.sesn", FT_STRING, BASE_HEX,
		NULL, 0, "sesn string", HFILL }},
	{ &hf_h225_soc,
		{ "soc", "h225.soc", FT_STRING, BASE_HEX,
		NULL, 0, "soc string", HFILL }},
	{ &hf_h225_ANSI41UIM,
		{ "ANSI41UIM", "h225.ANSI41UIM", FT_NONE, BASE_NONE,
		NULL, 0, "ANSI41UIM sequence", HFILL }},
	{ &hf_h225_MobileUIM,
		{ "MobileUIM", "h225.MobileUIM", FT_UINT32, BASE_DEC,
		VALS(MobileUIM_vals), 0, "MobileUIM choice", HFILL }},
	{ &hf_h225_dataPartyNumber,
		{ "dataPartyNumber", "h225.dataPartyNumber", FT_STRING, BASE_HEX,
		NULL, 0, "dataPartyNumber string", HFILL }},
	{ &hf_h225_telexPartyNumber,
		{ "telexPartyNumber", "h225.telexPartyNumber", FT_STRING, BASE_HEX,
		NULL, 0, "telexPartyNumber string", HFILL }},
	{ &hf_h225_nationalStandardPartyNumber,
		{ "nationalStandardPartyNumber", "h225.nationalStandardPartyNumber", FT_STRING, BASE_HEX,
		NULL, 0, "nationalStandardPartyNumber string", HFILL }},
	{ &hf_h225_publicNumberDigits,
		{ "publicNumberDigits", "h225.publicNumberDigits", FT_STRING, BASE_HEX,
		NULL, 0, "publicNumberDigits string", HFILL }},
	{ &hf_h225_privateNumberDigits,
		{ "privateNumberDigits", "h225.privateNumberDigits", FT_STRING, BASE_HEX,
		NULL, 0, "privateNumberDigits string", HFILL }},
	{ &hf_h225_e164Number,
		{ "e164Number", "h225.e164Number", FT_NONE, BASE_NONE,
		NULL, 0, "e164Number sequence", HFILL }},
	{ &hf_h225_privateNumber,
		{ "privateNumber", "h225.privateNumber", FT_NONE, BASE_NONE,
		NULL, 0, "privateNumber sequence", HFILL }},
	{ &hf_h225_startOfRange,
		{ "startOfRange", "h225.startOfRange", FT_UINT32, BASE_DEC,
		VALS(PartyNumber_vals), 0, "startOfRange choice", HFILL }},
	{ &hf_h225_endOfRange,
		{ "endOfRange", "h225.endOfRange", FT_UINT32, BASE_DEC,
		VALS(PartyNumber_vals), 0, "endOfRange choice", HFILL }},
	{ &hf_h225_PartyNumber,
		{ "PartyNumber", "h225.PartyNumber", FT_UINT32, BASE_DEC,
		VALS(PartyNumber_vals), 0, "PartyNumber choice", HFILL }},
	{ &hf_h225_protocolType,
		{ "protocolType", "h225.protocolType", FT_STRING, BASE_HEX,
		NULL, 0, "protocolType IA5String", HFILL }},
	{ &hf_h225_protocolVariant,
		{ "protocolVariant", "h225.protocolVariant", FT_STRING, BASE_HEX,
		NULL, 0, "protocolVariant IA5String", HFILL }},
	{ &hf_h225_TunnelledProtocolAlternateIdentifier,
		{ "TunnelledProtocolAlternateIdentifier", "h225.TunnelledProtocolAlternateIdentifier", FT_NONE, BASE_NONE,
		NULL, 0, "TunnelledProtocolAlternateIdentifier sequence", HFILL }},
	{ &hf_h225_dialedDigits,
		{ "dialedDigits", "h225.dialedDigits", FT_BYTES, BASE_HEX,
		NULL, 0, "dialedDigits IA5String", HFILL }},
	{ &hf_h225_urlId,
		{ "urlId", "h225.urlId", FT_BYTES, BASE_HEX,
		NULL, 0, "urlId IA5String", HFILL }},
	{ &hf_h225_h323ID,
		{ "h323ID", "h225.h323ID", FT_STRING, BASE_HEX,
		NULL, 0, "h323ID BMPString", HFILL }},
	{ &hf_h225_GatekeeperIdentifier,
		{ "GatekeeperIdentifier", "h225.GatekeeperIdentifier", FT_STRING, BASE_HEX,
		NULL, 0, "GatekeeperIdentifier BMPString", HFILL }},
	{ &hf_h225_unicode,
		{ "unicode", "h225.unicode", FT_STRING, BASE_HEX,
		NULL, 0, "unicode BMPString", HFILL }},
	{ &hf_h225_EndpointIdentifier,
		{ "EndpointIdentifier", "h225.EndpointIdentifier", FT_STRING, BASE_HEX,
		NULL, 0, "EndpointIdentifier BMPString", HFILL }},
	{ &hf_h225_emailId,
		{ "emailId", "h225.emailId", FT_STRING, BASE_NONE,
		NULL, 0, "emailId IA5String", HFILL }},
	{ &hf_h225_conferenceAlias,
		{ "conferenceAlias", "h225.conferenceAlias", FT_UINT32, BASE_DEC,
		VALS(AliasAddress_vals), 0, "conferenceAlias choice", HFILL }},
	{ &hf_h225_AliasAddress,
		{ "AliasAddress", "h225.AliasAddress", FT_UINT32, BASE_DEC,
		VALS(AliasAddress_vals), 0, "AliasAddress choice", HFILL }},
	{ &hf_h225_RemoteExtensionAddress,
		{ "RemoteExtensionAddress", "h225.RemoteExtensionAddress", FT_UINT32, BASE_DEC,
		VALS(AliasAddress_vals), 0, "RemoteExtensionAddress choice", HFILL }},
	{ &hf_h225_wildcard,
		{ "wildcard", "h225.wildcard", FT_UINT32, BASE_DEC,
		VALS(AliasAddress_vals), 0, "wildcard choice", HFILL }},
	{ &hf_h225_prefix,
		{ "prefix", "h225.prefix", FT_UINT32, BASE_DEC,
		VALS(AliasAddress_vals), 0, "prefix choice", HFILL }},
	{ &hf_h225_SupportedPrefix,
		{ "SupportedPrefix", "h225.SupportedPrefix", FT_NONE, BASE_NONE,
		NULL, 0, "SupportedPrefix sequence", HFILL }},
	{ &hf_h225_SupportedPrefixes,
		{ "SupportedPrefixes", "h225.SupportedPrefixes", FT_NONE, BASE_NONE,
		NULL, 0, "SupportedPrefixes sequence of", HFILL }},
	{ &hf_h225_H310Caps,
		{ "H310Caps", "h225.H310Caps", FT_NONE, BASE_NONE,
		NULL, 0, "H310Caps sequence", HFILL }},
	{ &hf_h225_H320Caps,
		{ "H320Caps", "h225.H320Caps", FT_NONE, BASE_NONE,
		NULL, 0, "H320Caps sequence", HFILL }},
	{ &hf_h225_H321Caps,
		{ "H321Caps", "h225.H321Caps", FT_NONE, BASE_NONE,
		NULL, 0, "H321Caps sequence", HFILL }},
	{ &hf_h225_H322Caps,
		{ "H322Caps", "h225.H322Caps", FT_NONE, BASE_NONE,
		NULL, 0, "H322Caps sequence", HFILL }},
	{ &hf_h225_H323Caps,
		{ "H323Caps", "h225.H323Caps", FT_NONE, BASE_NONE,
		NULL, 0, "H323Caps sequence", HFILL }},
	{ &hf_h225_H324Caps,
		{ "H324Caps", "h225.H324Caps", FT_NONE, BASE_NONE,
		NULL, 0, "H324Caps sequence", HFILL }},
	{ &hf_h225_VoiceCaps,
		{ "VoiceCaps", "h225.VoiceCaps", FT_NONE, BASE_NONE,
		NULL, 0, "VoiceCaps sequence", HFILL }},
	{ &hf_h225_T120OnlyCaps,
		{ "T120OnlyCaps", "h225.T120OnlyCaps", FT_NONE, BASE_NONE,
		NULL, 0, "T120OnlyCaps sequence", HFILL }},
	{ &hf_h225_NonStandardProtocol,
		{ "NonStandardProtocol", "h225.NonStandardProtocol", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardProtocol sequence", HFILL }},
	{ &hf_h225_SIPCaps,
		{ "SIPCaps", "h225.SIPCaps", FT_NONE, BASE_NONE,
		NULL, 0, "SIPCaps sequence", HFILL }},
	{ &hf_h225_AddressPattern_range,
		{ "AddressPattern_range", "h225.AddressPattern_range", FT_NONE, BASE_NONE,
		NULL, 0, "AddressPattern_range sequence", HFILL }},
	{ &hf_h225_AddressPattern,
		{ "AddressPattern", "h225.AddressPattern", FT_UINT32, BASE_DEC,
		VALS(AddressPattern_vals), 0, "AddressPattern choice", HFILL }},
	{ &hf_h225_ConferenceList,
		{ "ConferenceList", "h225.ConferenceList", FT_NONE, BASE_NONE,
		NULL, 0, "ConferenceList sequence", HFILL }},
	{ &hf_h225_conferences,
		{ "conferences", "h225.conferences", FT_NONE, BASE_NONE,
		NULL, 0, "conferences sequence of", HFILL }},
	{ &hf_h225_T38FaxAnnexbOnlyCaps,
		{ "T38FaxAnnexbOnlyCaps", "h225.T38FaxAnnexbOnlyCaps", FT_NONE, BASE_NONE,
		NULL, 0, "T38FaxAnnexbOnlyCaps sequence", HFILL }},
	{ &hf_h225_SupportedProtocols,
		{ "SupportedProtocols", "h225.SupportedProtocols", FT_UINT32, BASE_DEC,
		VALS(SupportedProtocols_vals), 0, "SupportedProtocols choice", HFILL }},
	{ &hf_h225_protocol,
		{ "protocol", "h225.protocol", FT_NONE, BASE_NONE,
		NULL, 0, "protocol sequence of", HFILL }},
	{ &hf_h225_GatewayInfo,
		{ "GatewayInfo", "h225.GatewayInfo", FT_NONE, BASE_NONE,
		NULL, 0, "GatewayInfo sequence", HFILL }},
	{ &hf_h225_McuInfo,
		{ "McuInfo", "h225.McuInfo", FT_NONE, BASE_NONE,
		NULL, 0, "McuInfo sequence", HFILL }},
	{ &hf_h225_TunnelledProtocol_id,
		{ "id", "h225.TunnelledProtocol_id", FT_UINT32, BASE_DEC,
		VALS(TunnelledProtocol_id_vals), 0, "TunnelledProtocol_id choice", HFILL }},
	{ &hf_h225_TunnelledProtocol_subIdentifier,
		{ "subIdentifier", "h225.TunnelledProtocol_subIdentifier", FT_BYTES, BASE_HEX,
		NULL, 0, "TunnelledProtocol_subIdentifier IA5String", HFILL }},
	{ &hf_h225_TunnelledProtocol,
		{ "TunnelledProtocol", "h225.TunnelledProtocol", FT_NONE, BASE_NONE,
		NULL, 0, "TunnelledProtocol sequence", HFILL }},
	{ &hf_h225_TunnelledProtocols,
		{ "TunnelledProtocols", "h225.TunnelledProtocols", FT_NONE, BASE_NONE,
		NULL, 0, "SEQUENCE OF TunnelledProtocol", HFILL }},
	{ &hf_h225_desiredTunnelledProtocol,
		{ "desiredTunnelledProtocol", "h225.desiredTunnelledProtocol", FT_NONE, BASE_NONE,
		NULL, 0, "desiredTunnelledProtocol sequence", HFILL }},
	{ &hf_h225_CicInfo_cic_item,
		{ "item", "h225.CicInfo_cic_item", FT_BYTES, BASE_HEX,
		NULL, 0, "CicInfo_cic_item octet string", HFILL }},
	{ &hf_h225_CicInfo_pointCode,
		{ "pointCode", "h225.CicInfo_pointCode", FT_BYTES, BASE_HEX,
		NULL, 0, "CicInfo_pointCode octet string", HFILL }},
	{ &hf_h225_CicInfo_cic,
		{ "cic", "h225.CicInfo_cic", FT_NONE, BASE_NONE,
		NULL, 0, "CicInfo_cic sequence of", HFILL }},
	{ &hf_h225_CicInfo,
		{ "CicInfo", "h225.CicInfo", FT_NONE, BASE_NONE,
		NULL, 0, "CicInfo sequence", HFILL }},
	{ &hf_h225_GroupID_member_item,
		{ "item", "h225.GroupID_member_item", FT_UINT32, BASE_DEC,
		NULL, 0, "GroupID_member_item", HFILL }},
	{ &hf_h225_GroupID_member,
		{ "member", "h225.GroupID_member", FT_NONE, BASE_NONE,
		NULL, 0, "GroupID_member sequence of", HFILL }},
	{ &hf_h225_GroupID_group,
		{ "group", "h225.GroupID_group", FT_STRING, BASE_NONE,
		NULL, 0, "GroupID_group IA5String", HFILL }},
	{ &hf_h225_GroupID,
		{ "GroupID", "h225.GroupID", FT_NONE, BASE_NONE,
		NULL, 0, "GroupID sequence", HFILL }},
	{ &hf_h225_sourceCircuitID,
		{ "sourceCircuitID", "h225.sourceCircuitID", FT_NONE, BASE_NONE,
		NULL, 0, "sourceCircuitID sequence", HFILL }},
	{ &hf_h225_destinationCircuitID,
		{ "destinationCircuitID", "h225.destinationCircuitID", FT_NONE, BASE_NONE,
		NULL, 0, "destinationCircuitID sequence", HFILL }},
	{ &hf_h225_Generic_standard,
		{ "standard", "h225.Generic_standard", FT_UINT32, BASE_DEC,
		NULL, 0, "Generic_standard", HFILL }},
	{ &hf_h225_GenericIdentifier,
		{ "GenericIdentifier", "h225.GenericIdentifier", FT_UINT32, BASE_DEC,
		VALS(GenericIdentifier_vals), 0, "GenericIdentifier choice", HFILL }},
	{ &hf_h225_EnumeratedParameter,
		{ "EnumeratedParameter", "h225.EnumeratedParameter", FT_NONE, BASE_NONE,
		NULL, 0, "EnumeratedParameter sequence", HFILL }},
	{ &hf_h225_parameters,
		{ "parameters", "h225.parameters", FT_NONE, BASE_NONE,
		NULL, 0, "parameters sequence of", HFILL }},
	{ &hf_h225_GenericData,
		{ "GenericData", "h225.GenericData", FT_NONE, BASE_NONE,
		NULL, 0, "GenericData sequence", HFILL }},
	{ &hf_h225_FeatureDescriptor,
		{ "FeatureDescriptor", "h225.FeatureDescriptor", FT_NONE, BASE_NONE,
		NULL, 0, "FeatureDescriptor sequence", HFILL }},
	{ &hf_h225_Content_raw,
		{ "Content_raw", "h225.Content_raw", FT_BYTES, BASE_HEX,
		NULL, 0, "Content_raw octet string", HFILL }},
	{ &hf_h225_Content_text,
		{ "Content_text", "h225.Content_text", FT_BYTES, BASE_HEX,
		NULL, 0, "Content_text IA5String", HFILL }},
	{ &hf_h225_Content,
		{ "Content", "h225.Content", FT_UINT32, BASE_DEC,
		VALS(Content_vals), 0, "Content choice", HFILL }},
	{ &hf_h225_Content_bool,
		{ "Content_bool", "h225.Content_bool", FT_BOOLEAN, 8,
		TFS(&tfs_Content_bool_bit), 0x01, "Content_bool boolean", HFILL }},
	{ &hf_h225_Content_number8,
		{ "Content_number8", "h225.Content_number8", FT_UINT32, BASE_DEC,
		NULL, 0, "Content_number8", HFILL }},
	{ &hf_h225_number16,
		{ "number16", "h225.number16", FT_UINT32, BASE_DEC,
		NULL, 0, "number16", HFILL }},
	{ &hf_h225_Content_number32,
		{ "Content_number32", "h225.Content_number32", FT_UINT32, BASE_DEC,
		NULL, 0, "Content_number32", HFILL }},
	{ &hf_h225_Content_compound,
		{ "Content_compound", "h225.Content_compound", FT_NONE, BASE_NONE,
		NULL, 0, "Content_compound sequence of", HFILL }},
	{ &hf_h225_Content_nested,
		{ "Content_nested", "h225.Content_nested", FT_NONE, BASE_NONE,
		NULL, 0, "Content_nested sequence of", HFILL }},
	{ &hf_h225_replacementFeatureSet,
		{ "replacementFeatureSet", "h225.replacementFeatureSet", FT_BOOLEAN, 8,
		TFS(&tfs_replacementFeatureSet_bit), 0x01, "replacementFeatureSet boolean", HFILL }},
	{ &hf_h225_neededFeatures,
		{ "neededFeatures", "h225.neededFeatures", FT_NONE, BASE_NONE,
		NULL, 0, "neededFeatures sequence of", HFILL }},
	{ &hf_h225_desiredFeatures,
		{ "desiredFeatures", "h225.desiredFeatures", FT_NONE, BASE_NONE,
		NULL, 0, "desiredFeatures sequence of", HFILL }},
	{ &hf_h225_supportedFeatures,
		{ "supportedFeatures", "h225.supportedFeatures", FT_NONE, BASE_NONE,
		NULL, 0, "supportedFeatures sequence of", HFILL }},
	{ &hf_h225_FeatureSet,
		{ "FeatureSet", "h225.FeatureSet", FT_NONE, BASE_NONE,
		NULL, 0, "FeatureSet sequence", HFILL }},
	{ &hf_h225_CallsAvailable_calls,
		{ "CallsAvailable_calls", "h225.CallsAvailable_calls", FT_UINT32, BASE_DEC,
		NULL, 0, "CallsAvailable_calls", HFILL }},
	{ &hf_h225_CallsAvailable_group,
		{ "CallsAvailable_group", "h225.CallsAvailable_group", FT_STRING, BASE_HEX,
		NULL, 0, "CallsAvailable_group IA5String", HFILL }},
	{ &hf_h225_CallsAvailable,
		{ "CallsAvailable", "h225.CallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "CallsAvailable sequence", HFILL }},
	{ &hf_h225_voiceGwCallsAvailable,
		{ "voiceGwCallsAvailable", "h225.voiceGwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "voiceGwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_h310GwCallsAvailable,
		{ "h310GwCallsAvailable", "h225.h310GwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "h310GwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_h320GwCallsAvailable,
		{ "h320GwCallsAvailable", "h225.h320GwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "h320GwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_h321GwCallsAvailable,
		{ "h321GwCallsAvailable", "h225.h321GwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "h321GwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_h322GwCallsAvailable,
		{ "h322GwCallsAvailable", "h225.h322GwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "h322GwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_h323GwCallsAvailable,
		{ "h323GwCallsAvailable", "h225.h323GwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "h323GwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_h324GwCallsAvailable,
		{ "h324GwCallsAvailable", "h225.h324GwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "h324GwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_t120OnlyGwCallsAvailable,
		{ "t120OnlyGwCallsAvailable", "h225.t120OnlyGwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "t120OnlyGwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_t38FaxAnnexbOnlyGwCallsAvailable,
		{ "t38FaxAnnexbOnlyGwCallsAvailable", "h225.t38FaxAnnexbOnlyGwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "t38FaxAnnexbOnlyGwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_terminalCallsAvailable,
		{ "terminalCallsAvailable", "h225.terminalCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "terminalCallsAvailable sequence of", HFILL }},
	{ &hf_h225_mcuCallsAvailable,
		{ "mcuCallsAvailable", "h225.mcuCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "mcuCallsAvailable sequence of", HFILL }},
	{ &hf_h225_sipGwCallsAvailable,
		{ "sipGwCallsAvailable", "h225.sipGwCallsAvailable", FT_NONE, BASE_NONE,
		NULL, 0, "sipGwCallsAvailable sequence of", HFILL }},
	{ &hf_h225_maximumCallCapacity,
		{ "maximumCallCapacity", "h225.maximumCallCapacity", FT_NONE, BASE_NONE,
		NULL, 0, "maximumCallCapacity sequence", HFILL }},
	{ &hf_h225_currentCallCapacity,
		{ "currentCallCapacity", "h225.currentCallCapacity", FT_NONE, BASE_NONE,
		NULL, 0, "currentCallCapacity sequence", HFILL }},
	{ &hf_h225_CallCapacity,
		{ "CallCapacity", "h225.CallCapacity", FT_NONE, BASE_NONE,
		NULL, 0, "CallCapacity sequence", HFILL }},
	{ &hf_h225_productID,
		{ "productID", "h225.productID", FT_STRING, BASE_HEX,
		NULL, 0, "productID octet string", HFILL }},
	{ &hf_h225_versionID,
		{ "versionID", "h225.versionID", FT_STRING, BASE_HEX,
		NULL, 0, "versionID octet string", HFILL }},
	{ &hf_h225_VendorIdentifier,
		{ "VendorIdentifier", "h225.VendorIdentifier", FT_NONE, BASE_NONE,
		NULL, 0, "VendorIdentifier sequence", HFILL }},
	{ &hf_h225_canReportCallCapacity,
		{ "canReportCallCapacity", "h225.canReportCallCapacity", FT_BOOLEAN, 8,
		TFS(&tfs_canReportCallCapacity_bit), 0x01, "canReportCallCapacity boolean", HFILL }},
	{ &hf_h225_CapacityReportingCapability,
		{ "CapacityReportingCapability", "h225.CapacityReportingCapability", FT_NONE, BASE_NONE,
		NULL, 0, "CapacityReportingCapability sequence", HFILL }},
	{ &hf_h225_canDisplayAmountString,
		{ "canDisplayAmountString", "h225.canDisplayAmountString", FT_BOOLEAN, 8,
		TFS(&tfs_canDisplayAmountString_bit), 0x01, "canDisplayAmountString boolean", HFILL }},
	{ &hf_h225_canEnforceDurationLimit,
		{ "canEnforceDurationLimit", "h225.canEnforceDurationLimit", FT_BOOLEAN, 8,
		TFS(&tfs_canEnforceDurationLimit_bit), 0x01, "canEnforceDurationLimit boolean", HFILL }},
	{ &hf_h225_CallCreditCapability,
		{ "CallCreditCapability", "h225.CallCreditCapability", FT_NONE, BASE_NONE,
		NULL, 0, "CallCreditCapability sequence", HFILL }},
	{ &hf_h225_BandwidthDetails_sender,
		{ "BandwidthDetails_sender", "h225.BandwidthDetails_sender", FT_BOOLEAN, 8,
		TFS(&tfs_BandwidthDetails_sender_bit), 0x01, "BandwidthDetails_sender boolean", HFILL }},
	{ &hf_h225_BandwidthDetails_multicast,
		{ "BandwidthDetails_multicast", "h225.BandwidthDetails_multicast", FT_BOOLEAN, 8,
		TFS(&tfs_BandwidthDetails_multicast_bit), 0x01, "BandwidthDetails_multicast boolean", HFILL }},
	{ &hf_h225_BandwidthDetails,
		{ "BandwidthDetails", "h225.BandwidthDetails", FT_NONE, BASE_NONE,
		NULL, 0, "BandwidthDetails sequence", HFILL }},
	{ &hf_h225_releaseCompleteCauseIE,
		{ "releaseCompleteCauseIE", "h225.releaseCompleteCauseIE", FT_BYTES, BASE_HEX,
		NULL, 0, "releaseCompleteCauseIE octet string", HFILL }},
	{ &hf_h225_CallTerminationCause,
		{ "CallTerminationCause", "h225.CallTerminationCause", FT_UINT32, BASE_DEC,
		VALS(CallTerminationCause_vals), 0, "CallTerminationCause choice", HFILL }},
	{ &hf_h225_CircuitInfo,
		{ "CircuitInfo", "h225.CircuitInfo", FT_NONE, BASE_NONE,
		NULL, 0, "CircuitInfo sequence", HFILL }},
	{ &hf_h225_genericData,
		{ "genericData", "h225.genericData", FT_NONE, BASE_NONE,
		NULL, 0, "genericData sequence of", HFILL }},
	{ &hf_h225_fastStart_item_length,
		{ "fastStart item length", "h225.fastStart_item_length", FT_UINT32, BASE_DEC,
		NULL, 0, "fastStart item length", HFILL }},
	{ &hf_h225_fastStart,
		{ "fastStart", "h225.fastStart", FT_NONE, BASE_NONE,
		NULL, 0, "fastStart sequence of", HFILL }},
	{ &hf_h225_fastConnectRefused,
		{ "fastConnectRefused", "h225.fastConnectRefused", FT_BOOLEAN, 8,
		TFS(&tfs_fastConnectRefused_bit), 0x01, "fastConnectRefused boolean", HFILL }},
	{ &hf_h225_InformationUUIE,
		{ "InformationUUIE", "h225.InformationUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "InformationUUIE sequence", HFILL }},
	{ &hf_h225_routeCallToSCN,
		{ "routeCallToSCN", "h225.routeCallToSCN", FT_NONE, BASE_NONE,
		NULL, 0, "routeCallToSCN sequence of", HFILL }},
	{ &hf_h225_AdmissionRejectReason,
		{ "AdmissionRejectReason", "h225.AdmissionRejectReason", FT_UINT32, BASE_DEC,
		VALS(AdmissionRejectReason_vals), 0, "AdmissionRejectReason choice", HFILL }},
	{ &hf_h225_hMAC_iso10118_2_s,
		{ "hMAC_iso10118_2_s", "h225.hMAC_iso10118_2_s", FT_UINT32, BASE_DEC,
		VALS(EncryptIntAlg_vals), 0, "hMAC_iso10118_2_s choice", HFILL }},
	{ &hf_h225_hMAC_iso10118_2_l,
		{ "hMAC_iso10118_2_l", "h225.hMAC_iso10118_2_l", FT_UINT32, BASE_DEC,
		VALS(EncryptIntAlg_vals), 0, "hMAC_iso10118_2_l choice", HFILL }},
	{ &hf_h225_NonIsoIntegrityMechanism,
		{ "NonIsoIntegrityMechanism", "h225.NonIsoIntegrityMechanism", FT_UINT32, BASE_DEC,
		VALS(NonIsoIntegrityMechanism_vals), 0, "NonIsoIntegrityMechanism choice", HFILL }},
	{ &hf_h225_IntegrityMechanism,
		{ "IntegrityMechanism", "h225.IntegrityMechanism", FT_UINT32, BASE_DEC,
		VALS(IntegrityMechanism_vals), 0, "IntegrityMechanism choice", HFILL }},
	{ &hf_h225_LocationRejectReason,
		{ "LocationRejectReason", "h225.LocationRejectReason", FT_UINT32, BASE_DEC,
		VALS(LocationRejectReason_vals), 0, "LocationRejectReason choice", HFILL }},
	{ &hf_h225_mc,
		{ "mc", "h225.mc", FT_BOOLEAN, 8,
		TFS(&tfs_mc_bit), 0x01, "mc boolean", HFILL }},
	{ &hf_h225_undefinedNode,
		{ "undefinedNode", "h225.undefinedNode", FT_BOOLEAN, 8,
		TFS(&tfs_undefinedNode_bit), 0x01, "undefinedNode boolean", HFILL }},
	{ &hf_h225_destinationInfo,
		{ "destinationInfo", "h225.destinationInfo", FT_NONE, BASE_NONE,
		NULL, 0, "destinationInfo sequence", HFILL }},
	{ &hf_h225_EndPointType,
		{ "EndPointType", "h225.EndPointType", FT_NONE, BASE_NONE,
		NULL, 0, "EndPointType sequence", HFILL }},
	{ &hf_h225_terminalType,
		{ "terminalType", "h225.terminalType", FT_NONE, BASE_NONE,
		NULL, 0, "terminalType sequence", HFILL }},
	{ &hf_h225_sourceInfo,
		{ "sourceInfo", "h225.sourceInfo", FT_NONE, BASE_NONE,
		NULL, 0, "sourceInfo sequence", HFILL }},
	{ &hf_h225_multipleCalls,
		{ "multipleCalls", "h225.multipleCalls", FT_BOOLEAN, 8,
		TFS(&tfs_multipleCalls_bit), 0x01, "multipleCalls boolean", HFILL }},
	{ &hf_h225_maintainConnection,
		{ "maintainConnection", "h225.maintainConnection", FT_BOOLEAN, 8,
		TFS(&tfs_maintainConnection_bit), 0x01, "maintainConnection boolean", HFILL }},
	{ &hf_h225_CallProceedingUUIE,
		{ "CallProceedingUUIE", "h225.CallProceedingUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "CallProceedingUUIE sequence", HFILL }},
	{ &hf_h225_CapacityReportingSpecification_when,
		{ "CapacityReportingSpecification_when", "h225.CapacityReportingSpecification_when", FT_NONE, BASE_NONE,
		NULL, 0, "CapacityReportingSpecification_when sequence", HFILL }},
	{ &hf_h225_CapacityReportingSpecification,
		{ "CapacityReportingSpecification", "h225.CapacityReportingSpecification", FT_NONE, BASE_NONE,
		NULL, 0, "CapacityReportingSpecification sequence", HFILL }},
	{ &hf_h225_ProgressUUIE,
		{ "ProgressUUIE", "h225.ProgressUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "ProgressUUIE sequence", HFILL }},
	{ &hf_h225_EndPoint,
		{ "EndPoint", "h225.EndPoint", FT_NONE, BASE_NONE,
		NULL, 0, "EndPoint sequence", HFILL }},
	{ &hf_h225_destinationType,
		{ "destinationType", "h225.destinationType", FT_NONE, BASE_NONE,
		NULL, 0, "destinationType sequence", HFILL }},
	{ &hf_h225_destExtraCallInfo,
		{ "destExtraCallInfo", "h225.destExtraCallInfo", FT_NONE, BASE_NONE,
		NULL, 0, "destExtraCallInfo sequence of", HFILL }},
	{ &hf_h225_remoteExtensionAddress,
		{ "remoteExtensionAddress", "h225.remoteExtensionAddress", FT_NONE, BASE_NONE,
		NULL, 0, "remoteExtensionAddress sequence of", HFILL }},
	{ &hf_h225_aliasAddress_sequence,
		{ "aliasAddress_sequence", "h225.aliasAddress_sequence", FT_NONE, BASE_NONE,
		NULL, 0, "aliasAddress_sequence sequence of", HFILL }},
	{ &hf_h225_rasAddress_sequence,
		{ "rasAddress_sequence", "h225.rasAddress_sequence", FT_NONE, BASE_NONE,
		NULL, 0, "rasAddress_sequence sequence of", HFILL }},
	{ &hf_h225_callSignalAddress,
		{ "callSignalAddress", "h225.callSignalAddress", FT_NONE, BASE_NONE,
		NULL, 0, "callSignalAddress sequence of", HFILL }},
	{ &hf_h225_ICV,
		{ "ICV", "h225.ICV", FT_NONE, BASE_NONE,
		NULL, 0, "ICV sequence", HFILL }},
	{ &hf_h225_BandwidthConfirm,
		{ "BandwidthConfirm", "h225.BandwidthConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "BandwidthConfirm sequence", HFILL }},
	{ &hf_h225_UnregistrationConfirm,
		{ "UnregistrationConfirm", "h225.UnregistrationConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "UnregistrationConfirm sequence", HFILL }},
	{ &hf_h225_NonStandardMessage,
		{ "NonStandardMessage", "h225.NonStandardMessage", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardMessage sequence", HFILL }},
	{ &hf_h225_InfoRequestAck,
		{ "InfoRequestAck", "h225.InfoRequestAck", FT_NONE, BASE_NONE,
		NULL, 0, "InfoRequestAck sequence", HFILL }},
	{ &hf_h225_InfoRequestNak,
		{ "InfoRequestNak", "h225.InfoRequestNak", FT_NONE, BASE_NONE,
		NULL, 0, "InfoRequestNak sequence", HFILL }},
	{ &hf_h225_ResourcesAvailableConfirm,
		{ "ResourcesAvailableConfirm", "h225.ResourcesAvailableConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "ResourcesAvailableConfirm sequence", HFILL }},
	{ &hf_h225_GatekeeperRequest,
		{ "GatekeeperRequest", "h225.GatekeeperRequest", FT_NONE, BASE_NONE,
		NULL, 0, "GatekeeperRequest sequence", HFILL }},
	{ &hf_h225_integrity,
		{ "integrity", "h225.integrity", FT_NONE, BASE_NONE,
		NULL, 0, "integrity sequence of", HFILL }},
	{ &hf_h225_algorithmOIDs,
		{ "algorithmOIDs", "h225.algorithmOIDs", FT_NONE, BASE_NONE,
		NULL, 0, "algorithmOIDs sequence of", HFILL }},
	{ &hf_h225_alternateEndpoints,
		{ "alternateEndpoints", "h225.alternateEndpoints", FT_NONE, BASE_NONE,
		NULL, 0, "alternateEndpoints sequence of", HFILL }},
	{ &hf_h225_endpointAlias,
		{ "endpointAlias", "h225.endpointAlias", FT_NONE, BASE_NONE,
		NULL, 0, "endpointAlias sequence of", HFILL }},
	{ &hf_h225_ServiceControlResponse,
		{ "ServiceControlResponse", "h225.ServiceControlResponse", FT_NONE, BASE_NONE,
		NULL, 0, "ServiceControlResponse sequence", HFILL }},
	{ &hf_h225_DisengageReject,
		{ "DisengageReject", "h225.DisengageReject", FT_NONE, BASE_NONE,
		NULL, 0, "DisengageReject sequence", HFILL }},
	{ &hf_h225_BandwidthReject,
		{ "BandwidthReject", "h225.BandwidthReject", FT_NONE, BASE_NONE,
		NULL, 0, "BandwidthReject sequence", HFILL }},
	{ &hf_h225_UnregistrationReject,
		{ "UnregistrationReject", "h225.UnregistrationReject", FT_NONE, BASE_NONE,
		NULL, 0, "UnregistrationReject sequence", HFILL }},
	{ &hf_h225_UnregistrationRequest,
		{ "UnregistrationRequest", "h225.UnregistrationRequest", FT_NONE, BASE_NONE,
		NULL, 0, "UnregistrationRequest sequence", HFILL }},
	{ &hf_h225_endpointAliasPattern,
		{ "endpointAliasPattern", "h225.endpointAliasPattern", FT_NONE, BASE_NONE,
		NULL, 0, "endpointAliasPattern sequence of", HFILL }},
	{ &hf_h225_RegistrationReject,
		{ "RegistrationReject", "h225.RegistrationReject", FT_NONE, BASE_NONE,
		NULL, 0, "RegistrationReject sequence", HFILL }},
	{ &hf_h225_invalidTerminalAliases,
		{ "invalidTerminalAliases", "h225.invalidTerminalAliases", FT_NONE, BASE_NONE,
		NULL, 0, "invalidTerminalAliases sequence", HFILL }},
	{ &hf_h225_terminalAlias,
		{ "terminalAlias", "h225.terminalAlias", FT_NONE, BASE_NONE,
		NULL, 0, "terminalAlias sequence of", HFILL }},
	{ &hf_h225_terminalAliasPattern,
		{ "terminalAliasPattern", "h225.terminalAliasPattern", FT_NONE, BASE_NONE,
		NULL, 0, "terminalAliasPattern sequence of", HFILL }},
	{ &hf_h225_RegistrationRejectReason,
		{ "RegistrationRejectReason", "h225.RegistrationRejectReason", FT_UINT32, BASE_DEC,
		VALS(RegistrationRejectReason_vals), 0, "RegistrationRejectReason choice", HFILL }},
	{ &hf_h225_duplicateAlias,
		{ "duplicateAlias", "h225.duplicateAlias", FT_NONE, BASE_NONE,
		NULL, 0, "duplicateAlias sequence of", HFILL }},
	{ &hf_h225_GatekeeperReject,
		{ "GatekeeperReject", "h225.GatekeeperReject", FT_NONE, BASE_NONE,
		NULL, 0, "GatekeeperReject sequence", HFILL }},
	{ &hf_h225_almostOutOfResources,
		{ "almostOutOfResources", "h225.almostOutOfResources", FT_BOOLEAN, 8,
		TFS(&tfs_almostOutOfResources_bit), 0x01, "almostOutOfResources boolean", HFILL }},
	{ &hf_h225_ResourcesAvailableIndicate,
		{ "ResourcesAvailableIndicate", "h225.ResourcesAvailableIndicate", FT_NONE, BASE_NONE,
		NULL, 0, "ResourcesAvailableIndicate sequence", HFILL }},
	{ &hf_h225_protocols,
		{ "protocols", "h225.protocols", FT_NONE, BASE_NONE,
		NULL, 0, "protocols sequence of", HFILL }},
	{ &hf_h225_callDurationLimit,
		{ "callDurationLimit", "h225.callDurationLimit", FT_UINT32, BASE_DEC,
		NULL, 0, "callDurationLimit", HFILL }},
	{ &hf_h225_enforceCallDurationLimit,
		{ "enforceCallDurationLimit", "h225.enforceCallDurationLimit", FT_BOOLEAN, 8,
		TFS(&tfs_enforceCallDurationLimit_bit), 0x01, "enforceCallDurationLimit boolean", HFILL }},
	{ &hf_h225_CallCreditServiceControl,
		{ "CallCreditServiceControl", "h225.CallCreditServiceControl", FT_NONE, BASE_NONE,
		NULL, 0, "CallCreditServiceControl sequence", HFILL }},
	{ &hf_h225_ScreeningIndicator,
		{ "ScreeningIndicator", "h225.ScreeningIndicator", FT_UINT32, BASE_DEC,
		VALS(ScreeningIndicator_vals), 0, "ScreeningIndicator", HFILL }},
	{ &hf_h225_ExtendedAliasAddress,
		{ "ExtendedAliasAddress", "h225.ExtendedAliasAddress", FT_NONE, BASE_NONE,
		NULL, 0, "ExtendedAliasAddress sequence", HFILL }},
	{ &hf_h225_messageNotUnderstood,
		{ "messageNotUnderstood", "h225.messageNotUnderstood", FT_BYTES, BASE_HEX,
		NULL, 0, "messageNotUnderstood octet string", HFILL }},
	{ &hf_h225_UnknownMessageResponse,
		{ "UnknownMessageResponse", "h225.UnknownMessageResponse", FT_NONE, BASE_NONE,
		NULL, 0, "UnknownMessageResponse sequence", HFILL }},
	{ &hf_h225_CallReferenceValue,
		{ "CallReferenceValue", "h225.CallReferenceValue", FT_UINT32, BASE_DEC,
		NULL, 0, "CallReferenceValue", HFILL }},
	{ &hf_h225_AdmissionRequest,
		{ "AdmissionRequest", "h225.AdmissionRequest", FT_NONE, BASE_NONE,
		NULL, 0, "AdmissionRequest sequence", HFILL }},
	{ &hf_h225_canMapSrcAlias,
		{ "canMapSrcAlias", "h225.canMapSrcAlias", FT_BOOLEAN, 8,
		TFS(&tfs_canMapSrcAlias_bit), 0x01, "canMapSrcAlias boolean", HFILL }},
	{ &hf_h225_desiredProtocols,
		{ "desiredProtocols", "h225.desiredProtocols", FT_NONE, BASE_NONE,
		NULL, 0, "desiredProtocols sequence of", HFILL }},
	{ &hf_h225_willSupplyUUIEs,
		{ "willSupplyUUIEs", "h225.willSupplyUUIEs", FT_BOOLEAN, 8,
		TFS(&tfs_willSupplyUUIEs_bit), 0x01, "willSupplyUUIEs boolean", HFILL }},
	{ &hf_h225_destAlternatives,
		{ "destAlternatives", "h225.destAlternatives", FT_NONE, BASE_NONE,
		NULL, 0, "destAlternatives sequence of", HFILL }},
	{ &hf_h225_srcAlternatives,
		{ "srcAlternatives", "h225.srcAlternatives", FT_NONE, BASE_NONE,
		NULL, 0, "srcAlternatives sequence of", HFILL }},
	{ &hf_h225_canMapAlias,
		{ "canMapAlias", "h225.canMapAlias", FT_BOOLEAN, 8,
		TFS(&tfs_canMapAlias_bit), 0x01, "canMapAlias boolean", HFILL }},
	{ &hf_h225_activeMC,
		{ "activeMC", "h225.activeMC", FT_BOOLEAN, 8,
		TFS(&tfs_activeMC_bit), 0x01, "activeMC boolean", HFILL }},
	{ &hf_h225_srcInfo,
		{ "srcInfo", "h225.srcInfo", FT_NONE, BASE_NONE,
		NULL, 0, "srcInfo sequence of", HFILL }},
	{ &hf_h225_DestinationInfo,
		{ "DestinationInfo", "h225.DestinationInfo", FT_NONE, BASE_NONE,
		NULL, 0, "DestinationInfo sequence of", HFILL }},
	{ &hf_h225_InfoRequest,
		{ "InfoRequest", "h225.InfoRequest", FT_NONE, BASE_NONE,
		NULL, 0, "InfoRequest sequence", HFILL }},
	{ &hf_h225_nextSegmentRequested,
		{ "nextSegmentRequested", "h225.nextSegmentRequested", FT_UINT32, BASE_DEC,
		NULL, 0, "nextSegmentRequested", HFILL }},
	{ &hf_h225_delay,
		{ "delay", "h225.delay", FT_UINT32, BASE_DEC,
		NULL, 0, "delay", HFILL }},
	{ &hf_h225_RequestInProgress,
		{ "RequestInProgress", "h225.RequestInProgress", FT_NONE, BASE_NONE,
		NULL, 0, "RequestInProgress sequence", HFILL }},
	{ &hf_h225_H248SignalsDescriptor,
		{ "H248SignalsDescriptor", "h225.H248SignalsDescriptor", FT_BYTES, BASE_HEX,
		NULL, 0, "H248SignalsDescriptor octet string", HFILL }},
	{ &hf_h225_url,
		{ "url", "h225.url", FT_BYTES, BASE_HEX,
		NULL, 0, "url IA5String", HFILL }},
	{ &hf_h225_ServiceControlDescriptor,
		{ "ServiceControlDescriptor", "h225.ServiceControlDescriptor", FT_UINT32, BASE_DEC,
		VALS(ServiceControlDescriptor_vals), 0, "ServiceControlDescriptor choice", HFILL }},
	{ &hf_h225_ServiceControlSession,
		{ "ServiceControlSession", "h225.ServiceControlSession", FT_NONE, BASE_NONE,
		NULL, 0, "ServiceControlSession sequence", HFILL }},
	{ &hf_h225_sessionId,
		{ "sessionId", "h225.sessionId", FT_UINT32, BASE_DEC,
		NULL, 0, "sessionId", HFILL }},
	{ &hf_h225_AlertingUUIE,
		{ "AlertingUUIE", "h225.AlertingUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "AlertingUUIE sequence", HFILL }},
	{ &hf_h225_serviceControl,
		{ "serviceControl", "h225.serviceControl", FT_NONE, BASE_NONE,
		NULL, 0, "serviceControl sequence of", HFILL }},
	{ &hf_h225_alertingAddress,
		{ "alertingAddress", "h225.alertingAddress", FT_NONE, BASE_NONE,
		NULL, 0, "alertingAddress sequence of", HFILL }},
	{ &hf_h225_ReleaseCompleteUUIE,
		{ "ReleaseCompleteUUIE", "h225.ReleaseCompleteUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "ReleaseCompleteUUIE sequence", HFILL }},
	{ &hf_h225_busyAddress,
		{ "busyAddress", "h225.busyAddress", FT_NONE, BASE_NONE,
		NULL, 0, "busyAddress sequence of", HFILL }},
	{ &hf_h225_FacilityUUIE,
		{ "FacilityUUIE", "h225.FacilityUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "FacilityUUIE sequence", HFILL }},
	{ &hf_h225_alternativeAliasAddress,
		{ "alternativeAliasAddress", "h225.alternativeAliasAddress", FT_NONE, BASE_NONE,
		NULL, 0, "alternativeAliasAddress sequence of", HFILL }},
	{ &hf_h225_AdmissionReject,
		{ "AdmissionReject", "h225.AdmissionReject", FT_NONE, BASE_NONE,
		NULL, 0, "AdmissionReject sequence", HFILL }},
	{ &hf_h225_hopCount,
		{ "hopCount", "h225.hopCount", FT_UINT32, BASE_DEC,
		NULL, 0, "hopCount", HFILL }},
	{ &hf_h225_parallelH245Control,
		{ "parallelH245Control", "h225.parallelH245Control", FT_NONE, BASE_NONE,
		NULL, 0, "parallelH245Control sequence of", HFILL }},
	{ &hf_h225_language,
		{ "language", "h225.language", FT_BYTES, BASE_HEX,
		NULL, 0, "language IA5String", HFILL }},
	{ &hf_h225_languages,
		{ "languages", "h225.languages", FT_NONE, BASE_NONE,
		NULL, 0, "languages sequence of", HFILL }},
	{ &hf_h225_mediaWaitForConnect,
		{ "mediaWaitForConnect", "h225.mediaWaitForConnect", FT_BOOLEAN, 8,
		TFS(&tfs_mediaWaitForConnect_bit), 0x01, "mediaWaitForConnect boolean", HFILL }},
	{ &hf_h225_canOverlapSend,
		{ "canOverlapSend", "h225.canOverlapSend", FT_BOOLEAN, 8,
		TFS(&tfs_canOverlapSend_bit), 0x01, "canOverlapSend boolean", HFILL }},
	{ &hf_h225_SetupUUIE,
		{ "SetupUUIE", "h225.SetupUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "SetupUUIE sequence", HFILL }},
	{ &hf_h225_sourceAddress,
		{ "sourceAddress", "h225.sourceAddress", FT_NONE, BASE_NONE,
		NULL, 0, "sourceAddress sequence of", HFILL }},
	{ &hf_h225_destinationAddress,
		{ "destinationAddress", "h225.destinationAddress", FT_NONE, BASE_NONE,
		NULL, 0, "destinationAddress sequence of", HFILL }},
	{ &hf_h225_destExtraCRV,
		{ "destExtraCRV", "h225.destExtraCRV", FT_NONE, BASE_NONE,
		NULL, 0, "destExtraCRV sequence of", HFILL }},
	{ &hf_h225_h245SecurityCapability,
		{ "h245SecurityCapability", "h225.h245SecurityCapability", FT_NONE, BASE_NONE,
		NULL, 0, "h245SecurityCapability sequence of", HFILL }},
	{ &hf_h225_additionalSourceAddresses,
		{ "additionalSourceAddresses", "h225.additionalSourceAddresses", FT_NONE, BASE_NONE,
		NULL, 0, "additionalSourceAddresses sequence of", HFILL }},
	{ &hf_h225_ConnectUUIE,
		{ "ConnectUUIE", "h225.ConnectUUIE", FT_NONE, BASE_NONE,
		NULL, 0, "ConnectUUIE sequence", HFILL }},
	{ &hf_h225_connectedAddress,
		{ "connectedAddress", "h225.connectedAddress", FT_NONE, BASE_NONE,
		NULL, 0, "connectedAddress sequence of", HFILL }},
	{ &hf_h225_h323_message_body,
		{ "h323_message_body", "h225.h323_message_body", FT_UINT32, BASE_DEC,
		VALS(h323_message_body_vals), 0, "h323_message_body choice", HFILL }},
	{ &hf_h225_LocationConfirm,
		{ "LocationConfirm", "h225.LocationConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "LocationConfirm sequence", HFILL }},
	{ &hf_h225_supportedProtocols,
		{ "supportedProtocols", "h225.supportedProtocols", FT_NONE, BASE_NONE,
		NULL, 0, "supportedProtocols sequence of", HFILL }},
	{ &hf_h225_modifiedSrcInfo,
		{ "modifiedSrcInfo", "h225.modifiedSrcInfo", FT_NONE, BASE_NONE,
		NULL, 0, "modifiedSrcInfo sequence of", HFILL }},
	{ &hf_h225_LocationReject,
		{ "LocationReject", "h225.LocationReject", FT_NONE, BASE_NONE,
		NULL, 0, "LocationReject sequence", HFILL }},
	{ &hf_h225_callSpecific,
		{ "callSpecific", "h225.callSpecific", FT_NONE, BASE_NONE,
		NULL, 0, "callSpecific sequence", HFILL }},
	{ &hf_h225_answeredCall,
		{ "answeredCall", "h225.answeredCall", FT_BOOLEAN, 8,
		TFS(&tfs_answeredCall_bit), 0x01, "answeredCall boolean", HFILL }},
	{ &hf_h225_ServiceControlIndication,
		{ "ServiceControlIndication", "h225.ServiceControlIndication", FT_NONE, BASE_NONE,
		NULL, 0, "ServiceControlIndication sequence", HFILL }},
	{ &hf_h225_RasUsageInformation,
		{ "RasUsageInformation", "h225.RasUsageInformation", FT_NONE, BASE_NONE,
		NULL, 0, "RasUsageInformation sequence", HFILL }},
	{ &hf_h225_nonStandardUsageFields,
		{ "nonStandardUsageFields", "h225.nonStandardUsageFields", FT_NONE, BASE_NONE,
		NULL, 0, "SEQUENCE OF NonStandardParameter", HFILL }},
	{ &hf_h225_nonStandardUsageFields_item,
		{ "nonStandardUsageFields", "h225.nonStandardUsageFields_item", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardParameter", HFILL }},
	{ &hf_h225_TimeToLive,
		{ "TimeToLive", "h225.TimeToLive", FT_UINT32, BASE_DEC,
		NULL, 0, "TimeToLive in seconds", HFILL }},
	{ &hf_h225_GatekeeperConfirm,
		{ "GatekeeperConfirm", "h225.GatekeeperConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "GatekeeperConfirm sequence", HFILL }},
	{ &hf_h225_RegistrationRequest,
		{ "RegistrationRequest", "h225.RegistrationRequest", FT_NONE, BASE_NONE,
		NULL, 0, "RegistrationRequest sequence", HFILL }},
	{ &hf_h225_discoveryComplete,
		{ "discoveryComplete", "h225.discoveryComplete", FT_BOOLEAN, 8,
		TFS(&tfs_discoveryComplete_bit), 0x01, "discoveryComplete boolean", HFILL }},
	{ &hf_h225_keepAlive,
		{ "keepAlive", "h225.keepAlive", FT_BOOLEAN, 8,
		TFS(&tfs_keepAlive_bit), 0x01, "keepAlive boolean", HFILL }},
	{ &hf_h225_H248PackagesDescriptor,
		{ "H248PackagesDescriptor", "h225.H248PackagesDescriptor", FT_BYTES, BASE_HEX,
		NULL, 0, "H248PackagesDescriptor octet string", HFILL }},
	{ &hf_h225_supportedH248Packages,
		{ "supportedH248Packages", "h225.supportedH248Packages", FT_NONE, BASE_NONE,
		NULL, 0, "supportedH248Packages sequence of", HFILL }},
	{ &hf_h225_DisengageConfirm,
		{ "DisengageConfirm", "h225.DisengageConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "DisengageConfirm sequence", HFILL }},
	{ &hf_h225_AdmissionConfirm,
		{ "AdmissionConfirm", "h225.AdmissionConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "AdmissionConfirm sequence", HFILL }},
	{ &hf_h225_irrFrequency,
		{ "irrFrequency", "h225.irrFrequency", FT_UINT32, BASE_DEC,
		NULL, 0, "irrFrequency", HFILL }},
	{ &hf_h225_willRespondToIRR,
		{ "willRespondToIRR", "h225.willRespondToIRR", FT_BOOLEAN, 8,
		TFS(&tfs_willRespondToIRR_bit), 0x01, "willRespondToIRR boolean", HFILL }},
	{ &hf_h225_usageSpec,
		{ "usageSpec", "h225.usageSpec", FT_NONE, BASE_NONE,
		NULL, 0, "usageSpec sequence of", HFILL }},
	{ &hf_h225_DisengageRequest,
		{ "DisengageRequest", "h225.DisengageRequest", FT_NONE, BASE_NONE,
		NULL, 0, "DisengageRequest sequence", HFILL }},
	{ &hf_h225_LocationRequest,
		{ "LocationRequest", "h225.LocationRequest", FT_NONE, BASE_NONE,
		NULL, 0, "LocationRequest sequence", HFILL }},
	{ &hf_h225_SourceInfo,
		{ "SourceInfo", "h225.SourceInfo", FT_NONE, BASE_NONE,
		NULL, 0, "SourceInfo sequence of", HFILL }},
	{ &hf_h225_hopCount255,
		{ "hopCount255", "h225.hopCount255", FT_UINT32, BASE_DEC,
		NULL, 0, "hopCount255", HFILL }},
	{ &hf_h225_sourceEndpointInfo,
		{ "sourceEndpointInfo", "h225.sourceEndpointInfo", FT_NONE, BASE_NONE,
		NULL, 0, "sourceEndpointInfo sequence of", HFILL }},
	{ &hf_h225_BandwidthRequest,
		{ "BandwidthRequest", "h225.BandwidthRequest", FT_NONE, BASE_NONE,
		NULL, 0, "BandwidthRequest sequence", HFILL }},
	{ &hf_h225_bandwidthDetails,
		{ "bandwidthDetails", "h225.bandwidthDetails", FT_NONE, BASE_NONE,
		NULL, 0, "bandwidthDetails sequence of", HFILL }},
	{ &hf_h225_admissionConfirmSequence,
		{ "admissionConfirmSequence", "h225.admissionConfirmSequence", FT_NONE, BASE_NONE,
		NULL, 0, "admissionConfirmSequence sequence of", HFILL }},
	{ &hf_h225_tunnelledSignallingMessage,
		{ "tunnelledSignallingMessage", "h225.tunnelledSignallingMessage", FT_NONE, BASE_NONE,
		NULL, 0, "tunnelledSignallingMessage sequence", HFILL }},
	{ &hf_h225_messageContent_item,
		{ "messageContent_item", "h225.messageContent_item", FT_BYTES, BASE_HEX,
		NULL, 0, "messageContent_item octet string", HFILL }},
	{ &hf_h225_messageContent,
		{ "messageContent", "h225.messageContent", FT_NONE, BASE_NONE,
		NULL, 0, "messageContent sequence of", HFILL }},
	{ &hf_h225_H323_UU_PDU,
		{ "H323_UU_PDU", "h225.H323_UU_PDU", FT_NONE, BASE_NONE,
		NULL, 0, "H323_UU_PDU sequence", HFILL }},
	{ &hf_h225_h4501SupplementaryService,
		{ "h4501SupplementaryService", "h225.h4501SupplementaryService", FT_NONE, BASE_NONE,
		NULL, 0, "h4501SupplementaryService sequence of", HFILL }},
	{ &hf_h225_h245Tunneling,
		{ "h245Tunneling", "h225.h245Tunneling", FT_BOOLEAN, 8,
		TFS(&tfs_h245Tunneling_bit), 0x01, "h245Tunneling boolean", HFILL }},
	{ &hf_h225_h245Control,
		{ "h245Control", "h225.h245Control", FT_NONE, BASE_NONE,
		NULL, 0, "h245Control sequence of", HFILL }},
	{ &hf_h225_nonStandardControl,
		{ "nonStandardControl", "h225.nonStandardControl", FT_NONE, BASE_NONE,
		NULL, 0, "SEQUENCE OF NonStandardParameter", HFILL }},
	{ &hf_h225_nonStandardControl_item,
		{ "nonStandardControl", "h225.nonStandardControl_item", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardParameter", HFILL }},
	{ &hf_h225_preGrantedARQ,
		{ "preGrantedARQ", "h225.preGrantedARQ", FT_NONE, BASE_NONE,
		NULL, 0, "preGrantedARQ sequence", HFILL }},
	{ &hf_h225_makeCall,
		{ "makeCall", "h225.makeCall", FT_BOOLEAN, 8,
		TFS(&tfs_makeCall_bit), 0x01, "makeCall boolean", HFILL }},
	{ &hf_h225_useGKCallSignalAddressToMakeCall,
		{ "useGKCallSignalAddressToMakeCall", "h225.useGKCallSignalAddressToMakeCall", FT_BOOLEAN, 8,
		TFS(&tfs_useGKCallSignalAddressToMakeCall_bit), 0x01, "useGKCallSignalAddressToMakeCall boolean", HFILL }},
	{ &hf_h225_answerCall,
		{ "answerCall", "h225.answerCall", FT_BOOLEAN, 8,
		TFS(&tfs_answerCall_bit), 0x01, "answerCall boolean", HFILL }},
	{ &hf_h225_useGKCallSignalAddressToAnswer,
		{ "useGKCallSignalAddressToAnswer", "h225.useGKCallSignalAddressToAnswer", FT_BOOLEAN, 8,
		TFS(&tfs_useGKCallSignalAddressToAnswer_bit), 0x01, "useGKCallSignalAddressToAnswer boolean", HFILL }},
	{ &hf_h225_RegistrationConfirm,
		{ "RegistrationConfirm", "h225.RegistrationConfirm", FT_NONE, BASE_NONE,
		NULL, 0, "RegistrationConfirm sequence", HFILL }},
	{ &hf_h225_pdu_item,
		{ "pdu_item", "h225.pdu_item", FT_NONE, BASE_NONE,
		NULL, 0, "pdu_item sequence", HFILL }},
	{ &hf_h225_sent,
		{ "sent", "h225.sent", FT_BOOLEAN, 8,
		TFS(&tfs_sent_bit), 0x01, "sent boolean", HFILL }},
	{ &hf_h225_pdu,
		{ "pdu", "h225.pdu", FT_NONE, BASE_NONE,
		NULL, 0, "pdu sequence of", HFILL }},
	{ &hf_h225_perCallInfo_item,
		{ "perCallInfo_item", "h225.perCallInfo_item", FT_NONE, BASE_NONE,
		NULL, 0, "perCallInfo_item sequence", HFILL }},
	{ &hf_h225_originator,
		{ "originator", "h225.originator", FT_BOOLEAN, 8,
		TFS(&tfs_originator_bit), 0x01, "originator boolean", HFILL }},
	{ &hf_h225_audio,
		{ "audio", "h225.audio", FT_NONE, BASE_NONE,
		NULL, 0, "audio sequence of", HFILL }},
	{ &hf_h225_video,
		{ "video", "h225.video", FT_NONE, BASE_NONE,
		NULL, 0, "video sequence of", HFILL }},
	{ &hf_h225_data,
		{ "data", "h225.data", FT_NONE, BASE_NONE,
		NULL, 0, "data sequence of", HFILL }},
	{ &hf_h225_substituteConfIDs,
		{ "substituteConfIDs", "h225.substituteConfIDs", FT_NONE, BASE_NONE,
		NULL, 0, "substituteConfIDs sequence of", HFILL }},
	{ &hf_h225_perCallInfo,
		{ "perCallInfo", "h225.perCallInfo", FT_NONE, BASE_NONE,
		NULL, 0, "perCallInfo sequence of", HFILL }},
	{ &hf_h225_InfoRequestResponse,
		{ "InfoRequestResponse", "h225.InfoRequestResponse", FT_NONE, BASE_NONE,
		NULL, 0, "InfoRequestResponse sequence", HFILL }},
	{ &hf_h225_needResponse,
		{ "needResponse", "h225.needResponse", FT_BOOLEAN, 8,
		TFS(&tfs_needResponse_bit), 0x01, "needResponse boolean", HFILL }},
	{ &hf_h225_unsolicited,
		{ "unsolicited", "h225.unsolicited", FT_BOOLEAN, 8,
		TFS(&tfs_unsolicited_bit), 0x01, "unsolicited boolean", HFILL }},
	{ &hf_h225_RasMessage,
		{ "RasMessage", "h225.RasMessage", FT_UINT32, BASE_DEC,
		VALS(RasMessage_vals), 0, "RasMessage choice", HFILL }},
	{ &hf_h225_H323_UserInformation,
		{ "H323_UserInformation", "h225.H323_UserInformation", FT_NONE, BASE_NONE,
		NULL, 0, "H323_UserInformation sequence", HFILL }},
	{ &hf_h225_user_data,
		{ "user_data", "h225.user_data", FT_NONE, BASE_NONE,
		NULL, 0, "user_data sequence", HFILL }},
	{ &hf_h225_protocol_discriminator,
		{ "protocol_discriminator", "h225.protocol_discriminator", FT_UINT32, BASE_DEC,
		NULL, 0, "protocol_discriminator", HFILL }},
	{ &hf_h225_user_information,
		{ "user_information", "h225.user_information", FT_BYTES, BASE_HEX,
		NULL, 0, "user_information octet string", HFILL }},
	{ &hf_h225_object,
		{ "object", "h225.object", FT_STRING, BASE_NONE,
		NULL, 0, "OBJECT IDENTIFIER", HFILL }},
	{ &hf_h225_t35CountryCode,
		{ "t35CountryCode", "h225.t35CountryCode", FT_UINT32, BASE_DEC,
		VALS(T35CountryCode_vals), 0, "t35CountryCode value", HFILL }},
	{ &hf_h225_t35Extension,
		{ "t35Extension", "h225.t35Extension", FT_UINT32, BASE_DEC,
		NULL, 0, "t35Extension value", HFILL }},
	{ &hf_h225_manufacturerCode,
		{ "manufacturerCode", "h225.manufacturerCode", FT_UINT32, BASE_DEC,
		NULL, 0, "manufacturerCode value", HFILL }},

	{ &hf_h221Manufacturer,
		{ "H.221 Manufacturer", "h221.Manufacturer", FT_UINT32, BASE_HEX,
		VALS(H221ManufacturerCode_vals), 0, "H.221 Manufacturer", HFILL }},

	{ &hf_h225_h221NonStandard,
		{ "h221NonStandard", "h225.h221NonStandard", FT_NONE, BASE_NONE,
		NULL, 0, "H221NonStandard SEQUENCE", HFILL }},
	{ &hf_h225_nonStandardIdentifier,
		{ "nonStandardIdentifier", "h245.NonStandardIdentifier_type", FT_UINT32, BASE_DEC,
		VALS(NonStandardIdentifier_vals), 0, "NonStandardIdentifier CHOICE", HFILL }},
	{ &hf_h225_nsp_data,
		{ "data", "h225.nsp_data", FT_BYTES, BASE_HEX,
		NULL, 0, "OCTET STRING", HFILL }},
	{ &hf_h225_nonStandardData,
		{ "nonStandardData", "h225.nonStandardData", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardParameter SEQUENCE", HFILL }},
	{ &hf_h225_nonStandard,
		{ "nonStandard", "h225.nonStandard", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardParameter SEQUENCE", HFILL }},
	{ &hf_h225_nonStandardReason,
		{ "nonStandardReason", "h225.nonStandardReason", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardParameter SEQUENCE", HFILL }},
	{ &hf_h225_nonStandardAddress,
		{ "nonStandardAddress", "h225.nonStandardAddress", FT_NONE, BASE_NONE,
		NULL, 0, "NonStandardParameter SEQUENCE", HFILL }},
	{ &hf_h225_ras_req_frame,
      		{ "RAS Request Frame", "h225.ras.reqframe", FT_FRAMENUM, BASE_NONE,
      		NULL, 0, "RAS Request Frame", HFILL }},
  	{ &hf_h225_ras_rsp_frame,
      		{ "RAS Response Frame", "h225.ras.rspframe", FT_FRAMENUM, BASE_NONE,
      		NULL, 0, "RAS Response Frame", HFILL }},
  	{ &hf_h225_ras_dup,
      		{ "Duplicate RAS Message", "h225.ras.dup", FT_UINT32, BASE_DEC,
		NULL, 0, "Duplicate RAS Message", HFILL }},
  	{ &hf_h225_ras_deltatime,
      		{ "RAS Service Response Time", "h225.ras.timedelta", FT_RELATIVE_TIME, BASE_NONE,
      		NULL, 0, "Timedelta between RAS-Request and RAS-Response", HFILL }},
	{ &hf_h225_cleartoken,
		{ "cleartoken", "h225.cleartoken", FT_NONE, BASE_NONE,
		NULL, 0, "ClearToken", HFILL }},
    { &hf_h225_cryptoEPPwdHash,
      { "cryptoEPPwdHash", "h225.cryptoEPPwdHash",
        FT_NONE, BASE_NONE, NULL, 0,
        "CryptoH323Token/cryptoEPPwdHash", HFILL }},
    { &hf_h225_timeStamp,
      { "timeStamp", "h225.timeStamp",
        FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0,
        "", HFILL }},
    { &hf_h225_token,
      { "token", "h225.token",
        FT_NONE, BASE_NONE, NULL, 0,
        "", HFILL }},
    { &hf_h225_cryptoGKPwdHash,
      { "cryptoGKPwdHash", "h225.cryptoGKPwdHash",
        FT_NONE, BASE_NONE, NULL, 0,
        "CryptoH323Token/cryptoGKPwdHash", HFILL }},
    { &hf_h225_cryptoEPPwdEncr,
      { "cryptoEPPwdEncr", "h225.cryptoEPPwdEncr",
        FT_NONE, BASE_NONE, NULL, 0,
        "CryptoH323Token/cryptoEPPwdEncr", HFILL }},
    { &hf_h225_cryptoGKPwdEncr,
      { "cryptoGKPwdEncr", "h225.cryptoGKPwdEncr",
        FT_NONE, BASE_NONE, NULL, 0,
        "CryptoH323Token/cryptoGKPwdEncr", HFILL }},
    { &hf_h225_cryptoEPCert,
      { "cryptoEPCert", "h225.cryptoEPCert",
        FT_NONE, BASE_NONE, NULL, 0,
        "CryptoH323Token/cryptoEPCert", HFILL }},
    { &hf_h225_cryptoGKCert,
      { "cryptoGKCert", "h225.cryptoGKCert",
        FT_NONE, BASE_NONE, NULL, 0,
        "CryptoH323Token/cryptoGKCert", HFILL }},
    { &hf_h225_cryptoFastStart,
      { "cryptoFastStart", "h225.cryptoFastStart",
        FT_NONE, BASE_NONE, NULL, 0,
        "CryptoH323Token/cryptoFastStart", HFILL }},
    { &hf_h225_nestedcryptoToken,
      { "nestedcryptoToken", "h225.nestedcryptoToken",
        FT_UINT32, BASE_DEC, VALS(CryptoToken_vals), 0,
        "CryptoH323Token/nestedcryptoToken", HFILL }},
    { &hf_h225_cryptoTokens_item,
      { "CryptoH323Token", "h225.cryptoTokens_item",
        FT_UINT32, BASE_DEC, VALS(CryptoH323Token_vals), 0,
        "", HFILL }},
    { &hf_h225_authenticationCapability,
      { "authenticationCapability", "h225.authenticationCapability",
        FT_NONE, BASE_DEC, NULL, 0,
        "GatekeeperRequest/authenticationCapability", HFILL }},
    { &hf_h225_authenticationCapability_item,
      { "authenticationCapability", "h225.authenticationCapability_item",
        FT_UINT32, BASE_DEC, NULL, 0,
        "GatekeeperRequest/authenticationCapability/_item", HFILL }},
    { &hf_h225_authenticationMode,
      { "authenticationMode", "h225.authenticationMode",
        FT_UINT32, BASE_DEC, NULL, 0,
        "GatekeeperConfirm/authenticationMode", HFILL }},
    { &hf_h225_alertingTime,
      { "alertingTime", "h225.alertingTime",
        FT_UINT32, BASE_DEC, NULL, 0,
        "RasUsageInformation/alertingTime", HFILL }},
    { &hf_h225_connectTime,
      { "connectTime", "h225.connectTime",
        FT_UINT32, BASE_DEC, NULL, 0,
        "RasUsageInformation/connectTime", HFILL }},
    { &hf_h225_endTimeStamp,
      { "endTime", "h225.endTime",
        FT_UINT32, BASE_DEC, NULL, 0,
        "RasUsageInformation/endTime", HFILL }},

/*ddd*/
	};

	static gint *ett[] =
	{
		&ett_h225,
		&ett_h225_SecurityServiceMode_encryption,
		&ett_h225_SecurityServiceMode_authentication,
		&ett_h225_SecurityServiceMode_integrity,
		&ett_h225_H245Security,
		&ett_h225_ReleaseCompleteReason,
		&ett_h225_routing,
		&ett_h225_TransportAddress,
		&ett_h225_InfoRequestResponseStatus,
		&ett_h225_systemid,
		&ett_h225_MobileUIM,
		&ett_h225_PartyNumber,
		&ett_h225_AliasAddress,
		&ett_h225_AddressPattern,
		&ett_h225_SupportedProtocols,
		&ett_h225_GenericIdentifier,
		&ett_h225_Content,
		&ett_h225_CallTerminationCause,
		&ett_h225_AdmissionRejectReason,
		&ett_h225_EncryptIntAlg,
		&ett_h225_NonIsoIntegrityMechanism,
		&ett_h225_IntegrityMechanism,
		&ett_h225_LocationRejectReason,
		&ett_h225_RegistrationRejectReason,
		&ett_h225_ServiceControlDescriptor,
		&ett_h225_h323_message_body,
		&ett_h225_RasMessage,
		&ett_h225_GatekeeperRejectReason,
		&ett_h225_PresentationIndicator,
		&ett_h225_CryptoH323Token,
		&ett_h225_conferenceGoal,
		&ett_h225_ScnConnectionType,
		&ett_h225_ScnConnectionAggregation,
		&ett_h225_FacilityReason,
		&ett_h225_PublicTypeOfNumber,
		&ett_h225_PrivateTypeOfNumber,
		&ett_h225_UseSpecifiedTransport,
		&ett_h225_SecurityErrors,
		&ett_h225_SecurityErrors2,
		&ett_h225_ServiceControlSession_reason,
		&ett_h225_billingMode,
		&ett_h225_CCSCcallStartingPoint,
		&ett_h225_UnregRequestReason,
		&ett_h225_UnregRejectReason,
		&ett_h225_CallType,
		&ett_h225_CallModel,
		&ett_h225_TransportQOS,
		&ett_h225_BandRejectReason,
		&ett_h225_DisengageReason,
		&ett_h225_DisengageRejectReason,
		&ett_h225_InfoRequestNakReason,
		&ett_h225_SCRresult,
		&ett_h225_GatekeeperInfo,
		&ett_h225_SecurityCapabilities_tls,
		&ett_h225_SecurityCapabilities_ipsec,
		&ett_h225_RasUsageInfoTypes,
		&ett_h225_T_nonStandardUsageTypes,
		&ett_h225_DataRate,
		&ett_h225_dataRatesSupported,
		&ett_h225_TerminalInfo,
		&ett_h225_StimulusControl,
		&ett_h225_connectionParameters,
		&ett_h225_RasUsageSpecification_when,
		&ett_h225_RasUsageSpecification_callStartingPoint,
		&ett_h225_RasUsageSpecification,
		&ett_h225_ipAddress,
		&ett_h225_route,
		&ett_h225_ipSourceRoute,
		&ett_h225_ipxAddress,
		&ett_h225_ip6Address,
		&ett_h225_TransportChannelInfo,
		&ett_h225_CarrierInfo,
		&ett_h225_CallIdentifier,
		&ett_h225_CallLinkage,
		&ett_h225_tokens,
		&ett_h225_CryptoH323Tokens,
		&ett_h225_AlternateGK,
		&ett_h225_alternateGatekeeper,
		&ett_h225_AltGKInfo,
		&ett_h225_annexE,
		&ett_h225_sctp,
		&ett_h225_AlternateTransportAddress,
		&ett_h225_UUIEsRequested,
		&ett_h225_Q954Details,
		&ett_h225_QseriesOptions,
		&ett_h225_associatedSessionIds,
		&ett_h225_RTPSession,
		&ett_h225_StatusUUIE,
		&ett_h225_StatusInquiryUUIE,
		&ett_h225_SetupAcknowledgeUUIE,
		&ett_h225_NotifyUUIE,
		&ett_h225_GSMUIM,
		&ett_h225_ANSI41UIM,
		&ett_h225_e164Number,
		&ett_h225_privateNumber,
		&ett_h225_TunnelledProtocolAlternateIdentifier,
		&ett_h225_SupportedPrefix,
		&ett_h225_SupportedPrefixes,
		&ett_h225_H310Caps,
		&ett_h225_H320Caps,
		&ett_h225_H321Caps,
		&ett_h225_H322Caps,
		&ett_h225_H323Caps,
		&ett_h225_H324Caps,
		&ett_h225_VoiceCaps,
		&ett_h225_T120OnlyCaps,
		&ett_h225_NonStandardProtocol,
		&ett_h225_SIPCaps,
		&ett_h225_AddressPattern_range,
		&ett_h225_ConferenceList,
		&ett_h225_conferences,
		&ett_h225_T38FaxAnnexbOnlyCaps,
		&ett_h225_protocol,
		&ett_h225_GatewayInfo,
		&ett_h225_McuInfo,
		&ett_h225_TunnelledProtocol_id,
		&ett_h225_TunnelledProtocol,
		&ett_h225_TunnelledProtocols,
		&ett_h225_CicInfo_cic,
		&ett_h225_CicInfo,
		&ett_h225_GroupID_member,
		&ett_h225_GroupID,
		&ett_h225_CircuitIdentifier,
		&ett_h225_EnumeratedParameter,
		&ett_h225_parameters,
		&ett_h225_GenericData,
		&ett_h225_Content_compound,
		&ett_h225_Content_nested,
		&ett_h225_neededFeatures,
		&ett_h225_desiredFeatures,
		&ett_h225_supportedFeatures,
		&ett_h225_FeatureSet,
		&ett_h225_CallsAvailable,
		&ett_h225_voiceGwCallsAvailable,
		&ett_h225_h310GwCallsAvailable,
		&ett_h225_h320GwCallsAvailable,
		&ett_h225_h321GwCallsAvailable,
		&ett_h225_h322GwCallsAvailable,
		&ett_h225_h323GwCallsAvailable,
		&ett_h225_h324GwCallsAvailable,
		&ett_h225_t120OnlyGwCallsAvailable,
		&ett_h225_t38FaxAnnexbOnlyGwCallsAvailable,
		&ett_h225_terminalCallsAvailable,
		&ett_h225_mcuCallsAvailable,
		&ett_h225_sipGwCallsAvailable,
		&ett_h225_CallCapacityInfo,
		&ett_h225_CallCapacity,
		&ett_h225_VendorIdentifier,
		&ett_h225_CapacityReportingCapability,
		&ett_h225_CallCreditCapability,
		&ett_h225_BandwidthDetails,
		&ett_h225_CircuitInfo,
		&ett_h225_genericData,
		&ett_h225_fastStart,
		&ett_h225_InformationUUIE,
		&ett_h225_routeCallToSCN,
		&ett_h225_EndPointType,
		&ett_h225_CallProceedingUUIE,
		&ett_h225_CapacityReportingSpecification_when,
		&ett_h225_CapacityReportingSpecification,
		&ett_h225_ProgressUUIE,
		&ett_h225_EndPoint,
		&ett_h225_destExtraCallInfo,
		&ett_h225_remoteExtensionAddress,
		&ett_h225_rasAddress_sequence,
		&ett_h225_callSignalAddress,
		&ett_h225_ICV,
		&ett_h225_BandwidthConfirm,
		&ett_h225_UnregistrationConfirm,
		&ett_h225_NonStandardMessage,
		&ett_h225_InfoRequestAck,
		&ett_h225_InfoRequestNak,
		&ett_h225_ResourcesAvailableConfirm,
		&ett_h225_GatekeeperRequest,
		&ett_h225_integrity,
		&ett_h225_algorithmOIDs,
		&ett_h225_alternateEndpoints,
		&ett_h225_endpointAlias,
		&ett_h225_ServiceControlResponse,
		&ett_h225_DisengageReject,
		&ett_h225_BandwidthReject,
		&ett_h225_UnregistrationReject,
		&ett_h225_UnregistrationRequest,
		&ett_h225_endpointAliasPattern,
		&ett_h225_RegistrationReject,
		&ett_h225_invalidTerminalAliases,
		&ett_h225_terminalAlias,
		&ett_h225_terminalAliasPattern,
		&ett_h225_duplicateAlias,
		&ett_h225_GatekeeperReject,
		&ett_h225_ResourcesAvailableIndicate,
		&ett_h225_protocols,
		&ett_h225_CallCreditServiceControl,
		&ett_h225_ExtendedAliasAddress,
		&ett_h225_UnknownMessageResponse,
		&ett_h225_AdmissionRequest,
		&ett_h225_desiredProtocols,
		&ett_h225_destAlternatives,
		&ett_h225_srcAlternatives,
		&ett_h225_srcInfo,
		&ett_h225_DestinationInfo,
		&ett_h225_InfoRequest,
		&ett_h225_RequestInProgress,
		&ett_h225_ServiceControlSession,
		&ett_h225_AlertingUUIE,
		&ett_h225_serviceControl,
		&ett_h225_alertingAddress,
		&ett_h225_ReleaseCompleteUUIE,
		&ett_h225_busyAddress,
		&ett_h225_FacilityUUIE,
		&ett_h225_alternativeAliasAddress,
		&ett_h225_AdmissionReject,
		&ett_h225_parallelH245Control,
		&ett_h225_languages,
		&ett_h225_SetupUUIE,
		&ett_h225_sourceAddress,
		&ett_h225_destinationAddress,
		&ett_h225_destExtraCRV,
		&ett_h225_h245SecurityCapability,
		&ett_h225_additionalSourceAddresses,
		&ett_h225_ConnectUUIE,
		&ett_h225_connectedAddress,
		&ett_h225_LocationConfirm,
		&ett_h225_supportedProtocols,
		&ett_h225_modifiedSrcInfo,
		&ett_h225_LocationReject,
		&ett_h225_callSpecific,
		&ett_h225_ServiceControlIndication,
		&ett_h225_RasUsageInformation,
		&ett_h225_T_nonStandardUsageFields,
		&ett_h225_GatekeeperConfirm,
		&ett_h225_RegistrationRequest,
		&ett_h225_supportedH248Packages,
		&ett_h225_DisengageConfirm,
		&ett_h225_AdmissionConfirm,
		&ett_h225_usageSpec,
		&ett_h225_DisengageRequest,
		&ett_h225_LocationRequest,
		&ett_h225_SourceInfo,
		&ett_h225_sourceEndpointInfo,
		&ett_h225_BandwidthRequest,
		&ett_h225_bandwidthDetails,
		&ett_h225_admissionConfirmSequence,
		&ett_h225_tunnelledSignallingMessage,
		&ett_h225_messageContent,
		&ett_h225_H323_UU_PDU,
		&ett_h225_h4501SupplementaryService,
		&ett_h225_h245Control,
		&ett_h225_T_nonStandardControl,
		&ett_h225_preGrantedARQ,
		&ett_h225_RegistrationConfirm,
		&ett_h225_pdu_item,
		&ett_h225_pdu,
		&ett_h225_perCallInfo_item,
		&ett_h225_audio,
		&ett_h225_video,
		&ett_h225_data,
		&ett_h225_substituteConfIDs,
		&ett_h225_perCallInfo,
		&ett_h225_InfoRequestResponse,
		&ett_h225_H323_UserInformation,
		&ett_h225_user_data,
		&ett_h225_H221NonStandard,
		&ett_h225_NonStandardIdentifier,
		&ett_h225_NonStandardParameter,
		&ett_h225_T_cryptoEPPwdHash,
		&ett_h225_T_cryptoGKPwdHash,
		&ett_h225_aliasAddress_sequence,
		&ett_h225_AuthenticationMechanism_sequence_of,
/*eee*/
	};
	module_t *h225_module;

	proto_h225 = proto_register_protocol("H225", "H225", "h225");
	proto_register_field_array(proto_h225, hf, array_length(hf));
	proto_register_subtree_array(ett, array_length(ett));
	h225_module = prefs_register_protocol(proto_h225, NULL);
	prefs_register_bool_preference(h225_module, "reassembly",
		"Reassemble H.225 over TCP",
		"Whether the dissector should reassemble H.225 PDUs spanning multiple TCP segments",
		&h225_reassembly);
	register_dissector("h225", dissect_h225_H323UserInformation, proto_h225);

	nsp_object_dissector_table = register_dissector_table("h225.nsp.object", "H.225 NonStandardParameter (object)", FT_STRING, BASE_NONE);
	nsp_h221_dissector_table = register_dissector_table("h225.nsp.h221", "H.225 NonStandardParameter (h221)", FT_UINT32, BASE_HEX);
	tp_dissector_table = register_dissector_table("h225.tp", "H.225 TunnelledProtocol", FT_STRING, BASE_NONE);

	register_init_routine(&h225_init_routine);
	h225_tap = register_tap("h225");
}

void
proto_reg_handoff_h225(void)
{
	h225ras_handle=create_dissector_handle(dissect_h225_RasMessage, proto_h225);
	H323UserInformation_handle=create_dissector_handle(dissect_h225_H323UserInformation, proto_h225);

	h245_handle = find_dissector("h245");
	h245dg_handle = find_dissector("h245dg");
	h4501_handle = find_dissector("h4501");
	data_handle = find_dissector("data");

	dissector_add("udp.port", UDP_PORT_RAS1, h225ras_handle);
	dissector_add("udp.port", UDP_PORT_RAS2, h225ras_handle);
}


static void reset_h225_packet_info(h225_packet_info *pi)
{
	if(pi == NULL) {
		return;
	}

	pi->msg_type = H225_OTHERS;
	pi->msg_tag = -1;
	pi->reason = -1;
	pi->requestSeqNum = 0;
	memset(pi->guid,0,16);
	pi->is_duplicate = FALSE;
	pi->request_available = FALSE;
}

/*
	The following function contains the routines for RAS request/response matching.
	A RAS response matches with a request, if both messages have the same
	RequestSequenceNumber, belong to the same IP conversation and belong to the same
	RAS "category" (e.g. Admission, Registration).

	We use hashtables to access the lists of RAS calls (request/response pairs).
	We have one hashtable for each RAS category. The hashkeys consist of the
	non-unique 16-bit RequestSequenceNumber and values representing the conversation.

	In big capture files, we might get different requests with identical keys.
	These requests aren't necessarily duplicates. They might be valid new requests.
	At the moment we just use the timedelta between the last valid and the new request
	to decide if the new request is a duplicate or not. There might be better ways.
	Two thresholds are defined below.

	However the decision is made, another problem arises. We can't just add those
	requests to our hashtables. Instead we create lists of RAS calls with identical keys.
	The hashtables for RAS calls contain now pointers to the first RAS call in a list of
	RAS calls with identical keys.
	These lists aren't expected to contain more than 3 items and are usually single item
	lists. So we don't need an expensive but intelligent way to access these lists
	(e.g. hashtables). Just walk through such a list.
*/

#define THRESHOLD_REPEATED_RESPONDED_CALL 300
#define THRESHOLD_REPEATED_NOT_RESPONDED_CALL 1800

static void ras_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, h225_packet_info *pi)
{
	conversation_t* conversation = NULL;
	h225ras_call_info_key h225ras_call_key;
	h225ras_call_t *h225ras_call = NULL;
	nstime_t delta;
	guint msg_category;

	if(pi->msg_type == H225_RAS && pi->msg_tag < 21) {
		/* make RAS request/response matching only for tags from 0 to 20 for now */

		msg_category = pi->msg_tag / 3;
		if(pi->msg_tag % 3 == 0) {		/* Request Message */
			conversation = find_conversation(&pinfo->src,
				&pinfo->dst, pinfo->ptype, pinfo->srcport,
				pinfo->destport, 0);

			if (conversation == NULL) {
				/* It's not part of any conversation - create a new one. */
				conversation = conversation_new(&pinfo->src,
				    &pinfo->dst, pinfo->ptype, pinfo->srcport,
				    pinfo->destport, 0);

			}

			/* prepare the key data */
			h225ras_call_key.reqSeqNum = pi->requestSeqNum;
			h225ras_call_key.conversation = conversation;

			/* look up the request */
			h225ras_call = find_h225ras_call(&h225ras_call_key ,msg_category);

			if (h225ras_call != NULL) {
				/* We've seen requests with this reqSeqNum, with the same
				   source and destination, before - do we have
				   *this* request already? */
				/* Walk through list of ras requests with identical keys */
				do {
					if (pinfo->fd->num == h225ras_call->req_num) {
						/* We have seen this request before -> do nothing */
						break;
					}

					/* if end of list is reached, exit loop and decide if request is duplicate or not. */
					if (h225ras_call->next_call == NULL) {
						if ( (pinfo->fd->num > h225ras_call->rsp_num && h225ras_call->rsp_num != 0
						   && pinfo->fd->abs_secs > (guint) (h225ras_call->req_time.secs + THRESHOLD_REPEATED_RESPONDED_CALL) )
						   ||(pinfo->fd->num > h225ras_call->req_num && h225ras_call->rsp_num == 0
						   && pinfo->fd->abs_secs > (guint) (h225ras_call->req_time.secs + THRESHOLD_REPEATED_NOT_RESPONDED_CALL) ) )
						{
							/* if last request has been responded
							   and this request appears after last response (has bigger frame number)
							   and last request occured more than 300 seconds ago,
							   or if last request hasn't been responded
							   and this request appears after last request (has bigger frame number)
							   and last request occured more than 1800 seconds ago,
							   we decide that we have a new request */
							/* Append new ras call to list */
							h225ras_call = append_h225ras_call(h225ras_call, pinfo, pi->guid, msg_category);
						} else {
							/* No, so it's a duplicate request.
							   Mark it as such. */
							pi->is_duplicate = TRUE;
							proto_tree_add_uint_hidden(tree, hf_h225_ras_dup, tvb, 0,0, pi->requestSeqNum);
						}
						break;
					}
					h225ras_call = h225ras_call->next_call;
				} while (h225ras_call != NULL );
			}
			else {
				h225ras_call = new_h225ras_call(&h225ras_call_key, pinfo, pi->guid, msg_category);
			}

			/* add link to response frame, if available */
			if(h225ras_call->rsp_num != 0){
				proto_item *ti =
				proto_tree_add_uint_format(tree, hf_h225_ras_rsp_frame, tvb, 0, 0, h225ras_call->rsp_num,
					                           "The response to this request is in frame %u",
					                           h225ras_call->rsp_num);
				PROTO_ITEM_SET_GENERATED(ti);
			}

  		/* end of request message handling*/
		}
		else { 					/* Confirm or Reject Message */
			conversation = find_conversation(&pinfo->src,
    				&pinfo->dst, pinfo->ptype, pinfo->srcport,
  				pinfo->destport, 0);
  			if (conversation != NULL) {
				/* look only for matching request, if
				   matching conversation is available. */
				h225ras_call_key.reqSeqNum = pi->requestSeqNum;
				h225ras_call_key.conversation = conversation;
				h225ras_call = find_h225ras_call(&h225ras_call_key ,msg_category);
				if(h225ras_call) {
					/* find matching ras_call in list of ras calls with identical keys */
					do {
						if (pinfo->fd->num == h225ras_call->rsp_num) {
							/* We have seen this response before -> stop now with matching ras call */
							break;
						}

						/* Break when list end is reached */
						if(h225ras_call->next_call == NULL) {
							break;
						}
						h225ras_call = h225ras_call->next_call;
					} while (h225ras_call != NULL) ;

					/* if this is an ACF, ARJ or DCF, DRJ, give guid to tap and make it filterable */
					if (msg_category == 3 || msg_category == 5) {
						memcpy(pi->guid, h225ras_call->guid,16);
						proto_tree_add_bytes_hidden(tree, hf_h225_guid, tvb, 0, 16, pi->guid);
					}

					if (h225ras_call->rsp_num == 0) {
						/* We have not yet seen a response to that call, so
						   this must be the first response; remember its
						   frame number. */
						h225ras_call->rsp_num = pinfo->fd->num;
					}
					else {
						/* We have seen a response to this call - but was it
						   *this* response? */
						if (h225ras_call->rsp_num != pinfo->fd->num) {
							/* No, so it's a duplicate response.
							   Mark it as such. */
							pi->is_duplicate = TRUE;
							proto_tree_add_uint_hidden(tree, hf_h225_ras_dup, tvb, 0,0, pi->requestSeqNum);
						}
					}

					if(h225ras_call->req_num != 0){
						proto_item *ti;
						h225ras_call->responded = TRUE;
						pi->request_available = TRUE;

						/* Indicate the frame to which this is a reply. */
						ti = proto_tree_add_uint_format(tree, hf_h225_ras_req_frame, tvb, 0, 0, h225ras_call->req_num,
							"This is a response to a request in frame %u", h225ras_call->req_num);
						PROTO_ITEM_SET_GENERATED(ti);

						/* Calculate RAS Service Response Time */
						delta.secs= pinfo->fd->abs_secs-h225ras_call->req_time.secs;
						delta.nsecs=pinfo->fd->abs_usecs*1000-h225ras_call->req_time.nsecs;
						if(delta.nsecs<0){
							delta.nsecs+=1000000000;
							delta.secs--;
						}
						pi->delta_time.secs = delta.secs; /* give it to tap */
						pi->delta_time.nsecs = delta.nsecs;

						/* display Ras Service Response Time and make it filterable */
						ti = proto_tree_add_time(tree, hf_h225_ras_deltatime, tvb, 0, 0, &(pi->delta_time));
						PROTO_ITEM_SET_GENERATED(ti);
					}
				}
			}
		}
	}
}
