diff -r 000000000000 -r 33413c0669b9 vpnengine/kmdserver/inc/kmdserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/kmdserver/inc/kmdserver.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,230 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: KMD server +* +*/ + + +#ifndef C_KMDSERVER_H +#define C_KMDSERVER_H + +#include + +#include "ikesocketdefs.h" +#include "vpnmandefs.h" + +_LIT( KKmdServerName, "!KMD server" ); +_LIT( KKmdServerImg, "kmdserver" ); + +const TUid KServerUid3 = { 0x1000088A }; + +const TInt KMyServerStackSize = 0x2000; // 8KB +const TInt KMyServerInitHeapSize = 0x1000; // 4KB +const TInt KMyServerMaxHeapSize = 0x1000000; // 16MB + +const TInt KKmdServMajorVersion = 1; +const TInt KKmdServMinorVersion = 0; +const TInt KKmdServBuildVersion = 0; + +// FORWARD DECLARATIONS +class CIkeConnectionInterface; +class CIkePluginHandler; +class CIkePluginSessionHandler; +class CKmdSession; +class CVpnConnection; +class CKmdDebugLogger; +class CKmdEventLogger; +class CSecpolReader; +class MIkeDebug; +class MIkePluginSessionHandlerCallback; + +/** + * KMD server. + * Implementation of KMD (Key Management Daemon) server. Handles creating of + * server-side client sessions. + * + * @lib internal (kmdserver.exe) + */ +class CKmdServer : public CPolicyServer + { +public: + + /** KMD commands */ + enum + { + KKmdStartConnection, + KKmdCancelStartConnection, + KKmdActivateAsync, + KKmdCancelActivateAsync, + KKmdStopConnection, + KKmdResolveAddress, + KKmdCancelResolveAddress + }; + + /** + * Two-phased constructor. Called from kmd_starter. + */ + static CKmdServer* NewL(); + + /** + * Destructor. + */ + ~CKmdServer(); + + /** + * Informs KMD server that KMD session has been closed. + */ + void KmdSessionClosed(); + + /** + * Creates VPN connection object. + * @param aVpnIapId VPN IAP Id + */ + CVpnConnection& CreateVpnConnectionL( TUint32 aVpnIapId ); + + /** + * Gets VPN connection object. + * @param aVpnIapId VPN IAP Id + */ + CVpnConnection& GetVpnConnectionL( TUint32 aVpnIapId ); + + /** + * Deletes VPN connection object. + * @param aVpnIapId VPN IAP Id + */ + void DeleteVpnConnection( TUint32 aVpnIapId ); + + /** + * Creates IKE plugin session. + * @param aIkeVersion IKE version + * @param aIpVersion IP version + * @param aConnection IKE connection interface + * @param aVpnIapId VPN IAP id + * @param aVpnNetId VPN NET id + * @param aVpnInterfaceIndex VPN interface index + * @param aDnsServerAddr DNS server address from IKE policy. + * @param aCallback Callback interface + * @return IKE plugin session handler + */ + CIkePluginSessionHandler& CreateIkePluginSessionL( TInt aIkeVersion, + IkeSocket::TIpVersion aIpVersion, + CIkeConnectionInterface& aConnection, + TUint32 aVpnIapId, + TUint32 aVpnNetId, + TUint32 aVpnInterfaceIndex, + const TInetAddr& aDnsServerAddr, + MIkePluginSessionHandlerCallback& aCallback ); + /** + * Deletes IKE plugin session. + * @param aIkeVersion IKE version + * @param aVpnIapId VPN IAP Id + */ + void DeleteIkePluginSession( TInt aIkeVersion, + TUint32 aVpnIapId ); + + /** + * Returns debug trace interface. + */ + MIkeDebug& Debug(); + +// from base class CPolicyServer + + CSession2* NewSessionL( const TVersion& aVersion, + const RMessage2& aMessage ) const; + +private: + CKmdServer(); + void ConstructL(); + + /** + * Stops KMD server if there are no more KMD sessions or VPN connections. + */ + void StopKmdServer(); + +private: // data + + /** + * KMD session count. + * Own. + */ + mutable TInt32 iSessionCount; + + /** + * VPN connections. + * Own. + */ + RPointerArray iVpnConnections; + + /** + * IKE plugin handlers. + * Own. + */ + CIkePluginHandler* iIkePluginHandlers[2]; + + /** + * Debug logger. + * Own. + */ + CKmdDebugLogger* iDebugLogger; + + /** + * Event logger. + * Own. + */ + CKmdEventLogger* iEventLogger; + + /** + * Secpol reader. + * Own. + */ + CSecpolReader* iSecpolReader; + + /** + * Policy server. + * Own. + */ + RIpsecPolicyServ iIpsecPolicyServ; + + /** + * KMD server range count. + * Own. + */ + static const TUint iKmdServerRangeCount; + + /** + * KMD server ranges. + * Own. + */ + static const TInt iKmdServerRanges[]; + + /** + * KMD server element index. + * Own. + */ + static const TUint8 iKmdServerElementIndex[]; + + /** + * KMD server elements. + * Own. + */ + static const CPolicyServer::TPolicyElement iKmdServerElements[]; + + /** + * KMD server policy. + * Own. + */ + static const CPolicyServer::TPolicy iKmdServerPolicy; + }; + +#endif // C_KMDSERVER_H