00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef OPAL_T38_H323T38_H
00032 #define OPAL_T38_H323T38_H
00033
00034 #ifdef P_USE_PRAGMA
00035 #pragma interface
00036 #endif
00037
00038 #include <opal/buildopts.h>
00039
00040 #include <h323/h323caps.h>
00041
00042
00043 class H245_T38FaxProfile;
00044 class OpalT38Protocol;
00045
00046
00048
00051 class H323_T38Capability : public H323DataCapability
00052 {
00053 PCLASSINFO(H323_T38Capability, H323DataCapability);
00054 public:
00057 enum TransportMode {
00058 e_UDP,
00059 e_DualTCP,
00060 e_SingleTCP,
00061 NumTransportModes
00062 };
00063
00066 H323_T38Capability(
00067 TransportMode mode
00068 );
00070
00076 Comparison Compare(const PObject & obj) const;
00077
00080 virtual PObject * Clone() const;
00082
00091 virtual unsigned GetSubType() const;
00092
00095 virtual PString GetFormatName() const;
00097
00102 virtual H323Channel * CreateChannel(
00103 H323Connection & connection,
00104 H323Channel::Directions dir,
00105 unsigned sessionID,
00106 const H245_H2250LogicalChannelParameters * param
00108 ) const;
00110
00121 virtual PBoolean OnSendingPDU(
00122 H245_DataApplicationCapability & pdu
00123 ) const;
00124
00133 virtual PBoolean OnSendingPDU(
00134 H245_DataMode & pdu
00135 ) const;
00136
00143 virtual PBoolean OnSendingPDU(
00144 H245_DataProtocolCapability & proto,
00145 H245_T38FaxProfile & profile
00146 ) const;
00147
00155 virtual PBoolean OnReceivedPDU(
00156 const H245_DataApplicationCapability & pdu
00157 );
00159
00160 TransportMode GetTransportMode() const { return mode; }
00161
00162 protected:
00163 TransportMode mode;
00164 };
00165
00166
00169 class H323_T38NonStandardCapability : public H323NonStandardDataCapability
00170 {
00171 PCLASSINFO(H323_T38NonStandardCapability, H323NonStandardDataCapability);
00172 public:
00177 H323_T38NonStandardCapability(
00178 BYTE country = 181,
00179 BYTE extension = 0,
00180 WORD maufacturer = 18
00181 );
00183
00188 virtual PObject * Clone() const;
00190
00195 virtual PString GetFormatName() const;
00197
00202 virtual H323Channel * CreateChannel(
00203 H323Connection & connection,
00204 H323Channel::Directions dir,
00205 unsigned sessionID,
00206 const H245_H2250LogicalChannelParameters * param
00208 ) const;
00210 };
00211
00212
00215 class H323_T38Channel : public H323DataChannel
00216 {
00217 PCLASSINFO(H323_T38Channel, H323DataChannel);
00218 public:
00223 H323_T38Channel(
00224 H323Connection & connection,
00225 const H323Capability & capability,
00226 Directions direction,
00227 unsigned sessionID,
00228 H323_T38Capability::TransportMode mode
00229 );
00230 ~H323_T38Channel();
00232
00237 virtual PBoolean OnSendingPDU(
00238 H245_OpenLogicalChannel & openPDU
00239 ) const;
00240
00248 virtual PBoolean OnReceivedPDU(
00249 const H245_OpenLogicalChannel & pdu,
00250 unsigned & errorCode
00251 );
00252
00255 virtual void Close();
00256
00263 virtual void Receive();
00264
00271 virtual void Transmit();
00272
00279 virtual PBoolean CreateListener();
00280
00288 virtual PBoolean CreateTransport();
00290
00291 OpalT38Protocol * GetHandler() const { return t38handler; }
00292
00293 protected:
00294 PBoolean usesTCP;
00295 OpalT38Protocol * t38handler;
00296 };
00297
00298
00299 #endif // OPAL_T38_H323T38_H
00300
00301