javamanager/javacaptain/systemams/src/systemamstrader.cpp
author Shabe Razvi <shaber@symbian.org>
Thu, 02 Sep 2010 15:46:18 +0100
branchRCL_3
changeset 68 67b21c8abcea
parent 19 04becd199f91
permissions -rw-r--r--
Merge RCL_3 fixes with reverted delivery

/*
* 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);
}