pkiutilities/DeviceToken/Src/KeyStore/Server/DevCertKeyStoreSession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

/*
* 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 DevCertKeyStoreSession
*
*/



#include "DevCertKeyStoreSession.h"
#include "DevCertKeyStoreServer.h"
#include "DevCertOpenedKeysSrv.h"


// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::NewL()
// ---------------------------------------------------------------------------
// 
CDevCertKeyStoreSession* CDevCertKeyStoreSession::NewL( CDevCertKeyStoreServer& aServer )
    {
    return new (ELeave) CDevCertKeyStoreSession( aServer );
    }


// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::CDevCertKeyStoreSession()
// ---------------------------------------------------------------------------
// 
CDevCertKeyStoreSession::CDevCertKeyStoreSession(CDevCertKeyStoreServer& aServer )
  : iServer(aServer)
    {
    }


// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::~CDevCertKeyStoreSession()
// ---------------------------------------------------------------------------
//
CDevCertKeyStoreSession::~CDevCertKeyStoreSession()
    {
    iServer.RemoveSession(*this);

    for (TInt i = 0 ; i < iOpenedKeys.Count() ; ++i)
        {
        CDevCertOpenedKeySrv* object = iOpenedKeys[i].iObject;
        delete object;
        }
    iOpenedKeys.Close();
    }


// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::DoServiceL()
// ---------------------------------------------------------------------------
//
void CDevCertKeyStoreSession::DoServiceL(const RMessage2& aMessage)
    {
    iServer.ServiceRequestL(aMessage, *this);
    }


// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::AddOpenedKeyL()
// ---------------------------------------------------------------------------
//
TInt CDevCertKeyStoreSession::AddOpenedKeyL(CDevCertOpenedKeySrv& aObject)
    {
    TObjectIndex oi;
    oi.iObject = &aObject;
    oi.iHandle = ++iLastHandle;
    User::LeaveIfError(iOpenedKeys.InsertInSignedKeyOrder(oi));
    return oi.iHandle;
    }


// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::RemoveOpenedKeyL()
// ---------------------------------------------------------------------------
//
void CDevCertKeyStoreSession::RemoveOpenedKeyL(TInt aHandle)
    {
    TObjectIndex oi;
    oi.iHandle = aHandle;
    TInt pos = iOpenedKeys.Find(oi);
    User::LeaveIfError(pos);
    delete iOpenedKeys[pos].iObject;
    iOpenedKeys.Remove(pos);  
    }


// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::OpenedKey()
// ---------------------------------------------------------------------------
//
CDevCertOpenedKeySrv* CDevCertKeyStoreSession::OpenedKey(TInt aHandle)
    {
    TObjectIndex oi;
    oi.iHandle = aHandle;
    TInt pos = iOpenedKeys.Find(oi);
    return (pos != KErrNotFound) ? iOpenedKeys[pos].iObject : NULL;
    }


// ---------------------------------------------------------------------------
// CDevCertKeyStoreSession::HasOpenKey()
// ---------------------------------------------------------------------------
//
TBool CDevCertKeyStoreSession::HasOpenKey(TInt aHandle)
    {
    TBool result = EFalse;
    for (TInt i = 0 ; i < iOpenedKeys.Count() ; ++i)
        {
        CDevCertOpenedKeySrv* object = iOpenedKeys[i].iObject;
        if (object->Handle() == aHandle)
            {
            result = ETrue;
            break;
            }
        }
    return result;
    }

//EOF