/* Generated by Jing Min Zhao's ASN.1 parser, Apr 20 2006
 *
 * Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
 *
 * This source code is licensed under General Public License version 2.
 */

typedef struct TransportAddress_ipAddress {	/* SEQUENCE */
	int options;		/* No use */
	unsigned ip;
} TransportAddress_ipAddress;

typedef struct TransportAddress_ip6Address {	/* SEQUENCE */
	int options;		/* No use */
	unsigned ip6;
} TransportAddress_ip6Address;

typedef struct TransportAddress {	/* CHOICE */
	enum {
		eTransportAddress_ipAddress,
		eTransportAddress_ipSourceRoute,
		eTransportAddress_ipxAddress,
		eTransportAddress_ip6Address,
		eTransportAddress_netBios,
		eTransportAddress_nsap,
		eTransportAddress_nonStandardAddress,
	} choice;
	union {
		TransportAddress_ipAddress ipAddress;
		TransportAddress_ip6Address ip6Address;
	};
} TransportAddress;

typedef struct DataProtocolCapability {	/* CHOICE */
	enum {
		eDataProtocolCapability_nonStandard,
		eDataProtocolCapability_v14buffered,
		eDataProtocolCapability_v42lapm,
		eDataProtocolCapability_hdlcFrameTunnelling,
		eDataProtocolCapability_h310SeparateVCStack,
		eDataProtocolCapability_h310SingleVCStack,
		eDataProtocolCapability_transparent,
		eDataProtocolCapability_segmentationAndReassembly,
		eDataProtocolCapability_hdlcFrameTunnelingwSAR,
		eDataProtocolCapability_v120,
		eDataProtocolCapability_separateLANStack,
		eDataProtocolCapability_v76wCompression,
		eDataProtocolCapability_tcp,
		eDataProtocolCapability_udp,
	} choice;
} DataProtocolCapability;

typedef struct DataApplicationCapability_application {	/* CHOICE */
	enum {
		eDataApplicationCapability_application_nonStandard,
		eDataApplicationCapability_application_t120,
		eDataApplicationCapability_application_dsm_cc,
		eDataApplicationCapability_application_userData,
		eDataApplicationCapability_application_t84,
		eDataApplicationCapability_application_t434,
		eDataApplicationCapability_application_h224,
		eDataApplicationCapability_application_nlpid,
		eDataApplicationCapability_application_dsvdControl,
		eDataApplicationCapability_application_h222DataPartitioning,
		eDataApplicationCapability_application_t30fax,
		eDataApplicationCapability_application_t140,
		eDataApplicationCapability_application_t38fax,
		eDataApplicationCapability_application_genericDataCapability,
	} choice;
	union {
		DataProtocolCapability t120;
	};
} DataApplicationCapability_application;

typedef struct DataApplicationCapability {	/* SEQUENCE */
	int options;		/* No use */
	DataApplicationCapability_application application;
} DataApplicationCapability;

typedef struct DataType {	/* CHOICE */
	enum {
		eDataType_nonStandard,
		eDataType_nullData,
		eDataType_videoData,
		eDataType_audioData,
		eDataType_data,
		eDataType_encryptionData,
		eDataType_h235Control,
		eDataType_h235Media,
		eDataType_multiplexedStream,
	} choice;
	union {
		DataApplicationCapability data;
	};
} DataType;

typedef struct UnicastAddress_iPAddress {	/* SEQUENCE */
	int options;		/* No use */
	unsigned network;
} UnicastAddress_iPAddress;

typedef struct UnicastAddress_iP6Address {	/* SEQUENCE */
	int options;		/* No use */
	unsigned network;
} UnicastAddress_iP6Address;

typedef struct UnicastAddress {	/* CHOICE */
	enum {
		eUnicastAddress_iPAddress,
		eUnicastAddress_iPXAddress,
		eUnicastAddress_iP6Address,
		eUnicastAddress_netBios,
		eUnicastAddress_iPSourceRouteAddress,
		eUnicastAddress_nsap,
		eUnicastAddress_nonStandardAddress,
	} choice;
	union {
		UnicastAddress_iPAddress iPAddress;
		UnicastAddress_iP6Address iP6Address;
	};
} UnicastAddress;

typedef struct H245_TransportAddress {	/* CHOICE */
	enum {
		eH245_TransportAddress_unicastAddress,
		eH245_TransportAddress_multicastAddress,
	} choice;
	union {
		UnicastAddress unicastAddress;
	};
} H245_TransportAddress;

typedef struct H2250LogicalChannelParameters {	/* SEQUENCE */
	enum {
		eH2250LogicalChannelParameters_nonStandard = (1 << 31),
		eH2250LogicalChannelParameters_associatedSessionID =
		    (1 << 30),
		eH2250LogicalChannelParameters_mediaChannel = (1 << 29),
		eH2250LogicalChannelParameters_mediaGuaranteedDelivery =
		    (1 << 28),
		eH2250LogicalChannelParameters_mediaControlChannel =
		    (1 << 27),
		eH2250LogicalChannelParameters_mediaControlGuaranteedDelivery
		    = (1 << 26),
		eH2250LogicalChannelParameters_silenceSuppression = (1 << 25),
		eH2250LogicalChannelParameters_destination = (1 << 24),
		eH2250LogicalChannelParameters_dynamicRTPPayloadType =
		    (1 << 23),
		eH2250LogicalChannelParameters_mediaPacketization = (1 << 22),
		eH2250LogicalChannelParameters_transportCapability =
		    (1 << 21),
		eH2250LogicalChannelParameters_redundancyEncoding = (1 << 20),
		eH2250LogicalChannelParameters_source = (1 << 19),
	} options;
	H245_TransportAddress mediaChannel;
	H245_TransportAddress mediaControlChannel;
} H2250LogicalChannelParameters;

typedef struct OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters {	/* CHOICE */
	enum {
		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters,
		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters,
		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters,
		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
		eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_none,
	} choice;
	union {
		H2250LogicalChannelParameters h2250LogicalChannelParameters;
	};
} OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters;

typedef struct OpenLogicalChannel_forwardLogicalChannelParameters {	/* SEQUENCE */
	enum {
		eOpenLogicalChannel_forwardLogicalChannelParameters_portNumber
		    = (1 << 31),
		eOpenLogicalChannel_forwardLogicalChannelParameters_forwardLogicalChannelDependency
		    = (1 << 30),
		eOpenLogicalChannel_forwardLogicalChannelParameters_replacementFor
		    = (1 << 29),
	} options;
	DataType dataType;
	OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters
	    multiplexParameters;
} OpenLogicalChannel_forwardLogicalChannelParameters;

typedef struct OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters {	/* CHOICE */
	enum {
		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters,
		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters,
		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
	} choice;
	union {
		H2250LogicalChannelParameters h2250LogicalChannelParameters;
	};
} OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters;

typedef struct OpenLogicalChannel_reverseLogicalChannelParameters {	/* SEQUENCE */
	enum {
		eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters
		    = (1 << 31),
		eOpenLogicalChannel_reverseLogicalChannelParameters_reverseLogicalChannelDependency
		    = (1 << 30),
		eOpenLogicalChannel_reverseLogicalChannelParameters_replacementFor
		    = (1 << 29),
	} options;
	OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters
	    multiplexParameters;
} OpenLogicalChannel_reverseLogicalChannelParameters;

typedef struct NetworkAccessParameters_networkAddress {	/* CHOICE */
	enum {
		eNetworkAccessParameters_networkAddress_q2931Address,
		eNetworkAccessParameters_networkAddress_e164Address,
		eNetworkAccessParameters_networkAddress_localAreaAddress,
	} choice;
	union {
		H245_TransportAddress localAreaAddress;
	};
} NetworkAccessParameters_networkAddress;

typedef struct NetworkAccessParameters {	/* SEQUENCE */
	enum {
		eNetworkAccessParameters_distribution = (1 << 31),
		eNetworkAccessParameters_externalReference = (1 << 30),
		eNetworkAccessParameters_t120SetupProcedure = (1 << 29),
	} options;
	NetworkAccessParameters_networkAddress networkAddress;
} NetworkAccessParameters;

typedef struct OpenLogicalChannel {	/* SEQUENCE */
	enum {
		eOpenLogicalChannel_reverseLogicalChannelParameters =
		    (1 << 31),
		eOpenLogicalChannel_separateStack = (1 << 30),
		eOpenLogicalChannel_encryptionSync = (1 << 29),
	} options;
	OpenLogicalChannel_forwardLogicalChannelParameters
	    forwardLogicalChannelParameters;
	OpenLogicalChannel_reverseLogicalChannelParameters
	    reverseLogicalChannelParameters;
	NetworkAccessParameters separateStack;
} OpenLogicalChannel;

typedef struct Setup_UUIE_fastStart {	/* SEQUENCE OF */
	int count;
	OpenLogicalChannel item[30];
} Setup_UUIE_fastStart;

typedef struct Setup_UUIE {	/* SEQUENCE */
	enum {
		eSetup_UUIE_h245Address = (1 << 31),
		eSetup_UUIE_sourceAddress = (1 << 30),
		eSetup_UUIE_destinationAddress = (1 << 29),
		eSetup_UUIE_destCallSignalAddress = (1 << 28),
		eSetup_UUIE_destExtraCallInfo = (1 << 27),
		eSetup_UUIE_destExtraCRV = (1 << 26),
		eSetup_UUIE_callServices = (1 << 25),
		eSetup_UUIE_sourceCallSignalAddress = (1 << 24),
		eSetup_UUIE_remoteExtensionAddress = (1 << 23),
		eSetup_UUIE_callIdentifier = (1 << 22),
		eSetup_UUIE_h245SecurityCapability = (1 << 21),
		eSetup_UUIE_tokens = (1 << 20),
		eSetup_UUIE_cryptoTokens = (1 << 19),
		eSetup_UUIE_fastStart = (1 << 18),
		eSetup_UUIE_mediaWaitForConnect = (1 << 17),
		eSetup_UUIE_canOverlapSend = (1 << 16),
		eSetup_UUIE_endpointIdentifier = (1 << 15),
		eSetup_UUIE_multipleCalls = (1 << 14),
		eSetup_UUIE_maintainConnection = (1 << 13),
		eSetup_UUIE_connectionParameters = (1 << 12),
		eSetup_UUIE_language = (1 << 11),
		eSetup_UUIE_presentationIndicator = (1 << 10),
		eSetup_UUIE_screeningIndicator = (1 << 9),
		eSetup_UUIE_serviceControl = (1 << 8),
		eSetup_UUIE_symmetricOperationRequired = (1 << 7),
		eSetup_UUIE_capacity = (1 << 6),
		eSetup_UUIE_circuitInfo = (1 << 5),
		eSetup_UUIE_desiredProtocols = (1 << 4),
		eSetup_UUIE_neededFeatures = (1 << 3),
		eSetup_UUIE_desiredFeatures = (1 << 2),
		eSetup_UUIE_supportedFeatures = (1 << 1),
		eSetup_UUIE_parallelH245Control = (1 << 0),
	} options;
	TransportAddress h245Address;
	TransportAddress destCallSignalAddress;
	TransportAddress sourceCallSignalAddress;
	Setup_UUIE_fastStart fastStart;
} Setup_UUIE;

typedef struct CallProceeding_UUIE_fastStart {	/* SEQUENCE OF */
	int count;
	OpenLogicalChannel item[30];
} CallProceeding_UUIE_fastStart;

typedef struct CallProceeding_UUIE {	/* SEQUENCE */
	enum {
		eCallProceeding_UUIE_h245Address = (1 << 31),
		eCallProceeding_UUIE_callIdentifier = (1 << 30),
		eCallProceeding_UUIE_h245SecurityMode = (1 << 29),
		eCallProceeding_UUIE_tokens = (1 << 28),
		eCallProceeding_UUIE_cryptoTokens = (1 << 27),
		eCallProceeding_UUIE_fastStart = (1 << 26),
		eCallProceeding_UUIE_multipleCalls = (1 << 25),
		eCallProceeding_UUIE_maintainConnection = (1 << 24),
		eCallProceeding_UUIE_fastConnectRefused = (1 << 23),
		eCallProceeding_UUIE_featureSet = (1 << 22),
	} options;
	TransportAddress h245Address;
	CallProceeding_UUIE_fastStart fastStart;
} CallProceeding_UUIE;

typedef struct Connect_UUIE_fastStart {	/* SEQUENCE OF */
	int count;
	OpenLogicalChannel item[30];
} Connect_UUIE_fastStart;

typedef struct Connect_UUIE {	/* SEQUENCE */
	enum {
		eConnect_UUIE_h245Address = (1 << 31),
		eConnect_UUIE_callIdentifier = (1 << 30),
		eConnect_UUIE_h245SecurityMode = (1 << 29),
		eConnect_UUIE_tokens = (1 << 28),
		eConnect_UUIE_cryptoTokens = (1 << 27),
		eConnect_UUIE_fastStart = (1 << 26),
		eConnect_UUIE_multipleCalls = (1 << 25),
		eConnect_UUIE_maintainConnection = (1 << 24),
		eConnect_UUIE_language = (1 << 23),
		eConnect_UUIE_connectedAddress = (1 << 22),
		eConnect_UUIE_presentationIndicator = (1 << 21),
		eConnect_UUIE_screeningIndicator = (1 << 20),
		eConnect_UUIE_fastConnectRefused = (1 << 19),
		eConnect_UUIE_serviceControl = (1 << 18),
		eConnect_UUIE_capacity = (1 << 17),
		eConnect_UUIE_featureSet = (1 << 16),
	} options;
	TransportAddress h245Address;
	Connect_UUIE_fastStart fastStart;
} Connect_UUIE;

typedef struct Alerting_UUIE_fastStart {	/* SEQUENCE OF */
	int count;
	OpenLogicalChannel item[30];
} Alerting_UUIE_fastStart;

typedef struct Alerting_UUIE {	/* SEQUENCE */
	enum {
		eAlerting_UUIE_h245Address = (1 << 31),
		eAlerting_UUIE_callIdentifier = (1 << 30),
		eAlerting_UUIE_h245SecurityMode = (1 << 29),
		eAlerting_UUIE_tokens = (1 << 28),
		eAlerting_UUIE_cryptoTokens = (1 << 27),
		eAlerting_UUIE_fastStart = (1 << 26),
		eAlerting_UUIE_multipleCalls = (1 << 25),
		eAlerting_UUIE_maintainConnection = (1 << 24),
		eAlerting_UUIE_alertingAddress = (1 << 23),
		eAlerting_UUIE_presentationIndicator = (1 << 22),
		eAlerting_UUIE_screeningIndicator = (1 << 21),
		eAlerting_UUIE_fastConnectRefused = (1 << 20),
		eAlerting_UUIE_serviceControl = (1 << 19),
		eAlerting_UUIE_capacity = (1 << 18),
		eAlerting_UUIE_featureSet = (1 << 17),
	} options;
	TransportAddress h245Address;
	Alerting_UUIE_fastStart fastStart;
} Alerting_UUIE;

typedef struct Information_UUIE_fastStart {	/* SEQUENCE OF */
	int count;
	OpenLogicalChannel item[30];
} Information_UUIE_fastStart;

typedef struct Information_UUIE {	/* SEQUENCE */
	enum {
		eInformation_UUIE_callIdentifier = (1 << 31),
		eInformation_UUIE_tokens = (1 << 30),
		eInformation_UUIE_cryptoTokens = (1 << 29),
		eInformation_UUIE_fastStart = (1 << 28),
		eInformation_UUIE_fastConnectRefused = (1 << 27),
		eInformation_UUIE_circuitInfo = (1 << 26),
	} options;
	Information_UUIE_fastStart fastStart;
} Information_UUIE;

typedef struct FacilityReason {	/* CHOICE */
	enum {
		eFacilityReason_routeCallToGatekeeper,
		eFacilityReason_callForwarded,
		eFacilityReason_routeCallToMC,
		eFacilityReason_undefinedReason,
		eFacilityReason_conferenceListChoice,
		eFacilityReason_startH245,
		eFacilityReason_noH245,
		eFacilityReason_newTokens,
		eFacilityReason_featureSetUpdate,
		eFacilityReason_forwardedElements,
		eFacilityReason_transportedInformation,
	} choice;
} FacilityReason;

typedef struct Facility_UUIE_fastStart {	/* SEQUENCE OF */
	int count;
	OpenLogicalChannel item[30];
} Facility_UUIE_fastStart;

typedef struct Facility_UUIE {	/* SEQUENCE */
	enum {
		eFacility_UUIE_alternativeAddress = (1 << 31),
		eFacility_UUIE_alternativeAliasAddress = (1 << 30),
		eFacility_UUIE_conferenceID = (1 << 29),
		eFacility_UUIE_callIdentifier = (1 << 28),
		eFacility_UUIE_destExtraCallInfo = (1 << 27),
		eFacility_UUIE_remoteExtensionAddress = (1 << 26),
		eFacility_UUIE_tokens = (1 << 25),
		eFacility_UUIE_cryptoTokens = (1 << 24),
		eFacility_UUIE_conferences = (1 << 23),
		eFacility_UUIE_h245Address = (1 << 22),
		eFacility_UUIE_fastStart = (1 << 21),
		eFacility_UUIE_multipleCalls = (1 << 20),
		eFacility_UUIE_maintainConnection = (1 << 19),
		eFacility_UUIE_fastConnectRefused = (1 << 18),
		eFacility_UUIE_serviceControl = (1 << 17),
		eFacility_UUIE_circuitInfo = (1 << 16),
		eFacility_UUIE_featureSet = (1 << 15),
		eFacility_UUIE_destinationInfo = (1 << 14),
		eFacility_UUIE_h245SecurityMode = (1 << 13),
	} options;
	TransportAddress alternativeAddress;
	FacilityReason reason;
	TransportAddress h245Address;
	Facility_UUIE_fastStart fastStart;
} Facility_UUIE;

typedef struct Progress_UUIE_fastStart {	/* SEQUENCE OF */
	int count;
	OpenLogicalChannel item[30];
} Progress_UUIE_fastStart;

typedef struct Progress_UUIE {	/* SEQUENCE */
	enum {
		eProgress_UUIE_h245Address = (1 << 31),
		eProgress_UUIE_h245SecurityMode = (1 << 30),
		eProgress_UUIE_tokens = (1 << 29),
		eProgress_UUIE_cryptoTokens = (1 << 28),
		eProgress_UUIE_fastStart = (1 << 27),
		eProgress_UUIE_multipleCalls = (1 << 26),
		eProgress_UUIE_maintainConnection = (1 << 25),
		eProgress_UUIE_fastConnectRefused = (1 << 24),
	} options;
	TransportAddress h245Address;
	Progress_UUIE_fastStart fastStart;
} Progress_UUIE;

typedef struct H323_UU_PDU_h323_message_body {	/* CHOICE */
	enum {
		eH323_UU_PDU_h323_message_body_setup,
		eH323_UU_PDU_h323_message_body_callProceeding,
		eH323_UU_PDU_h323_message_body_connect,
		eH323_UU_PDU_h323_message_body_alerting,
		eH323_UU_PDU_h323_message_body_information,
		eH323_UU_PDU_h323_message_body_releaseComplete,
		eH323_UU_PDU_h323_message_body_facility,
		eH323_UU_PDU_h323_message_body_progress,
		eH323_UU_PDU_h323_message_body_empty,
		eH323_UU_PDU_h323_message_body_status,
		eH323_UU_PDU_h323_message_body_statusInquiry,
		eH323_UU_PDU_h323_message_body_setupAcknowledge,
		eH323_UU_PDU_h323_message_body_notify,
	} choice;
	union {
		Setup_UUIE setup;
		CallProceeding_UUIE callProceeding;
		Connect_UUIE connect;
		Alerting_UUIE alerting;
		Information_UUIE information;
		Facility_UUIE facility;
		Progress_UUIE progress;
	};
} H323_UU_PDU_h323_message_body;

typedef struct RequestMessage {	/* CHOICE */
	enum {
		eRequestMessage_nonStandard,
		eRequestMessage_masterSlaveDetermination,
		eRequestMessage_terminalCapabilitySet,
		eRequestMessage_openLogicalChannel,
		eRequestMessage_closeLogicalChannel,
		eRequestMessage_requestChannelClose,
		eRequestMessage_multiplexEntrySend,
		eRequestMessage_requestMultiplexEntry,
		eRequestMessage_requestMode,
		eRequestMessage_roundTripDelayRequest,
		eRequestMessage_maintenanceLoopRequest,
		eRequestMessage_communicationModeRequest,
		eRequestMessage_conferenceRequest,
		eRequestMessage_multilinkRequest,
		eRequestMessage_logicalChannelRateRequest,
	} choice;
	union {
		OpenLogicalChannel openLogicalChannel;
	};
} RequestMessage;

typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters {	/* CHOICE */
	enum {
		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters,
		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
	} choice;
	union {
		H2250LogicalChannelParameters h2250LogicalChannelParameters;
	};
} OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters;

typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters {	/* SEQUENCE */
	enum {
		eOpenLogicalChannelAck_reverseLogicalChannelParameters_portNumber
		    = (1 << 31),
		eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters
		    = (1 << 30),
		eOpenLogicalChannelAck_reverseLogicalChannelParameters_replacementFor
		    = (1 << 29),
	} options;
	OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters
	    multiplexParameters;
} OpenLogicalChannelAck_reverseLogicalChannelParameters;

typedef struct H2250LogicalChannelAckParameters {	/* SEQUENCE */
	enum {
		eH2250LogicalChannelAckParameters_nonStandard = (1 << 31),
		eH2250LogicalChannelAckParameters_sessionID = (1 << 30),
		eH2250LogicalChannelAckParameters_mediaChannel = (1 << 29),
		eH2250LogicalChannelAckParameters_mediaControlChannel =
		    (1 << 28),
		eH2250LogicalChannelAckParameters_dynamicRTPPayloadType =
		    (1 << 27),
		eH2250LogicalChannelAckParameters_flowControlToZero =
		    (1 << 26),
		eH2250LogicalChannelAckParameters_portNumber = (1 << 25),
	} options;
	H245_TransportAddress mediaChannel;
	H245_TransportAddress mediaControlChannel;
} H2250LogicalChannelAckParameters;

typedef struct OpenLogicalChannelAck_forwardMultiplexAckParameters {	/* CHOICE */
	enum {
		eOpenLogicalChannelAck_forwardMultiplexAckParameters_h2250LogicalChannelAckParameters,
	} choice;
	union {
		H2250LogicalChannelAckParameters
		    h2250LogicalChannelAckParameters;
	};
} OpenLogicalChannelAck_forwardMultiplexAckParameters;

typedef struct OpenLogicalChannelAck {	/* SEQUENCE */
	enum {
		eOpenLogicalChannelAck_reverseLogicalChannelParameters =
		    (1 << 31),
		eOpenLogicalChannelAck_separateStack = (1 << 30),
		eOpenLogicalChannelAck_forwardMultiplexAckParameters =
		    (1 << 29),
		eOpenLogicalChannelAck_encryptionSync = (1 << 28),
	} options;
	OpenLogicalChannelAck_reverseLogicalChannelParameters
	    reverseLogicalChannelParameters;
	OpenLogicalChannelAck_forwardMultiplexAckParameters
	    forwardMultiplexAckParameters;
} OpenLogicalChannelAck;

typedef struct ResponseMessage {	/* CHOICE */
	enum {
		eResponseMessage_nonStandard,
		eResponseMessage_masterSlaveDeterminationAck,
		eResponseMessage_masterSlaveDeterminationReject,
		eResponseMessage_terminalCapabilitySetAck,
		eResponseMessage_terminalCapabilitySetReject,
		eResponseMessage_openLogicalChannelAck,
		eResponseMessage_openLogicalChannelReject,
		eResponseMessage_closeLogicalChannelAck,
		eResponseMessage_requestChannelCloseAck,
		eResponseMessage_requestChannelCloseReject,
		eResponseMessage_multiplexEntrySendAck,
		eResponseMessage_multiplexEntrySendReject,
		eResponseMessage_requestMultiplexEntryAck,
		eResponseMessage_requestMultiplexEntryReject,
		eResponseMessage_requestModeAck,
		eResponseMessage_requestModeReject,
		eResponseMessage_roundTripDelayResponse,
		eResponseMessage_maintenanceLoopAck,
		eResponseMessage_maintenanceLoopReject,
		eResponseMessage_communicationModeResponse,
		eResponseMessage_conferenceResponse,
		eResponseMessage_multilinkResponse,
		eResponseMessage_logicalChannelRateAcknowledge,
		eResponseMessage_logicalChannelRateReject,
	} choice;
	union {
		OpenLogicalChannelAck openLogicalChannelAck;
	};
} ResponseMessage;

typedef struct MultimediaSystemControlMessage {	/* CHOICE */
	enum {
		eMultimediaSystemControlMessage_request,
		eMultimediaSystemControlMessage_response,
		eMultimediaSystemControlMessage_command,
		eMultimediaSystemControlMessage_indication,
	} choice;
	union {
		RequestMessage request;
		ResponseMessage response;
	};
} MultimediaSystemControlMessage;

typedef struct H323_UU_PDU_h245Control {	/* SEQUENCE OF */
	int count;
	MultimediaSystemControlMessage item[4];
} H323_UU_PDU_h245Control;

typedef struct H323_UU_PDU {	/* SEQUENCE */
	enum {
		eH323_UU_PDU_nonStandardData = (1 << 31),
		eH323_UU_PDU_h4501SupplementaryService = (1 << 30),
		eH323_UU_PDU_h245Tunneling = (1 << 29),
		eH323_UU_PDU_h245Control = (1 << 28),
		eH323_UU_PDU_nonStandardControl = (1 << 27),
		eH323_UU_PDU_callLinkage = (1 << 26),
		eH323_UU_PDU_tunnelledSignallingMessage = (1 << 25),
		eH323_UU_PDU_provisionalRespToH245Tunneling = (1 << 24),
		eH323_UU_PDU_stimulusControl = (1 << 23),
		eH323_UU_PDU_genericData = (1 << 22),
	} options;
	H323_UU_PDU_h323_message_body h323_message_body;
	H323_UU_PDU_h245Control h245Control;
} H323_UU_PDU;

typedef struct H323_UserInformation {	/* SEQUENCE */
	enum {
		eH323_UserInformation_user_data = (1 << 31),
	} options;
	H323_UU_PDU h323_uu_pdu;
} H323_UserInformation;

typedef struct GatekeeperRequest {	/* SEQUENCE */
	enum {
		eGatekeeperRequest_nonStandardData = (1 << 31),
		eGatekeeperRequest_gatekeeperIdentifier = (1 << 30),
		eGatekeeperRequest_callServices = (1 << 29),
		eGatekeeperRequest_endpointAlias = (1 << 28),
		eGatekeeperRequest_alternateEndpoints = (1 << 27),
		eGatekeeperRequest_tokens = (1 << 26),
		eGatekeeperRequest_cryptoTokens = (1 << 25),
		eGatekeeperRequest_authenticationCapability = (1 << 24),
		eGatekeeperRequest_algorithmOIDs = (1 << 23),
		eGatekeeperRequest_integrity = (1 << 22),
		eGatekeeperRequest_integrityCheckValue = (1 << 21),
		eGatekeeperRequest_supportsAltGK = (1 << 20),
		eGatekeeperRequest_featureSet = (1 << 19),
		eGatekeeperRequest_genericData = (1 << 18),
	} options;
	TransportAddress rasAddress;
} GatekeeperRequest;

typedef struct GatekeeperConfirm {	/* SEQUENCE */
	enum {
		eGatekeeperConfirm_nonStandardData = (1 << 31),
		eGatekeeperConfirm_gatekeeperIdentifier = (1 << 30),
		eGatekeeperConfirm_alternateGatekeeper = (1 << 29),
		eGatekeeperConfirm_authenticationMode = (1 << 28),
		eGatekeeperConfirm_tokens = (1 << 27),
		eGatekeeperConfirm_cryptoTokens = (1 << 26),
		eGatekeeperConfirm_algorithmOID = (1 << 25),
		eGatekeeperConfirm_integrity = (1 << 24),
		eGatekeeperConfirm_integrityCheckValue = (1 << 23),
		eGatekeeperConfirm_featureSet = (1 << 22),
		eGatekeeperConfirm_genericData = (1 << 21),
	} options;
	TransportAddress rasAddress;
} GatekeeperConfirm;

typedef struct RegistrationRequest_callSignalAddress {	/* SEQUENCE OF */
	int count;
	TransportAddress item[10];
} RegistrationRequest_callSignalAddress;

typedef struct RegistrationRequest_rasAddress {	/* SEQUENCE OF */
	int count;
	TransportAddress item[10];
} RegistrationRequest_rasAddress;

typedef struct RegistrationRequest {	/* SEQUENCE */
	enum {
		eRegistrationRequest_nonStandardData = (1 << 31),
		eRegistrationRequest_terminalAlias = (1 << 30),
		eRegistrationRequest_gatekeeperIdentifier = (1 << 29),
		eRegistrationRequest_alternateEndpoints = (1 << 28),
		eRegistrationRequest_timeToLive = (1 << 27),
		eRegistrationRequest_tokens = (1 << 26),
		eRegistrationRequest_cryptoTokens = (1 << 25),
		eRegistrationRequest_integrityCheckValue = (1 << 24),
		eRegistrationRequest_keepAlive = (1 << 23),
		eRegistrationRequest_endpointIdentifier = (1 << 22),
		eRegistrationRequest_willSupplyUUIEs = (1 << 21),
		eRegistrationRequest_maintainConnection = (1 << 20),
		eRegistrationRequest_alternateTransportAddresses = (1 << 19),
		eRegistrationRequest_additiveRegistration = (1 << 18),
		eRegistrationRequest_terminalAliasPattern = (1 << 17),
		eRegistrationRequest_supportsAltGK = (1 << 16),
		eRegistrationRequest_usageReportingCapability = (1 << 15),
		eRegistrationRequest_multipleCalls = (1 << 14),
		eRegistrationRequest_supportedH248Packages = (1 << 13),
		eRegistrationRequest_callCreditCapability = (1 << 12),
		eRegistrationRequest_capacityReportingCapability = (1 << 11),
		eRegistrationRequest_capacity = (1 << 10),
		eRegistrationRequest_featureSet = (1 << 9),
		eRegistrationRequest_genericData = (1 << 8),
	} options;
	RegistrationRequest_callSignalAddress callSignalAddress;
	RegistrationRequest_rasAddress rasAddress;
	unsigned timeToLive;
} RegistrationRequest;

typedef struct RegistrationConfirm_callSignalAddress {	/* SEQUENCE OF */
	int count;
	TransportAddress item[10];
} RegistrationConfirm_callSignalAddress;

typedef struct RegistrationConfirm {	/* SEQUENCE */
	enum {
		eRegistrationConfirm_nonStandardData = (1 << 31),
		eRegistrationConfirm_terminalAlias = (1 << 30),
		eRegistrationConfirm_gatekeeperIdentifier = (1 << 29),
		eRegistrationConfirm_alternateGatekeeper = (1 << 28),
		eRegistrationConfirm_timeToLive = (1 << 27),
		eRegistrationConfirm_tokens = (1 << 26),
		eRegistrationConfirm_cryptoTokens = (1 << 25),
		eRegistrationConfirm_integrityCheckValue = (1 << 24),
		eRegistrationConfirm_willRespondToIRR = (1 << 23),
		eRegistrationConfirm_preGrantedARQ = (1 << 22),
		eRegistrationConfirm_maintainConnection = (1 << 21),
		eRegistrationConfirm_serviceControl = (1 << 20),
		eRegistrationConfirm_supportsAdditiveRegistration = (1 << 19),
		eRegistrationConfirm_terminalAliasPattern = (1 << 18),
		eRegistrationConfirm_supportedPrefixes = (1 << 17),
		eRegistrationConfirm_usageSpec = (1 << 16),
		eRegistrationConfirm_featureServerAlias = (1 << 15),
		eRegistrationConfirm_capacityReportingSpec = (1 << 14),
		eRegistrationConfirm_featureSet = (1 << 13),
		eRegistrationConfirm_genericData = (1 << 12),
	} options;
	RegistrationConfirm_callSignalAddress callSignalAddress;
	unsigned timeToLive;
} RegistrationConfirm;

typedef struct UnregistrationRequest_callSignalAddress {	/* SEQUENCE OF */
	int count;
	TransportAddress item[10];
} UnregistrationRequest_callSignalAddress;

typedef struct UnregistrationRequest {	/* SEQUENCE */
	enum {
		eUnregistrationRequest_endpointAlias = (1 << 31),
		eUnregistrationRequest_nonStandardData = (1 << 30),
		eUnregistrationRequest_endpointIdentifier = (1 << 29),
		eUnregistrationRequest_alternateEndpoints = (1 << 28),
		eUnregistrationRequest_gatekeeperIdentifier = (1 << 27),
		eUnregistrationRequest_tokens = (1 << 26),
		eUnregistrationRequest_cryptoTokens = (1 << 25),
		eUnregistrationRequest_integrityCheckValue = (1 << 24),
		eUnregistrationRequest_reason = (1 << 23),
		eUnregistrationRequest_endpointAliasPattern = (1 << 22),
		eUnregistrationRequest_supportedPrefixes = (1 << 21),
		eUnregistrationRequest_alternateGatekeeper = (1 << 20),
		eUnregistrationRequest_genericData = (1 << 19),
	} options;
	UnregistrationRequest_callSignalAddress callSignalAddress;
} UnregistrationRequest;

typedef struct AdmissionRequest {	/* SEQUENCE */
	enum {
		eAdmissionRequest_callModel = (1 << 31),
		eAdmissionRequest_destinationInfo = (1 << 30),
		eAdmissionRequest_destCallSignalAddress = (1 << 29),
		eAdmissionRequest_destExtraCallInfo = (1 << 28),
		eAdmissionRequest_srcCallSignalAddress = (1 << 27),
		eAdmissionRequest_nonStandardData = (1 << 26),
		eAdmissionRequest_callServices = (1 << 25),
		eAdmissionRequest_canMapAlias = (1 << 24),
		eAdmissionRequest_callIdentifier = (1 << 23),
		eAdmissionRequest_srcAlternatives = (1 << 22),
		eAdmissionRequest_destAlternatives = (1 << 21),
		eAdmissionRequest_gatekeeperIdentifier = (1 << 20),
		eAdmissionRequest_tokens = (1 << 19),
		eAdmissionRequest_cryptoTokens = (1 << 18),
		eAdmissionRequest_integrityCheckValue = (1 << 17),
		eAdmissionRequest_transportQOS = (1 << 16),
		eAdmissionRequest_willSupplyUUIEs = (1 << 15),
		eAdmissionRequest_callLinkage = (1 << 14),
		eAdmissionRequest_gatewayDataRate = (1 << 13),
		eAdmissionRequest_capacity = (1 << 12),
		eAdmissionRequest_circuitInfo = (1 << 11),
		eAdmissionRequest_desiredProtocols = (1 << 10),
		eAdmissionRequest_desiredTunnelledProtocol = (1 << 9),
		eAdmissionRequest_featureSet = (1 << 8),
		eAdmissionRequest_genericData = (1 << 7),
	} options;
	TransportAddress destCallSignalAddress;
	TransportAddress srcCallSignalAddress;
} AdmissionRequest;

typedef struct AdmissionConfirm {	/* SEQUENCE */
	enum {
		eAdmissionConfirm_irrFrequency = (1 << 31),
		eAdmissionConfirm_nonStandardData = (1 << 30),
		eAdmissionConfirm_destinationInfo = (1 << 29),
		eAdmissionConfirm_destExtraCallInfo = (1 << 28),
		eAdmissionConfirm_destinationType = (1 << 27),
		eAdmissionConfirm_remoteExtensionAddress = (1 << 26),
		eAdmissionConfirm_alternateEndpoints = (1 << 25),
		eAdmissionConfirm_tokens = (1 << 24),
		eAdmissionConfirm_cryptoTokens = (1 << 23),
		eAdmissionConfirm_integrityCheckValue = (1 << 22),
		eAdmissionConfirm_transportQOS = (1 << 21),
		eAdmissionConfirm_willRespondToIRR = (1 << 20),
		eAdmissionConfirm_uuiesRequested = (1 << 19),
		eAdmissionConfirm_language = (1 << 18),
		eAdmissionConfirm_alternateTransportAddresses = (1 << 17),
		eAdmissionConfirm_useSpecifiedTransport = (1 << 16),
		eAdmissionConfirm_circuitInfo = (1 << 15),
		eAdmissionConfirm_usageSpec = (1 << 14),
		eAdmissionConfirm_supportedProtocols = (1 << 13),
		eAdmissionConfirm_serviceControl = (1 << 12),
		eAdmissionConfirm_multipleCalls = (1 << 11),
		eAdmissionConfirm_featureSet = (1 << 10),
		eAdmissionConfirm_genericData = (1 << 9),
	} options;
	TransportAddress destCallSignalAddress;
} AdmissionConfirm;

typedef struct LocationRequest {	/* SEQUENCE */
	enum {
		eLocationRequest_endpointIdentifier = (1 << 31),
		eLocationRequest_nonStandardData = (1 << 30),
		eLocationRequest_sourceInfo = (1 << 29),
		eLocationRequest_canMapAlias = (1 << 28),
		eLocationRequest_gatekeeperIdentifier = (1 << 27),
		eLocationRequest_tokens = (1 << 26),
		eLocationRequest_cryptoTokens = (1 << 25),
		eLocationRequest_integrityCheckValue = (1 << 24),
		eLocationRequest_desiredProtocols = (1 << 23),
		eLocationRequest_desiredTunnelledProtocol = (1 << 22),
		eLocationRequest_featureSet = (1 << 21),
		eLocationRequest_genericData = (1 << 20),
		eLocationRequest_hopCount = (1 << 19),
		eLocationRequest_circuitInfo = (1 << 18),
	} options;
	TransportAddress replyAddress;
} LocationRequest;

typedef struct LocationConfirm {	/* SEQUENCE */
	enum {
		eLocationConfirm_nonStandardData = (1 << 31),
		eLocationConfirm_destinationInfo = (1 << 30),
		eLocationConfirm_destExtraCallInfo = (1 << 29),
		eLocationConfirm_destinationType = (1 << 28),
		eLocationConfirm_remoteExtensionAddress = (1 << 27),
		eLocationConfirm_alternateEndpoints = (1 << 26),
		eLocationConfirm_tokens = (1 << 25),
		eLocationConfirm_cryptoTokens = (1 << 24),
		eLocationConfirm_integrityCheckValue = (1 << 23),
		eLocationConfirm_alternateTransportAddresses = (1 << 22),
		eLocationConfirm_supportedProtocols = (1 << 21),
		eLocationConfirm_multipleCalls = (1 << 20),
		eLocationConfirm_featureSet = (1 << 19),
		eLocationConfirm_genericData = (1 << 18),
		eLocationConfirm_circuitInfo = (1 << 17),
		eLocationConfirm_serviceControl = (1 << 16),
	} options;
	TransportAddress callSignalAddress;
	TransportAddress rasAddress;
} LocationConfirm;

typedef struct InfoRequestResponse_callSignalAddress {	/* SEQUENCE OF */
	int count;
	TransportAddress item[10];
} InfoRequestResponse_callSignalAddress;

typedef struct InfoRequestResponse {	/* SEQUENCE */
	enum {
		eInfoRequestResponse_nonStandardData = (1 << 31),
		eInfoRequestResponse_endpointAlias = (1 << 30),
		eInfoRequestResponse_perCallInfo = (1 << 29),
		eInfoRequestResponse_tokens = (1 << 28),
		eInfoRequestResponse_cryptoTokens = (1 << 27),
		eInfoRequestResponse_integrityCheckValue = (1 << 26),
		eInfoRequestResponse_needResponse = (1 << 25),
		eInfoRequestResponse_capacity = (1 << 24),
		eInfoRequestResponse_irrStatus = (1 << 23),
		eInfoRequestResponse_unsolicited = (1 << 22),
		eInfoRequestResponse_genericData = (1 << 21),
	} options;
	TransportAddress rasAddress;
	InfoRequestResponse_callSignalAddress callSignalAddress;
} InfoRequestResponse;

typedef struct RasMessage {	/* CHOICE */
	enum {
		eRasMessage_gatekeeperRequest,
		eRasMessage_gatekeeperConfirm,
		eRasMessage_gatekeeperReject,
		eRasMessage_registrationRequest,
		eRasMessage_registrationConfirm,
		eRasMessage_registrationReject,
		eRasMessage_unregistrationRequest,
		eRasMessage_unregistrationConfirm,
		eRasMessage_unregistrationReject,
		eRasMessage_admissionRequest,
		eRasMessage_admissionConfirm,
		eRasMessage_admissionReject,
		eRasMessage_bandwidthRequest,
		eRasMessage_bandwidthConfirm,
		eRasMessage_bandwidthReject,
		eRasMessage_disengageRequest,
		eRasMessage_disengageConfirm,
		eRasMessage_disengageReject,
		eRasMessage_locationRequest,
		eRasMessage_locationConfirm,
		eRasMessage_locationReject,
		eRasMessage_infoRequest,
		eRasMessage_infoRequestResponse,
		eRasMessage_nonStandardMessage,
		eRasMessage_unknownMessageResponse,
		eRasMessage_requestInProgress,
		eRasMessage_resourcesAvailableIndicate,
		eRasMessage_resourcesAvailableConfirm,
		eRasMessage_infoRequestAck,
		eRasMessage_infoRequestNak,
		eRasMessage_serviceControlIndication,
		eRasMessage_serviceControlResponse,
	} choice;
	union {
		GatekeeperRequest gatekeeperRequest;
		GatekeeperConfirm gatekeeperConfirm;
		RegistrationRequest registrationRequest;
		RegistrationConfirm registrationConfirm;
		UnregistrationRequest unregistrationRequest;
		AdmissionRequest admissionRequest;
		AdmissionConfirm admissionConfirm;
		LocationRequest locationRequest;
		LocationConfirm locationConfirm;
		InfoRequestResponse infoRequestResponse;
	};
} RasMessage;
