diff -r 000000000000 -r 33413c0669b9 vpnui/vpnpolins/inc/vpndevlockhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnui/vpnpolins/inc/vpndevlockhandler.h Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,388 @@ +/* +* Copyright (c) 2007 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: Device lock handling related classes +* +*/ + + + + +#ifndef C_VPNDEVLOCKHANDLER_H +#define C_VPNDEVLOCKHANDLER_H + +#include +#include +#include + +class CVpnTcStub; + +/** + * Process: + * 1. Instantiate devlock policy handler + * 2. Make sure devlock is available and VPN can use it + * If TerminalControlUsableL() leaves, device lock can't be used. + * 3. (do other required stuff, e.g. pkcs12 deciphering and + * policy installation) + * 4. Set the desired terminal control device lock policy by + * calling SetTerminalControlPolicyL(). TInt parameter + * dictates what kind of a policy will be set. + * If there are mutual attributes which exist in both + * current TC dev lock settings and in the intended + * VPN-imported settings, always use the stricter + * value for the attribute (i.e. if VPN wants to set devlock + * timeout to 50 and current policy has a timeout 20, stick + * with the current policy). + */ + +/** + * CVpnDevLockAttribute class defines a single devicelock related + * attribute and its value. E.g. "ETimeout" with value "30" (minutes). + * + * ID range comes from TerminalControl3rdPartyAPI.h. + * + */ +class CVpnDevLockAttribute : public CBase + { +public: + /** + * Instantiate a single attribute, with given ID and value + * + * @param aId The ID of the attribute, from TerminalControl3rdPartyAPI + * defined range + * @param aVal The string value of the attribute. New memory will be allocated + * locally for the value. + * + * @return CVpnDevLockAttribute* the instantiated object. + * + * @leave Leaves if OOM + */ + static CVpnDevLockAttribute* NewL(const TInt aId, const TDesC8& aVal); + + /** + * Instantiate a single attribute, with given ID and value + * + * @param aId The ID of the attribute, from TerminalControl3rdPartyAPI + * defined range + * @param aVal The TInt value of the attribute. It will be converted to a HBufC8 + * internally, and new memory will be allocated locally for the new string. + * + * @return CVpnDevLockAttribute* the instantiated object. + * + * @leave Leaves if OOM + */ + static CVpnDevLockAttribute* NewL(const TInt aId, const TInt aVal); + + /** + * Instantiate a single attribute, with given ID and value. + * The instantiated object will remain in CleanupStack. + * + * @return CVpnDevLockAttribute* the instantiated object. + * + * @leave Leaves if OOM + */ + static CVpnDevLockAttribute* NewLC(const TInt aId, const TDesC8& aVal); + + /** + * Destructor deletes the attribute's locally controlled resources. + * + */ + ~CVpnDevLockAttribute(); + +private: + CVpnDevLockAttribute(); + +protected: + /** + * Instantiate a single attribute, with given ID and value + * + * @param aId The ID of the attribute, from TerminalControl3rdPartyAPI + * defined range + * @param aVal The string value of the attribute. New memory will be + * allocated locally for the new string. + * + * @leave Leaves if OOM + */ + void ConstructL(const TInt aId, const TDesC8& aVal); + + /** + * Instantiate a single attribute, with given ID and value + * + * @param aId The ID of the attribute, from TerminalControl3rdPartyAPI + * defined range + * @param aVal The TInt value of the attribute. It will be converted to a HBufC8 + * internally, and new memory will be allocated locally for the new string. + * + * @leave Leaves if OOM + */ + void ConstructL(const TInt aId, const TInt aVal); + +public: + + /** + * Returns the TPtrC8 to the attribute value + * + * @return KNullDesC8 if no attrib value set, the value otherwise + */ + TPtrC8 AttributeValue() const; + + /** + * Returns the ID of the attribute. IDs are defined in + * + * @return TInt ID of the attribute + * + */ + TInt AttributeId() const; + + /** + * Returns the attribute value converted to TInt + * + * @param aVal The TInt version of the parameter + * + * @leave Leaves if the value is not convertible to TInt + */ + void AttributeValueAsIntL(TInt& aVal) const; + +private: + TInt iAttributeId; + HBufC8* iAttributeVal; + }; + +/** + * CVpnDevLockPolicy is a container class for device lock related + * attributes. Attributes are stored as CVpnDevLockAttribute + * objects in the private member variable iPolicyArray. + * + * Attributes can be accessed using public accessors. + * + */ +class CVpnDevLockPolicy : public CBase + { +public: + /** + * Instantiates a new policy with a set of related attributes. + * Policy levels are defined in SUB SUB 415-467. Currently, + * policy levels 0..3 are supported. + * + * @return CVpnDevLockPolicy* the instantiated object. + * + * @leave Leaves if OOM, or if the requested policy level + * is not supported. + */ + static CVpnDevLockPolicy* NewL(const TInt aPolLevel); + + /** + * Instantiates a new policy with a set of related attributes. + * Policy levels are defined in SUB SUB 415-467. Currently, + * policy levels 0..3 are supported. The instantiated object + * will remain in CleanupStack. + * + * @return CVpnDevLockPolicy* the instantiated object. + * + * @leave Leaves if OOM, or if the requested policy level + * is not supported. + */ + static CVpnDevLockPolicy* NewLC(const TInt aPolLevel); + + /** + * Instantiates a new "empty" policy. The instantiated object + * will remain in CleanupStack. + * + * @return CVpnDevLockPolicy* the instantiated object. + * + * @leave Leaves if OOM. + */ + static CVpnDevLockPolicy* NewLC(); + + /** + * Destructor cleans up the locally allocated/controlled resources + */ + ~CVpnDevLockPolicy(); + +private: + CVpnDevLockPolicy(); + +protected: + void ConstructL(const TInt aPolLevel); + void ConstructL(); + +public: + + /** + * Returns the attribute count for the policy. + * + * @return TInt Total count of all defined + * attributes in the container + */ + TInt AttributeCount(); + + /** + * Returns the Policy attribute at the given attribute array + * index, if one exists. + * + * @param aIdx The index of the attribute requested. Must be + * between 0 and AttributeCount() - 1, inclusively + * + * @return The requested attribute or NULL if one didn't exist + * + */ + CVpnDevLockAttribute* GetPolicyAttributeAt(const TInt aIdx); + + /** + * Add an individual attribute for policy. + * + * @param aAttrib Attribute ID from device lock attribute range + * @param aVal The value to assign. Internally converted to a string. + * + * @leave Leaves if there is not enough memory; may leave, + * if the attribute id is out of range. + * + */ + void SetPolicyAttributeL(const TInt aAttrib, const TInt aVal); + + /** + * Add an individual attribute for policy + * + * @param aAttrib Attribute ID from device lock attribute range + * @param aVal The value to assign. + * + * @leave Leaves if there is not enough memory; may leave, + * if the attribute id is out of range. + * + */ + void SetPolicyAttributeL(const TInt aAttrib, const TDesC8& aVal); + +private: + + /** + * Sets pre-defined attribute values to the policy according to + * policy level. + * + * @param aPolLevel The requested policy level. Valid values + * range is 0..3. + * + * @leave Leaves if there is not enough memory to allocate + * the attribute strings, or if the requested + * policy level is not supported (KErrNotSupported) + */ + void SetPolicyLevelL(const TInt aPolLevel); + +private: + CArrayFixFlat* iPolicyArray; + }; + +/** + * The main class for device lock operations. + */ +class CVpnDevLockHandler : public CBase + { +public: + + static CVpnDevLockHandler* NewL(); + static CVpnDevLockHandler* NewLC(); + + /** + * Standard destructor + * + */ + ~CVpnDevLockHandler(); + +protected: + void ConstructL(); + +private: + CVpnDevLockHandler(); + +public: + + /** + * Checks whether VPN has access to terminal control device lock + * + * @leave Leaves when OOM. Leaves if VPN can't access device + * lock settings properly + */ + void TerminalControlSupportsVpnL(); + + /** + * Sets the terminal control's device lock policy to desired level. + * If there are some existing device lock attributes that are + * "stricter" than the new ones proposed by the policy level, + * those will be left intact. Otherwise, the new requested + * values will be applied. + * + */ + void SetTerminalControlPolicyL(const TInt aPolLevel); + +private: + + /** + * Checks whether there is a need to override the old existing + * device lock parameter value. Returns ETrue iff the new + * suggested value must be applied. + * + * @param aNew The suggested new attribute + * + * @ret TBool ETrue, if the old setting was more lenient than the + * new one, and therefore needs to be overridden. + * + * @leave Leaves when OOM + */ + TBool OverrideExistingL(const CVpnDevLockAttribute& aNew); + + /** + * Obtains from the device the current setting for the given + * attribute. + * + * @param aAttribId The ID of the attribute for which the value is + * to be fetched. + * + * @return A HBufC8* string containing the requested attribute + * value. Memory control of the object passes to the + * caller. + * + * @leave Leaves if OOM or if the device doesn't support + * the given attribute. + */ + HBufC8* GetDevAttribValueL(const TInt aAttribId); + + /** + * Sets the device's attribute (indicated by parameter's attribute id) + * to the value contained by the parameter. + * + * @param aNew A CVpnDevLockAttribute object containing the desired + * new settings + * + * @leave Leaves if OOM or if the device doesn't support + * the given attribute. + */ + void SetDevAttributeL(const CVpnDevLockAttribute& aNew); + + /** + * Dynamically load the device lock library (if it's available) + * + * @return KErrNone if the library was found and is usable + * @return KErrNotFound if lib wasn't found or is not usable. + */ + void LoadTCLibraryL(); + +private: + + RLibrary iTcLib; + + TBool iDevLockAvailable; + + CVpnTcStub* iTcStub; + }; + +#endif // C_VPNPOLICYINSTALLER_H +