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

#if ! H323_DISABLE_H248

#ifndef __H248_H
#define __H248_H

#ifdef P_USE_PRAGMA
#pragma interface
#endif

#include <ptclib/asner.h>

//
// SecurityParmIndex
//

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

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

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


//
// SequenceNum
//

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

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

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


//
// AuthData
//

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

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

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


//
// MId
//

class H248_IP4Address;
class H248_IP6Address;
class H248_DomainName;
class H248_PathName;

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

    enum Choices {
      e_ip4Address,
      e_ip6Address,
      e_domainName,
      e_deviceName,
      e_mtpAddress
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IP4Address &() const;
#else
    operator H248_IP4Address &();
    operator const H248_IP4Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IP6Address &() const;
#else
    operator H248_IP6Address &();
    operator const H248_IP6Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_DomainName &() const;
#else
    operator H248_DomainName &();
    operator const H248_DomainName &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_PathName &() const;
#else
    operator H248_PathName &();
    operator const H248_PathName &() const;
#endif

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


//
// DomainName
//

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

    enum OptionalFields {
      e_portNumber
    };

    PASN_IA5String m_name;
    PASN_Integer m_portNumber;

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


//
// IP4Address
//

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

    enum OptionalFields {
      e_portNumber
    };

    PASN_OctetString m_address;
    PASN_Integer m_portNumber;

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


//
// IP6Address
//

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

    enum OptionalFields {
      e_portNumber
    };

    PASN_OctetString m_address;
    PASN_Integer m_portNumber;

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


//
// PathName
//

class H248_PathName : public PASN_IA5String
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_PathName, PASN_IA5String);
#endif
  public:
    H248_PathName(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass);

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


//
// Transaction
//

class H248_TransactionRequest;
class H248_TransactionPending;
class H248_TransactionReply;
class H248_TransactionResponseAck;

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

    enum Choices {
      e_transactionRequest,
      e_transactionPending,
      e_transactionReply,
      e_transactionResponseAck
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_TransactionRequest &() const;
#else
    operator H248_TransactionRequest &();
    operator const H248_TransactionRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_TransactionPending &() const;
#else
    operator H248_TransactionPending &();
    operator const H248_TransactionPending &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_TransactionReply &() const;
#else
    operator H248_TransactionReply &();
    operator const H248_TransactionReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_TransactionResponseAck &() const;
#else
    operator H248_TransactionResponseAck &();
    operator const H248_TransactionResponseAck &() const;
#endif

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


//
// TransactionId
//

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

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


//
// TransactionPending
//

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

    H248_TransactionId m_transactionId;

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


//
// TransactionResponseAck
//

class H248_TransactionAck;

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

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


//
// TransactionAck
//

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

    enum OptionalFields {
      e_lastAck
    };

    H248_TransactionId m_firstAck;
    H248_TransactionId m_lastAck;

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


//
// ErrorCode
//

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

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


//
// ErrorText
//

class H248_ErrorText : public PASN_IA5String
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_ErrorText, PASN_IA5String);
#endif
  public:
    H248_ErrorText(unsigned tag = UniversalIA5String, TagClass tagClass = UniversalTagClass);

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


//
// ContextID
//

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

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


//
// ContextAttrAuditRequest
//

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

    enum OptionalFields {
      e_topology,
      e_emergency,
      e_priority
    };

    PASN_Null m_topology;
    PASN_Null m_emergency;
    PASN_Null m_priority;

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


//
// Command
//

class H248_AmmRequest;
class H248_SubtractRequest;
class H248_AuditRequest;
class H248_NotifyRequest;
class H248_ServiceChangeRequest;

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

    enum Choices {
      e_addReq,
      e_moveReq,
      e_modReq,
      e_subtractReq,
      e_auditCapRequest,
      e_auditValueRequest,
      e_notifyReq,
      e_serviceChangeReq
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_AmmRequest &() const;
#else
    operator H248_AmmRequest &();
    operator const H248_AmmRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_SubtractRequest &() const;
#else
    operator H248_SubtractRequest &();
    operator const H248_SubtractRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_AuditRequest &() const;
#else
    operator H248_AuditRequest &();
    operator const H248_AuditRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_NotifyRequest &() const;
#else
    operator H248_NotifyRequest &();
    operator const H248_NotifyRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_ServiceChangeRequest &() const;
#else
    operator H248_ServiceChangeRequest &();
    operator const H248_ServiceChangeRequest &() const;
#endif

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


//
// CommandReply
//

class H248_AmmsReply;
class H248_AuditReply;
class H248_NotifyReply;
class H248_ServiceChangeReply;

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

    enum Choices {
      e_addReply,
      e_moveReply,
      e_modReply,
      e_subtractReply,
      e_auditCapReply,
      e_auditValueReply,
      e_notifyReply,
      e_serviceChangeReply
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_AmmsReply &() const;
#else
    operator H248_AmmsReply &();
    operator const H248_AmmsReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_AuditReply &() const;
#else
    operator H248_AuditReply &();
    operator const H248_AuditReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_NotifyReply &() const;
#else
    operator H248_NotifyReply &();
    operator const H248_NotifyReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_ServiceChangeReply &() const;
#else
    operator H248_ServiceChangeReply &();
    operator const H248_ServiceChangeReply &() const;
#endif

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


//
// AmmDescriptor
//

class H248_MediaDescriptor;
class H248_ModemDescriptor;
class H248_MuxDescriptor;
class H248_EventsDescriptor;
class H248_EventBufferDescriptor;
class H248_SignalsDescriptor;
class H248_DigitMapDescriptor;
class H248_AuditDescriptor;

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

    enum Choices {
      e_mediaDescriptor,
      e_modemDescriptor,
      e_muxDescriptor,
      e_eventsDescriptor,
      e_eventBufferDescriptor,
      e_signalsDescriptor,
      e_digitMapDescriptor,
      e_auditDescriptor
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_MediaDescriptor &() const;
#else
    operator H248_MediaDescriptor &();
    operator const H248_MediaDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_ModemDescriptor &() const;
#else
    operator H248_ModemDescriptor &();
    operator const H248_ModemDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_MuxDescriptor &() const;
#else
    operator H248_MuxDescriptor &();
    operator const H248_MuxDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_EventsDescriptor &() const;
#else
    operator H248_EventsDescriptor &();
    operator const H248_EventsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_EventBufferDescriptor &() const;
#else
    operator H248_EventBufferDescriptor &();
    operator const H248_EventBufferDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_SignalsDescriptor &() const;
#else
    operator H248_SignalsDescriptor &();
    operator const H248_SignalsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_DigitMapDescriptor &() const;
#else
    operator H248_DigitMapDescriptor &();
    operator const H248_DigitMapDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_AuditDescriptor &() const;
#else
    operator H248_AuditDescriptor &();
    operator const H248_AuditDescriptor &() const;
#endif

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


//
// AuditReply
//

class H248_TerminationIDList;
class H248_ErrorDescriptor;
class H248_AuditResult;

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

    enum Choices {
      e_contextAuditResult,
      e_error,
      e_auditResult
    };

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

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


//
// TerminationAudit
//

class H248_AuditReturnParameter;

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

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


//
// AuditReturnParameter
//

class H248_ErrorDescriptor;
class H248_MediaDescriptor;
class H248_ModemDescriptor;
class H248_MuxDescriptor;
class H248_EventsDescriptor;
class H248_EventBufferDescriptor;
class H248_SignalsDescriptor;
class H248_DigitMapDescriptor;
class H248_ObservedEventsDescriptor;
class H248_StatisticsDescriptor;
class H248_PackagesDescriptor;
class H248_AuditDescriptor;

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

    enum Choices {
      e_errorDescriptor,
      e_mediaDescriptor,
      e_modemDescriptor,
      e_muxDescriptor,
      e_eventsDescriptor,
      e_eventBufferDescriptor,
      e_signalsDescriptor,
      e_digitMapDescriptor,
      e_observedEventsDescriptor,
      e_statisticsDescriptor,
      e_packagesDescriptor,
      e_emptyDescriptors
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_ErrorDescriptor &() const;
#else
    operator H248_ErrorDescriptor &();
    operator const H248_ErrorDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_MediaDescriptor &() const;
#else
    operator H248_MediaDescriptor &();
    operator const H248_MediaDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_ModemDescriptor &() const;
#else
    operator H248_ModemDescriptor &();
    operator const H248_ModemDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_MuxDescriptor &() const;
#else
    operator H248_MuxDescriptor &();
    operator const H248_MuxDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_EventsDescriptor &() const;
#else
    operator H248_EventsDescriptor &();
    operator const H248_EventsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_EventBufferDescriptor &() const;
#else
    operator H248_EventBufferDescriptor &();
    operator const H248_EventBufferDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_SignalsDescriptor &() const;
#else
    operator H248_SignalsDescriptor &();
    operator const H248_SignalsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_DigitMapDescriptor &() const;
#else
    operator H248_DigitMapDescriptor &();
    operator const H248_DigitMapDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_ObservedEventsDescriptor &() const;
#else
    operator H248_ObservedEventsDescriptor &();
    operator const H248_ObservedEventsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_StatisticsDescriptor &() const;
#else
    operator H248_StatisticsDescriptor &();
    operator const H248_StatisticsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_PackagesDescriptor &() const;
#else
    operator H248_PackagesDescriptor &();
    operator const H248_PackagesDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_AuditDescriptor &() const;
#else
    operator H248_AuditDescriptor &();
    operator const H248_AuditDescriptor &() const;
#endif

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


//
// IndAuditParameter
//

class H248_IndAudMediaDescriptor;
class H248_IndAudEventsDescriptor;
class H248_IndAudEventBufferDescriptor;
class H248_IndAudSignalsDescriptor;
class H248_IndAudDigitMapDescriptor;
class H248_IndAudStatisticsDescriptor;
class H248_IndAudPackagesDescriptor;

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

    enum Choices {
      e_indaudmediaDescriptor,
      e_indaudeventsDescriptor,
      e_indaudeventBufferDescriptor,
      e_indaudsignalsDescriptor,
      e_indauddigitMapDescriptor,
      e_indaudstatisticsDescriptor,
      e_indaudpackagesDescriptor
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IndAudMediaDescriptor &() const;
#else
    operator H248_IndAudMediaDescriptor &();
    operator const H248_IndAudMediaDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IndAudEventsDescriptor &() const;
#else
    operator H248_IndAudEventsDescriptor &();
    operator const H248_IndAudEventsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IndAudEventBufferDescriptor &() const;
#else
    operator H248_IndAudEventBufferDescriptor &();
    operator const H248_IndAudEventBufferDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IndAudSignalsDescriptor &() const;
#else
    operator H248_IndAudSignalsDescriptor &();
    operator const H248_IndAudSignalsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IndAudDigitMapDescriptor &() const;
#else
    operator H248_IndAudDigitMapDescriptor &();
    operator const H248_IndAudDigitMapDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IndAudStatisticsDescriptor &() const;
#else
    operator H248_IndAudStatisticsDescriptor &();
    operator const H248_IndAudStatisticsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IndAudPackagesDescriptor &() const;
#else
    operator H248_IndAudPackagesDescriptor &();
    operator const H248_IndAudPackagesDescriptor &() const;
#endif

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


//
// IndAudPropertyGroup
//

class H248_IndAudPropertyParm;

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

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


//
// IndAudSignalsDescriptor
//

class H248_IndAudSignal;
class H248_IndAudSeqSigList;

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

    enum Choices {
      e_signal,
      e_seqSigList
    };

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

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


//
// ServiceChangeResult
//

class H248_ErrorDescriptor;
class H248_ServiceChangeResParm;

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

    enum Choices {
      e_errorDescriptor,
      e_serviceChangeResParms
    };

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

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


//
// WildcardField
//

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

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

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


//
// TerminationIDList
//

class H248_TerminationID;

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

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


//
// StreamMode
//

class H248_StreamMode : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_StreamMode, PASN_Enumeration);
#endif
  public:
    H248_StreamMode(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_sendOnly,
      e_recvOnly,
      e_sendRecv,
      e_inactive,
      e_loopBack
    };

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


//
// Name
//

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

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

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


//
// PkgdName
//

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

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

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


//
// Relation
//

class H248_Relation : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_Relation, PASN_Enumeration);
#endif
  public:
    H248_Relation(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_greaterThan,
      e_smallerThan,
      e_unequalTo
    };

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


//
// PropertyGroup
//

class H248_PropertyParm;

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

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


//
// EventBufferControl
//

class H248_EventBufferControl : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_EventBufferControl, PASN_Enumeration);
#endif
  public:
    H248_EventBufferControl(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_off,
      e_lockStep
    };

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


//
// ServiceState
//

class H248_ServiceState : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_ServiceState, PASN_Enumeration);
#endif
  public:
    H248_ServiceState(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_test,
      e_outOfSvc,
      e_inSvc
    };

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


//
// MuxType
//

class H248_MuxType : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_MuxType, PASN_Enumeration);
#endif
  public:
    H248_MuxType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_h221,
      e_h223,
      e_h226,
      e_v76,
      e_nx64k
    };

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


//
// StreamID
//

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

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


//
// EventDM
//

class H248_DigitMapName;
class H248_DigitMapValue;

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

    enum Choices {
      e_digitMapName,
      e_digitMapValue
    };

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

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


//
// EventBufferDescriptor
//

class H248_EventSpec;

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

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


//
// SignalsDescriptor
//

class H248_SignalRequest;

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

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


//
// SignalRequest
//

class H248_Signal;
class H248_SeqSigList;

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

    enum Choices {
      e_signal,
      e_seqSigList
    };

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

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


//
// SignalType
//

class H248_SignalType : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_SignalType, PASN_Enumeration);
#endif
  public:
    H248_SignalType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_brief,
      e_onOff,
      e_timeOut
    };

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


//
// SignalName
//

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

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

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


//
// NotifyCompletion
//

class H248_NotifyCompletion : public PASN_BitString
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_NotifyCompletion, PASN_BitString);
#endif
  public:
    H248_NotifyCompletion(unsigned tag = UniversalBitString, TagClass tagClass = UniversalTagClass);

    PObject * Clone() const;
};


//
// RequestID
//

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

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


//
// ModemType
//

class H248_ModemType : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_ModemType, PASN_Enumeration);
#endif
  public:
    H248_ModemType(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_v18,
      e_v22,
      e_v22bis,
      e_v32,
      e_v32bis,
      e_v34,
      e_v90,
      e_v91,
      e_synchISDN
    };

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


//
// DigitMapName
//

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

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

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


//
// DigitMapValue
//

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

    enum OptionalFields {
      e_startTimer,
      e_shortTimer,
      e_longTimer,
      e_durationTimer
    };

    PASN_Integer m_startTimer;
    PASN_Integer m_shortTimer;
    PASN_Integer m_longTimer;
    PASN_IA5String m_digitMapBody;
    PASN_Integer m_durationTimer;

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


//
// ServiceChangeAddress
//

class H248_IP4Address;
class H248_IP6Address;
class H248_DomainName;
class H248_PathName;

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

    enum Choices {
      e_portNumber,
      e_ip4Address,
      e_ip6Address,
      e_domainName,
      e_deviceName,
      e_mtpAddress
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IP4Address &() const;
#else
    operator H248_IP4Address &();
    operator const H248_IP4Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_IP6Address &() const;
#else
    operator H248_IP6Address &();
    operator const H248_IP6Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_DomainName &() const;
#else
    operator H248_DomainName &();
    operator const H248_DomainName &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator H248_PathName &() const;
#else
    operator H248_PathName &();
    operator const H248_PathName &() const;
#endif

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


//
// ServiceChangeMethod
//

class H248_ServiceChangeMethod : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_ServiceChangeMethod, PASN_Enumeration);
#endif
  public:
    H248_ServiceChangeMethod(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_failover,
      e_forced,
      e_graceful,
      e_restart,
      e_disconnected,
      e_handOff
    };

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


//
// ServiceChangeProfile
//

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

    PASN_IA5String m_profileName;

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


//
// PackagesDescriptor
//

class H248_PackagesItem;

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

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


//
// PackagesItem
//

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

    H248_Name m_packageName;
    PASN_Integer m_packageVersion;

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


//
// StatisticsDescriptor
//

class H248_StatisticsParameter;

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

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


//
// NonStandardIdentifier
//

class H248_H221NonStandard;

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

    enum Choices {
      e_object,
      e_h221NonStandard,
      e_experimental
    };

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

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


//
// H221NonStandard
//

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

    PASN_Integer m_t35CountryCode1;
    PASN_Integer m_t35CountryCode2;
    PASN_Integer m_t35Extension;
    PASN_Integer m_manufacturerCode;

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


//
// TimeNotation
//

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

    PASN_IA5String m_date;
    PASN_IA5String m_time;

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


//
// Value
//

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

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


//
// Message_messageBody
//

class H248_ErrorDescriptor;
class H248_ArrayOf_Transaction;

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

    enum Choices {
      e_messageError,
      e_transactions
    };

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

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


//
// ArrayOf_ActionRequest
//

class H248_ActionRequest;

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

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


//
// TransactionReply_transactionResult
//

class H248_ErrorDescriptor;
class H248_ArrayOf_ActionReply;

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

    enum Choices {
      e_transactionError,
      e_actionReplies
    };

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

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


//
// ArrayOf_CommandRequest
//

class H248_CommandRequest;

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

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


//
// ArrayOf_CommandReply
//

class H248_CommandReply;

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

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


//
// ArrayOf_TopologyRequest
//

class H248_TopologyRequest;

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

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


//
// TopologyRequest_topologyDirection
//

class H248_TopologyRequest_topologyDirection : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(H248_TopologyRequest_topologyDirection, PASN_Enumeration);
#endif
  public:
    H248_TopologyRequest_topologyDirection(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);

    enum Enumerations {
      e_bothway,
      e_isolate,
      e_oneway
    };

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


//
// ArrayOf_AmmDescriptor
//

class H248_AmmDescriptor;

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

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


//
// ArrayOf_IndAuditParameter
//

class H248_IndAuditParameter;

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

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


//
// IndAudMediaDescriptor_streams
//

class H248_IndAudStreamParms;
class H248_ArrayOf_IndAudStreamDescriptor;

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

    enum Choices {
      e_oneStream,
      e_multiStream
    };

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

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


//
// ArrayOf_IndAudPropertyParm
//

class H248_IndAudPropertyParm;

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

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


//
// ArrayOf_ObservedEvent
//

class H248_ObservedEvent;

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

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


//
// ArrayOf_EventParameter
//

class H248_EventParameter;

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

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


//
// EventParameter_extraInfo
//

class H248_Relation;

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

    enum Choices {
      e_relation,
      e_range,
      e_sublist
    };

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

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


//
// ArrayOf_WildcardField
//

class H248_WildcardField;

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

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


//
// MediaDescriptor_streams
//

class H248_StreamParms;
class H248_ArrayOf_StreamDescriptor;

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

    enum Choices {
      e_oneStream,
      e_multiStream
    };

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

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


//
// ArrayOf_PropertyParm
//

class H248_PropertyParm;

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

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


//
// ArrayOf_PASN_OctetString
//

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

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


//
// PropertyParm_extraInfo
//

class H248_Relation;

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

    enum Choices {
      e_relation,
      e_range,
      e_sublist
    };

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

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


//
// ArrayOf_PropertyGroup
//

class H248_PropertyGroup;

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

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


//
// ArrayOf_TerminationID
//

class H248_TerminationID;

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

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


//
// ArrayOf_RequestedEvent
//

class H248_RequestedEvent;

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

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


//
// ArrayOf_SecondRequestedEvent
//

class H248_SecondRequestedEvent;

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

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


//
// ArrayOf_Signal
//

class H248_Signal;

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

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


//
// ArrayOf_SigParameter
//

class H248_SigParameter;

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

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


//
// SigParameter_extraInfo
//

class H248_Relation;

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

    enum Choices {
      e_relation,
      e_range,
      e_sublist
    };

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

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


//
// ArrayOf_ModemType
//

class H248_ModemType;

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

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


//
// ArrayOf_Transaction
//

class H248_Transaction;

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

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


//
// ArrayOf_ActionReply
//

class H248_ActionReply;

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

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


//
// ArrayOf_IndAudStreamDescriptor
//

class H248_IndAudStreamDescriptor;

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

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


//
// ArrayOf_StreamDescriptor
//

class H248_StreamDescriptor;

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

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


//
// AuthenticationHeader
//

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

    H248_SecurityParmIndex m_secParmIndex;
    H248_SequenceNum m_seqNum;
    H248_AuthData m_ad;

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


//
// Message
//

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

    PASN_Integer m_version;
    H248_MId m_mId;
    H248_Message_messageBody m_messageBody;

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


//
// TransactionRequest
//

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

    H248_TransactionId m_transactionId;
    H248_ArrayOf_ActionRequest m_actions;

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


//
// TransactionReply
//

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

    enum OptionalFields {
      e_immAckRequired
    };

    H248_TransactionId m_transactionId;
    PASN_Null m_immAckRequired;
    H248_TransactionReply_transactionResult m_transactionResult;

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


//
// ErrorDescriptor
//

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

    enum OptionalFields {
      e_errorText
    };

    H248_ErrorCode m_errorCode;
    H248_ErrorText m_errorText;

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


//
// ContextRequest
//

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

    enum OptionalFields {
      e_priority,
      e_emergency,
      e_topologyReq
    };

    PASN_Integer m_priority;
    PASN_Boolean m_emergency;
    H248_ArrayOf_TopologyRequest m_topologyReq;

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


//
// CommandRequest
//

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

    enum OptionalFields {
      e_optional,
      e_wildcardReturn
    };

    H248_Command m_command;
    PASN_Null m_optional;
    PASN_Null m_wildcardReturn;

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


//
// AmmRequest
//

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

    H248_TerminationIDList m_terminationID;
    H248_ArrayOf_AmmDescriptor m_descriptors;

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


//
// AmmsReply
//

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

    enum OptionalFields {
      e_terminationAudit
    };

    H248_TerminationIDList m_terminationID;
    H248_TerminationAudit m_terminationAudit;

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


//
// AuditDescriptor
//

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

    enum OptionalFields {
      e_auditToken,
      e_auditPropertyToken
    };

    PASN_BitString m_auditToken;
    H248_ArrayOf_IndAuditParameter m_auditPropertyToken;

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


//
// IndAudLocalControlDescriptor
//

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

    enum OptionalFields {
      e_streamMode,
      e_reserveValue,
      e_reserveGroup,
      e_propertyParms
    };

    PASN_Null m_streamMode;
    PASN_Null m_reserveValue;
    PASN_Null m_reserveGroup;
    H248_ArrayOf_IndAudPropertyParm m_propertyParms;

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


//
// IndAudPropertyParm
//

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

    H248_PkgdName m_name;

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


//
// IndAudLocalRemoteDescriptor
//

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

    enum OptionalFields {
      e_propGroupID
    };

    PASN_Integer m_propGroupID;
    H248_IndAudPropertyGroup m_propGrps;

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


//
// IndAudTerminationStateDescriptor
//

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

    enum OptionalFields {
      e_eventBufferControl,
      e_serviceState
    };

    H248_ArrayOf_IndAudPropertyParm m_propertyParms;
    PASN_Null m_eventBufferControl;
    PASN_Null m_serviceState;

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


//
// IndAudEventsDescriptor
//

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

    enum OptionalFields {
      e_requestID,
      e_streamID
    };

    H248_RequestID m_requestID;
    H248_PkgdName m_pkgdName;
    H248_StreamID m_streamID;

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


//
// IndAudEventBufferDescriptor
//

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

    enum OptionalFields {
      e_streamID
    };

    H248_PkgdName m_eventName;
    H248_StreamID m_streamID;

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


//
// IndAudSignal
//

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

    enum OptionalFields {
      e_streamID
    };

    H248_PkgdName m_signalName;
    H248_StreamID m_streamID;

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


//
// IndAudDigitMapDescriptor
//

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

    enum OptionalFields {
      e_digitMapName
    };

    H248_DigitMapName m_digitMapName;

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


//
// IndAudStatisticsDescriptor
//

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

    H248_PkgdName m_statName;

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


//
// IndAudPackagesDescriptor
//

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

    H248_Name m_packageName;
    PASN_Integer m_packageVersion;

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


//
// NotifyReply
//

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

    enum OptionalFields {
      e_errorDescriptor
    };

    H248_TerminationIDList m_terminationID;
    H248_ErrorDescriptor m_errorDescriptor;

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


//
// ObservedEventsDescriptor
//

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

    H248_RequestID m_requestId;
    H248_ArrayOf_ObservedEvent m_observedEventLst;

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


//
// EventName
//

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

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

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


//
// EventParameter
//

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

    enum OptionalFields {
      e_extraInfo
    };

    H248_Name m_eventParameterName;
    H248_Value m_value;
    H248_EventParameter_extraInfo m_extraInfo;

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


//
// ServiceChangeReply
//

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

    H248_TerminationIDList m_terminationID;
    H248_ServiceChangeResult m_serviceChangeResult;

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


//
// TerminationID
//

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

    H248_ArrayOf_WildcardField m_wildcard;
    PASN_OctetString m_id;

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


//
// LocalControlDescriptor
//

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

    enum OptionalFields {
      e_streamMode,
      e_reserveValue,
      e_reserveGroup
    };

    H248_StreamMode m_streamMode;
    PASN_Boolean m_reserveValue;
    PASN_Boolean m_reserveGroup;
    H248_ArrayOf_PropertyParm m_propertyParms;

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


//
// PropertyParm
//

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

    enum OptionalFields {
      e_extraInfo
    };

    H248_PkgdName m_name;
    H248_ArrayOf_PASN_OctetString m_value;
    H248_PropertyParm_extraInfo m_extraInfo;

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


//
// LocalRemoteDescriptor
//

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

    H248_ArrayOf_PropertyGroup m_propGrps;

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


//
// TerminationStateDescriptor
//

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

    enum OptionalFields {
      e_eventBufferControl,
      e_serviceState
    };

    H248_ArrayOf_PropertyParm m_propertyParms;
    H248_EventBufferControl m_eventBufferControl;
    H248_ServiceState m_serviceState;

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


//
// EventsDescriptor
//

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

    enum OptionalFields {
      e_requestID
    };

    H248_RequestID m_requestID;
    H248_ArrayOf_RequestedEvent m_eventList;

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


//
// SecondEventsDescriptor
//

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

    enum OptionalFields {
      e_requestID
    };

    H248_RequestID m_requestID;
    H248_ArrayOf_SecondRequestedEvent m_eventList;

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


//
// SecondRequestedActions
//

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

    enum OptionalFields {
      e_keepActive,
      e_eventDM,
      e_signalsDescriptor
    };

    PASN_Boolean m_keepActive;
    H248_EventDM m_eventDM;
    H248_SignalsDescriptor m_signalsDescriptor;

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


//
// EventSpec
//

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

    enum OptionalFields {
      e_streamID
    };

    H248_EventName m_eventName;
    H248_StreamID m_streamID;
    H248_ArrayOf_EventParameter m_eventParList;

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


//
// SeqSigList
//

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

    PASN_Integer m_id;
    H248_ArrayOf_Signal m_signalList;

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


//
// Signal
//

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

    enum OptionalFields {
      e_streamID,
      e_sigType,
      e_duration,
      e_notifyCompletion,
      e_keepActive
    };

    H248_SignalName m_signalName;
    H248_StreamID m_streamID;
    H248_SignalType m_sigType;
    PASN_Integer m_duration;
    H248_NotifyCompletion m_notifyCompletion;
    PASN_Boolean m_keepActive;
    H248_ArrayOf_SigParameter m_sigParList;

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


//
// SigParameter
//

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

    enum OptionalFields {
      e_extraInfo
    };

    H248_Name m_sigParameterName;
    H248_Value m_value;
    H248_SigParameter_extraInfo m_extraInfo;

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


//
// DigitMapDescriptor
//

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

    enum OptionalFields {
      e_digitMapName,
      e_digitMapValue
    };

    H248_DigitMapName m_digitMapName;
    H248_DigitMapValue m_digitMapValue;

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


//
// ServiceChangeResParm
//

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

    enum OptionalFields {
      e_serviceChangeMgcId,
      e_serviceChangeAddress,
      e_serviceChangeVersion,
      e_serviceChangeProfile,
      e_timestamp
    };

    H248_MId m_serviceChangeMgcId;
    H248_ServiceChangeAddress m_serviceChangeAddress;
    PASN_Integer m_serviceChangeVersion;
    H248_ServiceChangeProfile m_serviceChangeProfile;
    H248_TimeNotation m_timestamp;

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


//
// StatisticsParameter
//

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

    enum OptionalFields {
      e_statValue
    };

    H248_PkgdName m_statName;
    H248_Value m_statValue;

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


//
// NonStandardData
//

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

    H248_NonStandardIdentifier m_nonStandardIdentifier;
    PASN_OctetString m_data;

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


//
// MegacoMessage
//

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

    enum OptionalFields {
      e_authHeader
    };

    H248_AuthenticationHeader m_authHeader;
    H248_Message m_mess;

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


//
// ActionRequest
//

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

    enum OptionalFields {
      e_contextRequest,
      e_contextAttrAuditReq
    };

    H248_ContextID m_contextId;
    H248_ContextRequest m_contextRequest;
    H248_ContextAttrAuditRequest m_contextAttrAuditReq;
    H248_ArrayOf_CommandRequest m_commandRequests;

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


//
// ActionReply
//

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

    enum OptionalFields {
      e_errorDescriptor,
      e_contextReply
    };

    H248_ContextID m_contextId;
    H248_ErrorDescriptor m_errorDescriptor;
    H248_ContextRequest m_contextReply;
    H248_ArrayOf_CommandReply m_commandReply;

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


//
// TopologyRequest
//

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

    enum OptionalFields {
      e_streamID
    };

    H248_TerminationID m_terminationFrom;
    H248_TerminationID m_terminationTo;
    H248_TopologyRequest_topologyDirection m_topologyDirection;
    H248_StreamID m_streamID;

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


//
// SubtractRequest
//

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

    enum OptionalFields {
      e_auditDescriptor
    };

    H248_TerminationIDList m_terminationID;
    H248_AuditDescriptor m_auditDescriptor;

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


//
// AuditRequest
//

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

    H248_TerminationID m_terminationID;
    H248_AuditDescriptor m_auditDescriptor;

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


//
// AuditResult
//

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

    H248_TerminationID m_terminationID;
    H248_TerminationAudit m_terminationAuditResult;

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


//
// IndAudMediaDescriptor
//

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

    enum OptionalFields {
      e_termStateDescr,
      e_streams
    };

    H248_IndAudTerminationStateDescriptor m_termStateDescr;
    H248_IndAudMediaDescriptor_streams m_streams;

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


//
// IndAudStreamParms
//

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

    enum OptionalFields {
      e_localControlDescriptor,
      e_localDescriptor,
      e_remoteDescriptor
    };

    H248_IndAudLocalControlDescriptor m_localControlDescriptor;
    H248_IndAudLocalRemoteDescriptor m_localDescriptor;
    H248_IndAudLocalRemoteDescriptor m_remoteDescriptor;

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


//
// IndAudSeqSigList
//

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

    enum OptionalFields {
      e_signalList
    };

    PASN_Integer m_id;
    H248_IndAudSignal m_signalList;

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


//
// NotifyRequest
//

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

    enum OptionalFields {
      e_errorDescriptor
    };

    H248_TerminationIDList m_terminationID;
    H248_ObservedEventsDescriptor m_observedEventsDescriptor;
    H248_ErrorDescriptor m_errorDescriptor;

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


//
// ObservedEvent
//

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

    enum OptionalFields {
      e_streamID,
      e_timeNotation
    };

    H248_EventName m_eventName;
    H248_StreamID m_streamID;
    H248_ArrayOf_EventParameter m_eventParList;
    H248_TimeNotation m_timeNotation;

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


//
// MediaDescriptor
//

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

    enum OptionalFields {
      e_termStateDescr,
      e_streams
    };

    H248_TerminationStateDescriptor m_termStateDescr;
    H248_MediaDescriptor_streams m_streams;

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


//
// StreamParms
//

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

    enum OptionalFields {
      e_localControlDescriptor,
      e_localDescriptor,
      e_remoteDescriptor
    };

    H248_LocalControlDescriptor m_localControlDescriptor;
    H248_LocalRemoteDescriptor m_localDescriptor;
    H248_LocalRemoteDescriptor m_remoteDescriptor;

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


//
// MuxDescriptor
//

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

    enum OptionalFields {
      e_nonStandardData
    };

    H248_MuxType m_muxType;
    H248_ArrayOf_TerminationID m_termList;
    H248_NonStandardData m_nonStandardData;

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


//
// RequestedActions
//

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

    enum OptionalFields {
      e_keepActive,
      e_eventDM,
      e_secondEvent,
      e_signalsDescriptor
    };

    PASN_Boolean m_keepActive;
    H248_EventDM m_eventDM;
    H248_SecondEventsDescriptor m_secondEvent;
    H248_SignalsDescriptor m_signalsDescriptor;

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


//
// SecondRequestedEvent
//

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

    enum OptionalFields {
      e_streamID,
      e_eventAction
    };

    H248_PkgdName m_pkgdName;
    H248_StreamID m_streamID;
    H248_SecondRequestedActions m_eventAction;
    H248_ArrayOf_EventParameter m_evParList;

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


//
// ModemDescriptor
//

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

    enum OptionalFields {
      e_nonStandardData
    };

    H248_ArrayOf_ModemType m_mtl;
    H248_ArrayOf_PropertyParm m_mpl;
    H248_NonStandardData m_nonStandardData;

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


//
// ServiceChangeParm
//

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

    enum OptionalFields {
      e_serviceChangeAddress,
      e_serviceChangeVersion,
      e_serviceChangeProfile,
      e_serviceChangeDelay,
      e_serviceChangeMgcId,
      e_timeStamp,
      e_nonStandardData,
      e_serviceChangeInfo
    };

    H248_ServiceChangeMethod m_serviceChangeMethod;
    H248_ServiceChangeAddress m_serviceChangeAddress;
    PASN_Integer m_serviceChangeVersion;
    H248_ServiceChangeProfile m_serviceChangeProfile;
    H248_Value m_serviceChangeReason;
    PASN_Integer m_serviceChangeDelay;
    H248_MId m_serviceChangeMgcId;
    H248_TimeNotation m_timeStamp;
    H248_NonStandardData m_nonStandardData;
    H248_AuditDescriptor m_serviceChangeInfo;

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


//
// IndAudStreamDescriptor
//

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

    H248_StreamID m_streamID;
    H248_IndAudStreamParms m_streamParms;

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


//
// ServiceChangeRequest
//

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

    H248_TerminationIDList m_terminationID;
    H248_ServiceChangeParm m_serviceChangeParms;

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


//
// StreamDescriptor
//

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

    H248_StreamID m_streamID;
    H248_StreamParms m_streamParms;

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


//
// RequestedEvent
//

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

    enum OptionalFields {
      e_streamID,
      e_eventAction
    };

    H248_PkgdName m_pkgdName;
    H248_StreamID m_streamID;
    H248_RequestedActions m_eventAction;
    H248_ArrayOf_EventParameter m_evParList;

    PINDEX GetDataLength() const;
    PBoolean Decode(PASN_Stream & strm);
    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 // __H248_H

#endif // if ! H323_DISABLE_H248


// End of h248.h
