diff -r 000000000000 -r 164170e6151a pkiutilities/DeviceToken/Src/TruSitesStore/Server/TrustedSitesConduit.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/DeviceToken/Src/TruSitesStore/Server/TrustedSitesConduit.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,268 @@ +/* +* 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 TrustedSitesStoreConduit +* +*/ + + + +#include "TrustedSitesConduit.h" +#include "TrustedSitesServer.h" +#include "DevTokenMarshaller.h" +#include "DevTokenUtil.h" +#include "DevTokenDataTypes.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::NewL() +// --------------------------------------------------------------------------- +// +CTrustedSitesConduit* CTrustedSitesConduit::NewL(CTrustedSitesServer& aServer) + { + return new (ELeave) CTrustedSitesConduit(aServer); + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::CTrustedSitesConduit() +// --------------------------------------------------------------------------- +// +CTrustedSitesConduit::CTrustedSitesConduit(CTrustedSitesServer& aServer) : + iServer(aServer) + { + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::~CTrustedSitesConduit() +// --------------------------------------------------------------------------- +// +CTrustedSitesConduit::~CTrustedSitesConduit() + { + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::AllocResponseBufferLC() +// --------------------------------------------------------------------------- +// +HBufC8* CTrustedSitesConduit::AllocResponseBufferLC(TInt aSize, const RMessage2& aMessage) + { + TInt writeBufLen = aMessage.GetDesLengthL(1); + + if (aSize > writeBufLen) + { + TPckg theRequiredLength(aSize); + aMessage.WriteL(1, theRequiredLength); + User::Leave(KErrOverflow); + } + + HBufC8* result = HBufC8::NewMaxLC(aSize); + TPtr8 ptr = result->Des(); + ptr.FillZ(); + + return result; + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::ServiceTrustedSitesRequestL() +// --------------------------------------------------------------------------- +// +void CTrustedSitesConduit::ServiceTrustedSitesRequestL(const RMessage2& aMessage) + { + TDevTokenMessages request = (TDevTokenMessages) aMessage.Function(); + TInt result = KErrNone; + + switch (request) + { + case EAddTrustSite: + AddL(aMessage); + break; + + case EAddForgivenSite: + AddForgivenSiteL( aMessage ); + break; + + case ERemoveForgivenSite: + RemoveForgivenSiteL( aMessage ); + break; + + case EIsTrustedSite: + result = IsTrustedSiteL( aMessage ); + break; + case EGetTrustedSites: + GetTrustedSitesL( aMessage ); + break; + + case EIsOutOfDateAllowed: + result = IsOutOfDateAllowedL( aMessage ); + break; + default: + // Client made an illegal request + PanicClient(aMessage, EPanicInvalidRequest); + return; + } + + aMessage.Complete(result); + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::AddL() +// --------------------------------------------------------------------------- +// +void CTrustedSitesConduit::AddL( const RMessage2& aMessage ) + { + HBufC8* certHash = HBufC8::NewLC(20); + TPtr8 ptrCertHash = certHash->Des(); + aMessage.ReadL(0,ptrCertHash); + + TInt bufLen = aMessage.GetDesLengthL(1); + HBufC* siteName = HBufC::NewLC(bufLen); + TPtr ptrSiteName = siteName->Des(); + aMessage.ReadL(1,ptrSiteName); + + iServer.AddL( *certHash, *siteName, aMessage ); + + CleanupStack::PopAndDestroy(2); + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::AddForgivenSiteL() +// --------------------------------------------------------------------------- +// +void CTrustedSitesConduit::AddForgivenSiteL( const RMessage2& aMessage ) + { + TInt bufLen = aMessage.GetDesLengthL(0); + HBufC* forgivenSite = HBufC::NewLC(bufLen); + TPtr ptrSite = forgivenSite->Des(); + aMessage.ReadL(0,ptrSite); + + TInt outofdateallowed = aMessage.Int1(); + iServer.AddForgivenSiteL( *forgivenSite, (TBool)outofdateallowed, aMessage ); + + CleanupStack::PopAndDestroy(1); + } + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::RemoveForgivenSiteL() +// --------------------------------------------------------------------------- +// +void CTrustedSitesConduit::RemoveForgivenSiteL( const RMessage2& aMessage ) + { + TInt bufLen = aMessage.GetDesLengthL(0); + + if ( bufLen == 0 ) + { + iServer.RemoveAllForgivenSitesL( aMessage ); + } + else + { + HBufC* forgivenSite = HBufC::NewLC( bufLen ); + TPtr ptrSite = forgivenSite->Des(); + aMessage.ReadL(0,ptrSite); + + iServer.RemoveThisForgivenSiteL( *forgivenSite, aMessage ); + + CleanupStack::PopAndDestroy(1); + } + } + + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::IsTrustedSiteL() +// --------------------------------------------------------------------------- +// +TInt CTrustedSitesConduit::IsTrustedSiteL( const RMessage2& aMessage ) + { + HBufC8* certHash = HBufC8::NewLC(20); + TPtr8 ptrCertHash = certHash->Des(); + aMessage.ReadL(0,ptrCertHash); + + TInt bufLen = aMessage.GetDesLengthL(1); + HBufC* siteName = HBufC::NewLC(bufLen); + TPtr ptrSiteName = siteName->Des(); + aMessage.ReadL(1,ptrSiteName); + + //get the certifcate + bufLen = aMessage.GetDesLength(2); + HBufC8* cert = HBufC8::NewLC( bufLen ); + TPtr8 ptrCert = cert->Des(); + aMessage.ReadL(2, ptrCert ); + + TBool result = iServer.IsTrustedSiteL( *certHash, *siteName, *cert, aMessage ); + + CleanupStack::PopAndDestroy(3); //certHash, siteName, cert + + return result? 1 : 0; + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::IsOutOfDateAllowedL() +// --------------------------------------------------------------------------- +// +TInt CTrustedSitesConduit::IsOutOfDateAllowedL( const RMessage2& aMessage ) + { + HBufC8* certHash = HBufC8::NewLC(20); + TPtr8 ptrCertHash = certHash->Des(); + aMessage.ReadL(0,ptrCertHash); + + TInt bufLen = aMessage.GetDesLengthL(1); + HBufC* siteName = HBufC::NewLC(bufLen); + TPtr ptrSiteName = siteName->Des(); + aMessage.ReadL(1,ptrSiteName); + + + TBool result = iServer.IsOutOfDateAllowedL( *certHash, *siteName, aMessage ); + + CleanupStack::PopAndDestroy(2); //certHash, siteName + + return result? 1 : 0; + } + + +// --------------------------------------------------------------------------- +// CTrustedSitesConduit::GetTrustedSitesL() +// --------------------------------------------------------------------------- +// +void CTrustedSitesConduit::GetTrustedSitesL( const RMessage2& aMessage ) + { + HBufC8* certHash = HBufC8::NewLC(20); + TPtr8 ptrCertHash = certHash->Des(); + aMessage.ReadL(0,ptrCertHash); + + RPointerArray sites; + + iServer.GetTrustedSitesL(*certHash, sites, aMessage ); + + HBufC8* clientBuffer = AllocResponseBufferLC(DevTokenDataMarshaller::Size(sites), aMessage); + TPtr8 theData(clientBuffer->Des()); + + DevTokenDataMarshaller::Write(sites, theData); + + aMessage.WriteL(1, theData); + + sites.ResetAndDestroy(); + + CleanupStack::PopAndDestroy(2); //certhash, clientbuffer + } + + +//EOF