diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/Codec/src/SIPHeaderLookup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/Codec/src/SIPHeaderLookup.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,152 @@ +// 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 : SIPHeaderLookup.cpp +// Part of : Codec +// Version : SIP/4.0 +// + + + + +#include "SIPHeaderLookup.h" +#include "CSIPCodecTlsPtrs.h" +#include "CSIPHeaderLookupTable.h" +#include "_sipcodecdefs.h" + + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::OpenL +// ----------------------------------------------------------------------------- +// +EXPORT_C void SIPHeaderLookup::OpenL() + { + CSIPCodecTlsPtrs* tlsPtrs = static_cast( Dll::Tls() ); + // If SIPStrings has not created the tls-pointer, + // the string pool has not been opened and header lookup cannot be used. + __ASSERT_ALWAYS( tlsPtrs, User::Leave ( KErrNotReady ) ); + + CSIPHeaderLookupTable* lookup = tlsPtrs->iHeaderLookup; + if( lookup ) + { + lookup->IncrementUsageCount(); + } + else + { + tlsPtrs->iHeaderLookup = CSIPHeaderLookupTable::NewL(); + } + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::Close +// ----------------------------------------------------------------------------- +// +EXPORT_C void SIPHeaderLookup::Close() + { + CSIPCodecTlsPtrs* tlsPtrs = static_cast( Dll::Tls() ); + if ( !tlsPtrs || !tlsPtrs->iHeaderLookup ) + { + return; + } + + CSIPHeaderLookupTable* lookup = tlsPtrs->iHeaderLookup; + lookup->DecrementUsageCount(); + if ( !tlsPtrs->iStrings ) + { + if( lookup->UsageCount() == 0 ) + { + delete tlsPtrs; + Dll::FreeTls(); + } + } + else + { + if( lookup->UsageCount() == 0 ) + { + tlsPtrs->DestroyHeaderLookup(); + } + } + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::IsSupportedL +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool SIPHeaderLookup::IsSupported(RStringF aHeaderName) + { + return LookupTable()->IsSupported(aHeaderName); + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::InternalizeL +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPHeaderBase* +SIPHeaderLookup::InternalizeL(RStringF aName,RReadStream& aReadStream) + { + return LookupTable()->InternalizeL(aName,aReadStream); + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::IsAPIHeaderL +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool SIPHeaderLookup::IsAPIHeader(RStringF aName) + { + // The headers that support serialization and + // are supported as non-extension headers are API headers. + return LookupTable()->InternalizeSupported(aName); + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::CreateHeaderL +// ----------------------------------------------------------------------------- +// +EXPORT_C RPointerArray +SIPHeaderLookup::CreateHeaderL(RStringF aName,const TDesC8& aValue) + { + return LookupTable()->CreateHeaderL(aName,aValue); + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::LookupTable +// ----------------------------------------------------------------------------- +// +CSIPHeaderLookupTable* SIPHeaderLookup::LookupTable() + { + CSIPCodecTlsPtrs* tlsPtrs = static_cast( Dll::Tls() ); + __ASSERT_ALWAYS( tlsPtrs, User::Panic( KNullDesC, KErrNotReady ) ); + + CSIPHeaderLookupTable* lookup = tlsPtrs->iHeaderLookup; + __ASSERT_ALWAYS( lookup, User::Panic( KNullDesC, KErrNotReady ) ); + + return lookup; + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::SetConvertToSIPURI +// ----------------------------------------------------------------------------- +// +EXPORT_C void SIPHeaderLookup::SetConvertToSIPURI(TBool aValue) + { + LookupTable()->SetConvertToSIPURI(aValue); + } + +// ----------------------------------------------------------------------------- +// SIPHeaderLookup::ConvertToSIPURI +// ----------------------------------------------------------------------------- +// +TBool SIPHeaderLookup::ConvertToSIPURI() + { + return LookupTable()->ConvertToSIPURI(); + }