--- /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 <e32base.h>
+#include <in_sock.h>
+#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