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