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 / h323rtp.h < prev    next >
C/C++ Source or Header  |  2003-02-06  |  9KB  |  261 lines

  1. /*
  2.  * h323rtp.h
  3.  *
  4.  * H.323 RTP protocol handler
  5.  *
  6.  * Open H323 Library
  7.  *
  8.  * Copyright (c) 1998-2000 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.  * Portions of this code were written with the assisance of funding from
  25.  * Vovida Networks, Inc. http://www.vovida.com.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: h323rtp.h,v $
  30.  * Revision 1.10  2003/02/07 00:27:59  robertj
  31.  * Changed function to virtual to help in using external multiicast RTP stacks.
  32.  *
  33.  * Revision 1.9  2002/09/16 01:14:15  robertj
  34.  * Added #define so can select if #pragma interface/implementation is used on
  35.  *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
  36.  *
  37.  * Revision 1.8  2002/09/03 06:19:37  robertj
  38.  * Normalised the multi-include header prevention ifdef/define symbol.
  39.  *
  40.  * Revision 1.7  2002/08/05 10:03:47  robertj
  41.  * Cosmetic changes to normalise the usage of pragma interface/implementation.
  42.  *
  43.  * Revision 1.6  2001/02/09 05:16:24  robertj
  44.  * Added #pragma interface for GNU C++.
  45.  *
  46.  * Revision 1.5  2000/08/31 08:15:32  robertj
  47.  * Added support for dynamic RTP payload types in H.245 OpenLogicalChannel negotiations.
  48.  *
  49.  * Revision 1.4  2000/05/18 11:53:34  robertj
  50.  * Changes to support doc++ documentation generation.
  51.  *
  52.  * Revision 1.3  2000/05/02 04:32:24  robertj
  53.  * Fixed copyright notice comment.
  54.  *
  55.  * Revision 1.2  2000/04/05 03:17:31  robertj
  56.  * Added more RTP statistics gathering and H.245 round trip delay calculation.
  57.  *
  58.  * Revision 1.1  1999/12/23 23:02:35  robertj
  59.  * File reorganision for separating RTP from H.323 and creation of LID for VPB support.
  60.  *
  61.  */
  62.  
  63. #ifndef __OPAL_H323RTP_H
  64. #define __OPAL_H323RTP_H
  65.  
  66. #ifdef P_USE_PRAGMA
  67. #pragma interface
  68. #endif
  69.  
  70.  
  71. #include "rtp.h"
  72.  
  73.  
  74. class H225_RTPSession;
  75.  
  76. class H245_TransportAddress;
  77. class H245_H2250LogicalChannelParameters;
  78. class H245_H2250LogicalChannelAckParameters;
  79.  
  80. class H323Connection;
  81. class H323_RTPChannel;
  82.  
  83.  
  84.  
  85. ///////////////////////////////////////////////////////////////////////////////
  86.  
  87. /**This class is for encpsulating the IETF Real Time Protocol interface.
  88.  */
  89. class H323_RTP_Session : public RTP_UserData
  90. {
  91.   PCLASSINFO(H323_RTP_Session, RTP_UserData);
  92.  
  93.   /**@name Overrides from RTP_UserData */
  94.   //@{
  95.     /**Callback from the RTP session for transmit statistics monitoring.
  96.        This is called every RTP_Session::senderReportInterval packets on the
  97.        transmitter indicating that the statistics have been updated.
  98.  
  99.        The default behaviour calls H323Connection::OnRTPStatistics().
  100.       */
  101.     virtual void OnTxStatistics(
  102.       const RTP_Session & session   /// Session with statistics
  103.     ) const;
  104.  
  105.     /**Callback from the RTP session for receive statistics monitoring.
  106.        This is called every RTP_Session::receiverReportInterval packets on the
  107.        receiver indicating that the statistics have been updated.
  108.  
  109.        The default behaviour calls H323Connection::OnRTPStatistics().
  110.       */
  111.     virtual void OnRxStatistics(
  112.       const RTP_Session & session   /// Session with statistics
  113.     ) const;
  114.   //@}
  115.  
  116.   /**@name Operations */
  117.   //@{
  118.     /**Fill out the OpenLogicalChannel PDU for the particular channel type.
  119.      */
  120.     virtual BOOL OnSendingPDU(
  121.       const H323_RTPChannel & channel,            /// Channel using this session.
  122.       H245_H2250LogicalChannelParameters & param  /// Open PDU to send.
  123.     ) const = 0;
  124.  
  125.     /**This is called when request to create a channel is received from a
  126.        remote machine and is about to be acknowledged.
  127.      */
  128.     virtual void OnSendingAckPDU(
  129.       const H323_RTPChannel & channel,              /// Channel using this session.
  130.       H245_H2250LogicalChannelAckParameters & param /// Acknowledgement PDU
  131.     ) const = 0;
  132.  
  133.     /**This is called after a request to create a channel occurs from the
  134.        local machine via the H245LogicalChannelDict::Open() function, and
  135.        the request has been acknowledged by the remote endpoint.
  136.      */
  137.     virtual BOOL OnReceivedPDU(
  138.       H323_RTPChannel & channel,                  /// Channel using this session.
  139.       const H245_H2250LogicalChannelParameters & param, /// Acknowledgement PDU
  140.       unsigned & errorCode                              /// Error on failure
  141.     ) = 0;
  142.  
  143.     /**This is called after a request to create a channel occurs from the
  144.        local machine via the H245LogicalChannelDict::Open() function, and
  145.        the request has been acknowledged by the remote endpoint.
  146.      */
  147.     virtual BOOL OnReceivedAckPDU(
  148.       H323_RTPChannel & channel,                  /// Channel using this session.
  149.       const H245_H2250LogicalChannelAckParameters & param /// Acknowledgement PDU
  150.     ) = 0;
  151.  
  152.     /**This is called when a gatekeeper wants to get status information from
  153.        the endpoint.
  154.  
  155.        The default behaviour fills in the session ID's and SSRC parameters
  156.        but does not do anything with the transport fields.
  157.      */
  158.     virtual void OnSendRasInfo(
  159.       H225_RTPSession & info  /// RTP session info PDU
  160.     ) = 0;
  161.   //@}
  162.  
  163.  
  164.   protected:
  165.   /**@name Construction */
  166.   //@{
  167.     /**Create a new channel.
  168.      */
  169.     H323_RTP_Session(
  170.       const H323Connection & connection  /// Owner of the RTP session
  171.     );
  172.   //@}
  173.  
  174.     const H323Connection & connection; /// Owner of the RTP session
  175. };
  176.  
  177.  
  178. /**This class is for the IETF Real Time Protocol interface on UDP/IP.
  179.  */
  180. class H323_RTP_UDP : public H323_RTP_Session
  181. {
  182.   PCLASSINFO(H323_RTP_UDP, H323_RTP_Session);
  183.  
  184.   public:
  185.   /**@name Construction */
  186.   //@{
  187.     /**Create a new RTP session H323 info.
  188.      */
  189.     H323_RTP_UDP(
  190.       const H323Connection & connection, /// Owner of the RTP session
  191.       RTP_UDP & rtp                      /// RTP session
  192.     );
  193.   //@}
  194.  
  195.   /**@name Operations */
  196.   //@{
  197.     /**Fill out the OpenLogicalChannel PDU for the particular channel type.
  198.      */
  199.     virtual BOOL OnSendingPDU(
  200.       const H323_RTPChannel & channel,            /// Channel using this session.
  201.       H245_H2250LogicalChannelParameters & param  /// Open PDU to send.
  202.     ) const;
  203.  
  204.     /**This is called when request to create a channel is received from a
  205.        remote machine and is about to be acknowledged.
  206.      */
  207.     virtual void OnSendingAckPDU(
  208.       const H323_RTPChannel & channel,              /// Channel using this session.
  209.       H245_H2250LogicalChannelAckParameters & param /// Acknowledgement PDU
  210.     ) const;
  211.  
  212.     /**This is called after a request to create a channel occurs from the
  213.        local machine via the H245LogicalChannelDict::Open() function, and
  214.        the request has been acknowledged by the remote endpoint.
  215.  
  216.        The default behaviour sets the remote ports to send UDP packets to.
  217.      */
  218.     virtual BOOL OnReceivedPDU(
  219.       H323_RTPChannel & channel,                  /// Channel using this session.
  220.       const H245_H2250LogicalChannelParameters & param, /// Acknowledgement PDU
  221.       unsigned & errorCode                              /// Error on failure
  222.     );
  223.  
  224.     /**This is called after a request to create a channel occurs from the
  225.        local machine via the H245LogicalChannelDict::Open() function, and
  226.        the request has been acknowledged by the remote endpoint.
  227.  
  228.        The default behaviour sets the remote ports to send UDP packets to.
  229.      */
  230.     virtual BOOL OnReceivedAckPDU(
  231.       H323_RTPChannel & channel,                  /// Channel using this session.
  232.       const H245_H2250LogicalChannelAckParameters & param /// Acknowledgement PDU
  233.     );
  234.  
  235.     /**This is called when a gatekeeper wants to get status information from
  236.        the endpoint.
  237.  
  238.        The default behaviour calls the ancestor functon and then fills in the 
  239.        transport fields.
  240.      */
  241.     virtual void OnSendRasInfo(
  242.       H225_RTPSession & info  /// RTP session info PDU
  243.     );
  244.   //@}
  245.  
  246.   protected:
  247.     virtual BOOL ExtractTransport(
  248.       const H245_TransportAddress & pdu,
  249.       BOOL isDataPort,
  250.       unsigned & errorCode
  251.     );
  252.  
  253.     RTP_UDP & rtp;
  254. };
  255.  
  256.  
  257. #endif // __OPAL_H323RTP_H
  258.  
  259.  
  260. /////////////////////////////////////////////////////////////////////////////
  261.