//
// h245.h
//
// Code automatically generated by asnparse.
//

#if ! H323_DISABLE_H245

#ifndef __H245_H
#define __H245_H

#ifdef P_USE_PRAGMA
#pragma interface
#endif

#include <ptclib/asner.h>

//
// MultimediaSystemControlMessage
//

class H245_RequestMessage;
class H245_ResponseMessage;
class H245_CommandMessage;
class H245_IndicationMessage;

class H245_MultimediaSystemControlMessage : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultimediaSystemControlMessage, PASN_Choice);
#endif
  public:
    H245_MultimediaSystemControlMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_request,
      e_response,
      e_command,
      e_indication
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestMessage &() const;
#else
    operator H245_RequestMessage &();
    operator const H245_RequestMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ResponseMessage &() const;
#else
    operator H245_ResponseMessage &();
    operator const H245_ResponseMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CommandMessage &() const;
#else
    operator H245_CommandMessage &();
    operator const H245_CommandMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_IndicationMessage &() const;
#else
    operator H245_IndicationMessage &();
    operator const H245_IndicationMessage &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RequestMessage
//

class H245_NonStandardMessage;
class H245_MasterSlaveDetermination;
class H245_TerminalCapabilitySet;
class H245_OpenLogicalChannel;
class H245_CloseLogicalChannel;
class H245_RequestChannelClose;
class H245_MultiplexEntrySend;
class H245_RequestMultiplexEntry;
class H245_RequestMode;
class H245_RoundTripDelayRequest;
class H245_MaintenanceLoopRequest;
class H245_CommunicationModeRequest;
class H245_ConferenceRequest;
class H245_MultilinkRequest;
class H245_LogicalChannelRateRequest;
class H245_GenericMessage;

class H245_RequestMessage : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMessage, PASN_Choice);
#endif
  public:
    H245_RequestMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_masterSlaveDetermination,
      e_terminalCapabilitySet,
      e_openLogicalChannel,
      e_closeLogicalChannel,
      e_requestChannelClose,
      e_multiplexEntrySend,
      e_requestMultiplexEntry,
      e_requestMode,
      e_roundTripDelayRequest,
      e_maintenanceLoopRequest,
      e_communicationModeRequest,
      e_conferenceRequest,
      e_multilinkRequest,
      e_logicalChannelRateRequest,
      e_genericRequest
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MasterSlaveDetermination &() const;
#else
    operator H245_MasterSlaveDetermination &();
    operator const H245_MasterSlaveDetermination &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalCapabilitySet &() const;
#else
    operator H245_TerminalCapabilitySet &();
    operator const H245_TerminalCapabilitySet &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_OpenLogicalChannel &() const;
#else
    operator H245_OpenLogicalChannel &();
    operator const H245_OpenLogicalChannel &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CloseLogicalChannel &() const;
#else
    operator H245_CloseLogicalChannel &();
    operator const H245_CloseLogicalChannel &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestChannelClose &() const;
#else
    operator H245_RequestChannelClose &();
    operator const H245_RequestChannelClose &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplexEntrySend &() const;
#else
    operator H245_MultiplexEntrySend &();
    operator const H245_MultiplexEntrySend &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestMultiplexEntry &() const;
#else
    operator H245_RequestMultiplexEntry &();
    operator const H245_RequestMultiplexEntry &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestMode &() const;
#else
    operator H245_RequestMode &();
    operator const H245_RequestMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RoundTripDelayRequest &() const;
#else
    operator H245_RoundTripDelayRequest &();
    operator const H245_RoundTripDelayRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MaintenanceLoopRequest &() const;
#else
    operator H245_MaintenanceLoopRequest &();
    operator const H245_MaintenanceLoopRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CommunicationModeRequest &() const;
#else
    operator H245_CommunicationModeRequest &();
    operator const H245_CommunicationModeRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceRequest &() const;
#else
    operator H245_ConferenceRequest &();
    operator const H245_ConferenceRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkRequest &() const;
#else
    operator H245_MultilinkRequest &();
    operator const H245_MultilinkRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelRateRequest &() const;
#else
    operator H245_LogicalChannelRateRequest &();
    operator const H245_LogicalChannelRateRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericMessage &() const;
#else
    operator H245_GenericMessage &();
    operator const H245_GenericMessage &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ResponseMessage
//

class H245_NonStandardMessage;
class H245_MasterSlaveDeterminationAck;
class H245_MasterSlaveDeterminationReject;
class H245_TerminalCapabilitySetAck;
class H245_TerminalCapabilitySetReject;
class H245_OpenLogicalChannelAck;
class H245_OpenLogicalChannelReject;
class H245_CloseLogicalChannelAck;
class H245_RequestChannelCloseAck;
class H245_RequestChannelCloseReject;
class H245_MultiplexEntrySendAck;
class H245_MultiplexEntrySendReject;
class H245_RequestMultiplexEntryAck;
class H245_RequestMultiplexEntryReject;
class H245_RequestModeAck;
class H245_RequestModeReject;
class H245_RoundTripDelayResponse;
class H245_MaintenanceLoopAck;
class H245_MaintenanceLoopReject;
class H245_CommunicationModeResponse;
class H245_ConferenceResponse;
class H245_MultilinkResponse;
class H245_LogicalChannelRateAcknowledge;
class H245_LogicalChannelRateReject;
class H245_GenericMessage;

class H245_ResponseMessage : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ResponseMessage, PASN_Choice);
#endif
  public:
    H245_ResponseMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_masterSlaveDeterminationAck,
      e_masterSlaveDeterminationReject,
      e_terminalCapabilitySetAck,
      e_terminalCapabilitySetReject,
      e_openLogicalChannelAck,
      e_openLogicalChannelReject,
      e_closeLogicalChannelAck,
      e_requestChannelCloseAck,
      e_requestChannelCloseReject,
      e_multiplexEntrySendAck,
      e_multiplexEntrySendReject,
      e_requestMultiplexEntryAck,
      e_requestMultiplexEntryReject,
      e_requestModeAck,
      e_requestModeReject,
      e_roundTripDelayResponse,
      e_maintenanceLoopAck,
      e_maintenanceLoopReject,
      e_communicationModeResponse,
      e_conferenceResponse,
      e_multilinkResponse,
      e_logicalChannelRateAcknowledge,
      e_logicalChannelRateReject,
      e_genericResponse
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MasterSlaveDeterminationAck &() const;
#else
    operator H245_MasterSlaveDeterminationAck &();
    operator const H245_MasterSlaveDeterminationAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MasterSlaveDeterminationReject &() const;
#else
    operator H245_MasterSlaveDeterminationReject &();
    operator const H245_MasterSlaveDeterminationReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalCapabilitySetAck &() const;
#else
    operator H245_TerminalCapabilitySetAck &();
    operator const H245_TerminalCapabilitySetAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalCapabilitySetReject &() const;
#else
    operator H245_TerminalCapabilitySetReject &();
    operator const H245_TerminalCapabilitySetReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_OpenLogicalChannelAck &() const;
#else
    operator H245_OpenLogicalChannelAck &();
    operator const H245_OpenLogicalChannelAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_OpenLogicalChannelReject &() const;
#else
    operator H245_OpenLogicalChannelReject &();
    operator const H245_OpenLogicalChannelReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CloseLogicalChannelAck &() const;
#else
    operator H245_CloseLogicalChannelAck &();
    operator const H245_CloseLogicalChannelAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestChannelCloseAck &() const;
#else
    operator H245_RequestChannelCloseAck &();
    operator const H245_RequestChannelCloseAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestChannelCloseReject &() const;
#else
    operator H245_RequestChannelCloseReject &();
    operator const H245_RequestChannelCloseReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplexEntrySendAck &() const;
#else
    operator H245_MultiplexEntrySendAck &();
    operator const H245_MultiplexEntrySendAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplexEntrySendReject &() const;
#else
    operator H245_MultiplexEntrySendReject &();
    operator const H245_MultiplexEntrySendReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestMultiplexEntryAck &() const;
#else
    operator H245_RequestMultiplexEntryAck &();
    operator const H245_RequestMultiplexEntryAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestMultiplexEntryReject &() const;
#else
    operator H245_RequestMultiplexEntryReject &();
    operator const H245_RequestMultiplexEntryReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestModeAck &() const;
#else
    operator H245_RequestModeAck &();
    operator const H245_RequestModeAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestModeReject &() const;
#else
    operator H245_RequestModeReject &();
    operator const H245_RequestModeReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RoundTripDelayResponse &() const;
#else
    operator H245_RoundTripDelayResponse &();
    operator const H245_RoundTripDelayResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MaintenanceLoopAck &() const;
#else
    operator H245_MaintenanceLoopAck &();
    operator const H245_MaintenanceLoopAck &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MaintenanceLoopReject &() const;
#else
    operator H245_MaintenanceLoopReject &();
    operator const H245_MaintenanceLoopReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CommunicationModeResponse &() const;
#else
    operator H245_CommunicationModeResponse &();
    operator const H245_CommunicationModeResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse &() const;
#else
    operator H245_ConferenceResponse &();
    operator const H245_ConferenceResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkResponse &() const;
#else
    operator H245_MultilinkResponse &();
    operator const H245_MultilinkResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelRateAcknowledge &() const;
#else
    operator H245_LogicalChannelRateAcknowledge &();
    operator const H245_LogicalChannelRateAcknowledge &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelRateReject &() const;
#else
    operator H245_LogicalChannelRateReject &();
    operator const H245_LogicalChannelRateReject &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericMessage &() const;
#else
    operator H245_GenericMessage &();
    operator const H245_GenericMessage &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// CommandMessage
//

class H245_NonStandardMessage;
class H245_MaintenanceLoopOffCommand;
class H245_SendTerminalCapabilitySet;
class H245_EncryptionCommand;
class H245_FlowControlCommand;
class H245_EndSessionCommand;
class H245_MiscellaneousCommand;
class H245_CommunicationModeCommand;
class H245_ConferenceCommand;
class H245_H223MultiplexReconfiguration;
class H245_NewATMVCCommand;
class H245_MobileMultilinkReconfigurationCommand;
class H245_GenericMessage;

class H245_CommandMessage : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CommandMessage, PASN_Choice);
#endif
  public:
    H245_CommandMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_maintenanceLoopOffCommand,
      e_sendTerminalCapabilitySet,
      e_encryptionCommand,
      e_flowControlCommand,
      e_endSessionCommand,
      e_miscellaneousCommand,
      e_communicationModeCommand,
      e_conferenceCommand,
      e_h223MultiplexReconfiguration,
      e_newATMVCCommand,
      e_mobileMultilinkReconfigurationCommand,
      e_genericCommand
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MaintenanceLoopOffCommand &() const;
#else
    operator H245_MaintenanceLoopOffCommand &();
    operator const H245_MaintenanceLoopOffCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_SendTerminalCapabilitySet &() const;
#else
    operator H245_SendTerminalCapabilitySet &();
    operator const H245_SendTerminalCapabilitySet &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EncryptionCommand &() const;
#else
    operator H245_EncryptionCommand &();
    operator const H245_EncryptionCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FlowControlCommand &() const;
#else
    operator H245_FlowControlCommand &();
    operator const H245_FlowControlCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EndSessionCommand &() const;
#else
    operator H245_EndSessionCommand &();
    operator const H245_EndSessionCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand &() const;
#else
    operator H245_MiscellaneousCommand &();
    operator const H245_MiscellaneousCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CommunicationModeCommand &() const;
#else
    operator H245_CommunicationModeCommand &();
    operator const H245_CommunicationModeCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceCommand &() const;
#else
    operator H245_ConferenceCommand &();
    operator const H245_ConferenceCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223MultiplexReconfiguration &() const;
#else
    operator H245_H223MultiplexReconfiguration &();
    operator const H245_H223MultiplexReconfiguration &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NewATMVCCommand &() const;
#else
    operator H245_NewATMVCCommand &();
    operator const H245_NewATMVCCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MobileMultilinkReconfigurationCommand &() const;
#else
    operator H245_MobileMultilinkReconfigurationCommand &();
    operator const H245_MobileMultilinkReconfigurationCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericMessage &() const;
#else
    operator H245_GenericMessage &();
    operator const H245_GenericMessage &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IndicationMessage
//

class H245_NonStandardMessage;
class H245_FunctionNotUnderstood;
class H245_MasterSlaveDeterminationRelease;
class H245_TerminalCapabilitySetRelease;
class H245_OpenLogicalChannelConfirm;
class H245_RequestChannelCloseRelease;
class H245_MultiplexEntrySendRelease;
class H245_RequestMultiplexEntryRelease;
class H245_RequestModeRelease;
class H245_MiscellaneousIndication;
class H245_JitterIndication;
class H245_H223SkewIndication;
class H245_NewATMVCIndication;
class H245_UserInputIndication;
class H245_H2250MaximumSkewIndication;
class H245_MCLocationIndication;
class H245_ConferenceIndication;
class H245_VendorIdentification;
class H245_FunctionNotSupported;
class H245_MultilinkIndication;
class H245_LogicalChannelRateRelease;
class H245_FlowControlIndication;
class H245_MobileMultilinkReconfigurationIndication;
class H245_GenericMessage;

class H245_IndicationMessage : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IndicationMessage, PASN_Choice);
#endif
  public:
    H245_IndicationMessage(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_functionNotUnderstood,
      e_masterSlaveDeterminationRelease,
      e_terminalCapabilitySetRelease,
      e_openLogicalChannelConfirm,
      e_requestChannelCloseRelease,
      e_multiplexEntrySendRelease,
      e_requestMultiplexEntryRelease,
      e_requestModeRelease,
      e_miscellaneousIndication,
      e_jitterIndication,
      e_h223SkewIndication,
      e_newATMVCIndication,
      e_userInput,
      e_h2250MaximumSkewIndication,
      e_mcLocationIndication,
      e_conferenceIndication,
      e_vendorIdentification,
      e_functionNotSupported,
      e_multilinkIndication,
      e_logicalChannelRateRelease,
      e_flowControlIndication,
      e_mobileMultilinkReconfigurationIndication,
      e_genericIndication
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FunctionNotUnderstood &() const;
#else
    operator H245_FunctionNotUnderstood &();
    operator const H245_FunctionNotUnderstood &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MasterSlaveDeterminationRelease &() const;
#else
    operator H245_MasterSlaveDeterminationRelease &();
    operator const H245_MasterSlaveDeterminationRelease &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalCapabilitySetRelease &() const;
#else
    operator H245_TerminalCapabilitySetRelease &();
    operator const H245_TerminalCapabilitySetRelease &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_OpenLogicalChannelConfirm &() const;
#else
    operator H245_OpenLogicalChannelConfirm &();
    operator const H245_OpenLogicalChannelConfirm &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestChannelCloseRelease &() const;
#else
    operator H245_RequestChannelCloseRelease &();
    operator const H245_RequestChannelCloseRelease &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplexEntrySendRelease &() const;
#else
    operator H245_MultiplexEntrySendRelease &();
    operator const H245_MultiplexEntrySendRelease &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestMultiplexEntryRelease &() const;
#else
    operator H245_RequestMultiplexEntryRelease &();
    operator const H245_RequestMultiplexEntryRelease &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestModeRelease &() const;
#else
    operator H245_RequestModeRelease &();
    operator const H245_RequestModeRelease &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousIndication &() const;
#else
    operator H245_MiscellaneousIndication &();
    operator const H245_MiscellaneousIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_JitterIndication &() const;
#else
    operator H245_JitterIndication &();
    operator const H245_JitterIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223SkewIndication &() const;
#else
    operator H245_H223SkewIndication &();
    operator const H245_H223SkewIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NewATMVCIndication &() const;
#else
    operator H245_NewATMVCIndication &();
    operator const H245_NewATMVCIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UserInputIndication &() const;
#else
    operator H245_UserInputIndication &();
    operator const H245_UserInputIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H2250MaximumSkewIndication &() const;
#else
    operator H245_H2250MaximumSkewIndication &();
    operator const H245_H2250MaximumSkewIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MCLocationIndication &() const;
#else
    operator H245_MCLocationIndication &();
    operator const H245_MCLocationIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceIndication &() const;
#else
    operator H245_ConferenceIndication &();
    operator const H245_ConferenceIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VendorIdentification &() const;
#else
    operator H245_VendorIdentification &();
    operator const H245_VendorIdentification &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FunctionNotSupported &() const;
#else
    operator H245_FunctionNotSupported &();
    operator const H245_FunctionNotSupported &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkIndication &() const;
#else
    operator H245_MultilinkIndication &();
    operator const H245_MultilinkIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelRateRelease &() const;
#else
    operator H245_LogicalChannelRateRelease &();
    operator const H245_LogicalChannelRateRelease &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FlowControlIndication &() const;
#else
    operator H245_FlowControlIndication &();
    operator const H245_FlowControlIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MobileMultilinkReconfigurationIndication &() const;
#else
    operator H245_MobileMultilinkReconfigurationIndication &();
    operator const H245_MobileMultilinkReconfigurationIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericMessage &() const;
#else
    operator H245_GenericMessage &();
    operator const H245_GenericMessage &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// SequenceNumber
//

class H245_SequenceNumber : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_SequenceNumber, PASN_Integer);
#endif
  public:
    H245_SequenceNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber & operator=(int v);
    H245_SequenceNumber & operator=(unsigned v);
    PObject * Clone() const;
};


//
// NonStandardIdentifier
//

class H245_NonStandardIdentifier_h221NonStandard;

class H245_NonStandardIdentifier : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NonStandardIdentifier, PASN_Choice);
#endif
  public:
    H245_NonStandardIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_object,
      e_h221NonStandard
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardIdentifier_h221NonStandard &() const;
#else
    operator H245_NonStandardIdentifier_h221NonStandard &();
    operator const H245_NonStandardIdentifier_h221NonStandard &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MasterSlaveDetermination
//

class H245_MasterSlaveDetermination : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MasterSlaveDetermination, PASN_Sequence);
#endif
  public:
    H245_MasterSlaveDetermination(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_terminalType;
    PASN_Integer m_statusDeterminationNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MasterSlaveDeterminationRelease
//

class H245_MasterSlaveDeterminationRelease : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MasterSlaveDeterminationRelease, PASN_Sequence);
#endif
  public:
    H245_MasterSlaveDeterminationRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// AlternativeCapabilitySet
//

class H245_CapabilityTableEntryNumber;

class H245_AlternativeCapabilitySet : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AlternativeCapabilitySet, PASN_Array);
#endif
  public:
    H245_AlternativeCapabilitySet(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CapabilityTableEntryNumber & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// CapabilityTableEntryNumber
//

class H245_CapabilityTableEntryNumber : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CapabilityTableEntryNumber, PASN_Integer);
#endif
  public:
    H245_CapabilityTableEntryNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_CapabilityTableEntryNumber & operator=(int v);
    H245_CapabilityTableEntryNumber & operator=(unsigned v);
    PObject * Clone() const;
};


//
// CapabilityDescriptorNumber
//

class H245_CapabilityDescriptorNumber : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CapabilityDescriptorNumber, PASN_Integer);
#endif
  public:
    H245_CapabilityDescriptorNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_CapabilityDescriptorNumber & operator=(int v);
    H245_CapabilityDescriptorNumber & operator=(unsigned v);
    PObject * Clone() const;
};


//
// TerminalCapabilitySetAck
//

class H245_TerminalCapabilitySetAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalCapabilitySetAck, PASN_Sequence);
#endif
  public:
    H245_TerminalCapabilitySetAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// TerminalCapabilitySetRelease
//

class H245_TerminalCapabilitySetRelease : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalCapabilitySetRelease, PASN_Sequence);
#endif
  public:
    H245_TerminalCapabilitySetRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// Capability
//

class H245_NonStandardParameter;
class H245_VideoCapability;
class H245_AudioCapability;
class H245_DataApplicationCapability;
class H245_Capability_h233EncryptionReceiveCapability;
class H245_ConferenceCapability;
class H245_H235SecurityCapability;
class H245_UserInputCapability;
class H245_GenericCapability;
class H245_MultiplexedStreamCapability;
class H245_AudioTelephonyEventCapability;
class H245_AudioToneCapability;
class H245_DepFECCapability;
class H245_MultiplePayloadStreamCapability;
class H245_FECCapability;
class H245_RedundancyEncodingCapability;
class H245_AlternativeCapabilitySet;

class H245_Capability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_Capability, PASN_Choice);
#endif
  public:
    H245_Capability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_receiveVideoCapability,
      e_transmitVideoCapability,
      e_receiveAndTransmitVideoCapability,
      e_receiveAudioCapability,
      e_transmitAudioCapability,
      e_receiveAndTransmitAudioCapability,
      e_receiveDataApplicationCapability,
      e_transmitDataApplicationCapability,
      e_receiveAndTransmitDataApplicationCapability,
      e_h233EncryptionTransmitCapability,
      e_h233EncryptionReceiveCapability,
      e_conferenceCapability,
      e_h235SecurityCapability,
      e_maxPendingReplacementFor,
      e_receiveUserInputCapability,
      e_transmitUserInputCapability,
      e_receiveAndTransmitUserInputCapability,
      e_genericControlCapability,
      e_receiveMultiplexedStreamCapability,
      e_transmitMultiplexedStreamCapability,
      e_receiveAndTransmitMultiplexedStreamCapability,
      e_receiveRTPAudioTelephonyEventCapability,
      e_receiveRTPAudioToneCapability,
      e_depFecCapability,
      e_multiplePayloadStreamCapability,
      e_fecCapability,
      e_redundancyEncodingCap,
      e_oneOfCapabilities
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoCapability &() const;
#else
    operator H245_VideoCapability &();
    operator const H245_VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioCapability &() const;
#else
    operator H245_AudioCapability &();
    operator const H245_AudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataApplicationCapability &() const;
#else
    operator H245_DataApplicationCapability &();
    operator const H245_DataApplicationCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_Capability_h233EncryptionReceiveCapability &() const;
#else
    operator H245_Capability_h233EncryptionReceiveCapability &();
    operator const H245_Capability_h233EncryptionReceiveCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceCapability &() const;
#else
    operator H245_ConferenceCapability &();
    operator const H245_ConferenceCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H235SecurityCapability &() const;
#else
    operator H245_H235SecurityCapability &();
    operator const H245_H235SecurityCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UserInputCapability &() const;
#else
    operator H245_UserInputCapability &();
    operator const H245_UserInputCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplexedStreamCapability &() const;
#else
    operator H245_MultiplexedStreamCapability &();
    operator const H245_MultiplexedStreamCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioTelephonyEventCapability &() const;
#else
    operator H245_AudioTelephonyEventCapability &();
    operator const H245_AudioTelephonyEventCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioToneCapability &() const;
#else
    operator H245_AudioToneCapability &();
    operator const H245_AudioToneCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECCapability &() const;
#else
    operator H245_DepFECCapability &();
    operator const H245_DepFECCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplePayloadStreamCapability &() const;
#else
    operator H245_MultiplePayloadStreamCapability &();
    operator const H245_MultiplePayloadStreamCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECCapability &() const;
#else
    operator H245_FECCapability &();
    operator const H245_FECCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RedundancyEncodingCapability &() const;
#else
    operator H245_RedundancyEncodingCapability &();
    operator const H245_RedundancyEncodingCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AlternativeCapabilitySet &() const;
#else
    operator H245_AlternativeCapabilitySet &();
    operator const H245_AlternativeCapabilitySet &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultiplexCapability
//

class H245_NonStandardParameter;
class H245_H222Capability;
class H245_H223Capability;
class H245_V76Capability;
class H245_H2250Capability;
class H245_GenericCapability;

class H245_MultiplexCapability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexCapability, PASN_Choice);
#endif
  public:
    H245_MultiplexCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_h222Capability,
      e_h223Capability,
      e_v76Capability,
      e_h2250Capability,
      e_genericMultiplexCapability
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H222Capability &() const;
#else
    operator H245_H222Capability &();
    operator const H245_H222Capability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223Capability &() const;
#else
    operator H245_H223Capability &();
    operator const H245_H223Capability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_V76Capability &() const;
#else
    operator H245_V76Capability &();
    operator const H245_V76Capability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H2250Capability &() const;
#else
    operator H245_H2250Capability &();
    operator const H245_H2250Capability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AnnexCCapability
//

class H245_H223AnnexCCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AnnexCCapability, PASN_Sequence);
#endif
  public:
    H245_H223AnnexCCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_rsCodeCapability
    };

    PASN_Boolean m_videoWithAL1M;
    PASN_Boolean m_videoWithAL2M;
    PASN_Boolean m_videoWithAL3M;
    PASN_Boolean m_audioWithAL1M;
    PASN_Boolean m_audioWithAL2M;
    PASN_Boolean m_audioWithAL3M;
    PASN_Boolean m_dataWithAL1M;
    PASN_Boolean m_dataWithAL2M;
    PASN_Boolean m_dataWithAL3M;
    PASN_Boolean m_alpduInterleaving;
    PASN_Integer m_maximumAL1MPDUSize;
    PASN_Integer m_maximumAL2MSDUSize;
    PASN_Integer m_maximumAL3MSDUSize;
    PASN_Boolean m_rsCodeCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// V75Capability
//

class H245_V75Capability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V75Capability, PASN_Sequence);
#endif
  public:
    H245_V75Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_audioHeader;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// QOSMode
//

class H245_QOSMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_QOSMode, PASN_Choice);
#endif
  public:
    H245_QOSMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_guaranteedQOS,
      e_controlledLoad
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ATMParameters
//

class H245_ATMParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ATMParameters, PASN_Sequence);
#endif
  public:
    H245_ATMParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_maxNTUSize;
    PASN_Boolean m_atmUBR;
    PASN_Boolean m_atmrtVBR;
    PASN_Boolean m_atmnrtVBR;
    PASN_Boolean m_atmABR;
    PASN_Boolean m_atmCBR;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MediaTransportType
//

class H245_MediaTransportType_atm_AAL5_compressed;

class H245_MediaTransportType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MediaTransportType, PASN_Choice);
#endif
  public:
    H245_MediaTransportType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_ip_UDP,
      e_ip_TCP,
      e_atm_AAL5_UNIDIR,
      e_atm_AAL5_BIDIR,
      e_atm_AAL5_compressed
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MediaTransportType_atm_AAL5_compressed &() const;
#else
    operator H245_MediaTransportType_atm_AAL5_compressed &();
    operator const H245_MediaTransportType_atm_AAL5_compressed &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MediaChannelCapability
//

class H245_MediaChannelCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MediaChannelCapability, PASN_Sequence);
#endif
  public:
    H245_MediaChannelCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_mediaTransport
    };

    H245_MediaTransportType m_mediaTransport;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RedundancyEncodingMethod
//

class H245_NonStandardParameter;
class H245_RTPH263VideoRedundancyEncoding;

class H245_RedundancyEncodingMethod : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingMethod, PASN_Choice);
#endif
  public:
    H245_RedundancyEncodingMethod(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_rtpAudioRedundancyEncoding,
      e_rtpH263VideoRedundancyEncoding
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RTPH263VideoRedundancyEncoding &() const;
#else
    operator H245_RTPH263VideoRedundancyEncoding &();
    operator const H245_RTPH263VideoRedundancyEncoding &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// VideoCapability
//

class H245_NonStandardParameter;
class H245_H261VideoCapability;
class H245_H262VideoCapability;
class H245_H263VideoCapability;
class H245_IS11172VideoCapability;
class H245_GenericCapability;
class H245_ExtendedVideoCapability;

class H245_VideoCapability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VideoCapability, PASN_Choice);
#endif
  public:
    H245_VideoCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_h261VideoCapability,
      e_h262VideoCapability,
      e_h263VideoCapability,
      e_is11172VideoCapability,
      e_genericVideoCapability,
      e_extendedVideoCapability
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H261VideoCapability &() const;
#else
    operator H245_H261VideoCapability &();
    operator const H245_H261VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H262VideoCapability &() const;
#else
    operator H245_H262VideoCapability &();
    operator const H245_H262VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H263VideoCapability &() const;
#else
    operator H245_H263VideoCapability &();
    operator const H245_H263VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_IS11172VideoCapability &() const;
#else
    operator H245_IS11172VideoCapability &();
    operator const H245_IS11172VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ExtendedVideoCapability &() const;
#else
    operator H245_ExtendedVideoCapability &();
    operator const H245_ExtendedVideoCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H261VideoCapability
//

class H245_H261VideoCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H261VideoCapability, PASN_Sequence);
#endif
  public:
    H245_H261VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_qcifMPI,
      e_cifMPI,
      e_videoBadMBsCap
    };

    PASN_Integer m_qcifMPI;
    PASN_Integer m_cifMPI;
    PASN_Boolean m_temporalSpatialTradeOffCapability;
    PASN_Integer m_maxBitRate;
    PASN_Boolean m_stillImageTransmission;
    PASN_Boolean m_videoBadMBsCap;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H262VideoCapability
//

class H245_H262VideoCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H262VideoCapability, PASN_Sequence);
#endif
  public:
    H245_H262VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_videoBitRate,
      e_vbvBufferSize,
      e_samplesPerLine,
      e_linesPerFrame,
      e_framesPerSecond,
      e_luminanceSampleRate
    };

    PASN_Boolean m_profileAndLevel_SPatML;
    PASN_Boolean m_profileAndLevel_MPatLL;
    PASN_Boolean m_profileAndLevel_MPatML;
    PASN_Boolean m_profileAndLevel_MPatH_14;
    PASN_Boolean m_profileAndLevel_MPatHL;
    PASN_Boolean m_profileAndLevel_SNRatLL;
    PASN_Boolean m_profileAndLevel_SNRatML;
    PASN_Boolean m_profileAndLevel_SpatialatH_14;
    PASN_Boolean m_profileAndLevel_HPatML;
    PASN_Boolean m_profileAndLevel_HPatH_14;
    PASN_Boolean m_profileAndLevel_HPatHL;
    PASN_Integer m_videoBitRate;
    PASN_Integer m_vbvBufferSize;
    PASN_Integer m_samplesPerLine;
    PASN_Integer m_linesPerFrame;
    PASN_Integer m_framesPerSecond;
    PASN_Integer m_luminanceSampleRate;
    PASN_Boolean m_videoBadMBsCap;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// TransparencyParameters
//

class H245_TransparencyParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TransparencyParameters, PASN_Sequence);
#endif
  public:
    H245_TransparencyParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_presentationOrder;
    PASN_Integer m_offset_x;
    PASN_Integer m_offset_y;
    PASN_Integer m_scale_x;
    PASN_Integer m_scale_y;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CustomPictureClockFrequency
//

class H245_CustomPictureClockFrequency : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureClockFrequency, PASN_Sequence);
#endif
  public:
    H245_CustomPictureClockFrequency(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_sqcifMPI,
      e_qcifMPI,
      e_cifMPI,
      e_cif4MPI,
      e_cif16MPI
    };

    PASN_Integer m_clockConversionCode;
    PASN_Integer m_clockDivisor;
    PASN_Integer m_sqcifMPI;
    PASN_Integer m_qcifMPI;
    PASN_Integer m_cifMPI;
    PASN_Integer m_cif4MPI;
    PASN_Integer m_cif16MPI;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H263Version3Options
//

class H245_H263Version3Options : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H263Version3Options, PASN_Sequence);
#endif
  public:
    H245_H263Version3Options(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_dataPartitionedSlices;
    PASN_Boolean m_fixedPointIDCT0;
    PASN_Boolean m_interlacedFields;
    PASN_Boolean m_currentPictureHeaderRepetition;
    PASN_Boolean m_previousPictureHeaderRepetition;
    PASN_Boolean m_nextPictureHeaderRepetition;
    PASN_Boolean m_pictureNumber;
    PASN_Boolean m_spareReferencePictures;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// IS11172VideoCapability
//

class H245_IS11172VideoCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS11172VideoCapability, PASN_Sequence);
#endif
  public:
    H245_IS11172VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_videoBitRate,
      e_vbvBufferSize,
      e_samplesPerLine,
      e_linesPerFrame,
      e_pictureRate,
      e_luminanceSampleRate,
      e_videoBadMBsCap
    };

    PASN_Boolean m_constrainedBitstream;
    PASN_Integer m_videoBitRate;
    PASN_Integer m_vbvBufferSize;
    PASN_Integer m_samplesPerLine;
    PASN_Integer m_linesPerFrame;
    PASN_Integer m_pictureRate;
    PASN_Integer m_luminanceSampleRate;
    PASN_Boolean m_videoBadMBsCap;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// AudioCapability
//

class H245_NonStandardParameter;
class H245_AudioCapability_g7231;
class H245_IS11172AudioCapability;
class H245_IS13818AudioCapability;
class H245_G7231AnnexCCapability;
class H245_GSMAudioCapability;
class H245_GenericCapability;
class H245_G729Extensions;
class H245_VBDCapability;
class H245_NoPTAudioTelephonyEventCapability;
class H245_NoPTAudioToneCapability;

class H245_AudioCapability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AudioCapability, PASN_Choice);
#endif
  public:
    H245_AudioCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

// following code added by command line option

#ifndef PASN_NOPRINTON
void PrintOn(ostream & strm) const;
#endif

// end of added code

    enum Choices {
      e_nonStandard,
      e_g711Alaw64k,
      e_g711Alaw56k,
      e_g711Ulaw64k,
      e_g711Ulaw56k,
      e_g722_64k,
      e_g722_56k,
      e_g722_48k,
      e_g7231,
      e_g728,
      e_g729,
      e_g729AnnexA,
      e_is11172AudioCapability,
      e_is13818AudioCapability,
      e_g729wAnnexB,
      e_g729AnnexAwAnnexB,
      e_g7231AnnexCCapability,
      e_gsmFullRate,
      e_gsmHalfRate,
      e_gsmEnhancedFullRate,
      e_genericAudioCapability,
      e_g729Extensions,
      e_vbd,
      e_audioTelephonyEvent,
      e_audioTone
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioCapability_g7231 &() const;
#else
    operator H245_AudioCapability_g7231 &();
    operator const H245_AudioCapability_g7231 &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_IS11172AudioCapability &() const;
#else
    operator H245_IS11172AudioCapability &();
    operator const H245_IS11172AudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_IS13818AudioCapability &() const;
#else
    operator H245_IS13818AudioCapability &();
    operator const H245_IS13818AudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_G7231AnnexCCapability &() const;
#else
    operator H245_G7231AnnexCCapability &();
    operator const H245_G7231AnnexCCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GSMAudioCapability &() const;
#else
    operator H245_GSMAudioCapability &();
    operator const H245_GSMAudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_G729Extensions &() const;
#else
    operator H245_G729Extensions &();
    operator const H245_G729Extensions &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VBDCapability &() const;
#else
    operator H245_VBDCapability &();
    operator const H245_VBDCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NoPTAudioTelephonyEventCapability &() const;
#else
    operator H245_NoPTAudioTelephonyEventCapability &();
    operator const H245_NoPTAudioTelephonyEventCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NoPTAudioToneCapability &() const;
#else
    operator H245_NoPTAudioToneCapability &();
    operator const H245_NoPTAudioToneCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// G729Extensions
//

class H245_G729Extensions : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_G729Extensions, PASN_Sequence);
#endif
  public:
    H245_G729Extensions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_audioUnit
    };

    PASN_Integer m_audioUnit;
    PASN_Boolean m_annexA;
    PASN_Boolean m_annexB;
    PASN_Boolean m_annexD;
    PASN_Boolean m_annexE;
    PASN_Boolean m_annexF;
    PASN_Boolean m_annexG;
    PASN_Boolean m_annexH;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// IS11172AudioCapability
//

class H245_IS11172AudioCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS11172AudioCapability, PASN_Sequence);
#endif
  public:
    H245_IS11172AudioCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_audioLayer1;
    PASN_Boolean m_audioLayer2;
    PASN_Boolean m_audioLayer3;
    PASN_Boolean m_audioSampling32k;
    PASN_Boolean m_audioSampling44k1;
    PASN_Boolean m_audioSampling48k;
    PASN_Boolean m_singleChannel;
    PASN_Boolean m_twoChannels;
    PASN_Integer m_bitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// IS13818AudioCapability
//

class H245_IS13818AudioCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS13818AudioCapability, PASN_Sequence);
#endif
  public:
    H245_IS13818AudioCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_audioLayer1;
    PASN_Boolean m_audioLayer2;
    PASN_Boolean m_audioLayer3;
    PASN_Boolean m_audioSampling16k;
    PASN_Boolean m_audioSampling22k05;
    PASN_Boolean m_audioSampling24k;
    PASN_Boolean m_audioSampling32k;
    PASN_Boolean m_audioSampling44k1;
    PASN_Boolean m_audioSampling48k;
    PASN_Boolean m_singleChannel;
    PASN_Boolean m_twoChannels;
    PASN_Boolean m_threeChannels2_1;
    PASN_Boolean m_threeChannels3_0;
    PASN_Boolean m_fourChannels2_0_2_0;
    PASN_Boolean m_fourChannels2_2;
    PASN_Boolean m_fourChannels3_1;
    PASN_Boolean m_fiveChannels3_0_2_0;
    PASN_Boolean m_fiveChannels3_2;
    PASN_Boolean m_lowFrequencyEnhancement;
    PASN_Boolean m_multilingual;
    PASN_Integer m_bitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// GSMAudioCapability
//

class H245_GSMAudioCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_GSMAudioCapability, PASN_Sequence);
#endif
  public:
    H245_GSMAudioCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_audioUnitSize;
    PASN_Boolean m_comfortNoise;
    PASN_Boolean m_scrambled;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VBDCapability
//

class H245_VBDCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VBDCapability, PASN_Sequence);
#endif
  public:
    H245_VBDCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_AudioCapability m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataProtocolCapability
//

class H245_NonStandardParameter;
class H245_DataProtocolCapability_v76wCompression;

class H245_DataProtocolCapability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataProtocolCapability, PASN_Choice);
#endif
  public:
    H245_DataProtocolCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_v14buffered,
      e_v42lapm,
      e_hdlcFrameTunnelling,
      e_h310SeparateVCStack,
      e_h310SingleVCStack,
      e_transparent,
      e_segmentationAndReassembly,
      e_hdlcFrameTunnelingwSAR,
      e_v120,
      e_separateLANStack,
      e_v76wCompression,
      e_tcp,
      e_udp
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataProtocolCapability_v76wCompression &() const;
#else
    operator H245_DataProtocolCapability_v76wCompression &();
    operator const H245_DataProtocolCapability_v76wCompression &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// CompressionType
//

class H245_V42bis;

class H245_CompressionType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CompressionType, PASN_Choice);
#endif
  public:
    H245_CompressionType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_v42bis
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_V42bis &() const;
#else
    operator H245_V42bis &();
    operator const H245_V42bis &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// V42bis
//

class H245_V42bis : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V42bis, PASN_Sequence);
#endif
  public:
    H245_V42bis(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_numberOfCodewords;
    PASN_Integer m_maximumStringLength;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// T84Profile
//

class H245_T84Profile_t84Restricted;

class H245_T84Profile : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_T84Profile, PASN_Choice);
#endif
  public:
    H245_T84Profile(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_t84Unrestricted,
      e_t84Restricted
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_T84Profile_t84Restricted &() const;
#else
    operator H245_T84Profile_t84Restricted &();
    operator const H245_T84Profile_t84Restricted &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// T38FaxRateManagement
//

class H245_T38FaxRateManagement : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_T38FaxRateManagement, PASN_Choice);
#endif
  public:
    H245_T38FaxRateManagement(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_localTCF,
      e_transferredTCF
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// T38FaxTcpOptions
//

class H245_T38FaxTcpOptions : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_T38FaxTcpOptions, PASN_Sequence);
#endif
  public:
    H245_T38FaxTcpOptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_t38TCPBidirectionalMode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EncryptionCapability
//

class H245_MediaEncryptionAlgorithm;

class H245_EncryptionCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionCapability, PASN_Array);
#endif
  public:
    H245_EncryptionCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MediaEncryptionAlgorithm & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// MediaEncryptionAlgorithm
//

class H245_NonStandardParameter;

class H245_MediaEncryptionAlgorithm : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MediaEncryptionAlgorithm, PASN_Choice);
#endif
  public:
    H245_MediaEncryptionAlgorithm(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_algorithm
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// UserInputCapability
//

class H245_ArrayOf_NonStandardParameter;

class H245_UserInputCapability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputCapability, PASN_Choice);
#endif
  public:
    H245_UserInputCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_basicString,
      e_iA5String,
      e_generalString,
      e_dtmf,
      e_hookflash,
      e_extendedAlphanumeric,
      e_encryptedBasicString,
      e_encryptedIA5String,
      e_encryptedGeneralString,
      e_secureDTMF
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_NonStandardParameter &() const;
#else
    operator H245_ArrayOf_NonStandardParameter &();
    operator const H245_ArrayOf_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// CapabilityIdentifier
//

class H245_NonStandardParameter;

class H245_CapabilityIdentifier : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CapabilityIdentifier, PASN_Choice);
#endif
  public:
    H245_CapabilityIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_standard,
      e_h221NonStandard,
      e_uuid,
      e_domainBased
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ParameterIdentifier
//

class H245_NonStandardParameter;

class H245_ParameterIdentifier : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ParameterIdentifier, PASN_Choice);
#endif
  public:
    H245_ParameterIdentifier(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_standard,
      e_h221NonStandard,
      e_uuid,
      e_domainBased
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ParameterValue
//

class H245_ArrayOf_GenericParameter;

class H245_ParameterValue : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ParameterValue, PASN_Choice);
#endif
  public:
    H245_ParameterValue(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_logical,
      e_booleanArray,
      e_unsignedMin,
      e_unsignedMax,
      e_unsigned32Min,
      e_unsigned32Max,
      e_octetString,
      e_genericParameter
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_GenericParameter &() const;
#else
    operator H245_ArrayOf_GenericParameter &();
    operator const H245_ArrayOf_GenericParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultiplexFormat
//

class H245_NonStandardParameter;
class H245_H222Capability;
class H245_H223Capability;

class H245_MultiplexFormat : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexFormat, PASN_Choice);
#endif
  public:
    H245_MultiplexFormat(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_h222Capability,
      e_h223Capability
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H222Capability &() const;
#else
    operator H245_H222Capability &();
    operator const H245_H222Capability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223Capability &() const;
#else
    operator H245_H223Capability &();
    operator const H245_H223Capability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// AudioTelephonyEventCapability
//

class H245_AudioTelephonyEventCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AudioTelephonyEventCapability, PASN_Sequence);
#endif
  public:
    H245_AudioTelephonyEventCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_dynamicRTPPayloadType;
    PASN_GeneralString m_audioTelephoneEvent;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// AudioToneCapability
//

class H245_AudioToneCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AudioToneCapability, PASN_Sequence);
#endif
  public:
    H245_AudioToneCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_dynamicRTPPayloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NoPTAudioTelephonyEventCapability
//

class H245_NoPTAudioTelephonyEventCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NoPTAudioTelephonyEventCapability, PASN_Sequence);
#endif
  public:
    H245_NoPTAudioTelephonyEventCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_GeneralString m_audioTelephoneEvent;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NoPTAudioToneCapability
//

class H245_NoPTAudioToneCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NoPTAudioToneCapability, PASN_Sequence);
#endif
  public:
    H245_NoPTAudioToneCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// DepFECCapability
//

class H245_DepFECCapability_rfc2733;

class H245_DepFECCapability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECCapability, PASN_Choice);
#endif
  public:
    H245_DepFECCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rfc2733
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECCapability_rfc2733 &() const;
#else
    operator H245_DepFECCapability_rfc2733 &();
    operator const H245_DepFECCapability_rfc2733 &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MaxRedundancy
//

class H245_MaxRedundancy : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaxRedundancy, PASN_Integer);
#endif
  public:
    H245_MaxRedundancy(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_MaxRedundancy & operator=(int v);
    H245_MaxRedundancy & operator=(unsigned v);
    PObject * Clone() const;
};


//
// LogicalChannelNumber
//

class H245_LogicalChannelNumber : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_LogicalChannelNumber, PASN_Integer);
#endif
  public:
    H245_LogicalChannelNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber & operator=(int v);
    H245_LogicalChannelNumber & operator=(unsigned v);
    PObject * Clone() const;
};


//
// V75Parameters
//

class H245_V75Parameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V75Parameters, PASN_Sequence);
#endif
  public:
    H245_V75Parameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_audioHeaderPresent;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataType
//

class H245_NonStandardParameter;
class H245_VideoCapability;
class H245_AudioCapability;
class H245_DataApplicationCapability;
class H245_EncryptionMode;
class H245_H235Media;
class H245_MultiplexedStreamParameter;
class H245_RedundancyEncoding;
class H245_MultiplePayloadStream;
class H245_DepFECData;
class H245_FECData;

class H245_DataType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataType, PASN_Choice);
#endif
  public:
    H245_DataType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_nullData,
      e_videoData,
      e_audioData,
      e_data,
      e_encryptionData,
      e_h235Control,
      e_h235Media,
      e_multiplexedStream,
      e_redundancyEncoding,
      e_multiplePayloadStream,
      e_depFec,
      e_fec
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoCapability &() const;
#else
    operator H245_VideoCapability &();
    operator const H245_VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioCapability &() const;
#else
    operator H245_AudioCapability &();
    operator const H245_AudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataApplicationCapability &() const;
#else
    operator H245_DataApplicationCapability &();
    operator const H245_DataApplicationCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EncryptionMode &() const;
#else
    operator H245_EncryptionMode &();
    operator const H245_EncryptionMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H235Media &() const;
#else
    operator H245_H235Media &();
    operator const H245_H235Media &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplexedStreamParameter &() const;
#else
    operator H245_MultiplexedStreamParameter &();
    operator const H245_MultiplexedStreamParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RedundancyEncoding &() const;
#else
    operator H245_RedundancyEncoding &();
    operator const H245_RedundancyEncoding &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplePayloadStream &() const;
#else
    operator H245_MultiplePayloadStream &();
    operator const H245_MultiplePayloadStream &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECData &() const;
#else
    operator H245_DepFECData &();
    operator const H245_DepFECData &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECData &() const;
#else
    operator H245_FECData &();
    operator const H245_FECData &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultiplexedStreamParameter
//

class H245_MultiplexedStreamParameter : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexedStreamParameter, PASN_Sequence);
#endif
  public:
    H245_MultiplexedStreamParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MultiplexFormat m_multiplexFormat;
    PASN_Boolean m_controlOnMuxStream;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H222LogicalChannelParameters
//

class H245_H222LogicalChannelParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H222LogicalChannelParameters, PASN_Sequence);
#endif
  public:
    H245_H222LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_pcr_pid,
      e_programDescriptors,
      e_streamDescriptors
    };

    PASN_Integer m_resourceID;
    PASN_Integer m_subChannelID;
    PASN_Integer m_pcr_pid;
    PASN_OctetString m_programDescriptors;
    PASN_OctetString m_streamDescriptors;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CRCLength
//

class H245_CRCLength : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CRCLength, PASN_Choice);
#endif
  public:
    H245_CRCLength(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_crc8bit,
      e_crc16bit,
      e_crc32bit
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RedundancyEncodingElement
//

class H245_RedundancyEncodingElement : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingElement, PASN_Sequence);
#endif
  public:
    H245_RedundancyEncodingElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_payloadType
    };

    H245_DataType m_dataType;
    PASN_Integer m_payloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplePayloadStreamElement
//

class H245_MultiplePayloadStreamElement : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplePayloadStreamElement, PASN_Sequence);
#endif
  public:
    H245_MultiplePayloadStreamElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_payloadType
    };

    H245_DataType m_dataType;
    PASN_Integer m_payloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECData
//

class H245_DepFECData_rfc2733;

class H245_DepFECData : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECData, PASN_Choice);
#endif
  public:
    H245_DepFECData(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rfc2733
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECData_rfc2733 &() const;
#else
    operator H245_DepFECData_rfc2733 &();
    operator const H245_DepFECData_rfc2733 &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// FECData
//

class H245_FECData_rfc2733;

class H245_FECData : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECData, PASN_Choice);
#endif
  public:
    H245_FECData(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rfc2733
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECData_rfc2733 &() const;
#else
    operator H245_FECData_rfc2733 &();
    operator const H245_FECData_rfc2733 &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// TransportAddress
//

class H245_UnicastAddress;
class H245_MulticastAddress;

class H245_TransportAddress : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TransportAddress, PASN_Choice);
#endif
  public:
    H245_TransportAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unicastAddress,
      e_multicastAddress
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UnicastAddress &() const;
#else
    operator H245_UnicastAddress &();
    operator const H245_UnicastAddress &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MulticastAddress &() const;
#else
    operator H245_MulticastAddress &();
    operator const H245_MulticastAddress &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// UnicastAddress
//

class H245_UnicastAddress_iPAddress;
class H245_UnicastAddress_iPXAddress;
class H245_UnicastAddress_iP6Address;
class H245_UnicastAddress_iPSourceRouteAddress;
class H245_NonStandardParameter;

class H245_UnicastAddress : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UnicastAddress, PASN_Choice);
#endif
  public:
    H245_UnicastAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_iPAddress,
      e_iPXAddress,
      e_iP6Address,
      e_netBios,
      e_iPSourceRouteAddress,
      e_nsap,
      e_nonStandardAddress
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UnicastAddress_iPAddress &() const;
#else
    operator H245_UnicastAddress_iPAddress &();
    operator const H245_UnicastAddress_iPAddress &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UnicastAddress_iPXAddress &() const;
#else
    operator H245_UnicastAddress_iPXAddress &();
    operator const H245_UnicastAddress_iPXAddress &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UnicastAddress_iP6Address &() const;
#else
    operator H245_UnicastAddress_iP6Address &();
    operator const H245_UnicastAddress_iP6Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UnicastAddress_iPSourceRouteAddress &() const;
#else
    operator H245_UnicastAddress_iPSourceRouteAddress &();
    operator const H245_UnicastAddress_iPSourceRouteAddress &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MulticastAddress
//

class H245_MulticastAddress_iPAddress;
class H245_MulticastAddress_iP6Address;
class H245_NonStandardParameter;

class H245_MulticastAddress : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MulticastAddress, PASN_Choice);
#endif
  public:
    H245_MulticastAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_iPAddress,
      e_iP6Address,
      e_nsap,
      e_nonStandardAddress
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MulticastAddress_iPAddress &() const;
#else
    operator H245_MulticastAddress_iPAddress &();
    operator const H245_MulticastAddress_iPAddress &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MulticastAddress_iP6Address &() const;
#else
    operator H245_MulticastAddress_iP6Address &();
    operator const H245_MulticastAddress_iP6Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// EscrowData
//

class H245_EscrowData : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EscrowData, PASN_Sequence);
#endif
  public:
    H245_EscrowData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_ObjectId m_escrowID;
    PASN_BitString m_escrowValue;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannelConfirm
//

class H245_OpenLogicalChannelConfirm : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannelConfirm, PASN_Sequence);
#endif
  public:
    H245_OpenLogicalChannelConfirm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CloseLogicalChannelAck
//

class H245_CloseLogicalChannelAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CloseLogicalChannelAck, PASN_Sequence);
#endif
  public:
    H245_CloseLogicalChannelAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestChannelCloseAck
//

class H245_RequestChannelCloseAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestChannelCloseAck, PASN_Sequence);
#endif
  public:
    H245_RequestChannelCloseAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestChannelCloseRelease
//

class H245_RequestChannelCloseRelease : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestChannelCloseRelease, PASN_Sequence);
#endif
  public:
    H245_RequestChannelCloseRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexTableEntryNumber
//

class H245_MultiplexTableEntryNumber : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexTableEntryNumber, PASN_Integer);
#endif
  public:
    H245_MultiplexTableEntryNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_MultiplexTableEntryNumber & operator=(int v);
    H245_MultiplexTableEntryNumber & operator=(unsigned v);
    PObject * Clone() const;
};


//
// RequestModeRelease
//

class H245_RequestModeRelease : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestModeRelease, PASN_Sequence);
#endif
  public:
    H245_RequestModeRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// ModeDescription
//

class H245_ModeElement;

class H245_ModeDescription : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ModeDescription, PASN_Array);
#endif
  public:
    H245_ModeDescription(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_ModeElement & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ModeElementType
//

class H245_NonStandardParameter;
class H245_VideoMode;
class H245_AudioMode;
class H245_DataMode;
class H245_EncryptionMode;
class H245_H235Mode;
class H245_MultiplexedStreamParameter;
class H245_RedundancyEncodingDTMode;
class H245_MultiplePayloadStreamMode;
class H245_DepFECMode;
class H245_FECMode;

class H245_ModeElementType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ModeElementType, PASN_Choice);
#endif
  public:
    H245_ModeElementType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_videoMode,
      e_audioMode,
      e_dataMode,
      e_encryptionMode,
      e_h235Mode,
      e_multiplexedStreamMode,
      e_redundancyEncodingDTMode,
      e_multiplePayloadStreamMode,
      e_depFecMode,
      e_fecMode
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoMode &() const;
#else
    operator H245_VideoMode &();
    operator const H245_VideoMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioMode &() const;
#else
    operator H245_AudioMode &();
    operator const H245_AudioMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataMode &() const;
#else
    operator H245_DataMode &();
    operator const H245_DataMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EncryptionMode &() const;
#else
    operator H245_EncryptionMode &();
    operator const H245_EncryptionMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H235Mode &() const;
#else
    operator H245_H235Mode &();
    operator const H245_H235Mode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplexedStreamParameter &() const;
#else
    operator H245_MultiplexedStreamParameter &();
    operator const H245_MultiplexedStreamParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RedundancyEncodingDTMode &() const;
#else
    operator H245_RedundancyEncodingDTMode &();
    operator const H245_RedundancyEncodingDTMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplePayloadStreamMode &() const;
#else
    operator H245_MultiplePayloadStreamMode &();
    operator const H245_MultiplePayloadStreamMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECMode &() const;
#else
    operator H245_DepFECMode &();
    operator const H245_DepFECMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECMode &() const;
#else
    operator H245_FECMode &();
    operator const H245_FECMode &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultiplexedStreamModeParameters
//

class H245_MultiplexedStreamModeParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexedStreamModeParameters, PASN_Sequence);
#endif
  public:
    H245_MultiplexedStreamModeParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_logicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplePayloadStreamElementMode
//

class H245_MultiplePayloadStreamElementMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplePayloadStreamElementMode, PASN_Sequence);
#endif
  public:
    H245_MultiplePayloadStreamElementMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ModeElementType m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECMode
//

class H245_DepFECMode_rfc2733Mode;

class H245_DepFECMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECMode, PASN_Choice);
#endif
  public:
    H245_DepFECMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rfc2733Mode
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECMode_rfc2733Mode &() const;
#else
    operator H245_DepFECMode_rfc2733Mode &();
    operator const H245_DepFECMode_rfc2733Mode &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// V76ModeParameters
//

class H245_V76ModeParameters : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76ModeParameters, PASN_Choice);
#endif
  public:
    H245_V76ModeParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_suspendResumewAddress,
      e_suspendResumewoAddress
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// VideoMode
//

class H245_NonStandardParameter;
class H245_H261VideoMode;
class H245_H262VideoMode;
class H245_H263VideoMode;
class H245_IS11172VideoMode;
class H245_GenericCapability;

class H245_VideoMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VideoMode, PASN_Choice);
#endif
  public:
    H245_VideoMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_h261VideoMode,
      e_h262VideoMode,
      e_h263VideoMode,
      e_is11172VideoMode,
      e_genericVideoMode
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H261VideoMode &() const;
#else
    operator H245_H261VideoMode &();
    operator const H245_H261VideoMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H262VideoMode &() const;
#else
    operator H245_H262VideoMode &();
    operator const H245_H262VideoMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H263VideoMode &() const;
#else
    operator H245_H263VideoMode &();
    operator const H245_H263VideoMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_IS11172VideoMode &() const;
#else
    operator H245_IS11172VideoMode &();
    operator const H245_IS11172VideoMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IS11172VideoMode
//

class H245_IS11172VideoMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS11172VideoMode, PASN_Sequence);
#endif
  public:
    H245_IS11172VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_videoBitRate,
      e_vbvBufferSize,
      e_samplesPerLine,
      e_linesPerFrame,
      e_pictureRate,
      e_luminanceSampleRate
    };

    PASN_Boolean m_constrainedBitstream;
    PASN_Integer m_videoBitRate;
    PASN_Integer m_vbvBufferSize;
    PASN_Integer m_samplesPerLine;
    PASN_Integer m_linesPerFrame;
    PASN_Integer m_pictureRate;
    PASN_Integer m_luminanceSampleRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// AudioMode
//

class H245_NonStandardParameter;
class H245_AudioMode_g7231;
class H245_IS11172AudioMode;
class H245_IS13818AudioMode;
class H245_G7231AnnexCMode;
class H245_GSMAudioCapability;
class H245_GenericCapability;
class H245_G729Extensions;
class H245_VBDMode;

class H245_AudioMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AudioMode, PASN_Choice);
#endif
  public:
    H245_AudioMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_g711Alaw64k,
      e_g711Alaw56k,
      e_g711Ulaw64k,
      e_g711Ulaw56k,
      e_g722_64k,
      e_g722_56k,
      e_g722_48k,
      e_g728,
      e_g729,
      e_g729AnnexA,
      e_g7231,
      e_is11172AudioMode,
      e_is13818AudioMode,
      e_g729wAnnexB,
      e_g729AnnexAwAnnexB,
      e_g7231AnnexCMode,
      e_gsmFullRate,
      e_gsmHalfRate,
      e_gsmEnhancedFullRate,
      e_genericAudioMode,
      e_g729Extensions,
      e_vbd
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioMode_g7231 &() const;
#else
    operator H245_AudioMode_g7231 &();
    operator const H245_AudioMode_g7231 &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_IS11172AudioMode &() const;
#else
    operator H245_IS11172AudioMode &();
    operator const H245_IS11172AudioMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_IS13818AudioMode &() const;
#else
    operator H245_IS13818AudioMode &();
    operator const H245_IS13818AudioMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_G7231AnnexCMode &() const;
#else
    operator H245_G7231AnnexCMode &();
    operator const H245_G7231AnnexCMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GSMAudioCapability &() const;
#else
    operator H245_GSMAudioCapability &();
    operator const H245_GSMAudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_G729Extensions &() const;
#else
    operator H245_G729Extensions &();
    operator const H245_G729Extensions &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VBDMode &() const;
#else
    operator H245_VBDMode &();
    operator const H245_VBDMode &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// VBDMode
//

class H245_VBDMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VBDMode, PASN_Sequence);
#endif
  public:
    H245_VBDMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_AudioMode m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EncryptionMode
//

class H245_NonStandardParameter;

class H245_EncryptionMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionMode, PASN_Choice);
#endif
  public:
    H245_EncryptionMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_h233Encryption
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RoundTripDelayRequest
//

class H245_RoundTripDelayRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RoundTripDelayRequest, PASN_Sequence);
#endif
  public:
    H245_RoundTripDelayRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RoundTripDelayResponse
//

class H245_RoundTripDelayResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RoundTripDelayResponse, PASN_Sequence);
#endif
  public:
    H245_RoundTripDelayResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MaintenanceLoopOffCommand
//

class H245_MaintenanceLoopOffCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopOffCommand, PASN_Sequence);
#endif
  public:
    H245_MaintenanceLoopOffCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// CommunicationModeRequest
//

class H245_CommunicationModeRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CommunicationModeRequest, PASN_Sequence);
#endif
  public:
    H245_CommunicationModeRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// CommunicationModeResponse
//

class H245_ArrayOf_CommunicationModeTableEntry;

class H245_CommunicationModeResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CommunicationModeResponse, PASN_Choice);
#endif
  public:
    H245_CommunicationModeResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_communicationModeTable
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_CommunicationModeTableEntry &() const;
#else
    operator H245_ArrayOf_CommunicationModeTableEntry &();
    operator const H245_ArrayOf_CommunicationModeTableEntry &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ConferenceRequest
//

class H245_TerminalLabel;
class H245_ConferenceRequest_requestTerminalCertificate;
class H245_LogicalChannelNumber;
class H245_RemoteMCRequest;

class H245_ConferenceRequest : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceRequest, PASN_Choice);
#endif
  public:
    H245_ConferenceRequest(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_terminalListRequest,
      e_makeMeChair,
      e_cancelMakeMeChair,
      e_dropTerminal,
      e_requestTerminalID,
      e_enterH243Password,
      e_enterH243TerminalID,
      e_enterH243ConferenceID,
      e_enterExtensionAddress,
      e_requestChairTokenOwner,
      e_requestTerminalCertificate,
      e_broadcastMyLogicalChannel,
      e_makeTerminalBroadcaster,
      e_sendThisSource,
      e_requestAllTerminalIDs,
      e_remoteMCRequest
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalLabel &() const;
#else
    operator H245_TerminalLabel &();
    operator const H245_TerminalLabel &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceRequest_requestTerminalCertificate &() const;
#else
    operator H245_ConferenceRequest_requestTerminalCertificate &();
    operator const H245_ConferenceRequest_requestTerminalCertificate &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RemoteMCRequest &() const;
#else
    operator H245_RemoteMCRequest &();
    operator const H245_RemoteMCRequest &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// CertSelectionCriteria
//

class H245_Criteria;

class H245_CertSelectionCriteria : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CertSelectionCriteria, PASN_Array);
#endif
  public:
    H245_CertSelectionCriteria(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_Criteria & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// Criteria
//

class H245_Criteria : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_Criteria, PASN_Sequence);
#endif
  public:
    H245_Criteria(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_ObjectId m_field;
    PASN_OctetString m_value;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// McuNumber
//

class H245_McuNumber : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_McuNumber, PASN_Integer);
#endif
  public:
    H245_McuNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_McuNumber & operator=(int v);
    H245_McuNumber & operator=(unsigned v);
    PObject * Clone() const;
};


//
// TerminalNumber
//

class H245_TerminalNumber : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalNumber, PASN_Integer);
#endif
  public:
    H245_TerminalNumber(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_TerminalNumber & operator=(int v);
    H245_TerminalNumber & operator=(unsigned v);
    PObject * Clone() const;
};


//
// ConferenceResponse
//

class H245_ConferenceResponse_mCTerminalIDResponse;
class H245_ConferenceResponse_terminalIDResponse;
class H245_ConferenceResponse_conferenceIDResponse;
class H245_ConferenceResponse_passwordResponse;
class H245_ArrayOf_TerminalLabel;
class H245_ConferenceResponse_makeMeChairResponse;
class H245_ConferenceResponse_extensionAddressResponse;
class H245_ConferenceResponse_chairTokenOwnerResponse;
class H245_ConferenceResponse_terminalCertificateResponse;
class H245_ConferenceResponse_broadcastMyLogicalChannelResponse;
class H245_ConferenceResponse_makeTerminalBroadcasterResponse;
class H245_ConferenceResponse_sendThisSourceResponse;
class H245_RequestAllTerminalIDsResponse;
class H245_RemoteMCResponse;

class H245_ConferenceResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse, PASN_Choice);
#endif
  public:
    H245_ConferenceResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_mCTerminalIDResponse,
      e_terminalIDResponse,
      e_conferenceIDResponse,
      e_passwordResponse,
      e_terminalListResponse,
      e_videoCommandReject,
      e_terminalDropReject,
      e_makeMeChairResponse,
      e_extensionAddressResponse,
      e_chairTokenOwnerResponse,
      e_terminalCertificateResponse,
      e_broadcastMyLogicalChannelResponse,
      e_makeTerminalBroadcasterResponse,
      e_sendThisSourceResponse,
      e_requestAllTerminalIDsResponse,
      e_remoteMCResponse
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_mCTerminalIDResponse &() const;
#else
    operator H245_ConferenceResponse_mCTerminalIDResponse &();
    operator const H245_ConferenceResponse_mCTerminalIDResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_terminalIDResponse &() const;
#else
    operator H245_ConferenceResponse_terminalIDResponse &();
    operator const H245_ConferenceResponse_terminalIDResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_conferenceIDResponse &() const;
#else
    operator H245_ConferenceResponse_conferenceIDResponse &();
    operator const H245_ConferenceResponse_conferenceIDResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_passwordResponse &() const;
#else
    operator H245_ConferenceResponse_passwordResponse &();
    operator const H245_ConferenceResponse_passwordResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_TerminalLabel &() const;
#else
    operator H245_ArrayOf_TerminalLabel &();
    operator const H245_ArrayOf_TerminalLabel &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_makeMeChairResponse &() const;
#else
    operator H245_ConferenceResponse_makeMeChairResponse &();
    operator const H245_ConferenceResponse_makeMeChairResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_extensionAddressResponse &() const;
#else
    operator H245_ConferenceResponse_extensionAddressResponse &();
    operator const H245_ConferenceResponse_extensionAddressResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_chairTokenOwnerResponse &() const;
#else
    operator H245_ConferenceResponse_chairTokenOwnerResponse &();
    operator const H245_ConferenceResponse_chairTokenOwnerResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_terminalCertificateResponse &() const;
#else
    operator H245_ConferenceResponse_terminalCertificateResponse &();
    operator const H245_ConferenceResponse_terminalCertificateResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_broadcastMyLogicalChannelResponse &() const;
#else
    operator H245_ConferenceResponse_broadcastMyLogicalChannelResponse &();
    operator const H245_ConferenceResponse_broadcastMyLogicalChannelResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_makeTerminalBroadcasterResponse &() const;
#else
    operator H245_ConferenceResponse_makeTerminalBroadcasterResponse &();
    operator const H245_ConferenceResponse_makeTerminalBroadcasterResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ConferenceResponse_sendThisSourceResponse &() const;
#else
    operator H245_ConferenceResponse_sendThisSourceResponse &();
    operator const H245_ConferenceResponse_sendThisSourceResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestAllTerminalIDsResponse &() const;
#else
    operator H245_RequestAllTerminalIDsResponse &();
    operator const H245_RequestAllTerminalIDsResponse &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RemoteMCResponse &() const;
#else
    operator H245_RemoteMCResponse &();
    operator const H245_RemoteMCResponse &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// TerminalID
//

class H245_TerminalID : public PASN_OctetString
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalID, PASN_OctetString);
#endif
  public:
    H245_TerminalID(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);

    H245_TerminalID(const char * v);
    H245_TerminalID(const PString & v);
    H245_TerminalID(const PBYTEArray & v);

    H245_TerminalID & operator=(const char * v);
    H245_TerminalID & operator=(const PString & v);
    H245_TerminalID & operator=(const PBYTEArray & v);
    PObject * Clone() const;
};


//
// ConferenceID
//

class H245_ConferenceID : public PASN_OctetString
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceID, PASN_OctetString);
#endif
  public:
    H245_ConferenceID(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);

    H245_ConferenceID(const char * v);
    H245_ConferenceID(const PString & v);
    H245_ConferenceID(const PBYTEArray & v);

    H245_ConferenceID & operator=(const char * v);
    H245_ConferenceID & operator=(const PString & v);
    H245_ConferenceID & operator=(const PBYTEArray & v);
    PObject * Clone() const;
};


//
// Password
//

class H245_Password : public PASN_OctetString
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_Password, PASN_OctetString);
#endif
  public:
    H245_Password(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);

    H245_Password(const char * v);
    H245_Password(const PString & v);
    H245_Password(const PBYTEArray & v);

    H245_Password & operator=(const char * v);
    H245_Password & operator=(const PString & v);
    H245_Password & operator=(const PBYTEArray & v);
    PObject * Clone() const;
};


//
// RemoteMCRequest
//

class H245_RemoteMCRequest : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RemoteMCRequest, PASN_Choice);
#endif
  public:
    H245_RemoteMCRequest(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_masterActivate,
      e_slaveActivate,
      e_deActivate
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RemoteMCResponse
//

class H245_RemoteMCResponse_reject;

class H245_RemoteMCResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RemoteMCResponse, PASN_Choice);
#endif
  public:
    H245_RemoteMCResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_accept,
      e_reject
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RemoteMCResponse_reject &() const;
#else
    operator H245_RemoteMCResponse_reject &();
    operator const H245_RemoteMCResponse_reject &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultilinkRequest
//

class H245_NonStandardMessage;
class H245_MultilinkRequest_callInformation;
class H245_MultilinkRequest_addConnection;
class H245_MultilinkRequest_removeConnection;
class H245_MultilinkRequest_maximumHeaderInterval;

class H245_MultilinkRequest : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkRequest, PASN_Choice);
#endif
  public:
    H245_MultilinkRequest(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_callInformation,
      e_addConnection,
      e_removeConnection,
      e_maximumHeaderInterval
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkRequest_callInformation &() const;
#else
    operator H245_MultilinkRequest_callInformation &();
    operator const H245_MultilinkRequest_callInformation &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkRequest_addConnection &() const;
#else
    operator H245_MultilinkRequest_addConnection &();
    operator const H245_MultilinkRequest_addConnection &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkRequest_removeConnection &() const;
#else
    operator H245_MultilinkRequest_removeConnection &();
    operator const H245_MultilinkRequest_removeConnection &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkRequest_maximumHeaderInterval &() const;
#else
    operator H245_MultilinkRequest_maximumHeaderInterval &();
    operator const H245_MultilinkRequest_maximumHeaderInterval &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultilinkResponse
//

class H245_NonStandardMessage;
class H245_MultilinkResponse_callInformation;
class H245_MultilinkResponse_addConnection;
class H245_MultilinkResponse_removeConnection;
class H245_MultilinkResponse_maximumHeaderInterval;

class H245_MultilinkResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkResponse, PASN_Choice);
#endif
  public:
    H245_MultilinkResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_callInformation,
      e_addConnection,
      e_removeConnection,
      e_maximumHeaderInterval
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkResponse_callInformation &() const;
#else
    operator H245_MultilinkResponse_callInformation &();
    operator const H245_MultilinkResponse_callInformation &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkResponse_addConnection &() const;
#else
    operator H245_MultilinkResponse_addConnection &();
    operator const H245_MultilinkResponse_addConnection &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkResponse_removeConnection &() const;
#else
    operator H245_MultilinkResponse_removeConnection &();
    operator const H245_MultilinkResponse_removeConnection &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkResponse_maximumHeaderInterval &() const;
#else
    operator H245_MultilinkResponse_maximumHeaderInterval &();
    operator const H245_MultilinkResponse_maximumHeaderInterval &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultilinkIndication
//

class H245_NonStandardMessage;
class H245_MultilinkIndication_crcDesired;
class H245_MultilinkIndication_excessiveError;

class H245_MultilinkIndication : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkIndication, PASN_Choice);
#endif
  public:
    H245_MultilinkIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_crcDesired,
      e_excessiveError
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkIndication_crcDesired &() const;
#else
    operator H245_MultilinkIndication_crcDesired &();
    operator const H245_MultilinkIndication_crcDesired &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkIndication_excessiveError &() const;
#else
    operator H245_MultilinkIndication_excessiveError &();
    operator const H245_MultilinkIndication_excessiveError &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// DialingInformation
//

class H245_NonStandardMessage;
class H245_ArrayOf_DialingInformationNumber;

class H245_DialingInformation : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DialingInformation, PASN_Choice);
#endif
  public:
    H245_DialingInformation(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_differential,
      e_infoNotAvailable
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_DialingInformationNumber &() const;
#else
    operator H245_ArrayOf_DialingInformationNumber &();
    operator const H245_ArrayOf_DialingInformationNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// DialingInformationNetworkType
//

class H245_NonStandardMessage;

class H245_DialingInformationNetworkType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DialingInformationNetworkType, PASN_Choice);
#endif
  public:
    H245_DialingInformationNetworkType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_n_isdn,
      e_gstn,
      e_mobile
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardMessage &() const;
#else
    operator H245_NonStandardMessage &();
    operator const H245_NonStandardMessage &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ConnectionIdentifier
//

class H245_ConnectionIdentifier : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConnectionIdentifier, PASN_Sequence);
#endif
  public:
    H245_ConnectionIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_channelTag;
    PASN_Integer m_sequenceNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MaximumBitRate
//

class H245_MaximumBitRate : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaximumBitRate, PASN_Integer);
#endif
  public:
    H245_MaximumBitRate(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

    H245_MaximumBitRate & operator=(int v);
    H245_MaximumBitRate & operator=(unsigned v);
    PObject * Clone() const;
};


//
// LogicalChannelRateRequest
//

class H245_LogicalChannelRateRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_LogicalChannelRateRequest, PASN_Sequence);
#endif
  public:
    H245_LogicalChannelRateRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_LogicalChannelNumber m_logicalChannelNumber;
    H245_MaximumBitRate m_maximumBitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// LogicalChannelRateAcknowledge
//

class H245_LogicalChannelRateAcknowledge : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_LogicalChannelRateAcknowledge, PASN_Sequence);
#endif
  public:
    H245_LogicalChannelRateAcknowledge(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_LogicalChannelNumber m_logicalChannelNumber;
    H245_MaximumBitRate m_maximumBitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// LogicalChannelRateRejectReason
//

class H245_LogicalChannelRateRejectReason : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_LogicalChannelRateRejectReason, PASN_Choice);
#endif
  public:
    H245_LogicalChannelRateRejectReason(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_undefinedReason,
      e_insufficientResources
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// LogicalChannelRateRelease
//

class H245_LogicalChannelRateRelease : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_LogicalChannelRateRelease, PASN_Sequence);
#endif
  public:
    H245_LogicalChannelRateRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// SendTerminalCapabilitySet
//

class H245_SendTerminalCapabilitySet_specificRequest;

class H245_SendTerminalCapabilitySet : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_SendTerminalCapabilitySet, PASN_Choice);
#endif
  public:
    H245_SendTerminalCapabilitySet(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_specificRequest,
      e_genericRequest
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_SendTerminalCapabilitySet_specificRequest &() const;
#else
    operator H245_SendTerminalCapabilitySet_specificRequest &();
    operator const H245_SendTerminalCapabilitySet_specificRequest &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// EncryptionCommand
//

class H245_EncryptionCommand_encryptionAlgorithmID;

class H245_EncryptionCommand : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionCommand, PASN_Choice);
#endif
  public:
    H245_EncryptionCommand(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_encryptionSE,
      e_encryptionIVRequest,
      e_encryptionAlgorithmID
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EncryptionCommand_encryptionAlgorithmID &() const;
#else
    operator H245_EncryptionCommand_encryptionAlgorithmID &();
    operator const H245_EncryptionCommand_encryptionAlgorithmID &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// EndSessionCommand
//

class H245_NonStandardParameter;
class H245_EndSessionCommand_gstnOptions;
class H245_EndSessionCommand_isdnOptions;

class H245_EndSessionCommand : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EndSessionCommand, PASN_Choice);
#endif
  public:
    H245_EndSessionCommand(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_disconnect,
      e_gstnOptions,
      e_isdnOptions
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EndSessionCommand_gstnOptions &() const;
#else
    operator H245_EndSessionCommand_gstnOptions &();
    operator const H245_EndSessionCommand_gstnOptions &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EndSessionCommand_isdnOptions &() const;
#else
    operator H245_EndSessionCommand_isdnOptions &();
    operator const H245_EndSessionCommand_isdnOptions &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ConferenceCommand
//

class H245_LogicalChannelNumber;
class H245_TerminalLabel;
class H245_SubstituteConferenceIDCommand;

class H245_ConferenceCommand : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceCommand, PASN_Choice);
#endif
  public:
    H245_ConferenceCommand(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_broadcastMyLogicalChannel,
      e_cancelBroadcastMyLogicalChannel,
      e_makeTerminalBroadcaster,
      e_cancelMakeTerminalBroadcaster,
      e_sendThisSource,
      e_cancelSendThisSource,
      e_dropConference,
      e_substituteConferenceIDCommand
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalLabel &() const;
#else
    operator H245_TerminalLabel &();
    operator const H245_TerminalLabel &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_SubstituteConferenceIDCommand &() const;
#else
    operator H245_SubstituteConferenceIDCommand &();
    operator const H245_SubstituteConferenceIDCommand &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// SubstituteConferenceIDCommand
//

class H245_SubstituteConferenceIDCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_SubstituteConferenceIDCommand, PASN_Sequence);
#endif
  public:
    H245_SubstituteConferenceIDCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_OctetString m_conferenceIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EncryptionUpdateDirection
//

class H245_EncryptionUpdateDirection : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionUpdateDirection, PASN_Choice);
#endif
  public:
    H245_EncryptionUpdateDirection(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_masterToSlave,
      e_slaveToMaster
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// KeyProtectionMethod
//

class H245_KeyProtectionMethod : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_KeyProtectionMethod, PASN_Sequence);
#endif
  public:
    H245_KeyProtectionMethod(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_secureChannel;
    PASN_Boolean m_sharedSecret;
    PASN_Boolean m_certProtectedKey;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EncryptionUpdateRequest
//

class H245_EncryptionUpdateRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionUpdateRequest, PASN_Sequence);
#endif
  public:
    H245_EncryptionUpdateRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_keyProtectionMethod,
      e_synchFlag
    };

    H245_KeyProtectionMethod m_keyProtectionMethod;
    PASN_Integer m_synchFlag;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// PictureReference
//

class H245_PictureReference : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_PictureReference, PASN_Choice);
#endif
  public:
    H245_PictureReference(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_pictureNumber,
      e_longTermPictureIndex
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223MultiplexReconfiguration
//

class H245_H223MultiplexReconfiguration_h223ModeChange;
class H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag;

class H245_H223MultiplexReconfiguration : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223MultiplexReconfiguration, PASN_Choice);
#endif
  public:
    H245_H223MultiplexReconfiguration(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_h223ModeChange,
      e_h223AnnexADoubleFlag
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223MultiplexReconfiguration_h223ModeChange &() const;
#else
    operator H245_H223MultiplexReconfiguration_h223ModeChange &();
    operator const H245_H223MultiplexReconfiguration_h223ModeChange &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &() const;
#else
    operator H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &();
    operator const H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// FunctionNotUnderstood
//

class H245_RequestMessage;
class H245_ResponseMessage;
class H245_CommandMessage;

class H245_FunctionNotUnderstood : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FunctionNotUnderstood, PASN_Choice);
#endif
  public:
    H245_FunctionNotUnderstood(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_request,
      e_response,
      e_command
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RequestMessage &() const;
#else
    operator H245_RequestMessage &();
    operator const H245_RequestMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ResponseMessage &() const;
#else
    operator H245_ResponseMessage &();
    operator const H245_ResponseMessage &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CommandMessage &() const;
#else
    operator H245_CommandMessage &();
    operator const H245_CommandMessage &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ConferenceIndication
//

class H245_TerminalLabel;
class H245_TerminalYouAreSeeingInSubPictureNumber;
class H245_VideoIndicateCompose;

class H245_ConferenceIndication : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceIndication, PASN_Choice);
#endif
  public:
    H245_ConferenceIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_sbeNumber,
      e_terminalNumberAssign,
      e_terminalJoinedConference,
      e_terminalLeftConference,
      e_seenByAtLeastOneOther,
      e_cancelSeenByAtLeastOneOther,
      e_seenByAll,
      e_cancelSeenByAll,
      e_terminalYouAreSeeing,
      e_requestForFloor,
      e_withdrawChairToken,
      e_floorRequested,
      e_terminalYouAreSeeingInSubPictureNumber,
      e_videoIndicateCompose
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalLabel &() const;
#else
    operator H245_TerminalLabel &();
    operator const H245_TerminalLabel &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalYouAreSeeingInSubPictureNumber &() const;
#else
    operator H245_TerminalYouAreSeeingInSubPictureNumber &();
    operator const H245_TerminalYouAreSeeingInSubPictureNumber &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoIndicateCompose &() const;
#else
    operator H245_VideoIndicateCompose &();
    operator const H245_VideoIndicateCompose &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// TerminalYouAreSeeingInSubPictureNumber
//

class H245_TerminalYouAreSeeingInSubPictureNumber : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalYouAreSeeingInSubPictureNumber, PASN_Sequence);
#endif
  public:
    H245_TerminalYouAreSeeingInSubPictureNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalNumber m_terminalNumber;
    PASN_Integer m_subPictureNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VideoIndicateCompose
//

class H245_VideoIndicateCompose : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VideoIndicateCompose, PASN_Sequence);
#endif
  public:
    H245_VideoIndicateCompose(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_compositionNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223SkewIndication
//

class H245_H223SkewIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223SkewIndication, PASN_Sequence);
#endif
  public:
    H245_H223SkewIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_logicalChannelNumber1;
    H245_LogicalChannelNumber m_logicalChannelNumber2;
    PASN_Integer m_skew;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H2250MaximumSkewIndication
//

class H245_H2250MaximumSkewIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H2250MaximumSkewIndication, PASN_Sequence);
#endif
  public:
    H245_H2250MaximumSkewIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_logicalChannelNumber1;
    H245_LogicalChannelNumber m_logicalChannelNumber2;
    PASN_Integer m_maximumSkew;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MCLocationIndication
//

class H245_MCLocationIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MCLocationIndication, PASN_Sequence);
#endif
  public:
    H245_MCLocationIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TransportAddress m_signalAddress;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VendorIdentification
//

class H245_VendorIdentification : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VendorIdentification, PASN_Sequence);
#endif
  public:
    H245_VendorIdentification(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_productNumber,
      e_versionNumber
    };

    H245_NonStandardIdentifier m_vendor;
    PASN_OctetString m_productNumber;
    PASN_OctetString m_versionNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// IV8
//

class H245_IV8 : public PASN_OctetString
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IV8, PASN_OctetString);
#endif
  public:
    H245_IV8(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);

    H245_IV8(const char * v);
    H245_IV8(const PString & v);
    H245_IV8(const PBYTEArray & v);

    H245_IV8 & operator=(const char * v);
    H245_IV8 & operator=(const PString & v);
    H245_IV8 & operator=(const PBYTEArray & v);
    PObject * Clone() const;
};


//
// IV16
//

class H245_IV16 : public PASN_OctetString
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IV16, PASN_OctetString);
#endif
  public:
    H245_IV16(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);

    H245_IV16(const char * v);
    H245_IV16(const PString & v);
    H245_IV16(const PBYTEArray & v);

    H245_IV16 & operator=(const char * v);
    H245_IV16 & operator=(const PString & v);
    H245_IV16 & operator=(const PBYTEArray & v);
    PObject * Clone() const;
};


//
// Params
//

class H245_Params : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_Params, PASN_Sequence);
#endif
  public:
    H245_Params(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_iv8,
      e_iv16,
      e_iv
    };

    H245_IV8 m_iv8;
    H245_IV16 m_iv16;
    PASN_OctetString m_iv;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UserInputIndication
//

class H245_NonStandardParameter;
class H245_UserInputIndication_userInputSupportIndication;
class H245_UserInputIndication_signal;
class H245_UserInputIndication_signalUpdate;
class H245_UserInputIndication_extendedAlphanumeric;
class H245_UserInputIndication_encryptedAlphanumeric;

class H245_UserInputIndication : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication, PASN_Choice);
#endif
  public:
    H245_UserInputIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_alphanumeric,
      e_userInputSupportIndication,
      e_signal,
      e_signalUpdate,
      e_extendedAlphanumeric,
      e_encryptedAlphanumeric
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UserInputIndication_userInputSupportIndication &() const;
#else
    operator H245_UserInputIndication_userInputSupportIndication &();
    operator const H245_UserInputIndication_userInputSupportIndication &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UserInputIndication_signal &() const;
#else
    operator H245_UserInputIndication_signal &();
    operator const H245_UserInputIndication_signal &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UserInputIndication_signalUpdate &() const;
#else
    operator H245_UserInputIndication_signalUpdate &();
    operator const H245_UserInputIndication_signalUpdate &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UserInputIndication_extendedAlphanumeric &() const;
#else
    operator H245_UserInputIndication_extendedAlphanumeric &();
    operator const H245_UserInputIndication_extendedAlphanumeric &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_UserInputIndication_encryptedAlphanumeric &() const;
#else
    operator H245_UserInputIndication_encryptedAlphanumeric &();
    operator const H245_UserInputIndication_encryptedAlphanumeric &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MobileMultilinkReconfigurationIndication
//

class H245_MobileMultilinkReconfigurationIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MobileMultilinkReconfigurationIndication, PASN_Sequence);
#endif
  public:
    H245_MobileMultilinkReconfigurationIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_sampleSize;
    PASN_Integer m_samplesPerFrame;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_GenericParameter
//

class H245_GenericParameter;

class H245_ArrayOf_GenericParameter : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_GenericParameter, PASN_Array);
#endif
  public:
    H245_ArrayOf_GenericParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_GenericParameter & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// NonStandardIdentifier_h221NonStandard
//

class H245_NonStandardIdentifier_h221NonStandard : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NonStandardIdentifier_h221NonStandard, PASN_Sequence);
#endif
  public:
    H245_NonStandardIdentifier_h221NonStandard(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_t35CountryCode;
    PASN_Integer m_t35Extension;
    PASN_Integer m_manufacturerCode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MasterSlaveDeterminationAck_decision
//

class H245_MasterSlaveDeterminationAck_decision : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MasterSlaveDeterminationAck_decision, PASN_Choice);
#endif
  public:
    H245_MasterSlaveDeterminationAck_decision(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_master,
      e_slave
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MasterSlaveDeterminationReject_cause
//

class H245_MasterSlaveDeterminationReject_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MasterSlaveDeterminationReject_cause, PASN_Choice);
#endif
  public:
    H245_MasterSlaveDeterminationReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_identicalNumbers
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_CapabilityTableEntry
//

class H245_CapabilityTableEntry;

class H245_ArrayOf_CapabilityTableEntry : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_CapabilityTableEntry, PASN_Array);
#endif
  public:
    H245_ArrayOf_CapabilityTableEntry(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CapabilityTableEntry & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_CapabilityDescriptor
//

class H245_CapabilityDescriptor;

class H245_ArrayOf_CapabilityDescriptor : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_CapabilityDescriptor, PASN_Array);
#endif
  public:
    H245_ArrayOf_CapabilityDescriptor(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CapabilityDescriptor & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_AlternativeCapabilitySet
//

class H245_AlternativeCapabilitySet;

class H245_ArrayOf_AlternativeCapabilitySet : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_AlternativeCapabilitySet, PASN_Array);
#endif
  public:
    H245_ArrayOf_AlternativeCapabilitySet(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_AlternativeCapabilitySet & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// TerminalCapabilitySetReject_cause
//

class H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded;

class H245_TerminalCapabilitySetReject_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalCapabilitySetReject_cause, PASN_Choice);
#endif
  public:
    H245_TerminalCapabilitySetReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unspecified,
      e_undefinedTableEntryUsed,
      e_descriptorCapacityExceeded,
      e_tableEntryCapacityExceeded
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &() const;
#else
    operator H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &();
    operator const H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// Capability_h233EncryptionReceiveCapability
//

class H245_Capability_h233EncryptionReceiveCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_Capability_h233EncryptionReceiveCapability, PASN_Sequence);
#endif
  public:
    H245_Capability_h233EncryptionReceiveCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_h233IVResponseTime;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_VCCapability
//

class H245_VCCapability;

class H245_ArrayOf_VCCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_VCCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_VCCapability(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_VCCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// VCCapability_aal1
//

class H245_VCCapability_aal1 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VCCapability_aal1, PASN_Sequence);
#endif
  public:
    H245_VCCapability_aal1(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_nullClockRecovery;
    PASN_Boolean m_srtsClockRecovery;
    PASN_Boolean m_adaptiveClockRecovery;
    PASN_Boolean m_nullErrorCorrection;
    PASN_Boolean m_longInterleaver;
    PASN_Boolean m_shortInterleaver;
    PASN_Boolean m_errorCorrectionOnly;
    PASN_Boolean m_structuredDataTransfer;
    PASN_Boolean m_partiallyFilledCells;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VCCapability_aal5
//

class H245_VCCapability_aal5 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VCCapability_aal5, PASN_Sequence);
#endif
  public:
    H245_VCCapability_aal5(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_forwardMaximumSDUSize;
    PASN_Integer m_backwardMaximumSDUSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223Capability_h223MultiplexTableCapability
//

class H245_H223Capability_h223MultiplexTableCapability_enhanced;

class H245_H223Capability_h223MultiplexTableCapability : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223Capability_h223MultiplexTableCapability, PASN_Choice);
#endif
  public:
    H245_H223Capability_h223MultiplexTableCapability(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_basic,
      e_enhanced
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223Capability_h223MultiplexTableCapability_enhanced &() const;
#else
    operator H245_H223Capability_h223MultiplexTableCapability_enhanced &();
    operator const H245_H223Capability_h223MultiplexTableCapability_enhanced &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223Capability_mobileOperationTransmitCapability
//

class H245_H223Capability_mobileOperationTransmitCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223Capability_mobileOperationTransmitCapability, PASN_Sequence);
#endif
  public:
    H245_H223Capability_mobileOperationTransmitCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_modeChangeCapability;
    PASN_Boolean m_h223AnnexA;
    PASN_Boolean m_h223AnnexADoubleFlag;
    PASN_Boolean m_h223AnnexB;
    PASN_Boolean m_h223AnnexBwithHeader;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223Capability_mobileMultilinkFrameCapability
//

class H245_H223Capability_mobileMultilinkFrameCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223Capability_mobileMultilinkFrameCapability, PASN_Sequence);
#endif
  public:
    H245_H223Capability_mobileMultilinkFrameCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_maximumSampleSize;
    PASN_Integer m_maximumPayloadLength;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H2250Capability_mcCapability
//

class H245_H2250Capability_mcCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H2250Capability_mcCapability, PASN_Sequence);
#endif
  public:
    H245_H2250Capability_mcCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_centralizedConferenceMC;
    PASN_Boolean m_decentralizedConferenceMC;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_RedundancyEncodingCapability
//

class H245_RedundancyEncodingCapability;

class H245_ArrayOf_RedundancyEncodingCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_RedundancyEncodingCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_RedundancyEncodingCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_RedundancyEncodingCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_RTPPayloadType
//

class H245_RTPPayloadType;

class H245_ArrayOf_RTPPayloadType : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_RTPPayloadType, PASN_Array);
#endif
  public:
    H245_ArrayOf_RTPPayloadType(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_RTPPayloadType & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// MediaTransportType_atm-AAL5-compressed
//

class H245_MediaTransportType_atm_AAL5_compressed : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MediaTransportType_atm_AAL5_compressed, PASN_Sequence);
#endif
  public:
    H245_MediaTransportType_atm_AAL5_compressed(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_variable_delta;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_QOSCapability
//

class H245_QOSCapability;

class H245_ArrayOf_QOSCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_QOSCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_QOSCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_QOSCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_MediaChannelCapability
//

class H245_MediaChannelCapability;

class H245_ArrayOf_MediaChannelCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MediaChannelCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_MediaChannelCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MediaChannelCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_CapabilityTableEntryNumber
//

class H245_CapabilityTableEntryNumber;

class H245_ArrayOf_CapabilityTableEntryNumber : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_CapabilityTableEntryNumber, PASN_Array);
#endif
  public:
    H245_ArrayOf_CapabilityTableEntryNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CapabilityTableEntryNumber & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RTPH263VideoRedundancyEncoding_frameToThreadMapping
//

class H245_ArrayOf_RTPH263VideoRedundancyFrameMapping;

class H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping, PASN_Choice);
#endif
  public:
    H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_roundrobin,
      e_custom
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &() const;
#else
    operator H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &();
    operator const H245_ArrayOf_RTPH263VideoRedundancyFrameMapping &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RTPH263VideoRedundancyEncoding_containedThreads
//

class H245_RTPH263VideoRedundancyEncoding_containedThreads : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RTPH263VideoRedundancyEncoding_containedThreads, PASN_Array);
#endif
  public:
    H245_RTPH263VideoRedundancyEncoding_containedThreads(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    PASN_Integer & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RTPH263VideoRedundancyFrameMapping_frameSequence
//

class H245_RTPH263VideoRedundancyFrameMapping_frameSequence : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RTPH263VideoRedundancyFrameMapping_frameSequence, PASN_Array);
#endif
  public:
    H245_RTPH263VideoRedundancyFrameMapping_frameSequence(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    PASN_Integer & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_MediaDistributionCapability
//

class H245_MediaDistributionCapability;

class H245_ArrayOf_MediaDistributionCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MediaDistributionCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_MediaDistributionCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MediaDistributionCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_DataApplicationCapability
//

class H245_DataApplicationCapability;

class H245_ArrayOf_DataApplicationCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_DataApplicationCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_DataApplicationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_DataApplicationCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_VideoCapability
//

class H245_VideoCapability;

class H245_ArrayOf_VideoCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_VideoCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_VideoCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_GenericCapability
//

class H245_GenericCapability;

class H245_ArrayOf_GenericCapability : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_GenericCapability, PASN_Array);
#endif
  public:
    H245_ArrayOf_GenericCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_GenericCapability & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_EnhancementOptions
//

class H245_EnhancementOptions;

class H245_ArrayOf_EnhancementOptions : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_EnhancementOptions, PASN_Array);
#endif
  public:
    H245_ArrayOf_EnhancementOptions(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_EnhancementOptions & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_BEnhancementParameters
//

class H245_BEnhancementParameters;

class H245_ArrayOf_BEnhancementParameters : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_BEnhancementParameters, PASN_Array);
#endif
  public:
    H245_ArrayOf_BEnhancementParameters(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_BEnhancementParameters & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_CustomPictureClockFrequency
//

class H245_CustomPictureClockFrequency;

class H245_ArrayOf_CustomPictureClockFrequency : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_CustomPictureClockFrequency, PASN_Array);
#endif
  public:
    H245_ArrayOf_CustomPictureClockFrequency(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CustomPictureClockFrequency & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_CustomPictureFormat
//

class H245_CustomPictureFormat;

class H245_ArrayOf_CustomPictureFormat : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_CustomPictureFormat, PASN_Array);
#endif
  public:
    H245_ArrayOf_CustomPictureFormat(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CustomPictureFormat & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_H263VideoModeCombos
//

class H245_H263VideoModeCombos;

class H245_ArrayOf_H263VideoModeCombos : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_H263VideoModeCombos, PASN_Array);
#endif
  public:
    H245_ArrayOf_H263VideoModeCombos(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_H263VideoModeCombos & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RefPictureSelection_additionalPictureMemory
//

class H245_RefPictureSelection_additionalPictureMemory : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RefPictureSelection_additionalPictureMemory, PASN_Sequence);
#endif
  public:
    H245_RefPictureSelection_additionalPictureMemory(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_sqcifAdditionalPictureMemory,
      e_qcifAdditionalPictureMemory,
      e_cifAdditionalPictureMemory,
      e_cif4AdditionalPictureMemory,
      e_cif16AdditionalPictureMemory,
      e_bigCpfAdditionalPictureMemory
    };

    PASN_Integer m_sqcifAdditionalPictureMemory;
    PASN_Integer m_qcifAdditionalPictureMemory;
    PASN_Integer m_cifAdditionalPictureMemory;
    PASN_Integer m_cif4AdditionalPictureMemory;
    PASN_Integer m_cif16AdditionalPictureMemory;
    PASN_Integer m_bigCpfAdditionalPictureMemory;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RefPictureSelection_videoBackChannelSend
//

class H245_RefPictureSelection_videoBackChannelSend : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RefPictureSelection_videoBackChannelSend, PASN_Choice);
#endif
  public:
    H245_RefPictureSelection_videoBackChannelSend(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_none,
      e_ackMessageOnly,
      e_nackMessageOnly,
      e_ackOrNackMessageOnly,
      e_ackAndNackMessage
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// CustomPictureFormat_pixelAspectInformation
//

class H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode;
class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR;

class H245_CustomPictureFormat_pixelAspectInformation : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation, PASN_Choice);
#endif
  public:
    H245_CustomPictureFormat_pixelAspectInformation(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_anyPixelAspectRatio,
      e_pixelAspectCode,
      e_extendedPAR
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &() const;
#else
    operator H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &();
    operator const H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &() const;
#else
    operator H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &();
    operator const H245_CustomPictureFormat_pixelAspectInformation_extendedPAR &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_H263ModeComboFlags
//

class H245_H263ModeComboFlags;

class H245_ArrayOf_H263ModeComboFlags : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_H263ModeComboFlags, PASN_Array);
#endif
  public:
    H245_ArrayOf_H263ModeComboFlags(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_H263ModeComboFlags & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// AudioCapability_g7231
//

class H245_AudioCapability_g7231 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AudioCapability_g7231, PASN_Sequence);
#endif
  public:
    H245_AudioCapability_g7231(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_maxAl_sduAudioFrames;
    PASN_Boolean m_silenceSuppression;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// G7231AnnexCCapability_g723AnnexCAudioMode
//

class H245_G7231AnnexCCapability_g723AnnexCAudioMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_G7231AnnexCCapability_g723AnnexCAudioMode, PASN_Sequence);
#endif
  public:
    H245_G7231AnnexCCapability_g723AnnexCAudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_highRateMode0;
    PASN_Integer m_highRateMode1;
    PASN_Integer m_lowRateMode0;
    PASN_Integer m_lowRateMode1;
    PASN_Integer m_sidMode0;
    PASN_Integer m_sidMode1;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataApplicationCapability_application
//

class H245_NonStandardParameter;
class H245_DataProtocolCapability;
class H245_DataApplicationCapability_application_t84;
class H245_DataApplicationCapability_application_nlpid;
class H245_DataApplicationCapability_application_t38fax;
class H245_GenericCapability;

class H245_DataApplicationCapability_application : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataApplicationCapability_application, PASN_Choice);
#endif
  public:
    H245_DataApplicationCapability_application(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_t120,
      e_dsm_cc,
      e_userData,
      e_t84,
      e_t434,
      e_h224,
      e_nlpid,
      e_dsvdControl,
      e_h222DataPartitioning,
      e_t30fax,
      e_t140,
      e_t38fax,
      e_genericDataCapability
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataProtocolCapability &() const;
#else
    operator H245_DataProtocolCapability &();
    operator const H245_DataProtocolCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataApplicationCapability_application_t84 &() const;
#else
    operator H245_DataApplicationCapability_application_t84 &();
    operator const H245_DataApplicationCapability_application_t84 &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataApplicationCapability_application_nlpid &() const;
#else
    operator H245_DataApplicationCapability_application_nlpid &();
    operator const H245_DataApplicationCapability_application_nlpid &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataApplicationCapability_application_t38fax &() const;
#else
    operator H245_DataApplicationCapability_application_t38fax &();
    operator const H245_DataApplicationCapability_application_t38fax &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// DataProtocolCapability_v76wCompression
//

class H245_CompressionType;

class H245_DataProtocolCapability_v76wCompression : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataProtocolCapability_v76wCompression, PASN_Choice);
#endif
  public:
    H245_DataProtocolCapability_v76wCompression(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_transmitCompression,
      e_receiveCompression,
      e_transmitAndReceiveCompression
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CompressionType &() const;
#else
    operator H245_CompressionType &();
    operator const H245_CompressionType &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// T84Profile_t84Restricted
//

class H245_T84Profile_t84Restricted : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_T84Profile_t84Restricted, PASN_Sequence);
#endif
  public:
    H245_T84Profile_t84Restricted(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_qcif;
    PASN_Boolean m_cif;
    PASN_Boolean m_ccir601Seq;
    PASN_Boolean m_ccir601Prog;
    PASN_Boolean m_hdtvSeq;
    PASN_Boolean m_hdtvProg;
    PASN_Boolean m_g3FacsMH200x100;
    PASN_Boolean m_g3FacsMH200x200;
    PASN_Boolean m_g4FacsMMR200x100;
    PASN_Boolean m_g4FacsMMR200x200;
    PASN_Boolean m_jbig200x200Seq;
    PASN_Boolean m_jbig200x200Prog;
    PASN_Boolean m_jbig300x300Seq;
    PASN_Boolean m_jbig300x300Prog;
    PASN_Boolean m_digPhotoLow;
    PASN_Boolean m_digPhotoMedSeq;
    PASN_Boolean m_digPhotoMedProg;
    PASN_Boolean m_digPhotoHighSeq;
    PASN_Boolean m_digPhotoHighProg;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// T38FaxUdpOptions_t38FaxUdpEC
//

class H245_T38FaxUdpOptions_t38FaxUdpEC : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_T38FaxUdpOptions_t38FaxUdpEC, PASN_Choice);
#endif
  public:
    H245_T38FaxUdpOptions_t38FaxUdpEC(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_t38UDPFEC,
      e_t38UDPRedundancy
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_NonStandardParameter
//

class H245_NonStandardParameter;

class H245_ArrayOf_NonStandardParameter : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_NonStandardParameter, PASN_Array);
#endif
  public:
    H245_ArrayOf_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_NonStandardParameter & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_ParameterIdentifier
//

class H245_ParameterIdentifier;

class H245_ArrayOf_ParameterIdentifier : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_ParameterIdentifier, PASN_Array);
#endif
  public:
    H245_ArrayOf_ParameterIdentifier(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_ParameterIdentifier & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// FECCapability_rfc2733Format
//

class H245_MaxRedundancy;

class H245_FECCapability_rfc2733Format : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECCapability_rfc2733Format, PASN_Choice);
#endif
  public:
    H245_FECCapability_rfc2733Format(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rfc2733rfc2198,
      e_rfc2733sameport,
      e_rfc2733diffport
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MaxRedundancy &() const;
#else
    operator H245_MaxRedundancy &();
    operator const H245_MaxRedundancy &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NetworkAccessParameters_distribution
//

class H245_NetworkAccessParameters_distribution : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NetworkAccessParameters_distribution, PASN_Choice);
#endif
  public:
    H245_NetworkAccessParameters_distribution(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unicast,
      e_multicast
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NetworkAccessParameters_networkAddress
//

class H245_Q2931Address;
class H245_TransportAddress;

class H245_NetworkAccessParameters_networkAddress : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NetworkAccessParameters_networkAddress, PASN_Choice);
#endif
  public:
    H245_NetworkAccessParameters_networkAddress(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_q2931Address,
      e_e164Address,
      e_localAreaAddress
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_Q2931Address &() const;
#else
    operator H245_Q2931Address &();
    operator const H245_Q2931Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TransportAddress &() const;
#else
    operator H245_TransportAddress &();
    operator const H245_TransportAddress &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NetworkAccessParameters_t120SetupProcedure
//

class H245_NetworkAccessParameters_t120SetupProcedure : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NetworkAccessParameters_t120SetupProcedure, PASN_Choice);
#endif
  public:
    H245_NetworkAccessParameters_t120SetupProcedure(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_originateCall,
      e_waitForCall,
      e_issueQuery
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// Q2931Address_address
//

class H245_Q2931Address_address : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_Q2931Address_address, PASN_Choice);
#endif
  public:
    H245_Q2931Address_address(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_internationalNumber,
      e_nsapAddress
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H235Media_mediaType
//

class H245_NonStandardParameter;
class H245_VideoCapability;
class H245_AudioCapability;
class H245_DataApplicationCapability;
class H245_RedundancyEncoding;
class H245_MultiplePayloadStream;
class H245_DepFECData;
class H245_FECData;

class H245_H235Media_mediaType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H235Media_mediaType, PASN_Choice);
#endif
  public:
    H245_H235Media_mediaType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_videoData,
      e_audioData,
      e_data,
      e_redundancyEncoding,
      e_multiplePayloadStream,
      e_depFec,
      e_fec
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoCapability &() const;
#else
    operator H245_VideoCapability &();
    operator const H245_VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioCapability &() const;
#else
    operator H245_AudioCapability &();
    operator const H245_AudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataApplicationCapability &() const;
#else
    operator H245_DataApplicationCapability &();
    operator const H245_DataApplicationCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RedundancyEncoding &() const;
#else
    operator H245_RedundancyEncoding &();
    operator const H245_RedundancyEncoding &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultiplePayloadStream &() const;
#else
    operator H245_MultiplePayloadStream &();
    operator const H245_MultiplePayloadStream &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECData &() const;
#else
    operator H245_DepFECData &();
    operator const H245_DepFECData &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECData &() const;
#else
    operator H245_FECData &();
    operator const H245_FECData &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223LogicalChannelParameters_adaptationLayerType
//

class H245_NonStandardParameter;
class H245_H223LogicalChannelParameters_adaptationLayerType_al3;
class H245_H223AL1MParameters;
class H245_H223AL2MParameters;
class H245_H223AL3MParameters;

class H245_H223LogicalChannelParameters_adaptationLayerType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223LogicalChannelParameters_adaptationLayerType, PASN_Choice);
#endif
  public:
    H245_H223LogicalChannelParameters_adaptationLayerType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_al1Framed,
      e_al1NotFramed,
      e_al2WithoutSequenceNumbers,
      e_al2WithSequenceNumbers,
      e_al3,
      e_al1M,
      e_al2M,
      e_al3M
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223LogicalChannelParameters_adaptationLayerType_al3 &() const;
#else
    operator H245_H223LogicalChannelParameters_adaptationLayerType_al3 &();
    operator const H245_H223LogicalChannelParameters_adaptationLayerType_al3 &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AL1MParameters &() const;
#else
    operator H245_H223AL1MParameters &();
    operator const H245_H223AL1MParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AL2MParameters &() const;
#else
    operator H245_H223AL2MParameters &();
    operator const H245_H223AL2MParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AL3MParameters &() const;
#else
    operator H245_H223AL3MParameters &();
    operator const H245_H223AL3MParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL1MParameters_transferMode
//

class H245_H223AL1MParameters_transferMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL1MParameters_transferMode, PASN_Choice);
#endif
  public:
    H245_H223AL1MParameters_transferMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_framed,
      e_unframed
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL1MParameters_headerFEC
//

class H245_H223AL1MParameters_headerFEC : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL1MParameters_headerFEC, PASN_Choice);
#endif
  public:
    H245_H223AL1MParameters_headerFEC(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_sebch16_7,
      e_golay24_12
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL1MParameters_crcLength
//

class H245_H223AL1MParameters_crcLength : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL1MParameters_crcLength, PASN_Choice);
#endif
  public:
    H245_H223AL1MParameters_crcLength(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_crc4bit,
      e_crc12bit,
      e_crc20bit,
      e_crc28bit,
      e_crc8bit,
      e_crc16bit,
      e_crc32bit,
      e_crcNotUsed
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL1MParameters_arqType
//

class H245_H223AnnexCArqParameters;

class H245_H223AL1MParameters_arqType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL1MParameters_arqType, PASN_Choice);
#endif
  public:
    H245_H223AL1MParameters_arqType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noArq,
      e_typeIArq,
      e_typeIIArq
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AnnexCArqParameters &() const;
#else
    operator H245_H223AnnexCArqParameters &();
    operator const H245_H223AnnexCArqParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL2MParameters_headerFEC
//

class H245_H223AL2MParameters_headerFEC : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL2MParameters_headerFEC, PASN_Choice);
#endif
  public:
    H245_H223AL2MParameters_headerFEC(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_sebch16_5,
      e_golay24_12
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL3MParameters_headerFormat
//

class H245_H223AL3MParameters_headerFormat : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL3MParameters_headerFormat, PASN_Choice);
#endif
  public:
    H245_H223AL3MParameters_headerFormat(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_sebch16_7,
      e_golay24_12
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL3MParameters_crcLength
//

class H245_H223AL3MParameters_crcLength : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL3MParameters_crcLength, PASN_Choice);
#endif
  public:
    H245_H223AL3MParameters_crcLength(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_crc4bit,
      e_crc12bit,
      e_crc20bit,
      e_crc28bit,
      e_crc8bit,
      e_crc16bit,
      e_crc32bit,
      e_crcNotUsed
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AL3MParameters_arqType
//

class H245_H223AnnexCArqParameters;

class H245_H223AL3MParameters_arqType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL3MParameters_arqType, PASN_Choice);
#endif
  public:
    H245_H223AL3MParameters_arqType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noArq,
      e_typeIArq,
      e_typeIIArq
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AnnexCArqParameters &() const;
#else
    operator H245_H223AnnexCArqParameters &();
    operator const H245_H223AnnexCArqParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223AnnexCArqParameters_numberOfRetransmissions
//

class H245_H223AnnexCArqParameters_numberOfRetransmissions : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AnnexCArqParameters_numberOfRetransmissions, PASN_Choice);
#endif
  public:
    H245_H223AnnexCArqParameters_numberOfRetransmissions(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_finite,
      e_infinite
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// V76LogicalChannelParameters_suspendResume
//

class H245_V76LogicalChannelParameters_suspendResume : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76LogicalChannelParameters_suspendResume, PASN_Choice);
#endif
  public:
    H245_V76LogicalChannelParameters_suspendResume(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noSuspendResume,
      e_suspendResumewAddress,
      e_suspendResumewoAddress
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// V76LogicalChannelParameters_mode
//

class H245_V76LogicalChannelParameters_mode_eRM;

class H245_V76LogicalChannelParameters_mode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76LogicalChannelParameters_mode, PASN_Choice);
#endif
  public:
    H245_V76LogicalChannelParameters_mode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_eRM,
      e_uNERM
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_V76LogicalChannelParameters_mode_eRM &() const;
#else
    operator H245_V76LogicalChannelParameters_mode_eRM &();
    operator const H245_V76LogicalChannelParameters_mode_eRM &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H2250LogicalChannelParameters_mediaPacketization
//

class H245_RTPPayloadType;

class H245_H2250LogicalChannelParameters_mediaPacketization : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H2250LogicalChannelParameters_mediaPacketization, PASN_Choice);
#endif
  public:
    H245_H2250LogicalChannelParameters_mediaPacketization(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_h261aVideoPacketization,
      e_rtpPayloadType
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_RTPPayloadType &() const;
#else
    operator H245_RTPPayloadType &();
    operator const H245_RTPPayloadType &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RTPPayloadType_payloadDescriptor
//

class H245_NonStandardParameter;

class H245_RTPPayloadType_payloadDescriptor : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RTPPayloadType_payloadDescriptor, PASN_Choice);
#endif
  public:
    H245_RTPPayloadType_payloadDescriptor(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandardIdentifier,
      e_rfc_number,
      e_oid
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_MultiplePayloadStreamElement
//

class H245_MultiplePayloadStreamElement;

class H245_ArrayOf_MultiplePayloadStreamElement : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MultiplePayloadStreamElement, PASN_Array);
#endif
  public:
    H245_ArrayOf_MultiplePayloadStreamElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MultiplePayloadStreamElement & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// UnicastAddress_iPAddress
//

class H245_UnicastAddress_iPAddress : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UnicastAddress_iPAddress, PASN_Sequence);
#endif
  public:
    H245_UnicastAddress_iPAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_OctetString m_network;
    PASN_Integer m_tsapIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UnicastAddress_iPXAddress
//

class H245_UnicastAddress_iPXAddress : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UnicastAddress_iPXAddress, PASN_Sequence);
#endif
  public:
    H245_UnicastAddress_iPXAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_OctetString m_node;
    PASN_OctetString m_netnum;
    PASN_OctetString m_tsapIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UnicastAddress_iP6Address
//

class H245_UnicastAddress_iP6Address : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UnicastAddress_iP6Address, PASN_Sequence);
#endif
  public:
    H245_UnicastAddress_iP6Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_OctetString m_network;
    PASN_Integer m_tsapIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MulticastAddress_iPAddress
//

class H245_MulticastAddress_iPAddress : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MulticastAddress_iPAddress, PASN_Sequence);
#endif
  public:
    H245_MulticastAddress_iPAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_OctetString m_network;
    PASN_Integer m_tsapIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MulticastAddress_iP6Address
//

class H245_MulticastAddress_iP6Address : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MulticastAddress_iP6Address, PASN_Sequence);
#endif
  public:
    H245_MulticastAddress_iP6Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_OctetString m_network;
    PASN_Integer m_tsapIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_EscrowData
//

class H245_EscrowData;

class H245_ArrayOf_EscrowData : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_EscrowData, PASN_Array);
#endif
  public:
    H245_ArrayOf_EscrowData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_EscrowData & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannelAck_forwardMultiplexAckParameters
//

class H245_H2250LogicalChannelAckParameters;

class H245_OpenLogicalChannelAck_forwardMultiplexAckParameters : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannelAck_forwardMultiplexAckParameters, PASN_Choice);
#endif
  public:
    H245_OpenLogicalChannelAck_forwardMultiplexAckParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_h2250LogicalChannelAckParameters
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H2250LogicalChannelAckParameters &() const;
#else
    operator H245_H2250LogicalChannelAckParameters &();
    operator const H245_H2250LogicalChannelAckParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// OpenLogicalChannelReject_cause
//

class H245_OpenLogicalChannelReject_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannelReject_cause, PASN_Choice);
#endif
  public:
    H245_OpenLogicalChannelReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unspecified,
      e_unsuitableReverseParameters,
      e_dataTypeNotSupported,
      e_dataTypeNotAvailable,
      e_unknownDataType,
      e_dataTypeALCombinationNotSupported,
      e_multicastChannelNotAllowed,
      e_insufficientBandwidth,
      e_separateStackEstablishmentFailed,
      e_invalidSessionID,
      e_masterSlaveConflict,
      e_waitForCommunicationMode,
      e_invalidDependentChannel,
      e_replacementForRejected,
      e_securityDenied
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// CloseLogicalChannel_source
//

class H245_CloseLogicalChannel_source : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CloseLogicalChannel_source, PASN_Choice);
#endif
  public:
    H245_CloseLogicalChannel_source(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_user,
      e_lcse
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// CloseLogicalChannel_reason
//

class H245_CloseLogicalChannel_reason : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CloseLogicalChannel_reason, PASN_Choice);
#endif
  public:
    H245_CloseLogicalChannel_reason(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unknown,
      e_reopen,
      e_reservationFailure
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RequestChannelClose_reason
//

class H245_RequestChannelClose_reason : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestChannelClose_reason, PASN_Choice);
#endif
  public:
    H245_RequestChannelClose_reason(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unknown,
      e_normal,
      e_reopen,
      e_reservationFailure
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RequestChannelCloseReject_cause
//

class H245_RequestChannelCloseReject_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestChannelCloseReject_cause, PASN_Choice);
#endif
  public:
    H245_RequestChannelCloseReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unspecified
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_MultiplexEntryDescriptor
//

class H245_MultiplexEntryDescriptor;

class H245_ArrayOf_MultiplexEntryDescriptor : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MultiplexEntryDescriptor, PASN_Array);
#endif
  public:
    H245_ArrayOf_MultiplexEntryDescriptor(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MultiplexEntryDescriptor & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_MultiplexElement
//

class H245_MultiplexElement;

class H245_ArrayOf_MultiplexElement : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MultiplexElement, PASN_Array);
#endif
  public:
    H245_ArrayOf_MultiplexElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MultiplexElement & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// MultiplexElement_type
//

class H245_ArrayOf_MultiplexElement;

class H245_MultiplexElement_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexElement_type, PASN_Choice);
#endif
  public:
    H245_MultiplexElement_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_logicalChannelNumber,
      e_subElementList
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_MultiplexElement &() const;
#else
    operator H245_ArrayOf_MultiplexElement &();
    operator const H245_ArrayOf_MultiplexElement &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultiplexElement_repeatCount
//

class H245_MultiplexElement_repeatCount : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexElement_repeatCount, PASN_Choice);
#endif
  public:
    H245_MultiplexElement_repeatCount(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_finite,
      e_untilClosingFlag
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_MultiplexTableEntryNumber
//

class H245_MultiplexTableEntryNumber;

class H245_ArrayOf_MultiplexTableEntryNumber : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MultiplexTableEntryNumber, PASN_Array);
#endif
  public:
    H245_ArrayOf_MultiplexTableEntryNumber(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MultiplexTableEntryNumber & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_MultiplexEntryRejectionDescriptions
//

class H245_MultiplexEntryRejectionDescriptions;

class H245_ArrayOf_MultiplexEntryRejectionDescriptions : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MultiplexEntryRejectionDescriptions, PASN_Array);
#endif
  public:
    H245_ArrayOf_MultiplexEntryRejectionDescriptions(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MultiplexEntryRejectionDescriptions & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// MultiplexEntryRejectionDescriptions_cause
//

class H245_MultiplexEntryRejectionDescriptions_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexEntryRejectionDescriptions_cause, PASN_Choice);
#endif
  public:
    H245_MultiplexEntryRejectionDescriptions_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unspecifiedCause,
      e_descriptorTooComplex
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_RequestMultiplexEntryRejectionDescriptions
//

class H245_RequestMultiplexEntryRejectionDescriptions;

class H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions, PASN_Array);
#endif
  public:
    H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_RequestMultiplexEntryRejectionDescriptions & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RequestMultiplexEntryRejectionDescriptions_cause
//

class H245_RequestMultiplexEntryRejectionDescriptions_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMultiplexEntryRejectionDescriptions_cause, PASN_Choice);
#endif
  public:
    H245_RequestMultiplexEntryRejectionDescriptions_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unspecifiedCause
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_ModeDescription
//

class H245_ModeDescription;

class H245_ArrayOf_ModeDescription : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_ModeDescription, PASN_Array);
#endif
  public:
    H245_ArrayOf_ModeDescription(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_ModeDescription & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RequestModeAck_response
//

class H245_RequestModeAck_response : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestModeAck_response, PASN_Choice);
#endif
  public:
    H245_RequestModeAck_response(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_willTransmitMostPreferredMode,
      e_willTransmitLessPreferredMode
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RequestModeReject_cause
//

class H245_RequestModeReject_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestModeReject_cause, PASN_Choice);
#endif
  public:
    H245_RequestModeReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_modeUnavailable,
      e_multipointConstraint,
      e_requestDenied
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H235Mode_mediaMode
//

class H245_NonStandardParameter;
class H245_VideoMode;
class H245_AudioMode;
class H245_DataMode;

class H245_H235Mode_mediaMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H235Mode_mediaMode, PASN_Choice);
#endif
  public:
    H245_H235Mode_mediaMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_videoMode,
      e_audioMode,
      e_dataMode
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoMode &() const;
#else
    operator H245_VideoMode &();
    operator const H245_VideoMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioMode &() const;
#else
    operator H245_AudioMode &();
    operator const H245_AudioMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataMode &() const;
#else
    operator H245_DataMode &();
    operator const H245_DataMode &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_RedundancyEncodingDTModeElement
//

class H245_RedundancyEncodingDTModeElement;

class H245_ArrayOf_RedundancyEncodingDTModeElement : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_RedundancyEncodingDTModeElement, PASN_Array);
#endif
  public:
    H245_ArrayOf_RedundancyEncodingDTModeElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_RedundancyEncodingDTModeElement & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RedundancyEncodingDTModeElement_type
//

class H245_NonStandardParameter;
class H245_VideoMode;
class H245_AudioMode;
class H245_DataMode;
class H245_EncryptionMode;
class H245_H235Mode;
class H245_FECMode;

class H245_RedundancyEncodingDTModeElement_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingDTModeElement_type, PASN_Choice);
#endif
  public:
    H245_RedundancyEncodingDTModeElement_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_videoMode,
      e_audioMode,
      e_dataMode,
      e_encryptionMode,
      e_h235Mode,
      e_fecMode
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoMode &() const;
#else
    operator H245_VideoMode &();
    operator const H245_VideoMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioMode &() const;
#else
    operator H245_AudioMode &();
    operator const H245_AudioMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataMode &() const;
#else
    operator H245_DataMode &();
    operator const H245_DataMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EncryptionMode &() const;
#else
    operator H245_EncryptionMode &();
    operator const H245_EncryptionMode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H235Mode &() const;
#else
    operator H245_H235Mode &();
    operator const H245_H235Mode &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECMode &() const;
#else
    operator H245_FECMode &();
    operator const H245_FECMode &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_MultiplePayloadStreamElementMode
//

class H245_MultiplePayloadStreamElementMode;

class H245_ArrayOf_MultiplePayloadStreamElementMode : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_MultiplePayloadStreamElementMode, PASN_Array);
#endif
  public:
    H245_ArrayOf_MultiplePayloadStreamElementMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_MultiplePayloadStreamElementMode & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// FECMode_rfc2733Format
//

class H245_MaxRedundancy;

class H245_FECMode_rfc2733Format : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECMode_rfc2733Format, PASN_Choice);
#endif
  public:
    H245_FECMode_rfc2733Format(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rfc2733rfc2198,
      e_rfc2733sameport,
      e_rfc2733diffport
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MaxRedundancy &() const;
#else
    operator H245_MaxRedundancy &();
    operator const H245_MaxRedundancy &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223ModeParameters_adaptationLayerType
//

class H245_NonStandardParameter;
class H245_H223ModeParameters_adaptationLayerType_al3;
class H245_H223AL1MParameters;
class H245_H223AL2MParameters;
class H245_H223AL3MParameters;

class H245_H223ModeParameters_adaptationLayerType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223ModeParameters_adaptationLayerType, PASN_Choice);
#endif
  public:
    H245_H223ModeParameters_adaptationLayerType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_al1Framed,
      e_al1NotFramed,
      e_al2WithoutSequenceNumbers,
      e_al2WithSequenceNumbers,
      e_al3,
      e_al1M,
      e_al2M,
      e_al3M
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223ModeParameters_adaptationLayerType_al3 &() const;
#else
    operator H245_H223ModeParameters_adaptationLayerType_al3 &();
    operator const H245_H223ModeParameters_adaptationLayerType_al3 &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AL1MParameters &() const;
#else
    operator H245_H223AL1MParameters &();
    operator const H245_H223AL1MParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AL2MParameters &() const;
#else
    operator H245_H223AL2MParameters &();
    operator const H245_H223AL2MParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223AL3MParameters &() const;
#else
    operator H245_H223AL3MParameters &();
    operator const H245_H223AL3MParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// RedundancyEncodingMode_secondaryEncoding
//

class H245_NonStandardParameter;
class H245_AudioMode;

class H245_RedundancyEncodingMode_secondaryEncoding : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingMode_secondaryEncoding, PASN_Choice);
#endif
  public:
    H245_RedundancyEncodingMode_secondaryEncoding(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_audioData
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioMode &() const;
#else
    operator H245_AudioMode &();
    operator const H245_AudioMode &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H261VideoMode_resolution
//

class H245_H261VideoMode_resolution : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H261VideoMode_resolution, PASN_Choice);
#endif
  public:
    H245_H261VideoMode_resolution(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_qcif,
      e_cif
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H262VideoMode_profileAndLevel
//

class H245_H262VideoMode_profileAndLevel : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H262VideoMode_profileAndLevel, PASN_Choice);
#endif
  public:
    H245_H262VideoMode_profileAndLevel(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_profileAndLevel_SPatML,
      e_profileAndLevel_MPatLL,
      e_profileAndLevel_MPatML,
      e_profileAndLevel_MPatH_14,
      e_profileAndLevel_MPatHL,
      e_profileAndLevel_SNRatLL,
      e_profileAndLevel_SNRatML,
      e_profileAndLevel_SpatialatH_14,
      e_profileAndLevel_HPatML,
      e_profileAndLevel_HPatH_14,
      e_profileAndLevel_HPatHL
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H263VideoMode_resolution
//

class H245_H263VideoMode_resolution : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H263VideoMode_resolution, PASN_Choice);
#endif
  public:
    H245_H263VideoMode_resolution(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_sqcif,
      e_qcif,
      e_cif,
      e_cif4,
      e_cif16,
      e_custom
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// AudioMode_g7231
//

class H245_AudioMode_g7231 : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AudioMode_g7231, PASN_Choice);
#endif
  public:
    H245_AudioMode_g7231(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noSilenceSuppressionLowRate,
      e_noSilenceSuppressionHighRate,
      e_silenceSuppressionLowRate,
      e_silenceSuppressionHighRate
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IS11172AudioMode_audioLayer
//

class H245_IS11172AudioMode_audioLayer : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS11172AudioMode_audioLayer, PASN_Choice);
#endif
  public:
    H245_IS11172AudioMode_audioLayer(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_audioLayer1,
      e_audioLayer2,
      e_audioLayer3
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IS11172AudioMode_audioSampling
//

class H245_IS11172AudioMode_audioSampling : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS11172AudioMode_audioSampling, PASN_Choice);
#endif
  public:
    H245_IS11172AudioMode_audioSampling(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_audioSampling32k,
      e_audioSampling44k1,
      e_audioSampling48k
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IS11172AudioMode_multichannelType
//

class H245_IS11172AudioMode_multichannelType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS11172AudioMode_multichannelType, PASN_Choice);
#endif
  public:
    H245_IS11172AudioMode_multichannelType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_singleChannel,
      e_twoChannelStereo,
      e_twoChannelDual
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IS13818AudioMode_audioLayer
//

class H245_IS13818AudioMode_audioLayer : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS13818AudioMode_audioLayer, PASN_Choice);
#endif
  public:
    H245_IS13818AudioMode_audioLayer(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_audioLayer1,
      e_audioLayer2,
      e_audioLayer3
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IS13818AudioMode_audioSampling
//

class H245_IS13818AudioMode_audioSampling : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS13818AudioMode_audioSampling, PASN_Choice);
#endif
  public:
    H245_IS13818AudioMode_audioSampling(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_audioSampling16k,
      e_audioSampling22k05,
      e_audioSampling24k,
      e_audioSampling32k,
      e_audioSampling44k1,
      e_audioSampling48k
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// IS13818AudioMode_multichannelType
//

class H245_IS13818AudioMode_multichannelType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS13818AudioMode_multichannelType, PASN_Choice);
#endif
  public:
    H245_IS13818AudioMode_multichannelType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_singleChannel,
      e_twoChannelStereo,
      e_twoChannelDual,
      e_threeChannels2_1,
      e_threeChannels3_0,
      e_fourChannels2_0_2_0,
      e_fourChannels2_2,
      e_fourChannels3_1,
      e_fiveChannels3_0_2_0,
      e_fiveChannels3_2
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// G7231AnnexCMode_g723AnnexCAudioMode
//

class H245_G7231AnnexCMode_g723AnnexCAudioMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_G7231AnnexCMode_g723AnnexCAudioMode, PASN_Sequence);
#endif
  public:
    H245_G7231AnnexCMode_g723AnnexCAudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_highRateMode0;
    PASN_Integer m_highRateMode1;
    PASN_Integer m_lowRateMode0;
    PASN_Integer m_lowRateMode1;
    PASN_Integer m_sidMode0;
    PASN_Integer m_sidMode1;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataMode_application
//

class H245_NonStandardParameter;
class H245_DataProtocolCapability;
class H245_DataMode_application_nlpid;
class H245_DataMode_application_t38fax;
class H245_GenericCapability;

class H245_DataMode_application : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataMode_application, PASN_Choice);
#endif
  public:
    H245_DataMode_application(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_t120,
      e_dsm_cc,
      e_userData,
      e_t84,
      e_t434,
      e_h224,
      e_nlpid,
      e_dsvdControl,
      e_h222DataPartitioning,
      e_t30fax,
      e_t140,
      e_t38fax,
      e_genericDataMode
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataProtocolCapability &() const;
#else
    operator H245_DataProtocolCapability &();
    operator const H245_DataProtocolCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataMode_application_nlpid &() const;
#else
    operator H245_DataMode_application_nlpid &();
    operator const H245_DataMode_application_nlpid &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataMode_application_t38fax &() const;
#else
    operator H245_DataMode_application_t38fax &();
    operator const H245_DataMode_application_t38fax &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_GenericCapability &() const;
#else
    operator H245_GenericCapability &();
    operator const H245_GenericCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MaintenanceLoopRequest_type
//

class H245_LogicalChannelNumber;

class H245_MaintenanceLoopRequest_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopRequest_type, PASN_Choice);
#endif
  public:
    H245_MaintenanceLoopRequest_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_systemLoop,
      e_mediaLoop,
      e_logicalChannelLoop
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MaintenanceLoopAck_type
//

class H245_LogicalChannelNumber;

class H245_MaintenanceLoopAck_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopAck_type, PASN_Choice);
#endif
  public:
    H245_MaintenanceLoopAck_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_systemLoop,
      e_mediaLoop,
      e_logicalChannelLoop
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MaintenanceLoopReject_type
//

class H245_LogicalChannelNumber;

class H245_MaintenanceLoopReject_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopReject_type, PASN_Choice);
#endif
  public:
    H245_MaintenanceLoopReject_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_systemLoop,
      e_mediaLoop,
      e_logicalChannelLoop
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MaintenanceLoopReject_cause
//

class H245_MaintenanceLoopReject_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopReject_cause, PASN_Choice);
#endif
  public:
    H245_MaintenanceLoopReject_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_canNotPerformLoop
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_CommunicationModeTableEntry
//

class H245_CommunicationModeTableEntry;

class H245_ArrayOf_CommunicationModeTableEntry : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_CommunicationModeTableEntry, PASN_Array);
#endif
  public:
    H245_ArrayOf_CommunicationModeTableEntry(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CommunicationModeTableEntry & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// CommunicationModeTableEntry_dataType
//

class H245_VideoCapability;
class H245_AudioCapability;
class H245_DataApplicationCapability;

class H245_CommunicationModeTableEntry_dataType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CommunicationModeTableEntry_dataType, PASN_Choice);
#endif
  public:
    H245_CommunicationModeTableEntry_dataType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_videoData,
      e_audioData,
      e_data
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VideoCapability &() const;
#else
    operator H245_VideoCapability &();
    operator const H245_VideoCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_AudioCapability &() const;
#else
    operator H245_AudioCapability &();
    operator const H245_AudioCapability &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DataApplicationCapability &() const;
#else
    operator H245_DataApplicationCapability &();
    operator const H245_DataApplicationCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_TerminalLabel
//

class H245_TerminalLabel;

class H245_ArrayOf_TerminalLabel : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_TerminalLabel, PASN_Array);
#endif
  public:
    H245_ArrayOf_TerminalLabel(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_TerminalLabel & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_makeMeChairResponse
//

class H245_ConferenceResponse_makeMeChairResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_makeMeChairResponse, PASN_Choice);
#endif
  public:
    H245_ConferenceResponse_makeMeChairResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_grantedChairToken,
      e_deniedChairToken
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ConferenceResponse_extensionAddressResponse
//

class H245_ConferenceResponse_extensionAddressResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_extensionAddressResponse, PASN_Sequence);
#endif
  public:
    H245_ConferenceResponse_extensionAddressResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalID m_extensionAddress;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_broadcastMyLogicalChannelResponse
//

class H245_ConferenceResponse_broadcastMyLogicalChannelResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_broadcastMyLogicalChannelResponse, PASN_Choice);
#endif
  public:
    H245_ConferenceResponse_broadcastMyLogicalChannelResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_grantedBroadcastMyLogicalChannel,
      e_deniedBroadcastMyLogicalChannel
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ConferenceResponse_makeTerminalBroadcasterResponse
//

class H245_ConferenceResponse_makeTerminalBroadcasterResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_makeTerminalBroadcasterResponse, PASN_Choice);
#endif
  public:
    H245_ConferenceResponse_makeTerminalBroadcasterResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_grantedMakeTerminalBroadcaster,
      e_deniedMakeTerminalBroadcaster
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ConferenceResponse_sendThisSourceResponse
//

class H245_ConferenceResponse_sendThisSourceResponse : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_sendThisSourceResponse, PASN_Choice);
#endif
  public:
    H245_ConferenceResponse_sendThisSourceResponse(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_grantedSendThisSource,
      e_deniedSendThisSource
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_TerminalInformation
//

class H245_TerminalInformation;

class H245_ArrayOf_TerminalInformation : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_TerminalInformation, PASN_Array);
#endif
  public:
    H245_ArrayOf_TerminalInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_TerminalInformation & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RemoteMCResponse_reject
//

class H245_RemoteMCResponse_reject : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RemoteMCResponse_reject, PASN_Choice);
#endif
  public:
    H245_RemoteMCResponse_reject(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_unspecified,
      e_functionNotSupported
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultilinkRequest_callInformation
//

class H245_MultilinkRequest_callInformation : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkRequest_callInformation, PASN_Sequence);
#endif
  public:
    H245_MultilinkRequest_callInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_maxNumberOfAdditionalConnections;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkRequest_addConnection
//

class H245_MultilinkRequest_addConnection : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkRequest_addConnection, PASN_Sequence);
#endif
  public:
    H245_MultilinkRequest_addConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_DialingInformation m_dialingInformation;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkRequest_removeConnection
//

class H245_MultilinkRequest_removeConnection : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkRequest_removeConnection, PASN_Sequence);
#endif
  public:
    H245_MultilinkRequest_removeConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ConnectionIdentifier m_connectionIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkResponse_callInformation
//

class H245_MultilinkResponse_callInformation : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkResponse_callInformation, PASN_Sequence);
#endif
  public:
    H245_MultilinkResponse_callInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DialingInformation m_dialingInformation;
    PASN_Integer m_callAssociationNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkResponse_removeConnection
//

class H245_MultilinkResponse_removeConnection : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkResponse_removeConnection, PASN_Sequence);
#endif
  public:
    H245_MultilinkResponse_removeConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ConnectionIdentifier m_connectionIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkResponse_maximumHeaderInterval
//

class H245_MultilinkResponse_maximumHeaderInterval : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkResponse_maximumHeaderInterval, PASN_Sequence);
#endif
  public:
    H245_MultilinkResponse_maximumHeaderInterval(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_currentInterval;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkIndication_crcDesired
//

class H245_MultilinkIndication_crcDesired : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkIndication_crcDesired, PASN_Sequence);
#endif
  public:
    H245_MultilinkIndication_crcDesired(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// MultilinkIndication_excessiveError
//

class H245_MultilinkIndication_excessiveError : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkIndication_excessiveError, PASN_Sequence);
#endif
  public:
    H245_MultilinkIndication_excessiveError(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ConnectionIdentifier m_connectionIdentifier;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_DialingInformationNumber
//

class H245_DialingInformationNumber;

class H245_ArrayOf_DialingInformationNumber : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_DialingInformationNumber, PASN_Array);
#endif
  public:
    H245_ArrayOf_DialingInformationNumber(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_DialingInformationNumber & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// ArrayOf_DialingInformationNetworkType
//

class H245_DialingInformationNetworkType;

class H245_ArrayOf_DialingInformationNetworkType : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_DialingInformationNetworkType, PASN_Array);
#endif
  public:
    H245_ArrayOf_DialingInformationNetworkType(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_DialingInformationNetworkType & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// FlowControlCommand_scope
//

class H245_LogicalChannelNumber;

class H245_FlowControlCommand_scope : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FlowControlCommand_scope, PASN_Choice);
#endif
  public:
    H245_FlowControlCommand_scope(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_logicalChannelNumber,
      e_resourceID,
      e_wholeMultiplex
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// FlowControlCommand_restriction
//

class H245_FlowControlCommand_restriction : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FlowControlCommand_restriction, PASN_Choice);
#endif
  public:
    H245_FlowControlCommand_restriction(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_maximumBitRate,
      e_noRestriction
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// EndSessionCommand_gstnOptions
//

class H245_EndSessionCommand_gstnOptions : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EndSessionCommand_gstnOptions, PASN_Choice);
#endif
  public:
    H245_EndSessionCommand_gstnOptions(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_telephonyMode,
      e_v8bis,
      e_v34DSVD,
      e_v34DuplexFAX,
      e_v34H324
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// EndSessionCommand_isdnOptions
//

class H245_EndSessionCommand_isdnOptions : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EndSessionCommand_isdnOptions, PASN_Choice);
#endif
  public:
    H245_EndSessionCommand_isdnOptions(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_telephonyMode,
      e_v140,
      e_terminalOnHold
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type
//

class H245_MiscellaneousCommand_type_videoFastUpdateGOB;
class H245_MiscellaneousCommand_type_videoFastUpdateMB;
class H245_EncryptionSync;
class H245_EncryptionUpdateRequest;
class H245_MiscellaneousCommand_type_progressiveRefinementStart;
class H245_MiscellaneousCommand_type_videoBadMBs;
class H245_ArrayOf_PictureReference;
class H245_MiscellaneousCommand_type_lostPartialPicture;
class H245_MiscellaneousCommand_type_encryptionUpdateCommand;
class H245_MiscellaneousCommand_type_encryptionUpdateAck;

class H245_MiscellaneousCommand_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type, PASN_Choice);
#endif
  public:
    H245_MiscellaneousCommand_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_equaliseDelay,
      e_zeroDelay,
      e_multipointModeCommand,
      e_cancelMultipointModeCommand,
      e_videoFreezePicture,
      e_videoFastUpdatePicture,
      e_videoFastUpdateGOB,
      e_videoTemporalSpatialTradeOff,
      e_videoSendSyncEveryGOB,
      e_videoSendSyncEveryGOBCancel,
      e_videoFastUpdateMB,
      e_maxH223MUXPDUsize,
      e_encryptionUpdate,
      e_encryptionUpdateRequest,
      e_switchReceiveMediaOff,
      e_switchReceiveMediaOn,
      e_progressiveRefinementStart,
      e_progressiveRefinementAbortOne,
      e_progressiveRefinementAbortContinuous,
      e_videoBadMBs,
      e_lostPicture,
      e_lostPartialPicture,
      e_recoveryReferencePicture,
      e_encryptionUpdateCommand,
      e_encryptionUpdateAck
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand_type_videoFastUpdateGOB &() const;
#else
    operator H245_MiscellaneousCommand_type_videoFastUpdateGOB &();
    operator const H245_MiscellaneousCommand_type_videoFastUpdateGOB &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand_type_videoFastUpdateMB &() const;
#else
    operator H245_MiscellaneousCommand_type_videoFastUpdateMB &();
    operator const H245_MiscellaneousCommand_type_videoFastUpdateMB &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EncryptionSync &() const;
#else
    operator H245_EncryptionSync &();
    operator const H245_EncryptionSync &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_EncryptionUpdateRequest &() const;
#else
    operator H245_EncryptionUpdateRequest &();
    operator const H245_EncryptionUpdateRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand_type_progressiveRefinementStart &() const;
#else
    operator H245_MiscellaneousCommand_type_progressiveRefinementStart &();
    operator const H245_MiscellaneousCommand_type_progressiveRefinementStart &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand_type_videoBadMBs &() const;
#else
    operator H245_MiscellaneousCommand_type_videoBadMBs &();
    operator const H245_MiscellaneousCommand_type_videoBadMBs &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_ArrayOf_PictureReference &() const;
#else
    operator H245_ArrayOf_PictureReference &();
    operator const H245_ArrayOf_PictureReference &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand_type_lostPartialPicture &() const;
#else
    operator H245_MiscellaneousCommand_type_lostPartialPicture &();
    operator const H245_MiscellaneousCommand_type_lostPartialPicture &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand_type_encryptionUpdateCommand &() const;
#else
    operator H245_MiscellaneousCommand_type_encryptionUpdateCommand &();
    operator const H245_MiscellaneousCommand_type_encryptionUpdateCommand &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousCommand_type_encryptionUpdateAck &() const;
#else
    operator H245_MiscellaneousCommand_type_encryptionUpdateAck &();
    operator const H245_MiscellaneousCommand_type_encryptionUpdateAck &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223MultiplexReconfiguration_h223ModeChange
//

class H245_H223MultiplexReconfiguration_h223ModeChange : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223MultiplexReconfiguration_h223ModeChange, PASN_Choice);
#endif
  public:
    H245_H223MultiplexReconfiguration_h223ModeChange(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_toLevel0,
      e_toLevel1,
      e_toLevel2,
      e_toLevel2withOptionalHeader
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223MultiplexReconfiguration_h223AnnexADoubleFlag
//

class H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag, PASN_Choice);
#endif
  public:
    H245_H223MultiplexReconfiguration_h223AnnexADoubleFlag(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_start,
      e_stop
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCCommand_aal
//

class H245_NewATMVCCommand_aal_aal1;
class H245_NewATMVCCommand_aal_aal5;

class H245_NewATMVCCommand_aal : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_aal, PASN_Choice);
#endif
  public:
    H245_NewATMVCCommand_aal(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_aal1,
      e_aal5
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NewATMVCCommand_aal_aal1 &() const;
#else
    operator H245_NewATMVCCommand_aal_aal1 &();
    operator const H245_NewATMVCCommand_aal_aal1 &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NewATMVCCommand_aal_aal5 &() const;
#else
    operator H245_NewATMVCCommand_aal_aal5 &();
    operator const H245_NewATMVCCommand_aal_aal5 &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCCommand_multiplex
//

class H245_NewATMVCCommand_multiplex : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_multiplex, PASN_Choice);
#endif
  public:
    H245_NewATMVCCommand_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noMultiplex,
      e_transportStream,
      e_programStream
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MobileMultilinkReconfigurationCommand_status
//

class H245_MobileMultilinkReconfigurationCommand_status : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MobileMultilinkReconfigurationCommand_status, PASN_Choice);
#endif
  public:
    H245_MobileMultilinkReconfigurationCommand_status(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_synchronized,
      e_reconfiguration
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// FunctionNotSupported_cause
//

class H245_FunctionNotSupported_cause : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FunctionNotSupported_cause, PASN_Choice);
#endif
  public:
    H245_FunctionNotSupported_cause(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_syntaxError,
      e_semanticError,
      e_unknownFunction
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MiscellaneousIndication_type
//

class H245_MiscellaneousIndication_type_videoNotDecodedMBs;
class H245_TransportCapability;

class H245_MiscellaneousIndication_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousIndication_type, PASN_Choice);
#endif
  public:
    H245_MiscellaneousIndication_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_logicalChannelActive,
      e_logicalChannelInactive,
      e_multipointConference,
      e_cancelMultipointConference,
      e_multipointZeroComm,
      e_cancelMultipointZeroComm,
      e_multipointSecondaryStatus,
      e_cancelMultipointSecondaryStatus,
      e_videoIndicateReadyToActivate,
      e_videoTemporalSpatialTradeOff,
      e_videoNotDecodedMBs,
      e_transportCapability
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MiscellaneousIndication_type_videoNotDecodedMBs &() const;
#else
    operator H245_MiscellaneousIndication_type_videoNotDecodedMBs &();
    operator const H245_MiscellaneousIndication_type_videoNotDecodedMBs &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_TransportCapability &() const;
#else
    operator H245_TransportCapability &();
    operator const H245_TransportCapability &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// JitterIndication_scope
//

class H245_LogicalChannelNumber;

class H245_JitterIndication_scope : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_JitterIndication_scope, PASN_Choice);
#endif
  public:
    H245_JitterIndication_scope(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_logicalChannelNumber,
      e_resourceID,
      e_wholeMultiplex
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCIndication_aal
//

class H245_NewATMVCIndication_aal_aal1;
class H245_NewATMVCIndication_aal_aal5;

class H245_NewATMVCIndication_aal : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_aal, PASN_Choice);
#endif
  public:
    H245_NewATMVCIndication_aal(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_aal1,
      e_aal5
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NewATMVCIndication_aal_aal1 &() const;
#else
    operator H245_NewATMVCIndication_aal_aal1 &();
    operator const H245_NewATMVCIndication_aal_aal1 &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NewATMVCIndication_aal_aal5 &() const;
#else
    operator H245_NewATMVCIndication_aal_aal5 &();
    operator const H245_NewATMVCIndication_aal_aal5 &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCIndication_multiplex
//

class H245_NewATMVCIndication_multiplex : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_multiplex, PASN_Choice);
#endif
  public:
    H245_NewATMVCIndication_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noMultiplex,
      e_transportStream,
      e_programStream
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// UserInputIndication_userInputSupportIndication
//

class H245_NonStandardParameter;

class H245_UserInputIndication_userInputSupportIndication : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_userInputSupportIndication, PASN_Choice);
#endif
  public:
    H245_UserInputIndication_userInputSupportIndication(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nonStandard,
      e_basicString,
      e_iA5String,
      e_generalString,
      e_encryptedBasicString,
      e_encryptedIA5String,
      e_encryptedGeneralString
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_NonStandardParameter &() const;
#else
    operator H245_NonStandardParameter &();
    operator const H245_NonStandardParameter &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// UserInputIndication_encryptedAlphanumeric
//

class H245_UserInputIndication_encryptedAlphanumeric : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_encryptedAlphanumeric, PASN_Sequence);
#endif
  public:
    H245_UserInputIndication_encryptedAlphanumeric(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_paramS
    };

    PASN_ObjectId m_algorithmOID;
    H245_Params m_paramS;
    PASN_OctetString m_encrypted;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// FlowControlIndication_scope
//

class H245_LogicalChannelNumber;

class H245_FlowControlIndication_scope : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FlowControlIndication_scope, PASN_Choice);
#endif
  public:
    H245_FlowControlIndication_scope(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_logicalChannelNumber,
      e_resourceID,
      e_wholeMultiplex
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_LogicalChannelNumber &() const;
#else
    operator H245_LogicalChannelNumber &();
    operator const H245_LogicalChannelNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// FlowControlIndication_restriction
//

class H245_FlowControlIndication_restriction : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FlowControlIndication_restriction, PASN_Choice);
#endif
  public:
    H245_FlowControlIndication_restriction(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_maximumBitRate,
      e_noRestriction
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded
//

class H245_CapabilityTableEntryNumber;

class H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded, PASN_Choice);
#endif
  public:
    H245_TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_highestEntryNumberProcessed,
      e_noneProcessed
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_CapabilityTableEntryNumber &() const;
#else
    operator H245_CapabilityTableEntryNumber &();
    operator const H245_CapabilityTableEntryNumber &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// VCCapability_availableBitRates_type
//

class H245_VCCapability_availableBitRates_type_rangeOfBitRates;

class H245_VCCapability_availableBitRates_type : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VCCapability_availableBitRates_type, PASN_Choice);
#endif
  public:
    H245_VCCapability_availableBitRates_type(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_singleBitRate,
      e_rangeOfBitRates
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_VCCapability_availableBitRates_type_rangeOfBitRates &() const;
#else
    operator H245_VCCapability_availableBitRates_type_rangeOfBitRates &();
    operator const H245_VCCapability_availableBitRates_type_rangeOfBitRates &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_Q2931Address
//

class H245_Q2931Address;

class H245_ArrayOf_Q2931Address : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_Q2931Address, PASN_Array);
#endif
  public:
    H245_ArrayOf_Q2931Address(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_Q2931Address & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// H223Capability_h223MultiplexTableCapability_enhanced
//

class H245_H223Capability_h223MultiplexTableCapability_enhanced : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223Capability_h223MultiplexTableCapability_enhanced, PASN_Sequence);
#endif
  public:
    H245_H223Capability_h223MultiplexTableCapability_enhanced(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_maximumNestingDepth;
    PASN_Integer m_maximumElementListSize;
    PASN_Integer m_maximumSubElementListSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_RTPH263VideoRedundancyFrameMapping
//

class H245_RTPH263VideoRedundancyFrameMapping;

class H245_ArrayOf_RTPH263VideoRedundancyFrameMapping : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_RTPH263VideoRedundancyFrameMapping, PASN_Array);
#endif
  public:
    H245_ArrayOf_RTPH263VideoRedundancyFrameMapping(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_RTPH263VideoRedundancyFrameMapping & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters
//

class H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters, PASN_Sequence);
#endif
  public:
    H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_mpuHorizMBs;
    PASN_Integer m_mpuVertMBs;
    PASN_Integer m_mpuTotalNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CustomPictureFormat_mPI_customPCF
//

class H245_CustomPictureFormat_mPI_customPCF_subtype;

class H245_CustomPictureFormat_mPI_customPCF : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat_mPI_customPCF, PASN_Array);
#endif
  public:
    H245_CustomPictureFormat_mPI_customPCF(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CustomPictureFormat_mPI_customPCF_subtype & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// CustomPictureFormat_pixelAspectInformation_pixelAspectCode
//

class H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode, PASN_Array);
#endif
  public:
    H245_CustomPictureFormat_pixelAspectInformation_pixelAspectCode(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    PASN_Integer & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// CustomPictureFormat_pixelAspectInformation_extendedPAR
//

class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype;

class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR, PASN_Array);
#endif
  public:
    H245_CustomPictureFormat_pixelAspectInformation_extendedPAR(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// DataApplicationCapability_application_t84
//

class H245_DataApplicationCapability_application_t84 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataApplicationCapability_application_t84, PASN_Sequence);
#endif
  public:
    H245_DataApplicationCapability_application_t84(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DataProtocolCapability m_t84Protocol;
    H245_T84Profile m_t84Profile;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataApplicationCapability_application_nlpid
//

class H245_DataApplicationCapability_application_nlpid : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataApplicationCapability_application_nlpid, PASN_Sequence);
#endif
  public:
    H245_DataApplicationCapability_application_nlpid(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DataProtocolCapability m_nlpidProtocol;
    PASN_OctetString m_nlpidData;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECCapability_rfc2733_separateStream
//

class H245_DepFECCapability_rfc2733_separateStream : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECCapability_rfc2733_separateStream, PASN_Sequence);
#endif
  public:
    H245_DepFECCapability_rfc2733_separateStream(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_separatePort;
    PASN_Boolean m_samePort;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters
//

class H245_H222LogicalChannelParameters;
class H245_H223LogicalChannelParameters;
class H245_V76LogicalChannelParameters;
class H245_H2250LogicalChannelParameters;

class H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters, PASN_Choice);
#endif
  public:
    H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_h222LogicalChannelParameters,
      e_h223LogicalChannelParameters,
      e_v76LogicalChannelParameters,
      e_h2250LogicalChannelParameters,
      e_none
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H222LogicalChannelParameters &() const;
#else
    operator H245_H222LogicalChannelParameters &();
    operator const H245_H222LogicalChannelParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223LogicalChannelParameters &() const;
#else
    operator H245_H223LogicalChannelParameters &();
    operator const H245_H223LogicalChannelParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_V76LogicalChannelParameters &() const;
#else
    operator H245_V76LogicalChannelParameters &();
    operator const H245_V76LogicalChannelParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H2250LogicalChannelParameters &() const;
#else
    operator H245_H2250LogicalChannelParameters &();
    operator const H245_H2250LogicalChannelParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters
//

class H245_H223LogicalChannelParameters;
class H245_V76LogicalChannelParameters;
class H245_H2250LogicalChannelParameters;

class H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters, PASN_Choice);
#endif
  public:
    H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_h223LogicalChannelParameters,
      e_v76LogicalChannelParameters,
      e_h2250LogicalChannelParameters
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H223LogicalChannelParameters &() const;
#else
    operator H245_H223LogicalChannelParameters &();
    operator const H245_H223LogicalChannelParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_V76LogicalChannelParameters &() const;
#else
    operator H245_V76LogicalChannelParameters &();
    operator const H245_V76LogicalChannelParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H2250LogicalChannelParameters &() const;
#else
    operator H245_H2250LogicalChannelParameters &();
    operator const H245_H2250LogicalChannelParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223LogicalChannelParameters_adaptationLayerType_al3
//

class H245_H223LogicalChannelParameters_adaptationLayerType_al3 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223LogicalChannelParameters_adaptationLayerType_al3, PASN_Sequence);
#endif
  public:
    H245_H223LogicalChannelParameters_adaptationLayerType_al3(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_controlFieldOctets;
    PASN_Integer m_sendBufferSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_RedundancyEncodingElement
//

class H245_RedundancyEncodingElement;

class H245_ArrayOf_RedundancyEncodingElement : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_RedundancyEncodingElement, PASN_Array);
#endif
  public:
    H245_ArrayOf_RedundancyEncodingElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_RedundancyEncodingElement & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// DepFECData_rfc2733_mode
//

class H245_DepFECData_rfc2733_mode_separateStream;

class H245_DepFECData_rfc2733_mode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECData_rfc2733_mode, PASN_Choice);
#endif
  public:
    H245_DepFECData_rfc2733_mode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_redundancyEncoding,
      e_separateStream
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECData_rfc2733_mode_separateStream &() const;
#else
    operator H245_DepFECData_rfc2733_mode_separateStream &();
    operator const H245_DepFECData_rfc2733_mode_separateStream &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// FECData_rfc2733_pktMode
//

class H245_FECData_rfc2733_pktMode_rfc2733sameport;
class H245_FECData_rfc2733_pktMode_rfc2733diffport;

class H245_FECData_rfc2733_pktMode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECData_rfc2733_pktMode, PASN_Choice);
#endif
  public:
    H245_FECData_rfc2733_pktMode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rfc2198coding,
      e_rfc2733sameport,
      e_rfc2733diffport
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECData_rfc2733_pktMode_rfc2733sameport &() const;
#else
    operator H245_FECData_rfc2733_pktMode_rfc2733sameport &();
    operator const H245_FECData_rfc2733_pktMode_rfc2733sameport &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_FECData_rfc2733_pktMode_rfc2733diffport &() const;
#else
    operator H245_FECData_rfc2733_pktMode_rfc2733diffport &();
    operator const H245_FECData_rfc2733_pktMode_rfc2733diffport &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// UnicastAddress_iPSourceRouteAddress_routing
//

class H245_UnicastAddress_iPSourceRouteAddress_routing : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UnicastAddress_iPSourceRouteAddress_routing, PASN_Choice);
#endif
  public:
    H245_UnicastAddress_iPSourceRouteAddress_routing(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_strict,
      e_loose
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// UnicastAddress_iPSourceRouteAddress_route
//

class H245_UnicastAddress_iPSourceRouteAddress_route : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UnicastAddress_iPSourceRouteAddress_route, PASN_Array);
#endif
  public:
    H245_UnicastAddress_iPSourceRouteAddress_route(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    PASN_OctetString & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters
//

class H245_H222LogicalChannelParameters;
class H245_H2250LogicalChannelParameters;

class H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters, PASN_Choice);
#endif
  public:
    H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_h222LogicalChannelParameters,
      e_h2250LogicalChannelParameters
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H222LogicalChannelParameters &() const;
#else
    operator H245_H222LogicalChannelParameters &();
    operator const H245_H222LogicalChannelParameters &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_H2250LogicalChannelParameters &() const;
#else
    operator H245_H2250LogicalChannelParameters &();
    operator const H245_H2250LogicalChannelParameters &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// DepFECMode_rfc2733Mode_mode
//

class H245_DepFECMode_rfc2733Mode_mode_separateStream;

class H245_DepFECMode_rfc2733Mode_mode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode, PASN_Choice);
#endif
  public:
    H245_DepFECMode_rfc2733Mode_mode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_redundancyEncoding,
      e_separateStream
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECMode_rfc2733Mode_mode_separateStream &() const;
#else
    operator H245_DepFECMode_rfc2733Mode_mode_separateStream &();
    operator const H245_DepFECMode_rfc2733Mode_mode_separateStream &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// H223ModeParameters_adaptationLayerType_al3
//

class H245_H223ModeParameters_adaptationLayerType_al3 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223ModeParameters_adaptationLayerType_al3, PASN_Sequence);
#endif
  public:
    H245_H223ModeParameters_adaptationLayerType_al3(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_controlFieldOctets;
    PASN_Integer m_sendBufferSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataMode_application_nlpid
//

class H245_DataMode_application_nlpid : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataMode_application_nlpid, PASN_Sequence);
#endif
  public:
    H245_DataMode_application_nlpid(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DataProtocolCapability m_nlpidProtocol;
    PASN_OctetString m_nlpidData;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkRequest_maximumHeaderInterval_requestType
//

class H245_MultilinkRequest_maximumHeaderInterval_requestType : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkRequest_maximumHeaderInterval_requestType, PASN_Choice);
#endif
  public:
    H245_MultilinkRequest_maximumHeaderInterval_requestType(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_currentIntervalInformation,
      e_requestedInterval
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultilinkResponse_addConnection_responseCode
//

class H245_MultilinkResponse_addConnection_responseCode_rejected;

class H245_MultilinkResponse_addConnection_responseCode : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkResponse_addConnection_responseCode, PASN_Choice);
#endif
  public:
    H245_MultilinkResponse_addConnection_responseCode(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_accepted,
      e_rejected
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_MultilinkResponse_addConnection_responseCode_rejected &() const;
#else
    operator H245_MultilinkResponse_addConnection_responseCode_rejected &();
    operator const H245_MultilinkResponse_addConnection_responseCode_rejected &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// ArrayOf_CapabilityDescriptorNumber
//

class H245_CapabilityDescriptorNumber;

class H245_ArrayOf_CapabilityDescriptorNumber : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_CapabilityDescriptorNumber, PASN_Array);
#endif
  public:
    H245_ArrayOf_CapabilityDescriptorNumber(unsigned tag = UniversalSet, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_CapabilityDescriptorNumber & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_videoFastUpdateGOB
//

class H245_MiscellaneousCommand_type_videoFastUpdateGOB : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_videoFastUpdateGOB, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand_type_videoFastUpdateGOB(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_firstGOB;
    PASN_Integer m_numberOfGOBs;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_videoFastUpdateMB
//

class H245_MiscellaneousCommand_type_videoFastUpdateMB : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_videoFastUpdateMB, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand_type_videoFastUpdateMB(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_firstGOB,
      e_firstMB
    };

    PASN_Integer m_firstGOB;
    PASN_Integer m_firstMB;
    PASN_Integer m_numberOfMBs;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_videoBadMBs
//

class H245_MiscellaneousCommand_type_videoBadMBs : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_videoBadMBs, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand_type_videoBadMBs(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_firstMB;
    PASN_Integer m_numberOfMBs;
    PASN_Integer m_temporalReference;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ArrayOf_PictureReference
//

class H245_PictureReference;

class H245_ArrayOf_PictureReference : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ArrayOf_PictureReference, PASN_Array);
#endif
  public:
    H245_ArrayOf_PictureReference(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Object * CreateObject() const;
    H245_PictureReference & operator[](PINDEX i) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_lostPartialPicture
//

class H245_MiscellaneousCommand_type_lostPartialPicture : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_lostPartialPicture, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand_type_lostPartialPicture(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_PictureReference m_pictureReference;
    PASN_Integer m_firstMB;
    PASN_Integer m_numberOfMBs;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_encryptionUpdateAck
//

class H245_MiscellaneousCommand_type_encryptionUpdateAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_encryptionUpdateAck, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand_type_encryptionUpdateAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_synchFlag;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCCommand_aal_aal5
//

class H245_NewATMVCCommand_aal_aal5 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_aal_aal5, PASN_Sequence);
#endif
  public:
    H245_NewATMVCCommand_aal_aal5(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_forwardMaximumSDUSize;
    PASN_Integer m_backwardMaximumSDUSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCCommand_reverseParameters_multiplex
//

class H245_NewATMVCCommand_reverseParameters_multiplex : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_reverseParameters_multiplex, PASN_Choice);
#endif
  public:
    H245_NewATMVCCommand_reverseParameters_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noMultiplex,
      e_transportStream,
      e_programStream
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MiscellaneousIndication_type_videoNotDecodedMBs
//

class H245_MiscellaneousIndication_type_videoNotDecodedMBs : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousIndication_type_videoNotDecodedMBs, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousIndication_type_videoNotDecodedMBs(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_firstMB;
    PASN_Integer m_numberOfMBs;
    PASN_Integer m_temporalReference;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCIndication_aal_aal5
//

class H245_NewATMVCIndication_aal_aal5 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_aal_aal5, PASN_Sequence);
#endif
  public:
    H245_NewATMVCIndication_aal_aal5(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_forwardMaximumSDUSize;
    PASN_Integer m_backwardMaximumSDUSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCIndication_reverseParameters_multiplex
//

class H245_NewATMVCIndication_reverseParameters_multiplex : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_reverseParameters_multiplex, PASN_Choice);
#endif
  public:
    H245_NewATMVCIndication_reverseParameters_multiplex(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_noMultiplex,
      e_transportStream,
      e_programStream
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// UserInputIndication_signal_rtp
//

class H245_UserInputIndication_signal_rtp : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_signal_rtp, PASN_Sequence);
#endif
  public:
    H245_UserInputIndication_signal_rtp(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_timestamp,
      e_expirationTime
    };

    PASN_Integer m_timestamp;
    PASN_Integer m_expirationTime;
    H245_LogicalChannelNumber m_logicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UserInputIndication_signalUpdate_rtp
//

class H245_UserInputIndication_signalUpdate_rtp : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_signalUpdate_rtp, PASN_Sequence);
#endif
  public:
    H245_UserInputIndication_signalUpdate_rtp(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_logicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric
//

class H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric, PASN_Sequence);
#endif
  public:
    H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_paramS
    };

    PASN_ObjectId m_algorithmOID;
    H245_Params m_paramS;
    PASN_OctetString m_encrypted;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VCCapability_availableBitRates_type_rangeOfBitRates
//

class H245_VCCapability_availableBitRates_type_rangeOfBitRates : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VCCapability_availableBitRates_type_rangeOfBitRates, PASN_Sequence);
#endif
  public:
    H245_VCCapability_availableBitRates_type_rangeOfBitRates(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_lowerBitRate;
    PASN_Integer m_higherBitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CustomPictureFormat_mPI_customPCF_subtype
//

class H245_CustomPictureFormat_mPI_customPCF_subtype : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat_mPI_customPCF_subtype, PASN_Sequence);
#endif
  public:
    H245_CustomPictureFormat_mPI_customPCF_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_clockConversionCode;
    PASN_Integer m_clockDivisor;
    PASN_Integer m_customMPI;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype
//

class H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype, PASN_Sequence);
#endif
  public:
    H245_CustomPictureFormat_pixelAspectInformation_extendedPAR_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_width;
    PASN_Integer m_height;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// V76LogicalChannelParameters_mode_eRM_recovery
//

class H245_V76LogicalChannelParameters_mode_eRM_recovery : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76LogicalChannelParameters_mode_eRM_recovery, PASN_Choice);
#endif
  public:
    H245_V76LogicalChannelParameters_mode_eRM_recovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_rej,
      e_sREJ,
      e_mSREJ
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// DepFECData_rfc2733_mode_separateStream
//

class H245_DepFECData_rfc2733_mode_separateStream_differentPort;
class H245_DepFECData_rfc2733_mode_separateStream_samePort;

class H245_DepFECData_rfc2733_mode_separateStream : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECData_rfc2733_mode_separateStream, PASN_Choice);
#endif
  public:
    H245_DepFECData_rfc2733_mode_separateStream(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_differentPort,
      e_samePort
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECData_rfc2733_mode_separateStream_differentPort &() const;
#else
    operator H245_DepFECData_rfc2733_mode_separateStream_differentPort &();
    operator const H245_DepFECData_rfc2733_mode_separateStream_differentPort &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECData_rfc2733_mode_separateStream_samePort &() const;
#else
    operator H245_DepFECData_rfc2733_mode_separateStream_samePort &();
    operator const H245_DepFECData_rfc2733_mode_separateStream_samePort &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// FECData_rfc2733_pktMode_rfc2733sameport
//

class H245_FECData_rfc2733_pktMode_rfc2733sameport : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECData_rfc2733_pktMode_rfc2733sameport, PASN_Sequence);
#endif
  public:
    H245_FECData_rfc2733_pktMode_rfc2733sameport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);


    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    PObject * Clone() const;
};


//
// FECData_rfc2733_pktMode_rfc2733diffport
//

class H245_FECData_rfc2733_pktMode_rfc2733diffport : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECData_rfc2733_pktMode_rfc2733diffport, PASN_Sequence);
#endif
  public:
    H245_FECData_rfc2733_pktMode_rfc2733diffport(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_protectedChannel;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECMode_rfc2733Mode_mode_separateStream
//

class H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort;
class H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort;

class H245_DepFECMode_rfc2733Mode_mode_separateStream : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode_separateStream, PASN_Choice);
#endif
  public:
    H245_DepFECMode_rfc2733Mode_mode_separateStream(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_differentPort,
      e_samePort
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &() const;
#else
    operator H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &();
    operator const H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &() const;
#else
    operator H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &();
    operator const H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort &() const;
#endif

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MultilinkResponse_addConnection_responseCode_rejected
//

class H245_MultilinkResponse_addConnection_responseCode_rejected : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkResponse_addConnection_responseCode_rejected, PASN_Choice);
#endif
  public:
    H245_MultilinkResponse_addConnection_responseCode_rejected(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_connectionsNotAvailable,
      e_userRejected
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_progressiveRefinementStart_repeatCount
//

class H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount, PASN_Choice);
#endif
  public:
    H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_doOneProgression,
      e_doContinuousProgressions,
      e_doOneIndependentProgression,
      e_doContinuousIndependentProgressions
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCCommand_aal_aal1_clockRecovery
//

class H245_NewATMVCCommand_aal_aal1_clockRecovery : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_aal_aal1_clockRecovery, PASN_Choice);
#endif
  public:
    H245_NewATMVCCommand_aal_aal1_clockRecovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nullClockRecovery,
      e_srtsClockRecovery,
      e_adaptiveClockRecovery
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCCommand_aal_aal1_errorCorrection
//

class H245_NewATMVCCommand_aal_aal1_errorCorrection : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_aal_aal1_errorCorrection, PASN_Choice);
#endif
  public:
    H245_NewATMVCCommand_aal_aal1_errorCorrection(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nullErrorCorrection,
      e_longInterleaver,
      e_shortInterleaver,
      e_errorCorrectionOnly
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCIndication_aal_aal1_clockRecovery
//

class H245_NewATMVCIndication_aal_aal1_clockRecovery : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_aal_aal1_clockRecovery, PASN_Choice);
#endif
  public:
    H245_NewATMVCIndication_aal_aal1_clockRecovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nullClockRecovery,
      e_srtsClockRecovery,
      e_adaptiveClockRecovery
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// NewATMVCIndication_aal_aal1_errorCorrection
//

class H245_NewATMVCIndication_aal_aal1_errorCorrection : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_aal_aal1_errorCorrection, PASN_Choice);
#endif
  public:
    H245_NewATMVCIndication_aal_aal1_errorCorrection(unsigned tag = 0, TagClass tagClass = UniversalTagClass);

    enum Choices {
      e_nullErrorCorrection,
      e_longInterleaver,
      e_shortInterleaver,
      e_errorCorrectionOnly
    };

    BOOL CreateObject();
    PObject * Clone() const;
};


//
// DepFECData_rfc2733_mode_separateStream_differentPort
//

class H245_DepFECData_rfc2733_mode_separateStream_differentPort : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECData_rfc2733_mode_separateStream_differentPort, PASN_Sequence);
#endif
  public:
    H245_DepFECData_rfc2733_mode_separateStream_differentPort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_protectedPayloadType
    };

    PASN_Integer m_protectedSessionID;
    PASN_Integer m_protectedPayloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECData_rfc2733_mode_separateStream_samePort
//

class H245_DepFECData_rfc2733_mode_separateStream_samePort : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECData_rfc2733_mode_separateStream_samePort, PASN_Sequence);
#endif
  public:
    H245_DepFECData_rfc2733_mode_separateStream_samePort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_protectedPayloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECMode_rfc2733Mode_mode_separateStream_differentPort
//

class H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort, PASN_Sequence);
#endif
  public:
    H245_DepFECMode_rfc2733Mode_mode_separateStream_differentPort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_protectedPayloadType
    };

    PASN_Integer m_protectedSessionID;
    PASN_Integer m_protectedPayloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECMode_rfc2733Mode_mode_separateStream_samePort
//

class H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort, PASN_Sequence);
#endif
  public:
    H245_DepFECMode_rfc2733Mode_mode_separateStream_samePort(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ModeElementType m_protectedType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// GenericMessage
//

class H245_GenericMessage : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_GenericMessage, PASN_Sequence);
#endif
  public:
    H245_GenericMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_subMessageIdentifier,
      e_messageContent
    };

    H245_CapabilityIdentifier m_messageIdentifier;
    PASN_Integer m_subMessageIdentifier;
    H245_ArrayOf_GenericParameter m_messageContent;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NonStandardParameter
//

class H245_NonStandardParameter : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NonStandardParameter, PASN_Sequence);
#endif
  public:
    H245_NonStandardParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_NonStandardIdentifier m_nonStandardIdentifier;
    PASN_OctetString m_data;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MasterSlaveDeterminationAck
//

class H245_MasterSlaveDeterminationAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MasterSlaveDeterminationAck, PASN_Sequence);
#endif
  public:
    H245_MasterSlaveDeterminationAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MasterSlaveDeterminationAck_decision m_decision;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MasterSlaveDeterminationReject
//

class H245_MasterSlaveDeterminationReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MasterSlaveDeterminationReject, PASN_Sequence);
#endif
  public:
    H245_MasterSlaveDeterminationReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MasterSlaveDeterminationReject_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// TerminalCapabilitySet
//

class H245_TerminalCapabilitySet : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalCapabilitySet, PASN_Sequence);
#endif
  public:
    H245_TerminalCapabilitySet(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_multiplexCapability,
      e_capabilityTable,
      e_capabilityDescriptors
    };

    H245_SequenceNumber m_sequenceNumber;
    PASN_ObjectId m_protocolIdentifier;
    H245_MultiplexCapability m_multiplexCapability;
    H245_ArrayOf_CapabilityTableEntry m_capabilityTable;
    H245_ArrayOf_CapabilityDescriptor m_capabilityDescriptors;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CapabilityTableEntry
//

class H245_CapabilityTableEntry : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CapabilityTableEntry, PASN_Sequence);
#endif
  public:
    H245_CapabilityTableEntry(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_capability
    };

    H245_CapabilityTableEntryNumber m_capabilityTableEntryNumber;
    H245_Capability m_capability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CapabilityDescriptor
//

class H245_CapabilityDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CapabilityDescriptor, PASN_Sequence);
#endif
  public:
    H245_CapabilityDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_simultaneousCapabilities
    };

    H245_CapabilityDescriptorNumber m_capabilityDescriptorNumber;
    H245_ArrayOf_AlternativeCapabilitySet m_simultaneousCapabilities;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// TerminalCapabilitySetReject
//

class H245_TerminalCapabilitySetReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalCapabilitySetReject, PASN_Sequence);
#endif
  public:
    H245_TerminalCapabilitySetReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_TerminalCapabilitySetReject_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H222Capability
//

class H245_H222Capability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H222Capability, PASN_Sequence);
#endif
  public:
    H245_H222Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_numberOfVCs;
    H245_ArrayOf_VCCapability m_vcCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223Capability
//

class H245_H223Capability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223Capability, PASN_Sequence);
#endif
  public:
    H245_H223Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_maxMUXPDUSizeCapability,
      e_nsrpSupport,
      e_mobileOperationTransmitCapability,
      e_h223AnnexCCapability,
      e_bitRate,
      e_mobileMultilinkFrameCapability
    };

    PASN_Boolean m_transportWithI_frames;
    PASN_Boolean m_videoWithAL1;
    PASN_Boolean m_videoWithAL2;
    PASN_Boolean m_videoWithAL3;
    PASN_Boolean m_audioWithAL1;
    PASN_Boolean m_audioWithAL2;
    PASN_Boolean m_audioWithAL3;
    PASN_Boolean m_dataWithAL1;
    PASN_Boolean m_dataWithAL2;
    PASN_Boolean m_dataWithAL3;
    PASN_Integer m_maximumAl2SDUSize;
    PASN_Integer m_maximumAl3SDUSize;
    PASN_Integer m_maximumDelayJitter;
    H245_H223Capability_h223MultiplexTableCapability m_h223MultiplexTableCapability;
    PASN_Boolean m_maxMUXPDUSizeCapability;
    PASN_Boolean m_nsrpSupport;
    H245_H223Capability_mobileOperationTransmitCapability m_mobileOperationTransmitCapability;
    H245_H223AnnexCCapability m_h223AnnexCCapability;
    PASN_Integer m_bitRate;
    H245_H223Capability_mobileMultilinkFrameCapability m_mobileMultilinkFrameCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// V76Capability
//

class H245_V76Capability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76Capability, PASN_Sequence);
#endif
  public:
    H245_V76Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_suspendResumeCapabilitywAddress;
    PASN_Boolean m_suspendResumeCapabilitywoAddress;
    PASN_Boolean m_rejCapability;
    PASN_Boolean m_sREJCapability;
    PASN_Boolean m_mREJCapability;
    PASN_Boolean m_crc8bitCapability;
    PASN_Boolean m_crc16bitCapability;
    PASN_Boolean m_crc32bitCapability;
    PASN_Boolean m_uihCapability;
    PASN_Integer m_numOfDLCS;
    PASN_Boolean m_twoOctetAddressFieldCapability;
    PASN_Boolean m_loopBackTestCapability;
    PASN_Integer m_n401Capability;
    PASN_Integer m_maxWindowSizeCapability;
    H245_V75Capability m_v75Capability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MediaPacketizationCapability
//

class H245_MediaPacketizationCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MediaPacketizationCapability, PASN_Sequence);
#endif
  public:
    H245_MediaPacketizationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_rtpPayloadType
    };

    PASN_Boolean m_h261aVideoPacketization;
    H245_ArrayOf_RTPPayloadType m_rtpPayloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RSVPParameters
//

class H245_RSVPParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RSVPParameters, PASN_Sequence);
#endif
  public:
    H245_RSVPParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_qosMode,
      e_tokenRate,
      e_bucketSize,
      e_peakRate,
      e_minPoliced,
      e_maxPktSize
    };

    H245_QOSMode m_qosMode;
    PASN_Integer m_tokenRate;
    PASN_Integer m_bucketSize;
    PASN_Integer m_peakRate;
    PASN_Integer m_minPoliced;
    PASN_Integer m_maxPktSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// QOSCapability
//

class H245_QOSCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_QOSCapability, PASN_Sequence);
#endif
  public:
    H245_QOSCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandardData,
      e_rsvpParameters,
      e_atmParameters
    };

    H245_NonStandardParameter m_nonStandardData;
    H245_RSVPParameters m_rsvpParameters;
    H245_ATMParameters m_atmParameters;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// TransportCapability
//

class H245_TransportCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TransportCapability, PASN_Sequence);
#endif
  public:
    H245_TransportCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandard,
      e_qOSCapabilities,
      e_mediaChannelCapabilities
    };

    H245_NonStandardParameter m_nonStandard;
    H245_ArrayOf_QOSCapability m_qOSCapabilities;
    H245_ArrayOf_MediaChannelCapability m_mediaChannelCapabilities;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RedundancyEncodingCapability
//

class H245_RedundancyEncodingCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingCapability, PASN_Sequence);
#endif
  public:
    H245_RedundancyEncodingCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_secondaryEncoding
    };

    H245_RedundancyEncodingMethod m_redundancyEncodingMethod;
    H245_CapabilityTableEntryNumber m_primaryEncoding;
    H245_ArrayOf_CapabilityTableEntryNumber m_secondaryEncoding;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RTPH263VideoRedundancyEncoding
//

class H245_RTPH263VideoRedundancyEncoding : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RTPH263VideoRedundancyEncoding, PASN_Sequence);
#endif
  public:
    H245_RTPH263VideoRedundancyEncoding(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_containedThreads
    };

    PASN_Integer m_numberOfThreads;
    PASN_Integer m_framesBetweenSyncPoints;
    H245_RTPH263VideoRedundancyEncoding_frameToThreadMapping m_frameToThreadMapping;
    H245_RTPH263VideoRedundancyEncoding_containedThreads m_containedThreads;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RTPH263VideoRedundancyFrameMapping
//

class H245_RTPH263VideoRedundancyFrameMapping : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RTPH263VideoRedundancyFrameMapping, PASN_Sequence);
#endif
  public:
    H245_RTPH263VideoRedundancyFrameMapping(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_threadNumber;
    H245_RTPH263VideoRedundancyFrameMapping_frameSequence m_frameSequence;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultipointCapability
//

class H245_MultipointCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultipointCapability, PASN_Sequence);
#endif
  public:
    H245_MultipointCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_multicastCapability;
    PASN_Boolean m_multiUniCastConference;
    H245_ArrayOf_MediaDistributionCapability m_mediaDistributionCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MediaDistributionCapability
//

class H245_MediaDistributionCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MediaDistributionCapability, PASN_Sequence);
#endif
  public:
    H245_MediaDistributionCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_centralizedData,
      e_distributedData
    };

    PASN_Boolean m_centralizedControl;
    PASN_Boolean m_distributedControl;
    PASN_Boolean m_centralizedAudio;
    PASN_Boolean m_distributedAudio;
    PASN_Boolean m_centralizedVideo;
    PASN_Boolean m_distributedVideo;
    H245_ArrayOf_DataApplicationCapability m_centralizedData;
    H245_ArrayOf_DataApplicationCapability m_distributedData;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ExtendedVideoCapability
//

class H245_ExtendedVideoCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ExtendedVideoCapability, PASN_Sequence);
#endif
  public:
    H245_ExtendedVideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_videoCapabilityExtension
    };

    H245_ArrayOf_VideoCapability m_videoCapability;
    H245_ArrayOf_GenericCapability m_videoCapabilityExtension;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EnhancementLayerInfo
//

class H245_EnhancementLayerInfo : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EnhancementLayerInfo, PASN_Sequence);
#endif
  public:
    H245_EnhancementLayerInfo(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_snrEnhancement,
      e_spatialEnhancement,
      e_bPictureEnhancement
    };

    PASN_Boolean m_baseBitRateConstrained;
    H245_ArrayOf_EnhancementOptions m_snrEnhancement;
    H245_ArrayOf_EnhancementOptions m_spatialEnhancement;
    H245_ArrayOf_BEnhancementParameters m_bPictureEnhancement;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H263ModeComboFlags
//

class H245_H263ModeComboFlags : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H263ModeComboFlags, PASN_Sequence);
#endif
  public:
    H245_H263ModeComboFlags(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_enhancedReferencePicSelect,
      e_h263Version3Options
    };

    PASN_Boolean m_unrestrictedVector;
    PASN_Boolean m_arithmeticCoding;
    PASN_Boolean m_advancedPrediction;
    PASN_Boolean m_pbFrames;
    PASN_Boolean m_advancedIntraCodingMode;
    PASN_Boolean m_deblockingFilterMode;
    PASN_Boolean m_unlimitedMotionVectors;
    PASN_Boolean m_slicesInOrder_NonRect;
    PASN_Boolean m_slicesInOrder_Rect;
    PASN_Boolean m_slicesNoOrder_NonRect;
    PASN_Boolean m_slicesNoOrder_Rect;
    PASN_Boolean m_improvedPBFramesMode;
    PASN_Boolean m_referencePicSelect;
    PASN_Boolean m_dynamicPictureResizingByFour;
    PASN_Boolean m_dynamicPictureResizingSixteenthPel;
    PASN_Boolean m_dynamicWarpingHalfPel;
    PASN_Boolean m_dynamicWarpingSixteenthPel;
    PASN_Boolean m_reducedResolutionUpdate;
    PASN_Boolean m_independentSegmentDecoding;
    PASN_Boolean m_alternateInterVLCMode;
    PASN_Boolean m_modifiedQuantizationMode;
    PASN_Boolean m_enhancedReferencePicSelect;
    H245_H263Version3Options m_h263Version3Options;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// G7231AnnexCCapability
//

class H245_G7231AnnexCCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_G7231AnnexCCapability, PASN_Sequence);
#endif
  public:
    H245_G7231AnnexCCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_g723AnnexCAudioMode
    };

    PASN_Integer m_maxAl_sduAudioFrames;
    PASN_Boolean m_silenceSuppression;
    H245_G7231AnnexCCapability_g723AnnexCAudioMode m_g723AnnexCAudioMode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataApplicationCapability
//

class H245_DataApplicationCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataApplicationCapability, PASN_Sequence);
#endif
  public:
    H245_DataApplicationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DataApplicationCapability_application m_application;
    PASN_Integer m_maxBitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// T38FaxUdpOptions
//

class H245_T38FaxUdpOptions : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_T38FaxUdpOptions, PASN_Sequence);
#endif
  public:
    H245_T38FaxUdpOptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_t38FaxMaxBuffer,
      e_t38FaxMaxDatagram
    };

    PASN_Integer m_t38FaxMaxBuffer;
    PASN_Integer m_t38FaxMaxDatagram;
    H245_T38FaxUdpOptions_t38FaxUdpEC m_t38FaxUdpEC;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// AuthenticationCapability
//

class H245_AuthenticationCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_AuthenticationCapability, PASN_Sequence);
#endif
  public:
    H245_AuthenticationCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandard,
      e_antiSpamAlgorithm
    };

    H245_NonStandardParameter m_nonStandard;
    PASN_ObjectId m_antiSpamAlgorithm;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// IntegrityCapability
//

class H245_IntegrityCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IntegrityCapability, PASN_Sequence);
#endif
  public:
    H245_IntegrityCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandard
    };

    H245_NonStandardParameter m_nonStandard;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceCapability
//

class H245_ConferenceCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceCapability, PASN_Sequence);
#endif
  public:
    H245_ConferenceCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandardData,
      e_videoIndicateMixingCapability,
      e_multipointVisualizationCapability
    };

    H245_ArrayOf_NonStandardParameter m_nonStandardData;
    PASN_Boolean m_chairControlCapability;
    PASN_Boolean m_videoIndicateMixingCapability;
    PASN_Boolean m_multipointVisualizationCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// GenericCapability
//

class H245_GenericCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_GenericCapability, PASN_Sequence);
#endif
  public:
    H245_GenericCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_maxBitRate,
      e_collapsing,
      e_nonCollapsing,
      e_nonCollapsingRaw,
      e_transport
    };

    H245_CapabilityIdentifier m_capabilityIdentifier;
    PASN_Integer m_maxBitRate;
    H245_ArrayOf_GenericParameter m_collapsing;
    H245_ArrayOf_GenericParameter m_nonCollapsing;
    PASN_OctetString m_nonCollapsingRaw;
    H245_DataProtocolCapability m_transport;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// GenericParameter
//

class H245_GenericParameter : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_GenericParameter, PASN_Sequence);
#endif
  public:
    H245_GenericParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_supersedes
    };

    H245_ParameterIdentifier m_parameterIdentifier;
    H245_ParameterValue m_parameterValue;
    H245_ArrayOf_ParameterIdentifier m_supersedes;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexedStreamCapability
//

class H245_MultiplexedStreamCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexedStreamCapability, PASN_Sequence);
#endif
  public:
    H245_MultiplexedStreamCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_capabilityOnMuxStream
    };

    H245_MultiplexFormat m_multiplexFormat;
    PASN_Boolean m_controlOnMuxStream;
    H245_ArrayOf_AlternativeCapabilitySet m_capabilityOnMuxStream;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplePayloadStreamCapability
//

class H245_MultiplePayloadStreamCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplePayloadStreamCapability, PASN_Sequence);
#endif
  public:
    H245_MultiplePayloadStreamCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_AlternativeCapabilitySet m_capabilities;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// FECCapability
//

class H245_FECCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECCapability, PASN_Sequence);
#endif
  public:
    H245_FECCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_fecScheme,
      e_rfc2733Format
    };

    H245_CapabilityTableEntryNumber m_protectedCapability;
    PASN_ObjectId m_fecScheme;
    H245_FECCapability_rfc2733Format m_rfc2733Format;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NetworkAccessParameters
//

class H245_NetworkAccessParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NetworkAccessParameters, PASN_Sequence);
#endif
  public:
    H245_NetworkAccessParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_distribution,
      e_externalReference,
      e_t120SetupProcedure
    };

    H245_NetworkAccessParameters_distribution m_distribution;
    H245_NetworkAccessParameters_networkAddress m_networkAddress;
    PASN_Boolean m_associateConference;
    PASN_OctetString m_externalReference;
    H245_NetworkAccessParameters_t120SetupProcedure m_t120SetupProcedure;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// Q2931Address
//

class H245_Q2931Address : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_Q2931Address, PASN_Sequence);
#endif
  public:
    H245_Q2931Address(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_subaddress
    };

    H245_Q2931Address_address m_address;
    PASN_OctetString m_subaddress;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223LogicalChannelParameters
//

class H245_H223LogicalChannelParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223LogicalChannelParameters, PASN_Sequence);
#endif
  public:
    H245_H223LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_H223LogicalChannelParameters_adaptationLayerType m_adaptationLayerType;
    PASN_Boolean m_segmentableFlag;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223AL1MParameters
//

class H245_H223AL1MParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL1MParameters, PASN_Sequence);
#endif
  public:
    H245_H223AL1MParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_rsCodeCorrection
    };

    H245_H223AL1MParameters_transferMode m_transferMode;
    H245_H223AL1MParameters_headerFEC m_headerFEC;
    H245_H223AL1MParameters_crcLength m_crcLength;
    PASN_Integer m_rcpcCodeRate;
    H245_H223AL1MParameters_arqType m_arqType;
    PASN_Boolean m_alpduInterleaving;
    PASN_Boolean m_alsduSplitting;
    PASN_Integer m_rsCodeCorrection;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223AL2MParameters
//

class H245_H223AL2MParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL2MParameters, PASN_Sequence);
#endif
  public:
    H245_H223AL2MParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_H223AL2MParameters_headerFEC m_headerFEC;
    PASN_Boolean m_alpduInterleaving;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223AL3MParameters
//

class H245_H223AL3MParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AL3MParameters, PASN_Sequence);
#endif
  public:
    H245_H223AL3MParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_rsCodeCorrection
    };

    H245_H223AL3MParameters_headerFormat m_headerFormat;
    H245_H223AL3MParameters_crcLength m_crcLength;
    PASN_Integer m_rcpcCodeRate;
    H245_H223AL3MParameters_arqType m_arqType;
    PASN_Boolean m_alpduInterleaving;
    PASN_Integer m_rsCodeCorrection;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223AnnexCArqParameters
//

class H245_H223AnnexCArqParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223AnnexCArqParameters, PASN_Sequence);
#endif
  public:
    H245_H223AnnexCArqParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_H223AnnexCArqParameters_numberOfRetransmissions m_numberOfRetransmissions;
    PASN_Integer m_sendBufferSize;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// V76HDLCParameters
//

class H245_V76HDLCParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76HDLCParameters, PASN_Sequence);
#endif
  public:
    H245_V76HDLCParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_CRCLength m_crcLength;
    PASN_Integer m_n401;
    PASN_Boolean m_loopbackTestProcedure;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RTPPayloadType
//

class H245_RTPPayloadType : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RTPPayloadType, PASN_Sequence);
#endif
  public:
    H245_RTPPayloadType(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_payloadType
    };

    H245_RTPPayloadType_payloadDescriptor m_payloadDescriptor;
    PASN_Integer m_payloadType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplePayloadStream
//

class H245_MultiplePayloadStream : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplePayloadStream, PASN_Sequence);
#endif
  public:
    H245_MultiplePayloadStream(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_MultiplePayloadStreamElement m_elements;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EncryptionSync
//

class H245_EncryptionSync : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionSync, PASN_Sequence);
#endif
  public:
    H245_EncryptionSync(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandard,
      e_escrowentry,
      e_genericParameter
    };

    H245_NonStandardParameter m_nonStandard;
    PASN_Integer m_synchFlag;
    PASN_OctetString m_h235Key;
    H245_ArrayOf_EscrowData m_escrowentry;
    H245_GenericParameter m_genericParameter;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannelReject
//

class H245_OpenLogicalChannelReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannelReject, PASN_Sequence);
#endif
  public:
    H245_OpenLogicalChannelReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;
    H245_OpenLogicalChannelReject_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H2250LogicalChannelAckParameters
//

class H245_H2250LogicalChannelAckParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H2250LogicalChannelAckParameters, PASN_Sequence);
#endif
  public:
    H245_H2250LogicalChannelAckParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandard,
      e_sessionID,
      e_mediaChannel,
      e_mediaControlChannel,
      e_dynamicRTPPayloadType,
      e_flowControlToZero,
      e_portNumber
    };

    H245_ArrayOf_NonStandardParameter m_nonStandard;
    PASN_Integer m_sessionID;
    H245_TransportAddress m_mediaChannel;
    H245_TransportAddress m_mediaControlChannel;
    PASN_Integer m_dynamicRTPPayloadType;
    PASN_Boolean m_flowControlToZero;
    PASN_Integer m_portNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CloseLogicalChannel
//

class H245_CloseLogicalChannel : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CloseLogicalChannel, PASN_Sequence);
#endif
  public:
    H245_CloseLogicalChannel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_reason
    };

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;
    H245_CloseLogicalChannel_source m_source;
    H245_CloseLogicalChannel_reason m_reason;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestChannelClose
//

class H245_RequestChannelClose : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestChannelClose, PASN_Sequence);
#endif
  public:
    H245_RequestChannelClose(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_qosCapability,
      e_reason
    };

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;
    H245_QOSCapability m_qosCapability;
    H245_RequestChannelClose_reason m_reason;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestChannelCloseReject
//

class H245_RequestChannelCloseReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestChannelCloseReject, PASN_Sequence);
#endif
  public:
    H245_RequestChannelCloseReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;
    H245_RequestChannelCloseReject_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexEntrySend
//

class H245_MultiplexEntrySend : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexEntrySend, PASN_Sequence);
#endif
  public:
    H245_MultiplexEntrySend(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_ArrayOf_MultiplexEntryDescriptor m_multiplexEntryDescriptors;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexEntryDescriptor
//

class H245_MultiplexEntryDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexEntryDescriptor, PASN_Sequence);
#endif
  public:
    H245_MultiplexEntryDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_elementList
    };

    H245_MultiplexTableEntryNumber m_multiplexTableEntryNumber;
    H245_ArrayOf_MultiplexElement m_elementList;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexElement
//

class H245_MultiplexElement : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexElement, PASN_Sequence);
#endif
  public:
    H245_MultiplexElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MultiplexElement_type m_type;
    H245_MultiplexElement_repeatCount m_repeatCount;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexEntrySendAck
//

class H245_MultiplexEntrySendAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexEntrySendAck, PASN_Sequence);
#endif
  public:
    H245_MultiplexEntrySendAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_ArrayOf_MultiplexTableEntryNumber m_multiplexTableEntryNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexEntrySendReject
//

class H245_MultiplexEntrySendReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexEntrySendReject, PASN_Sequence);
#endif
  public:
    H245_MultiplexEntrySendReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_ArrayOf_MultiplexEntryRejectionDescriptions m_rejectionDescriptions;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexEntryRejectionDescriptions
//

class H245_MultiplexEntryRejectionDescriptions : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexEntryRejectionDescriptions, PASN_Sequence);
#endif
  public:
    H245_MultiplexEntryRejectionDescriptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MultiplexTableEntryNumber m_multiplexTableEntryNumber;
    H245_MultiplexEntryRejectionDescriptions_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplexEntrySendRelease
//

class H245_MultiplexEntrySendRelease : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplexEntrySendRelease, PASN_Sequence);
#endif
  public:
    H245_MultiplexEntrySendRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_MultiplexTableEntryNumber m_multiplexTableEntryNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestMultiplexEntry
//

class H245_RequestMultiplexEntry : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMultiplexEntry, PASN_Sequence);
#endif
  public:
    H245_RequestMultiplexEntry(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestMultiplexEntryAck
//

class H245_RequestMultiplexEntryAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMultiplexEntryAck, PASN_Sequence);
#endif
  public:
    H245_RequestMultiplexEntryAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestMultiplexEntryReject
//

class H245_RequestMultiplexEntryReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMultiplexEntryReject, PASN_Sequence);
#endif
  public:
    H245_RequestMultiplexEntryReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers;
    H245_ArrayOf_RequestMultiplexEntryRejectionDescriptions m_rejectionDescriptions;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestMultiplexEntryRejectionDescriptions
//

class H245_RequestMultiplexEntryRejectionDescriptions : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMultiplexEntryRejectionDescriptions, PASN_Sequence);
#endif
  public:
    H245_RequestMultiplexEntryRejectionDescriptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MultiplexTableEntryNumber m_multiplexTableEntryNumber;
    H245_RequestMultiplexEntryRejectionDescriptions_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestMultiplexEntryRelease
//

class H245_RequestMultiplexEntryRelease : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMultiplexEntryRelease, PASN_Sequence);
#endif
  public:
    H245_RequestMultiplexEntryRelease(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_MultiplexTableEntryNumber m_entryNumbers;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestMode
//

class H245_RequestMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestMode, PASN_Sequence);
#endif
  public:
    H245_RequestMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_ArrayOf_ModeDescription m_requestedModes;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestModeAck
//

class H245_RequestModeAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestModeAck, PASN_Sequence);
#endif
  public:
    H245_RequestModeAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_RequestModeAck_response m_response;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestModeReject
//

class H245_RequestModeReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestModeReject, PASN_Sequence);
#endif
  public:
    H245_RequestModeReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_RequestModeReject_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RedundancyEncodingDTModeElement
//

class H245_RedundancyEncodingDTModeElement : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingDTModeElement, PASN_Sequence);
#endif
  public:
    H245_RedundancyEncodingDTModeElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_RedundancyEncodingDTModeElement_type m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultiplePayloadStreamMode
//

class H245_MultiplePayloadStreamMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultiplePayloadStreamMode, PASN_Sequence);
#endif
  public:
    H245_MultiplePayloadStreamMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_MultiplePayloadStreamElementMode m_elements;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// FECMode
//

class H245_FECMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECMode, PASN_Sequence);
#endif
  public:
    H245_FECMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_fecScheme,
      e_rfc2733Format
    };

    H245_ModeElementType m_protectedElement;
    PASN_ObjectId m_fecScheme;
    H245_FECMode_rfc2733Format m_rfc2733Format;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H223ModeParameters
//

class H245_H223ModeParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H223ModeParameters, PASN_Sequence);
#endif
  public:
    H245_H223ModeParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_H223ModeParameters_adaptationLayerType m_adaptationLayerType;
    PASN_Boolean m_segmentableFlag;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RedundancyEncodingMode
//

class H245_RedundancyEncodingMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingMode, PASN_Sequence);
#endif
  public:
    H245_RedundancyEncodingMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_secondaryEncoding
    };

    H245_RedundancyEncodingMethod m_redundancyEncodingMethod;
    H245_RedundancyEncodingMode_secondaryEncoding m_secondaryEncoding;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H261VideoMode
//

class H245_H261VideoMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H261VideoMode, PASN_Sequence);
#endif
  public:
    H245_H261VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_H261VideoMode_resolution m_resolution;
    PASN_Integer m_bitRate;
    PASN_Boolean m_stillImageTransmission;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H262VideoMode
//

class H245_H262VideoMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H262VideoMode, PASN_Sequence);
#endif
  public:
    H245_H262VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_videoBitRate,
      e_vbvBufferSize,
      e_samplesPerLine,
      e_linesPerFrame,
      e_framesPerSecond,
      e_luminanceSampleRate
    };

    H245_H262VideoMode_profileAndLevel m_profileAndLevel;
    PASN_Integer m_videoBitRate;
    PASN_Integer m_vbvBufferSize;
    PASN_Integer m_samplesPerLine;
    PASN_Integer m_linesPerFrame;
    PASN_Integer m_framesPerSecond;
    PASN_Integer m_luminanceSampleRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// IS11172AudioMode
//

class H245_IS11172AudioMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS11172AudioMode, PASN_Sequence);
#endif
  public:
    H245_IS11172AudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_IS11172AudioMode_audioLayer m_audioLayer;
    H245_IS11172AudioMode_audioSampling m_audioSampling;
    H245_IS11172AudioMode_multichannelType m_multichannelType;
    PASN_Integer m_bitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// IS13818AudioMode
//

class H245_IS13818AudioMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_IS13818AudioMode, PASN_Sequence);
#endif
  public:
    H245_IS13818AudioMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_IS13818AudioMode_audioLayer m_audioLayer;
    H245_IS13818AudioMode_audioSampling m_audioSampling;
    H245_IS13818AudioMode_multichannelType m_multichannelType;
    PASN_Boolean m_lowFrequencyEnhancement;
    PASN_Boolean m_multilingual;
    PASN_Integer m_bitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// G7231AnnexCMode
//

class H245_G7231AnnexCMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_G7231AnnexCMode, PASN_Sequence);
#endif
  public:
    H245_G7231AnnexCMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_maxAl_sduAudioFrames;
    PASN_Boolean m_silenceSuppression;
    H245_G7231AnnexCMode_g723AnnexCAudioMode m_g723AnnexCAudioMode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataMode
//

class H245_DataMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataMode, PASN_Sequence);
#endif
  public:
    H245_DataMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DataMode_application m_application;
    PASN_Integer m_bitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MaintenanceLoopRequest
//

class H245_MaintenanceLoopRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopRequest, PASN_Sequence);
#endif
  public:
    H245_MaintenanceLoopRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MaintenanceLoopRequest_type m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MaintenanceLoopAck
//

class H245_MaintenanceLoopAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopAck, PASN_Sequence);
#endif
  public:
    H245_MaintenanceLoopAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MaintenanceLoopAck_type m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MaintenanceLoopReject
//

class H245_MaintenanceLoopReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MaintenanceLoopReject, PASN_Sequence);
#endif
  public:
    H245_MaintenanceLoopReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MaintenanceLoopReject_type m_type;
    H245_MaintenanceLoopReject_cause m_cause;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CommunicationModeCommand
//

class H245_CommunicationModeCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CommunicationModeCommand, PASN_Sequence);
#endif
  public:
    H245_CommunicationModeCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_CommunicationModeTableEntry m_communicationModeTable;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// TerminalLabel
//

class H245_TerminalLabel : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalLabel, PASN_Sequence);
#endif
  public:
    H245_TerminalLabel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_McuNumber m_mcuNumber;
    H245_TerminalNumber m_terminalNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RequestAllTerminalIDsResponse
//

class H245_RequestAllTerminalIDsResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RequestAllTerminalIDsResponse, PASN_Sequence);
#endif
  public:
    H245_RequestAllTerminalIDsResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_TerminalInformation m_terminalInformation;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// TerminalInformation
//

class H245_TerminalInformation : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_TerminalInformation, PASN_Sequence);
#endif
  public:
    H245_TerminalInformation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalLabel m_terminalLabel;
    H245_TerminalID m_terminalID;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DialingInformationNumber
//

class H245_DialingInformationNumber : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DialingInformationNumber, PASN_Sequence);
#endif
  public:
    H245_DialingInformationNumber(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_subAddress
    };

    PASN_NumericString m_networkAddress;
    PASN_IA5String m_subAddress;
    H245_ArrayOf_DialingInformationNetworkType m_networkType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// LogicalChannelRateReject
//

class H245_LogicalChannelRateReject : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_LogicalChannelRateReject, PASN_Sequence);
#endif
  public:
    H245_LogicalChannelRateReject(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_currentMaximumBitRate
    };

    H245_SequenceNumber m_sequenceNumber;
    H245_LogicalChannelNumber m_logicalChannelNumber;
    H245_LogicalChannelRateRejectReason m_rejectReason;
    H245_MaximumBitRate m_currentMaximumBitRate;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// FlowControlCommand
//

class H245_FlowControlCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FlowControlCommand, PASN_Sequence);
#endif
  public:
    H245_FlowControlCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_FlowControlCommand_scope m_scope;
    H245_FlowControlCommand_restriction m_restriction;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand
//

class H245_MiscellaneousCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_direction
    };

    H245_LogicalChannelNumber m_logicalChannelNumber;
    H245_MiscellaneousCommand_type m_type;
    H245_EncryptionUpdateDirection m_direction;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MobileMultilinkReconfigurationCommand
//

class H245_MobileMultilinkReconfigurationCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MobileMultilinkReconfigurationCommand, PASN_Sequence);
#endif
  public:
    H245_MobileMultilinkReconfigurationCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_sampleSize;
    PASN_Integer m_samplesPerFrame;
    H245_MobileMultilinkReconfigurationCommand_status m_status;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// FunctionNotSupported
//

class H245_FunctionNotSupported : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FunctionNotSupported, PASN_Sequence);
#endif
  public:
    H245_FunctionNotSupported(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_returnedFunction
    };

    H245_FunctionNotSupported_cause m_cause;
    PASN_OctetString m_returnedFunction;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MiscellaneousIndication
//

class H245_MiscellaneousIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousIndication, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_LogicalChannelNumber m_logicalChannelNumber;
    H245_MiscellaneousIndication_type m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// JitterIndication
//

class H245_JitterIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_JitterIndication, PASN_Sequence);
#endif
  public:
    H245_JitterIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_skippedFrameCount,
      e_additionalDecoderBuffer
    };

    H245_JitterIndication_scope m_scope;
    PASN_Integer m_estimatedReceivedJitterMantissa;
    PASN_Integer m_estimatedReceivedJitterExponent;
    PASN_Integer m_skippedFrameCount;
    PASN_Integer m_additionalDecoderBuffer;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// FlowControlIndication
//

class H245_FlowControlIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FlowControlIndication, PASN_Sequence);
#endif
  public:
    H245_FlowControlIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_FlowControlIndication_scope m_scope;
    H245_FlowControlIndication_restriction m_restriction;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VCCapability_availableBitRates
//

class H245_VCCapability_availableBitRates : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VCCapability_availableBitRates, PASN_Sequence);
#endif
  public:
    H245_VCCapability_availableBitRates(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_VCCapability_availableBitRates_type m_type;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VCCapability_aal1ViaGateway
//

class H245_VCCapability_aal1ViaGateway : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VCCapability_aal1ViaGateway, PASN_Sequence);
#endif
  public:
    H245_VCCapability_aal1ViaGateway(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_ArrayOf_Q2931Address m_gatewayAddress;
    PASN_Boolean m_nullClockRecovery;
    PASN_Boolean m_srtsClockRecovery;
    PASN_Boolean m_adaptiveClockRecovery;
    PASN_Boolean m_nullErrorCorrection;
    PASN_Boolean m_longInterleaver;
    PASN_Boolean m_shortInterleaver;
    PASN_Boolean m_errorCorrectionOnly;
    PASN_Boolean m_structuredDataTransfer;
    PASN_Boolean m_partiallyFilledCells;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RefPictureSelection_enhancedReferencePicSelect
//

class H245_RefPictureSelection_enhancedReferencePicSelect : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RefPictureSelection_enhancedReferencePicSelect, PASN_Sequence);
#endif
  public:
    H245_RefPictureSelection_enhancedReferencePicSelect(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_subPictureRemovalParameters
    };

    H245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters m_subPictureRemovalParameters;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CustomPictureFormat_mPI
//

class H245_CustomPictureFormat_mPI : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat_mPI, PASN_Sequence);
#endif
  public:
    H245_CustomPictureFormat_mPI(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_standardMPI,
      e_customPCF
    };

    PASN_Integer m_standardMPI;
    H245_CustomPictureFormat_mPI_customPCF m_customPCF;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECCapability_rfc2733
//

class H245_DepFECCapability_rfc2733 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECCapability_rfc2733, PASN_Sequence);
#endif
  public:
    H245_DepFECCapability_rfc2733(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Boolean m_redundancyEncoding;
    H245_DepFECCapability_rfc2733_separateStream m_separateStream;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannel_forwardLogicalChannelParameters
//

class H245_OpenLogicalChannel_forwardLogicalChannelParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannel_forwardLogicalChannelParameters, PASN_Sequence);
#endif
  public:
    H245_OpenLogicalChannel_forwardLogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_portNumber,
      e_forwardLogicalChannelDependency,
      e_replacementFor
    };

    PASN_Integer m_portNumber;
    H245_DataType m_dataType;
    H245_OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters m_multiplexParameters;
    H245_LogicalChannelNumber m_forwardLogicalChannelDependency;
    H245_LogicalChannelNumber m_replacementFor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannel_reverseLogicalChannelParameters
//

class H245_OpenLogicalChannel_reverseLogicalChannelParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannel_reverseLogicalChannelParameters, PASN_Sequence);
#endif
  public:
    H245_OpenLogicalChannel_reverseLogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_multiplexParameters,
      e_reverseLogicalChannelDependency,
      e_replacementFor
    };

    H245_DataType m_dataType;
    H245_OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters m_multiplexParameters;
    H245_LogicalChannelNumber m_reverseLogicalChannelDependency;
    H245_LogicalChannelNumber m_replacementFor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RedundancyEncoding_rtpRedundancyEncoding
//

class H245_RedundancyEncoding_rtpRedundancyEncoding : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncoding_rtpRedundancyEncoding, PASN_Sequence);
#endif
  public:
    H245_RedundancyEncoding_rtpRedundancyEncoding(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_primary,
      e_secondary
    };

    H245_RedundancyEncodingElement m_primary;
    H245_ArrayOf_RedundancyEncodingElement m_secondary;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECData_rfc2733
//

class H245_DepFECData_rfc2733 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECData_rfc2733, PASN_Sequence);
#endif
  public:
    H245_DepFECData_rfc2733(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DepFECData_rfc2733_mode m_mode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// FECData_rfc2733
//

class H245_FECData_rfc2733 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_FECData_rfc2733, PASN_Sequence);
#endif
  public:
    H245_FECData_rfc2733(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_fecScheme
    };

    PASN_Integer m_protectedPayloadType;
    PASN_ObjectId m_fecScheme;
    H245_FECData_rfc2733_pktMode m_pktMode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UnicastAddress_iPSourceRouteAddress
//

class H245_UnicastAddress_iPSourceRouteAddress : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UnicastAddress_iPSourceRouteAddress, PASN_Sequence);
#endif
  public:
    H245_UnicastAddress_iPSourceRouteAddress(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_UnicastAddress_iPSourceRouteAddress_routing m_routing;
    PASN_OctetString m_network;
    PASN_Integer m_tsapIdentifier;
    H245_UnicastAddress_iPSourceRouteAddress_route m_route;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannelAck_reverseLogicalChannelParameters
//

class H245_OpenLogicalChannelAck_reverseLogicalChannelParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannelAck_reverseLogicalChannelParameters, PASN_Sequence);
#endif
  public:
    H245_OpenLogicalChannelAck_reverseLogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_portNumber,
      e_multiplexParameters,
      e_replacementFor
    };

    H245_LogicalChannelNumber m_reverseLogicalChannelNumber;
    PASN_Integer m_portNumber;
    H245_OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters m_multiplexParameters;
    H245_LogicalChannelNumber m_replacementFor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DepFECMode_rfc2733Mode
//

class H245_DepFECMode_rfc2733Mode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DepFECMode_rfc2733Mode, PASN_Sequence);
#endif
  public:
    H245_DepFECMode_rfc2733Mode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DepFECMode_rfc2733Mode_mode m_mode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceRequest_requestTerminalCertificate
//

class H245_ConferenceRequest_requestTerminalCertificate : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceRequest_requestTerminalCertificate, PASN_Sequence);
#endif
  public:
    H245_ConferenceRequest_requestTerminalCertificate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_terminalLabel,
      e_certSelectionCriteria,
      e_sRandom
    };

    H245_TerminalLabel m_terminalLabel;
    H245_CertSelectionCriteria m_certSelectionCriteria;
    PASN_Integer m_sRandom;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_mCTerminalIDResponse
//

class H245_ConferenceResponse_mCTerminalIDResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_mCTerminalIDResponse, PASN_Sequence);
#endif
  public:
    H245_ConferenceResponse_mCTerminalIDResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalLabel m_terminalLabel;
    H245_TerminalID m_terminalID;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_terminalIDResponse
//

class H245_ConferenceResponse_terminalIDResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_terminalIDResponse, PASN_Sequence);
#endif
  public:
    H245_ConferenceResponse_terminalIDResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalLabel m_terminalLabel;
    H245_TerminalID m_terminalID;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_conferenceIDResponse
//

class H245_ConferenceResponse_conferenceIDResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_conferenceIDResponse, PASN_Sequence);
#endif
  public:
    H245_ConferenceResponse_conferenceIDResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalLabel m_terminalLabel;
    H245_ConferenceID m_conferenceID;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_passwordResponse
//

class H245_ConferenceResponse_passwordResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_passwordResponse, PASN_Sequence);
#endif
  public:
    H245_ConferenceResponse_passwordResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalLabel m_terminalLabel;
    H245_Password m_password;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_chairTokenOwnerResponse
//

class H245_ConferenceResponse_chairTokenOwnerResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_chairTokenOwnerResponse, PASN_Sequence);
#endif
  public:
    H245_ConferenceResponse_chairTokenOwnerResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_TerminalLabel m_terminalLabel;
    H245_TerminalID m_terminalID;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ConferenceResponse_terminalCertificateResponse
//

class H245_ConferenceResponse_terminalCertificateResponse : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ConferenceResponse_terminalCertificateResponse, PASN_Sequence);
#endif
  public:
    H245_ConferenceResponse_terminalCertificateResponse(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_terminalLabel,
      e_certificateResponse
    };

    H245_TerminalLabel m_terminalLabel;
    PASN_OctetString m_certificateResponse;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkRequest_maximumHeaderInterval
//

class H245_MultilinkRequest_maximumHeaderInterval : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkRequest_maximumHeaderInterval, PASN_Sequence);
#endif
  public:
    H245_MultilinkRequest_maximumHeaderInterval(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MultilinkRequest_maximumHeaderInterval_requestType m_requestType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MultilinkResponse_addConnection
//

class H245_MultilinkResponse_addConnection : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MultilinkResponse_addConnection, PASN_Sequence);
#endif
  public:
    H245_MultilinkResponse_addConnection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_sequenceNumber;
    H245_MultilinkResponse_addConnection_responseCode m_responseCode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// SendTerminalCapabilitySet_specificRequest
//

class H245_SendTerminalCapabilitySet_specificRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_SendTerminalCapabilitySet_specificRequest, PASN_Sequence);
#endif
  public:
    H245_SendTerminalCapabilitySet_specificRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_capabilityTableEntryNumbers,
      e_capabilityDescriptorNumbers
    };

    PASN_Boolean m_multiplexCapability;
    H245_ArrayOf_CapabilityTableEntryNumber m_capabilityTableEntryNumbers;
    H245_ArrayOf_CapabilityDescriptorNumber m_capabilityDescriptorNumbers;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EncryptionCommand_encryptionAlgorithmID
//

class H245_EncryptionCommand_encryptionAlgorithmID : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionCommand_encryptionAlgorithmID, PASN_Sequence);
#endif
  public:
    H245_EncryptionCommand_encryptionAlgorithmID(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_SequenceNumber m_h233AlgorithmIdentifier;
    H245_NonStandardParameter m_associatedAlgorithm;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCCommand_reverseParameters
//

class H245_NewATMVCCommand_reverseParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_reverseParameters, PASN_Sequence);
#endif
  public:
    H245_NewATMVCCommand_reverseParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_bitRate;
    PASN_Boolean m_bitRateLockedToPCRClock;
    PASN_Boolean m_bitRateLockedToNetworkClock;
    H245_NewATMVCCommand_reverseParameters_multiplex m_multiplex;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCIndication_reverseParameters
//

class H245_NewATMVCIndication_reverseParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_reverseParameters, PASN_Sequence);
#endif
  public:
    H245_NewATMVCIndication_reverseParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_bitRate;
    PASN_Boolean m_bitRateLockedToPCRClock;
    PASN_Boolean m_bitRateLockedToNetworkClock;
    H245_NewATMVCIndication_reverseParameters_multiplex m_multiplex;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UserInputIndication_signal
//

class H245_UserInputIndication_signal : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_signal, PASN_Sequence);
#endif
  public:
    H245_UserInputIndication_signal(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_duration,
      e_rtp,
      e_rtpPayloadIndication,
      e_paramS,
      e_encryptedSignalType,
      e_algorithmOID
    };

    PASN_IA5String m_signalType;
    PASN_Integer m_duration;
    H245_UserInputIndication_signal_rtp m_rtp;
    PASN_Null m_rtpPayloadIndication;
    H245_Params m_paramS;
    PASN_OctetString m_encryptedSignalType;
    PASN_ObjectId m_algorithmOID;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UserInputIndication_signalUpdate
//

class H245_UserInputIndication_signalUpdate : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_signalUpdate, PASN_Sequence);
#endif
  public:
    H245_UserInputIndication_signalUpdate(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_rtp
    };

    PASN_Integer m_duration;
    H245_UserInputIndication_signalUpdate_rtp m_rtp;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// UserInputIndication_extendedAlphanumeric
//

class H245_UserInputIndication_extendedAlphanumeric : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_UserInputIndication_extendedAlphanumeric, PASN_Sequence);
#endif
  public:
    H245_UserInputIndication_extendedAlphanumeric(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_rtpPayloadIndication,
      e_encryptedAlphanumeric
    };

    PASN_GeneralString m_alphanumeric;
    PASN_Null m_rtpPayloadIndication;
    H245_UserInputIndication_extendedAlphanumeric_encryptedAlphanumeric m_encryptedAlphanumeric;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// V76LogicalChannelParameters_mode_eRM
//

class H245_V76LogicalChannelParameters_mode_eRM : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76LogicalChannelParameters_mode_eRM, PASN_Sequence);
#endif
  public:
    H245_V76LogicalChannelParameters_mode_eRM(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_windowSize;
    H245_V76LogicalChannelParameters_mode_eRM_recovery m_recovery;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_progressiveRefinementStart
//

class H245_MiscellaneousCommand_type_progressiveRefinementStart : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_progressiveRefinementStart, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand_type_progressiveRefinementStart(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount m_repeatCount;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// MiscellaneousCommand_type_encryptionUpdateCommand
//

class H245_MiscellaneousCommand_type_encryptionUpdateCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_MiscellaneousCommand_type_encryptionUpdateCommand, PASN_Sequence);
#endif
  public:
    H245_MiscellaneousCommand_type_encryptionUpdateCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_multiplePayloadStream
    };

    H245_EncryptionSync m_encryptionSync;
    H245_MultiplePayloadStream m_multiplePayloadStream;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCCommand_aal_aal1
//

class H245_NewATMVCCommand_aal_aal1 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand_aal_aal1, PASN_Sequence);
#endif
  public:
    H245_NewATMVCCommand_aal_aal1(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_NewATMVCCommand_aal_aal1_clockRecovery m_clockRecovery;
    H245_NewATMVCCommand_aal_aal1_errorCorrection m_errorCorrection;
    PASN_Boolean m_structuredDataTransfer;
    PASN_Boolean m_partiallyFilledCells;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCIndication_aal_aal1
//

class H245_NewATMVCIndication_aal_aal1 : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication_aal_aal1, PASN_Sequence);
#endif
  public:
    H245_NewATMVCIndication_aal_aal1(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_NewATMVCIndication_aal_aal1_clockRecovery m_clockRecovery;
    H245_NewATMVCIndication_aal_aal1_errorCorrection m_errorCorrection;
    PASN_Boolean m_structuredDataTransfer;
    PASN_Boolean m_partiallyFilledCells;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NonStandardMessage
//

class H245_NonStandardMessage : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NonStandardMessage, PASN_Sequence);
#endif
  public:
    H245_NonStandardMessage(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_NonStandardParameter m_nonStandardData;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// VCCapability
//

class H245_VCCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_VCCapability, PASN_Sequence);
#endif
  public:
    H245_VCCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_aal1,
      e_aal5,
      e_aal1ViaGateway
    };

    H245_VCCapability_aal1 m_aal1;
    H245_VCCapability_aal5 m_aal5;
    PASN_Boolean m_transportStream;
    PASN_Boolean m_programStream;
    H245_VCCapability_availableBitRates m_availableBitRates;
    H245_VCCapability_aal1ViaGateway m_aal1ViaGateway;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H2250Capability
//

class H245_H2250Capability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H2250Capability, PASN_Sequence);
#endif
  public:
    H245_H2250Capability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_transportCapability,
      e_redundancyEncodingCapability,
      e_logicalChannelSwitchingCapability,
      e_t120DynamicPortCapability
    };

    PASN_Integer m_maximumAudioDelayJitter;
    H245_MultipointCapability m_receiveMultipointCapability;
    H245_MultipointCapability m_transmitMultipointCapability;
    H245_MultipointCapability m_receiveAndTransmitMultipointCapability;
    H245_H2250Capability_mcCapability m_mcCapability;
    PASN_Boolean m_rtcpVideoControlCapability;
    H245_MediaPacketizationCapability m_mediaPacketizationCapability;
    H245_TransportCapability m_transportCapability;
    H245_ArrayOf_RedundancyEncodingCapability m_redundancyEncodingCapability;
    PASN_Boolean m_logicalChannelSwitchingCapability;
    PASN_Boolean m_t120DynamicPortCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RefPictureSelection
//

class H245_RefPictureSelection : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RefPictureSelection, PASN_Sequence);
#endif
  public:
    H245_RefPictureSelection(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_additionalPictureMemory,
      e_enhancedReferencePicSelect
    };

    H245_RefPictureSelection_additionalPictureMemory m_additionalPictureMemory;
    PASN_Boolean m_videoMux;
    H245_RefPictureSelection_videoBackChannelSend m_videoBackChannelSend;
    H245_RefPictureSelection_enhancedReferencePicSelect m_enhancedReferencePicSelect;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CustomPictureFormat
//

class H245_CustomPictureFormat : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CustomPictureFormat, PASN_Sequence);
#endif
  public:
    H245_CustomPictureFormat(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_maxCustomPictureWidth;
    PASN_Integer m_maxCustomPictureHeight;
    PASN_Integer m_minCustomPictureWidth;
    PASN_Integer m_minCustomPictureHeight;
    H245_CustomPictureFormat_mPI m_mPI;
    H245_CustomPictureFormat_pixelAspectInformation m_pixelAspectInformation;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H263VideoModeCombos
//

class H245_H263VideoModeCombos : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H263VideoModeCombos, PASN_Sequence);
#endif
  public:
    H245_H263VideoModeCombos(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_H263ModeComboFlags m_h263VideoUncoupledModes;
    H245_ArrayOf_H263ModeComboFlags m_h263VideoCoupledModes;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// T38FaxProfile
//

class H245_T38FaxProfile : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_T38FaxProfile, PASN_Sequence);
#endif
  public:
    H245_T38FaxProfile(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_version,
      e_t38FaxRateManagement,
      e_t38FaxUdpOptions,
      e_t38FaxTcpOptions
    };

    PASN_Boolean m_fillBitRemoval;
    PASN_Boolean m_transcodingJBIG;
    PASN_Boolean m_transcodingMMR;
    PASN_Integer m_version;
    H245_T38FaxRateManagement m_t38FaxRateManagement;
    H245_T38FaxUdpOptions m_t38FaxUdpOptions;
    H245_T38FaxTcpOptions m_t38FaxTcpOptions;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EncryptionAuthenticationAndIntegrity
//

class H245_EncryptionAuthenticationAndIntegrity : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EncryptionAuthenticationAndIntegrity, PASN_Sequence);
#endif
  public:
    H245_EncryptionAuthenticationAndIntegrity(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_encryptionCapability,
      e_authenticationCapability,
      e_integrityCapability,
      e_genericH235SecurityCapability
    };

    H245_EncryptionCapability m_encryptionCapability;
    H245_AuthenticationCapability m_authenticationCapability;
    H245_IntegrityCapability m_integrityCapability;
    H245_GenericCapability m_genericH235SecurityCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannel
//

class H245_OpenLogicalChannel : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannel, PASN_Sequence);
#endif
  public:
    H245_OpenLogicalChannel(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_reverseLogicalChannelParameters,
      e_separateStack,
      e_encryptionSync
    };

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;
    H245_OpenLogicalChannel_forwardLogicalChannelParameters m_forwardLogicalChannelParameters;
    H245_OpenLogicalChannel_reverseLogicalChannelParameters m_reverseLogicalChannelParameters;
    H245_NetworkAccessParameters m_separateStack;
    H245_EncryptionSync m_encryptionSync;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H235Media
//

class H245_H235Media : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H235Media, PASN_Sequence);
#endif
  public:
    H245_H235Media(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_EncryptionAuthenticationAndIntegrity m_encryptionAuthenticationAndIntegrity;
    H245_H235Media_mediaType m_mediaType;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// V76LogicalChannelParameters
//

class H245_V76LogicalChannelParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_V76LogicalChannelParameters, PASN_Sequence);
#endif
  public:
    H245_V76LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_V76HDLCParameters m_hdlcParameters;
    H245_V76LogicalChannelParameters_suspendResume m_suspendResume;
    PASN_Boolean m_uIH;
    H245_V76LogicalChannelParameters_mode m_mode;
    H245_V75Parameters m_v75Parameters;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RedundancyEncoding
//

class H245_RedundancyEncoding : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncoding, PASN_Sequence);
#endif
  public:
    H245_RedundancyEncoding(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_secondaryEncoding,
      e_rtpRedundancyEncoding
    };

    H245_RedundancyEncodingMethod m_redundancyEncodingMethod;
    H245_DataType m_secondaryEncoding;
    H245_RedundancyEncoding_rtpRedundancyEncoding m_rtpRedundancyEncoding;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// OpenLogicalChannelAck
//

class H245_OpenLogicalChannelAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_OpenLogicalChannelAck, PASN_Sequence);
#endif
  public:
    H245_OpenLogicalChannelAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_reverseLogicalChannelParameters,
      e_separateStack,
      e_forwardMultiplexAckParameters,
      e_encryptionSync
    };

    H245_LogicalChannelNumber m_forwardLogicalChannelNumber;
    H245_OpenLogicalChannelAck_reverseLogicalChannelParameters m_reverseLogicalChannelParameters;
    H245_NetworkAccessParameters m_separateStack;
    H245_OpenLogicalChannelAck_forwardMultiplexAckParameters m_forwardMultiplexAckParameters;
    H245_EncryptionSync m_encryptionSync;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H235Mode
//

class H245_H235Mode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H235Mode, PASN_Sequence);
#endif
  public:
    H245_H235Mode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_EncryptionAuthenticationAndIntegrity m_encryptionAuthenticationAndIntegrity;
    H245_H235Mode_mediaMode m_mediaMode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// RedundancyEncodingDTMode
//

class H245_RedundancyEncodingDTMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_RedundancyEncodingDTMode, PASN_Sequence);
#endif
  public:
    H245_RedundancyEncodingDTMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_RedundancyEncodingMethod m_redundancyEncodingMethod;
    H245_RedundancyEncodingDTModeElement m_primary;
    H245_ArrayOf_RedundancyEncodingDTModeElement m_secondary;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H2250ModeParameters
//

class H245_H2250ModeParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H2250ModeParameters, PASN_Sequence);
#endif
  public:
    H245_H2250ModeParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_redundancyEncodingMode
    };

    H245_RedundancyEncodingMode m_redundancyEncodingMode;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// CommunicationModeTableEntry
//

class H245_CommunicationModeTableEntry : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_CommunicationModeTableEntry, PASN_Sequence);
#endif
  public:
    H245_CommunicationModeTableEntry(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandard,
      e_associatedSessionID,
      e_terminalLabel,
      e_mediaChannel,
      e_mediaGuaranteedDelivery,
      e_mediaControlChannel,
      e_mediaControlGuaranteedDelivery,
      e_redundancyEncoding,
      e_sessionDependency,
      e_destination
    };

    H245_ArrayOf_NonStandardParameter m_nonStandard;
    PASN_Integer m_sessionID;
    PASN_Integer m_associatedSessionID;
    H245_TerminalLabel m_terminalLabel;
    PASN_BMPString m_sessionDescription;
    H245_CommunicationModeTableEntry_dataType m_dataType;
    H245_TransportAddress m_mediaChannel;
    PASN_Boolean m_mediaGuaranteedDelivery;
    H245_TransportAddress m_mediaControlChannel;
    PASN_Boolean m_mediaControlGuaranteedDelivery;
    H245_RedundancyEncoding m_redundancyEncoding;
    PASN_Integer m_sessionDependency;
    H245_TerminalLabel m_destination;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCCommand
//

class H245_NewATMVCCommand : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCCommand, PASN_Sequence);
#endif
  public:
    H245_NewATMVCCommand(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_resourceID;
    PASN_Integer m_bitRate;
    PASN_Boolean m_bitRateLockedToPCRClock;
    PASN_Boolean m_bitRateLockedToNetworkClock;
    H245_NewATMVCCommand_aal m_aal;
    H245_NewATMVCCommand_multiplex m_multiplex;
    H245_NewATMVCCommand_reverseParameters m_reverseParameters;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// NewATMVCIndication
//

class H245_NewATMVCIndication : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_NewATMVCIndication, PASN_Sequence);
#endif
  public:
    H245_NewATMVCIndication(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_reverseParameters
    };

    PASN_Integer m_resourceID;
    PASN_Integer m_bitRate;
    PASN_Boolean m_bitRateLockedToPCRClock;
    PASN_Boolean m_bitRateLockedToNetworkClock;
    H245_NewATMVCIndication_aal m_aal;
    H245_NewATMVCIndication_multiplex m_multiplex;
    H245_NewATMVCIndication_reverseParameters m_reverseParameters;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataApplicationCapability_application_t38fax
//

class H245_DataApplicationCapability_application_t38fax : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataApplicationCapability_application_t38fax, PASN_Sequence);
#endif
  public:
    H245_DataApplicationCapability_application_t38fax(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DataProtocolCapability m_t38FaxProtocol;
    H245_T38FaxProfile m_t38FaxProfile;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// DataMode_application_t38fax
//

class H245_DataMode_application_t38fax : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_DataMode_application_t38fax, PASN_Sequence);
#endif
  public:
    H245_DataMode_application_t38fax(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_DataProtocolCapability m_t38FaxProtocol;
    H245_T38FaxProfile m_t38FaxProfile;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H235SecurityCapability
//

class H245_H235SecurityCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H235SecurityCapability, PASN_Sequence);
#endif
  public:
    H245_H235SecurityCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_EncryptionAuthenticationAndIntegrity m_encryptionAuthenticationAndIntegrity;
    H245_CapabilityTableEntryNumber m_mediaCapability;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H263Options
//

class H245_H263Options : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H263Options, PASN_Sequence);
#endif
  public:
    H245_H263Options(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_transparencyParameters,
      e_refPictureSelection,
      e_customPictureClockFrequency,
      e_customPictureFormat,
      e_modeCombos,
      e_videoBadMBsCap,
      e_h263Version3Options
    };

    PASN_Boolean m_advancedIntraCodingMode;
    PASN_Boolean m_deblockingFilterMode;
    PASN_Boolean m_improvedPBFramesMode;
    PASN_Boolean m_unlimitedMotionVectors;
    PASN_Boolean m_fullPictureFreeze;
    PASN_Boolean m_partialPictureFreezeAndRelease;
    PASN_Boolean m_resizingPartPicFreezeAndRelease;
    PASN_Boolean m_fullPictureSnapshot;
    PASN_Boolean m_partialPictureSnapshot;
    PASN_Boolean m_videoSegmentTagging;
    PASN_Boolean m_progressiveRefinement;
    PASN_Boolean m_dynamicPictureResizingByFour;
    PASN_Boolean m_dynamicPictureResizingSixteenthPel;
    PASN_Boolean m_dynamicWarpingHalfPel;
    PASN_Boolean m_dynamicWarpingSixteenthPel;
    PASN_Boolean m_independentSegmentDecoding;
    PASN_Boolean m_slicesInOrder_NonRect;
    PASN_Boolean m_slicesInOrder_Rect;
    PASN_Boolean m_slicesNoOrder_NonRect;
    PASN_Boolean m_slicesNoOrder_Rect;
    PASN_Boolean m_alternateInterVLCMode;
    PASN_Boolean m_modifiedQuantizationMode;
    PASN_Boolean m_reducedResolutionUpdate;
    H245_TransparencyParameters m_transparencyParameters;
    PASN_Boolean m_separateVideoBackChannel;
    H245_RefPictureSelection m_refPictureSelection;
    H245_ArrayOf_CustomPictureClockFrequency m_customPictureClockFrequency;
    H245_ArrayOf_CustomPictureFormat m_customPictureFormat;
    H245_ArrayOf_H263VideoModeCombos m_modeCombos;
    PASN_Boolean m_videoBadMBsCap;
    H245_H263Version3Options m_h263Version3Options;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H2250LogicalChannelParameters
//

class H245_H2250LogicalChannelParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H2250LogicalChannelParameters, PASN_Sequence);
#endif
  public:
    H245_H2250LogicalChannelParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandard,
      e_associatedSessionID,
      e_mediaChannel,
      e_mediaGuaranteedDelivery,
      e_mediaControlChannel,
      e_mediaControlGuaranteedDelivery,
      e_silenceSuppression,
      e_destination,
      e_dynamicRTPPayloadType,
      e_mediaPacketization,
      e_transportCapability,
      e_redundancyEncoding,
      e_source
    };

    H245_ArrayOf_NonStandardParameter m_nonStandard;
    PASN_Integer m_sessionID;
    PASN_Integer m_associatedSessionID;
    H245_TransportAddress m_mediaChannel;
    PASN_Boolean m_mediaGuaranteedDelivery;
    H245_TransportAddress m_mediaControlChannel;
    PASN_Boolean m_mediaControlGuaranteedDelivery;
    PASN_Boolean m_silenceSuppression;
    H245_TerminalLabel m_destination;
    PASN_Integer m_dynamicRTPPayloadType;
    H245_H2250LogicalChannelParameters_mediaPacketization m_mediaPacketization;
    H245_TransportCapability m_transportCapability;
    H245_RedundancyEncoding m_redundancyEncoding;
    H245_TerminalLabel m_source;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// ModeElement
//

class H245_ModeElement : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_ModeElement, PASN_Sequence);
#endif
  public:
    H245_ModeElement(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_h223ModeParameters,
      e_v76ModeParameters,
      e_h2250ModeParameters,
      e_genericModeParameters,
      e_multiplexedStreamModeParameters,
      e_logicalChannelNumber
    };

    H245_ModeElementType m_type;
    H245_H223ModeParameters m_h223ModeParameters;
    H245_V76ModeParameters m_v76ModeParameters;
    H245_H2250ModeParameters m_h2250ModeParameters;
    H245_GenericCapability m_genericModeParameters;
    H245_MultiplexedStreamModeParameters m_multiplexedStreamModeParameters;
    H245_LogicalChannelNumber m_logicalChannelNumber;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H263VideoMode
//

class H245_H263VideoMode : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H263VideoMode, PASN_Sequence);
#endif
  public:
    H245_H263VideoMode(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_errorCompensation,
      e_enhancementLayerInfo,
      e_h263Options
    };

    H245_H263VideoMode_resolution m_resolution;
    PASN_Integer m_bitRate;
    PASN_Boolean m_unrestrictedVector;
    PASN_Boolean m_arithmeticCoding;
    PASN_Boolean m_advancedPrediction;
    PASN_Boolean m_pbFrames;
    PASN_Boolean m_errorCompensation;
    H245_EnhancementLayerInfo m_enhancementLayerInfo;
    H245_H263Options m_h263Options;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// H263VideoCapability
//

class H245_H263VideoCapability : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_H263VideoCapability, PASN_Sequence);
#endif
  public:
    H245_H263VideoCapability(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_sqcifMPI,
      e_qcifMPI,
      e_cifMPI,
      e_cif4MPI,
      e_cif16MPI,
      e_hrd_B,
      e_bppMaxKb,
      e_slowSqcifMPI,
      e_slowQcifMPI,
      e_slowCifMPI,
      e_slowCif4MPI,
      e_slowCif16MPI,
      e_errorCompensation,
      e_enhancementLayerInfo,
      e_h263Options
    };

    PASN_Integer m_sqcifMPI;
    PASN_Integer m_qcifMPI;
    PASN_Integer m_cifMPI;
    PASN_Integer m_cif4MPI;
    PASN_Integer m_cif16MPI;
    PASN_Integer m_maxBitRate;
    PASN_Boolean m_unrestrictedVector;
    PASN_Boolean m_arithmeticCoding;
    PASN_Boolean m_advancedPrediction;
    PASN_Boolean m_pbFrames;
    PASN_Boolean m_temporalSpatialTradeOffCapability;
    PASN_Integer m_hrd_B;
    PASN_Integer m_bppMaxKb;
    PASN_Integer m_slowSqcifMPI;
    PASN_Integer m_slowQcifMPI;
    PASN_Integer m_slowCifMPI;
    PASN_Integer m_slowCif4MPI;
    PASN_Integer m_slowCif16MPI;
    PASN_Boolean m_errorCompensation;
    H245_EnhancementLayerInfo m_enhancementLayerInfo;
    H245_H263Options m_h263Options;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// EnhancementOptions
//

class H245_EnhancementOptions : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_EnhancementOptions, PASN_Sequence);
#endif
  public:
    H245_EnhancementOptions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_sqcifMPI,
      e_qcifMPI,
      e_cifMPI,
      e_cif4MPI,
      e_cif16MPI,
      e_slowSqcifMPI,
      e_slowQcifMPI,
      e_slowCifMPI,
      e_slowCif4MPI,
      e_slowCif16MPI,
      e_h263Options
    };

    PASN_Integer m_sqcifMPI;
    PASN_Integer m_qcifMPI;
    PASN_Integer m_cifMPI;
    PASN_Integer m_cif4MPI;
    PASN_Integer m_cif16MPI;
    PASN_Integer m_maxBitRate;
    PASN_Boolean m_unrestrictedVector;
    PASN_Boolean m_arithmeticCoding;
    PASN_Boolean m_temporalSpatialTradeOffCapability;
    PASN_Integer m_slowSqcifMPI;
    PASN_Integer m_slowQcifMPI;
    PASN_Integer m_slowCifMPI;
    PASN_Integer m_slowCif4MPI;
    PASN_Integer m_slowCif16MPI;
    PASN_Boolean m_errorCompensation;
    H245_H263Options m_h263Options;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


//
// BEnhancementParameters
//

class H245_BEnhancementParameters : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H245_BEnhancementParameters, PASN_Sequence);
#endif
  public:
    H245_BEnhancementParameters(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    H245_EnhancementOptions m_enhancementOptions;
    PASN_Integer m_numberOfBPictures;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    void Encode(PASN_Stream & strm) const;
#ifndef PASN_NOPRINTON
    void PrintOn(ostream & strm) const;
#endif
    Comparison Compare(const PObject & obj) const;
    PObject * Clone() const;
};


#endif // __H245_H

#endif // if ! H323_DISABLE_H245


// End of h245.h
