realtimenetprots/sipfw/SIP/Dialogs/src/TransactionItemStore.cpp
changeset 0 307788aac0a8
--- /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<CTransactionItemBase> 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<CTransactionItemBase> 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<CTransactionItemBase> 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<CTransactionItemBase> 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<CTransactionItemBase> iter(iList);
+	for (CTransactionItemBase* item = iter++; item && !foundItem; item = iter++)
+		{
+		if (item->IsRefreshed() && item->Method() == aMethod)
+			{
+			foundItem = static_cast<CRefreshItem*>(item);
+			}
+		}
+	return foundItem;
+    }
+
+// -----------------------------------------------------------------------------
+// CTransactionItemStore::FindRefreshItem
+// -----------------------------------------------------------------------------
+//
+CRefreshItem* CTransactionItemStore::FindRefreshItem (TRefreshId aRefreshId)
+    {
+    CRefreshItem* foundItem = 0;
+	TSglQueIter<CTransactionItemBase> iter(iList);
+	for (CTransactionItemBase* item = iter++; item && !foundItem; item = iter++)
+		{
+		if (item->IsRefreshed())
+			{
+            CRefreshItem* refreshItem = static_cast<CRefreshItem*>(item);
+            if (refreshItem->RefreshId() == aRefreshId)
+                {
+                foundItem = refreshItem;
+                }
+			}
+		}
+	return  foundItem;
+    }
+
+// -----------------------------------------------------------------------------
+// CTransactionItemStore::RefreshId
+// -----------------------------------------------------------------------------
+//
+TRefreshId CTransactionItemStore::RefreshId (TTransactionId aTransactionId)
+    {
+    TRefreshId id = KEmptyRefreshId;
+	TSglQueIter<CTransactionItemBase> iter(iList);
+	for (CTransactionItemBase* item = iter++; item && !id; item = iter++)
+		{
+		if (item->IsRefreshed() && item->Id() == aTransactionId)
+			{
+            id = static_cast<CRefreshItem*>(item)->RefreshId();
+			}
+		}
+	return id;
+    }
+
+// -----------------------------------------------------------------------------
+// CTransactionItemStore::RefreshItemIdsL
+// -----------------------------------------------------------------------------
+//
+RArray<TRefreshId> CTransactionItemStore::RefreshItemIdsL ()
+	{
+	TSglQueIter<CTransactionItemBase> iter(iList);
+    RArray<TRefreshId> ids;
+    CleanupClosePushL(ids);
+	for (CTransactionItemBase* item = iter++; item; item = iter++)
+		{
+        if (item->IsRefreshed())
+            {
+            CRefreshItem* refreshItem = static_cast<CRefreshItem*>(item);
+            User::LeaveIfError(ids.Append(refreshItem->RefreshId()));
+            }
+		}
+    CleanupStack::Pop(1); // ids
+    return ids;
+	}