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 >
Wrap
C/C++ Source or Header
|
2003-03-31
|
20KB
|
440 lines
/*
* h225ras.h
*
* H.225 RAS protocol handler
*
* Open H323 Library
*
* Copyright (c) 2001 Equivalence Pty. Ltd.
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Open H323 Library.
*
* The Initial Developer of the Original Code is Equivalence Pty. Ltd.
*
* Portions of this code were written with the assisance of funding from
* iFace, Inc. http://www.iface.com
*
* Contributor(s): ______________________________________.
*
* $Log: h225ras.h,v $
* Revision 1.35 2003/04/01 01:05:39 robertj
* Split service control handlers from H.225 RAS header.
*
* Revision 1.34 2003/03/20 01:51:07 robertj
* More abstraction of H.225 RAS and H.501 protocols transaction handling.
*
* Revision 1.33 2003/03/01 00:23:42 craigs
* New PeerElement implementation
*
* Revision 1.32 2003/02/21 07:23:18 robertj
* Fixed up some comments
*
* Revision 1.31 2003/02/21 05:28:39 craigs
* Factored out code for user with peer elements
*
* Revision 1.30 2003/02/01 13:31:14 robertj
* Changes to support CAT authentication in RAS.
*
* Revision 1.29 2002/11/28 04:41:44 robertj
* Added support for RAS ServiceControlIndication command.
*
* Revision 1.28 2002/11/27 06:54:52 robertj
* Added Service Control Session management as per Annex K/H.323 via RAS
* only at this stage.
* Added H.248 ASN and very primitive infrastructure for linking into the
* Service Control Session management system.
* Added basic infrastructure for Annex K/H.323 HTTP transport system.
* Added Call Credit Service Control to display account balances.
*
* Revision 1.27 2002/11/21 22:26:09 robertj
* Changed promiscuous mode to be three way. Fixes race condition in gkserver
* which can cause crashes or more PDUs to be sent to the wrong place.
*
* Revision 1.26 2002/11/21 07:21:46 robertj
* Improvements to alternate gatekeeper client code, thanks Kevin Bouchard
*
* Revision 1.25 2002/11/11 07:20:08 robertj
* Minor clean up of API for doing RAS requests suing authentication.
*
* Revision 1.24 2002/11/04 11:52:08 robertj
* Fixed comment
*
* Revision 1.23 2002/10/17 02:09:01 robertj
* Backed out previous change for including PDU tag, doesn't work!
*
* Revision 1.22 2002/10/16 03:40:12 robertj
* Added PDU tag to cache look up key.
*
* Revision 1.21 2002/09/19 09:15:56 robertj
* Fixed problem with making (and assuring with multi-threading) IRQ and DRQ
* requests are sent to the correct endpoint address, thanks Martijn Roest.
*
* Revision 1.20 2002/09/16 01:14:15 robertj
* Added #define so can select if #pragma interface/implementation is used on
* platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
*
* Revision 1.19 2002/09/03 05:37:17 robertj
* Normalised the multi-include header prevention ifdef/define symbol.
* Added RAS port constants to RAS clas name space.
*
* Revision 1.18 2002/08/12 06:29:55 robertj
* Fixed problem with cached responses being aged before the RIP time which
* made retries by client appear as "new" requests when they were not.
*
* Revision 1.17 2002/08/12 05:38:20 robertj
* Changes to the RAS subsystem to support ability to make requests to client
* from gkserver without causing bottlenecks and race conditions.
*
* Revision 1.16 2002/08/05 10:03:47 robertj
* Cosmetic changes to normalise the usage of pragma interface/implementation.
*
* Revision 1.15 2002/08/05 05:17:37 robertj
* Fairly major modifications to support different authentication credentials
* in ARQ to the logged in ones on RRQ. For both client and server.
* Various other H.235 authentication bugs and anomalies fixed on the way.
*
* Revision 1.14 2002/07/29 11:36:08 robertj
* Fixed race condition if RIP is followed very quickly by actual response.
*
* Revision 1.13 2002/06/26 03:47:45 robertj
* Added support for alternate gatekeepers.
*
* Revision 1.12 2002/06/21 02:52:44 robertj
* Fixed problem with double checking H.235 hashing, this causes failure as
* the authenticator thinks it is a replay attack.
*
* Revision 1.11 2002/06/12 03:49:56 robertj
* Added PrintOn function for trace output of RAS channel.
*
* Revision 1.10 2002/05/03 09:18:45 robertj
* Added automatic retransmission of RAS responses to retried requests.
*
* Revision 1.9 2001/10/09 08:04:59 robertj
* Fixed unregistration so still unregisters if gk goes offline, thanks Chris Purvis
*
* Revision 1.8 2001/09/18 10:36:54 robertj
* Allowed multiple overlapping requests in RAS channel.
*
* Revision 1.7 2001/09/12 03:12:36 robertj
* Added ability to disable the checking of RAS responses against
* security authenticators.
* Fixed bug in having multiple authentications if have a retry.
*
* Revision 1.6 2001/08/10 11:03:49 robertj
* Major changes to H.235 support in RAS to support server.
*
* Revision 1.5 2001/08/06 07:44:52 robertj
* Fixed problems with building without SSL
*
* Revision 1.4 2001/08/06 03:18:35 robertj
* Fission of h323.h to h323ep.h & h323con.h, h323.h now just includes files.
* Improved access to H.235 secure RAS functionality.
* Changes to H.323 secure RAS contexts to help use with gk server.
*
* Revision 1.3 2001/06/25 01:06:40 robertj
* Fixed resolution of RAS timeout so not rounded down to second.
*
* Revision 1.2 2001/06/22 00:21:10 robertj
* Fixed bug in H.225 RAS protocol with 16 versus 32 bit sequence numbers.
*
* Revision 1.1 2001/06/18 06:23:47 robertj
* Split raw H.225 RAS protocol out of gatekeeper client class.
*
*/
#ifndef __OPAL_H225RAS_H
#define __OPAL_H225RAS_H
#ifdef P_USE_PRAGMA
#pragma interface
#endif
#include "transports.h"
#include "h235auth.h"
#include "h323trans.h"
#include "svcctrl.h"
class PASN_Sequence;
class PASN_Choice;
class H225_GatekeeperRequest;
class H225_GatekeeperConfirm;
class H225_GatekeeperReject;
class H225_RegistrationRequest;
class H225_RegistrationConfirm;
class H225_RegistrationReject;
class H225_UnregistrationRequest;
class H225_UnregistrationConfirm;
class H225_UnregistrationReject;
class H225_AdmissionRequest;
class H225_AdmissionConfirm;
class H225_AdmissionReject;
class H225_BandwidthRequest;
class H225_BandwidthConfirm;
class H225_BandwidthReject;
class H225_DisengageRequest;
class H225_DisengageConfirm;
class H225_DisengageReject;
class H225_LocationRequest;
class H225_LocationConfirm;
class H225_LocationReject;
class H225_InfoRequest;
class H225_InfoRequestResponse;
class H225_NonStandardMessage;
class H225_UnknownMessageResponse;
class H225_RequestInProgress;
class H225_ResourcesAvailableIndicate;
class H225_ResourcesAvailableConfirm;
class H225_InfoRequestAck;
class H225_InfoRequestNak;
class H225_ArrayOf_CryptoH323Token;
class H323EndPoint;
class H323RasPDU;
///////////////////////////////////////////////////////////////////////////////
/**This class embodies the H.225.0 RAS protocol to/from gatekeepers.
*/
class H225_RAS : public H323Transactor
{
PCLASSINFO(H225_RAS, H323Transactor);
public:
/**@name Construction */
//@{
enum {
DefaultRasMulticastPort = 1718,
DefaultRasUdpPort = 1719
};
/**Create a new protocol handler.
*/
H225_RAS(
H323EndPoint & endpoint, /// Endpoint gatekeeper is associated with.
H323Transport * transport /// Transport over which gatekeepers communicates.
);
/**Destroy protocol handler.
*/
~H225_RAS();
//@}
/**@name Overrides from PObject */
//@{
/**Print the name of the gatekeeper.
*/
void PrintOn(
ostream & strm /// Stream to print to.
) const;
//@}
/**@name Overrides from H323Transactor */
//@{
/**Create the transaction PDU for reading.
*/
virtual H323TransactionPDU * CreateTransactionPDU() const;
/**Handle and dispatch a transaction PDU
*/
virtual BOOL HandleTransaction(
const PASN_Object & rawPDU
);
/**Allow for modifications to PDU on send.
*/
virtual void OnSendingPDU(
PASN_Object & rawPDU
);
//@}
/**@name Protocol callbacks */
//@{
virtual void OnSendGatekeeperRequest(H323RasPDU &, H225_GatekeeperRequest &);
virtual void OnSendGatekeeperConfirm(H323RasPDU &, H225_GatekeeperConfirm &);
virtual void OnSendGatekeeperReject(H323RasPDU &, H225_GatekeeperReject &);
virtual void OnSendGatekeeperRequest(H225_GatekeeperRequest &);
virtual void OnSendGatekeeperConfirm(H225_GatekeeperConfirm &);
virtual void OnSendGatekeeperReject(H225_GatekeeperReject &);
virtual BOOL OnReceiveGatekeeperRequest(const H323RasPDU &, const H225_GatekeeperRequest &);
virtual BOOL OnReceiveGatekeeperConfirm(const H323RasPDU &, const H225_GatekeeperConfirm &);
virtual BOOL OnReceiveGatekeeperReject(const H323RasPDU &, const H225_GatekeeperReject &);
virtual BOOL OnReceiveGatekeeperRequest(const H225_GatekeeperRequest &);
virtual BOOL OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm &);
virtual BOOL OnReceiveGatekeeperReject(const H225_GatekeeperReject &);
virtual void OnSendRegistrationRequest(H323RasPDU &, H225_RegistrationRequest &);
virtual void OnSendRegistrationConfirm(H323RasPDU &, H225_RegistrationConfirm &);
virtual void OnSendRegistrationReject(H323RasPDU &, H225_RegistrationReject &);
virtual void OnSendRegistrationRequest(H225_RegistrationRequest &);
virtual void OnSendRegistrationConfirm(H225_RegistrationConfirm &);
virtual void OnSendRegistrationReject(H225_RegistrationReject &);
virtual BOOL OnReceiveRegistrationRequest(const H323RasPDU &, const H225_RegistrationRequest &);
virtual BOOL OnReceiveRegistrationConfirm(const H323RasPDU &, const H225_RegistrationConfirm &);
virtual BOOL OnReceiveRegistrationReject(const H323RasPDU &, const H225_RegistrationReject &);
virtual BOOL OnReceiveRegistrationRequest(const H225_RegistrationRequest &);
virtual BOOL OnReceiveRegistrationConfirm(const H225_RegistrationConfirm &);
virtual BOOL OnReceiveRegistrationReject(const H225_RegistrationReject &);
virtual void OnSendUnregistrationRequest(H323RasPDU &, H225_UnregistrationRequest &);
virtual void OnSendUnregistrationConfirm(H323RasPDU &, H225_UnregistrationConfirm &);
virtual void OnSendUnregistrationReject(H323RasPDU &, H225_UnregistrationReject &);
virtual void OnSendUnregistrationRequest(H225_UnregistrationRequest &);
virtual void OnSendUnregistrationConfirm(H225_UnregistrationConfirm &);
virtual void OnSendUnregistrationReject(H225_UnregistrationReject &);
virtual BOOL OnReceiveUnregistrationRequest(const H323RasPDU &, const H225_UnregistrationRequest &);
virtual BOOL OnReceiveUnregistrationConfirm(const H323RasPDU &, const H225_UnregistrationConfirm &);
virtual BOOL OnReceiveUnregistrationReject(const H323RasPDU &, const H225_UnregistrationReject &);
virtual BOOL OnReceiveUnregistrationRequest(const H225_UnregistrationRequest &);
virtual BOOL OnReceiveUnregistrationConfirm(const H225_UnregistrationConfirm &);
virtual BOOL OnReceiveUnregistrationReject(const H225_UnregistrationReject &);
virtual void OnSendAdmissionRequest(H323RasPDU &, H225_AdmissionRequest &);
virtual void OnSendAdmissionConfirm(H323RasPDU &, H225_AdmissionConfirm &);
virtual void OnSendAdmissionReject(H323RasPDU &, H225_AdmissionReject &);
virtual void OnSendAdmissionRequest(H225_AdmissionRequest &);
virtual void OnSendAdmissionConfirm(H225_AdmissionConfirm &);
virtual void OnSendAdmissionReject(H225_AdmissionReject &);
virtual BOOL OnReceiveAdmissionRequest(const H323RasPDU &, const H225_AdmissionRequest &);
virtual BOOL OnReceiveAdmissionConfirm(const H323RasPDU &, const H225_AdmissionConfirm &);
virtual BOOL OnReceiveAdmissionReject(const H323RasPDU &, const H225_AdmissionReject &);
virtual BOOL OnReceiveAdmissionRequest(const H225_AdmissionRequest &);
virtual BOOL OnReceiveAdmissionConfirm(const H225_AdmissionConfirm &);
virtual BOOL OnReceiveAdmissionReject(const H225_AdmissionReject &);
virtual void OnSendBandwidthRequest(H323RasPDU &, H225_BandwidthRequest &);
virtual void OnSendBandwidthConfirm(H323RasPDU &, H225_BandwidthConfirm &);
virtual void OnSendBandwidthReject(H323RasPDU &, H225_BandwidthReject &);
virtual void OnSendBandwidthRequest(H225_BandwidthRequest &);
virtual void OnSendBandwidthConfirm(H225_BandwidthConfirm &);
virtual void OnSendBandwidthReject(H225_BandwidthReject &);
virtual BOOL OnReceiveBandwidthRequest(const H323RasPDU &, const H225_BandwidthRequest &);
virtual BOOL OnReceiveBandwidthConfirm(const H323RasPDU &, const H225_BandwidthConfirm &);
virtual BOOL OnReceiveBandwidthReject(const H323RasPDU &, const H225_BandwidthReject &);
virtual BOOL OnReceiveBandwidthRequest(const H225_BandwidthRequest &);
virtual BOOL OnReceiveBandwidthConfirm(const H225_BandwidthConfirm &);
virtual BOOL OnReceiveBandwidthReject(const H225_BandwidthReject &);
virtual void OnSendDisengageRequest(H323RasPDU &, H225_DisengageRequest &);
virtual void OnSendDisengageConfirm(H323RasPDU &, H225_DisengageConfirm &);
virtual void OnSendDisengageReject(H323RasPDU &, H225_DisengageReject &);
virtual void OnSendDisengageRequest(H225_DisengageRequest &);
virtual void OnSendDisengageConfirm(H225_DisengageConfirm &);
virtual void OnSendDisengageReject(H225_DisengageReject &);
virtual BOOL OnReceiveDisengageRequest(const H323RasPDU &, const H225_DisengageRequest &);
virtual BOOL OnReceiveDisengageConfirm(const H323RasPDU &, const H225_DisengageConfirm &);
virtual BOOL OnReceiveDisengageReject(const H323RasPDU &, const H225_DisengageReject &);
virtual BOOL OnReceiveDisengageRequest(const H225_DisengageRequest &);
virtual BOOL OnReceiveDisengageConfirm(const H225_DisengageConfirm &);
virtual BOOL OnReceiveDisengageReject(const H225_DisengageReject &);
virtual void OnSendLocationRequest(H323RasPDU &, H225_LocationRequest &);
virtual void OnSendLocationConfirm(H323RasPDU &, H225_LocationConfirm &);
virtual void OnSendLocationReject(H323RasPDU &, H225_LocationReject &);
virtual void OnSendLocationRequest(H225_LocationRequest &);
virtual void OnSendLocationConfirm(H225_LocationConfirm &);
virtual void OnSendLocationReject(H225_LocationReject &);
virtual BOOL OnReceiveLocationRequest(const H323RasPDU &, const H225_LocationRequest &);
virtual BOOL OnReceiveLocationConfirm(const H323RasPDU &, const H225_LocationConfirm &);
virtual BOOL OnReceiveLocationReject(const H323RasPDU &, const H225_LocationReject &);
virtual BOOL OnReceiveLocationRequest(const H225_LocationRequest &);
virtual BOOL OnReceiveLocationConfirm(const H225_LocationConfirm &);
virtual BOOL OnReceiveLocationReject(const H225_LocationReject &);
virtual void OnSendInfoRequest(H323RasPDU &, H225_InfoRequest &);
virtual void OnSendInfoRequestAck(H323RasPDU &, H225_InfoRequestAck &);
virtual void OnSendInfoRequestNak(H323RasPDU &, H225_InfoRequestNak &);
virtual void OnSendInfoRequestResponse(H323RasPDU &, H225_InfoRequestResponse &);
virtual void OnSendInfoRequest(H225_InfoRequest &);
virtual void OnSendInfoRequestAck(H225_InfoRequestAck &);
virtual void OnSendInfoRequestNak(H225_InfoRequestNak &);
virtual void OnSendInfoRequestResponse(H225_InfoRequestResponse &);
virtual BOOL OnReceiveInfoRequest(const H323RasPDU &, const H225_InfoRequest &);
virtual BOOL OnReceiveInfoRequestAck(const H323RasPDU &, const H225_InfoRequestAck &);
virtual BOOL OnReceiveInfoRequestNak(const H323RasPDU &, const H225_InfoRequestNak &);
virtual BOOL OnReceiveInfoRequestResponse(const H323RasPDU &, const H225_InfoRequestResponse &);
virtual BOOL OnReceiveInfoRequest(const H225_InfoRequest &);
virtual BOOL OnReceiveInfoRequestAck(const H225_InfoRequestAck &);
virtual BOOL OnReceiveInfoRequestNak(const H225_InfoRequestNak &);
virtual BOOL OnReceiveInfoRequestResponse(const H225_InfoRequestResponse &);
virtual void OnSendResourcesAvailableIndicate(H323RasPDU &, H225_ResourcesAvailableIndicate &);
virtual void OnSendResourcesAvailableConfirm(H323RasPDU &, H225_ResourcesAvailableConfirm &);
virtual void OnSendResourcesAvailableIndicate(H225_ResourcesAvailableIndicate &);
virtual void OnSendResourcesAvailableConfirm(H225_ResourcesAvailableConfirm &);
virtual BOOL OnReceiveResourcesAvailableIndicate(const H323RasPDU &, const H225_ResourcesAvailableIndicate &);
virtual BOOL OnReceiveResourcesAvailableConfirm(const H323RasPDU &, const H225_ResourcesAvailableConfirm &);
virtual BOOL OnReceiveResourcesAvailableIndicate(const H225_ResourcesAvailableIndicate &);
virtual BOOL OnReceiveResourcesAvailableConfirm(const H225_ResourcesAvailableConfirm &);
virtual void OnSendServiceControlIndication(H323RasPDU &, H225_ServiceControlIndication &);
virtual void OnSendServiceControlResponse(H323RasPDU &, H225_ServiceControlResponse &);
virtual void OnSendServiceControlIndication(H225_ServiceControlIndication &);
virtual void OnSendServiceControlResponse(H225_ServiceControlResponse &);
virtual BOOL OnReceiveServiceControlIndication(const H323RasPDU &, const H225_ServiceControlIndication &);
virtual BOOL OnReceiveServiceControlResponse(const H323RasPDU &, const H225_ServiceControlResponse &);
virtual BOOL OnReceiveServiceControlIndication(const H225_ServiceControlIndication &);
virtual BOOL OnReceiveServiceControlResponse(const H225_ServiceControlResponse &);
virtual void OnSendNonStandardMessage(H323RasPDU &, H225_NonStandardMessage &);
virtual void OnSendNonStandardMessage(H225_NonStandardMessage &);
virtual BOOL OnReceiveNonStandardMessage(const H323RasPDU &, const H225_NonStandardMessage &);
virtual BOOL OnReceiveNonStandardMessage(const H225_NonStandardMessage &);
virtual void OnSendUnknownMessageResponse(H323RasPDU &, H225_UnknownMessageResponse &);
virtual void OnSendUnknownMessageResponse(H225_UnknownMessageResponse &);
virtual BOOL OnReceiveUnknownMessageResponse(const H323RasPDU &, const H225_UnknownMessageResponse &);
virtual BOOL OnReceiveUnknownMessageResponse(const H225_UnknownMessageResponse &);
virtual void OnSendRequestInProgress(H323RasPDU &, H225_RequestInProgress &);
virtual void OnSendRequestInProgress(H225_RequestInProgress &);
virtual BOOL OnReceiveRequestInProgress(const H323RasPDU &, const H225_RequestInProgress &);
virtual BOOL OnReceiveRequestInProgress(const H225_RequestInProgress &);
/**Handle unknown PDU type.
*/
virtual BOOL OnReceiveUnknown(
const H323RasPDU & pdu /// PDU that was not handled.
);
//@}
/**@name Member variable access */
//@{
/**Get the gatekeeper identifer.
For clients at least one successful registration must have been
achieved for this field to be filling in.
*/
const PString & GetIdentifier() const { return gatekeeperIdentifier; }
/**Set the gatekeeper identifer.
For servers this allows the identifier to be set and provided to all
remote clients.
*/
void SetIdentifier(const PString & id) { gatekeeperIdentifier = id; }
//@}
protected:
// Option variables
PString gatekeeperIdentifier;
};
#endif // __OPAL_H225RAS_H
/////////////////////////////////////////////////////////////////////////////