--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikev1lib/inc/credentialcache.h Thu Aug 19 10:54:34 2010 +0300
@@ -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 <e32base.h>
+#include <vpnapidefs.h>
+
+
+class MIkeDebug;
+
+
+const TInt KCredentialMaxLen = 64;
+
+
+/**
+ * Cache buffer stored to file.
+ */
+struct TCacheBuffer{
+ TVpnPolicyId iId;
+ TBuf8<KCredentialMaxLen> iUser;
+ TBuf8<KCredentialMaxLen> 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