realtimenetprots/sipfw/SIP/Codec/src/SIPHeaderLookup.cpp
changeset 0 307788aac0a8
--- /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();
+    }