D:/Storage/CVS_Head/h323plus/include/h323pdu.h

00001 /*
00002  * h323pdu.h
00003  *
00004  * H.323 protocol handler
00005  *
00006  * Open H323 Library
00007  *
00008  * Copyright (c) 1998-2000 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 1.3  2007/10/19 19:53:44  shorne
00031  * ported latest Video updates in OpenH323 committed after h323plus initial fork thanks
00032  *  Robert
00033  *
00034  * Revision 1.2  2007/10/16 17:08:01  shorne
00035  * Allow cryptoTokens to be insert in the setup after receiving ARQ
00036  *
00037  * Revision 1.1  2007/08/06 20:50:49  shorne
00038  * First commit of h323plus
00039  *
00040  * Revision 1.75.2.1  2006/12/23 19:08:02  shorne
00041  * Plugin video codecs & sundry
00042  *
00043  * Revision 1.75  2006/07/17 09:52:57  shorne
00044  * Added more support URL alias Addresses
00045  *
00046  * Revision 1.74  2006/06/21 04:53:32  csoutheren
00047  * Tweaked H.245 version 13 updates
00048  *
00049  * Revision 1.73  2006/06/20 05:24:40  csoutheren
00050  * Additional tweaks for H.225v6
00051  *
00052  * Revision 1.72  2006/01/26 03:28:10  shorne
00053  * Caller Authentication added
00054  *
00055  * Revision 1.71  2006/01/20 00:32:24  csoutheren
00056  * First check-in of signalling aggregation code - incomplete and disabled by default
00057  *
00058  * Revision 1.70  2005/11/30 13:05:01  csoutheren
00059  * Changed tags for Doxygen
00060  *
00061  * Revision 1.69  2005/06/30 01:57:39  csoutheren
00062  * Updated to H.245v11
00063  *
00064  * Revision 1.68  2005/03/04 03:21:20  csoutheren
00065  * Added local and remote addresses to all PDU logs to assist in debugging
00066  *
00067  * Revision 1.67  2005/01/24 00:10:48  csoutheren
00068  * Added function to set Q.931 info in PDU, thanks to Paul Nader
00069  *
00070  * Revision 1.66  2004/12/14 06:22:21  csoutheren
00071  * More OSP implementation
00072  *
00073  * Revision 1.65  2003/04/10 09:36:52  robertj
00074  * Added some more functions for converting to alias addresses.
00075  *
00076  * Revision 1.64  2003/04/01 03:11:01  robertj
00077  * Added function to get array of AliasAddress into PStringArray.
00078  *
00079  * Revision 1.63  2003/03/25 04:56:17  robertj
00080  * Fixed issues to do with multiple inheritence in transaction reply cache.
00081  *
00082  * Revision 1.62  2003/03/20 01:51:07  robertj
00083  * More abstraction of H.225 RAS and H.501 protocols transaction handling.
00084  *
00085  * Revision 1.61  2003/03/01 00:23:42  craigs
00086  * New PeerElement implementation
00087  *
00088  * Revision 1.60  2003/02/25 06:48:15  robertj
00089  * More work on PDU transaction abstraction.
00090  *
00091  * Revision 1.59  2003/02/21 05:28:39  craigs
00092  * Factored out code for user with peer elements
00093  *
00094  * Revision 1.58  2003/02/01 13:31:14  robertj
00095  * Changes to support CAT authentication in RAS.
00096  *
00097  * Revision 1.57  2002/11/28 04:41:44  robertj
00098  * Added support for RAS ServiceControlIndication command.
00099  *
00100  * Revision 1.56  2002/09/16 01:14:15  robertj
00101  * Added #define so can select if #pragma interface/implementation is used on
00102  *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
00103  *
00104  * Revision 1.55  2002/09/03 06:19:37  robertj
00105  * Normalised the multi-include header prevention ifdef/define symbol.
00106  *
00107  * Revision 1.54  2002/08/12 05:38:21  robertj
00108  * Changes to the RAS subsystem to support ability to make requests to client
00109  *   from gkserver without causing bottlenecks and race conditions.
00110  *
00111  * Revision 1.53  2002/08/05 10:03:47  robertj
00112  * Cosmetic changes to normalise the usage of pragma interface/implementation.
00113  *
00114  * Revision 1.52  2002/08/05 05:17:37  robertj
00115  * Fairly major modifications to support different authentication credentials
00116  *   in ARQ to the logged in ones on RRQ. For both client and server.
00117  * Various other H.235 authentication bugs and anomalies fixed on the way.
00118  *
00119  * Revision 1.51  2002/07/25 10:55:40  robertj
00120  * Changes to allow more granularity in PDU dumps, hex output increasing
00121  *   with increasing trace level.
00122  *
00123  * Revision 1.50  2002/07/11 07:04:12  robertj
00124  * Added build InfoRequest pdu type to RAS.
00125  *
00126  * Revision 1.49  2002/05/29 03:55:17  robertj
00127  * Added protocol version number checking infrastructure, primarily to improve
00128  *   interoperability with stacks that are unforgiving of new features.
00129  *
00130  * Revision 1.48  2002/05/29 00:03:15  robertj
00131  * Fixed unsolicited IRR support in gk client and server,
00132  *   including support for IACK and INAK.
00133  *
00134  * Revision 1.47  2002/05/07 03:18:12  robertj
00135  * Added application info (name/version etc) into registered endpoint data.
00136  *
00137  * Revision 1.46  2002/05/03 09:18:45  robertj
00138  * Added automatic retransmission of RAS responses to retried requests.
00139  *
00140  * Revision 1.45  2002/03/14 07:57:02  robertj
00141  * Added ability to specify alias type in H323SetAliasAddress, if not specified
00142  *   then defaults to previous behaviour, thanks Nils Bokerman.
00143  *
00144  * Revision 1.44  2001/12/15 07:09:56  robertj
00145  * Added functions to get E.164 address from alias address or addresses.
00146  *
00147  * Revision 1.43  2001/12/14 06:38:47  robertj
00148  * Broke out conversion of Q.850 and H.225 release complete codes to
00149  *   OpenH323 call end reasons enum.
00150  *
00151  * Revision 1.42  2001/12/13 10:56:04  robertj
00152  * Added build of request in progress pdu.
00153  *
00154  * Revision 1.41  2001/08/16 07:49:16  robertj
00155  * Changed the H.450 support to be more extensible. Protocol handlers
00156  *   are now in separate classes instead of all in H323Connection.
00157  *
00158  * Revision 1.40  2001/08/10 11:03:49  robertj
00159  * Major changes to H.235 support in RAS to support server.
00160  *
00161  * Revision 1.39  2001/08/06 07:44:52  robertj
00162  * Fixed problems with building without SSL
00163  *
00164  * Revision 1.38  2001/08/06 03:08:11  robertj
00165  * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files.
00166  *
00167  * Revision 1.37  2001/06/14 06:25:13  robertj
00168  * Added further H.225 PDU build functions.
00169  * Moved some functionality from connection to PDU class.
00170  *
00171  * Revision 1.36  2001/06/14 00:45:19  robertj
00172  * Added extra parameters for Q.931 fields, thanks Rani Assaf
00173  *
00174  * Revision 1.35  2001/05/30 23:34:54  robertj
00175  * Added functions to send TCS=0 for transmitter side pause.
00176  *
00177  * Revision 1.34  2001/04/11 03:01:27  robertj
00178  * Added H.450.2 (call transfer), thanks a LOT to Graeme Reid & Norwood Systems
00179  *
00180  * Revision 1.33  2001/03/24 00:34:35  robertj
00181  * Added read/write hook functions so don't have to duplicate code in
00182  *    H323RasH235PDU descendant class of H323RasPDU.
00183  *
00184  * Revision 1.32  2001/03/21 04:52:40  robertj
00185  * Added H.235 security to gatekeepers, thanks Fürbass Franz!
00186  *
00187  * Revision 1.31  2001/02/09 05:16:24  robertj
00188  * Added #pragma interface for GNU C++.
00189  *
00190  * Revision 1.30  2001/01/19 01:20:38  robertj
00191  * Added non-const function to get access to Q.931 PDU in H323SignalPDU.
00192  *
00193  * Revision 1.29  2000/10/04 05:59:09  robertj
00194  * Minor reorganisation of the H.245 secondary channel start up to make it simpler
00195  *    to override its behaviour.
00196  *
00197  * Revision 1.28  2000/09/25 06:47:54  robertj
00198  * Removed use of alias if there is no alias present, ie only have transport address.
00199  *
00200  * Revision 1.27  2000/09/22 01:35:02  robertj
00201  * Added support for handling LID's that only do symmetric codecs.
00202  *
00203  * Revision 1.26  2000/07/15 09:50:49  robertj
00204  * Changed adding of Q.931 party numbers to only occur in SETUP.
00205  *
00206  * Revision 1.25  2000/06/21 08:07:39  robertj
00207  * Added cause/reason to release complete PDU, where relevent.
00208  *
00209  * Revision 1.24  2000/05/23 11:32:27  robertj
00210  * Rewrite of capability table to combine 2 structures into one and move functionality into that class
00211  *    allowing some normalisation of usage across several applications.
00212  * Changed H323Connection so gets a copy of capabilities instead of using endponts, allows adjustments
00213  *    to be done depending on the remote client application.
00214  *
00215  * Revision 1.23  2000/05/08 14:07:26  robertj
00216  * Improved the provision and detection of calling and caller numbers, aliases and hostnames.
00217  *
00218  * Revision 1.22  2000/05/08 05:05:43  robertj
00219  * Fixed bug in H.245 close logical channel timeout, thanks XuPeili.
00220  *
00221  * Revision 1.21  2000/05/02 04:32:24  robertj
00222  * Fixed copyright notice comment.
00223  *
00224  * Revision 1.20  2000/04/10 20:39:30  robertj
00225  * Added support for more sophisticated DTMF and hook flash user indication.
00226  * Added function to extract E164 address from Q.931/H.225 PDU.
00227  *
00228  * Revision 1.19  2000/03/25 02:00:39  robertj
00229  * Added adjustable caller name on connection by connection basis.
00230  *
00231  * Revision 1.18  2000/03/21 01:22:01  robertj
00232  * Fixed incorrect call reference code being used in originated call.
00233  *
00234  * Revision 1.17  1999/12/11 02:20:58  robertj
00235  * Added ability to have multiple aliases on local endpoint.
00236  *
00237  * Revision 1.16  1999/09/10 03:36:48  robertj
00238  * Added simple Q.931 Status response to Q.931 Status Enquiry
00239  *
00240  * Revision 1.15  1999/08/31 12:34:18  robertj
00241  * Added gatekeeper support.
00242  *
00243  * Revision 1.14  1999/08/25 05:07:49  robertj
00244  * File fission (critical mass reached).
00245  *
00246  * Revision 1.13  1999/07/16 06:15:59  robertj
00247  * Corrected semantics for tunnelled master/slave determination in fast start.
00248  *
00249  * Revision 1.12  1999/07/16 02:15:30  robertj
00250  * Fixed more tunneling problems.
00251  *
00252  * Revision 1.11  1999/07/15 14:45:35  robertj
00253  * Added propagation of codec open error to shut down logical channel.
00254  * Fixed control channel start up bug introduced with tunnelling.
00255  *
00256  * Revision 1.10  1999/07/10 02:51:53  robertj
00257  * Added mutexing in H245 procedures.
00258  *
00259  * Revision 1.9  1999/07/09 06:09:49  robertj
00260  * Major implementation. An ENORMOUS amount of stuff added everywhere.
00261  *
00262  * Revision 1.8  1999/06/25 10:25:35  robertj
00263  * Added maintentance of callIdentifier variable in H.225 channel.
00264  *
00265  * Revision 1.7  1999/06/14 05:15:56  robertj
00266  * Changes for using RTP sessions correctly in H323 Logical Channel context
00267  *
00268  * Revision 1.6  1999/06/13 12:41:14  robertj
00269  * Implement logical channel transmitter.
00270  * Fixed H245 connect on receiving call.
00271  *
00272  * Revision 1.5  1999/06/09 05:26:20  robertj
00273  * Major restructuring of classes.
00274  *
00275  * Revision 1.4  1999/06/06 06:06:36  robertj
00276  * Changes for new ASN compiler and v2 protocol ASN files.
00277  *
00278  * Revision 1.3  1999/04/26 06:14:47  craigs
00279  * Initial implementation for RTP decoding and lots of stuff
00280  * As a whole, these changes are called "First Noise"
00281  *
00282  * Revision 1.2  1999/01/16 02:35:04  robertj
00283  * GNi compiler compatibility.
00284  *
00285  * Revision 1.1  1999/01/16 01:30:58  robertj
00286  * Initial revision
00287  *
00288  */
00289 
00290 #ifndef __OPAL_H323PDU_H
00291 #define __OPAL_H323PDU_H
00292 
00293 #ifdef P_USE_PRAGMA
00294 #pragma interface
00295 #endif
00296 
00297 
00298 #include <ptlib/sockets.h>
00299 #include "h323con.h"
00300 #include "transports.h"
00301 #include "q931.h"
00302 #include "h225.h"
00303 #include "h245.h"
00304 #include "h323trans.h"
00305 
00306 
00307 class H225_RAS;
00308 
00309 
00310 #define H225_PROTOCOL_VERSION 6
00311 #define H245_PROTOCOL_VERSION 13
00312 
00313 
00315 
00318 class H323SignalPDU : public H225_H323_UserInformation
00319 {
00320   PCLASSINFO(H323SignalPDU, H225_H323_UserInformation);
00321 
00322   public:
00327     H323SignalPDU();
00328 
00331     H225_Setup_UUIE & BuildSetup(
00332       const H323Connection & connection,    
00333       const H323TransportAddress & destAddr 
00334     );
00335 
00338     H225_CallProceeding_UUIE & BuildCallProceeding(
00339       const H323Connection & connection    
00340     );
00341 
00344     H225_Connect_UUIE & BuildConnect(
00345       const H323Connection & connection    
00346     );
00347 
00350     H225_Connect_UUIE & BuildConnect(
00351       const H323Connection & connection,    
00352       const PIPSocket::Address & h245Address, 
00353       WORD port                               
00354     );
00355 
00358     H225_Alerting_UUIE & BuildAlerting(
00359       const H323Connection & connection    
00360     );
00361 
00364     H225_Information_UUIE & BuildInformation(
00365       const H323Connection & connection    
00366     );
00367 
00370     H225_ReleaseComplete_UUIE & BuildReleaseComplete(
00371       const H323Connection & connection    
00372     );
00373 
00376     H225_Facility_UUIE * BuildFacility(
00377       const H323Connection & connection,  
00378       BOOL empty,                         
00379           unsigned reason = H225_FacilityReason::e_undefinedReason 
00380     );
00381 
00384     H225_Progress_UUIE & BuildProgress(
00385       const H323Connection & connection    
00386     );
00387 
00390     H225_Status_UUIE & BuildStatus(
00391       const H323Connection & connection    
00392     );
00393 
00396     H225_StatusInquiry_UUIE & BuildStatusInquiry(
00397       const H323Connection & connection    
00398     );
00399 
00402     H225_SetupAcknowledge_UUIE & BuildSetupAcknowledge(
00403       const H323Connection & connection    
00404     );
00405 
00408     H225_Notify_UUIE & BuildNotify(
00409       const H323Connection & connection    
00410     );
00412 
00413 
00418     void PrintOn(
00419       ostream & strm
00420     ) const;
00421 
00424     BOOL Read(
00425       H323Transport & transport   
00426     );
00427 
00430     BOOL ProcessReadData(
00431       H323Transport & transport,   
00432       const PBYTEArray & rawData
00433     );
00434 
00437     BOOL Write(
00438       H323Transport & transport,   
00439       H323Connection & connection  
00440     );
00441 
00444     const Q931 & GetQ931() const { return q931pdu; }
00445 
00448     Q931 & GetQ931() { return q931pdu; }
00449 
00452     void SetQ931(const Q931 & _q931pdu) { q931pdu = _q931pdu; }
00453 
00458     void BuildQ931();
00459 
00464     PString GetSourceAliases(
00465       const H323Transport * transport = NULL  
00466     ) const;
00467 
00468 
00472     PStringArray GetSourceAliasNames() const;
00473 
00478     PString GetSourceURL() const;
00479 
00484     PString GetDestinationAlias(
00485       BOOL firstAliasOnly = FALSE   
00486     ) const;
00487 
00492     BOOL GetSourceE164(
00493       PString & number    
00494     ) const;
00495 
00500     BOOL GetDestinationE164(
00501       PString & number    
00502     ) const;
00503 
00507     unsigned GetDistinctiveRing() const;
00508 
00513     void SetQ931Fields(
00514       const H323Connection & connection,
00515       BOOL insertPartyNumbers = FALSE,
00516       unsigned plan = 1,
00517       unsigned type = 0,
00518       int presentation = -1,
00519       int screening = -1
00520     );
00521 
00522 #ifdef H323_H460
00523 
00527         void InsertH460Setup(const H323Connection & connection, H225_Setup_UUIE & setup);
00528 #endif
00529 
00530 #ifndef DISABLE_CALLAUTH
00531 
00535     void InsertCryptoTokensSetup(const H323Connection & connection, H225_Setup_UUIE & setup);
00536 #endif
00537 
00538 
00539   protected:
00540     // Even though we generally deal with the H323 protocol (H225) it is
00541     // actually contained within a field of the Q931 protocol.
00542     Q931 q931pdu;
00543 };
00544 
00545 
00547 
00550 class H323ControlPDU : public H245_MultimediaSystemControlMessage
00551 {
00552   PCLASSINFO(H323ControlPDU, H245_MultimediaSystemControlMessage);
00553 
00554   public:
00555     H245_RequestMessage    & Build(H245_RequestMessage   ::Choices request);
00556     H245_ResponseMessage   & Build(H245_ResponseMessage  ::Choices response);
00557     H245_CommandMessage    & Build(H245_CommandMessage   ::Choices command);
00558     H245_IndicationMessage & Build(H245_IndicationMessage::Choices indication);
00559 
00560     H245_MasterSlaveDetermination & BuildMasterSlaveDetermination(
00561       unsigned terminalType,
00562       unsigned statusDeterminationNumber
00563     );
00564     H245_MasterSlaveDeterminationAck & BuildMasterSlaveDeterminationAck(
00565       BOOL isMaster
00566     );
00567     H245_MasterSlaveDeterminationReject & BuildMasterSlaveDeterminationReject(
00568       unsigned cause
00569     );
00570 
00571     H245_TerminalCapabilitySet & BuildTerminalCapabilitySet(
00572       const H323Connection & connection,
00573       unsigned sequenceNumber,
00574       BOOL empty
00575     );
00576     H245_TerminalCapabilitySetAck & BuildTerminalCapabilitySetAck(
00577       unsigned sequenceNumber
00578     );
00579     H245_TerminalCapabilitySetReject & BuildTerminalCapabilitySetReject(
00580       unsigned sequenceNumber,
00581       unsigned cause
00582     );
00583 
00584     H245_OpenLogicalChannel & BuildOpenLogicalChannel(
00585       unsigned forwardLogicalChannelNumber
00586     );
00587     H245_RequestChannelClose & BuildRequestChannelClose(
00588       unsigned channelNumber,
00589       unsigned reason
00590     );
00591     H245_CloseLogicalChannel & BuildCloseLogicalChannel(
00592       unsigned channelNumber
00593     );
00594     H245_OpenLogicalChannelAck & BuildOpenLogicalChannelAck(
00595       unsigned channelNumber
00596     );
00597     H245_OpenLogicalChannelReject & BuildOpenLogicalChannelReject(
00598       unsigned channelNumber,
00599       unsigned cause
00600     );
00601     H245_OpenLogicalChannelConfirm & BuildOpenLogicalChannelConfirm(
00602       unsigned channelNumber
00603     );
00604     H245_CloseLogicalChannelAck & BuildCloseLogicalChannelAck(
00605       unsigned channelNumber
00606     );
00607     H245_RequestChannelCloseAck & BuildRequestChannelCloseAck(
00608       unsigned channelNumber
00609     );
00610     H245_RequestChannelCloseReject & BuildRequestChannelCloseReject(
00611       unsigned channelNumber
00612     );
00613     H245_RequestChannelCloseRelease & BuildRequestChannelCloseRelease(
00614       unsigned channelNumber
00615     );
00616 
00617     H245_RequestMode & BuildRequestMode(
00618       unsigned sequenceNumber
00619     );
00620     H245_RequestModeAck & BuildRequestModeAck(
00621       unsigned sequenceNumber,
00622       unsigned response
00623     );
00624     H245_RequestModeReject & BuildRequestModeReject(
00625       unsigned sequenceNumber,
00626       unsigned cause
00627     );
00628 
00629     H245_RoundTripDelayRequest & BuildRoundTripDelayRequest(
00630       unsigned sequenceNumber
00631     );
00632     H245_RoundTripDelayResponse & BuildRoundTripDelayResponse(
00633       unsigned sequenceNumber
00634     );
00635 
00636     H245_UserInputIndication & BuildUserInputIndication(
00637       const PString & value
00638     );
00639     H245_UserInputIndication & BuildUserInputIndication(
00640       char tone,               
00641       unsigned duration,       
00642       unsigned logicalChannel, 
00643       unsigned rtpTimestamp    
00644     );
00645 
00646     H245_FunctionNotUnderstood & BuildFunctionNotUnderstood(
00647       const H323ControlPDU & pdu
00648     );
00649 
00650     H245_EndSessionCommand & BuildEndSessionCommand(
00651       unsigned reason
00652     );
00653 };
00654 
00655 
00657 
00660 class H323RasPDU : public H225_RasMessage, public H323TransactionPDU
00661 {
00662   PCLASSINFO(H323RasPDU, H225_RasMessage);
00663 
00664   public:
00665     H323RasPDU();
00666     H323RasPDU(
00667       const H235Authenticators & authenticators
00668     );
00669 
00670     // overrides from PObject
00671     virtual PObject * Clone() const;
00672 
00673     // overrides from H323TransactionPDU
00674     virtual PASN_Object & GetPDU();
00675     virtual PASN_Choice & GetChoice();
00676     virtual const PASN_Object & GetPDU() const;
00677     virtual const PASN_Choice & GetChoice() const;
00678     virtual unsigned GetSequenceNumber() const;
00679     virtual unsigned GetRequestInProgressDelay() const;
00680 #if PTRACING
00681     virtual const char * GetProtocolName() const;
00682 #endif
00683     virtual H323TransactionPDU * ClonePDU() const;
00684     virtual void DeletePDU();
00685 
00686     // new functions
00687     H225_GatekeeperRequest       & BuildGatekeeperRequest(unsigned seqNum);
00688     H225_GatekeeperConfirm       & BuildGatekeeperConfirm(unsigned seqNum);
00689     H225_GatekeeperReject        & BuildGatekeeperReject(unsigned seqNum, unsigned reason = H225_GatekeeperRejectReason::e_undefinedReason);
00690     H225_RegistrationRequest     & BuildRegistrationRequest(unsigned seqNum);
00691     H225_RegistrationConfirm     & BuildRegistrationConfirm(unsigned seqNum);
00692     H225_RegistrationReject      & BuildRegistrationReject(unsigned seqNum, unsigned reason = H225_RegistrationRejectReason::e_undefinedReason);
00693     H225_UnregistrationRequest   & BuildUnregistrationRequest(unsigned seqNum);
00694     H225_UnregistrationConfirm   & BuildUnregistrationConfirm(unsigned seqNum);
00695     H225_UnregistrationReject    & BuildUnregistrationReject(unsigned seqNum, unsigned reason = H225_UnregRejectReason::e_undefinedReason);
00696     H225_LocationRequest         & BuildLocationRequest(unsigned seqNum);
00697     H225_LocationConfirm         & BuildLocationConfirm(unsigned seqNum);
00698     H225_LocationReject          & BuildLocationReject(unsigned seqNum, unsigned reason = H225_LocationRejectReason::e_undefinedReason);
00699     H225_AdmissionRequest        & BuildAdmissionRequest(unsigned seqNum);
00700     H225_AdmissionConfirm        & BuildAdmissionConfirm(unsigned seqNum);
00701     H225_AdmissionReject         & BuildAdmissionReject(unsigned seqNum, unsigned reason = H225_AdmissionRejectReason::e_undefinedReason);
00702     H225_DisengageRequest        & BuildDisengageRequest(unsigned seqNum);
00703     H225_DisengageConfirm        & BuildDisengageConfirm(unsigned seqNum);
00704     H225_DisengageReject         & BuildDisengageReject(unsigned seqNum, unsigned reason = H225_DisengageRejectReason::e_securityDenial);
00705     H225_BandwidthRequest        & BuildBandwidthRequest(unsigned seqNum);
00706     H225_BandwidthConfirm        & BuildBandwidthConfirm(unsigned seqNum, unsigned bandwidth = 0);
00707     H225_BandwidthReject         & BuildBandwidthReject(unsigned seqNum, unsigned reason = H225_BandRejectReason::e_undefinedReason);
00708     H225_InfoRequest             & BuildInfoRequest(unsigned seqNum, unsigned callRef = 0, const OpalGloballyUniqueID * id = NULL);
00709     H225_InfoRequestResponse     & BuildInfoRequestResponse(unsigned seqNum);
00710     H225_InfoRequestAck          & BuildInfoRequestAck(unsigned seqNum);
00711     H225_InfoRequestNak          & BuildInfoRequestNak(unsigned seqNum, unsigned reason = H225_InfoRequestNakReason::e_undefinedReason);
00712     H225_ServiceControlIndication& BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id = NULL);
00713     H225_ServiceControlResponse  & BuildServiceControlResponse(unsigned seqNum);
00714     H225_UnknownMessageResponse  & BuildUnknownMessageResponse(unsigned seqNum);
00715     H225_RequestInProgress       & BuildRequestInProgress(unsigned seqNum, unsigned delay);
00716 };
00717 
00718 
00720 
00721 void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases);
00722 void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00723 void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00724 void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias);
00725 void H323SetAliasAddress(const PString & name, H225_AliasAddress & alias, int tag = -1);
00726 PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases);
00727 PString H323GetAliasAddressString(const H225_AliasAddress & alias);
00728 PString H323GetAliasAddressE164(const H225_AliasAddress & alias);
00729 PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases);
00730 
00731 H323Connection::CallEndReason H323TranslateToCallEndReason(
00732   Q931::CauseValues cause,
00733   const H225_ReleaseCompleteReason & reason
00734 );
00735 Q931::CauseValues H323TranslateFromCallEndReason(
00736   H323Connection::CallEndReason endReason,
00737   H225_ReleaseCompleteReason & reason
00738 );
00739 Q931::CauseValues H323TranslateFromCallEndReason(
00740   const H323Connection & connection,
00741   H225_ReleaseCompleteReason & rcReason
00742 );
00743 
00744 PString H323GetApplicationInfo(const H225_VendorIdentifier & vendor);
00745 
00746 BOOL H323SetRTPPacketization(
00747   H245_RTPPayloadType & rtpPacketization,
00748   const OpalMediaFormat & mediaFormat,
00749   RTP_DataFrame::PayloadTypes payloadType
00750 );
00751 BOOL H323GetRTPPacketization(
00752   OpalMediaFormat & mediaFormat,
00753   const H245_RTPPayloadType & rtpPacketization
00754 );
00755 
00756 #if PTRACING
00757 void H323TraceDumpPDU(
00758   const char * proto,
00759   BOOL writing,
00760   const PBYTEArray & rawData,
00761   const PASN_Object & pdu,
00762   const PASN_Choice & tag1,
00763   unsigned seqNum,
00764   const H323TransportAddress & locAddr,
00765   const H323TransportAddress & remAddr
00766 );
00767 #else
00768 #define H323TraceDumpPDU(proto, writing, rawData, pdu, tag1, seqNum, locAddr, remAddr)
00769 #endif
00770 
00771 
00772 #endif // __OPAL_H323PDU_H
00773 
00774 

Generated on Thu Oct 25 13:42:27 2007 for h323plus by  doxygen 1.5.2