home *** CD-ROM | disk | FTP | other *** search
/ ftp.muug.mb.ca / 2014.06.ftp.muug.mb.ca.tar / ftp.muug.mb.ca / pub / openh323.tar.gz / openh323.tar / openh323 / include / t38proto.h < prev    next >
C/C++ Source or Header  |  2002-12-01  |  6KB  |  222 lines

  1. /*
  2.  * t38proto.h
  3.  *
  4.  * T.38 protocol handler
  5.  *
  6.  * Open Phone Abstraction Library
  7.  *
  8.  * Copyright (c) 2001 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Open H323 Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Contributor(s): ______________________________________.
  25.  *
  26.  * $Log: t38proto.h,v $
  27.  * Revision 1.9  2002/12/02 04:07:58  robertj
  28.  * Turned T.38 Originate inside out, so now has WriteXXX() functions that can
  29.  *   be call ed in different thread contexts.
  30.  *
  31.  * Revision 1.8  2002/12/02 00:37:15  robertj
  32.  * More implementation of T38 base library code, some taken from the t38modem
  33.  *   application by Vyacheslav Frolov, eg redundent frames.
  34.  *
  35.  * Revision 1.7  2002/09/16 01:14:15  robertj
  36.  * Added #define so can select if #pragma interface/implementation is used on
  37.  *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
  38.  *
  39.  * Revision 1.6  2002/09/03 06:19:37  robertj
  40.  * Normalised the multi-include header prevention ifdef/define symbol.
  41.  *
  42.  * Revision 1.5  2002/02/09 04:39:01  robertj
  43.  * Changes to allow T.38 logical channels to use single transport which is
  44.  *   now owned by the OpalT38Protocol object instead of H323Channel.
  45.  *
  46.  * Revision 1.4  2002/01/01 23:27:50  craigs
  47.  * Added CleanupOnTermination functions
  48.  * Thanks to Vyacheslav Frolov
  49.  *
  50.  * Revision 1.3  2001/12/22 01:57:04  robertj
  51.  * Cleaned up code and allowed for repeated sequence numbers.
  52.  *
  53.  * Revision 1.2  2001/11/09 05:39:54  craigs
  54.  * Added initial T.38 support thanks to Adam Lazur
  55.  *
  56.  * Revision 1.1  2001/07/17 04:44:29  robertj
  57.  * Partial implementation of T.120 and T.38 logical channels.
  58.  *
  59.  */
  60.  
  61. #ifndef __OPAL_T38PROTO_H
  62. #define __OPAL_T38PROTO_H
  63.  
  64. #ifdef P_USE_PRAGMA
  65. #pragma interface
  66. #endif
  67.  
  68.  
  69. class H323Transport;
  70. class T38_IFPPacket;
  71. class PASN_OctetString;
  72.  
  73.  
  74. ///////////////////////////////////////////////////////////////////////////////
  75.  
  76. /**This class handles the processing of the T.38 protocol.
  77.   */
  78. class OpalT38Protocol : public PObject
  79. {
  80.     PCLASSINFO(OpalT38Protocol, PObject);
  81.   public:
  82.   /**@name Construction */
  83.   //@{
  84.     /**Create a new protocol handler.
  85.      */
  86.     OpalT38Protocol();
  87.  
  88.     /**Destroy the protocol handler.
  89.      */
  90.     ~OpalT38Protocol();
  91.   //@}
  92.  
  93.   /**@name Operations */
  94.   //@{
  95.     /**This is called to clean up any threads on connection termination.
  96.      */
  97.     virtual void CleanUpOnTermination();
  98.  
  99.     /**Handle the origination of a T.38 connection.
  100.        An application would normally override this. The default just sends
  101.        "heartbeat" T.30 no signal indicator.
  102.       */
  103.     virtual BOOL Originate();
  104.  
  105.     /**Write packet to the T.38 connection.
  106.       */
  107.     virtual BOOL WritePacket(
  108.       const T38_IFPPacket & pdu
  109.     );
  110.  
  111.     /**Write T.30 indicator packet to the T.38 connection.
  112.       */
  113.     virtual BOOL WriteIndicator(
  114.       unsigned indicator
  115.     );
  116.  
  117.     /**Write data packet to the T.38 connection.
  118.       */
  119.     virtual BOOL WriteMultipleData(
  120.       unsigned mode,
  121.       PINDEX count,
  122.       unsigned * type,
  123.       const PBYTEArray * data
  124.     );
  125.  
  126.     /**Write data packet to the T.38 connection.
  127.       */
  128.     virtual BOOL WriteData(
  129.       unsigned mode,
  130.       unsigned type,
  131.       const PBYTEArray & data
  132.     );
  133.  
  134.     /**Handle the origination of a T.38 connection.
  135.       */
  136.     virtual BOOL Answer();
  137.  
  138.     /**Handle incoming T.38 packet.
  139.  
  140.        If returns FALSE, then the reading loop should be terminated.
  141.       */
  142.     virtual BOOL HandlePacket(
  143.       const T38_IFPPacket & pdu
  144.     );
  145.  
  146.     /**Handle lost T.38 packets.
  147.  
  148.        If returns FALSE, then the reading loop should be terminated.
  149.       */
  150.     virtual BOOL HandlePacketLost(
  151.       unsigned nLost
  152.     );
  153.  
  154.     /**Handle incoming T.38 indicator packet.
  155.        If returns FALSE, then the reading loop should be terminated.
  156.       */
  157.     virtual BOOL OnIndicator(
  158.       unsigned indicator
  159.     );
  160.  
  161.     /**Handle incoming T.38 CNG indicator.
  162.        If returns FALSE, then the reading loop should be terminated.
  163.       */
  164.     virtual BOOL OnCNG();
  165.  
  166.     /**Handle incoming T.38 CED indicator.
  167.        If returns FALSE, then the reading loop should be terminated.
  168.       */
  169.     virtual BOOL OnCED();
  170.  
  171.     /**Handle incoming T.38 V.21 preamble indicator.
  172.        If returns FALSE, then the reading loop should be terminated.
  173.       */
  174.     virtual BOOL OnPreamble();
  175.  
  176.     /**Handle incoming T.38 data mode training indicator.
  177.        If returns FALSE, then the reading loop should be terminated.
  178.       */
  179.     virtual BOOL OnTraining(
  180.       unsigned indicator
  181.     );
  182.  
  183.     /**Handle incoming T.38 data packet.
  184.  
  185.        If returns FALSE, then the reading loop should be terminated.
  186.       */
  187.     virtual BOOL OnData(
  188.       unsigned mode,
  189.       unsigned type,
  190.       const PBYTEArray & data
  191.     );
  192.   //@}
  193.  
  194.     H323Transport * GetTransport() const { return transport; }
  195.     void SetTransport(
  196.       H323Transport * transport,
  197.       BOOL autoDelete = TRUE
  198.     );
  199.  
  200.   protected:
  201.     BOOL HandleRawIFP(
  202.       const PASN_OctetString & pdu
  203.     );
  204.  
  205.     H323Transport * transport;
  206.     BOOL            autoDeleteTransport;
  207.  
  208.     BOOL     corrigendumASN;
  209.     unsigned indicatorRedundancy;
  210.     unsigned lowSpeedRedundancy;
  211.     unsigned highSpeedRedundancy;
  212.  
  213.     int               lastSentSequenceNumber;
  214.     PList<PBYTEArray> redundantIFPs;
  215. };
  216.  
  217.  
  218. #endif // __OPAL_T38PROTO_H
  219.  
  220.  
  221. /////////////////////////////////////////////////////////////////////////////
  222.