vpnengine/kmdserver/inc/vpnconnection.h
changeset 0 33413c0669b9
--- /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