realtimenetprots/sipfw/SIP/sipapi/src/sipregistrationbinding.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/sipapi/src/sipregistrationbinding.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,359 @@
+// Copyright (c) 2006-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          : SIPRegistrationBinding.cpp
+// Part of       : SIPAPI
+// Version       : SIP/5.0 
+//
+
+
+
+#include <uri8.h>
+#include "sipdefs.h"
+#include "sipregistrationbinding.h"
+#include "RegBindingImplementation.h"
+#include "sipclienttransaction.h"
+#include "sipmessageelements.h"
+#include "sipcontactheader.h"
+#include "sipstrings.h"
+#include "sipstrconsts.h"
+
+
+#ifdef CPPUNIT_TEST
+
+#include "TestCleanupStack.h"
+
+#undef EXPORT_C
+#define EXPORT_C
+
+#endif
+
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRegistrationBinding*
+CSIPRegistrationBinding::NewL(CSIPConnection& aConnection,
+					   		  CSIPToHeader* aAor,
+					   		  CSIPContactHeader* aContact,
+					   		  CSIPRefresh* aRefresh,
+					   		  CSIPRouteHeader* aOutboundProxy,
+					   		  CUri8* aRemoteUri,
+                       		  CSIPFromHeader* aFrom)
+    {
+    CSIPRegistrationBinding* self =
+    	CSIPRegistrationBinding::NewLC(aConnection,
+					                   aAor,                                                     
+                                       aContact,
+                                       aRefresh,
+					                   aOutboundProxy,
+                                       aRemoteUri,
+                                       aFrom);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRegistrationBinding*
+CSIPRegistrationBinding::NewLC(CSIPConnection& aConnection,
+							   CSIPToHeader* aAor,
+							   CSIPContactHeader* aContact,
+							   CSIPRefresh* aRefresh,
+							   CSIPRouteHeader* aOutboundProxy,
+							   CUri8* aRemoteUri,
+                        	   CSIPFromHeader* aFrom)
+    {
+    __ASSERT_ALWAYS(aAor && aContact, User::Leave(KErrArgument));
+
+    if (aContact->HasParam(SIPStrings::StringF(SipStrConsts::EExpires)))
+        {        
+        TUint expires = aContact->ExpiresParameter();
+        __ASSERT_ALWAYS(expires >= KSIPMinExpirationValue,
+        			    User::Leave(KErrArgument));
+        }
+
+    CSIPRegistrationBinding* self =
+    	new (ELeave) CSIPRegistrationBinding();
+    CleanupStack::PushL(self);
+    self->ConstructL(aConnection,
+    				 aAor,
+                     aContact,
+                     aRefresh,
+                     aOutboundProxy,
+                     aRemoteUri,
+                     aFrom);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::CSIPRegistrationBinding
+// -----------------------------------------------------------------------------
+//
+CSIPRegistrationBinding::CSIPRegistrationBinding()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::ConstructL
+// aAor and aContact have been checked in NewLC so they aren't checked again
+// -----------------------------------------------------------------------------
+//
+void CSIPRegistrationBinding::ConstructL(CSIPConnection& aConnection,
+										 CSIPToHeader* aAor,								
+								  		 CSIPContactHeader* aContact,                                  
+							  	  		 CSIPRefresh* aRefresh,
+								  		 CSIPRouteHeader* aOutboundProxy,
+								  		 CUri8* aRemoteUri,
+                                  		 CSIPFromHeader* aFrom)
+    {    
+    iImplementation = CRegBindingImplementation::NewL(*this,
+    												  aConnection,
+    												  aAor,
+    												  aContact,
+    												  aRefresh,
+    												  aOutboundProxy,
+    												  aRemoteUri,
+    												  aFrom);
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::~CSIPRegistrationBinding
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRegistrationBinding::~CSIPRegistrationBinding()
+    {
+    delete iImplementation;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::IsContextActive
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSIPRegistrationBinding::IsContextActive() const
+    {
+    __TEST_INVARIANT;
+	return iImplementation->IsContextActive();	
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::ContextId
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CSIPRegistrationBinding::ContextId() const
+    {
+    __TEST_INVARIANT;
+    return iImplementation->ContextId();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::RegisterL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPClientTransaction*
+CSIPRegistrationBinding::RegisterL(CSIPMessageElements* aElements)
+    {
+    __TEST_INVARIANT;
+    return iImplementation->RegisterL(aElements);
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::DeregisterL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPClientTransaction*
+CSIPRegistrationBinding::DeregisterL(CSIPMessageElements* aElements)
+    {
+    __TEST_INVARIANT;
+    return iImplementation->DeregisterL(aElements);
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::UpdateL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPClientTransaction*
+CSIPRegistrationBinding::UpdateL(CSIPMessageElements* aElements)
+    {
+    __TEST_INVARIANT;
+    __ASSERT_ALWAYS(aElements, User::Leave(KErrArgument));
+
+	return iImplementation->UpdateL(aElements);
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::UpdateL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPClientTransaction*
+CSIPRegistrationBinding::UpdateL(TUint aExpirationValue,
+                          		 CSIPMessageElements* aElements)
+    {
+    __TEST_INVARIANT;
+    __ASSERT_ALWAYS(aExpirationValue >= KSIPMinExpirationValue,
+    				User::Leave(KErrArgument));
+
+    return iImplementation->UpdateL(aElements, &aExpirationValue);    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::SetOutboundProxyL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void
+CSIPRegistrationBinding::SetOutboundProxyL(CSIPRouteHeader* aOutboundProxy)
+    {
+    __TEST_INVARIANT;
+
+    iImplementation->SetOutboundProxyL(aOutboundProxy);
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::Aor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPToHeader& CSIPRegistrationBinding::Aor() const
+    {
+    __TEST_INVARIANT;
+    return iImplementation->Aor();
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::ContactHeader
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPContactHeader& CSIPRegistrationBinding::ContactHeader() const
+    {
+    __TEST_INVARIANT;
+    return iImplementation->ContactHeader();    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::ContactHeader
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPContactHeader& CSIPRegistrationBinding::ContactHeader()
+    {
+    __TEST_INVARIANT;
+    return iImplementation->ContactHeader();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::OutboundProxy
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPRouteHeader* CSIPRegistrationBinding::OutboundProxy() const
+    {
+    __TEST_INVARIANT;
+    return iImplementation->OutboundProxy();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::SIPRefresh
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPRefresh* CSIPRegistrationBinding::SIPRefresh() const
+    {
+    __TEST_INVARIANT;
+    return iImplementation->SIPRefresh();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::SIPRefresh
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRefresh* CSIPRegistrationBinding::SIPRefresh()
+    {
+    __TEST_INVARIANT;
+    return iImplementation->SIPRefresh();    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::Connection
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPConnection* CSIPRegistrationBinding::Connection()
+    {
+    __TEST_INVARIANT;
+    return iImplementation->Connection();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::Connection
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPConnection* CSIPRegistrationBinding::Connection() const
+    {
+    __TEST_INVARIANT;
+    return iImplementation->Connection();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::operator==
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSIPRegistrationBinding::operator==(
+    const CSIPRegistrationBinding& aRegistration) const
+    {
+    __TEST_INVARIANT;    
+    return *iImplementation == *aRegistration.iImplementation;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::RegisteredContact
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPContactHeader* 
+    CSIPRegistrationBinding::RegisteredContact() const
+    {
+    __TEST_INVARIANT;
+    return iImplementation->RegisteredContact();
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::SetProperty
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CSIPRegistrationBinding::SetProperty(TUint32 aProperty,TBool aValue)
+	{
+	__TEST_INVARIANT;
+	TRAPD(err, iImplementation->SetPropertyL(aProperty,aValue));
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::Implementation
+// -----------------------------------------------------------------------------
+//
+CRegBindingImplementation& CSIPRegistrationBinding::Implementation()
+	{
+	__TEST_INVARIANT;
+	return *iImplementation;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRegistrationBinding::__DbgTestInvariant
+// -----------------------------------------------------------------------------
+//
+
+void CSIPRegistrationBinding::__DbgTestInvariant() const
+	{
+    if (!iImplementation)
+        {
+		User::Invariant();
+		}
+	}
+