/** Copyright (c) 2007-2008 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: Controls the vpn policy import procedure.**/#ifndef C_VPNPOLICYINSTALLER_H#define C_VPNPOLICYINSTALLER_H#include <e32base.h>#include "vpnnotifierdefs.h"#include "vpnapi.h"#include "vpnnotifierdefs.h"class CZipFileDecompressor;class CApaCommandLine;class CVpnPolicyInstaller;/** * Activeobject for wait note during policy import procedure * */class CImportWaitNoteHandler : public CActive {public: static CImportWaitNoteHandler* NewL(CVpnPolicyInstaller* aCallBack); CImportWaitNoteHandler(CVpnPolicyInstaller* aCallBack); ~CImportWaitNoteHandler();protected: void DoCancel(); void RunL(); TInt RunError(TInt aError); void ConstructL();public: /** * Starts the wait note. The exact nature of note depends on aNoteId * parameter. * * @param aNoteId The note type to display. Possible values are * TVpnDialog::EPolicyInstallInProgress ("Importing"; default) * and TVpnDialog::EGenericProgress ("Processing" with no cancel) */ void StartWaitNote(TInt aNoteId = TVpnDialog::EPolicyInstallInProgress);protected: TPckgBuf<TVpnDialogInfo> iDialogInfoDes; TPckgBuf<TVpnDialogOutput> iDialogResponseDes; RNotifier iNotifier; TInt iStatem; // Callback used when cancel occurs CVpnPolicyInstaller* iCallBack; };class CVpnPolicyInstaller : public CActive {public: static CVpnPolicyInstaller* NewL(); ~CVpnPolicyInstaller(); void InstallPolicy(); void DialogDismissedL(TInt /*aButtonId*/) { }; void UserCancelledWait(); void CancelWaitNote();protected: // From CActive void DoCancel(); void RunL(); TInt RunError(TInt aError);private: CVpnPolicyInstaller(); void ConstructL(); /** * Starts the policy installation process */ void InstallPolicyL(); /** * Unzips the .VPN zipped file */ void DeflateZippedPolicyL(); /** * "Emtpies" the temp dir that was used for zip extraction */ void EmtpyTempDirL(); /** * Locate the command file from the extracted VPN file contents, * and parse it. Parsed variables are stored locally to CVpnPolicyInstaller * instance (at the moment, the variables are PKCS#12 password, * device lock policy level and device lock optionality information) */ void ExtractAndParseCmdFileL(); /** * Install a policy that is unpacked. Used after a VPN file has been * decompressed, as well. */ void InstallPinPolicyL(const TDesC& aFileDirectory); /** * Shows a generic "Installation failed" note */ void ShowImportErrorNote(const TInt aReason = KErrGeneral); /** * Shows the device lock related confirmation note * "Import VPN policy X? Note: devlock will be forced" * * @return ETrue iff the user gave positive confirmation */ TBool ShowDevLockConfirmNote(); /** * Shows the standard confirmation note * "Import VPN policy X?" * Used when a) no devlock used or b) devlock use is optional and * no device lock found / device lock not accessible by VPN. * * @return ETrue iff the user gave positive confirmation */ TBool ShowConfirmNote(); /** * Shows a wait note. Default wait note is "Importing policy" (can * be cancelled). For special purposes, a generic "Processing" wait * note (non-cancellable) can be used. * * @param aNoteId The type of the note to display. Valid values are * TVpnDialog::EPolicyInstallInProgress and * TVpnDialog::EGenericProgress */ void ShowWaitNoteL(TInt aNoteId = TVpnDialog::EPolicyInstallInProgress); /** * Continues policy install operation * */ void ContinueInstallPolicyL(); /** * After VPN zip has been decompressed, go through its contents, * locate the commanad / p12 files, check the device lock status, * parse command file, and extract p12 objects. * */ void ProcessBundleContentsL(); /** * Parse cmd file XML and extract the relevant parameters to local * instance variables * * @param aCmdData XML-formatted cmd file data, in 8bit descriptor * * @leave Leaves if oom, or if data is corrupted */ void ExtractCommandParametersL(const TDesC8& aCmdData); /** * Dump PKCS#12 objects into separate files * * @param aData Raw PKCS#12 data in binary format * @param aPwd The password used for descrambling PKCS#12 data. * If password is wrong, it will be prompted again (and again, * and again...) * * @leave Leaves if PKCS#12 is corrupt or OOM * */ void ExtractPKCS12ObjectsL(const TDesC8& aData, const TDesC& aPwd); /** * Checks whether device lock is available, and usable by VPN. * Returns false if it's not. Leaves in case of OOM. * * @return ETrue iff device lock is available and VPN-enabled */ TBool IsDeviceLockAvailable(); /** * Checks whether Device Lock is available / requested, and then * prompts the user about it with confirm note * * @return ETrue if user confirmed devicelock policy install */ TBool ConfirmDeviceLockUseL(); /** * Applies the device lock settings. This should be done only after * the policy has been successfully imported. * * @leave Leaves if OOM or if there are problems with device * lock access. * */ void ApplyDevLockSettingsL(); enum TTask { ETaskNone = 1, ETaskImportPinPolicies, ETaskImportZippedPolicies, ETaskShowImportErrorNote }; RNotifier iNotifier; RVpnApi iVpnServ; RFs iFileServer; CApaCommandLine* iCommandLine; HBufC* iDriveAndPath; HBufC* iFormat; HBufC8* iFileName; HBufC* iP12Password; TInt iDevLockPolicy; TBool iDevLockRequired; TBool iDevSupportsDevLock; TTask iOngoingTask; RLibrary iTCLib; CZipFileDecompressor* iDecompressor; TPckgBuf<TVpnDialogInfo> iDialogInfoDes; TPckgBuf<TVpnDialogOutput> iDialogResponseDes; CImportWaitNoteHandler* iWaitNoteHandler; };#endif // C_VPNPOLICYINSTALLER_H