--- /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<CSIPCodecTlsPtrs*>( 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<CSIPCodecTlsPtrs*>( 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<CSIPHeaderBase>
+SIPHeaderLookup::CreateHeaderL(RStringF aName,const TDesC8& aValue)
+ {
+ return LookupTable()->CreateHeaderL(aName,aValue);
+ }
+
+// -----------------------------------------------------------------------------
+// SIPHeaderLookup::LookupTable
+// -----------------------------------------------------------------------------
+//
+CSIPHeaderLookupTable* SIPHeaderLookup::LookupTable()
+ {
+ CSIPCodecTlsPtrs* tlsPtrs = static_cast<CSIPCodecTlsPtrs*>( 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();
+ }