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

#if ! H323_DISABLE_MCS

#ifndef __MCS_H
#define __MCS_H

#ifdef P_USE_PRAGMA
#pragma interface
#endif

#include <ptclib/asner.h>

//
// ChannelId
//

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

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


//
// StaticChannelId
//

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

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


//
// DynamicChannelId
//

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

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


//
// UserId
//

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

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


//
// PrivateChannelId
//

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

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


//
// AssignedChannelId
//

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

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


//
// TokenId
//

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

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


//
// TokenStatus
//

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

    enum Enumerations {
      e_notInUse,
      e_selfGrabbed,
      e_otherGrabbed,
      e_selfInhibited,
      e_otherInhibited,
      e_selfRecipient,
      e_selfGiving,
      e_otherGiving
    };

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


//
// DataPriority
//

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

    enum Enumerations {
      e_top,
      e_high,
      e_medium,
      e_low
    };

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


//
// Segmentation
//

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

    PObject * Clone() const;
};


//
// DomainParameters
//

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

    PASN_Integer m_maxChannelIds;
    PASN_Integer m_maxUserIds;
    PASN_Integer m_maxTokenIds;
    PASN_Integer m_numPriorities;
    PASN_Integer m_minThroughput;
    PASN_Integer m_maxHeight;
    PASN_Integer m_maxMCSPDUsize;
    PASN_Integer m_protocolVersion;

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


//
// Connect-Initial
//

class MCS_Connect_Initial : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_Connect_Initial, PASN_Sequence);
#endif
  public:
    MCS_Connect_Initial(unsigned tag = 101, TagClass tagClass = ApplicationTagClass);

    PASN_OctetString m_callingDomainSelector;
    PASN_OctetString m_calledDomainSelector;
    PASN_Boolean m_upwardFlag;
    MCS_DomainParameters m_targetParameters;
    MCS_DomainParameters m_minimumParameters;
    MCS_DomainParameters m_maximumParameters;
    PASN_OctetString m_userData;

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


//
// Connect-Additional
//

class MCS_Connect_Additional : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_Connect_Additional, PASN_Sequence);
#endif
  public:
    MCS_Connect_Additional(unsigned tag = 103, TagClass tagClass = ApplicationTagClass);

    PASN_Integer m_calledConnectId;
    MCS_DataPriority m_dataPriority;

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


//
// PDin
//

class MCS_PDin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_PDin, PASN_Sequence);
#endif
  public:
    MCS_PDin(unsigned tag = 0, TagClass tagClass = ApplicationTagClass);

    PASN_Integer m_heightLimit;

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


//
// EDrq
//

class MCS_EDrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_EDrq, PASN_Sequence);
#endif
  public:
    MCS_EDrq(unsigned tag = 1, TagClass tagClass = ApplicationTagClass);

    PASN_Integer m_subHeight;
    PASN_Integer m_subInterval;

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


//
// ChannelAttributes
//

class MCS_ChannelAttributes_static;
class MCS_ChannelAttributes_userId;
class MCS_ChannelAttributes_private;
class MCS_ChannelAttributes_assigned;

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

    enum Choices {
      e_static,
      e_userId,
      e_private,
      e_assigned
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_ChannelAttributes_static &() const;
#else
    operator MCS_ChannelAttributes_static &();
    operator const MCS_ChannelAttributes_static &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_ChannelAttributes_userId &() const;
#else
    operator MCS_ChannelAttributes_userId &();
    operator const MCS_ChannelAttributes_userId &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_ChannelAttributes_private &() const;
#else
    operator MCS_ChannelAttributes_private &();
    operator const MCS_ChannelAttributes_private &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_ChannelAttributes_assigned &() const;
#else
    operator MCS_ChannelAttributes_assigned &();
    operator const MCS_ChannelAttributes_assigned &() const;
#endif

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


//
// TokenAttributes
//

class MCS_TokenAttributes_grabbed;
class MCS_TokenAttributes_inhibited;
class MCS_TokenAttributes_giving;
class MCS_TokenAttributes_ungivable;
class MCS_TokenAttributes_given;

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

    enum Choices {
      e_grabbed,
      e_inhibited,
      e_giving,
      e_ungivable,
      e_given
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TokenAttributes_grabbed &() const;
#else
    operator MCS_TokenAttributes_grabbed &();
    operator const MCS_TokenAttributes_grabbed &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TokenAttributes_inhibited &() const;
#else
    operator MCS_TokenAttributes_inhibited &();
    operator const MCS_TokenAttributes_inhibited &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TokenAttributes_giving &() const;
#else
    operator MCS_TokenAttributes_giving &();
    operator const MCS_TokenAttributes_giving &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TokenAttributes_ungivable &() const;
#else
    operator MCS_TokenAttributes_ungivable &();
    operator const MCS_TokenAttributes_ungivable &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TokenAttributes_given &() const;
#else
    operator MCS_TokenAttributes_given &();
    operator const MCS_TokenAttributes_given &() const;
#endif

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


//
// AUrq
//

class MCS_AUrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_AUrq, PASN_Sequence);
#endif
  public:
    MCS_AUrq(unsigned tag = 10, TagClass tagClass = ApplicationTagClass);


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


//
// CJrq
//

class MCS_CJrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CJrq, PASN_Sequence);
#endif
  public:
    MCS_CJrq(unsigned tag = 14, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_ChannelId m_channelId;

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


//
// CCrq
//

class MCS_CCrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CCrq, PASN_Sequence);
#endif
  public:
    MCS_CCrq(unsigned tag = 17, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;

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


//
// CDrq
//

class MCS_CDrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CDrq, PASN_Sequence);
#endif
  public:
    MCS_CDrq(unsigned tag = 19, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_PrivateChannelId m_channelId;

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


//
// CDin
//

class MCS_CDin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CDin, PASN_Sequence);
#endif
  public:
    MCS_CDin(unsigned tag = 20, TagClass tagClass = ApplicationTagClass);

    MCS_PrivateChannelId m_channelId;

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


//
// SDrq
//

class MCS_SDrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_SDrq, PASN_Sequence);
#endif
  public:
    MCS_SDrq(unsigned tag = 25, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_ChannelId m_channelId;
    MCS_DataPriority m_dataPriority;
    MCS_Segmentation m_segmentation;
    PASN_OctetString m_userData;

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


//
// SDin
//

class MCS_SDin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_SDin, PASN_Sequence);
#endif
  public:
    MCS_SDin(unsigned tag = 26, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_ChannelId m_channelId;
    MCS_DataPriority m_dataPriority;
    MCS_Segmentation m_segmentation;
    PASN_OctetString m_userData;

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


//
// USrq
//

class MCS_USrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_USrq, PASN_Sequence);
#endif
  public:
    MCS_USrq(unsigned tag = 27, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_ChannelId m_channelId;
    MCS_DataPriority m_dataPriority;
    MCS_Segmentation m_segmentation;
    PASN_OctetString m_userData;

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


//
// USin
//

class MCS_USin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_USin, PASN_Sequence);
#endif
  public:
    MCS_USin(unsigned tag = 28, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_ChannelId m_channelId;
    MCS_DataPriority m_dataPriority;
    MCS_Segmentation m_segmentation;
    PASN_OctetString m_userData;

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


//
// TGrq
//

class MCS_TGrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TGrq, PASN_Sequence);
#endif
  public:
    MCS_TGrq(unsigned tag = 29, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;

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


//
// TIrq
//

class MCS_TIrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TIrq, PASN_Sequence);
#endif
  public:
    MCS_TIrq(unsigned tag = 31, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;

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


//
// TVrq
//

class MCS_TVrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TVrq, PASN_Sequence);
#endif
  public:
    MCS_TVrq(unsigned tag = 33, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;
    MCS_UserId m_recipient;

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


//
// TVin
//

class MCS_TVin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TVin, PASN_Sequence);
#endif
  public:
    MCS_TVin(unsigned tag = 34, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;
    MCS_UserId m_recipient;

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


//
// TPrq
//

class MCS_TPrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TPrq, PASN_Sequence);
#endif
  public:
    MCS_TPrq(unsigned tag = 37, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;

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


//
// TPin
//

class MCS_TPin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TPin, PASN_Sequence);
#endif
  public:
    MCS_TPin(unsigned tag = 38, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;

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


//
// TRrq
//

class MCS_TRrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TRrq, PASN_Sequence);
#endif
  public:
    MCS_TRrq(unsigned tag = 39, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;

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


//
// TTrq
//

class MCS_TTrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TTrq, PASN_Sequence);
#endif
  public:
    MCS_TTrq(unsigned tag = 41, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;

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


//
// TTcf
//

class MCS_TTcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TTcf, PASN_Sequence);
#endif
  public:
    MCS_TTcf(unsigned tag = 42, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;
    MCS_TokenStatus m_tokenStatus;

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


//
// Reason
//

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

    enum Enumerations {
      e_rn_domain_disconnected,
      e_rn_provider_initiated,
      e_rn_token_purged,
      e_rn_user_requested,
      e_rn_channel_purged
    };

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


//
// Result
//

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

    enum Enumerations {
      e_rt_successful,
      e_rt_domain_merging,
      e_rt_domain_not_hierarchical,
      e_rt_no_such_channel,
      e_rt_no_such_domain,
      e_rt_no_such_user,
      e_rt_not_admitted,
      e_rt_other_user_id,
      e_rt_parameters_unacceptable,
      e_rt_token_not_available,
      e_rt_token_not_possessed,
      e_rt_too_many_channels,
      e_rt_too_many_tokens,
      e_rt_too_many_users,
      e_rt_unspecified_failure,
      e_rt_user_rejected
    };

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


//
// Diagnostic
//

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

    enum Enumerations {
      e_dc_inconsistent_merge,
      e_dc_forbidden_PDU_downward,
      e_dc_forbidden_PDU_upward,
      e_dc_invalid_BER_encoding,
      e_dc_invalid_PER_encoding,
      e_dc_misrouted_user,
      e_dc_unrequested_confirm,
      e_dc_wrong_transport_priority,
      e_dc_channel_id_conflict,
      e_dc_token_id_conflict,
      e_dc_not_user_id_channel,
      e_dc_too_many_channels,
      e_dc_too_many_tokens,
      e_dc_too_many_users
    };

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


//
// ConnectMCSPDU
//

class MCS_Connect_Initial;
class MCS_Connect_Response;
class MCS_Connect_Additional;
class MCS_Connect_Result;

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

    enum Choices {
      e_connect_initial = 101,
      e_connect_response,
      e_connect_additional,
      e_connect_result
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_Connect_Initial &() const;
#else
    operator MCS_Connect_Initial &();
    operator const MCS_Connect_Initial &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_Connect_Response &() const;
#else
    operator MCS_Connect_Response &();
    operator const MCS_Connect_Response &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_Connect_Additional &() const;
#else
    operator MCS_Connect_Additional &();
    operator const MCS_Connect_Additional &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_Connect_Result &() const;
#else
    operator MCS_Connect_Result &();
    operator const MCS_Connect_Result &() const;
#endif

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


//
// DomainMCSPDU
//

class MCS_PDin;
class MCS_EDrq;
class MCS_MCrq;
class MCS_MCcf;
class MCS_PCin;
class MCS_MTrq;
class MCS_MTcf;
class MCS_PTin;
class MCS_DPum;
class MCS_RJum;
class MCS_AUrq;
class MCS_AUcf;
class MCS_DUrq;
class MCS_DUin;
class MCS_CJrq;
class MCS_CJcf;
class MCS_CLrq;
class MCS_CCrq;
class MCS_CCcf;
class MCS_CDrq;
class MCS_CDin;
class MCS_CArq;
class MCS_CAin;
class MCS_CErq;
class MCS_CEin;
class MCS_SDrq;
class MCS_SDin;
class MCS_USrq;
class MCS_USin;
class MCS_TGrq;
class MCS_TGcf;
class MCS_TIrq;
class MCS_TIcf;
class MCS_TVrq;
class MCS_TVin;
class MCS_TVrs;
class MCS_TVcf;
class MCS_TPrq;
class MCS_TPin;
class MCS_TRrq;
class MCS_TRcf;
class MCS_TTrq;
class MCS_TTcf;

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

    enum Choices {
      e_pdin,
      e_edrq,
      e_mcrq,
      e_mccf,
      e_pcin,
      e_mtrq,
      e_mtcf,
      e_ptin,
      e_dpum,
      e_rjum,
      e_aurq,
      e_aucf,
      e_durq,
      e_duin,
      e_cjrq,
      e_cjcf,
      e_clrq,
      e_ccrq,
      e_cccf,
      e_cdrq,
      e_cdin,
      e_carq,
      e_cain,
      e_cerq,
      e_cein,
      e_sdrq,
      e_sdin,
      e_usrq,
      e_usin,
      e_tgrq,
      e_tgcf,
      e_tirq,
      e_ticf,
      e_tvrq,
      e_tvin,
      e_tvrs,
      e_tvcf,
      e_tprq,
      e_tpin,
      e_trrq,
      e_trcf,
      e_ttrq,
      e_ttcf
    };

#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_PDin &() const;
#else
    operator MCS_PDin &();
    operator const MCS_PDin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_EDrq &() const;
#else
    operator MCS_EDrq &();
    operator const MCS_EDrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_MCrq &() const;
#else
    operator MCS_MCrq &();
    operator const MCS_MCrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_MCcf &() const;
#else
    operator MCS_MCcf &();
    operator const MCS_MCcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_PCin &() const;
#else
    operator MCS_PCin &();
    operator const MCS_PCin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_MTrq &() const;
#else
    operator MCS_MTrq &();
    operator const MCS_MTrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_MTcf &() const;
#else
    operator MCS_MTcf &();
    operator const MCS_MTcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_PTin &() const;
#else
    operator MCS_PTin &();
    operator const MCS_PTin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_DPum &() const;
#else
    operator MCS_DPum &();
    operator const MCS_DPum &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_RJum &() const;
#else
    operator MCS_RJum &();
    operator const MCS_RJum &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_AUrq &() const;
#else
    operator MCS_AUrq &();
    operator const MCS_AUrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_AUcf &() const;
#else
    operator MCS_AUcf &();
    operator const MCS_AUcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_DUrq &() const;
#else
    operator MCS_DUrq &();
    operator const MCS_DUrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_DUin &() const;
#else
    operator MCS_DUin &();
    operator const MCS_DUin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CJrq &() const;
#else
    operator MCS_CJrq &();
    operator const MCS_CJrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CJcf &() const;
#else
    operator MCS_CJcf &();
    operator const MCS_CJcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CLrq &() const;
#else
    operator MCS_CLrq &();
    operator const MCS_CLrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CCrq &() const;
#else
    operator MCS_CCrq &();
    operator const MCS_CCrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CCcf &() const;
#else
    operator MCS_CCcf &();
    operator const MCS_CCcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CDrq &() const;
#else
    operator MCS_CDrq &();
    operator const MCS_CDrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CDin &() const;
#else
    operator MCS_CDin &();
    operator const MCS_CDin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CArq &() const;
#else
    operator MCS_CArq &();
    operator const MCS_CArq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CAin &() const;
#else
    operator MCS_CAin &();
    operator const MCS_CAin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CErq &() const;
#else
    operator MCS_CErq &();
    operator const MCS_CErq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_CEin &() const;
#else
    operator MCS_CEin &();
    operator const MCS_CEin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_SDrq &() const;
#else
    operator MCS_SDrq &();
    operator const MCS_SDrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_SDin &() const;
#else
    operator MCS_SDin &();
    operator const MCS_SDin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_USrq &() const;
#else
    operator MCS_USrq &();
    operator const MCS_USrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_USin &() const;
#else
    operator MCS_USin &();
    operator const MCS_USin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TGrq &() const;
#else
    operator MCS_TGrq &();
    operator const MCS_TGrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TGcf &() const;
#else
    operator MCS_TGcf &();
    operator const MCS_TGcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TIrq &() const;
#else
    operator MCS_TIrq &();
    operator const MCS_TIrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TIcf &() const;
#else
    operator MCS_TIcf &();
    operator const MCS_TIcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TVrq &() const;
#else
    operator MCS_TVrq &();
    operator const MCS_TVrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TVin &() const;
#else
    operator MCS_TVin &();
    operator const MCS_TVin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TVrs &() const;
#else
    operator MCS_TVrs &();
    operator const MCS_TVrs &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TVcf &() const;
#else
    operator MCS_TVcf &();
    operator const MCS_TVcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TPrq &() const;
#else
    operator MCS_TPrq &();
    operator const MCS_TPrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TPin &() const;
#else
    operator MCS_TPin &();
    operator const MCS_TPin &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TRrq &() const;
#else
    operator MCS_TRrq &();
    operator const MCS_TRrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TRcf &() const;
#else
    operator MCS_TRcf &();
    operator const MCS_TRcf &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TTrq &() const;
#else
    operator MCS_TTrq &();
    operator const MCS_TTrq &() const;
#endif
#if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
    operator MCS_TTcf &() const;
#else
    operator MCS_TTcf &();
    operator const MCS_TTcf &() const;
#endif

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


//
// ChannelAttributes_static
//

class MCS_ChannelAttributes_static : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_ChannelAttributes_static, PASN_Sequence);
#endif
  public:
    MCS_ChannelAttributes_static(unsigned tag = 0, TagClass tagClass = ContextSpecificTagClass);

    MCS_StaticChannelId m_channelId;

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


//
// ChannelAttributes_userId
//

class MCS_ChannelAttributes_userId : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_ChannelAttributes_userId, PASN_Sequence);
#endif
  public:
    MCS_ChannelAttributes_userId(unsigned tag = 1, TagClass tagClass = ContextSpecificTagClass);

    PASN_Boolean m_joined;
    MCS_UserId m_userId;

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


//
// ChannelAttributes_assigned
//

class MCS_ChannelAttributes_assigned : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_ChannelAttributes_assigned, PASN_Sequence);
#endif
  public:
    MCS_ChannelAttributes_assigned(unsigned tag = 3, TagClass tagClass = ContextSpecificTagClass);

    MCS_AssignedChannelId m_channelId;

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


//
// ArrayOf_ChannelAttributes
//

class MCS_ChannelAttributes;

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

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


//
// ArrayOf_ChannelId
//

class MCS_ChannelId;

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

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


//
// ArrayOf_UserId
//

class MCS_UserId;

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

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


//
// TokenAttributes_grabbed
//

class MCS_TokenAttributes_grabbed : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TokenAttributes_grabbed, PASN_Sequence);
#endif
  public:
    MCS_TokenAttributes_grabbed(unsigned tag = 0, TagClass tagClass = ContextSpecificTagClass);

    MCS_TokenId m_tokenId;
    MCS_UserId m_grabber;

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


//
// TokenAttributes_inhibited
//

class MCS_TokenAttributes_inhibited : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TokenAttributes_inhibited, PASN_Sequence);
#endif
  public:
    MCS_TokenAttributes_inhibited(unsigned tag = 1, TagClass tagClass = ContextSpecificTagClass);

    MCS_TokenId m_tokenId;
    MCS_ArrayOf_UserId m_inhibitors;

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


//
// TokenAttributes_giving
//

class MCS_TokenAttributes_giving : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TokenAttributes_giving, PASN_Sequence);
#endif
  public:
    MCS_TokenAttributes_giving(unsigned tag = 2, TagClass tagClass = ContextSpecificTagClass);

    MCS_TokenId m_tokenId;
    MCS_UserId m_grabber;
    MCS_UserId m_recipient;

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


//
// TokenAttributes_ungivable
//

class MCS_TokenAttributes_ungivable : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TokenAttributes_ungivable, PASN_Sequence);
#endif
  public:
    MCS_TokenAttributes_ungivable(unsigned tag = 3, TagClass tagClass = ContextSpecificTagClass);

    MCS_TokenId m_tokenId;
    MCS_UserId m_grabber;

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


//
// TokenAttributes_given
//

class MCS_TokenAttributes_given : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TokenAttributes_given, PASN_Sequence);
#endif
  public:
    MCS_TokenAttributes_given(unsigned tag = 4, TagClass tagClass = ContextSpecificTagClass);

    MCS_TokenId m_tokenId;
    MCS_UserId m_recipient;

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


//
// ArrayOf_TokenAttributes
//

class MCS_TokenAttributes;

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

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


//
// ArrayOf_TokenId
//

class MCS_TokenId;

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

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


//
// Connect-Response
//

class MCS_Connect_Response : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_Connect_Response, PASN_Sequence);
#endif
  public:
    MCS_Connect_Response(unsigned tag = 102, TagClass tagClass = ApplicationTagClass);

    MCS_Result m_result;
    PASN_Integer m_calledConnectId;
    MCS_DomainParameters m_domainParameters;
    PASN_OctetString m_userData;

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


//
// Connect-Result
//

class MCS_Connect_Result : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_Connect_Result, PASN_Sequence);
#endif
  public:
    MCS_Connect_Result(unsigned tag = 104, TagClass tagClass = ApplicationTagClass);

    MCS_Result m_result;

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


//
// MCrq
//

class MCS_MCrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_MCrq, PASN_Sequence);
#endif
  public:
    MCS_MCrq(unsigned tag = 2, TagClass tagClass = ApplicationTagClass);

    MCS_ArrayOf_ChannelAttributes m_mergeChannels;
    MCS_ArrayOf_ChannelId m_purgeChannelIds;

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


//
// MCcf
//

class MCS_MCcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_MCcf, PASN_Sequence);
#endif
  public:
    MCS_MCcf(unsigned tag = 3, TagClass tagClass = ApplicationTagClass);

    MCS_ArrayOf_ChannelAttributes m_mergeChannels;
    MCS_ArrayOf_ChannelId m_purgeChannelIds;

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


//
// PCin
//

class MCS_PCin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_PCin, PASN_Sequence);
#endif
  public:
    MCS_PCin(unsigned tag = 4, TagClass tagClass = ApplicationTagClass);

    MCS_ArrayOf_UserId m_detachUserIds;
    MCS_ArrayOf_ChannelId m_purgeChannelIds;

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


//
// MTrq
//

class MCS_MTrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_MTrq, PASN_Sequence);
#endif
  public:
    MCS_MTrq(unsigned tag = 5, TagClass tagClass = ApplicationTagClass);

    MCS_ArrayOf_TokenAttributes m_mergeTokens;
    MCS_ArrayOf_TokenId m_purgeTokenIds;

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


//
// MTcf
//

class MCS_MTcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_MTcf, PASN_Sequence);
#endif
  public:
    MCS_MTcf(unsigned tag = 6, TagClass tagClass = ApplicationTagClass);

    MCS_ArrayOf_TokenAttributes m_mergeTokens;
    MCS_ArrayOf_TokenId m_purgeTokenIds;

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


//
// PTin
//

class MCS_PTin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_PTin, PASN_Sequence);
#endif
  public:
    MCS_PTin(unsigned tag = 7, TagClass tagClass = ApplicationTagClass);

    MCS_ArrayOf_TokenId m_purgeTokenIds;

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


//
// DPum
//

class MCS_DPum : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_DPum, PASN_Sequence);
#endif
  public:
    MCS_DPum(unsigned tag = 8, TagClass tagClass = ApplicationTagClass);

    MCS_Reason m_reason;

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


//
// RJum
//

class MCS_RJum : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_RJum, PASN_Sequence);
#endif
  public:
    MCS_RJum(unsigned tag = 9, TagClass tagClass = ApplicationTagClass);

    MCS_Diagnostic m_diagnostic;
    PASN_OctetString m_initialOctets;

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


//
// AUcf
//

class MCS_AUcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_AUcf, PASN_Sequence);
#endif
  public:
    MCS_AUcf(unsigned tag = 11, TagClass tagClass = ApplicationTagClass);

    enum OptionalFields {
      e_initiator
    };

    MCS_Result m_result;
    MCS_UserId m_initiator;

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


//
// DUrq
//

class MCS_DUrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_DUrq, PASN_Sequence);
#endif
  public:
    MCS_DUrq(unsigned tag = 12, TagClass tagClass = ApplicationTagClass);

    MCS_Reason m_reason;
    MCS_ArrayOf_UserId m_userIds;

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


//
// DUin
//

class MCS_DUin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_DUin, PASN_Sequence);
#endif
  public:
    MCS_DUin(unsigned tag = 13, TagClass tagClass = ApplicationTagClass);

    MCS_Reason m_reason;
    MCS_ArrayOf_UserId m_userIds;

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


//
// CJcf
//

class MCS_CJcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CJcf, PASN_Sequence);
#endif
  public:
    MCS_CJcf(unsigned tag = 15, TagClass tagClass = ApplicationTagClass);

    enum OptionalFields {
      e_channelId
    };

    MCS_Result m_result;
    MCS_UserId m_initiator;
    MCS_ChannelId m_requested;
    MCS_ChannelId m_channelId;

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


//
// CLrq
//

class MCS_CLrq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CLrq, PASN_Sequence);
#endif
  public:
    MCS_CLrq(unsigned tag = 16, TagClass tagClass = ApplicationTagClass);

    MCS_ArrayOf_ChannelId m_channelIds;

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


//
// CCcf
//

class MCS_CCcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CCcf, PASN_Sequence);
#endif
  public:
    MCS_CCcf(unsigned tag = 18, TagClass tagClass = ApplicationTagClass);

    enum OptionalFields {
      e_channelId
    };

    MCS_Result m_result;
    MCS_UserId m_initiator;
    MCS_PrivateChannelId m_channelId;

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


//
// CArq
//

class MCS_CArq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CArq, PASN_Sequence);
#endif
  public:
    MCS_CArq(unsigned tag = 21, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_PrivateChannelId m_channelId;
    MCS_ArrayOf_UserId m_userIds;

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


//
// CAin
//

class MCS_CAin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CAin, PASN_Sequence);
#endif
  public:
    MCS_CAin(unsigned tag = 22, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_PrivateChannelId m_channelId;
    MCS_ArrayOf_UserId m_userIds;

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


//
// CErq
//

class MCS_CErq : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CErq, PASN_Sequence);
#endif
  public:
    MCS_CErq(unsigned tag = 23, TagClass tagClass = ApplicationTagClass);

    MCS_UserId m_initiator;
    MCS_PrivateChannelId m_channelId;
    MCS_ArrayOf_UserId m_userIds;

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


//
// CEin
//

class MCS_CEin : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_CEin, PASN_Sequence);
#endif
  public:
    MCS_CEin(unsigned tag = 24, TagClass tagClass = ApplicationTagClass);

    MCS_PrivateChannelId m_channelId;
    MCS_ArrayOf_UserId m_userIds;

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


//
// TGcf
//

class MCS_TGcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TGcf, PASN_Sequence);
#endif
  public:
    MCS_TGcf(unsigned tag = 30, TagClass tagClass = ApplicationTagClass);

    MCS_Result m_result;
    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;
    MCS_TokenStatus m_tokenStatus;

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


//
// TIcf
//

class MCS_TIcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TIcf, PASN_Sequence);
#endif
  public:
    MCS_TIcf(unsigned tag = 32, TagClass tagClass = ApplicationTagClass);

    MCS_Result m_result;
    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;
    MCS_TokenStatus m_tokenStatus;

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


//
// TVrs
//

class MCS_TVrs : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TVrs, PASN_Sequence);
#endif
  public:
    MCS_TVrs(unsigned tag = 35, TagClass tagClass = ApplicationTagClass);

    MCS_Result m_result;
    MCS_UserId m_recipient;
    MCS_TokenId m_tokenId;

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


//
// TVcf
//

class MCS_TVcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TVcf, PASN_Sequence);
#endif
  public:
    MCS_TVcf(unsigned tag = 36, TagClass tagClass = ApplicationTagClass);

    MCS_Result m_result;
    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;
    MCS_TokenStatus m_tokenStatus;

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


//
// TRcf
//

class MCS_TRcf : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_TRcf, PASN_Sequence);
#endif
  public:
    MCS_TRcf(unsigned tag = 40, TagClass tagClass = ApplicationTagClass);

    MCS_Result m_result;
    MCS_UserId m_initiator;
    MCS_TokenId m_tokenId;
    MCS_TokenStatus m_tokenStatus;

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


//
// ChannelAttributes_private
//

class MCS_ChannelAttributes_private : public PASN_Sequence
{
#ifndef PASN_LEANANDMEAN
    PCLASSINFO(MCS_ChannelAttributes_private, PASN_Sequence);
#endif
  public:
    MCS_ChannelAttributes_private(unsigned tag = 2, TagClass tagClass = ContextSpecificTagClass);

    PASN_Boolean m_joined;
    MCS_PrivateChannelId m_channelId;
    MCS_UserId m_manager;
    MCS_ArrayOf_UserId m_admitted;

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

#endif // if ! H323_DISABLE_MCS


// End of mcspdu.h
