diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/ServerResolver/src/CRequestQueue.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/ServerResolver/src/CRequestQueue.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,133 @@ +// 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: +// Name : CRequestQueue.cpp +// Part of : ServerResolver +// Version : SIP/4.0 +// + + + +#include "CRequestQueue.h" +#include "CServerQuery.h" +#include "MSIPServerResolverObserver.h" + +// ---------------------------------------------------------------------------- +// CRequestQueue::CRequestQueue +// ---------------------------------------------------------------------------- +// +CRequestQueue::CRequestQueue(): iList( CServerQuery::iOffset ), + iListIter( iList ) + {} + +// ---------------------------------------------------------------------------- +// CRequestQueue::NewL +// ---------------------------------------------------------------------------- +// +CRequestQueue* CRequestQueue::NewL() + { + CRequestQueue* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CRequestQueue::NewLC +// ---------------------------------------------------------------------------- +// +CRequestQueue* CRequestQueue::NewLC() + { + CRequestQueue* self = new ( ELeave ) CRequestQueue(); + CleanupStack::PushL( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CRequestQueue::~CRequestQueue +// ---------------------------------------------------------------------------- +// +CRequestQueue::~CRequestQueue() + { + CServerQuery* query; + iListIter.SetToFirst(); + query = iListIter++; + while ( query ) + { + iList.Remove( *query ); + delete query; + query = iListIter++; + } + } + +// ---------------------------------------------------------------------------- +// CRequestQueue::CancelQuery +// ---------------------------------------------------------------------------- +// +void CRequestQueue::CancelQuery( MSIPServerResolverObserver* aObserver ) + { + if ( !iList.IsEmpty() ) + { + CServerQuery* query; + iListIter.SetToFirst(); + query = iListIter++; + while( query ) + { + if( query->ServerResolverObserver() == aObserver ) + { + iList.Remove( *query ); + delete query; + } + query = iListIter++; + } + } + } + +// ---------------------------------------------------------------------------- +// CRequestQueue::AddL +// ---------------------------------------------------------------------------- +// +void CRequestQueue::AddL( CServerQuery& aQuery ) + { + if ( !iList.IsEmpty() ) + { + CServerQuery* query; + iListIter.SetToFirst(); + query = iListIter++; + while ( query ) + { + if ( query->ServerResolverObserver() == + aQuery.ServerResolverObserver() ) + { + User::Leave( KErrAlreadyExists ); + } + query = iListIter++; + } + } + iList.AddLast( aQuery ); + } + +// ---------------------------------------------------------------------------- +// CRequestQueue::NextQuery +// ---------------------------------------------------------------------------- +// +CServerQuery* CRequestQueue::NextQuery() + { + if ( !iList.IsEmpty() ) + { + CServerQuery* query = iList.First(); + iList.Remove( *query ); + return query; + } + return 0; + } +