00001
00002
00003
00004
00005
00006
00007 #include <opal/buildopts.h>
00008
00009 #if ! H323_DISABLE_T38
00010
00011 #ifndef __T38_H
00012 #define __T38_H
00013
00014 #ifdef P_USE_PRAGMA
00015 #pragma interface
00016 #endif
00017
00018 #include <ptclib/asner.h>
00019
00020
00021
00022
00023
00024 class T38_Type_of_msg_t30_indicator;
00025 class T38_Type_of_msg_data;
00026
00027 class T38_Type_of_msg : public PASN_Choice
00028 {
00029 #ifndef PASN_LEANANDMEAN
00030 PCLASSINFO(T38_Type_of_msg, PASN_Choice);
00031 #endif
00032 public:
00033 T38_Type_of_msg(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00034
00035 enum Choices {
00036 e_t30_indicator,
00037 e_data
00038 };
00039
00040 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00041 operator T38_Type_of_msg_t30_indicator &() const;
00042 #else
00043 operator T38_Type_of_msg_t30_indicator &();
00044 operator const T38_Type_of_msg_t30_indicator &() const;
00045 #endif
00046 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00047 operator T38_Type_of_msg_data &() const;
00048 #else
00049 operator T38_Type_of_msg_data &();
00050 operator const T38_Type_of_msg_data &() const;
00051 #endif
00052
00053 PBoolean CreateObject();
00054 PObject * Clone() const;
00055 };
00056
00057
00058
00059
00060
00061
00062 class T38_Data_Field_subtype;
00063
00064 class T38_Data_Field : public PASN_Array
00065 {
00066 #ifndef PASN_LEANANDMEAN
00067 PCLASSINFO(T38_Data_Field, PASN_Array);
00068 #endif
00069 public:
00070 T38_Data_Field(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00071
00072 PASN_Object * CreateObject() const;
00073 T38_Data_Field_subtype & operator[](PINDEX i) const;
00074 PObject * Clone() const;
00075 };
00076
00077
00078
00079
00080
00081
00082 class T38_PreCorrigendum_Data_Field_subtype;
00083
00084 class T38_PreCorrigendum_Data_Field : public PASN_Array
00085 {
00086 #ifndef PASN_LEANANDMEAN
00087 PCLASSINFO(T38_PreCorrigendum_Data_Field, PASN_Array);
00088 #endif
00089 public:
00090 T38_PreCorrigendum_Data_Field(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00091
00092 PASN_Object * CreateObject() const;
00093 T38_PreCorrigendum_Data_Field_subtype & operator[](PINDEX i) const;
00094 PObject * Clone() const;
00095 };
00096
00097
00098
00099
00100
00101
00102 class T38_Type_of_msg_t30_indicator : public PASN_Enumeration
00103 {
00104 #ifndef PASN_LEANANDMEAN
00105 PCLASSINFO(T38_Type_of_msg_t30_indicator, PASN_Enumeration);
00106 #endif
00107 public:
00108 T38_Type_of_msg_t30_indicator(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
00109
00110 enum Enumerations {
00111 e_no_signal,
00112 e_cng,
00113 e_ced,
00114 e_v21_preamble,
00115 e_v27_2400_training,
00116 e_v27_4800_training,
00117 e_v29_7200_training,
00118 e_v29_9600_training,
00119 e_v17_7200_short_training,
00120 e_v17_7200_long_training,
00121 e_v17_9600_short_training,
00122 e_v17_9600_long_training,
00123 e_v17_12000_short_training,
00124 e_v17_12000_long_training,
00125 e_v17_14400_short_training,
00126 e_v17_14400_long_training
00127 };
00128
00129 T38_Type_of_msg_t30_indicator & operator=(unsigned v);
00130 PObject * Clone() const;
00131 };
00132
00133
00134
00135
00136
00137
00138 class T38_Type_of_msg_data : public PASN_Enumeration
00139 {
00140 #ifndef PASN_LEANANDMEAN
00141 PCLASSINFO(T38_Type_of_msg_data, PASN_Enumeration);
00142 #endif
00143 public:
00144 T38_Type_of_msg_data(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
00145
00146 enum Enumerations {
00147 e_v21,
00148 e_v27_2400,
00149 e_v27_4800,
00150 e_v29_7200,
00151 e_v29_9600,
00152 e_v17_7200,
00153 e_v17_9600,
00154 e_v17_12000,
00155 e_v17_14400
00156 };
00157
00158 T38_Type_of_msg_data & operator=(unsigned v);
00159 PObject * Clone() const;
00160 };
00161
00162
00163
00164
00165
00166
00167 class T38_UDPTLPacket_error_recovery_secondary_ifp_packets;
00168 class T38_UDPTLPacket_error_recovery_fec_info;
00169
00170 class T38_UDPTLPacket_error_recovery : public PASN_Choice
00171 {
00172 #ifndef PASN_LEANANDMEAN
00173 PCLASSINFO(T38_UDPTLPacket_error_recovery, PASN_Choice);
00174 #endif
00175 public:
00176 T38_UDPTLPacket_error_recovery(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00177
00178 enum Choices {
00179 e_secondary_ifp_packets,
00180 e_fec_info
00181 };
00182
00183 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00184 operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const;
00185 #else
00186 operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets &();
00187 operator const T38_UDPTLPacket_error_recovery_secondary_ifp_packets &() const;
00188 #endif
00189 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
00190 operator T38_UDPTLPacket_error_recovery_fec_info &() const;
00191 #else
00192 operator T38_UDPTLPacket_error_recovery_fec_info &();
00193 operator const T38_UDPTLPacket_error_recovery_fec_info &() const;
00194 #endif
00195
00196 PBoolean CreateObject();
00197 PObject * Clone() const;
00198 };
00199
00200
00201
00202
00203
00204
00205 class T38_Data_Field_subtype_field_type : public PASN_Enumeration
00206 {
00207 #ifndef PASN_LEANANDMEAN
00208 PCLASSINFO(T38_Data_Field_subtype_field_type, PASN_Enumeration);
00209 #endif
00210 public:
00211 T38_Data_Field_subtype_field_type(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
00212
00213 enum Enumerations {
00214 e_hdlc_data,
00215 e_hdlc_sig_end,
00216 e_hdlc_fcs_OK,
00217 e_hdlc_fcs_BAD,
00218 e_hdlc_fcs_OK_sig_end,
00219 e_hdlc_fcs_BAD_sig_end,
00220 e_t4_non_ecm_data,
00221 e_t4_non_ecm_sig_end
00222 };
00223
00224 T38_Data_Field_subtype_field_type & operator=(unsigned v);
00225 PObject * Clone() const;
00226 };
00227
00228
00229
00230
00231
00232
00233 class T38_PreCorrigendum_Data_Field_subtype_field_type : public PASN_Enumeration
00234 {
00235 #ifndef PASN_LEANANDMEAN
00236 PCLASSINFO(T38_PreCorrigendum_Data_Field_subtype_field_type, PASN_Enumeration);
00237 #endif
00238 public:
00239 T38_PreCorrigendum_Data_Field_subtype_field_type(unsigned tag = UniversalEnumeration, TagClass tagClass = UniversalTagClass);
00240
00241 enum Enumerations {
00242 e_hdlc_data,
00243 e_hdlc_sig_end,
00244 e_hdlc_fcs_OK,
00245 e_hdlc_fcs_BAD,
00246 e_hdlc_fcs_OK_sig_end,
00247 e_hdlc_fcs_BAD_sig_end,
00248 e_t4_non_ecm_data,
00249 e_t4_non_ecm_sig_end
00250 };
00251
00252 T38_PreCorrigendum_Data_Field_subtype_field_type & operator=(unsigned v);
00253 PObject * Clone() const;
00254 };
00255
00256
00257
00258
00259
00260
00261 class T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype;
00262
00263 class T38_UDPTLPacket_error_recovery_secondary_ifp_packets : public PASN_Array
00264 {
00265 #ifndef PASN_LEANANDMEAN
00266 PCLASSINFO(T38_UDPTLPacket_error_recovery_secondary_ifp_packets, PASN_Array);
00267 #endif
00268 public:
00269 T38_UDPTLPacket_error_recovery_secondary_ifp_packets(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00270
00271 PASN_Object * CreateObject() const;
00272 T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype & operator[](PINDEX i) const;
00273 PObject * Clone() const;
00274 };
00275
00276
00277
00278
00279
00280
00281 class T38_ArrayOf_PASN_OctetString : public PASN_Array
00282 {
00283 #ifndef PASN_LEANANDMEAN
00284 PCLASSINFO(T38_ArrayOf_PASN_OctetString, PASN_Array);
00285 #endif
00286 public:
00287 T38_ArrayOf_PASN_OctetString(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00288
00289 PASN_Object * CreateObject() const;
00290 PASN_OctetString & operator[](PINDEX i) const;
00291 PObject * Clone() const;
00292 };
00293
00294
00295
00296
00297
00298
00299 class T38_IFPPacket : public PASN_Sequence
00300 {
00301 #ifndef PASN_LEANANDMEAN
00302 PCLASSINFO(T38_IFPPacket, PASN_Sequence);
00303 #endif
00304 public:
00305 T38_IFPPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00306
00307 enum OptionalFields {
00308 e_data_field
00309 };
00310
00311 T38_Type_of_msg m_type_of_msg;
00312 T38_Data_Field m_data_field;
00313
00314 PINDEX GetDataLength() const;
00315 PBoolean Decode(PASN_Stream & strm);
00316 void Encode(PASN_Stream & strm) const;
00317 #ifndef PASN_NOPRINTON
00318 void PrintOn(ostream & strm) const;
00319 #endif
00320 Comparison Compare(const PObject & obj) const;
00321 PObject * Clone() const;
00322 };
00323
00324
00325
00326
00327
00328
00329 class T38_PreCorrigendum_IFPPacket : public PASN_Sequence
00330 {
00331 #ifndef PASN_LEANANDMEAN
00332 PCLASSINFO(T38_PreCorrigendum_IFPPacket, PASN_Sequence);
00333 #endif
00334 public:
00335 T38_PreCorrigendum_IFPPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00336
00337 enum OptionalFields {
00338 e_data_field
00339 };
00340
00341 T38_Type_of_msg m_type_of_msg;
00342 T38_PreCorrigendum_Data_Field m_data_field;
00343
00344 PINDEX GetDataLength() const;
00345 PBoolean Decode(PASN_Stream & strm);
00346 void Encode(PASN_Stream & strm) const;
00347 #ifndef PASN_NOPRINTON
00348 void PrintOn(ostream & strm) const;
00349 #endif
00350 Comparison Compare(const PObject & obj) const;
00351 PObject * Clone() const;
00352 };
00353
00354
00355
00356
00357
00358
00359 class T38_Data_Field_subtype : public PASN_Sequence
00360 {
00361 #ifndef PASN_LEANANDMEAN
00362 PCLASSINFO(T38_Data_Field_subtype, PASN_Sequence);
00363 #endif
00364 public:
00365 T38_Data_Field_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00366
00367 enum OptionalFields {
00368 e_field_data
00369 };
00370
00371 T38_Data_Field_subtype_field_type m_field_type;
00372 PASN_OctetString m_field_data;
00373
00374 PINDEX GetDataLength() const;
00375 PBoolean Decode(PASN_Stream & strm);
00376 void Encode(PASN_Stream & strm) const;
00377 #ifndef PASN_NOPRINTON
00378 void PrintOn(ostream & strm) const;
00379 #endif
00380 Comparison Compare(const PObject & obj) const;
00381 PObject * Clone() const;
00382 };
00383
00384
00385
00386
00387
00388
00389 class T38_PreCorrigendum_Data_Field_subtype : public PASN_Sequence
00390 {
00391 #ifndef PASN_LEANANDMEAN
00392 PCLASSINFO(T38_PreCorrigendum_Data_Field_subtype, PASN_Sequence);
00393 #endif
00394 public:
00395 T38_PreCorrigendum_Data_Field_subtype(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00396
00397 enum OptionalFields {
00398 e_field_data
00399 };
00400
00401 T38_PreCorrigendum_Data_Field_subtype_field_type m_field_type;
00402 PASN_OctetString m_field_data;
00403
00404 PINDEX GetDataLength() const;
00405 PBoolean Decode(PASN_Stream & strm);
00406 void Encode(PASN_Stream & strm) const;
00407 #ifndef PASN_NOPRINTON
00408 void PrintOn(ostream & strm) const;
00409 #endif
00410 Comparison Compare(const PObject & obj) const;
00411 PObject * Clone() const;
00412 };
00413
00414
00415
00416
00417
00418
00419 class T38_UDPTLPacket_primary_ifp_packet : public PASN_OctetString
00420 {
00421 #ifndef PASN_LEANANDMEAN
00422 PCLASSINFO(T38_UDPTLPacket_primary_ifp_packet, PASN_OctetString);
00423 #endif
00424 public:
00425 T38_UDPTLPacket_primary_ifp_packet(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00426
00427 PBoolean DecodeSubType(T38_IFPPacket & obj) { return PASN_OctetString::DecodeSubType(obj); }
00428 void EncodeSubType(const T38_IFPPacket & obj) { PASN_OctetString::EncodeSubType(obj); }
00429
00430 PObject * Clone() const;
00431 };
00432
00433
00434
00435
00436
00437
00438 class T38_UDPTLPacket_error_recovery_fec_info : public PASN_Sequence
00439 {
00440 #ifndef PASN_LEANANDMEAN
00441 PCLASSINFO(T38_UDPTLPacket_error_recovery_fec_info, PASN_Sequence);
00442 #endif
00443 public:
00444 T38_UDPTLPacket_error_recovery_fec_info(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00445
00446 PASN_Integer m_fec_npackets;
00447 T38_ArrayOf_PASN_OctetString m_fec_data;
00448
00449 PINDEX GetDataLength() const;
00450 PBoolean Decode(PASN_Stream & strm);
00451 void Encode(PASN_Stream & strm) const;
00452 #ifndef PASN_NOPRINTON
00453 void PrintOn(ostream & strm) const;
00454 #endif
00455 Comparison Compare(const PObject & obj) const;
00456 PObject * Clone() const;
00457 };
00458
00459
00460
00461
00462
00463
00464 class T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype : public PASN_OctetString
00465 {
00466 #ifndef PASN_LEANANDMEAN
00467 PCLASSINFO(T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype, PASN_OctetString);
00468 #endif
00469 public:
00470 T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype(unsigned tag = 0, TagClass tagClass = UniversalTagClass);
00471
00472 PBoolean DecodeSubType(T38_IFPPacket & obj) { return PASN_OctetString::DecodeSubType(obj); }
00473 void EncodeSubType(const T38_IFPPacket & obj) { PASN_OctetString::EncodeSubType(obj); }
00474
00475 PObject * Clone() const;
00476 };
00477
00478
00479
00480
00481
00482
00483 class T38_UDPTLPacket : public PASN_Sequence
00484 {
00485 #ifndef PASN_LEANANDMEAN
00486 PCLASSINFO(T38_UDPTLPacket, PASN_Sequence);
00487 #endif
00488 public:
00489 T38_UDPTLPacket(unsigned tag = UniversalSequence, TagClass tagClass = UniversalTagClass);
00490
00491 PASN_Integer m_seq_number;
00492 T38_UDPTLPacket_primary_ifp_packet m_primary_ifp_packet;
00493 T38_UDPTLPacket_error_recovery m_error_recovery;
00494
00495 PINDEX GetDataLength() const;
00496 PBoolean Decode(PASN_Stream & strm);
00497 void Encode(PASN_Stream & strm) const;
00498 #ifndef PASN_NOPRINTON
00499 void PrintOn(ostream & strm) const;
00500 #endif
00501 Comparison Compare(const PObject & obj) const;
00502 PObject * Clone() const;
00503 };
00504
00505
00506 #endif // __T38_H
00507
00508 #endif // if ! H323_DISABLE_T38
00509
00510
00511