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

#if ! H323_DISABLE_H4604

#ifndef __H4604_H
#define __H4604_H

#ifdef P_USE_PRAGMA
#pragma interface
#endif

#include <ptclib/asner.h>

#include "h235.h"


//
// CallPriorityInfo_priorityValue
//

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

    enum Choices {
      e_emergencyAuthorized,
      e_emergencyPublic,
      e_high,
      e_normal
    };

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


//
// ArrayOf_ClearToken
//

class H235_ClearToken;

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

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


//
// ArrayOf_CryptoToken
//

class H235_CryptoToken;

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

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


//
// CallPriorityInfo_rejectReason
//

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

    enum Choices {
      e_priorityUnavailable,
      e_priorityUnauthorized,
      e_priorityValueUnknown
    };

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


//
// CountryInternationalNetworkCallOriginationIdentification_numberingPlan
//

class h4604_CountryInternationalNetworkCallOriginationIdentification_numberingPlan_x121;
class h4604_CountryInternationalNetworkCallOriginationIdentification_numberingPlan_e164;

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

    enum Choices {
      e_x121,
      e_e164
    };

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

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


//
// CountryInternationalNetworkCallOriginationIdentification_numberingPlan_x121
//

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

    PASN_IA5String m_countryCode;

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


//
// CountryInternationalNetworkCallOriginationIdentification_numberingPlan_e164
//

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

    PASN_IA5String m_countryCode;
    PASN_IA5String m_identificationCode;

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


//
// CallPriorityInfo
//

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

    enum OptionalFields {
      e_priorityExtension,
      e_tokens,
      e_cryptoTokens,
      e_rejectReason
    };

    h4604_CallPriorityInfo_priorityValue m_priorityValue;
    PASN_Integer m_priorityExtension;
    h4604_ArrayOf_ClearToken m_tokens;
    h4604_ArrayOf_CryptoToken m_cryptoTokens;
    h4604_CallPriorityInfo_rejectReason m_rejectReason;

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


//
// CountryInternationalNetworkCallOriginationIdentification
//

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

    h4604_CountryInternationalNetworkCallOriginationIdentification_numberingPlan m_numberingPlan;

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


#endif // __H4604_H

#endif // if ! H323_DISABLE_H4604


// End of h4604.h
