diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/Dialogs/src/TransactionItemStore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/Dialogs/src/TransactionItemStore.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,243 @@ +// Copyright (c) 2005-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: +// Name : TransactionItemStore.cpp +// Part of : SIPDialogs +// Version : SIP/4.0 +// + + + +#include "SipStackServerDefs.h" +#include "TransactionItemStore.h" +#include "TransactionItem.h" +#include "RefreshItem.h" +#include "siprequest.h" + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::NewL +// ----------------------------------------------------------------------------- +// +CTransactionItemStore* CTransactionItemStore::NewL () + { + CTransactionItemStore* self = CTransactionItemStore::NewLC(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::NewLC +// ----------------------------------------------------------------------------- +// +CTransactionItemStore* CTransactionItemStore::NewLC () + { + CTransactionItemStore* self = new(ELeave)CTransactionItemStore(); + CleanupStack::PushL(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::CTransactionItemStore +// ----------------------------------------------------------------------------- +// +CTransactionItemStore::CTransactionItemStore () +: iList(CTransactionItemBase::Offset()) + { + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::~CTransactionItemStore +// ----------------------------------------------------------------------------- +// +CTransactionItemStore::~CTransactionItemStore() + { + TSglQueIter iter(iList); + for (CTransactionItemBase* item = iter++; item; item = iter++) + { + iList.Remove(*item); + delete item; + } + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::AddItem +// ----------------------------------------------------------------------------- +// +void CTransactionItemStore::AddItem(CTransactionItemBase* aTransactionItem) + { + iList.AddLast(*aTransactionItem); + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::HasItem +// ----------------------------------------------------------------------------- +// +TBool CTransactionItemStore::HasItem (TTransactionId aTransactionId) + { + if (!FindItem(aTransactionId)) + { + return EFalse; + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::FindItem +// ----------------------------------------------------------------------------- +// +CTransactionItemBase* +CTransactionItemStore::FindItem (TTransactionId aTransactionId) + { + CTransactionItemBase* foundItem = NULL; + TSglQueIter iter(iList); + for (CTransactionItemBase* item = iter++; item && !foundItem; item = iter++) + { + if (item->Id() == aTransactionId) + { + foundItem = item; + } + } + return foundItem; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::RemoveItem +// ----------------------------------------------------------------------------- +// +TInt CTransactionItemStore::RemoveItem (TTransactionId aTransactionId) + { + TInt err = KErrNotFound; + CTransactionItemBase* item = FindItem(aTransactionId); + if (item) + { + iList.Remove(*item); + delete item; + err = KErrNone; + } + return err; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::OverlappingRestricted +// ----------------------------------------------------------------------------- +// +TBool CTransactionItemStore::OverlappingRestricted (RStringF aMethod) + { + TSglQueIter iter(iList); + for (CTransactionItemBase* item = iter++; item; item = iter++) + { + if (item->OverlappingRestricted() && item->Method() == aMethod) + { + return ETrue; + } + } + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::HasRefreshedItems +// ----------------------------------------------------------------------------- +// +TBool CTransactionItemStore::HasRefreshedItems () + { + TBool found = EFalse; + TSglQueIter iter(iList); + for (CTransactionItemBase* item = iter++; item && !found; item = iter++) + { + if(item->IsRefreshed()) + { + found = ETrue; + } + } + return found; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::FindRefreshItem +// ----------------------------------------------------------------------------- +// +CRefreshItem* +CTransactionItemStore::FindRefreshItem (RStringF aMethod) + { + CRefreshItem* foundItem = 0; + TSglQueIter iter(iList); + for (CTransactionItemBase* item = iter++; item && !foundItem; item = iter++) + { + if (item->IsRefreshed() && item->Method() == aMethod) + { + foundItem = static_cast(item); + } + } + return foundItem; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::FindRefreshItem +// ----------------------------------------------------------------------------- +// +CRefreshItem* CTransactionItemStore::FindRefreshItem (TRefreshId aRefreshId) + { + CRefreshItem* foundItem = 0; + TSglQueIter iter(iList); + for (CTransactionItemBase* item = iter++; item && !foundItem; item = iter++) + { + if (item->IsRefreshed()) + { + CRefreshItem* refreshItem = static_cast(item); + if (refreshItem->RefreshId() == aRefreshId) + { + foundItem = refreshItem; + } + } + } + return foundItem; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::RefreshId +// ----------------------------------------------------------------------------- +// +TRefreshId CTransactionItemStore::RefreshId (TTransactionId aTransactionId) + { + TRefreshId id = KEmptyRefreshId; + TSglQueIter iter(iList); + for (CTransactionItemBase* item = iter++; item && !id; item = iter++) + { + if (item->IsRefreshed() && item->Id() == aTransactionId) + { + id = static_cast(item)->RefreshId(); + } + } + return id; + } + +// ----------------------------------------------------------------------------- +// CTransactionItemStore::RefreshItemIdsL +// ----------------------------------------------------------------------------- +// +RArray CTransactionItemStore::RefreshItemIdsL () + { + TSglQueIter iter(iList); + RArray ids; + CleanupClosePushL(ids); + for (CTransactionItemBase* item = iter++; item; item = iter++) + { + if (item->IsRefreshed()) + { + CRefreshItem* refreshItem = static_cast(item); + User::LeaveIfError(ids.Append(refreshItem->RefreshId())); + } + } + CleanupStack::Pop(1); // ids + return ids; + }