Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

h225ras.h

Go to the documentation of this file.
00001 /*
00002  * h225ras.h
00003  *
00004  * H.225 RAS protocol handler
00005  *
00006  * Open H323 Library
00007  *
00008  * Copyright (c) 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  * iFace, Inc. http://www.iface.com
00026  *
00027  * Contributor(s): ______________________________________.
00028  *
00029  * $Log: h225ras.h,v $
00030  * Revision 1.37  2004/09/07 22:50:55  rjongbloed
00031  * Changed usage of template function as MSVC6 will not compile it.
00032  *
00033  * Revision 1.36  2004/09/03 01:06:09  csoutheren
00034  * Added initial hooks for H.460 GEF
00035  * Thanks to Simon Horne and ISVO (Asia) Pte Ltd. for this contribution
00036  *
00037  * Revision 1.35  2003/04/01 01:05:39  robertj
00038  * Split service control handlers from H.225 RAS header.
00039  *
00040  * Revision 1.34  2003/03/20 01:51:07  robertj
00041  * More abstraction of H.225 RAS and H.501 protocols transaction handling.
00042  *
00043  * Revision 1.33  2003/03/01 00:23:42  craigs
00044  * New PeerElement implementation
00045  *
00046  * Revision 1.32  2003/02/21 07:23:18  robertj
00047  * Fixed up some comments
00048  *
00049  * Revision 1.31  2003/02/21 05:28:39  craigs
00050  * Factored out code for user with peer elements
00051  *
00052  * Revision 1.30  2003/02/01 13:31:14  robertj
00053  * Changes to support CAT authentication in RAS.
00054  *
00055  * Revision 1.29  2002/11/28 04:41:44  robertj
00056  * Added support for RAS ServiceControlIndication command.
00057  *
00058  * Revision 1.28  2002/11/27 06:54:52  robertj
00059  * Added Service Control Session management as per Annex K/H.323 via RAS
00060  *   only at this stage.
00061  * Added H.248 ASN and very primitive infrastructure for linking into the
00062  *   Service Control Session management system.
00063  * Added basic infrastructure for Annex K/H.323 HTTP transport system.
00064  * Added Call Credit Service Control to display account balances.
00065  *
00066  * Revision 1.27  2002/11/21 22:26:09  robertj
00067  * Changed promiscuous mode to be three way. Fixes race condition in gkserver
00068  *   which can cause crashes or more PDUs to be sent to the wrong place.
00069  *
00070  * Revision 1.26  2002/11/21 07:21:46  robertj
00071  * Improvements to alternate gatekeeper client code, thanks Kevin Bouchard
00072  *
00073  * Revision 1.25  2002/11/11 07:20:08  robertj
00074  * Minor clean up of API for doing RAS requests suing authentication.
00075  *
00076  * Revision 1.24  2002/11/04 11:52:08  robertj
00077  * Fixed comment
00078  *
00079  * Revision 1.23  2002/10/17 02:09:01  robertj
00080  * Backed out previous change for including PDU tag, doesn't work!
00081  *
00082  * Revision 1.22  2002/10/16 03:40:12  robertj
00083  * Added PDU tag to cache look up key.
00084  *
00085  * Revision 1.21  2002/09/19 09:15:56  robertj
00086  * Fixed problem with making (and assuring with multi-threading) IRQ and DRQ
00087  *   requests are sent to the correct endpoint address, thanks Martijn Roest.
00088  *
00089  * Revision 1.20  2002/09/16 01:14:15  robertj
00090  * Added #define so can select if #pragma interface/implementation is used on
00091  *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
00092  *
00093  * Revision 1.19  2002/09/03 05:37:17  robertj
00094  * Normalised the multi-include header prevention ifdef/define symbol.
00095  * Added RAS port constants to RAS clas name space.
00096  *
00097  * Revision 1.18  2002/08/12 06:29:55  robertj
00098  * Fixed problem with cached responses being aged before the RIP time which
00099  *   made retries by client appear as "new" requests when they were not.
00100  *
00101  * Revision 1.17  2002/08/12 05:38:20  robertj
00102  * Changes to the RAS subsystem to support ability to make requests to client
00103  *   from gkserver without causing bottlenecks and race conditions.
00104  *
00105  * Revision 1.16  2002/08/05 10:03:47  robertj
00106  * Cosmetic changes to normalise the usage of pragma interface/implementation.
00107  *
00108  * Revision 1.15  2002/08/05 05:17:37  robertj
00109  * Fairly major modifications to support different authentication credentials
00110  *   in ARQ to the logged in ones on RRQ. For both client and server.
00111  * Various other H.235 authentication bugs and anomalies fixed on the way.
00112  *
00113  * Revision 1.14  2002/07/29 11:36:08  robertj
00114  * Fixed race condition if RIP is followed very quickly by actual response.
00115  *
00116  * Revision 1.13  2002/06/26 03:47:45  robertj
00117  * Added support for alternate gatekeepers.
00118  *
00119  * Revision 1.12  2002/06/21 02:52:44  robertj
00120  * Fixed problem with double checking H.235 hashing, this causes failure as
00121  *   the authenticator thinks it is a replay attack.
00122  *
00123  * Revision 1.11  2002/06/12 03:49:56  robertj
00124  * Added PrintOn function for trace output of RAS channel.
00125  *
00126  * Revision 1.10  2002/05/03 09:18:45  robertj
00127  * Added automatic retransmission of RAS responses to retried requests.
00128  *
00129  * Revision 1.9  2001/10/09 08:04:59  robertj
00130  * Fixed unregistration so still unregisters if gk goes offline, thanks Chris Purvis
00131  *
00132  * Revision 1.8  2001/09/18 10:36:54  robertj
00133  * Allowed multiple overlapping requests in RAS channel.
00134  *
00135  * Revision 1.7  2001/09/12 03:12:36  robertj
00136  * Added ability to disable the checking of RAS responses against
00137  *   security authenticators.
00138  * Fixed bug in having multiple authentications if have a retry.
00139  *
00140  * Revision 1.6  2001/08/10 11:03:49  robertj
00141  * Major changes to H.235 support in RAS to support server.
00142  *
00143  * Revision 1.5  2001/08/06 07:44:52  robertj
00144  * Fixed problems with building without SSL
00145  *
00146  * Revision 1.4  2001/08/06 03:18:35  robertj
00147  * Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files.
00148  * Improved access to H.235 secure RAS functionality.
00149  * Changes to H.323 secure RAS contexts to help use with gk server.
00150  *
00151  * Revision 1.3  2001/06/25 01:06:40  robertj
00152  * Fixed resolution of RAS timeout so not rounded down to second.
00153  *
00154  * Revision 1.2  2001/06/22 00:21:10  robertj
00155  * Fixed bug in H.225 RAS protocol with 16 versus 32 bit sequence numbers.
00156  *
00157  * Revision 1.1  2001/06/18 06:23:47  robertj
00158  * Split raw H.225 RAS protocol out of gatekeeper client class.
00159  *
00160  */
00161 
00162 #ifndef __OPAL_H225RAS_H
00163 #define __OPAL_H225RAS_H
00164 
00165 #ifdef P_USE_PRAGMA
00166 #pragma interface
00167 #endif
00168 
00169 
00170 #include "transports.h"
00171 #include "h235auth.h"
00172 #include "h323trans.h"
00173 #include "svcctrl.h"
00174 
00175 
00176 class PASN_Sequence;
00177 class PASN_Choice;
00178 
00179 class H225_GatekeeperRequest;
00180 class H225_GatekeeperConfirm;
00181 class H225_GatekeeperReject;
00182 class H225_RegistrationRequest;
00183 class H225_RegistrationConfirm;
00184 class H225_RegistrationReject;
00185 class H225_UnregistrationRequest;
00186 class H225_UnregistrationConfirm;
00187 class H225_UnregistrationReject;
00188 class H225_AdmissionRequest;
00189 class H225_AdmissionConfirm;
00190 class H225_AdmissionReject;
00191 class H225_BandwidthRequest;
00192 class H225_BandwidthConfirm;
00193 class H225_BandwidthReject;
00194 class H225_DisengageRequest;
00195 class H225_DisengageConfirm;
00196 class H225_DisengageReject;
00197 class H225_LocationRequest;
00198 class H225_LocationConfirm;
00199 class H225_LocationReject;
00200 class H225_InfoRequest;
00201 class H225_InfoRequestResponse;
00202 class H225_NonStandardMessage;
00203 class H225_UnknownMessageResponse;
00204 class H225_RequestInProgress;
00205 class H225_ResourcesAvailableIndicate;
00206 class H225_ResourcesAvailableConfirm;
00207 class H225_InfoRequestAck;
00208 class H225_InfoRequestNak;
00209 class H225_ArrayOf_CryptoH323Token;
00210 class H225_FeatureSet;
00211 
00212 class H323EndPoint;
00213 class H323RasPDU;
00214 
00215 
00216 
00218 
00221 class H225_RAS : public H323Transactor
00222 {
00223   PCLASSINFO(H225_RAS, H323Transactor);
00224   public:
00227     enum {
00228       DefaultRasMulticastPort = 1718,
00229       DefaultRasUdpPort = 1719
00230     };
00231 
00234     H225_RAS(
00235       H323EndPoint & endpoint,  
00236       H323Transport * transport 
00237     );
00238 
00241     ~H225_RAS();
00243 
00248     void PrintOn(
00249       ostream & strm    
00250     ) const;
00252 
00257     virtual H323TransactionPDU * CreateTransactionPDU() const;
00258 
00261     virtual BOOL HandleTransaction(
00262       const PASN_Object & rawPDU
00263     );
00264 
00267     virtual void OnSendingPDU(
00268       PASN_Object & rawPDU
00269     );
00271 
00274     virtual void OnSendGatekeeperRequest(H323RasPDU &, H225_GatekeeperRequest &);
00275     virtual void OnSendGatekeeperConfirm(H323RasPDU &, H225_GatekeeperConfirm &);
00276     virtual void OnSendGatekeeperReject(H323RasPDU &, H225_GatekeeperReject &);
00277     virtual void OnSendGatekeeperRequest(H225_GatekeeperRequest &);
00278     virtual void OnSendGatekeeperConfirm(H225_GatekeeperConfirm &);
00279     virtual void OnSendGatekeeperReject(H225_GatekeeperReject &);
00280     virtual BOOL OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest &);
00281     virtual BOOL OnReceiveGatekeeperConfirm(const H323RasPDU &, const H225_GatekeeperConfirm &);
00282     virtual BOOL OnReceiveGatekeeperReject(const H323RasPDU &, const H225_GatekeeperReject &);
00283     virtual BOOL OnReceiveGatekeeperRequest(const H225_GatekeeperRequest &);
00284     virtual BOOL OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm &);
00285     virtual BOOL OnReceiveGatekeeperReject(const H225_GatekeeperReject &);
00286 
00287     virtual void OnSendRegistrationRequest(H323RasPDU &, H225_RegistrationRequest &);
00288     virtual void OnSendRegistrationConfirm(H323RasPDU &, H225_RegistrationConfirm &);
00289     virtual void OnSendRegistrationReject(H323RasPDU &, H225_RegistrationReject &);
00290     virtual void OnSendRegistrationRequest(H225_RegistrationRequest &);
00291     virtual void OnSendRegistrationConfirm(H225_RegistrationConfirm &);
00292     virtual void OnSendRegistrationReject(H225_RegistrationReject &);
00293     virtual BOOL OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest &);
00294     virtual BOOL OnReceiveRegistrationConfirm(const H323RasPDU &, const H225_RegistrationConfirm &);
00295     virtual BOOL OnReceiveRegistrationReject(const H323RasPDU &, const H225_RegistrationReject &);
00296     virtual BOOL OnReceiveRegistrationRequest(const H225_RegistrationRequest &);
00297     virtual BOOL OnReceiveRegistrationConfirm(const H225_RegistrationConfirm &);
00298     virtual BOOL OnReceiveRegistrationReject(const H225_RegistrationReject &);
00299 
00300     virtual void OnSendUnregistrationRequest(H323RasPDU &, H225_UnregistrationRequest &);
00301     virtual void OnSendUnregistrationConfirm(H323RasPDU &, H225_UnregistrationConfirm &);
00302     virtual void OnSendUnregistrationReject(H323RasPDU &, H225_UnregistrationReject &);
00303     virtual void OnSendUnregistrationRequest(H225_UnregistrationRequest &);
00304     virtual void OnSendUnregistrationConfirm(H225_UnregistrationConfirm &);
00305     virtual void OnSendUnregistrationReject(H225_UnregistrationReject &);
00306     virtual BOOL OnReceiveUnregistrationRequest(const H323RasPDU &, const H225_UnregistrationRequest &);
00307     virtual BOOL OnReceiveUnregistrationConfirm(const H323RasPDU &, const H225_UnregistrationConfirm &);
00308     virtual BOOL OnReceiveUnregistrationReject(const H323RasPDU &, const H225_UnregistrationReject &);
00309     virtual BOOL OnReceiveUnregistrationRequest(const H225_UnregistrationRequest &);
00310     virtual BOOL OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm &);
00311     virtual BOOL OnReceiveUnregistrationReject(const H225_UnregistrationReject &);
00312 
00313     virtual void OnSendAdmissionRequest(H323RasPDU &, H225_AdmissionRequest &);
00314     virtual void OnSendAdmissionConfirm(H323RasPDU &, H225_AdmissionConfirm &);
00315     virtual void OnSendAdmissionReject(H323RasPDU &, H225_AdmissionReject &);
00316     virtual void OnSendAdmissionRequest(H225_AdmissionRequest &);
00317     virtual void OnSendAdmissionConfirm(H225_AdmissionConfirm &);
00318     virtual void OnSendAdmissionReject(H225_AdmissionReject &);
00319     virtual BOOL OnReceiveAdmissionRequest(const H323RasPDU &, const H225_AdmissionRequest &);
00320     virtual BOOL OnReceiveAdmissionConfirm(const H323RasPDU &, const H225_AdmissionConfirm &);
00321     virtual BOOL OnReceiveAdmissionReject(const H323RasPDU &, const H225_AdmissionReject &);
00322     virtual BOOL OnReceiveAdmissionRequest(const H225_AdmissionRequest &);
00323     virtual BOOL OnReceiveAdmissionConfirm(const H225_AdmissionConfirm &);
00324     virtual BOOL OnReceiveAdmissionReject(const H225_AdmissionReject &);
00325 
00326     virtual void OnSendBandwidthRequest(H323RasPDU &, H225_BandwidthRequest &);
00327     virtual void OnSendBandwidthConfirm(H323RasPDU &, H225_BandwidthConfirm &);
00328     virtual void OnSendBandwidthReject(H323RasPDU &, H225_BandwidthReject &);
00329     virtual void OnSendBandwidthRequest(H225_BandwidthRequest &);
00330     virtual void OnSendBandwidthConfirm(H225_BandwidthConfirm &);
00331     virtual void OnSendBandwidthReject(H225_BandwidthReject &);
00332     virtual BOOL OnReceiveBandwidthRequest(const H323RasPDU &, const H225_BandwidthRequest &);
00333     virtual BOOL OnReceiveBandwidthConfirm(const H323RasPDU &, const H225_BandwidthConfirm &);
00334     virtual BOOL OnReceiveBandwidthReject(const H323RasPDU &, const H225_BandwidthReject &);
00335     virtual BOOL OnReceiveBandwidthRequest(const H225_BandwidthRequest &);
00336     virtual BOOL OnReceiveBandwidthConfirm(const H225_BandwidthConfirm &);
00337     virtual BOOL OnReceiveBandwidthReject(const H225_BandwidthReject &);
00338 
00339     virtual void OnSendDisengageRequest(H323RasPDU &, H225_DisengageRequest &);
00340     virtual void OnSendDisengageConfirm(H323RasPDU &, H225_DisengageConfirm &);
00341     virtual void OnSendDisengageReject(H323RasPDU &, H225_DisengageReject &);
00342     virtual void OnSendDisengageRequest(H225_DisengageRequest &);
00343     virtual void OnSendDisengageConfirm(H225_DisengageConfirm &);
00344     virtual void OnSendDisengageReject(H225_DisengageReject &);
00345     virtual BOOL OnReceiveDisengageRequest(const H323RasPDU &, const H225_DisengageRequest &);
00346     virtual BOOL OnReceiveDisengageConfirm(const H323RasPDU &, const H225_DisengageConfirm &);
00347     virtual BOOL OnReceiveDisengageReject(const H323RasPDU &, const H225_DisengageReject &);
00348     virtual BOOL OnReceiveDisengageRequest(const H225_DisengageRequest &);
00349     virtual BOOL OnReceiveDisengageConfirm(const H225_DisengageConfirm &);
00350     virtual BOOL OnReceiveDisengageReject(const H225_DisengageReject &);
00351 
00352     virtual void OnSendLocationRequest(H323RasPDU &, H225_LocationRequest &);
00353     virtual void OnSendLocationConfirm(H323RasPDU &, H225_LocationConfirm &);
00354     virtual void OnSendLocationReject(H323RasPDU &, H225_LocationReject &);
00355     virtual void OnSendLocationRequest(H225_LocationRequest &);
00356     virtual void OnSendLocationConfirm(H225_LocationConfirm &);
00357     virtual void OnSendLocationReject(H225_LocationReject &);
00358     virtual BOOL OnReceiveLocationRequest(const H323RasPDU &, const H225_LocationRequest &);
00359     virtual BOOL OnReceiveLocationConfirm(const H323RasPDU &, const H225_LocationConfirm &);
00360     virtual BOOL OnReceiveLocationReject(const H323RasPDU &, const H225_LocationReject &);
00361     virtual BOOL OnReceiveLocationRequest(const H225_LocationRequest &);
00362     virtual BOOL OnReceiveLocationConfirm(const H225_LocationConfirm &);
00363     virtual BOOL OnReceiveLocationReject(const H225_LocationReject &);
00364 
00365     virtual void OnSendInfoRequest(H323RasPDU &, H225_InfoRequest &);
00366     virtual void OnSendInfoRequestAck(H323RasPDU &, H225_InfoRequestAck &);
00367     virtual void OnSendInfoRequestNak(H323RasPDU &, H225_InfoRequestNak &);
00368     virtual void OnSendInfoRequestResponse(H323RasPDU &, H225_InfoRequestResponse &);
00369     virtual void OnSendInfoRequest(H225_InfoRequest &);
00370     virtual void OnSendInfoRequestAck(H225_InfoRequestAck &);
00371     virtual void OnSendInfoRequestNak(H225_InfoRequestNak &);
00372     virtual void OnSendInfoRequestResponse(H225_InfoRequestResponse &);
00373     virtual BOOL OnReceiveInfoRequest(const H323RasPDU &, const H225_InfoRequest &);
00374     virtual BOOL OnReceiveInfoRequestAck(const H323RasPDU &, const H225_InfoRequestAck &);
00375     virtual BOOL OnReceiveInfoRequestNak(const H323RasPDU &, const H225_InfoRequestNak &);
00376     virtual BOOL OnReceiveInfoRequestResponse(const H323RasPDU &, const H225_InfoRequestResponse &);
00377     virtual BOOL OnReceiveInfoRequest(const H225_InfoRequest &);
00378     virtual BOOL OnReceiveInfoRequestAck(const H225_InfoRequestAck &);
00379     virtual BOOL OnReceiveInfoRequestNak(const H225_InfoRequestNak &);
00380     virtual BOOL OnReceiveInfoRequestResponse(const H225_InfoRequestResponse &);
00381 
00382     virtual void OnSendResourcesAvailableIndicate(H323RasPDU &, H225_ResourcesAvailableIndicate &);
00383     virtual void OnSendResourcesAvailableConfirm(H323RasPDU &, H225_ResourcesAvailableConfirm &);
00384     virtual void OnSendResourcesAvailableIndicate(H225_ResourcesAvailableIndicate &);
00385     virtual void OnSendResourcesAvailableConfirm(H225_ResourcesAvailableConfirm &);
00386     virtual BOOL OnReceiveResourcesAvailableIndicate(const H323RasPDU &, const H225_ResourcesAvailableIndicate &);
00387     virtual BOOL OnReceiveResourcesAvailableConfirm(const H323RasPDU &, const H225_ResourcesAvailableConfirm &);
00388     virtual BOOL OnReceiveResourcesAvailableIndicate(const H225_ResourcesAvailableIndicate &);
00389     virtual BOOL OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm &);
00390 
00391     virtual void OnSendServiceControlIndication(H323RasPDU &, H225_ServiceControlIndication &);
00392     virtual void OnSendServiceControlResponse(H323RasPDU &, H225_ServiceControlResponse &);
00393     virtual void OnSendServiceControlIndication(H225_ServiceControlIndication &);
00394     virtual void OnSendServiceControlResponse(H225_ServiceControlResponse &);
00395     virtual BOOL OnReceiveServiceControlIndication(const H323RasPDU &, const H225_ServiceControlIndication &);
00396     virtual BOOL OnReceiveServiceControlResponse(const H323RasPDU &, const H225_ServiceControlResponse &);
00397     virtual BOOL OnReceiveServiceControlIndication(const H225_ServiceControlIndication &);
00398     virtual BOOL OnReceiveServiceControlResponse(const H225_ServiceControlResponse &);
00399 
00400     virtual void OnSendNonStandardMessage(H323RasPDU &, H225_NonStandardMessage &);
00401     virtual void OnSendNonStandardMessage(H225_NonStandardMessage &);
00402     virtual BOOL OnReceiveNonStandardMessage(const H323RasPDU &, const H225_NonStandardMessage &);
00403     virtual BOOL OnReceiveNonStandardMessage(const H225_NonStandardMessage &);
00404 
00405     virtual void OnSendUnknownMessageResponse(H323RasPDU &, H225_UnknownMessageResponse &);
00406     virtual void OnSendUnknownMessageResponse(H225_UnknownMessageResponse &);
00407     virtual BOOL OnReceiveUnknownMessageResponse(const H323RasPDU &, const H225_UnknownMessageResponse &);
00408     virtual BOOL OnReceiveUnknownMessageResponse(const H225_UnknownMessageResponse &);
00409 
00410     virtual void OnSendRequestInProgress(H323RasPDU &, H225_RequestInProgress &);
00411     virtual void OnSendRequestInProgress(H225_RequestInProgress &);
00412     virtual BOOL OnReceiveRequestInProgress(const H323RasPDU &, const H225_RequestInProgress &);
00413     virtual BOOL OnReceiveRequestInProgress(const H225_RequestInProgress &);
00414 
00415     virtual BOOL OnSendFeatureSet(unsigned, H225_FeatureSet &) const
00416     { return FALSE; }
00417 
00418     virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const
00419     { }
00420 
00423     virtual BOOL OnReceiveUnknown(
00424       const H323RasPDU & pdu  
00425     );
00427 
00434     const PString & GetIdentifier() const { return gatekeeperIdentifier; }
00435 
00440     void SetIdentifier(const PString & id) { gatekeeperIdentifier = id; }
00442 
00443   protected:
00444     // Option variables
00445     PString gatekeeperIdentifier;
00446 };
00447 
00448 
00449 #endif // __OPAL_H225RAS_H
00450 
00451 

Generated on Tue Mar 15 11:16:49 2005 for OpenH323 by  doxygen 1.4.0