diff -r 000000000000 -r 33413c0669b9 vpnengine/kmdserver/inc/vpnconnection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/kmdserver/inc/vpnconnection.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,328 @@ +/* +* 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: VPN connection specific structures +* +*/ + + +#ifndef C_VPNCONNECTION_H +#define C_VPNCONNECTION_H + +#include +#include +#include "vpnmandefs.h" +#include "disconnectionobserver.h" +#include "eventmediatorapi.h" +#include "ikepluginsessionhandler.h" +#include "ikesocketdefs.h" + +// FORWARD DECLARATIONS +class CIkeConnectionInterface; +class CIkeData; +class CIkePluginSessionInterface; +class CKmdServer; +class MIkeDebug; + +/** + * VPN connection. + * VPN connection class provides VPN connection specific functionality for + * managing real network connection and connection with remote IKE host. + * + * @lib internal (kmdserver.exe) + */ +class CVpnConnection : public CBase, + public MDisconnectionObserverCallback, + public MIkePluginSessionHandlerCallback + { +public: + /** + * Two-phased constructor. + * @param aVpnIapId VPN IAP Id + * @param aServer KMD server + * @param aDebug Debug trace interface + */ + static CVpnConnection* NewLC( TUint32 aVpnIapId, + CKmdServer& aServer, + MIkeDebug& aDebug ); + /** + * Destructor. + */ + ~CVpnConnection(); + + /** + * Starts real network connection. + * @param aStatus Completion status (returned) + */ + void StartRealConnection( TRequestStatus& aStatus ); + + /** + * Cancels connection starting. + */ + void CancelStartRealConnection(); + + /** + * Resolves an IP address from FQDN address. + * @param aFqdn FQDN address + * @param aNameEntry Result of name resolution (returned) + * @param aStatus Completion status (returned) + */ + void ResolveAddress( const TDesC& aFqdn, + TNameEntry& aNameEntry, + TRequestStatus& aStatus ); + + /** + * Cancels resolving. + */ + void CancelResolveAddress(); + + /** + * Starts negotiation with a remote host. + * @param aIkeData IKE policy data + * @param aVpnInterfaceIndex + * @param aIpVersion IP version + * @param aInternalAddress Internal address (returned) + * @param aStatus Completion status (returned) + */ + void NegotiateWithHost( CIkeData& aIkeData, + TUint32 aVpnInterfaceIndex, + IkeSocket::TIpVersion aIpVersion, + TVPNAddress& aInternalAddress, + TRequestStatus& aStatus ); + + /** + * Cancels negotiation. + */ + void CancelNegotiateWithHost(); + + /** + * Stops VPN connection. + * @param aSilentClose Specified if a silent close in question (Delete + * payloads not transmitted to remote host) + * @param aStatus Completion status (returned) + */ + void StopVpnConnection( TBool aSilentClose, + TRequestStatus& aStatus ); + + /** + * Cancels VPN connection stopping. VPN connection is stopped silently. + */ + void CancelStopVpnConnection(); + + /** + * Gets local IP address of real network interface. + * + * @param aIpVersion IP version of local IP address + * @param aLocalIp Local IP address (returned) + * @return Error status. KErrNotFound if address is not found. + */ + TInt GetLocalAddress( const IkeSocket::TIpVersion aIpVersion, + TInetAddr& aLocalIp ); + + /** + * Returns VPN IAP Id. + * @return VPN IAP Id + */ + TInt VpnIapId() const; + + /** + * Returns real IAP Id. + * @return Real IAP Id + */ + TInt RealIapId() const; + + /** + * Returns real NET Id. + * @return Real NET Id + */ + TInt RealNetId() const; + +// from base class MDisconnectionObserverCallback + + /** + * Notification about link disconnection. VPN connection is stopped silently. + * @param aStatus Completion status + */ + void DisconnectIndication( TInt aStatus ); + +// from base class MIkePluginSessionHandlerCallback + + /** + * From MIkePluginSessionHandlerCallback + * Notification about completion of negotiate request. + * @param aStatus Completion status + * @param aInternalAddress Internal address. + */ + void NegotiationStarted( TInt aStatus, + const TVPNAddress& aInternalAddress ); + /** + * From MIkePluginSessionHandlerCallback + * Notification about completion of delete session request. Real + * network connection is closed. + * @param aStatus Completion status + */ + void IkePluginSessionClosed( TInt aStatus ); + + /** + * From MIkePluginSessionHandlerCallback + * Notification about IKE plugin session error. + * @param aStatus Completion status + */ + void IkePluginSessionError( TInt aStatus ); + + +private: + CVpnConnection( TUint32 aVpnIapId, + CKmdServer& aServer, + MIkeDebug& aDebug ); + void ConstructL(); + + /** + * Cancels negotiation.. + */ + void DoCancelNegotiateWithHost(); + + /** + * Stops VPN connection. + */ + void DoStopVpnConnection( TBool aSilentClose ); + + /** + * Cancels VPN connection stopping. VPN connection is stopped silently. + */ + void DoCancelStopVpnConnection(); + + /** + * Deletes IKE plugin session. + * @param aSilentClose Specified if a silent close in question (Delete + * payloads not transmitted to remote host) + */ + void DoDeleteSession( TBool aSilentClose ); + + /** + * Cancels session deletion. + */ + void DoCancelDeleteSession(); + + /** + * Stops real network connection. + * @param aStatus Disconnect event status to be reported. + */ + void DoStopRealConnection( TInt aStatus ); + + /** + * Reports disconnect event via Event Mediator API. + * @param aStatus Completion status + */ + void DoReportDisconnectEvent( TInt aStatus ); + +private: // data + + /** + * KMD server. + * Not own. + */ + CKmdServer& iServer; + + /** + * IKE version. + * Own. + */ + TInt iIkeVersion; + + /** + * VPN IAP id. + * Own. + */ + TUint32 iVpnIapId; + + /** + * VPN NET id. + * Own. + */ + TUint32 iVpnNetId; + + /** + * Real IAP id. + * Own. + */ + TInt iRealIapId; + + /** + * Real NET id. + * Own. + */ + TInt iRealSnapId; + + /** + * Informs if disconnect event has been received. + * Own. + */ + TInt iDisconnectEventReceived; + + /** + * Disconnection status. + * Own. + */ + TInt iDisconnectionStatus; + + /** + * IKE connection interface. + * Own. + */ + CIkeConnectionInterface* iIkeConnection; + + /** + * Disconnection observer. + * Own. + */ + CDisconnectionObserver* iDisconnectionObserver; + + /** + * IKE plugin session handler. + * Not own. + */ + CIkePluginSessionHandler* iIkePluginSessionHandler; + + /** + * Event mediator. + * Own. + */ + REventMediator iEventMediator; + + /** + * Client's request status for starting of negotiation. + * Not own. + */ + TRequestStatus* iClientStatusNegotiate; + + /** + * Client's internal address. + * Not own. + */ + TVPNAddress* iClientInternalAddress; + + /** + * Client's request status for VPN connection's stopping. + * Not own. + */ + TRequestStatus* iClientStatusStopVpnConnection; + + /** + * Debug trace interface. + * Not own. + */ + MIkeDebug& iDebug; + }; + +#endif // C_VPNCONNECTION_H