diff -r 000000000000 -r d0791faffa3f backupandrestore/backupengine/src/absessionmap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backupandrestore/backupengine/src/absessionmap.cpp Tue Feb 02 01:11:40 2010 +0200 @@ -0,0 +1,178 @@ +// 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 + +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(); + } + } + } + }