diff -r e8e63152f320 -r 2a9601315dfc javamanager/javacaptain/systemams/src/systemamstrader.cpp --- /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 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(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); +}