31 #ifndef OPAL_T38_T38PROTO_H 
   32 #define OPAL_T38_T38PROTO_H 
   40 #if OPAL_T38_CAPABILITY 
   49 class OpalFaxConnection;
 
   53 class PASN_OctetString;
 
   56 #define OPAL_OPT_STATION_ID  "Station-Id"       
   57 #define OPAL_OPT_HEADER_INFO "Header-Info"      
   58 #define OPAL_NO_G111_FAX     "No-G711-Fax"      
   59 #define OPAL_SWITCH_ON_CED   "Switch-On-CED"    
   60 #define OPAL_T38_SWITCH_TIME "T38-Switch-Time"  
   62 #define OPAL_FAX_TIFF_FILE "TIFF-File" 
   64 #define OPAL_T38FaxRateManagement   "T38FaxRateManagement" 
   65 #define OPAL_T38localTCF            "localTCF" 
   66 #define OPAL_T38transferredTCF      "transferredTCF" 
   67 #define OPAL_T38FaxVersion          "T38FaxVersion" 
   68 #define OPAL_T38MaxBitRate          "T38MaxBitRate" 
   69 #define OPAL_T38FaxMaxBuffer        "T38FaxMaxBuffer" 
   70 #define OPAL_T38FaxMaxDatagram      "T38FaxMaxDatagram" 
   71 #define OPAL_T38FaxUdpEC            "T38FaxUdpEC" 
   72 #define OPAL_T38UDPFEC              "t38UDPFEC" 
   73 #define OPAL_T38UDPRedundancy       "t38UDPRedundancy" 
   74 #define OPAL_T38FaxFillBitRemoval   "T38FaxFillBitRemoval" 
   75 #define OPAL_T38FaxTranscodingMMR   "T38FaxTranscodingMMR" 
   76 #define OPAL_T38FaxTranscodingJBIG  "T38FaxTranscodingJBIG" 
   77 #define OPAL_T38UseECM              "Use-ECM" 
   78 #define OPAL_FaxStationIdentifier   "Station-Identifier" 
   79 #define OPAL_FaxHeaderInfo          "Header-Info" 
   80 #define OPAL_UDPTLRawMode           "UDPTL-Raw-Mode" 
   87 class OpalFaxConnection;
 
  110       const char * g711Prefix = 
"fax", 
 
  111       const char * t38Prefix = 
"t38"   
  123       const PString & party,    
 
  124       void * userData = NULL,          
 
  125       unsigned int options = 0,     
 
  143     virtual bool IsAvailable() 
const;
 
  151       const PString & filename, 
 
  159     virtual void OnFaxCompleted(
 
  160       OpalFaxConnection & connection, 
 
  168     const PString & GetDefaultDirectory()
 const { 
return m_defaultDirectory; }
 
  172     void SetDefaultDirectory(
 
  174     ) { m_defaultDirectory = dir; }
 
  176     const PString & GetT38Prefix()
 const { 
return m_t38Prefix; }
 
  181     PDirectory m_defaultDirectory;
 
  213       OpalFaxEndPoint & endpoint,      
 
  214       const PString & filename,        
 
  222     ~OpalFaxConnection();
 
  237     virtual bool SwitchFaxMediaStreams(
bool toT38);
 
  238     virtual void OnSwitchedFaxMediaStreams(
bool toT38, 
bool success);
 
  239     virtual bool OnSwitchingFaxMediaStreams(
bool toT38);
 
  248     virtual void OnFaxCompleted(
 
  254     virtual void GetStatistics(
 
  260     const PString & GetFileName()
 const { 
return m_filename; }
 
  264     bool IsReceive()
 const { 
return m_receiving; }
 
  269     void InternalOpenFaxStreams();
 
  270     void InternalOnFaxCompleted();
 
  278     unsigned          m_switchTime;
 
  281     PTimer m_switchTimer;
 
  284     PAtomicBoolean      m_completed;
 
  288 typedef OpalFaxConnection OpalT38Connection; 
 
  290 class T38_UDPTLPacket;
 
  295     static const PCaselessString & UDPTL();
 
  297     OpalFaxSession(
const Init & init);
 
  300     virtual const PCaselessString & 
GetSessionType()
 const { 
return UDPTL(); }
 
  302     virtual bool IsOpen() 
const;
 
  303     virtual bool Close();
 
  325     void SetFrameFromIFP(
RTP_DataFrame & frame, 
const PASN_OctetString & ifp, 
unsigned sequenceNumber);
 
  326     void DecrementSentPacketRedundancy(
bool stripRedundancy);
 
  329     Transport          m_savedTransport;
 
  330     PIPSocket        * m_dataSocket;
 
  334     PINDEX             m_datagramSize;
 
  336     int                m_consecutiveBadPackets;
 
  337     bool               m_awaitingGoodPacket;
 
  338     T38_UDPTLPacket  * m_receivedPacket;
 
  339     unsigned           m_expectedSequenceNumber;
 
  340     int                m_secondaryPacket;
 
  342     std::map<int, int> m_redundancy;
 
  343     PTimeInterval      m_redundancyInterval;
 
  344     PTimeInterval      m_keepAliveInterval;
 
  345     bool               m_optimiseOnRetransmit;
 
  346     std::vector<int>   m_sentPacketRedundancy;
 
  347     T38_UDPTLPacket  * m_sentPacket;
 
  349     PTimer             m_timerWriteDataIdle;
 
  350     PDECLARE_NOTIFIER(PTimer,  OpalFaxSession, OnWriteDataIdle);
 
  353     unsigned m_txPackets;
 
  355     unsigned m_rxPackets;
 
  356     unsigned m_missingPackets;
 
  368                        OpalFaxSession & session);
 
  370     virtual PBoolean 
Open();
 
  380     OpalFaxSession & m_session;
 
  384 #endif // OPAL_T38_CAPABILITY 
  386 #endif // OPAL_T38_T38PROTO_H