pkiutilities/DeviceToken/Src/TruSitesStore/Server/TrustedSitesConduit.cpp
changeset 0 164170e6151a
--- /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<TInt> 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<HBufC> 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