vpnengine/ikesocket/inc/ikeconnection.h
changeset 0 33413c0669b9
child 8 032d3a818f49
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikesocket/inc/ikeconnection.h	Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,291 @@
+/*
+* 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:  IKE connection
+*
+*/
+
+
+#ifndef C_IKECONNECTION_H
+#define C_IKECONNECTION_H
+
+#include <e32base.h>
+#include <in_sock.h>
+#include <commdbconnpref.h>
+#include <extendedconnpref.h>
+#include "connobserver.h"
+#include "datatransfer.h"
+#include "ikeconnectioninterface.h"
+
+// FORWARD DECLARATIONS
+class CConnObserver;
+class CDataTransfer;
+class CLocalAddressResolver;
+class MIkeDebug;
+class RSocketServ;
+
+/**
+ *  IKE socket connection class.
+ *
+ *  This class provides functionality for managing VPN AP's real network
+ *  connection. This class implements IKE socket connection interface
+ *  (CIkeConnectionInterface).
+ * 
+ *  This class owns data transfer object, which implements data interface
+ *  (MIkeDataInterface). Possible fatal data transfer errors are handled
+ *  in this class.
+ * 
+ *  @lib ikesocket.lib
+ */
+NONSHARABLE_CLASS( CIkeConnection ) : public CIkeConnectionInterface,
+                                      public MDataTransferCallback,
+                                      public MConnObserverCallback
+    {
+public:    
+    /**
+     * Two-phased constructor.
+     * @param aDebug Debug trace interface
+     */
+    static CIkeConnection* NewL( MIkeDebug& aDebug );
+    
+    /**
+     * Destructor.
+     */
+    ~CIkeConnection();
+        
+    /**
+     * Opens data interface.
+     *
+     * @param aIkeMajorVersion IKE major version
+     * @param aIpVersion IP protocol version
+     * @return Data interface
+     */
+    MIkeDataInterface& OpenDataInterfaceL( const TIkeMajorVersion aIkeMajorVersion,
+                                           const TIpVersion aIpVersion );
+    
+// from base class MIkeConnectionInterface
+    
+    void StartConnection( const TUint32 aIapId,
+                          const TUint32 aSnapId,
+                          TRequestStatus& aStatus,
+                          const TBool aForcedRoaming = EFalse );
+    void CancelStartConnection();
+    void StopConnection();
+    void ResolveFQDNAddress( const TDesC& aFQDN,
+                             TNameEntry& aNameEntry,
+                             TRequestStatus& aStatus );
+    void CancelResolveFQDNAddress();
+    void NotifyDisconnect( TRequestStatus& aStatus );
+    void CancelNotifyDisconnect();
+    TUint32 IapId() const;
+    TUint32 NetId() const;
+    TUint32 SnapId() const;
+    TInt GetLocalAddress( const TIpVersion aIpVersion,
+                          TInetAddr& aLocalIp );
+    
+// from base class MDataTransferCallback
+    
+    /**
+     * Notification about fatal data transfer error.
+     * 
+     * @param aError Error value
+     * @param aErrorType Error type
+     */        
+    void DataTransferError( const TInt aError,
+                            const TErrorType aErrorType );
+    
+// from base class MConnObserverCallback
+    
+    /**
+     * Notification about link disconnection.
+     * 
+     * @param aStatus Link disconnection status
+     */
+    void LinkDisconnected( const TInt aStatus );
+    
+private:
+    
+    enum TConnectionState
+        {
+        EIdle,
+        EConnecting,
+        EResolvingFQDN,
+        EConnected        
+        };
+    
+    CIkeConnection( MIkeDebug& aDebug );
+    
+    void ConstructL();
+        
+    /**
+     * Creates connection preferences for SNAP usage.
+     * @param aSnapId SNAP id
+     * @param aForcedRoaming Indicates whether forced roaming is enabled or
+     *                       disabled for SNAP 
+     */
+    void CreateSnapPreferencesL( const TUint32 aSnapId,
+                                 const TBool aForcedRoaming );
+    
+    /**
+     * Cleans connection preferences created for SNAP usage.
+     */
+    void CleanSnapPreferences();
+    
+    /**
+     * Updates IAP id and NET id.
+     */
+    void UpdateRealIapData();
+    
+    /**
+     * Handles completion of asynchronous request in EConnecting state. 
+     */
+    void DoStateAfterConnecting();
+    
+    /**
+     * Handles completion of asynchronous request in EResolvingFQDN state. 
+     */
+    void DoStateAfterResolvingFQDN();
+    
+    /**
+     * Implements cancellation of connection starting. 
+     */
+    void DoCancelStartConnection();
+    
+    /**
+     * Implements cancellation of FQDN address resolving. 
+     */
+    void DoCancelResolveFQDNAddress();        
+    
+    // from base class CActive
+        
+    /**
+     * From CActive.
+     * Handles an active object's request completion event.
+     */
+    void RunL();
+    
+    /**
+     * From CActive.
+     * Implements cancellation of an active request.
+     */ 
+    void DoCancel();    
+    
+private: // data
+    
+    /**
+     * Connection state.
+     * Own.
+     */
+    TConnectionState        iState;
+    
+    /**
+     * Socket server.
+     * Own.
+     */
+    RSocketServ             iSocketServer;
+    
+    /**
+     * Network connection.
+     * Own.
+     */
+    RConnection             iConnection;
+    
+    /**
+     * Host resolver.
+     * Own.
+     */
+    RHostResolver           iResolver;    
+    
+    /**
+     * IP version.
+     * Own.
+     */
+    TIpVersion              iIpVersion;
+    
+    /**
+     * IAP id.
+     * Own.
+     */
+    TUint32                 iIapId;
+
+    /**
+     * NET id.
+     * Own.
+     */
+    TUint32                 iNetId;
+    
+    /**
+     * SNAP id.
+     * Own.
+     */
+    TUint32                 iSnapId;
+
+    /**
+     * Connection preferences.
+     * Own.
+     */
+    TCommDbConnPref         iPrefs;
+    
+    /**
+     * Extended connection preferences.
+     * Own.
+     */
+    TExtendedConnPref       iExtendedPrefs;
+    
+    /**
+     * Connection preferences list.
+     * Own.
+     */
+    TConnPrefList           iConnPrefList;
+    
+    /**
+     * Pointer to client's request status. Used for starting connection and
+     * resolving FQDN address.
+     * Not own.
+     */
+    TRequestStatus*         iClientStatus;
+    
+    /**
+     * Pointer to client's request status. Used for requesting disconnect
+     * notification.
+     * Not own.
+     */
+    TRequestStatus*         iClientStatusNotifyDisconnect;
+    
+    /**
+     * Data transfer object.
+     * Own.
+     */
+    CDataTransfer*          iDataTransfer;
+    
+    /**
+     * Link status observer.
+     * Own.
+     */
+    CConnObserver*          iLinkObserver;
+    
+    /**
+     * Local address resolver.
+     * Own.
+     */
+    CLocalAddressResolver*  iLocalAddressResolver;    
+    
+    /**
+     * Debug trace interface.
+     * Not own.
+     */
+    MIkeDebug&              iDebug;
+    
+    };
+
+#endif // C_IKECONNECTION_H