--- /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
+
+
+