javamanager/javacaptain/systemams/src/systemamstrader.cpp
changeset 21 2a9601315dfc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javacaptain/systemams/src/systemamstrader.cpp	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2008 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:  CSystemAMSTrader
+ *
+*/
+
+
+#include "logger.h"
+
+#include "systemamstrader.h"
+
+_LIT(KExecutableName, "javacaptain.exe");
+_LIT(KIadArg, "iad");
+
+using namespace java::security::legacysupport;
+
+CSystemAMSTrader::CSystemAMSTrader(TBool aIadStart) :
+        mIadStart(aIadStart)
+{
+    JELOG2(EJavaSystemAMS);
+}
+
+CSystemAMSTrader::~CSystemAMSTrader()
+{
+    JELOG2(EJavaSystemAMS);
+    delete mCertificatesManager;
+    mCertificatesManager = NULL;
+}
+
+void CSystemAMSTrader::StartL(TBool aIadStart)
+{
+    JELOG2(EJavaSystemAMS);
+
+    CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
+
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    CSystemAMSTrader* trader = new(ELeave) CSystemAMSTrader(aIadStart);
+    CleanupStack::PushL(trader);
+    trader->ConstructL();
+    CleanupStack::Pop(trader);
+
+    CActiveScheduler::Start();
+    CleanupStack::PopAndDestroy(scheduler);
+}
+
+
+void CSystemAMSTrader::ConstructL(void)
+{
+    int st;
+    RProcess proc;
+
+    if (mIadStart)
+    {
+        st = proc.Create(KExecutableName, KIadArg);
+    }
+    else
+    {
+        st = proc.Create(KExecutableName, KExecutableName);
+    }
+    if (st == KErrNone)
+    {
+        proc.Resume();
+        proc.Close();
+    }
+
+    RProcess::Rendezvous(st);
+
+    mPublicServer = new(ELeave) CLegacyServer(SERVER_ID_PUBLIC_C, this);
+    mPublicServer->StartL();
+
+    mSecurityAdminServer = new(ELeave) CLegacyServer(
+        SERVER_ID_SECURITY_ADMIN_C, this);
+    mSecurityAdminServer->StartL();
+
+    mCertificatesManager = CertificatesManager::NewL();
+}
+
+void CSystemAMSTrader::HandleMessageL(const int serverId,
+                                      const RMessage2& aMessage) const
+{
+    JELOG2(EJavaSystemAMS);
+
+    switch (serverId)
+    {
+    case SERVER_ID_PUBLIC_C:
+        handlePublicServerRequests(aMessage);
+        break;
+    case SERVER_ID_SECURITY_ADMIN_C:
+        handleSecurityAdminRequestsL(aMessage);
+        break;
+    }
+}
+
+void CSystemAMSTrader::handlePublicServerRequests(const RMessage2& aMessage) const
+{
+    JELOG2(EJavaSystemAMS);
+    // CanConnect
+    aMessage.Complete(KErrNone);
+}
+
+void CSystemAMSTrader::handleSecurityAdminRequestsL(const RMessage2& aMessage) const
+{
+    JELOG2(EJavaSystemAMS);
+    TInt ret = KErrNone;
+    HBufC* name = NULL;
+    TPtr namePtr(0, 0);
+    TPckgBuf<TUint32> trustRootCount(0);
+    switch (aMessage.Function())
+    {
+    case 1: // ETrustRootCount - in: protection domain name; out: count trust root info[]
+        LOG(EJavaSystemAMS, EInfo, "ETrustRootCount");
+        name    = HBufC::NewLC(aMessage.GetDesLengthL(0));
+        namePtr.Set(name->Des());
+        aMessage.ReadL(0, namePtr);
+        trustRootCount = TPckgBuf<TUint32>(mCertificatesManager->TrustRootCount(namePtr));
+        aMessage.WriteL(1, trustRootCount);
+        CleanupStack::PopAndDestroy(name);
+        break;
+
+    case 2: // ETrustRootInfo - in: protection domain name; out:
+        LOG(EJavaSystemAMS, EInfo, "ETrustRootInfo");
+        name    = HBufC::NewLC(aMessage.GetDesLengthL(0));
+        namePtr.Set(name->Des());
+        aMessage.ReadL(0, namePtr);
+        aMessage.WriteL(1, mCertificatesManager->TrustRootInfo(namePtr));
+        CleanupStack::PopAndDestroy(name);
+        break;
+
+    case 3: // ETrustRootInfoCertificate - in: trust root id; out: encoded certificate
+        LOG(EJavaSystemAMS, EInfo, "ETrustRootInfoCertificate");
+        TRAP(ret, aMessage.WriteL(1, mCertificatesManager->TrustRootInfoCertificateL(aMessage.Int0())));
+        break;
+
+    case 4: // EDeleteTrustRoot - in: trust root id
+        LOG(EJavaSystemAMS, EInfo, "EDeleteTrustRoot");
+        TRAP(ret, mCertificatesManager->DeleteTrustRootL(aMessage.Int0()));
+        break;
+
+    case 5: // EDisableTrustRoot - in: trust root id
+        LOG(EJavaSystemAMS, EInfo, "EDisableTrustRoot");
+        TRAP(ret, mCertificatesManager->DisableTrustRootL(aMessage.Int0()));
+        break;
+
+    case 6: // EEnableTrustRoot - in: trust root id
+        LOG(EJavaSystemAMS, EInfo, "EEnableTrustRoot");
+        TRAP(ret, mCertificatesManager->EnableTrustRootL(aMessage.Int0()));
+        break;
+    }
+
+    aMessage.Complete(ret);
+}