text: //
  // t38.h
  //
  // Code automatically generated by asnparse.
  //
  
  #include <opal_config.h>
  
  #if ! H323_DISABLE_T38
  
  #ifndef __T38_H
  #define __T38_H
  
  #ifdef P_USE_PRAGMA
  #pragma interface
  #endif
  
  #include <ptclib/asner.h>
  
  //
  // Type-of-msg
  //
  
  class T38_Type_of_msg_t30_indicator;
  class T38_Type_of_msg_data;
  
  class T38_Type_of_msg : public PASN_Choice
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_Type_of_msg, PASN_Choice);
  #endif
    public:
      T38_Type_of_msg(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
  
      enum Choices {
        e_t30_indicator,
        e_data
      };
  
  #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
      operator T38_Type_of_msg_t30_indicator &() const;
  #else
      operator T38_Type_of_msg_t30_indicator &();
      operator const T38_Type_of_msg_t30_indicator &() const;
  #endif
  #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
      operator T38_Type_of_msg_data &() const;
  #else
      operator T38_Type_of_msg_data &();
      operator const T38_Type_of_msg_data &() const;
  #endif
  
      PBoolean CreateObject();
      PObject * Clone() const;
  };
  
  
  //
  // Data-Field
  //
  
  class T38_Data_Field_subtype;
  
  class T38_Data_Field : public PASN_Array
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_Data_Field, PASN_Array);
  #endif
    public:
      T38_Data_Field(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      PASN_Object * CreateObject() const;
      T38_Data_Field_subtype & operator[](PINDEX i) const;
      PObject * Clone() const;
  };
  
  
  //
  // PreCorrigendum-Data-Field
  //
  
  class T38_PreCorrigendum_Data_Field_subtype;
  
  class T38_PreCorrigendum_Data_Field : public PASN_Array
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_PreCorrigendum_Data_Field, PASN_Array);
  #endif
    public:
      T38_PreCorrigendum_Data_Field(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      PASN_Object * CreateObject() const;
      T38_PreCorrigendum_Data_Field_subtype & operator[](PINDEX i) const;
      PObject * Clone() const;
  };
  
  
  //
  // Type-of-msg_t30-indicator
  //
  
  class T38_Type_of_msg_t30_indicator : public PASN_Enumeration
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_Type_of_msg_t30_indicator, PASN_Enumeration);
  #endif
    public:
      T38_Type_of_msg_t30_indicator(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
  
      enum Enumerations {
        e_no_signal,
        e_cng,
        e_ced,
        e_v21_preamble,
        e_v27_2400_training,
        e_v27_4800_training,
        e_v29_7200_training,
        e_v29_9600_training,
        e_v17_7200_short_training,
        e_v17_7200_long_training,
        e_v17_9600_short_training,
        e_v17_9600_long_training,
        e_v17_12000_short_training,
        e_v17_12000_long_training,
        e_v17_14400_short_training,
        e_v17_14400_long_training
      };
  
      T38_Type_of_msg_t30_indicator & operator=(unsigned v);
      PObject * Clone() const;
  };
  
  
  //
  // Type-of-msg_data
  //
  
  class T38_Type_of_msg_data : public PASN_Enumeration
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_Type_of_msg_data, PASN_Enumeration);
  #endif
    public:
      T38_Type_of_msg_data(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
  
      enum Enumerations {
        e_v21,
        e_v27_2400,
        e_v27_4800,
        e_v29_7200,
        e_v29_9600,
        e_v17_7200,
        e_v17_9600,
        e_v17_12000,
        e_v17_14400
      };
  
      T38_Type_of_msg_data & operator=(unsigned v);
      PObject * Clone() const;
  };
  
  
  //
  // UDPTLPacket_error-recovery
  //
  
  class T38_UDPTLPacket_error_recovery_secondary_ifp_packets;
  class T38_UDPTLPacket_error_recovery_fec_info;
  
  class T38_UDPTLPacket_error_recovery : public PASN_Choice
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_UDPTLPacket_error_recovery, PASN_Choice);
  #endif
    public:
      T38_UDPTLPacket_error_recovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
  
      enum Choices {
        e_secondary_ifp_packets,
        e_fec_info
      };
  
  #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
      operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const;
  #else
      operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &();
      operator const T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const;
  #endif
  #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
      operator T38_UDPTLPacket_error_recovery_fec_info &() const;
  #else
      operator T38_UDPTLPacket_error_recovery_fec_info &();
      operator const T38_UDPTLPacket_error_recovery_fec_info &() const;
  #endif
  
      PBoolean CreateObject();
      PObject * Clone() const;
  };
  
  
  //
  // Data-Field_subtype_field-type
  //
  
  class T38_Data_Field_subtype_field_type : public PASN_Enumeration
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_Data_Field_subtype_field_type, PASN_Enumeration);
  #endif
    public:
      T38_Data_Field_subtype_field_type(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
  
      enum Enumerations {
        e_hdlc_data,
        e_hdlc_sig_end,
        e_hdlc_fcs_OK,
        e_hdlc_fcs_BAD,
        e_hdlc_fcs_OK_sig_end,
        e_hdlc_fcs_BAD_sig_end,
        e_t4_non_ecm_data,
        e_t4_non_ecm_sig_end
      };
  
      T38_Data_Field_subtype_field_type & operator=(unsigned v);
      PObject * Clone() const;
  };
  
  
  //
  // PreCorrigendum-Data-Field_subtype_field-type
  //
  
  class T38_PreCorrigendum_Data_Field_subtype_field_type : public PASN_Enumeration
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_PreCorrigendum_Data_Field_subtype_field_type, PASN_Enumeration);
  #endif
    public:
      T38_PreCorrigendum_Data_Field_subtype_field_type(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
  
      enum Enumerations {
        e_hdlc_data,
        e_hdlc_sig_end,
        e_hdlc_fcs_OK,
        e_hdlc_fcs_BAD,
        e_hdlc_fcs_OK_sig_end,
        e_hdlc_fcs_BAD_sig_end,
        e_t4_non_ecm_data,
        e_t4_non_ecm_sig_end
      };
  
      T38_PreCorrigendum_Data_Field_subtype_field_type & operator=(unsigned v);
      PObject * Clone() const;
  };
  
  
  //
  // UDPTLPacket_error-recovery_secondary-ifp-packets
  //
  
  class T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype;
  
  class T38_UDPTLPacket_error_recovery_secondary_ifp_packets : public PASN_Array
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_UDPTLPacket_error_recovery_secondary_ifp_packets, PASN_Array);
  #endif
    public:
      T38_UDPTLPacket_error_recovery_secondary_ifp_packets(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      PASN_Object * CreateObject() const;
      T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype & operator[](PINDEX i) const;
      PObject * Clone() const;
  };
  
  
  //
  // ArrayOf_PASN_OctetString
  //
  
  class T38_ArrayOf_PASN_OctetString : public PASN_Array
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_ArrayOf_PASN_OctetString, PASN_Array);
  #endif
    public:
      T38_ArrayOf_PASN_OctetString(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      PASN_Object * CreateObject() const;
      PASN_OctetString & operator[](PINDEX i) const;
      PObject * Clone() const;
  };
  
  
  //
  // IFPPacket
  //
  
  class T38_IFPPacket : public PASN_Sequence
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_IFPPacket, PASN_Sequence);
  #endif
    public:
      T38_IFPPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      enum OptionalFields {
        e_data_field
      };
  
      T38_Type_of_msg m_type_of_msg;
      T38_Data_Field m_data_field;
  
      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;
  };
  
  
  //
  // PreCorrigendum-IFPPacket
  //
  
  class T38_PreCorrigendum_IFPPacket : public PASN_Sequence
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_PreCorrigendum_IFPPacket, PASN_Sequence);
  #endif
    public:
      T38_PreCorrigendum_IFPPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      enum OptionalFields {
        e_data_field
      };
  
      T38_Type_of_msg m_type_of_msg;
      T38_PreCorrigendum_Data_Field m_data_field;
  
      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;
  };
  
  
  //
  // Data-Field_subtype
  //
  
  class T38_Data_Field_subtype : public PASN_Sequence
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_Data_Field_subtype, PASN_Sequence);
  #endif
    public:
      T38_Data_Field_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      enum OptionalFields {
        e_field_data
      };
  
      T38_Data_Field_subtype_field_type m_field_type;
      PASN_OctetString m_field_data;
  
      PINDEX GetDataLength() const;
      PBoolean Decode(PASN_Stream & strm);
      void Encode(PASN_Stream & strm) const;
  #ifndef PASN_NOPRINTON
      void PrintOn(ostream & strm) const;
  #endif
      Comparison Compare(const PObject & obj) const;
      PObject * Clone() const;
  };
  
  
  //
  // PreCorrigendum-Data-Field_subtype
  //
  
  class T38_PreCorrigendum_Data_Field_subtype : public PASN_Sequence
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_PreCorrigendum_Data_Field_subtype, PASN_Sequence);
  #endif
    public:
      T38_PreCorrigendum_Data_Field_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      enum OptionalFields {
        e_field_data
      };
  
      T38_PreCorrigendum_Data_Field_subtype_field_type m_field_type;
      PASN_OctetString m_field_data;
  
      PINDEX GetDataLength() const;
      PBoolean Decode(PASN_Stream & strm);
      void Encode(PASN_Stream & strm) const;
  #ifndef PASN_NOPRINTON
      void PrintOn(ostream & strm) const;
  #endif
      Comparison Compare(const PObject & obj) const;
      PObject * Clone() const;
  };
  
  
  //
  // UDPTLPacket_primary-ifp-packet
  //
  
  class T38_UDPTLPacket_primary_ifp_packet : public PASN_OctetString
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_UDPTLPacket_primary_ifp_packet, PASN_OctetString);
  #endif
    public:
      T38_UDPTLPacket_primary_ifp_packet(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
  
      PBoolean DecodeSubType(T38_IFPPacket & obj) { return PASN_OctetString::DecodeSubType(obj); }
      void EncodeSubType(const T38_IFPPacket & obj) { PASN_OctetString::EncodeSubType(obj); } 
  
      PObject * Clone() const;
  };
  
  
  //
  // UDPTLPacket_error-recovery_fec-info
  //
  
  class T38_UDPTLPacket_error_recovery_fec_info : public PASN_Sequence
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_UDPTLPacket_error_recovery_fec_info, PASN_Sequence);
  #endif
    public:
      T38_UDPTLPacket_error_recovery_fec_info(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      PASN_Integer m_fec_npackets;
      T38_ArrayOf_PASN_OctetString m_fec_data;
  
      PINDEX GetDataLength() const;
      PBoolean Decode(PASN_Stream & strm);
      void Encode(PASN_Stream & strm) const;
  #ifndef PASN_NOPRINTON
      void PrintOn(ostream & strm) const;
  #endif
      Comparison Compare(const PObject & obj) const;
      PObject * Clone() const;
  };
  
  
  //
  // UDPTLPacket_error-recovery_secondary-ifp-packets_subtype
  //
  
  class T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype : public PASN_OctetString
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype, PASN_OctetString);
  #endif
    public:
      T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
  
      PBoolean DecodeSubType(T38_IFPPacket & obj) { return PASN_OctetString::DecodeSubType(obj); }
      void EncodeSubType(const T38_IFPPacket & obj) { PASN_OctetString::EncodeSubType(obj); } 
  
      PObject * Clone() const;
  };
  
  
  //
  // UDPTLPacket
  //
  
  class T38_UDPTLPacket : public PASN_Sequence
  {
  #ifndef PASN_LEANANDMEAN
      PCLASSINFO(T38_UDPTLPacket, PASN_Sequence);
  #endif
    public:
      T38_UDPTLPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
  
      PASN_Integer m_seq_number;
      T38_UDPTLPacket_primary_ifp_packet m_primary_ifp_packet;
      T38_UDPTLPacket_error_recovery m_error_recovery;
  
      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 // __T38_H
  
  #endif // if ! H323_DISABLE_T38
  
  
  // End of t38.h
  