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 / h225ras.h < prev    next >
C/C++ Source or Header  |  2003-03-31  |  20KB  |  440 lines

  1. /*
  2.  * h225ras.h
  3.  *
  4.  * H.225 RAS protocol handler
  5.  *
  6.  * Open H323 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.  * Portions of this code were written with the assisance of funding from
  25.  * iFace, Inc. http://www.iface.com
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: h225ras.h,v $
  30.  * Revision 1.35  2003/04/01 01:05:39  robertj
  31.  * Split service control handlers from H.225 RAS header.
  32.  *
  33.  * Revision 1.34  2003/03/20 01:51:07  robertj
  34.  * More abstraction of H.225 RAS and H.501 protocols transaction handling.
  35.  *
  36.  * Revision 1.33  2003/03/01 00:23:42  craigs
  37.  * New PeerElement implementation
  38.  *
  39.  * Revision 1.32  2003/02/21 07:23:18  robertj
  40.  * Fixed up some comments
  41.  *
  42.  * Revision 1.31  2003/02/21 05:28:39  craigs
  43.  * Factored out code for user with peer elements
  44.  *
  45.  * Revision 1.30  2003/02/01 13:31:14  robertj
  46.  * Changes to support CAT authentication in RAS.
  47.  *
  48.  * Revision 1.29  2002/11/28 04:41:44  robertj
  49.  * Added support for RAS ServiceControlIndication command.
  50.  *
  51.  * Revision 1.28  2002/11/27 06:54:52  robertj
  52.  * Added Service Control Session management as per Annex K/H.323 via RAS
  53.  *   only at this stage.
  54.  * Added H.248 ASN and very primitive infrastructure for linking into the
  55.  *   Service Control Session management system.
  56.  * Added basic infrastructure for Annex K/H.323 HTTP transport system.
  57.  * Added Call Credit Service Control to display account balances.
  58.  *
  59.  * Revision 1.27  2002/11/21 22:26:09  robertj
  60.  * Changed promiscuous mode to be three way. Fixes race condition in gkserver
  61.  *   which can cause crashes or more PDUs to be sent to the wrong place.
  62.  *
  63.  * Revision 1.26  2002/11/21 07:21:46  robertj
  64.  * Improvements to alternate gatekeeper client code, thanks Kevin Bouchard
  65.  *
  66.  * Revision 1.25  2002/11/11 07:20:08  robertj
  67.  * Minor clean up of API for doing RAS requests suing authentication.
  68.  *
  69.  * Revision 1.24  2002/11/04 11:52:08  robertj
  70.  * Fixed comment
  71.  *
  72.  * Revision 1.23  2002/10/17 02:09:01  robertj
  73.  * Backed out previous change for including PDU tag, doesn't work!
  74.  *
  75.  * Revision 1.22  2002/10/16 03:40:12  robertj
  76.  * Added PDU tag to cache look up key.
  77.  *
  78.  * Revision 1.21  2002/09/19 09:15:56  robertj
  79.  * Fixed problem with making (and assuring with multi-threading) IRQ and DRQ
  80.  *   requests are sent to the correct endpoint address, thanks Martijn Roest.
  81.  *
  82.  * Revision 1.20  2002/09/16 01:14:15  robertj
  83.  * Added #define so can select if #pragma interface/implementation is used on
  84.  *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
  85.  *
  86.  * Revision 1.19  2002/09/03 05:37:17  robertj
  87.  * Normalised the multi-include header prevention ifdef/define symbol.
  88.  * Added RAS port constants to RAS clas name space.
  89.  *
  90.  * Revision 1.18  2002/08/12 06:29:55  robertj
  91.  * Fixed problem with cached responses being aged before the RIP time which
  92.  *   made retries by client appear as "new" requests when they were not.
  93.  *
  94.  * Revision 1.17  2002/08/12 05:38:20  robertj
  95.  * Changes to the RAS subsystem to support ability to make requests to client
  96.  *   from gkserver without causing bottlenecks and race conditions.
  97.  *
  98.  * Revision 1.16  2002/08/05 10:03:47  robertj
  99.  * Cosmetic changes to normalise the usage of pragma interface/implementation.
  100.  *
  101.  * Revision 1.15  2002/08/05 05:17:37  robertj
  102.  * Fairly major modifications to support different authentication credentials
  103.  *   in ARQ to the logged in ones on RRQ. For both client and server.
  104.  * Various other H.235 authentication bugs and anomalies fixed on the way.
  105.  *
  106.  * Revision 1.14  2002/07/29 11:36:08  robertj
  107.  * Fixed race condition if RIP is followed very quickly by actual response.
  108.  *
  109.  * Revision 1.13  2002/06/26 03:47:45  robertj
  110.  * Added support for alternate gatekeepers.
  111.  *
  112.  * Revision 1.12  2002/06/21 02:52:44  robertj
  113.  * Fixed problem with double checking H.235 hashing, this causes failure as
  114.  *   the authenticator thinks it is a replay attack.
  115.  *
  116.  * Revision 1.11  2002/06/12 03:49:56  robertj
  117.  * Added PrintOn function for trace output of RAS channel.
  118.  *
  119.  * Revision 1.10  2002/05/03 09:18:45  robertj
  120.  * Added automatic retransmission of RAS responses to retried requests.
  121.  *
  122.  * Revision 1.9  2001/10/09 08:04:59  robertj
  123.  * Fixed unregistration so still unregisters if gk goes offline, thanks Chris Purvis
  124.  *
  125.  * Revision 1.8  2001/09/18 10:36:54  robertj
  126.  * Allowed multiple overlapping requests in RAS channel.
  127.  *
  128.  * Revision 1.7  2001/09/12 03:12:36  robertj
  129.  * Added ability to disable the checking of RAS responses against
  130.  *   security authenticators.
  131.  * Fixed bug in having multiple authentications if have a retry.
  132.  *
  133.  * Revision 1.6  2001/08/10 11:03:49  robertj
  134.  * Major changes to H.235 support in RAS to support server.
  135.  *
  136.  * Revision 1.5  2001/08/06 07:44:52  robertj
  137.  * Fixed problems with building without SSL
  138.  *
  139.  * Revision 1.4  2001/08/06 03:18:35  robertj
  140.  * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files.
  141.  * Improved access to H.235 secure RAS functionality.
  142.  * Changes to H.323 secure RAS contexts to help use with gk server.
  143.  *
  144.  * Revision 1.3  2001/06/25 01:06:40  robertj
  145.  * Fixed resolution of RAS timeout so not rounded down to second.
  146.  *
  147.  * Revision 1.2  2001/06/22 00:21:10  robertj
  148.  * Fixed bug in H.225 RAS protocol with 16 versus 32 bit sequence numbers.
  149.  *
  150.  * Revision 1.1  2001/06/18 06:23:47  robertj
  151.  * Split raw H.225 RAS protocol out of gatekeeper client class.
  152.  *
  153.  */
  154.  
  155. #ifndef __OPAL_H225RAS_H
  156. #define __OPAL_H225RAS_H
  157.  
  158. #ifdef P_USE_PRAGMA
  159. #pragma interface
  160. #endif
  161.  
  162.  
  163. #include "transports.h"
  164. #include "h235auth.h"
  165. #include "h323trans.h"
  166. #include "svcctrl.h"
  167.  
  168.  
  169. class PASN_Sequence;
  170. class PASN_Choice;
  171.  
  172. class H225_GatekeeperRequest;
  173. class H225_GatekeeperConfirm;
  174. class H225_GatekeeperReject;
  175. class H225_RegistrationRequest;
  176. class H225_RegistrationConfirm;
  177. class H225_RegistrationReject;
  178. class H225_UnregistrationRequest;
  179. class H225_UnregistrationConfirm;
  180. class H225_UnregistrationReject;
  181. class H225_AdmissionRequest;
  182. class H225_AdmissionConfirm;
  183. class H225_AdmissionReject;
  184. class H225_BandwidthRequest;
  185. class H225_BandwidthConfirm;
  186. class H225_BandwidthReject;
  187. class H225_DisengageRequest;
  188. class H225_DisengageConfirm;
  189. class H225_DisengageReject;
  190. class H225_LocationRequest;
  191. class H225_LocationConfirm;
  192. class H225_LocationReject;
  193. class H225_InfoRequest;
  194. class H225_InfoRequestResponse;
  195. class H225_NonStandardMessage;
  196. class H225_UnknownMessageResponse;
  197. class H225_RequestInProgress;
  198. class H225_ResourcesAvailableIndicate;
  199. class H225_ResourcesAvailableConfirm;
  200. class H225_InfoRequestAck;
  201. class H225_InfoRequestNak;
  202. class H225_ArrayOf_CryptoH323Token;
  203.  
  204. class H323EndPoint;
  205. class H323RasPDU;
  206.  
  207.  
  208.  
  209. ///////////////////////////////////////////////////////////////////////////////
  210.  
  211. /**This class embodies the H.225.0 RAS protocol to/from gatekeepers.
  212.   */
  213. class H225_RAS : public H323Transactor
  214. {
  215.   PCLASSINFO(H225_RAS, H323Transactor);
  216.   public:
  217.   /**@name Construction */
  218.   //@{
  219.     enum {
  220.       DefaultRasMulticastPort = 1718,
  221.       DefaultRasUdpPort = 1719
  222.     };
  223.  
  224.     /**Create a new protocol handler.
  225.      */
  226.     H225_RAS(
  227.       H323EndPoint & endpoint,  /// Endpoint gatekeeper is associated with.
  228.       H323Transport * transport /// Transport over which gatekeepers communicates.
  229.     );
  230.  
  231.     /**Destroy protocol handler.
  232.      */
  233.     ~H225_RAS();
  234.   //@}
  235.  
  236.   /**@name Overrides from PObject */
  237.   //@{
  238.     /**Print the name of the gatekeeper.
  239.       */
  240.     void PrintOn(
  241.       ostream & strm    /// Stream to print to.
  242.     ) const;
  243.   //@}
  244.  
  245.   /**@name Overrides from H323Transactor */
  246.   //@{
  247.     /**Create the transaction PDU for reading.
  248.       */
  249.     virtual H323TransactionPDU * CreateTransactionPDU() const;
  250.  
  251.     /**Handle and dispatch a transaction PDU
  252.       */
  253.     virtual BOOL HandleTransaction(
  254.       const PASN_Object & rawPDU
  255.     );
  256.  
  257.     /**Allow for modifications to PDU on send.
  258.       */
  259.     virtual void OnSendingPDU(
  260.       PASN_Object & rawPDU
  261.     );
  262.   //@}
  263.  
  264.   /**@name Protocol callbacks */
  265.   //@{
  266.     virtual void OnSendGatekeeperRequest(H323RasPDU &, H225_GatekeeperRequest &);
  267.     virtual void OnSendGatekeeperConfirm(H323RasPDU &, H225_GatekeeperConfirm &);
  268.     virtual void OnSendGatekeeperReject(H323RasPDU &, H225_GatekeeperReject &);
  269.     virtual void OnSendGatekeeperRequest(H225_GatekeeperRequest &);
  270.     virtual void OnSendGatekeeperConfirm(H225_GatekeeperConfirm &);
  271.     virtual void OnSendGatekeeperReject(H225_GatekeeperReject &);
  272.     virtual BOOL OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest &);
  273.     virtual BOOL OnReceiveGatekeeperConfirm(const H323RasPDU &, const H225_GatekeeperConfirm &);
  274.     virtual BOOL OnReceiveGatekeeperReject(const H323RasPDU &, const H225_GatekeeperReject &);
  275.     virtual BOOL OnReceiveGatekeeperRequest(const H225_GatekeeperRequest &);
  276.     virtual BOOL OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm &);
  277.     virtual BOOL OnReceiveGatekeeperReject(const H225_GatekeeperReject &);
  278.  
  279.     virtual void OnSendRegistrationRequest(H323RasPDU &, H225_RegistrationRequest &);
  280.     virtual void OnSendRegistrationConfirm(H323RasPDU &, H225_RegistrationConfirm &);
  281.     virtual void OnSendRegistrationReject(H323RasPDU &, H225_RegistrationReject &);
  282.     virtual void OnSendRegistrationRequest(H225_RegistrationRequest &);
  283.     virtual void OnSendRegistrationConfirm(H225_RegistrationConfirm &);
  284.     virtual void OnSendRegistrationReject(H225_RegistrationReject &);
  285.     virtual BOOL OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest &);
  286.     virtual BOOL OnReceiveRegistrationConfirm(const H323RasPDU &, const H225_RegistrationConfirm &);
  287.     virtual BOOL OnReceiveRegistrationReject(const H323RasPDU &, const H225_RegistrationReject &);
  288.     virtual BOOL OnReceiveRegistrationRequest(const H225_RegistrationRequest &);
  289.     virtual BOOL OnReceiveRegistrationConfirm(const H225_RegistrationConfirm &);
  290.     virtual BOOL OnReceiveRegistrationReject(const H225_RegistrationReject &);
  291.  
  292.     virtual void OnSendUnregistrationRequest(H323RasPDU &, H225_UnregistrationRequest &);
  293.     virtual void OnSendUnregistrationConfirm(H323RasPDU &, H225_UnregistrationConfirm &);
  294.     virtual void OnSendUnregistrationReject(H323RasPDU &, H225_UnregistrationReject &);
  295.     virtual void OnSendUnregistrationRequest(H225_UnregistrationRequest &);
  296.     virtual void OnSendUnregistrationConfirm(H225_UnregistrationConfirm &);
  297.     virtual void OnSendUnregistrationReject(H225_UnregistrationReject &);
  298.     virtual BOOL OnReceiveUnregistrationRequest(const H323RasPDU &, const H225_UnregistrationRequest &);
  299.     virtual BOOL OnReceiveUnregistrationConfirm(const H323RasPDU &, const H225_UnregistrationConfirm &);
  300.     virtual BOOL OnReceiveUnregistrationReject(const H323RasPDU &, const H225_UnregistrationReject &);
  301.     virtual BOOL OnReceiveUnregistrationRequest(const H225_UnregistrationRequest &);
  302.     virtual BOOL OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm &);
  303.     virtual BOOL OnReceiveUnregistrationReject(const H225_UnregistrationReject &);
  304.  
  305.     virtual void OnSendAdmissionRequest(H323RasPDU &, H225_AdmissionRequest &);
  306.     virtual void OnSendAdmissionConfirm(H323RasPDU &, H225_AdmissionConfirm &);
  307.     virtual void OnSendAdmissionReject(H323RasPDU &, H225_AdmissionReject &);
  308.     virtual void OnSendAdmissionRequest(H225_AdmissionRequest &);
  309.     virtual void OnSendAdmissionConfirm(H225_AdmissionConfirm &);
  310.     virtual void OnSendAdmissionReject(H225_AdmissionReject &);
  311.     virtual BOOL OnReceiveAdmissionRequest(const H323RasPDU &, const H225_AdmissionRequest &);
  312.     virtual BOOL OnReceiveAdmissionConfirm(const H323RasPDU &, const H225_AdmissionConfirm &);
  313.     virtual BOOL OnReceiveAdmissionReject(const H323RasPDU &, const H225_AdmissionReject &);
  314.     virtual BOOL OnReceiveAdmissionRequest(const H225_AdmissionRequest &);
  315.     virtual BOOL OnReceiveAdmissionConfirm(const H225_AdmissionConfirm &);
  316.     virtual BOOL OnReceiveAdmissionReject(const H225_AdmissionReject &);
  317.  
  318.     virtual void OnSendBandwidthRequest(H323RasPDU &, H225_BandwidthRequest &);
  319.     virtual void OnSendBandwidthConfirm(H323RasPDU &, H225_BandwidthConfirm &);
  320.     virtual void OnSendBandwidthReject(H323RasPDU &, H225_BandwidthReject &);
  321.     virtual void OnSendBandwidthRequest(H225_BandwidthRequest &);
  322.     virtual void OnSendBandwidthConfirm(H225_BandwidthConfirm &);
  323.     virtual void OnSendBandwidthReject(H225_BandwidthReject &);
  324.     virtual BOOL OnReceiveBandwidthRequest(const H323RasPDU &, const H225_BandwidthRequest &);
  325.     virtual BOOL OnReceiveBandwidthConfirm(const H323RasPDU &, const H225_BandwidthConfirm &);
  326.     virtual BOOL OnReceiveBandwidthReject(const H323RasPDU &, const H225_BandwidthReject &);
  327.     virtual BOOL OnReceiveBandwidthRequest(const H225_BandwidthRequest &);
  328.     virtual BOOL OnReceiveBandwidthConfirm(const H225_BandwidthConfirm &);
  329.     virtual BOOL OnReceiveBandwidthReject(const H225_BandwidthReject &);
  330.  
  331.     virtual void OnSendDisengageRequest(H323RasPDU &, H225_DisengageRequest &);
  332.     virtual void OnSendDisengageConfirm(H323RasPDU &, H225_DisengageConfirm &);
  333.     virtual void OnSendDisengageReject(H323RasPDU &, H225_DisengageReject &);
  334.     virtual void OnSendDisengageRequest(H225_DisengageRequest &);
  335.     virtual void OnSendDisengageConfirm(H225_DisengageConfirm &);
  336.     virtual void OnSendDisengageReject(H225_DisengageReject &);
  337.     virtual BOOL OnReceiveDisengageRequest(const H323RasPDU &, const H225_DisengageRequest &);
  338.     virtual BOOL OnReceiveDisengageConfirm(const H323RasPDU &, const H225_DisengageConfirm &);
  339.     virtual BOOL OnReceiveDisengageReject(const H323RasPDU &, const H225_DisengageReject &);
  340.     virtual BOOL OnReceiveDisengageRequest(const H225_DisengageRequest &);
  341.     virtual BOOL OnReceiveDisengageConfirm(const H225_DisengageConfirm &);
  342.     virtual BOOL OnReceiveDisengageReject(const H225_DisengageReject &);
  343.  
  344.     virtual void OnSendLocationRequest(H323RasPDU &, H225_LocationRequest &);
  345.     virtual void OnSendLocationConfirm(H323RasPDU &, H225_LocationConfirm &);
  346.     virtual void OnSendLocationReject(H323RasPDU &, H225_LocationReject &);
  347.     virtual void OnSendLocationRequest(H225_LocationRequest &);
  348.     virtual void OnSendLocationConfirm(H225_LocationConfirm &);
  349.     virtual void OnSendLocationReject(H225_LocationReject &);
  350.     virtual BOOL OnReceiveLocationRequest(const H323RasPDU &, const H225_LocationRequest &);
  351.     virtual BOOL OnReceiveLocationConfirm(const H323RasPDU &, const H225_LocationConfirm &);
  352.     virtual BOOL OnReceiveLocationReject(const H323RasPDU &, const H225_LocationReject &);
  353.     virtual BOOL OnReceiveLocationRequest(const H225_LocationRequest &);
  354.     virtual BOOL OnReceiveLocationConfirm(const H225_LocationConfirm &);
  355.     virtual BOOL OnReceiveLocationReject(const H225_LocationReject &);
  356.  
  357.     virtual void OnSendInfoRequest(H323RasPDU &, H225_InfoRequest &);
  358.     virtual void OnSendInfoRequestAck(H323RasPDU &, H225_InfoRequestAck &);
  359.     virtual void OnSendInfoRequestNak(H323RasPDU &, H225_InfoRequestNak &);
  360.     virtual void OnSendInfoRequestResponse(H323RasPDU &, H225_InfoRequestResponse &);
  361.     virtual void OnSendInfoRequest(H225_InfoRequest &);
  362.     virtual void OnSendInfoRequestAck(H225_InfoRequestAck &);
  363.     virtual void OnSendInfoRequestNak(H225_InfoRequestNak &);
  364.     virtual void OnSendInfoRequestResponse(H225_InfoRequestResponse &);
  365.     virtual BOOL OnReceiveInfoRequest(const H323RasPDU &, const H225_InfoRequest &);
  366.     virtual BOOL OnReceiveInfoRequestAck(const H323RasPDU &, const H225_InfoRequestAck &);
  367.     virtual BOOL OnReceiveInfoRequestNak(const H323RasPDU &, const H225_InfoRequestNak &);
  368.     virtual BOOL OnReceiveInfoRequestResponse(const H323RasPDU &, const H225_InfoRequestResponse &);
  369.     virtual BOOL OnReceiveInfoRequest(const H225_InfoRequest &);
  370.     virtual BOOL OnReceiveInfoRequestAck(const H225_InfoRequestAck &);
  371.     virtual BOOL OnReceiveInfoRequestNak(const H225_InfoRequestNak &);
  372.     virtual BOOL OnReceiveInfoRequestResponse(const H225_InfoRequestResponse &);
  373.  
  374.     virtual void OnSendResourcesAvailableIndicate(H323RasPDU &, H225_ResourcesAvailableIndicate &);
  375.     virtual void OnSendResourcesAvailableConfirm(H323RasPDU &, H225_ResourcesAvailableConfirm &);
  376.     virtual void OnSendResourcesAvailableIndicate(H225_ResourcesAvailableIndicate &);
  377.     virtual void OnSendResourcesAvailableConfirm(H225_ResourcesAvailableConfirm &);
  378.     virtual BOOL OnReceiveResourcesAvailableIndicate(const H323RasPDU &, const H225_ResourcesAvailableIndicate &);
  379.     virtual BOOL OnReceiveResourcesAvailableConfirm(const H323RasPDU &, const H225_ResourcesAvailableConfirm &);
  380.     virtual BOOL OnReceiveResourcesAvailableIndicate(const H225_ResourcesAvailableIndicate &);
  381.     virtual BOOL OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm &);
  382.  
  383.     virtual void OnSendServiceControlIndication(H323RasPDU &, H225_ServiceControlIndication &);
  384.     virtual void OnSendServiceControlResponse(H323RasPDU &, H225_ServiceControlResponse &);
  385.     virtual void OnSendServiceControlIndication(H225_ServiceControlIndication &);
  386.     virtual void OnSendServiceControlResponse(H225_ServiceControlResponse &);
  387.     virtual BOOL OnReceiveServiceControlIndication(const H323RasPDU &, const H225_ServiceControlIndication &);
  388.     virtual BOOL OnReceiveServiceControlResponse(const H323RasPDU &, const H225_ServiceControlResponse &);
  389.     virtual BOOL OnReceiveServiceControlIndication(const H225_ServiceControlIndication &);
  390.     virtual BOOL OnReceiveServiceControlResponse(const H225_ServiceControlResponse &);
  391.  
  392.     virtual void OnSendNonStandardMessage(H323RasPDU &, H225_NonStandardMessage &);
  393.     virtual void OnSendNonStandardMessage(H225_NonStandardMessage &);
  394.     virtual BOOL OnReceiveNonStandardMessage(const H323RasPDU &, const H225_NonStandardMessage &);
  395.     virtual BOOL OnReceiveNonStandardMessage(const H225_NonStandardMessage &);
  396.  
  397.     virtual void OnSendUnknownMessageResponse(H323RasPDU &, H225_UnknownMessageResponse &);
  398.     virtual void OnSendUnknownMessageResponse(H225_UnknownMessageResponse &);
  399.     virtual BOOL OnReceiveUnknownMessageResponse(const H323RasPDU &, const H225_UnknownMessageResponse &);
  400.     virtual BOOL OnReceiveUnknownMessageResponse(const H225_UnknownMessageResponse &);
  401.  
  402.     virtual void OnSendRequestInProgress(H323RasPDU &, H225_RequestInProgress &);
  403.     virtual void OnSendRequestInProgress(H225_RequestInProgress &);
  404.     virtual BOOL OnReceiveRequestInProgress(const H323RasPDU &, const H225_RequestInProgress &);
  405.     virtual BOOL OnReceiveRequestInProgress(const H225_RequestInProgress &);
  406.  
  407.  
  408.     /**Handle unknown PDU type.
  409.       */
  410.     virtual BOOL OnReceiveUnknown(
  411.       const H323RasPDU & pdu  /// PDU that was not handled.
  412.     );
  413.   //@}
  414.  
  415.   /**@name Member variable access */
  416.   //@{
  417.     /**Get the gatekeeper identifer.
  418.        For clients at least one successful registration must have been
  419.        achieved for this field to be filling in.
  420.       */
  421.     const PString & GetIdentifier() const { return gatekeeperIdentifier; }
  422.  
  423.     /**Set the gatekeeper identifer.
  424.        For servers this allows the identifier to be set and provided to all
  425.        remote clients.
  426.       */
  427.     void SetIdentifier(const PString & id) { gatekeeperIdentifier = id; }
  428.   //@}
  429.  
  430.   protected:
  431.     // Option variables
  432.     PString gatekeeperIdentifier;
  433. };
  434.  
  435.  
  436. #endif // __OPAL_H225RAS_H
  437.  
  438.  
  439. /////////////////////////////////////////////////////////////////////////////
  440.