4 // Code automatically generated by asnparse.
8 #pragma implementation "t38.h"
17 #if ! H323_DISABLE_T38
20 #ifndef PASN_NOPRINTON
21 const static PASN_Names Names_T38_Type_of_msg
[]={
30 T38_Type_of_msg::T38_Type_of_msg(unsigned tag
, PASN_Object::TagClass tagClass
)
31 : PASN_Choice(tag
, tagClass
, 2, FALSE
32 #ifndef PASN_NOPRINTON
33 ,(const PASN_Names
*)Names_T38_Type_of_msg
,2
40 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
41 T38_Type_of_msg::operator T38_Type_of_msg_t30_indicator
&() const
43 T38_Type_of_msg::operator T38_Type_of_msg_t30_indicator
&()
45 #ifndef PASN_LEANANDMEAN
46 PAssert(PIsDescendant(PAssertNULL(choice
), T38_Type_of_msg_t30_indicator
), PInvalidCast
);
48 return *(T38_Type_of_msg_t30_indicator
*)choice
;
52 T38_Type_of_msg::operator const T38_Type_of_msg_t30_indicator
&() const
55 #ifndef PASN_LEANANDMEAN
56 PAssert(PIsDescendant(PAssertNULL(choice
), T38_Type_of_msg_t30_indicator
), PInvalidCast
);
58 return *(T38_Type_of_msg_t30_indicator
*)choice
;
62 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
63 T38_Type_of_msg::operator T38_Type_of_msg_data
&() const
65 T38_Type_of_msg::operator T38_Type_of_msg_data
&()
67 #ifndef PASN_LEANANDMEAN
68 PAssert(PIsDescendant(PAssertNULL(choice
), T38_Type_of_msg_data
), PInvalidCast
);
70 return *(T38_Type_of_msg_data
*)choice
;
74 T38_Type_of_msg::operator const T38_Type_of_msg_data
&() const
77 #ifndef PASN_LEANANDMEAN
78 PAssert(PIsDescendant(PAssertNULL(choice
), T38_Type_of_msg_data
), PInvalidCast
);
80 return *(T38_Type_of_msg_data
*)choice
;
84 BOOL
T38_Type_of_msg::CreateObject()
87 case e_t30_indicator
:
88 choice
= new T38_Type_of_msg_t30_indicator();
91 choice
= new T38_Type_of_msg_data();
100 PObject
* T38_Type_of_msg::Clone() const
102 #ifndef PASN_LEANANDMEAN
103 PAssert(IsClass(T38_Type_of_msg::Class()), PInvalidCast
);
105 return new T38_Type_of_msg(*this);
113 T38_Data_Field::T38_Data_Field(unsigned tag
, PASN_Object::TagClass tagClass
)
114 : PASN_Array(tag
, tagClass
)
119 PASN_Object
* T38_Data_Field::CreateObject() const
121 return new T38_Data_Field_subtype
;
125 T38_Data_Field_subtype
& T38_Data_Field::operator[](PINDEX i
) const
127 return (T38_Data_Field_subtype
&)array
[i
];
131 PObject
* T38_Data_Field::Clone() const
133 #ifndef PASN_LEANANDMEAN
134 PAssert(IsClass(T38_Data_Field::Class()), PInvalidCast
);
136 return new T38_Data_Field(*this);
141 // PreCorrigendum-Data-Field
144 T38_PreCorrigendum_Data_Field::T38_PreCorrigendum_Data_Field(unsigned tag
, PASN_Object::TagClass tagClass
)
145 : PASN_Array(tag
, tagClass
)
150 PASN_Object
* T38_PreCorrigendum_Data_Field::CreateObject() const
152 return new T38_PreCorrigendum_Data_Field_subtype
;
156 T38_PreCorrigendum_Data_Field_subtype
& T38_PreCorrigendum_Data_Field::operator[](PINDEX i
) const
158 return (T38_PreCorrigendum_Data_Field_subtype
&)array
[i
];
162 PObject
* T38_PreCorrigendum_Data_Field::Clone() const
164 #ifndef PASN_LEANANDMEAN
165 PAssert(IsClass(T38_PreCorrigendum_Data_Field::Class()), PInvalidCast
);
167 return new T38_PreCorrigendum_Data_Field(*this);
171 #ifndef PASN_NOPRINTON
172 const static PASN_Names Names_T38_Type_of_msg_t30_indicator
[]={
177 ,{"v27-2400-training",4}
178 ,{"v27-4800-training",5}
179 ,{"v29-7200-training",6}
180 ,{"v29-9600-training",7}
181 ,{"v17-7200-short-training",8}
182 ,{"v17-7200-long-training",9}
183 ,{"v17-9600-short-training",10}
184 ,{"v17-9600-long-training",11}
185 ,{"v17-12000-short-training",12}
186 ,{"v17-12000-long-training",13}
187 ,{"v17-14400-short-training",14}
188 ,{"v17-14400-long-training",15}
192 // Type-of-msg_t30-indicator
195 T38_Type_of_msg_t30_indicator::T38_Type_of_msg_t30_indicator(unsigned tag
, PASN_Object::TagClass tagClass
)
196 : PASN_Enumeration(tag
, tagClass
, 15, TRUE
197 #ifndef PASN_NOPRINTON
198 ,(const PASN_Names
*)Names_T38_Type_of_msg_t30_indicator
,16
205 T38_Type_of_msg_t30_indicator
& T38_Type_of_msg_t30_indicator::operator=(unsigned v
)
212 PObject
* T38_Type_of_msg_t30_indicator::Clone() const
214 #ifndef PASN_LEANANDMEAN
215 PAssert(IsClass(T38_Type_of_msg_t30_indicator::Class()), PInvalidCast
);
217 return new T38_Type_of_msg_t30_indicator(*this);
221 #ifndef PASN_NOPRINTON
222 const static PASN_Names Names_T38_Type_of_msg_data
[]={
238 T38_Type_of_msg_data::T38_Type_of_msg_data(unsigned tag
, PASN_Object::TagClass tagClass
)
239 : PASN_Enumeration(tag
, tagClass
, 8, TRUE
240 #ifndef PASN_NOPRINTON
241 ,(const PASN_Names
*)Names_T38_Type_of_msg_data
,9
248 T38_Type_of_msg_data
& T38_Type_of_msg_data::operator=(unsigned v
)
255 PObject
* T38_Type_of_msg_data::Clone() const
257 #ifndef PASN_LEANANDMEAN
258 PAssert(IsClass(T38_Type_of_msg_data::Class()), PInvalidCast
);
260 return new T38_Type_of_msg_data(*this);
265 #ifndef PASN_NOPRINTON
266 const static PASN_Names Names_T38_UDPTLPacket_error_recovery
[]={
267 {"secondary_ifp_packets",0}
272 // UDPTLPacket_error-recovery
275 T38_UDPTLPacket_error_recovery::T38_UDPTLPacket_error_recovery(unsigned tag
, PASN_Object::TagClass tagClass
)
276 : PASN_Choice(tag
, tagClass
, 2, FALSE
277 #ifndef PASN_NOPRINTON
278 ,(const PASN_Names
*)Names_T38_UDPTLPacket_error_recovery
,2
285 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
286 T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets
&() const
288 T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_secondary_ifp_packets
&()
290 #ifndef PASN_LEANANDMEAN
291 PAssert(PIsDescendant(PAssertNULL(choice
), T38_UDPTLPacket_error_recovery_secondary_ifp_packets
), PInvalidCast
);
293 return *(T38_UDPTLPacket_error_recovery_secondary_ifp_packets
*)choice
;
297 T38_UDPTLPacket_error_recovery::operator const T38_UDPTLPacket_error_recovery_secondary_ifp_packets
&() const
300 #ifndef PASN_LEANANDMEAN
301 PAssert(PIsDescendant(PAssertNULL(choice
), T38_UDPTLPacket_error_recovery_secondary_ifp_packets
), PInvalidCast
);
303 return *(T38_UDPTLPacket_error_recovery_secondary_ifp_packets
*)choice
;
307 #if defined(__GNUC__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 9
308 T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_fec_info
&() const
310 T38_UDPTLPacket_error_recovery::operator T38_UDPTLPacket_error_recovery_fec_info
&()
312 #ifndef PASN_LEANANDMEAN
313 PAssert(PIsDescendant(PAssertNULL(choice
), T38_UDPTLPacket_error_recovery_fec_info
), PInvalidCast
);
315 return *(T38_UDPTLPacket_error_recovery_fec_info
*)choice
;
319 T38_UDPTLPacket_error_recovery::operator const T38_UDPTLPacket_error_recovery_fec_info
&() const
322 #ifndef PASN_LEANANDMEAN
323 PAssert(PIsDescendant(PAssertNULL(choice
), T38_UDPTLPacket_error_recovery_fec_info
), PInvalidCast
);
325 return *(T38_UDPTLPacket_error_recovery_fec_info
*)choice
;
329 BOOL
T38_UDPTLPacket_error_recovery::CreateObject()
332 case e_secondary_ifp_packets
:
333 choice
= new T38_UDPTLPacket_error_recovery_secondary_ifp_packets();
336 choice
= new T38_UDPTLPacket_error_recovery_fec_info();
345 PObject
* T38_UDPTLPacket_error_recovery::Clone() const
347 #ifndef PASN_LEANANDMEAN
348 PAssert(IsClass(T38_UDPTLPacket_error_recovery::Class()), PInvalidCast
);
350 return new T38_UDPTLPacket_error_recovery(*this);
354 #ifndef PASN_NOPRINTON
355 const static PASN_Names Names_T38_Data_Field_subtype_field_type
[]={
360 ,{"hdlc-fcs-OK-sig-end",4}
361 ,{"hdlc-fcs-BAD-sig-end",5}
362 ,{"t4-non-ecm-data",6}
363 ,{"t4-non-ecm-sig-end",7}
367 // Data-Field_subtype_field-type
370 T38_Data_Field_subtype_field_type::T38_Data_Field_subtype_field_type(unsigned tag
, PASN_Object::TagClass tagClass
)
371 : PASN_Enumeration(tag
, tagClass
, 7, TRUE
372 #ifndef PASN_NOPRINTON
373 ,(const PASN_Names
*)Names_T38_Data_Field_subtype_field_type
,8
380 T38_Data_Field_subtype_field_type
& T38_Data_Field_subtype_field_type::operator=(unsigned v
)
387 PObject
* T38_Data_Field_subtype_field_type::Clone() const
389 #ifndef PASN_LEANANDMEAN
390 PAssert(IsClass(T38_Data_Field_subtype_field_type::Class()), PInvalidCast
);
392 return new T38_Data_Field_subtype_field_type(*this);
396 #ifndef PASN_NOPRINTON
397 const static PASN_Names Names_T38_PreCorrigendum_Data_Field_subtype_field_type
[]={
402 ,{"hdlc-fcs-OK-sig-end",4}
403 ,{"hdlc-fcs-BAD-sig-end",5}
404 ,{"t4-non-ecm-data",6}
405 ,{"t4-non-ecm-sig-end",7}
409 // PreCorrigendum-Data-Field_subtype_field-type
412 T38_PreCorrigendum_Data_Field_subtype_field_type::T38_PreCorrigendum_Data_Field_subtype_field_type(unsigned tag
, PASN_Object::TagClass tagClass
)
413 : PASN_Enumeration(tag
, tagClass
, 7, FALSE
414 #ifndef PASN_NOPRINTON
415 ,(const PASN_Names
*)Names_T38_PreCorrigendum_Data_Field_subtype_field_type
,8
422 T38_PreCorrigendum_Data_Field_subtype_field_type
& T38_PreCorrigendum_Data_Field_subtype_field_type::operator=(unsigned v
)
429 PObject
* T38_PreCorrigendum_Data_Field_subtype_field_type::Clone() const
431 #ifndef PASN_LEANANDMEAN
432 PAssert(IsClass(T38_PreCorrigendum_Data_Field_subtype_field_type::Class()), PInvalidCast
);
434 return new T38_PreCorrigendum_Data_Field_subtype_field_type(*this);
439 // UDPTLPacket_error-recovery_secondary-ifp-packets
442 T38_UDPTLPacket_error_recovery_secondary_ifp_packets::T38_UDPTLPacket_error_recovery_secondary_ifp_packets(unsigned tag
, PASN_Object::TagClass tagClass
)
443 : PASN_Array(tag
, tagClass
)
448 PASN_Object
* T38_UDPTLPacket_error_recovery_secondary_ifp_packets::CreateObject() const
450 return new T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype
;
454 T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype
& T38_UDPTLPacket_error_recovery_secondary_ifp_packets::operator[](PINDEX i
) const
456 return (T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype
&)array
[i
];
460 PObject
* T38_UDPTLPacket_error_recovery_secondary_ifp_packets::Clone() const
462 #ifndef PASN_LEANANDMEAN
463 PAssert(IsClass(T38_UDPTLPacket_error_recovery_secondary_ifp_packets::Class()), PInvalidCast
);
465 return new T38_UDPTLPacket_error_recovery_secondary_ifp_packets(*this);
470 // ArrayOf_PASN_OctetString
473 T38_ArrayOf_PASN_OctetString::T38_ArrayOf_PASN_OctetString(unsigned tag
, PASN_Object::TagClass tagClass
)
474 : PASN_Array(tag
, tagClass
)
479 PASN_Object
* T38_ArrayOf_PASN_OctetString::CreateObject() const
481 return new PASN_OctetString
;
485 PASN_OctetString
& T38_ArrayOf_PASN_OctetString::operator[](PINDEX i
) const
487 return (PASN_OctetString
&)array
[i
];
491 PObject
* T38_ArrayOf_PASN_OctetString::Clone() const
493 #ifndef PASN_LEANANDMEAN
494 PAssert(IsClass(T38_ArrayOf_PASN_OctetString::Class()), PInvalidCast
);
496 return new T38_ArrayOf_PASN_OctetString(*this);
504 T38_IFPPacket::T38_IFPPacket(unsigned tag
, PASN_Object::TagClass tagClass
)
505 : PASN_Sequence(tag
, tagClass
, 1, FALSE
, 0)
510 #ifndef PASN_NOPRINTON
511 void T38_IFPPacket::PrintOn(ostream
& strm
) const
513 int indent
= strm
.precision() + 2;
515 strm
<< setw(indent
+14) << "type_of_msg = " << setprecision(indent
) << m_type_of_msg
<< '\n';
516 if (HasOptionalField(e_data_field
))
517 strm
<< setw(indent
+13) << "data_field = " << setprecision(indent
) << m_data_field
<< '\n';
518 strm
<< setw(indent
-1) << setprecision(indent
-2) << "}";
523 PObject::Comparison
T38_IFPPacket::Compare(const PObject
& obj
) const
525 #ifndef PASN_LEANANDMEAN
526 PAssert(PIsDescendant(&obj
, T38_IFPPacket
), PInvalidCast
);
528 const T38_IFPPacket
& other
= (const T38_IFPPacket
&)obj
;
532 if ((result
= m_type_of_msg
.Compare(other
.m_type_of_msg
)) != EqualTo
)
534 if ((result
= m_data_field
.Compare(other
.m_data_field
)) != EqualTo
)
537 return PASN_Sequence::Compare(other
);
541 PINDEX
T38_IFPPacket::GetDataLength() const
544 length
+= m_type_of_msg
.GetObjectLength();
545 if (HasOptionalField(e_data_field
))
546 length
+= m_data_field
.GetObjectLength();
551 BOOL
T38_IFPPacket::Decode(PASN_Stream
& strm
)
553 if (!PreambleDecode(strm
))
556 if (!m_type_of_msg
.Decode(strm
))
558 if (HasOptionalField(e_data_field
) && !m_data_field
.Decode(strm
))
561 return UnknownExtensionsDecode(strm
);
565 void T38_IFPPacket::Encode(PASN_Stream
& strm
) const
567 PreambleEncode(strm
);
569 m_type_of_msg
.Encode(strm
);
570 if (HasOptionalField(e_data_field
))
571 m_data_field
.Encode(strm
);
573 UnknownExtensionsEncode(strm
);
577 PObject
* T38_IFPPacket::Clone() const
579 #ifndef PASN_LEANANDMEAN
580 PAssert(IsClass(T38_IFPPacket::Class()), PInvalidCast
);
582 return new T38_IFPPacket(*this);
587 // PreCorrigendum-IFPPacket
590 T38_PreCorrigendum_IFPPacket::T38_PreCorrigendum_IFPPacket(unsigned tag
, PASN_Object::TagClass tagClass
)
591 : PASN_Sequence(tag
, tagClass
, 1, FALSE
, 0)
596 #ifndef PASN_NOPRINTON
597 void T38_PreCorrigendum_IFPPacket::PrintOn(ostream
& strm
) const
599 int indent
= strm
.precision() + 2;
601 strm
<< setw(indent
+14) << "type_of_msg = " << setprecision(indent
) << m_type_of_msg
<< '\n';
602 if (HasOptionalField(e_data_field
))
603 strm
<< setw(indent
+13) << "data_field = " << setprecision(indent
) << m_data_field
<< '\n';
604 strm
<< setw(indent
-1) << setprecision(indent
-2) << "}";
609 PObject::Comparison
T38_PreCorrigendum_IFPPacket::Compare(const PObject
& obj
) const
611 #ifndef PASN_LEANANDMEAN
612 PAssert(PIsDescendant(&obj
, T38_PreCorrigendum_IFPPacket
), PInvalidCast
);
614 const T38_PreCorrigendum_IFPPacket
& other
= (const T38_PreCorrigendum_IFPPacket
&)obj
;
618 if ((result
= m_type_of_msg
.Compare(other
.m_type_of_msg
)) != EqualTo
)
620 if ((result
= m_data_field
.Compare(other
.m_data_field
)) != EqualTo
)
623 return PASN_Sequence::Compare(other
);
627 PINDEX
T38_PreCorrigendum_IFPPacket::GetDataLength() const
630 length
+= m_type_of_msg
.GetObjectLength();
631 if (HasOptionalField(e_data_field
))
632 length
+= m_data_field
.GetObjectLength();
637 BOOL
T38_PreCorrigendum_IFPPacket::Decode(PASN_Stream
& strm
)
639 if (!PreambleDecode(strm
))
642 if (!m_type_of_msg
.Decode(strm
))
644 if (HasOptionalField(e_data_field
) && !m_data_field
.Decode(strm
))
647 return UnknownExtensionsDecode(strm
);
651 void T38_PreCorrigendum_IFPPacket::Encode(PASN_Stream
& strm
) const
653 PreambleEncode(strm
);
655 m_type_of_msg
.Encode(strm
);
656 if (HasOptionalField(e_data_field
))
657 m_data_field
.Encode(strm
);
659 UnknownExtensionsEncode(strm
);
663 PObject
* T38_PreCorrigendum_IFPPacket::Clone() const
665 #ifndef PASN_LEANANDMEAN
666 PAssert(IsClass(T38_PreCorrigendum_IFPPacket::Class()), PInvalidCast
);
668 return new T38_PreCorrigendum_IFPPacket(*this);
673 // Data-Field_subtype
676 T38_Data_Field_subtype::T38_Data_Field_subtype(unsigned tag
, PASN_Object::TagClass tagClass
)
677 : PASN_Sequence(tag
, tagClass
, 1, FALSE
, 0)
679 m_field_data
.SetConstraints(PASN_Object::FixedConstraint
, 1, 65535);
683 #ifndef PASN_NOPRINTON
684 void T38_Data_Field_subtype::PrintOn(ostream
& strm
) const
686 int indent
= strm
.precision() + 2;
688 strm
<< setw(indent
+13) << "field_type = " << setprecision(indent
) << m_field_type
<< '\n';
689 if (HasOptionalField(e_field_data
))
690 strm
<< setw(indent
+13) << "field_data = " << setprecision(indent
) << m_field_data
<< '\n';
691 strm
<< setw(indent
-1) << setprecision(indent
-2) << "}";
696 PObject::Comparison
T38_Data_Field_subtype::Compare(const PObject
& obj
) const
698 #ifndef PASN_LEANANDMEAN
699 PAssert(PIsDescendant(&obj
, T38_Data_Field_subtype
), PInvalidCast
);
701 const T38_Data_Field_subtype
& other
= (const T38_Data_Field_subtype
&)obj
;
705 if ((result
= m_field_type
.Compare(other
.m_field_type
)) != EqualTo
)
707 if ((result
= m_field_data
.Compare(other
.m_field_data
)) != EqualTo
)
710 return PASN_Sequence::Compare(other
);
714 PINDEX
T38_Data_Field_subtype::GetDataLength() const
717 length
+= m_field_type
.GetObjectLength();
718 if (HasOptionalField(e_field_data
))
719 length
+= m_field_data
.GetObjectLength();
724 BOOL
T38_Data_Field_subtype::Decode(PASN_Stream
& strm
)
726 if (!PreambleDecode(strm
))
729 if (!m_field_type
.Decode(strm
))
731 if (HasOptionalField(e_field_data
) && !m_field_data
.Decode(strm
))
734 return UnknownExtensionsDecode(strm
);
738 void T38_Data_Field_subtype::Encode(PASN_Stream
& strm
) const
740 PreambleEncode(strm
);
742 m_field_type
.Encode(strm
);
743 if (HasOptionalField(e_field_data
))
744 m_field_data
.Encode(strm
);
746 UnknownExtensionsEncode(strm
);
750 PObject
* T38_Data_Field_subtype::Clone() const
752 #ifndef PASN_LEANANDMEAN
753 PAssert(IsClass(T38_Data_Field_subtype::Class()), PInvalidCast
);
755 return new T38_Data_Field_subtype(*this);
760 // PreCorrigendum-Data-Field_subtype
763 T38_PreCorrigendum_Data_Field_subtype::T38_PreCorrigendum_Data_Field_subtype(unsigned tag
, PASN_Object::TagClass tagClass
)
764 : PASN_Sequence(tag
, tagClass
, 1, FALSE
, 0)
766 m_field_data
.SetConstraints(PASN_Object::FixedConstraint
, 1, 65535);
770 #ifndef PASN_NOPRINTON
771 void T38_PreCorrigendum_Data_Field_subtype::PrintOn(ostream
& strm
) const
773 int indent
= strm
.precision() + 2;
775 strm
<< setw(indent
+13) << "field_type = " << setprecision(indent
) << m_field_type
<< '\n';
776 if (HasOptionalField(e_field_data
))
777 strm
<< setw(indent
+13) << "field_data = " << setprecision(indent
) << m_field_data
<< '\n';
778 strm
<< setw(indent
-1) << setprecision(indent
-2) << "}";
783 PObject::Comparison
T38_PreCorrigendum_Data_Field_subtype::Compare(const PObject
& obj
) const
785 #ifndef PASN_LEANANDMEAN
786 PAssert(PIsDescendant(&obj
, T38_PreCorrigendum_Data_Field_subtype
), PInvalidCast
);
788 const T38_PreCorrigendum_Data_Field_subtype
& other
= (const T38_PreCorrigendum_Data_Field_subtype
&)obj
;
792 if ((result
= m_field_type
.Compare(other
.m_field_type
)) != EqualTo
)
794 if ((result
= m_field_data
.Compare(other
.m_field_data
)) != EqualTo
)
797 return PASN_Sequence::Compare(other
);
801 PINDEX
T38_PreCorrigendum_Data_Field_subtype::GetDataLength() const
804 length
+= m_field_type
.GetObjectLength();
805 if (HasOptionalField(e_field_data
))
806 length
+= m_field_data
.GetObjectLength();
811 BOOL
T38_PreCorrigendum_Data_Field_subtype::Decode(PASN_Stream
& strm
)
813 if (!PreambleDecode(strm
))
816 if (!m_field_type
.Decode(strm
))
818 if (HasOptionalField(e_field_data
) && !m_field_data
.Decode(strm
))
821 return UnknownExtensionsDecode(strm
);
825 void T38_PreCorrigendum_Data_Field_subtype::Encode(PASN_Stream
& strm
) const
827 PreambleEncode(strm
);
829 m_field_type
.Encode(strm
);
830 if (HasOptionalField(e_field_data
))
831 m_field_data
.Encode(strm
);
833 UnknownExtensionsEncode(strm
);
837 PObject
* T38_PreCorrigendum_Data_Field_subtype::Clone() const
839 #ifndef PASN_LEANANDMEAN
840 PAssert(IsClass(T38_PreCorrigendum_Data_Field_subtype::Class()), PInvalidCast
);
842 return new T38_PreCorrigendum_Data_Field_subtype(*this);
847 // UDPTLPacket_primary-ifp-packet
850 T38_UDPTLPacket_primary_ifp_packet::T38_UDPTLPacket_primary_ifp_packet(unsigned tag
, PASN_Object::TagClass tagClass
)
851 : PASN_OctetString(tag
, tagClass
)
856 PObject
* T38_UDPTLPacket_primary_ifp_packet::Clone() const
858 #ifndef PASN_LEANANDMEAN
859 PAssert(IsClass(T38_UDPTLPacket_primary_ifp_packet::Class()), PInvalidCast
);
861 return new T38_UDPTLPacket_primary_ifp_packet(*this);
866 // UDPTLPacket_error-recovery_fec-info
869 T38_UDPTLPacket_error_recovery_fec_info::T38_UDPTLPacket_error_recovery_fec_info(unsigned tag
, PASN_Object::TagClass tagClass
)
870 : PASN_Sequence(tag
, tagClass
, 0, FALSE
, 0)
875 #ifndef PASN_NOPRINTON
876 void T38_UDPTLPacket_error_recovery_fec_info::PrintOn(ostream
& strm
) const
878 int indent
= strm
.precision() + 2;
880 strm
<< setw(indent
+15) << "fec_npackets = " << setprecision(indent
) << m_fec_npackets
<< '\n';
881 strm
<< setw(indent
+11) << "fec_data = " << setprecision(indent
) << m_fec_data
<< '\n';
882 strm
<< setw(indent
-1) << setprecision(indent
-2) << "}";
887 PObject::Comparison
T38_UDPTLPacket_error_recovery_fec_info::Compare(const PObject
& obj
) const
889 #ifndef PASN_LEANANDMEAN
890 PAssert(PIsDescendant(&obj
, T38_UDPTLPacket_error_recovery_fec_info
), PInvalidCast
);
892 const T38_UDPTLPacket_error_recovery_fec_info
& other
= (const T38_UDPTLPacket_error_recovery_fec_info
&)obj
;
896 if ((result
= m_fec_npackets
.Compare(other
.m_fec_npackets
)) != EqualTo
)
898 if ((result
= m_fec_data
.Compare(other
.m_fec_data
)) != EqualTo
)
901 return PASN_Sequence::Compare(other
);
905 PINDEX
T38_UDPTLPacket_error_recovery_fec_info::GetDataLength() const
908 length
+= m_fec_npackets
.GetObjectLength();
909 length
+= m_fec_data
.GetObjectLength();
914 BOOL
T38_UDPTLPacket_error_recovery_fec_info::Decode(PASN_Stream
& strm
)
916 if (!PreambleDecode(strm
))
919 if (!m_fec_npackets
.Decode(strm
))
921 if (!m_fec_data
.Decode(strm
))
924 return UnknownExtensionsDecode(strm
);
928 void T38_UDPTLPacket_error_recovery_fec_info::Encode(PASN_Stream
& strm
) const
930 PreambleEncode(strm
);
932 m_fec_npackets
.Encode(strm
);
933 m_fec_data
.Encode(strm
);
935 UnknownExtensionsEncode(strm
);
939 PObject
* T38_UDPTLPacket_error_recovery_fec_info::Clone() const
941 #ifndef PASN_LEANANDMEAN
942 PAssert(IsClass(T38_UDPTLPacket_error_recovery_fec_info::Class()), PInvalidCast
);
944 return new T38_UDPTLPacket_error_recovery_fec_info(*this);
949 // UDPTLPacket_error-recovery_secondary-ifp-packets_subtype
952 T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype(unsigned tag
, PASN_Object::TagClass tagClass
)
953 : PASN_OctetString(tag
, tagClass
)
958 PObject
* T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::Clone() const
960 #ifndef PASN_LEANANDMEAN
961 PAssert(IsClass(T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype::Class()), PInvalidCast
);
963 return new T38_UDPTLPacket_error_recovery_secondary_ifp_packets_subtype(*this);
971 T38_UDPTLPacket::T38_UDPTLPacket(unsigned tag
, PASN_Object::TagClass tagClass
)
972 : PASN_Sequence(tag
, tagClass
, 0, FALSE
, 0)
974 m_seq_number
.SetConstraints(PASN_Object::FixedConstraint
, 0, 65535);
978 #ifndef PASN_NOPRINTON
979 void T38_UDPTLPacket::PrintOn(ostream
& strm
) const
981 int indent
= strm
.precision() + 2;
983 strm
<< setw(indent
+13) << "seq_number = " << setprecision(indent
) << m_seq_number
<< '\n';
984 strm
<< setw(indent
+21) << "primary_ifp_packet = " << setprecision(indent
) << m_primary_ifp_packet
<< '\n';
985 strm
<< setw(indent
+17) << "error_recovery = " << setprecision(indent
) << m_error_recovery
<< '\n';
986 strm
<< setw(indent
-1) << setprecision(indent
-2) << "}";
991 PObject::Comparison
T38_UDPTLPacket::Compare(const PObject
& obj
) const
993 #ifndef PASN_LEANANDMEAN
994 PAssert(PIsDescendant(&obj
, T38_UDPTLPacket
), PInvalidCast
);
996 const T38_UDPTLPacket
& other
= (const T38_UDPTLPacket
&)obj
;
1000 if ((result
= m_seq_number
.Compare(other
.m_seq_number
)) != EqualTo
)
1002 if ((result
= m_primary_ifp_packet
.Compare(other
.m_primary_ifp_packet
)) != EqualTo
)
1004 if ((result
= m_error_recovery
.Compare(other
.m_error_recovery
)) != EqualTo
)
1007 return PASN_Sequence::Compare(other
);
1011 PINDEX
T38_UDPTLPacket::GetDataLength() const
1014 length
+= m_seq_number
.GetObjectLength();
1015 length
+= m_primary_ifp_packet
.GetObjectLength();
1016 length
+= m_error_recovery
.GetObjectLength();
1021 BOOL
T38_UDPTLPacket::Decode(PASN_Stream
& strm
)
1023 if (!PreambleDecode(strm
))
1026 if (!m_seq_number
.Decode(strm
))
1028 if (!m_primary_ifp_packet
.Decode(strm
))
1030 if (!m_error_recovery
.Decode(strm
))
1033 return UnknownExtensionsDecode(strm
);
1037 void T38_UDPTLPacket::Encode(PASN_Stream
& strm
) const
1039 PreambleEncode(strm
);
1041 m_seq_number
.Encode(strm
);
1042 m_primary_ifp_packet
.Encode(strm
);
1043 m_error_recovery
.Encode(strm
);
1045 UnknownExtensionsEncode(strm
);
1049 PObject
* T38_UDPTLPacket::Clone() const
1051 #ifndef PASN_LEANANDMEAN
1052 PAssert(IsClass(T38_UDPTLPacket::Class()), PInvalidCast
);
1054 return new T38_UDPTLPacket(*this);
1058 #endif // if ! H323_DISABLE_T38