Ethereal-dev: [Ethereal-dev] [Fwd: ASN2ETH]

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Laurent Deniel <laurent.deniel@xxxxxxx>
Date: Sun, 08 Jun 2003 21:48:55 +0200

Hi,

I do not have much time to do it myself but another developer might
be interested .. (message CC'ed to ethereal-dev ML).

Regards,

Laurent

-------- Original Message --------
Subject: ASN2ETH
Date: Sun, 8 Jun 2003 11:08:30 -0000
From: "Andras Kovacs" <andras.kovacs@xxxxxxxxxxxx>
Reply-To: "Andras Kovacs" <andras.kovacs@xxxxxxxxxxxx>
To: laurent.deniel@xxxxxxx

Hi,
I think that a most useful project for Ethereal would be writing a parser
that would compile ASN.1 definitions of an Application Protocol into an
Ethereal plugin.
I wonder if you would be interested in executing such project (could be
called ASN2ETH).
The basis of the project could be an open source asn.1 parser:
http://iiiasn1.sourceforge.net
What needs to be done is writing a source-code generator that adds code to
the output of III-ASN-Parser to turn it into an Ethereal plugin.

I attached an example to illustrate the task. The file megaco.asn contains
ASN.1 definitions of the Megaco protocol. The file megaco.h is created by
the asn parser. (You see the structures from this one, so I did not attach
the megaco.cxx)
The entry-level PDU is the MEGACO_MegacoMessage class. I think this will
need to be set as user parameter in a configuration file.
So now you see the code that needs to be turned into an Ethereal plugin.

Do you have the motivation/capacity for this project? I can do some work as
well if you provide me with clear specifications/sample code.

Keep up the good work,

Andras Kovacs


________________________________________________
BroadBit


Attachment: megaco.asn
Description: Binary data

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

#ifndef __MEGACO_H
#define __MEGACO_H

#ifdef __GNUC__
#pragma interface
#endif

#include <ptclib/asner.h>

//
// SecurityParmIndex
//

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

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


//
// SequenceNum
//

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

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


//
// AuthData
//

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

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


//
// MId
//

class MEGACO_IP4Address;
class MEGACO_IP6Address;
class MEGACO_DomainName;
class MEGACO_PathName;

class MEGACO_MId : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_MId, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_IP4Address &() const;
#else
    operator MEGACO_IP4Address &();
    operator const MEGACO_IP4Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_IP6Address &() const;
#else
    operator MEGACO_IP6Address &();
    operator const MEGACO_IP6Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_DomainName &() const;
#else
    operator MEGACO_DomainName &();
    operator const MEGACO_DomainName &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_PathName &() const;
#else
    operator MEGACO_PathName &();
    operator const MEGACO_PathName &() const;
#endif

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


//
// DomainName
//

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

    enum OptionalFields {
      e_portNumber
    };

    PASN_IA5String m_name;
    PASN_Integer m_portNumber;

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


//
// IP4Address
//

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

    enum OptionalFields {
      e_portNumber
    };

    PASN_OctetString m_address;
    PASN_Integer m_portNumber;

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


//
// IP6Address
//

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

    enum OptionalFields {
      e_portNumber
    };

    PASN_OctetString m_address;
    PASN_Integer m_portNumber;

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


//
// PathName
//

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

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


//
// Transaction
//

class MEGACO_TransactionRequest;
class MEGACO_TransactionPending;
class MEGACO_TransactionReply;
class MEGACO_TransactionResponseAck;

class MEGACO_Transaction : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_Transaction, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_TransactionRequest &() const;
#else
    operator MEGACO_TransactionRequest &();
    operator const MEGACO_TransactionRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_TransactionPending &() const;
#else
    operator MEGACO_TransactionPending &();
    operator const MEGACO_TransactionPending &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_TransactionReply &() const;
#else
    operator MEGACO_TransactionReply &();
    operator const MEGACO_TransactionReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_TransactionResponseAck &() const;
#else
    operator MEGACO_TransactionResponseAck &();
    operator const MEGACO_TransactionResponseAck &() const;
#endif

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


//
// TransactionId
//

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

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


//
// TransactionPending
//

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

    MEGACO_TransactionId m_transactionId;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_TransactionResponseAck : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_TransactionResponseAck, PASN_Sequence);
#endif
  public:
    MEGACO_TransactionResponseAck(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_lastAck
    };

    MEGACO_TransactionId m_firstAck;
    MEGACO_TransactionId m_lastAck;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ErrorCode : public PASN_Integer
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ErrorCode, PASN_Integer);
#endif
  public:
    MEGACO_ErrorCode(unsigned tag = UniversalInteger, TagClass tagClass = UniversalTagClass);

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


//
// ErrorText
//

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

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


//
// ContextID
//

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

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


//
// ContextAttrAuditRequest
//

class MEGACO_ContextAttrAuditRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ContextAttrAuditRequest, PASN_Sequence);
#endif
  public:
    MEGACO_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;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_AmmRequest;
class MEGACO_AmmRequest;
class MEGACO_AmmRequest;
class MEGACO_SubtractRequest;
class MEGACO_AuditRequest;
class MEGACO_AuditRequest;
class MEGACO_NotifyRequest;
class MEGACO_ServiceChangeRequest;

class MEGACO_Command : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_Command, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_AmmRequest &() const;
#else
    operator MEGACO_AmmRequest &();
    operator const MEGACO_AmmRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_SubtractRequest &() const;
#else
    operator MEGACO_SubtractRequest &();
    operator const MEGACO_SubtractRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_AuditRequest &() const;
#else
    operator MEGACO_AuditRequest &();
    operator const MEGACO_AuditRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_NotifyRequest &() const;
#else
    operator MEGACO_NotifyRequest &();
    operator const MEGACO_NotifyRequest &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_ServiceChangeRequest &() const;
#else
    operator MEGACO_ServiceChangeRequest &();
    operator const MEGACO_ServiceChangeRequest &() const;
#endif

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


//
// CommandReply
//

class MEGACO_AmmsReply;
class MEGACO_AmmsReply;
class MEGACO_AmmsReply;
class MEGACO_AmmsReply;
class MEGACO_AuditReply;
class MEGACO_AuditReply;
class MEGACO_NotifyReply;
class MEGACO_ServiceChangeReply;

class MEGACO_CommandReply : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_CommandReply, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_AmmsReply &() const;
#else
    operator MEGACO_AmmsReply &();
    operator const MEGACO_AmmsReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_AuditReply &() const;
#else
    operator MEGACO_AuditReply &();
    operator const MEGACO_AuditReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_NotifyReply &() const;
#else
    operator MEGACO_NotifyReply &();
    operator const MEGACO_NotifyReply &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_ServiceChangeReply &() const;
#else
    operator MEGACO_ServiceChangeReply &();
    operator const MEGACO_ServiceChangeReply &() const;
#endif

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


//
// AmmDescriptor
//

class MEGACO_MediaDescriptor;
class MEGACO_ModemDescriptor;
class MEGACO_MuxDescriptor;
class MEGACO_EventsDescriptor;
class MEGACO_EventBufferDescriptor;
class MEGACO_SignalsDescriptor;
class MEGACO_DigitMapDescriptor;
class MEGACO_AuditDescriptor;

class MEGACO_AmmDescriptor : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_AmmDescriptor, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_MediaDescriptor &() const;
#else
    operator MEGACO_MediaDescriptor &();
    operator const MEGACO_MediaDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_ModemDescriptor &() const;
#else
    operator MEGACO_ModemDescriptor &();
    operator const MEGACO_ModemDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_MuxDescriptor &() const;
#else
    operator MEGACO_MuxDescriptor &();
    operator const MEGACO_MuxDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_EventsDescriptor &() const;
#else
    operator MEGACO_EventsDescriptor &();
    operator const MEGACO_EventsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_EventBufferDescriptor &() const;
#else
    operator MEGACO_EventBufferDescriptor &();
    operator const MEGACO_EventBufferDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_SignalsDescriptor &() const;
#else
    operator MEGACO_SignalsDescriptor &();
    operator const MEGACO_SignalsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_DigitMapDescriptor &() const;
#else
    operator MEGACO_DigitMapDescriptor &();
    operator const MEGACO_DigitMapDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_AuditDescriptor &() const;
#else
    operator MEGACO_AuditDescriptor &();
    operator const MEGACO_AuditDescriptor &() const;
#endif

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


//
// AuditResult
//

class MEGACO_TerminationIDList;
class MEGACO_TerminationAudit;

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

    enum Choices {
      e_contextAuditResult,
      e_terminationAuditResult
    };

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

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


//
// TerminationAudit
//

class MEGACO_AuditReturnParameter;

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

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


//
// AuditReturnParameter
//

class MEGACO_ErrorDescriptor;
class MEGACO_MediaDescriptor;
class MEGACO_ModemDescriptor;
class MEGACO_MuxDescriptor;
class MEGACO_EventsDescriptor;
class MEGACO_EventBufferDescriptor;
class MEGACO_SignalsDescriptor;
class MEGACO_DigitMapDescriptor;
class MEGACO_ObservedEventsDescriptor;
class MEGACO_StatisticsDescriptor;
class MEGACO_PackagesDescriptor;
class MEGACO_AuditDescriptor;

class MEGACO_AuditReturnParameter : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_AuditReturnParameter, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_ErrorDescriptor &() const;
#else
    operator MEGACO_ErrorDescriptor &();
    operator const MEGACO_ErrorDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_MediaDescriptor &() const;
#else
    operator MEGACO_MediaDescriptor &();
    operator const MEGACO_MediaDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_ModemDescriptor &() const;
#else
    operator MEGACO_ModemDescriptor &();
    operator const MEGACO_ModemDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_MuxDescriptor &() const;
#else
    operator MEGACO_MuxDescriptor &();
    operator const MEGACO_MuxDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_EventsDescriptor &() const;
#else
    operator MEGACO_EventsDescriptor &();
    operator const MEGACO_EventsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_EventBufferDescriptor &() const;
#else
    operator MEGACO_EventBufferDescriptor &();
    operator const MEGACO_EventBufferDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_SignalsDescriptor &() const;
#else
    operator MEGACO_SignalsDescriptor &();
    operator const MEGACO_SignalsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_DigitMapDescriptor &() const;
#else
    operator MEGACO_DigitMapDescriptor &();
    operator const MEGACO_DigitMapDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_ObservedEventsDescriptor &() const;
#else
    operator MEGACO_ObservedEventsDescriptor &();
    operator const MEGACO_ObservedEventsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_StatisticsDescriptor &() const;
#else
    operator MEGACO_StatisticsDescriptor &();
    operator const MEGACO_StatisticsDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_PackagesDescriptor &() const;
#else
    operator MEGACO_PackagesDescriptor &();
    operator const MEGACO_PackagesDescriptor &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_AuditDescriptor &() const;
#else
    operator MEGACO_AuditDescriptor &();
    operator const MEGACO_AuditDescriptor &() const;
#endif

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


//
// AuditDescriptor
//

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

    enum OptionalFields {
      e_auditToken
    };

    PASN_BitString m_auditToken;

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


//
// ServiceChangeResult
//

class MEGACO_ErrorDescriptor;
class MEGACO_ServiceChangeResParm;

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

    enum Choices {
      e_errorDescriptor,
      e_serviceChangeResParms
    };

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

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


//
// WildcardField
//

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

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


//
// TerminationIDList
//

class MEGACO_TerminationID;

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

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


//
// StreamMode
//

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

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

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


//
// Name
//

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

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


//
// PkgdName
//

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

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


//
// Relation
//

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

    enum Enumerations {
      e_greaterThan,
      e_smallerThan,
      e_unequalTo
    };

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


//
// PropertyGroup
//

class MEGACO_PropertyParm;

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

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


//
// EventBufferControl
//

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

    enum Enumerations {
      e_off,
      e_lockStep
    };

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


//
// ServiceState
//

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

    enum Enumerations {
      e_test,
      e_outOfSvc,
      e_inSvc
    };

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


//
// MuxType
//

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

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

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


//
// StreamID
//

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

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


//
// EventDM
//

class MEGACO_DigitMapName;
class MEGACO_DigitMapValue;

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

    enum Choices {
      e_digitMapName,
      e_digitMapValue
    };

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

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


//
// EventBufferDescriptor
//

class MEGACO_EventSpec;

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

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


//
// SignalsDescriptor
//

class MEGACO_SignalRequest;

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

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


//
// SignalRequest
//

class MEGACO_Signal;
class MEGACO_SeqSigList;

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

    enum Choices {
      e_signal,
      e_seqSigList
    };

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

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


//
// SignalType
//

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

    enum Enumerations {
      e_brief,
      e_onOff,
      e_timeOut
    };

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


//
// SignalName
//

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

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


//
// NotifyCompletion
//

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

    PObject * Clone() const;
};


//
// RequestID
//

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

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


//
// ModemType
//

class MEGACO_ModemType : public PASN_Enumeration
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ModemType, PASN_Enumeration);
#endif
  public:
    MEGACO_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
    };

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


//
// DigitMapName
//

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

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


//
// DigitMapValue
//

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

    enum OptionalFields {
      e_startTimer,
      e_shortTimer,
      e_longTimer
    };

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

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_IP4Address;
class MEGACO_IP6Address;
class MEGACO_DomainName;
class MEGACO_PathName;

class MEGACO_ServiceChangeAddress : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ServiceChangeAddress, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_IP4Address &() const;
#else
    operator MEGACO_IP4Address &();
    operator const MEGACO_IP4Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_IP6Address &() const;
#else
    operator MEGACO_IP6Address &();
    operator const MEGACO_IP6Address &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_DomainName &() const;
#else
    operator MEGACO_DomainName &();
    operator const MEGACO_DomainName &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MEGACO_PathName &() const;
#else
    operator MEGACO_PathName &();
    operator const MEGACO_PathName &() const;
#endif

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


//
// ServiceChangeMethod
//

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

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

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


//
// ServiceChangeProfile
//

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

    MEGACO_Name m_profileName;
    PASN_Integer m_version;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_PackagesItem;

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

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


//
// PackagesItem
//

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

    MEGACO_Name m_packageName;
    PASN_Integer m_packageVersion;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_StatisticsParameter;

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

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


//
// NonStandardIdentifier
//

class MEGACO_H221NonStandard;

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

    enum Choices {
      e_object,
      e_h221NonStandard,
      e_experimental
    };

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

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


//
// H221NonStandard
//

class MEGACO_H221NonStandard : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_H221NonStandard, PASN_Sequence);
#endif
  public:
    MEGACO_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;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_TimeNotation : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_TimeNotation, PASN_Sequence);
#endif
  public:
    MEGACO_TimeNotation(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_IA5String m_date;
    PASN_IA5String m_time;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_Value : public PASN_OctetString
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_Value, PASN_OctetString);
#endif
  public:
    MEGACO_Value(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);

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


//
// Message_messageBody
//

class MEGACO_ErrorDescriptor;
class MEGACO_ArrayOf_Transaction;

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

    enum Choices {
      e_messageError,
      e_transactions
    };

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

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


//
// ArrayOf_ActionRequest
//

class MEGACO_ActionRequest;

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

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


//
// TransactionReply_transactionResult
//

class MEGACO_ErrorDescriptor;
class MEGACO_ArrayOf_ActionReply;

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

    enum Choices {
      e_transactionError,
      e_actionReplies
    };

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

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


//
// ArrayOf_CommandRequest
//

class MEGACO_CommandRequest;

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

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


//
// ArrayOf_CommandReply
//

class MEGACO_CommandReply;

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

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


//
// ArrayOf_TopologyRequest
//

class MEGACO_TopologyRequest;

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

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


//
// TopologyRequest_topologyDirection
//

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

    enum Enumerations {
      e_bothway,
      e_isolate,
      e_oneway
    };

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


//
// ArrayOf_AmmDescriptor
//

class MEGACO_AmmDescriptor;

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

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


//
// ArrayOf_ObservedEvent
//

class MEGACO_ObservedEvent;

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

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


//
// ArrayOf_EventParameter
//

class MEGACO_EventParameter;

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

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


//
// ArrayOf_WildcardField
//

class MEGACO_WildcardField;

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

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


//
// MediaDescriptor_streams
//

class MEGACO_StreamParms;
class MEGACO_ArrayOf_StreamDescriptor;

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

    enum Choices {
      e_oneStream,
      e_multiStream
    };

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

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


//
// ArrayOf_PropertyParm
//

class MEGACO_PropertyParm;

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

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


//
// ArrayOf_PASN_OctetString
//

class MEGACO_ArrayOf_PASN_OctetString : public PASN_Array
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ArrayOf_PASN_OctetString, PASN_Array);
#endif
  public:
    MEGACO_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 MEGACO_Relation;

class MEGACO_PropertyParm_extraInfo : public PASN_Choice
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_PropertyParm_extraInfo, PASN_Choice);
#endif
  public:
    MEGACO_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 MEGACO_Relation &() const;
#else
    operator MEGACO_Relation &();
    operator const MEGACO_Relation &() const;
#endif

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


//
// ArrayOf_PropertyGroup
//

class MEGACO_PropertyGroup;

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

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


//
// ArrayOf_TerminationID
//

class MEGACO_TerminationID;

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

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


//
// ArrayOf_RequestedEvent
//

class MEGACO_RequestedEvent;

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

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


//
// ArrayOf_SecondRequestedEvent
//

class MEGACO_SecondRequestedEvent;

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

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


//
// ArrayOf_Signal
//

class MEGACO_Signal;

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

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


//
// ArrayOf_SigParameter
//

class MEGACO_SigParameter;

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

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


//
// ArrayOf_ModemType
//

class MEGACO_ModemType;

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

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


//
// ArrayOf_Transaction
//

class MEGACO_Transaction;

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

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


//
// ArrayOf_ActionReply
//

class MEGACO_ActionReply;

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

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


//
// ArrayOf_StreamDescriptor
//

class MEGACO_StreamDescriptor;

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

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


//
// AuthenticationHeader
//

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

    MEGACO_SecurityParmIndex m_secParmIndex;
    MEGACO_SequenceNum m_seqNum;
    MEGACO_AuthData m_ad;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_Message : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_Message, PASN_Sequence);
#endif
  public:
    MEGACO_Message(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_version;
    MEGACO_MId m_mId;
    MEGACO_Message_messageBody m_messageBody;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_TransactionRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_TransactionRequest, PASN_Sequence);
#endif
  public:
    MEGACO_TransactionRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_TransactionId m_transactionId;
    MEGACO_ArrayOf_ActionRequest m_actions;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_TransactionReply : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_TransactionReply, PASN_Sequence);
#endif
  public:
    MEGACO_TransactionReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_immAckRequired
    };

    MEGACO_TransactionId m_transactionId;
    PASN_Null m_immAckRequired;
    MEGACO_TransactionReply_transactionResult m_transactionResult;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ErrorDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ErrorDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_ErrorDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_errorText
    };

    MEGACO_ErrorCode m_errorCode;
    MEGACO_ErrorText m_errorText;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ContextRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ContextRequest, PASN_Sequence);
#endif
  public:
    MEGACO_ContextRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_priority,
      e_emergency,
      e_topologyReq
    };

    PASN_Integer m_priority;
    PASN_Boolean m_emergency;
    MEGACO_ArrayOf_TopologyRequest m_topologyReq;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_CommandRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_CommandRequest, PASN_Sequence);
#endif
  public:
    MEGACO_CommandRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_optional,
      e_wildcardReturn
    };

    MEGACO_Command m_command;
    PASN_Null m_optional;
    PASN_Null m_wildcardReturn;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_AmmRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_AmmRequest, PASN_Sequence);
#endif
  public:
    MEGACO_AmmRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_TerminationIDList m_terminationID;
    MEGACO_ArrayOf_AmmDescriptor m_descriptors;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_AmmsReply : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_AmmsReply, PASN_Sequence);
#endif
  public:
    MEGACO_AmmsReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_terminationAudit
    };

    MEGACO_TerminationIDList m_terminationID;
    MEGACO_TerminationAudit m_terminationAudit;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_SubtractRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_SubtractRequest, PASN_Sequence);
#endif
  public:
    MEGACO_SubtractRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_auditDescriptor
    };

    MEGACO_TerminationIDList m_terminationID;
    MEGACO_AuditDescriptor m_auditDescriptor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_NotifyReply : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_NotifyReply, PASN_Sequence);
#endif
  public:
    MEGACO_NotifyReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_terminationID,
      e_errorDescriptor
    };

    MEGACO_TerminationIDList m_terminationID;
    MEGACO_ErrorDescriptor m_errorDescriptor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ObservedEventsDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ObservedEventsDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_ObservedEventsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_RequestID m_requestId;
    MEGACO_ArrayOf_ObservedEvent m_observedEventLst;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_EventName : public MEGACO_PkgdName
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_EventName, MEGACO_PkgdName);
#endif
  public:
    MEGACO_EventName(unsigned tag = UniversalOctetString, TagClass tagClass = UniversalTagClass);

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


//
// EventParameter
//

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

    MEGACO_Name m_eventParameterName;
    MEGACO_Value m_value;

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


//
// ServiceChangeReply
//

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

    MEGACO_TerminationIDList m_terminationID;
    MEGACO_ServiceChangeResult m_serviceChangeResult;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_TerminationID : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_TerminationID, PASN_Sequence);
#endif
  public:
    MEGACO_TerminationID(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_ArrayOf_WildcardField m_wildcard;
    PASN_OctetString m_id;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_LocalControlDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_LocalControlDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_LocalControlDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_streamMode
    };

    MEGACO_StreamMode m_streamMode;
    PASN_Boolean m_reserveValue;
    PASN_Boolean m_reserveGroup;
    MEGACO_ArrayOf_PropertyParm m_propertyParms;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_PropertyParm : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_PropertyParm, PASN_Sequence);
#endif
  public:
    MEGACO_PropertyParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_extraInfo
    };

    MEGACO_PkgdName m_name;
    MEGACO_ArrayOf_PASN_OctetString m_value;
    MEGACO_PropertyParm_extraInfo m_extraInfo;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_LocalRemoteDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_LocalRemoteDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_LocalRemoteDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_ArrayOf_PropertyGroup m_propGrps;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_TerminationStateDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_TerminationStateDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_TerminationStateDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_eventBufferControl,
      e_serviceState
    };

    MEGACO_ArrayOf_PropertyParm m_propertyParms;
    MEGACO_EventBufferControl m_eventBufferControl;
    MEGACO_ServiceState m_serviceState;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_EventsDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_EventsDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_EventsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_RequestID m_requestID;
    MEGACO_ArrayOf_RequestedEvent m_eventList;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_SecondEventsDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_SecondEventsDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_SecondEventsDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_RequestID m_requestID;
    MEGACO_ArrayOf_SecondRequestedEvent m_eventList;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_SecondRequestedActions : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_SecondRequestedActions, PASN_Sequence);
#endif
  public:
    MEGACO_SecondRequestedActions(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_eventDM,
      e_signalsDescriptor
    };

    PASN_Boolean m_keepActive;
    MEGACO_EventDM m_eventDM;
    MEGACO_SignalsDescriptor m_signalsDescriptor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_EventSpec : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_EventSpec, PASN_Sequence);
#endif
  public:
    MEGACO_EventSpec(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_streamID
    };

    MEGACO_EventName m_eventName;
    MEGACO_StreamID m_streamID;
    MEGACO_ArrayOf_EventParameter m_eventParList;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_SeqSigList : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_SeqSigList, PASN_Sequence);
#endif
  public:
    MEGACO_SeqSigList(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    PASN_Integer m_id;
    MEGACO_ArrayOf_Signal m_signalList;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_Signal : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_Signal, PASN_Sequence);
#endif
  public:
    MEGACO_Signal(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

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

    MEGACO_SignalName m_signalName;
    MEGACO_StreamID m_streamID;
    MEGACO_SignalType m_sigType;
    PASN_Integer m_duration;
    MEGACO_NotifyCompletion m_notifyCompletion;
    PASN_Boolean m_keepActive;
    MEGACO_ArrayOf_SigParameter m_sigParList;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_SigParameter : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_SigParameter, PASN_Sequence);
#endif
  public:
    MEGACO_SigParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_Name m_sigParameterName;
    MEGACO_Value m_value;

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


//
// DigitMapDescriptor
//

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

    enum OptionalFields {
      e_digitMapName,
      e_digitMapValue
    };

    MEGACO_DigitMapName m_digitMapName;
    MEGACO_DigitMapValue m_digitMapValue;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ServiceChangeResParm : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ServiceChangeResParm, PASN_Sequence);
#endif
  public:
    MEGACO_ServiceChangeResParm(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

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

    MEGACO_MId m_serviceChangeMgcId;
    MEGACO_ServiceChangeAddress m_serviceChangeAddress;
    PASN_Integer m_serviceChangeVersion;
    MEGACO_ServiceChangeProfile m_serviceChangeProfile;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_StatisticsParameter : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_StatisticsParameter, PASN_Sequence);
#endif
  public:
    MEGACO_StatisticsParameter(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_PkgdName m_statName;
    MEGACO_Value m_statValue;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_NonStandardData : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_NonStandardData, PASN_Sequence);
#endif
  public:
    MEGACO_NonStandardData(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_NonStandardIdentifier m_nonStandardIdentifier;
    PASN_OctetString m_data;

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


//
// MegacoMessage
//

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

    enum OptionalFields {
      e_authHeader
    };

    MEGACO_AuthenticationHeader m_authHeader;
    MEGACO_Message m_mess;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ActionRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ActionRequest, PASN_Sequence);
#endif
  public:
    MEGACO_ActionRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_contextRequest,
      e_contextAttrAuditReq
    };

    MEGACO_ContextID m_contextId;
    MEGACO_ContextRequest m_contextRequest;
    MEGACO_ContextAttrAuditRequest m_contextAttrAuditReq;
    MEGACO_ArrayOf_CommandRequest m_commandRequests;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ActionReply : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ActionReply, PASN_Sequence);
#endif
  public:
    MEGACO_ActionReply(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_errorDescriptor,
      e_contextReply
    };

    MEGACO_ContextID m_contextId;
    MEGACO_ErrorDescriptor m_errorDescriptor;
    MEGACO_ContextRequest m_contextReply;
    MEGACO_ArrayOf_CommandReply m_commandReply;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_TopologyRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_TopologyRequest, PASN_Sequence);
#endif
  public:
    MEGACO_TopologyRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_TerminationID m_terminationFrom;
    MEGACO_TerminationID m_terminationTo;
    MEGACO_TopologyRequest_topologyDirection m_topologyDirection;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_AuditRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_AuditRequest, PASN_Sequence);
#endif
  public:
    MEGACO_AuditRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_TerminationID m_terminationID;
    MEGACO_AuditDescriptor m_auditDescriptor;

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


//
// AuditReply
//

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

    MEGACO_TerminationID m_terminationID;
    MEGACO_AuditResult m_auditResult;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_NotifyRequest : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_NotifyRequest, PASN_Sequence);
#endif
  public:
    MEGACO_NotifyRequest(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_errorDescriptor
    };

    MEGACO_TerminationIDList m_terminationID;
    MEGACO_ObservedEventsDescriptor m_observedEventsDescriptor;
    MEGACO_ErrorDescriptor m_errorDescriptor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ObservedEvent : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ObservedEvent, PASN_Sequence);
#endif
  public:
    MEGACO_ObservedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_streamID,
      e_timeNotation
    };

    MEGACO_EventName m_eventName;
    MEGACO_StreamID m_streamID;
    MEGACO_ArrayOf_EventParameter m_eventParList;
    MEGACO_TimeNotation m_timeNotation;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_MediaDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_MediaDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_MediaDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_termStateDescr
    };

    MEGACO_TerminationStateDescriptor m_termStateDescr;
    MEGACO_MediaDescriptor_streams m_streams;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_StreamParms : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_StreamParms, PASN_Sequence);
#endif
  public:
    MEGACO_StreamParms(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_localControlDescriptor,
      e_localDescriptor,
      e_remoteDescriptor
    };

    MEGACO_LocalControlDescriptor m_localControlDescriptor;
    MEGACO_LocalRemoteDescriptor m_localDescriptor;
    MEGACO_LocalRemoteDescriptor m_remoteDescriptor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_MuxDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_MuxDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_MuxDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandardData
    };

    MEGACO_MuxType m_muxType;
    MEGACO_ArrayOf_TerminationID m_termList;
    MEGACO_NonStandardData m_nonStandardData;

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


//
// RequestedActions
//

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

    enum OptionalFields {
      e_eventDM,
      e_secondEvent,
      e_signalsDescriptor
    };

    PASN_Boolean m_keepActive;
    MEGACO_EventDM m_eventDM;
    MEGACO_SecondEventsDescriptor m_secondEvent;
    MEGACO_SignalsDescriptor m_signalsDescriptor;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_SecondRequestedEvent : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_SecondRequestedEvent, PASN_Sequence);
#endif
  public:
    MEGACO_SecondRequestedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_streamID,
      e_eventAction
    };

    MEGACO_PkgdName m_pkgdName;
    MEGACO_StreamID m_streamID;
    MEGACO_SecondRequestedActions m_eventAction;
    MEGACO_ArrayOf_EventParameter m_evParList;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_ModemDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_ModemDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_ModemDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_nonStandardData
    };

    MEGACO_ArrayOf_ModemType m_mtl;
    MEGACO_ArrayOf_PropertyParm m_mpl;
    MEGACO_NonStandardData m_nonStandardData;

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


//
// ServiceChangeParm
//

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

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

    MEGACO_ServiceChangeMethod m_serviceChangeMethod;
    MEGACO_ServiceChangeAddress m_serviceChangeAddress;
    PASN_Integer m_serviceChangeVersion;
    MEGACO_ServiceChangeProfile m_serviceChangeProfile;
    MEGACO_Value m_serviceChangeReason;
    PASN_Integer m_serviceChangeDelay;
    MEGACO_MId m_serviceChangeMgcId;
    MEGACO_TimeNotation m_timeStamp;
    MEGACO_NonStandardData m_nonStandardData;

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


//
// ServiceChangeRequest
//

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

    MEGACO_TerminationIDList m_terminationID;
    MEGACO_ServiceChangeParm m_serviceChangeParms;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_StreamDescriptor : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_StreamDescriptor, PASN_Sequence);
#endif
  public:
    MEGACO_StreamDescriptor(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    MEGACO_StreamID m_streamID;
    MEGACO_StreamParms m_streamParms;

    PINDEX GetDataLength() const;
    BOOL Decode(PASN_Stream & strm);
    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 MEGACO_RequestedEvent : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MEGACO_RequestedEvent, PASN_Sequence);
#endif
  public:
    MEGACO_RequestedEvent(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);

    enum OptionalFields {
      e_streamID,
      e_eventAction
    };

    MEGACO_PkgdName m_pkgdName;
    MEGACO_StreamID m_streamID;
    MEGACO_RequestedActions m_eventAction;
    MEGACO_ArrayOf_EventParameter m_evParList;

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


// End of megaco.h