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

Generated on Sat Jul 24 17:03:12 2004 for OpenH323 by doxygen 1.3.7