pkiutilities/DeviceToken/Src/TruSitesStore/Client/TrustedSitesStore.cpp
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/DeviceToken/Src/TruSitesStore/Client/TrustedSitesStore.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,315 @@
+/*
+* Copyright (c) 2006 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:   Implementation of TrustedSitesStore
+*
+*/
+
+
+
+#include <x509cert.h>
+#include "TrustedSitesStore.h"
+#include "DevandTruSrvCertStore.h"
+#include "DevTokenType.h"
+#include "DevToken.h"
+#include "DevTokenUtils.h"
+#include "DevTokenImplementationUID.hrh"
+
+const TInt KSHA1Length = 20;
+
+// Define the default size. If overflow, the function 
+// SendSyncRequestAndHandleOverflowL() will handle.
+const TInt KDefaultBufferSize = 256;
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::NewL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTrustSitesStore* CTrustSitesStore::NewL()
+    {
+    CTrustSitesStore* me = new (ELeave) CTrustSitesStore();
+    CleanupStack::PushL(me);
+    me->ConstructL();
+    CleanupStack::Pop(me);
+    return (me);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::CTrustSitesStore()
+// -----------------------------------------------------------------------------
+//
+CTrustSitesStore::CTrustSitesStore() :
+  iRequestPtr(NULL, 0, 0) 
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::~CTrustSitesStore()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTrustSitesStore::~CTrustSitesStore()
+    {
+    FreeRequestBuffer();  
+    if ( iClientSession )
+        {
+        iClientSession->Close();
+        delete iClientSession;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CTrustSitesStore::ConstructL()
+    { 
+    iClientSession = RDevTokenClientSession::ClientSessionL();
+    User::LeaveIfError(iClientSession->Connect(ETruSitesStore));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::AddL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CTrustSitesStore::AddL( const TDesC8& aCertificate, const TDesC& aTrustedSite )
+    {
+    if( !(aCertificate.Length() > KSHA1Length) || !( aTrustedSite.Length() > 0) )
+        {
+        User::LeaveIfError(KErrArgument);
+        }
+
+    CX509Certificate* cert = CX509Certificate::NewL(aCertificate);
+    TBuf8<KSHA1Length> certHash;
+    certHash.Copy(cert->Fingerprint());
+    delete cert;
+
+    TIpcArgs args(&certHash, &aTrustedSite, NULL, NULL);
+    TInt r = iClientSession->SendRequest(EAddTrustSite, args);  
+    return r; 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::AddForgivenSiteL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CTrustSitesStore::AddForgivenSiteL( const TDesC& aSite, const TBool& aIsOutOfDateAllowed )
+    {
+    if( !( aSite.Length() > 0) )
+        {
+        User::LeaveIfError(KErrArgument);
+        }
+
+    TIpcArgs args( &aSite, aIsOutOfDateAllowed );
+    TInt r = iClientSession->SendRequest(EAddForgivenSite, args);  
+    return r; 	
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::RemoveForgivenSiteL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CTrustSitesStore::RemoveForgivenSiteL( const TDesC& aSite )
+	{
+	TIpcArgs args( &aSite );
+	TInt r = iClientSession->SendRequest(ERemoveForgivenSite, args);  
+	return r;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::IsOutOfDateAllowedL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CTrustSitesStore::IsOutOfDateAllowedL( const TDesC8& aCertificate, const TDesC& aTrustedSite )
+    {
+    if( !(aCertificate.Length() > 0) || !( aTrustedSite.Length() > 0) )
+        {
+        User::LeaveIfError(KErrArgument);
+        }
+
+    CX509Certificate* cert = CX509Certificate::NewL(aCertificate);
+    TBuf8<KSHA1Length> certHash;
+    certHash.Copy(cert->Fingerprint());
+    delete cert;
+    cert = NULL;
+
+    TIpcArgs args(&certHash, &aTrustedSite );
+    TInt r = iClientSession->SendRequest(EIsOutOfDateAllowed, args); 
+    if( r > 0 )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;  
+        } 	
+   }
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::IsTrustedSiteL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CTrustSitesStore::IsTrustedSiteL( const TDesC8& aCertificate, const TDesC& aTrustedSite )
+    {
+    if( !(aCertificate.Length() > 0) || !( aTrustedSite.Length() > 0) )
+        {
+        User::LeaveIfError(KErrArgument);
+        }
+
+    CX509Certificate* cert = CX509Certificate::NewL(aCertificate);
+    TBuf8<KSHA1Length> certHash;
+    certHash.Copy(cert->Fingerprint());
+    delete cert;
+    cert = NULL;
+
+    TIpcArgs args(&certHash, &aTrustedSite, &aCertificate );
+    TInt r = iClientSession->SendRequest(EIsTrustedSite, args); 
+    if( r > 0 )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;  
+        } 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::GetTrustedSitesL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CTrustSitesStore::GetTrustedSitesL( const TDesC8& aCertificate, RPointerArray<HBufC>& aListOfSites )       
+    {
+    if( !(aCertificate.Length() > 0 ) ) 
+        {
+        User::LeaveIfError(KErrArgument);
+        }
+
+    CX509Certificate* cert = CX509Certificate::NewL(aCertificate);
+    TBuf8<KSHA1Length> certHash;
+    certHash.Copy(cert->Fingerprint()); 
+    delete cert;
+    cert = NULL;
+
+    TIpcArgs args( &certHash, &iRequestPtr, NULL, NULL );
+
+    TRAPD(err, SendSyncRequestAndHandleOverflowL(KDefaultBufferSize, args));
+    if(err!=KErrNone)
+        {
+        return err;
+        }
+
+    TRAP(err, DevTokenDataMarshaller::ReadL( iRequestPtr, aListOfSites ));
+    if( err!= KErrNone )
+        {
+        return err;
+        }
+    return KErrNone;    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::RemoveL()
+// -----------------------------------------------------------------------------
+//
+/*EXPORT_C TInt CTrustSitesStore::RemoveL( const TDesC8& aCertificate )
+    {
+    if( !(aCertificate.Length() > 0 ) )
+        {
+        User::LeaveIfError(KErrArgument);
+        }
+
+    CX509Certificate* cert = CX509Certificate::NewL(aCertificate);
+    TBuf8<KSHA1Length> certHash;
+    certHash.Copy(cert->Fingerprint()); 
+
+    TIpcArgs args( &certHash, NULL, NULL, NULL );
+
+    TInt r = iClientSession->SendRequest(ERemove, args);  
+    return r; 
+    }*/
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::FreeRequestBuffer()
+// -----------------------------------------------------------------------------
+//
+void CTrustSitesStore::FreeRequestBuffer() 
+    {
+    delete iRequestDataBuf; 
+    iRequestDataBuf = NULL;
+    iRequestPtr.Set(NULL, 0, 0);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::AllocRequestBuffer()
+// -----------------------------------------------------------------------------
+//
+TInt CTrustSitesStore::AllocRequestBuffer(TInt aReqdSize) 
+    {
+    ASSERT(aReqdSize > 0);
+    TInt result = KErrNoMemory;
+
+    FreeRequestBuffer();
+    iRequestDataBuf = HBufC8::NewMax(aReqdSize);
+    if (iRequestDataBuf)
+        {
+        iRequestPtr.Set(iRequestDataBuf->Des());
+        iRequestPtr.FillZ();
+        result = KErrNone;
+        }
+
+    return result;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CTrustSitesStore::SendSyncRequestAndHandleOverflowL()
+// -----------------------------------------------------------------------------
+//
+void CTrustSitesStore::SendSyncRequestAndHandleOverflowL(TInt aInitialBufSize,
+                          const TIpcArgs& aArgs) 
+    {
+
+    TDevTokenMessages message;
+    message = EGetTrustedSites; 
+
+    User::LeaveIfError(AllocRequestBuffer(aInitialBufSize));
+
+    TInt err = iClientSession->SendRequest(message, aArgs);
+    if (err == KErrOverflow)
+        {
+        TInt sizeReqd = 0;
+        TPckg<TInt> theSize(sizeReqd);
+        theSize.Copy(iRequestPtr);
+        User::LeaveIfError(AllocRequestBuffer(sizeReqd));     
+        err = iClientSession->SendRequest(message, aArgs);
+        }
+
+    User::LeaveIfError(err);
+    }
+ 
+//EOF
+
+
+