www.pudn.com > openh323-v1_15_1-src.zip > h323.h


/* 
 * h323.h 
 * 
 * H.323 protocol handler 
 * 
 * Open H323 Library 
 * 
 * Copyright (c) 1998-2000 Equivalence Pty. Ltd. 
 * 
 * The contents of this file are subject to the Mozilla Public License 
 * Version 1.0 (the "License"); you may not use this file except in 
 * compliance with the License. You may obtain a copy of the License at 
 * http://www.mozilla.org/MPL/ 
 * 
 * Software distributed under the License is distributed on an "AS IS" 
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
 * the License for the specific language governing rights and limitations 
 * under the License. 
 * 
 * The Original Code is Open H323 Library. 
 * 
 * The Initial Developer of the Original Code is Equivalence Pty. Ltd. 
 * 
 * Portions of this code were written with the assisance of funding from 
 * Vovida Networks, Inc. http://www.vovida.com. 
 * 
 * Contributor(s): ______________________________________. 
 * 
 * $Log: h323.h,v $ 
 * Revision 1.139  2004/05/10 13:37:49  rjongbloed 
 * Changed G.726 and MS-ADPCM to plug in codecs. 
 * 
 * Revision 1.138  2004/05/04 23:54:07  csoutheren 
 * Removed usage of lpc10codec.h 
 * 
 * Revision 1.137  2004/05/03 13:21:40  rjongbloed 
 * Converted everything to be codec plug in freindly 
 * Removed GSM and G.729 as now plug ins are "the way"! 
 * 
 * Revision 1.136  2004/05/02 13:47:56  csoutheren 
 * Removed gsmcodec.h 
 * 
 * Revision 1.135  2004/04/05 04:22:55  rjongbloed 
 * Removed speex and iLBC direct build as now use plug in 
 * 
 * Revision 1.134  2004/04/03 12:17:07  csoutheren 
 * Updated plugin changes for RTTI changes and added missing include 
 * 
 * Revision 1.133  2004/04/03 10:38:23  csoutheren 
 * Added in initial cut at codec plugin code. Branches are for wimps :) 
 * 
 * Revision 1.132.2.1  2004/03/31 11:50:24  csoutheren 
 * Removed references to builtin iLBC as this has been moved to plugins 
 * 
 * Revision 1.132  2003/06/06 02:19:03  rjongbloed 
 * Added iLBC codec 
 * 
 * Revision 1.131  2003/05/14 03:29:56  rjongbloed 
 * Added H.263 codec and autoconf options header file. 
 * 
 * Revision 1.130  2002/11/05 02:18:03  robertj 
 * Changed default for speex codec to be included. 
 * 
 * Revision 1.129  2002/11/04 02:57:24  dereks 
 * Put test around include of speexcodec.h    SPEEX is now an optional codec. 
 * 
 * Revision 1.128  2002/10/24 05:34:03  robertj 
 * Added speex codec 
 * 
 * Revision 1.127  2002/10/01 03:07:12  robertj 
 * Added version number functions for OpenH323 library itself, plus included 
 *   library version in the default vendor information. 
 * 
 * Revision 1.126  2002/06/27 03:08:57  robertj 
 * Added code to include G.729 & G.726 codecs on static linking. 
 * 
 * Revision 1.125  2001/10/23 02:18:06  dereks 
 * Initial release of CU30 video codec. 
 * 
 * Revision 1.124  2001/09/11 01:24:36  robertj 
 * Added conditional compilation to remove video and/or audio codecs. 
 * 
 * Revision 1.123  2001/08/06 03:08:11  robertj 
 * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files. 
 * 
 * Revision 1.122  2001/08/01 00:46:16  craigs 
 * Added ability to early start without Alerting 
 * 
 * Revision 1.121  2001/07/17 04:44:29  robertj 
 * Partial implementation of T.120 and T.38 logical channels. 
 * 
 * Revision 1.120  2001/07/06 02:29:12  robertj 
 * Moved initialisation of local capabilities back to constructor for 
 *   backward compatibility reasons. 
 * 
 * Revision 1.119  2001/07/05 04:18:23  robertj 
 * Added call back for setting local capabilities. 
 * 
 * Revision 1.118  2001/06/19 03:55:28  robertj 
 * Added transport to CreateConnection() function so can use that as part of 
 *   the connection creation decision making process. 
 * 
 * Revision 1.117  2001/06/14 23:18:04  robertj 
 * Change to allow for CreateConnection() to return NULL to abort call. 
 * 
 * Revision 1.116  2001/06/14 04:24:16  robertj 
 * Changed incoming call to pass setup pdu to endpoint so it can create 
 *   different connection subclasses depending on the pdu eg its alias 
 * 
 * Revision 1.115  2001/06/13 06:38:23  robertj 
 * Added early start (media before connect) functionality. 
 * 
 * Revision 1.114  2001/05/31 01:28:47  robertj 
 * Added functions to determine if call currently being held. 
 * 
 * Revision 1.113  2001/05/30 23:34:54  robertj 
 * Added functions to send TCS=0 for transmitter side pause. 
 * 
 * Revision 1.112  2001/05/17 07:11:29  robertj 
 * Added more call end types for common transport failure modes. 
 * 
 * Revision 1.111  2001/05/17 03:31:07  robertj 
 * Fixed support for transmiter side paused (TCS=0), thanks Paul van de Wijngaard 
 * 
 * Revision 1.110  2001/05/14 05:56:25  robertj 
 * Added H323 capability registration system so can add capabilities by 
 *   string name instead of having to instantiate explicit classes. 
 * 
 * Revision 1.109  2001/05/09 04:59:02  robertj 
 * Bug fixes in H.450.2, thanks Klein Stefan. 
 * 
 * Revision 1.108  2001/05/09 04:07:53  robertj 
 * Added more call end codes for busy and congested. 
 * 
 * Revision 1.107  2001/05/01 04:34:10  robertj 
 * Changed call transfer API slightly to be consistent with new hold function. 
 * 
 * Revision 1.106  2001/05/01 02:12:48  robertj 
 * Added H.450.4 call hold (Near End only), thanks David M. Cassel. 
 * 
 * Revision 1.105  2001/04/23 01:31:13  robertj 
 * Improved the locking of connections especially at shutdown. 
 * 
 * Revision 1.104  2001/04/11 03:01:27  robertj 
 * Added H.450.2 (call transfer), thanks a LOT to Graeme Reid & Norwood Systems 
 * 
 * Revision 1.103  2001/03/21 04:52:40  robertj 
 * Added H.235 security to gatekeepers, thanks Fürbass Franz! 
 * 
 * Revision 1.102  2001/03/16 06:46:19  robertj 
 * Added ability to set endpoints desired time to live on a gatekeeper. 
 * 
 * Revision 1.101  2001/03/15 00:24:01  robertj 
 * Added function for setting gatekeeper with address and identifier values. 
 * 
 * Revision 1.100  2001/03/08 07:45:04  robertj 
 * Fixed issues with getting media channels started in some early start 
 *   regimes, in particular better Cisco compatibility. 
 * 
 * Revision 1.99  2001/03/02 06:59:57  robertj 
 * Enhanced the globally unique identifier class. 
 * 
 * Revision 1.98  2001/02/16 04:11:46  robertj 
 * Added ability for RemoveListener() to remove all listeners. 
 * 
 * Revision 1.97  2001/02/09 05:16:24  robertj 
 * Added #pragma interface for GNU C++. 
 * 
 * Revision 1.96  2000/12/19 22:33:44  dereks 
 * Adjust so that the video channel is used for reading/writing raw video 
 * data, which better modularizes the video codec. 
 * 
 * Revision 1.95  2000/12/18 08:58:30  craigs 
 * Added ability set ports 
 * 
 * Revision 1.94  2000/12/18 01:22:28  robertj 
 * Changed semantics or HasConnection() so returns TRUE until the connection 
 *   has been deleted and not just until ClearCall() was executure on it. 
 * 
 * Revision 1.93  2000/12/05 01:52:00  craigs 
 * Made ClearCall functions virtual to allow overiding 
 * 
 * Revision 1.92  2000/11/27 02:44:06  craigs 
 * Added ClearCall Synchronous to H323Connection and H323Endpoint to 
 * avoid race conditions with destroying descendant classes 
 * 
 * Revision 1.91  2000/11/26 23:13:23  craigs 
 * Added ability to pass user data to H323Connection constructor 
 * 
 * Revision 1.90  2000/11/12 23:49:16  craigs 
 * Added per connection versions of OnEstablished and OnCleared 
 * 
 * Revision 1.89  2000/11/08 04:30:00  robertj 
 * Added function to be able to alter/remove the call proceeding PDU. 
 * 
 * Revision 1.88  2000/10/20 06:10:20  robertj 
 * Fixed very small race condition on creating new connectionon incoming call. 
 * 
 * Revision 1.87  2000/10/19 04:06:54  robertj 
 * Added function to be able to remove a listener. 
 * 
 * Revision 1.86  2000/10/16 09:51:16  robertj 
 * Fixed problem with not opening fast start video receive if do not have transmit enabled. 
 * 
 * Revision 1.85  2000/10/13 02:15:23  robertj 
 * Added support for Progress Indicator Q.931/H.225 message. 
 * 
 * Revision 1.84  2000/10/04 12:20:50  robertj 
 * Changed setting of callToken in H323Connection to be as early as possible. 
 * 
 * Revision 1.83  2000/09/25 12:59:16  robertj 
 * Added StartListener() function that takes a H323TransportAddress to start 
 *     listeners bound to specific interfaces. 
 * 
 * Revision 1.82  2000/09/22 01:35:02  robertj 
 * Added support for handling LID's that only do symmetric codecs. 
 * 
 * Revision 1.81  2000/09/20 01:50:22  craigs 
 * Added ability to set jitter buffer on a per-connection basis 
 * 
 * Revision 1.80  2000/09/05 01:16:19  robertj 
 * Added "security" call end reason code. 
 * 
 * Revision 1.79  2000/09/01 02:12:54  robertj 
 * Added ability to select a gatekeeper on LAN via it's identifier name. 
 * 
 * Revision 1.78  2000/07/31 14:08:09  robertj 
 * Added fast start and H.245 tunneling flags to the H323Connection constructor so can 
 *    disabled these features in easier manner to overriding virtuals. 
 * 
 * Revision 1.77  2000/07/13 12:33:38  robertj 
 * Split autoStartVideo so can select receive and transmit independently 
 * 
 * Revision 1.76  2000/07/04 04:14:06  robertj 
 * Fixed capability check of "combinations" for fast start cases. 
 * 
 * Revision 1.75  2000/07/04 01:16:49  robertj 
 * Added check for capability allowed in "combinations" set, still needs more done yet. 
 * 
 * Revision 1.74  2000/06/29 10:59:53  robertj 
 * Added user interface for sound buffer depth adjustment. 
 * 
 * Revision 1.73  2000/06/23 02:48:23  robertj 
 * Added ability to adjust sound channel buffer depth, needed increasing under Win32. 
 * 
 * Revision 1.72  2000/06/21 08:07:38  robertj 
 * Added cause/reason to release complete PDU, where relevent. 
 * 
 * Revision 1.71  2000/06/10 02:03:36  robertj 
 * Fixed typo in comment 
 * 
 * Revision 1.70  2000/06/07 05:47:55  robertj 
 * Added call forwarding. 
 * 
 * Revision 1.69  2000/06/05 06:33:08  robertj 
 * Fixed problem with roud trip time statistic not being calculated if constant traffic. 
 * 
 * Revision 1.68  2000/05/23 12:57:28  robertj 
 * Added ability to change IP Type Of Service code from applications. 
 * 
 * Revision 1.67  2000/05/23 11:32:26  robertj 
 * Rewrite of capability table to combine 2 structures into one and move functionality into that class 
 *    allowing some normalisation of usage across several applications. 
 * Changed H323Connection so gets a copy of capabilities instead of using endponts, allows adjustments 
 *    to be done depending on the remote client application. 
 * 
 * Revision 1.66  2000/05/18 11:53:33  robertj 
 * Changes to support doc++ documentation generation. 
 * 
 * Revision 1.65  2000/05/16 08:12:37  robertj 
 * Added documentation for FindChannel() function. 
 * Added function to get a logical channel by channel number. 
 * 
 * Revision 1.64  2000/05/16 02:06:00  craigs 
 * Added access functions for particular sessions 
 * 
 * Revision 1.63  2000/05/09 12:19:22  robertj 
 * Added ability to get and set "distinctive ring" Q.931 functionality. 
 * 
 * Revision 1.62  2000/05/08 14:07:26  robertj 
 * Improved the provision and detection of calling and caller numbers, aliases and hostnames. 
 * 
 * Revision 1.61  2000/05/02 04:32:24  robertj 
 * Fixed copyright notice comment. 
 * 
 * Revision 1.60  2000/05/01 13:00:09  robertj 
 * Changed SetCapability() to append capabilities to TCS, helps with assuring no gaps in set. 
 * 
 * Revision 1.59  2000/04/14 21:08:53  robertj 
 * Work around for compatibility problem wth broken Altigen AltaServ-IG PBX. 
 * 
 * Revision 1.58  2000/04/14 20:01:38  robertj 
 * Added function to get remote endpoints application name. 
 * 
 * Revision 1.57  2000/04/11 04:02:47  robertj 
 * Improved call initiation with gatekeeper, no longer require @address as 
 *    will default to gk alias if no @ and registered with gk. 
 * Added new call end reasons for gatekeeper denied calls. 
 * 
 * Revision 1.56  2000/04/10 20:02:49  robertj 
 * Added support for more sophisticated DTMF and hook flash user indication. 
 * 
 * Revision 1.55  2000/04/06 17:50:15  robertj 
 * Added auto-start (including fast start) of video channels, selectable via boolean on the endpoint. 
 * 
 * Revision 1.54  2000/04/05 03:17:30  robertj 
 * Added more RTP statistics gathering and H.245 round trip delay calculation. 
 * 
 * Revision 1.53  2000/03/29 04:32:55  robertj 
 * Improved some trace logging messages. 
 * 
 * Revision 1.52  2000/03/29 02:12:38  robertj 
 * Changed TerminationReason to CallEndReason to use correct telephony nomenclature. 
 * Added CallEndReason for capability exchange failure. 
 * 
 * Revision 1.51  2000/03/25 02:03:18  robertj 
 * Added default transport for gatekeeper to be UDP. 
 * 
 * Revision 1.50  2000/03/23 02:44:49  robertj 
 * Changed ClearAllCalls() so will wait for calls to be closed (usefull in endpoint dtors). 
 * 
 * Revision 1.49  2000/03/02 02:18:13  robertj 
 * Further fixes for early H245 establishment confusing the fast start code. 
 * 
 * Revision 1.48  2000/01/07 08:19:14  robertj 
 * Added status functions for connection and tidied up the answer call function 
 * 
 * Revision 1.47  2000/01/04 00:14:26  craigs 
 * Added additional states to AnswerCall callback 
 * 
 * Revision 1.46  1999/12/23 23:02:34  robertj 
 * File reorganision for separating RTP from H.323 and creation of LID for VPB support. 
 * 
 * Revision 1.45  1999/12/11 02:20:53  robertj 
 * Added ability to have multiple aliases on local endpoint. 
 * 
 * Revision 1.44  1999/11/22 10:07:23  robertj 
 * Fixed some errors in correct termination states. 
 * 
 * Revision 1.43  1999/11/19 08:15:41  craigs 
 * Added connectionStartTime 
 * 
 * Revision 1.42  1999/11/17 00:01:11  robertj 
 * Improved determination of caller name, thanks Ian MacDonald 
 * 
 * Revision 1.41  1999/11/10 23:29:37  robertj 
 * Changed OnAnswerCall() call back function  to allow for asyncronous response. 
 * 
 * Revision 1.40  1999/11/06 05:37:44  robertj 
 * Complete rewrite of termination of connection to avoid numerous race conditions. 
 * 
 * Revision 1.39  1999/10/30 12:34:13  robertj 
 * Added information callback for closed logical channel on H323EndPoint. 
 * 
 * Revision 1.38  1999/10/29 02:26:13  robertj 
 * Added reason for termination code to H323Connection. 
 * 
 * Revision 1.37  1999/10/19 00:03:20  robertj 
 * Changed OpenAudioChannel and OpenVideoChannel to allow a codec AttachChannel with no autodelete. 
 * Added function to set initial bandwidth limit on a new connection. 
 * 
 * Revision 1.36  1999/10/14 12:05:03  robertj 
 * Fixed deadlock possibilities in clearing calls. 
 * 
 * Revision 1.35  1999/10/09 01:19:07  craigs 
 * Added codecs to OpenAudioChannel and OpenVideoDevice functions 
 * 
 * Revision 1.34  1999/09/23 07:25:12  robertj 
 * Added open audio and video function to connection and started multi-frame codec send functionality. 
 * 
 * Revision 1.33  1999/09/21 14:24:34  robertj 
 * Changed SetCapability() so automatically calls AddCapability(). 
 * 
 * Revision 1.32  1999/09/21 14:05:21  robertj 
 * Fixed incorrect PTRACING test and removed uneeded include of videoio.h 
 * 
 * Revision 1.31  1999/09/21 08:29:13  craigs 
 * Added support for video codecs and H261 
 * 
 * Revision 1.30  1999/09/15 01:26:27  robertj 
 * Changed capability set call backs to have more specific class as parameter. 
 * 
 * Revision 1.29  1999/09/14 06:52:54  robertj 
 * Added better support for multi-homed client hosts. 
 * 
 * Revision 1.28  1999/09/13 14:23:11  robertj 
 * Changed MakeCall() function return value to be something useful. 
 * 
 * Revision 1.27  1999/09/10 03:36:47  robertj 
 * Added simple Q.931 Status response to Q.931 Status Enquiry 
 * 
 * Revision 1.26  1999/09/08 04:05:48  robertj 
 * Added support for video capabilities & codec, still needs the actual codec itself! 
 * 
 * Revision 1.25  1999/08/31 12:34:18  robertj 
 * Added gatekeeper support. 
 * 
 * Revision 1.24  1999/08/27 09:46:05  robertj 
 * Added sepearte function to initialise vendor information from endpoint. 
 * 
 * Revision 1.23  1999/08/25 05:14:49  robertj 
 * File fission (critical mass reached). 
 * Improved way in which remote capabilities are created, removed case statement! 
 * Changed MakeCall, so immediately spawns thread, no black on TCP connect. 
 * 
 * Revision 1.22  1999/08/08 10:02:49  robertj 
 * Added access functions to remote capability table. 
 * 
 * Revision 1.21  1999/07/23 02:37:53  robertj 
 * Fixed problems with hang ups and crash closes of connections. 
 * 
 * Revision 1.20  1999/07/18 14:29:31  robertj 
 * Fixed bugs in slow start with H245 tunnelling, part 3. 
 * 
 * Revision 1.19  1999/07/16 14:05:10  robertj 
 * Added application level jitter buffer adjustment. 
 * 
 * Revision 1.18  1999/07/16 06:15:59  robertj 
 * Corrected semantics for tunnelled master/slave determination in fast start. 
 * 
 * Revision 1.17  1999/07/15 14:45:35  robertj 
 * Added propagation of codec open error to shut down logical channel. 
 * Fixed control channel start up bug introduced with tunnelling. 
 * 
 * Revision 1.16  1999/07/14 06:06:13  robertj 
 * Fixed termination problems (race conditions) with deleting connection object. 
 * 
 * Revision 1.15  1999/07/13 02:50:58  craigs 
 * Changed semantics of SetPlayDevice/SetRecordDevice, only descendent 
 *    endpoint assumes PSoundChannel devices for audio codec. 
 * 
 * Revision 1.14  1999/07/10 02:59:26  robertj 
 * Fixed ability to hang up incoming connection. 
 * 
 * Revision 1.13  1999/07/09 06:09:49  robertj 
 * Major implementation. An ENORMOUS amount of stuff added everywhere. 
 * 
 * Revision 1.12  1999/06/25 10:25:35  robertj 
 * Added maintentance of callIdentifier variable in H.225 channel. 
 * 
 * Revision 1.11  1999/06/22 13:45:05  robertj 
 * Added user question on listener version to accept incoming calls. 
 * 
 * Revision 1.10  1999/06/14 05:15:56  robertj 
 * Changes for using RTP sessions correctly in H323 Logical Channel context 
 * 
 * Revision 1.9  1999/06/13 12:41:14  robertj 
 * Implement logical channel transmitter. 
 * Fixed H245 connect on receiving call. 
 * 
 * Revision 1.8  1999/06/09 06:18:00  robertj 
 * GCC compatibiltiy. 
 * 
 * Revision 1.7  1999/06/09 05:26:19  robertj 
 * Major restructuring of classes. 
 * 
 * Revision 1.6  1999/06/06 06:06:36  robertj 
 * Changes for new ASN compiler and v2 protocol ASN files. 
 * 
 * Revision 1.5  1999/04/26 06:14:46  craigs 
 * Initial implementation for RTP decoding and lots of stuff 
 * As a whole, these changes are called "First Noise" 
 * 
 * Revision 1.4  1999/02/23 11:04:28  robertj 
 * Added capability to make outgoing call. 
 * 
 * Revision 1.3  1999/01/16 01:31:34  robertj 
 * Major implementation. 
 * 
 * Revision 1.2  1999/01/02 04:00:59  robertj 
 * Added higher level protocol negotiations. 
 * 
 * Revision 1.1  1998/12/14 09:13:12  robertj 
 * Initial revision 
 * 
 */ 
 
#include "openh323buildopts.h" 
 
#include "h323con.h" 
#include "h323ep.h" 
#include "gkclient.h" 
 
#ifndef NO_H323_VIDEO 
#include "h261codec.h" 
#include "h263codec.h" 
#ifdef HAS_CU30 
#include "cu30codec.h" 
#endif 
#endif // NO_H323_VIDEO 
 
#include  
 
PString  OpalGetVersion(); 
unsigned OpalGetMajorVersion(); 
unsigned OpalGetMinorVersion(); 
unsigned OpalGetBuildNumber(); 
 
 
/////////////////////////////////////////////////////////////////////////////