vpnui/vpnmanagementui/src/vpnapiwrapper.cpp
branchRCL_3
changeset 38 9f4e37332ce5
parent 0 33413c0669b9
--- a/vpnui/vpnmanagementui/src/vpnapiwrapper.cpp	Mon Jun 21 16:49:56 2010 +0300
+++ b/vpnui/vpnmanagementui/src/vpnapiwrapper.cpp	Thu Aug 19 10:54:34 2010 +0300
@@ -15,10 +15,14 @@
 *
 */
 
+#include <cmmanager.h>
+#include <cmdestination.h>
+#include <cmpluginvpndef.h>
 #include "vpnapiwrapper.h"
-#include "vpnapi.h"
+
 #include "log_vpnmanagementui.h"
 
+using namespace CMManager;
 
 CVpnApiWrapper* CVpnApiWrapper::NewL()
     {
@@ -36,20 +40,19 @@
 
 CVpnApiWrapper::~CVpnApiWrapper()
     {
+    LOG_("CVpnApiWrapper::~CVpnApiWrapper() called\n");
     delete iPolicyList;
     Cancel();
-    iVpnApi.Close();
+
+    iVpnExtApi.Close();
     }
 
 void CVpnApiWrapper::DoCancel()
     {
     LOG_("CVpnApiWrapper::DoCancel() called\n");
 
-    if (iOngoingTask == ETaskImportPolicies)
-        {
-        iVpnApi.CancelImport();
-        }
-    
+    TInt i=iVpnExtApi.CancelPolicyProvision();
+
     iOngoingTask = ETaskNone;
     }
 
@@ -57,10 +60,10 @@
     {
     LOG_1("CVpnApiWrapper::RunL():%d", iStatus.Int());
        
-    if (iOngoingTask == ETaskImportPolicies)
-        {
-        iCaller->NotifyPolicyImportComplete(iStatus.Int());
-        }
+    if (iOngoingTask == ETaskSynchroniseServer)
+       {
+        iCaller->NotifySynchroniseServerCompleteL(iStatus.Int());
+       }
     
     iOngoingTask = ETaskNone;
     }
@@ -70,9 +73,8 @@
     LOG_("CVpnApiWrapper::ConstructL() - begin");
 
     CActiveScheduler::Add(this);
-    LOG_("CVpnApiWrapper::ConstructL() - begin 2");
-    User::LeaveIfError(iVpnApi.Connect());
 
+    User::LeaveIfError(iVpnExtApi.Connect());
     LOG_("CVpnApiWrapper::ConstructL() - end");
     }
 
@@ -91,7 +93,7 @@
     
     iPolicyList = new (ELeave) CArrayFixFlat<TVpnPolicyInfo>(2);
 
-    User::LeaveIfError(iVpnApi.GetPolicyInfoList(iPolicyList));
+    User::LeaveIfError(iVpnExtApi.GetPolicyInfoList(iPolicyList));
     
     TKeyArrayFix Key( _FOFF(TVpnPolicyInfo,iName), ECmpCollated );
     Key.SetPtr( iPolicyList );
@@ -105,7 +107,10 @@
     LOG_("CVpnApiWrapper::DeletePolicyL() - begin");
 
     TVpnPolicyId& policyToDelete = iPolicyList->At(aPolicyIndex).iId;
-    User::LeaveIfError(iVpnApi.DeletePolicy(policyToDelete));
+    User::LeaveIfError(iVpnExtApi.DeletePolicy(policyToDelete));
+    
+    //Delete all VPN APs pointing deleted policy
+    DeleteReferringVpnAps(policyToDelete);
     
     LOG_("CVpnApiWrapper::DeletePolicyL() - end");
     }
@@ -115,29 +120,131 @@
     LOG_("CVpnApiWrapper::GetPolicyDetailsL() - begin");
 
     TVpnPolicyId& policyOfInterest = iPolicyList->At(aPolicyIndex).iId;
-    User::LeaveIfError(iVpnApi.GetPolicyDetails(policyOfInterest, aPolicyDetails));
+    User::LeaveIfError(iVpnExtApi.GetPolicyDetails(policyOfInterest, aPolicyDetails));
 
     LOG_("CVpnApiWrapper::GetPolicyDetailsL() - end");
     }
 
-void CVpnApiWrapper::ImportPolicyL(const TDesC& aImportDir, MVpnApiWrapperCaller* aCaller)
+
+
+TInt CVpnApiWrapper::CreateServer( const TAgileProvisionApiServerSettings& aServerDetails)
     {
-    LOG_("CVpnApiWrapper::ImportPolicyL() - begin");
+    
+    iPolicyServer.iServerNameLocal = aServerDetails.iServerNameLocal;
+    iPolicyServer.iServerUrl = aServerDetails.iServerUrl;
+    iPolicyServer.iSelection = aServerDetails.iSelection;
+  
+    return iVpnExtApi.CreateServer(iPolicyServer);
+    }
 
-    if (iOngoingTask != ETaskNone)
-        {
-        User::Leave(KErrInUse);
-        }
+TAgileProvisionApiServerListElem& CVpnApiWrapper::ServerListL()
+    {
+    TInt err(iVpnExtApi.ServerListL( iVpnPolicyServerList ));
+    User::LeaveIfError( err );    
+    
+    return iVpnPolicyServerList;
+    
+    }
+
+void CVpnApiWrapper::GetServerDetailsL( TAgileProvisionApiServerSettings& aServerDetails )
+    {
+    User::LeaveIfError( iVpnExtApi.ServerDetails(aServerDetails));
+    }
 
-    iCaller = aCaller;
-    iImportDir.Copy(aImportDir);
+TInt CVpnApiWrapper::DeleteServer()
+    {
+ 
+    return iVpnExtApi.DeleteServer();
+
+    }
 
-    iVpnApi.ImportPolicy(iImportDir, iStatus);
+void CVpnApiWrapper::SynchroniseServerL( MVpnApiWrapperCaller* aCaller )
+    {
+    iCaller=aCaller;
+    iVpnExtApi.SynchronizePolicyServer(iStatus);
+    SetActive();
+    iOngoingTask = ETaskSynchroniseServer;
+    }
 
-    iOngoingTask = ETaskImportPolicies;
-    SetActive();
-    LOG_("CVpnApiWrapper::ImportPolicyL() - end");
+void CVpnApiWrapper::CancelSynchronise()
+    {
+   
+    Cancel();
+  
+    }
+
+void CVpnApiWrapper::DeleteReferringVpnAps(const TVpnPolicyId& aPolicyId) const
+    {
+    TRAP_IGNORE(DeleteReferringVpnApsL(aPolicyId));
     }
 
+void CVpnApiWrapper::DeleteReferringVpnApsL(const TVpnPolicyId& aPolicyId) const
+    {
+    RCmManager cmManager;
+    cmManager.OpenLC();
+                                      
+    //First collect all VPN connection methods from destinations
+    RArray<TUint32> destinationArray;    
+    cmManager.AllDestinationsL( destinationArray );
+    CleanupClosePushL(destinationArray);    
+    
+    for (TInt i = 0; i < destinationArray.Count(); ++i)
+        {
+        RCmDestination destination = cmManager.DestinationL( destinationArray[i] );
+        CleanupClosePushL(destination);
+        
+        TInt connectionMethodCount = destination.ConnectionMethodCount();
+        for (TInt j = connectionMethodCount - 1; j >= 0; --j)
+            {
+            RCmConnectionMethod connectionMethod = destination.ConnectionMethodL( j );  
+            CleanupClosePushL(connectionMethod);
+            
+            if ( connectionMethod.GetBoolAttributeL(ECmVirtual) &&
+                 connectionMethod.GetIntAttributeL( ECmBearerType ) == KPluginVPNBearerTypeUid)
+                {
+                HBufC* policyId = connectionMethod.GetStringAttributeL( EVpnServicePolicy );
+                CleanupStack::PushL(policyId);
+                if (policyId->Compare(aPolicyId) == 0)
+                    {
+                    destination.DeleteConnectionMethodL( connectionMethod );
+                    destination.UpdateL();
+                    }                    
+                CleanupStack::PopAndDestroy(policyId);
+                }
+            CleanupStack::PopAndDestroy(); //connectionMethod       
+            }
+        
+        CleanupStack::PopAndDestroy(); //destination
+        }
+    CleanupStack::PopAndDestroy(); //destinationArray    
+    
+    //Second collect VPN connection methods, which are not inside a destination.    
+    RArray<TUint32> connectionMethodArray;    
+    cmManager.ConnectionMethodL( connectionMethodArray );
+    CleanupClosePushL(connectionMethodArray);
+    
+    for ( TInt i = 0; i < connectionMethodArray.Count(); ++i)
+        {
+        RCmConnectionMethod connectionMethod = 
+                cmManager.ConnectionMethodL( connectionMethodArray[i] );
+        CleanupClosePushL(connectionMethod);
+        if ( connectionMethod.GetBoolAttributeL(ECmVirtual) &&
+             connectionMethod.GetIntAttributeL( ECmBearerType ) == KPluginVPNBearerTypeUid)
+            {
+            HBufC* policyId = connectionMethod.GetStringAttributeL( EVpnServicePolicy );
+            CleanupStack::PushL(policyId);
+            if (policyId->Compare(aPolicyId) == 0)
+                {
+                connectionMethod.DeleteL();
+                connectionMethod.UpdateL();
+                }                    
+            CleanupStack::PopAndDestroy(policyId);
+            }
 
+        CleanupStack::PopAndDestroy(); //connectionMethod               
+        }    
+    CleanupStack::PopAndDestroy(); //connectionMethodArray
+    
+    CleanupStack::PopAndDestroy(); //cmManager
+    }
 /***/