diff -r 473321461bba -r e06095241a65 vpnengine/ikev1lib/inc/credentialcache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/ikev1lib/inc/credentialcache.h Wed Sep 01 12:23:21 2010 +0100 @@ -0,0 +1,152 @@ +/* +* Copyright (c) 2010 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: Cache for authentication credentials +* +*/ + +#ifndef CREDENTIALCACHE_H +#define CREDENTIALCACHE_H + +#include +#include + + +class MIkeDebug; + + +const TInt KCredentialMaxLen = 64; + + +/** + * Cache buffer stored to file. + */ +struct TCacheBuffer{ + TVpnPolicyId iId; + TBuf8 iUser; + TBuf8 iSecret; +}; + + +/** + * Cache for authentication credentials. + * The public interface of the class has been + * designed for CTransNegotiation use. + * + * Error handling: + * The methods return error code or leave only if + * it is useful for the method caller to handle the error. + * The user of CCredentialCache must work even if the + * cache fails. (The credentials are asked from user in that case.) + * + * Example usage sequence: + * NewL + * SetUserName + * SetSecret + * Store + * GetCredentials + */ +NONSHARABLE_CLASS( CCredentialCache ) : public CBase{ + public: + /** + * Two-phased constructor. + * @param aDebug Debug log interface. + */ + static CCredentialCache* NewL( MIkeDebug& aDebug ); + + ~CCredentialCache(); + + /** + * Sets user-name. Does not store to file. + * @param aUser User name. + */ + void SetUserName( const TDesC8& aUser ); + + /** + * Sets secret, e.g. password. Does not store to file. + * @param aSecret Secret, e.g. password. + */ + void SetSecret( const TDesC8& aSecret ); + + /** + * Gets credentials from cache file. + * Caller is responsible for deallocating aUser and aSecret. + * + * @param aVpnApId VPN access point id + * @param aUser On return, user name. + * @param aSecret On return, secret. + * + * @return KErrNone if credentials are fetched from cache. + * @return System-wide error code if cached credentials are not available. + */ + TInt GetCredentials( + const TUint32 aVpnApId, HBufC8*& aUser, HBufC8*& aSecret + ); + + /** + * Stores user-name and secret to private file. + * @param aVpnApId VPN access point id. + */ + void Store( const TUint32 aVpnApId ); + + /** + * Clears cache. + */ + void Clear(); + + private: + CCredentialCache( MIkeDebug& aDebug ); + + void ConstructL(); + + /** + * Gets credentials from cache file. + */ + TInt GetCredentialsL( + const TUint32 aVpnApId, HBufC8*& aUser, HBufC8*& aSecret + ); + + /** + * Stores user-name and secret to private file. + */ + void StoreL( const TUint32 aVpnApId ); + + TInt CheckCredential( const TDesC8& cr ); + + /** + * Stores cache to private file. + */ + void StoreToFileL(); + + /** + * Reads cache data to iBuf. + */ + TInt ReadFile(); + + /** + * Stores file name with path to iFileName. + * Creates private path if needed. + */ + TInt CreateFileNameAndPath(); + + RFs iFs; + + TCacheBuffer iBuf; + + TFileName iFileName; + + MIkeDebug& iDebug; +}; + + +#endif // CREDENTIALCACHE_H