h323pdu.h

Go to the documentation of this file.
00001 /*
00002  * h323pdu.h
00003  *
00004  * H.323 protocol handler
00005  *
00006  * Open H323 Library
00007  *
00008  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open H323 Library.
00021  *
00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
00023  *
00024  * Portions of this code were written with the assisance of funding from
00025  * Vovida Networks, Inc. http://www.vovida.com.
00026  *
00027  * Contributor(s): ______________________________________.
00028  *
00029  * $Log: h323pdu.h,v $
00030  * Revision 2.14  2005/11/30 13:35:26  csoutheren
00031  * Changed tags for Doxygen
00032  *
00033  * Revision 2.13  2005/09/04 06:23:38  rjongbloed
00034  * Added OpalMediaCommand mechanism (via PNotifier) for media streams
00035  *   and media transcoders to send commands back to remote.
00036  *
00037  * Revision 2.12  2005/07/12 12:33:27  csoutheren
00038  * Updated H.245 to version 11
00039  *
00040  * Revision 2.11  2005/01/24 00:16:44  csoutheren
00041  * Added function to set Q.931 info in PDU, thanks to Paul Nader
00042  *
00043  * Revision 2.10  2004/02/19 10:46:44  rjongbloed
00044  * Merged OpenH323 version 1.13.1 changes.
00045  *
00046  * Revision 2.9  2003/01/07 04:39:52  robertj
00047  * Updated to OpenH323 v1.11.2
00048  *
00049  * Revision 2.8  2002/11/10 11:33:16  robertj
00050  * Updated to OpenH323 v1.10.3
00051  *
00052  * Revision 2.7  2002/09/16 02:52:34  robertj
00053  * Added #define so can select if #pragma interface/implementation is used on
00054  *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
00055  *
00056  * Revision 2.6  2002/09/04 06:01:47  robertj
00057  * Updated to OpenH323 v1.9.6
00058  *
00059  * Revision 2.5  2002/07/01 04:56:30  robertj
00060  * Updated to OpenH323 v1.9.1
00061  *
00062  * Revision 2.4  2002/03/22 06:57:48  robertj
00063  * Updated to OpenH323 version 1.8.2
00064  *
00065  * Revision 2.3  2002/01/14 06:35:57  robertj
00066  * Updated to OpenH323 v1.7.9
00067  *
00068  * Revision 2.2  2001/08/17 08:20:26  robertj
00069  * Update from OpenH323
00070  *
00071  * Revision 2.1  2001/08/13 05:10:39  robertj
00072  * Updates from OpenH323 v1.6.0 release.
00073  *
00074  * Revision 2.0  2001/07/27 15:48:24  robertj
00075  * Conversion of OpenH323 to Open Phone Abstraction Library (OPAL)
00076  *
00077  * Revision 1.65  2003/04/10 09:36:52  robertj
00078  * Added some more functions for converting to alias addresses.
00079  *
00080  * Revision 1.64  2003/04/01 03:11:01  robertj
00081  * Added function to get array of AliasAddress into PStringArray.
00082  *
00083  * Revision 1.63  2003/03/25 04:56:17  robertj
00084  * Fixed issues to do with multiple inheritence in transaction reply cache.
00085  *
00086  * Revision 1.62  2003/03/20 01:51:07  robertj
00087  * More abstraction of H.225 RAS and H.501 protocols transaction handling.
00088  *
00089  * Revision 1.61  2003/03/01 00:23:42  craigs
00090  * New PeerElement implementation
00091  *
00092  * Revision 1.60  2003/02/25 06:48:15  robertj
00093  * More work on PDU transaction abstraction.
00094  *
00095  * Revision 1.59  2003/02/21 05:28:39  craigs
00096  * Factored out code for user with peer elements
00097  *
00098  * Revision 1.58  2003/02/01 13:31:14  robertj
00099  * Changes to support CAT authentication in RAS.
00100  *
00101  * Revision 1.57  2002/11/28 04:41:44  robertj
00102  * Added support for RAS ServiceControlIndication command.
00103  *
00104  * Revision 1.56  2002/09/16 01:14:15  robertj
00105  * Added #define so can select if #pragma interface/implementation is used on
00106  *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
00107  *
00108  * Revision 1.55  2002/09/03 06:19:37  robertj
00109  * Normalised the multi-include header prevention ifdef/define symbol.
00110  *
00111  * Revision 1.54  2002/08/12 05:38:21  robertj
00112  * Changes to the RAS subsystem to support ability to make requests to client
00113  *   from gkserver without causing bottlenecks and race conditions.
00114  *
00115  * Revision 1.53  2002/08/05 10:03:47  robertj
00116  * Cosmetic changes to normalise the usage of pragma interface/implementation.
00117  *
00118  * Revision 1.52  2002/08/05 05:17:37  robertj
00119  * Fairly major modifications to support different authentication credentials
00120  *   in ARQ to the logged in ones on RRQ. For both client and server.
00121  * Various other H.235 authentication bugs and anomalies fixed on the way.
00122  *
00123  * Revision 1.51  2002/07/25 10:55:40  robertj
00124  * Changes to allow more granularity in PDU dumps, hex output increasing
00125  *   with increasing trace level.
00126  *
00127  * Revision 1.50  2002/07/11 07:04:12  robertj
00128  * Added build InfoRequest pdu type to RAS.
00129  *
00130  * Revision 1.49  2002/05/29 03:55:17  robertj
00131  * Added protocol version number checking infrastructure, primarily to improve
00132  *   interoperability with stacks that are unforgiving of new features.
00133  *
00134  * Revision 1.48  2002/05/29 00:03:15  robertj
00135  * Fixed unsolicited IRR support in gk client and server,
00136  *   including support for IACK and INAK.
00137  *
00138  * Revision 1.47  2002/05/07 03:18:12  robertj
00139  * Added application info (name/version etc) into registered endpoint data.
00140  *
00141  * Revision 1.46  2002/05/03 09:18:45  robertj
00142  * Added automatic retransmission of RAS responses to retried requests.
00143  *
00144  * Revision 1.45  2002/03/14 07:57:02  robertj
00145  * Added ability to specify alias type in H323SetAliasAddress, if not specified
00146  *   then defaults to previous behaviour, thanks Nils Bokerman.
00147  *
00148  * Revision 1.44  2001/12/15 07:09:56  robertj
00149  * Added functions to get E.164 address from alias address or addresses.
00150  *
00151  * Revision 1.43  2001/12/14 06:38:47  robertj
00152  * Broke out conversion of Q.850 and H.225 release complete codes to
00153  *   OpenH323 call end reasons enum.
00154  *
00155  * Revision 1.42  2001/12/13 10:56:04  robertj
00156  * Added build of request in progress pdu.
00157  *
00158  * Revision 1.41  2001/08/16 07:49:16  robertj
00159  * Changed the H.450 support to be more extensible. Protocol handlers
00160  *   are now in separate classes instead of all in H323Connection.
00161  *
00162  * Revision 1.40  2001/08/10 11:03:49  robertj
00163  * Major changes to H.235 support in RAS to support server.
00164  *
00165  * Revision 1.39  2001/08/06 07:44:52  robertj
00166  * Fixed problems with building without SSL
00167  *
00168  * Revision 1.38  2001/08/06 03:08:11  robertj
00169  * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files.
00170  *
00171  * Revision 1.37  2001/06/14 06:25:13  robertj
00172  * Added further H.225 PDU build functions.
00173  * Moved some functionality from connection to PDU class.
00174  *
00175  * Revision 1.36  2001/06/14 00:45:19  robertj
00176  * Added extra parameters for Q.931 fields, thanks Rani Assaf
00177  *
00178  * Revision 1.35  2001/05/30 23:34:54  robertj
00179  * Added functions to send TCS=0 for transmitter side pause.
00180  *
00181  * Revision 1.34  2001/04/11 03:01:27  robertj
00182  * Added H.450.2 (call transfer), thanks a LOT to Graeme Reid & Norwood Systems
00183  *
00184  * Revision 1.33  2001/03/24 00:34:35  robertj
00185  * Added read/write hook functions so don't have to duplicate code in
00186  *    H323RasH235PDU descendant class of H323RasPDU.
00187  *
00188  * Revision 1.32  2001/03/21 04:52:40  robertj
00189  * Added H.235 security to gatekeepers, thanks Fürbass Franz!
00190  *
00191  * Revision 1.31  2001/02/09 05:16:24  robertj
00192  * Added #pragma interface for GNU C++.
00193  *
00194  * Revision 1.30  2001/01/19 01:20:38  robertj
00195  * Added non-const function to get access to Q.931 PDU in H323SignalPDU.
00196  *
00197  * Revision 1.29  2000/10/04 05:59:09  robertj
00198  * Minor reorganisation of the H.245 secondary channel start up to make it simpler
00199  *    to override its behaviour.
00200  *
00201  * Revision 1.28  2000/09/25 06:47:54  robertj
00202  * Removed use of alias if there is no alias present, ie only have transport address.
00203  *
00204  * Revision 1.27  2000/09/22 01:35:02  robertj
00205  * Added support for handling LID's that only do symmetric codecs.
00206  *
00207  * Revision 1.26  2000/07/15 09:50:49  robertj
00208  * Changed adding of Q.931 party numbers to only occur in SETUP.
00209  *
00210  * Revision 1.25  2000/06/21 08:07:39  robertj
00211  * Added cause/reason to release complete PDU, where relevent.
00212  *
00213  * Revision 1.24  2000/05/23 11:32:27  robertj
00214  * Rewrite of capability table to combine 2 structures into one and move functionality into that class
00215  *    allowing some normalisation of usage across several applications.
00216  * Changed H323Connection so gets a copy of capabilities instead of using endponts, allows adjustments
00217  *    to be done depending on the remote client application.
00218  *
00219  * Revision 1.23  2000/05/08 14:07:26  robertj
00220  * Improved the provision and detection of calling and caller numbers, aliases and hostnames.
00221  *
00222  * Revision 1.22  2000/05/08 05:05:43  robertj
00223  * Fixed bug in H.245 close logical channel timeout, thanks XuPeili.
00224  *
00225  * Revision 1.21  2000/05/02 04:32:24  robertj
00226  * Fixed copyright notice comment.
00227  *
00228  * Revision 1.20  2000/04/10 20:39:30  robertj
00229  * Added support for more sophisticated DTMF and hook flash user indication.
00230  * Added function to extract E164 address from Q.931/H.225 PDU.
00231  *
00232  * Revision 1.19  2000/03/25 02:00:39  robertj
00233  * Added adjustable caller name on connection by connection basis.
00234  *
00235  * Revision 1.18  2000/03/21 01:22:01  robertj
00236  * Fixed incorrect call reference code being used in originated call.
00237  *
00238  * Revision 1.17  1999/12/11 02:20:58  robertj
00239  * Added ability to have multiple aliases on local endpoint.
00240  *
00241  * Revision 1.16  1999/09/10 03:36:48  robertj
00242  * Added simple Q.931 Status response to Q.931 Status Enquiry
00243  *
00244  * Revision 1.15  1999/08/31 12:34:18  robertj
00245  * Added gatekeeper support.
00246  *
00247  * Revision 1.14  1999/08/25 05:07:49  robertj
00248  * File fission (critical mass reached).
00249  *
00250  * Revision 1.13  1999/07/16 06:15:59  robertj
00251  * Corrected semantics for tunnelled master/slave determination in fast start.
00252  *
00253  * Revision 1.12  1999/07/16 02:15:30  robertj
00254  * Fixed more tunneling problems.
00255  *
00256  * Revision 1.11  1999/07/15 14:45:35  robertj
00257  * Added propagation of codec open error to shut down logical channel.
00258  * Fixed control channel start up bug introduced with tunnelling.
00259  *
00260  * Revision 1.10  1999/07/10 02:51:53  robertj
00261  * Added mutexing in H245 procedures.
00262  *
00263  * Revision 1.9  1999/07/09 06:09:49  robertj
00264  * Major implementation. An ENORMOUS amount of stuff added everywhere.
00265  *
00266  * Revision 1.8  1999/06/25 10:25:35  robertj
00267  * Added maintentance of callIdentifier variable in H.225 channel.
00268  *
00269  * Revision 1.7  1999/06/14 05:15:56  robertj
00270  * Changes for using RTP sessions correctly in H323 Logical Channel context
00271  *
00272  * Revision 1.6  1999/06/13 12:41:14  robertj
00273  * Implement logical channel transmitter.
00274  * Fixed H245 connect on receiving call.
00275  *
00276  * Revision 1.5  1999/06/09 05:26:20  robertj
00277  * Major restructuring of classes.
00278  *
00279  * Revision 1.4  1999/06/06 06:06:36  robertj
00280  * Changes for new ASN compiler and v2 protocol ASN files.
00281  *
00282  * Revision 1.3  1999/04/26 06:14:47  craigs
00283  * Initial implementation for RTP decoding and lots of stuff
00284  * As a whole, these changes are called "First Noise"
00285  *
00286  * Revision 1.2  1999/01/16 02:35:04  robertj
00287  * GNi compiler compatibility.
00288  *
00289  * Revision 1.1  1999/01/16 01:30:58  robertj
00290  * Initial revision
00291  *
00292  */
00293 
00294 #ifndef __OPAL_H323PDU_H
00295 #define __OPAL_H323PDU_H
00296 
00297 #ifdef P_USE_PRAGMA
00298 #pragma interface
00299 #endif
00300 
00301 
00302 #include <ptlib/sockets.h>
00303 #include <h323/h323con.h>
00304 #include <h323/transaddr.h>
00305 #include <h323/q931.h>
00306 #include <h323/h235auth.h>
00307 #include <h323/h323trans.h>
00308 #include <asn/h225.h>
00309 #include <asn/h245.h>
00310 
00311 
00312 class H323Connection;
00313 class H323TransportAddress;
00314 class H225_RAS;
00315 class OpalGloballyUniqueID;
00316 
00317 
00318 #define H225_PROTOCOL_VERSION 4
00319 #define H245_PROTOCOL_VERSION 11
00320 
00321 
00323 
00326 class H323SignalPDU : public H225_H323_UserInformation
00327 {
00328   PCLASSINFO(H323SignalPDU, H225_H323_UserInformation);
00329 
00330   public:
00335     H323SignalPDU();
00336 
00339     H225_Setup_UUIE & BuildSetup(
00340       const H323Connection & connection,    
00341       const H323TransportAddress & destAddr 
00342     );
00343 
00346     H225_CallProceeding_UUIE & BuildCallProceeding(
00347       const H323Connection & connection    
00348     );
00349 
00352     H225_Connect_UUIE & BuildConnect(
00353       const H323Connection & connection    
00354     );
00355 
00358     H225_Connect_UUIE & BuildConnect(
00359       const H323Connection & connection,    
00360       const PIPSocket::Address & h245Address, 
00361       WORD port                               
00362     );
00363 
00366     H225_Alerting_UUIE & BuildAlerting(
00367       const H323Connection & connection    
00368     );
00369 
00372     H225_Information_UUIE & BuildInformation(
00373       const H323Connection & connection    
00374     );
00375 
00378     H225_ReleaseComplete_UUIE & BuildReleaseComplete(
00379       const H323Connection & connection    
00380     );
00381 
00384     H225_Facility_UUIE * BuildFacility(
00385       const H323Connection & connection,  
00386       BOOL empty                          
00387     );
00388 
00391     H225_Progress_UUIE & BuildProgress(
00392       const H323Connection & connection    
00393     );
00394 
00397     H225_Status_UUIE & BuildStatus(
00398       const H323Connection & connection    
00399     );
00400 
00403     H225_StatusInquiry_UUIE & BuildStatusInquiry(
00404       const H323Connection & connection    
00405     );
00406 
00409     H225_SetupAcknowledge_UUIE & BuildSetupAcknowledge(
00410       const H323Connection & connection    
00411     );
00412 
00415     H225_Notify_UUIE & BuildNotify(
00416       const H323Connection & connection    
00417     );
00419 
00420 
00425     void PrintOn(
00426       ostream & strm
00427     ) const;
00428 
00431     BOOL Read(
00432       H323Transport & transport   
00433     );
00434 
00437     BOOL Write(
00438       H323Transport & transport   
00439     );
00440 
00443     const Q931 & GetQ931() const { return q931pdu; }
00444 
00447     Q931 & GetQ931() { return q931pdu; }
00448 
00451     void SetQ931(const Q931 & _q931pdu) { q931pdu = _q931pdu; }
00452 
00457     void BuildQ931();
00458 
00463     PString GetSourceAliases(
00464       const H323Transport * transport = NULL  
00465     ) const;
00466 
00471     PString GetDestinationAlias(
00472       BOOL firstAliasOnly = FALSE   
00473     ) const;
00474 
00479     BOOL GetSourceE164(
00480       PString & number    
00481     ) const;
00482 
00487     BOOL GetDestinationE164(
00488       PString & number    
00489     ) const;
00490 
00494     unsigned GetDistinctiveRing() const;
00495 
00500     void SetQ931Fields(
00501       const H323Connection & connection,
00502       BOOL insertPartyNumbers = FALSE,
00503       unsigned plan = 1,
00504       unsigned type = 0,
00505       int presentation = -1,
00506       int screening = -1
00507     );
00508 
00509   protected:
00510     // Even though we generally deal with the H323 protocol (H225) it is
00511     // actually contained within a field of the Q931 protocol.
00512     Q931 q931pdu;
00513 };
00514 
00515 
00517 
00520 class H323ControlPDU : public H245_MultimediaSystemControlMessage
00521 {
00522   PCLASSINFO(H323ControlPDU, H245_MultimediaSystemControlMessage);
00523 
00524   public:
00525     H245_RequestMessage    & Build(H245_RequestMessage   ::Choices request);
00526     H245_ResponseMessage   & Build(H245_ResponseMessage  ::Choices response);
00527     H245_CommandMessage    & Build(H245_CommandMessage   ::Choices command);
00528     H245_IndicationMessage & Build(H245_IndicationMessage::Choices indication);
00529 
00530     H245_MasterSlaveDetermination & BuildMasterSlaveDetermination(
00531       unsigned terminalType,
00532       unsigned statusDeterminationNumber
00533     );
00534     H245_MasterSlaveDeterminationAck & BuildMasterSlaveDeterminationAck(
00535       BOOL isMaster
00536     );
00537     H245_MasterSlaveDeterminationReject & BuildMasterSlaveDeterminationReject(
00538       unsigned cause
00539     );
00540 
00541     H245_TerminalCapabilitySet & BuildTerminalCapabilitySet(
00542       const H323Connection & connection,
00543       unsigned sequenceNumber,
00544       BOOL empty
00545     );
00546     H245_TerminalCapabilitySetAck & BuildTerminalCapabilitySetAck(
00547       unsigned sequenceNumber
00548     );
00549     H245_TerminalCapabilitySetReject & BuildTerminalCapabilitySetReject(
00550       unsigned sequenceNumber,
00551       unsigned cause
00552     );
00553 
00554     H245_OpenLogicalChannel & BuildOpenLogicalChannel(
00555       unsigned forwardLogicalChannelNumber
00556     );
00557     H245_RequestChannelClose & BuildRequestChannelClose(
00558       unsigned channelNumber,
00559       unsigned reason
00560     );
00561     H245_CloseLogicalChannel & BuildCloseLogicalChannel(
00562       unsigned channelNumber
00563     );
00564     H245_OpenLogicalChannelAck & BuildOpenLogicalChannelAck(
00565       unsigned channelNumber
00566     );
00567     H245_OpenLogicalChannelReject & BuildOpenLogicalChannelReject(
00568       unsigned channelNumber,
00569       unsigned cause
00570     );
00571     H245_OpenLogicalChannelConfirm & BuildOpenLogicalChannelConfirm(
00572       unsigned channelNumber
00573     );
00574     H245_CloseLogicalChannelAck & BuildCloseLogicalChannelAck(
00575       unsigned channelNumber
00576     );
00577     H245_RequestChannelCloseAck & BuildRequestChannelCloseAck(
00578       unsigned channelNumber
00579     );
00580     H245_RequestChannelCloseReject & BuildRequestChannelCloseReject(
00581       unsigned channelNumber
00582     );
00583     H245_RequestChannelCloseRelease & BuildRequestChannelCloseRelease(
00584       unsigned channelNumber
00585     );
00586 
00587     H245_RequestMode & BuildRequestMode(
00588       unsigned sequenceNumber
00589     );
00590     H245_RequestModeAck & BuildRequestModeAck(
00591       unsigned sequenceNumber,
00592       unsigned response
00593     );
00594     H245_RequestModeReject & BuildRequestModeReject(
00595       unsigned sequenceNumber,
00596       unsigned cause
00597     );
00598 
00599     H245_RoundTripDelayRequest & BuildRoundTripDelayRequest(
00600       unsigned sequenceNumber
00601     );
00602     H245_RoundTripDelayResponse & BuildRoundTripDelayResponse(
00603       unsigned sequenceNumber
00604     );
00605 
00606     H245_UserInputIndication & BuildUserInputIndication(
00607       const PString & value
00608     );
00609     H245_UserInputIndication & BuildUserInputIndication(
00610       char tone,               
00611       unsigned duration,       
00612       unsigned logicalChannel, 
00613       unsigned rtpTimestamp    
00614     );
00615 
00616     H245_MiscellaneousCommand & BuildMiscellaneousCommand(
00617       unsigned channelNumber,
00618       unsigned type
00619     );
00620 
00621     H245_FunctionNotUnderstood & BuildFunctionNotUnderstood(
00622       const H323ControlPDU & pdu
00623     );
00624 
00625     H245_EndSessionCommand & BuildEndSessionCommand(
00626       unsigned reason
00627     );
00628 };
00629 
00630 
00632 
00635 class H323RasPDU : public H225_RasMessage, public H323TransactionPDU
00636 {
00637   PCLASSINFO(H323RasPDU, H225_RasMessage);
00638 
00639   public:
00640     H323RasPDU();
00641     H323RasPDU(
00642       const H235Authenticators & authenticators
00643     );
00644 
00645     // overrides from PObject
00646     virtual PObject * Clone() const;
00647 
00648     // overrides from H323TransactionPDU
00649     virtual PASN_Object & GetPDU();
00650     virtual PASN_Choice & GetChoice();
00651     virtual const PASN_Object & GetPDU() const;
00652     virtual const PASN_Choice & GetChoice() const;
00653     virtual unsigned GetSequenceNumber() const;
00654     virtual unsigned GetRequestInProgressDelay() const;
00655 #if PTRACING
00656     virtual const char * GetProtocolName() const;
00657 #endif
00658     virtual H323TransactionPDU * ClonePDU() const;
00659     virtual void DeletePDU();
00660 
00661     // new functions
00662     H225_GatekeeperRequest       & BuildGatekeeperRequest(unsigned seqNum);
00663     H225_GatekeeperConfirm       & BuildGatekeeperConfirm(unsigned seqNum);
00664     H225_GatekeeperReject        & BuildGatekeeperReject(unsigned seqNum, unsigned reason = H225_GatekeeperRejectReason::e_undefinedReason);
00665     H225_RegistrationRequest     & BuildRegistrationRequest(unsigned seqNum);
00666     H225_RegistrationConfirm     & BuildRegistrationConfirm(unsigned seqNum);
00667     H225_RegistrationReject      & BuildRegistrationReject(unsigned seqNum, unsigned reason = H225_RegistrationRejectReason::e_undefinedReason);
00668     H225_UnregistrationRequest   & BuildUnregistrationRequest(unsigned seqNum);
00669     H225_UnregistrationConfirm   & BuildUnregistrationConfirm(unsigned seqNum);
00670     H225_UnregistrationReject    & BuildUnregistrationReject(unsigned seqNum, unsigned reason = H225_UnregRejectReason::e_undefinedReason);
00671     H225_LocationRequest         & BuildLocationRequest(unsigned seqNum);
00672     H225_LocationConfirm         & BuildLocationConfirm(unsigned seqNum);
00673     H225_LocationReject          & BuildLocationReject(unsigned seqNum, unsigned reason = H225_LocationRejectReason::e_undefinedReason);
00674     H225_AdmissionRequest        & BuildAdmissionRequest(unsigned seqNum);
00675     H225_AdmissionConfirm        & BuildAdmissionConfirm(unsigned seqNum);
00676     H225_AdmissionReject         & BuildAdmissionReject(unsigned seqNum, unsigned reason = H225_AdmissionRejectReason::e_undefinedReason);
00677     H225_DisengageRequest        & BuildDisengageRequest(unsigned seqNum);
00678     H225_DisengageConfirm        & BuildDisengageConfirm(unsigned seqNum);
00679     H225_DisengageReject         & BuildDisengageReject(unsigned seqNum, unsigned reason = H225_DisengageRejectReason::e_securityDenial);
00680     H225_BandwidthRequest        & BuildBandwidthRequest(unsigned seqNum);
00681     H225_BandwidthConfirm        & BuildBandwidthConfirm(unsigned seqNum, unsigned bandwidth = 0);
00682     H225_BandwidthReject         & BuildBandwidthReject(unsigned seqNum, unsigned reason = H225_BandRejectReason::e_undefinedReason);
00683     H225_InfoRequest             & BuildInfoRequest(unsigned seqNum, unsigned callRef = 0, const OpalGloballyUniqueID * id = NULL);
00684     H225_InfoRequestResponse     & BuildInfoRequestResponse(unsigned seqNum);
00685     H225_InfoRequestAck          & BuildInfoRequestAck(unsigned seqNum);
00686     H225_InfoRequestNak          & BuildInfoRequestNak(unsigned seqNum, unsigned reason = H225_InfoRequestNakReason::e_undefinedReason);
00687     H225_ServiceControlIndication& BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id = NULL);
00688     H225_ServiceControlResponse  & BuildServiceControlResponse(unsigned seqNum);
00689     H225_UnknownMessageResponse  & BuildUnknownMessageResponse(unsigned seqNum);
00690     H225_RequestInProgress       & BuildRequestInProgress(unsigned seqNum, unsigned delay);
00691 };
00692 
00693 
00695 
00696 void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases);
00697 void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00698 void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00699 void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias);
00700 void H323SetAliasAddress(const PString & name, H225_AliasAddress & alias, int tag = -1);
00701 PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases);
00702 PString H323GetAliasAddressString(const H225_AliasAddress & alias);
00703 PString H323GetAliasAddressE164(const H225_AliasAddress & alias);
00704 PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases);
00705 
00706 H323Connection::CallEndReason H323TranslateToCallEndReason(
00707   Q931::CauseValues cause,
00708   const H225_ReleaseCompleteReason & reason
00709 );
00710 Q931::CauseValues H323TranslateFromCallEndReason(
00711   const H323Connection & connection,
00712   H225_ReleaseCompleteReason & rcReason
00713 );
00714 
00715 PString H323GetApplicationInfo(const H225_VendorIdentifier & vendor);
00716 
00717 
00718 #if PTRACING
00719 void H323TraceDumpPDU(
00720   const char * proto,
00721   BOOL writing,
00722   const PBYTEArray & rawData,
00723   const PASN_Object & pdu,
00724   const PASN_Choice & tag1,
00725   unsigned seqNum
00726 );
00727 #else
00728 #define H323TraceDumpPDU(proto, writing, rawData, pdu, tag1, seqNum)
00729 #endif
00730 
00731 
00732 #endif // __OPAL_H323PDU_H
00733 
00734 

Generated on Mon Sep 25 16:19:59 2006 for OPAL by  doxygen 1.4.7