diff -r 352850cbed81 -r 9f4e37332ce5 vpnui/vpnmanagementui/src/vpnapiwrapper.cpp --- 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 +#include +#include #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(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 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 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 + } /***/