realtimenetprots/sipfw/SIP/sipapi/src/registering.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/sipapi/src/registering.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,144 @@
+// 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          : registering.cpp
+// Part of       : SIPAPI
+// Version       : SIP/5.0 
+//
+
+
+
+#include "SipAssert.h"
+#include "registering.h"
+#include "RegBindingImplementation.h"
+#include "sipclienttransaction.h"
+#include "sipresponseelements.h"
+#include "sipconnectioncallback.h"
+
+
+// -----------------------------------------------------------------------------
+// CRegistering::NewL
+// -----------------------------------------------------------------------------
+//
+CRegistering* CRegistering::NewL()
+	{
+	return new (ELeave) CRegistering();
+	}
+
+// -----------------------------------------------------------------------------
+// CRegistering::CRegistering
+// -----------------------------------------------------------------------------
+//
+CRegistering::CRegistering()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CRegistering::~CRegistering
+// -----------------------------------------------------------------------------
+//
+CRegistering::~CRegistering()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CRegistering::SetNeighbourStates
+// -----------------------------------------------------------------------------
+//
+void CRegistering::SetNeighbourStates(CRegistrationState& aRegistered,
+							          CRegistrationState& aUnregistered)                                      
+    {    
+    iRegistered = &aRegistered;
+    iUnregistered = &aUnregistered;
+    }
+
+// -----------------------------------------------------------------------------
+// CRegistering::IncomingResponseL
+// -----------------------------------------------------------------------------
+//
+TBool CRegistering::IncomingResponseL(CRegBindingImplementation& aRegistration,
+                                      CSIPResponseElements* aElements,
+		                              TUint32 aRequestId,
+				                      TUint32 aRegistrationId,
+				                      TUint32 aRefreshId,
+                                      CConnectionCallback& aCallback) const
+    {
+    CSIPClientTransaction* ta = aRegistration.FindTransaction(aRequestId);
+    if (ta)
+        {
+        TUint statusCode = aElements->StatusCode();
+
+		if (aRegistration.SIPRefresh())
+			{
+			aRegistration.SIPRefresh()->SetRefreshIdIfEmpty(aRefreshId);
+			}
+
+        if (statusCode >= 200 && statusCode < 300)
+            {
+            aRegistration.SetRegistrationId(aRegistrationId);
+            aRegistration.UpdateRegisteredContactL();
+            aRegistration.ChangeState(iRegistered);
+            }
+
+        if (statusCode >= 300)
+            {
+            aRegistration.ChangeState(iUnregistered);
+            }
+            
+        // Set response elements after calling all the leaving functions    
+        ta->SetResponseElements(aElements); 
+
+        aCallback.Set(CConnectionCallback::EIncomingResponseInRegistration,
+                      ta,
+                      &aRegistration.Binding());
+        return ETrue;
+        }
+    
+    delete aElements;
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CRegistering::ErrorOccured
+// -----------------------------------------------------------------------------
+//
+TBool CRegistering::ErrorOccured(CRegBindingImplementation& aRegistration,
+                                 TInt aError,
+                                 TUint32 aRequestId,
+                                 CConnectionCallback& aCallback) const
+    {    
+    return aRegistration.HandleError(aCallback,
+    								 aError,
+    								 aRequestId,
+    								 *iUnregistered);
+    }
+
+// -----------------------------------------------------------------------------
+// CRegistering::RefreshState
+// Registering has been started but isn't yet active.
+// -----------------------------------------------------------------------------
+//
+CSIPRefresh::TState CRegistering::RefreshState() const
+    {
+    return CSIPRefresh::EInactive;
+    }
+
+// -----------------------------------------------------------------------------
+// CRegistering::ConnectionLost
+// -----------------------------------------------------------------------------
+//
+void
+CRegistering::ConnectionLost(CRegBindingImplementation& aRegistration) const
+    {
+    aRegistration.ChangeState(iUnregistered);
+    }