// Copyright (c) 2004-2009 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:// Implementations of CABSessionMap and CABSessionElement classes.// ///** @file*/#include "absession.h"#include "absessionmap.h"#include "sbedataowner.h"#include "sbepanic.h"namespace conn { CABSessionElement::CABSessionElement(TSecureId aSecureId) : iKey(aSecureId), iValue(NULL) /** Class Constructor @param aSecureId The secure Id of the data owner that the session has been created for */ { } CABSessionElement::~CABSessionElement() /** Class destructor */ { } CABSessionElement* CABSessionElement::NewL(TSecureId aSecureId) /** Symbian first phase constructor @param aSecureId The secure Id of the data owner that the session has been created for */ { CABSessionElement* self = new (ELeave) CABSessionElement(aSecureId); CleanupStack::PushL(self); self->ConstructL(); CleanupStack::Pop(self); return self; } void CABSessionElement::ConstructL() /** Create the session for the data owner specified by iKey */ { // Note that the server takes ownership of the session, not this object iValue = CABSession::NewL(iKey); } CABSessionMap* CABSessionMap::NewL() /** Symbian first phase constructor @return Pointer to a created CABSessionMap object */ { CABSessionMap* self = new (ELeave) CABSessionMap; return self; } CABSession& CABSessionMap::CreateL(TSecureId aSecureId) /** Create a new element and session, returning that session if required @param aSecureId The SID to initialise the session with @return Reference to the created session */ { CABSessionElement* element = CABSessionElement::NewL(aSecureId); CleanupStack::PushL(element); iMapElements.AppendL(element); CleanupStack::Pop(element); return element->Value(); } void CABSessionMap::Delete(TSecureId aSecureId) /** Delete the session and remove it from the map @param aSecureId The key to the session to be deleted */ { TInt count = iMapElements.Count(); for (TInt index = 0; index < count; index++) { if (iMapElements[index]->Key() == aSecureId) { delete iMapElements[index]; iMapElements.Remove(index); break; } } } CABSession& CABSessionMap::SessionL(TSecureId aSecureId) /** Accessor for the session using the SID as the key @param aSecureId The SID of the DO that's connected to the returned session @leave KErrNotFound If no session exists for that SID @return The session that the DO with SID aSecureId is connected to */ { TInt count = iMapElements.Count(); CABSession* pSession = NULL; for (TInt index = 0; index < count; index++) { if (iMapElements[index]->Key() == aSecureId) { pSession = &iMapElements[index]->Value(); break; } } if (!pSession) { User::Leave(KErrNotFound); } return *pSession; } CABSessionMap::CABSessionMap() /** Class Constructor */ { } CABSessionMap::~CABSessionMap() /** Class destructor */ { iMapElements.ResetAndDestroy(); iMapElements.Close(); } void CABSessionMap::InvalidateABSessions() /** Set each CABSession currently hold in the map as invalid */ { TInt count = iMapElements.Count(); CABSession* pSession = NULL; for (TInt index = 0; index < count; index++) { pSession = &iMapElements[index]->Value(); if (pSession) { pSession->SetInvalid(); } } } }