realtimenetprots/sipfw/SIP/sipapi/src/unregistering.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/sipapi/src/unregistering.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,149 @@
+// Copyright (c) 2005-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          : unregistering.cpp
+// Part of       : SIPAPI
+// Version       : SIP/4.0 
+//
+
+
+
+#include "sip.h"
+#include "siperr.h"
+#include "SipAssert.h"
+#include "unregistering.h"
+#include "RegBindingImplementation.h"
+#include "sipclienttransaction.h"
+#include "sipresponseelements.h"
+#include "sipconnectioncallback.h"
+
+
+// -----------------------------------------------------------------------------
+// CUnregistering::NewL
+// -----------------------------------------------------------------------------
+//
+CUnregistering* CUnregistering::NewL()
+	{
+	return new (ELeave) CUnregistering();
+	}
+
+// -----------------------------------------------------------------------------
+// CUnregistering::CUnregistering
+// -----------------------------------------------------------------------------
+//
+CUnregistering::CUnregistering()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CUnregistering::~CUnregistering
+// -----------------------------------------------------------------------------
+//
+CUnregistering::~CUnregistering()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CUnregistering::SetNeighbourStates
+// -----------------------------------------------------------------------------
+//
+void CUnregistering::SetNeighbourStates(CRegistrationState& aRegistered,
+							            CRegistrationState& aUnregistered)                                      
+	{	
+    iRegistered = &aRegistered;
+    iUnregistered = &aUnregistered;
+    }
+
+// -----------------------------------------------------------------------------
+// CUnregistering::IncomingResponseL
+// -----------------------------------------------------------------------------
+//
+TBool
+CUnregistering::IncomingResponseL(CRegBindingImplementation& aRegistration,
+                                  CSIPResponseElements* aElements,
+				                  TUint32 aRequestId,
+						          TUint32 /*aRegistrationId*/,
+						          TUint32 aRefreshId,
+		                          CConnectionCallback& aCallback) const
+    {
+    CSIPClientTransaction* ta = aRegistration.FindTransaction(aRequestId);    
+    CBase* objToDelete = NULL;
+
+    if (!ta)
+    	{
+    	if (!aRefreshId)
+    		{
+    		delete aElements;
+    		return EFalse;
+    		}
+    	ta = aRegistration.CreateClientTransactionL();
+    	ta->SetRequestId(aRequestId);
+      	objToDelete = ta;
+    	}
+
+    if (aElements->StatusCode() >= 200)
+        {
+        aRegistration.RemoveRegisteredContact();
+        aRegistration.ChangeState(iUnregistered);
+        }  	
+  	ta->SetResponseElements(aElements);
+
+	if (objToDelete && aElements->StatusCode() >= 300)
+		{
+		aCallback.Set(CConnectionCallback::EErrorOccuredInRegistration,
+                      NULL,
+                      &aRegistration.Binding(),
+                      NULL,
+                      NULL,
+                      KErrSIPTerminatedWithResponse,
+                      objToDelete);
+        }
+    else
+        {
+        //All responses, also 1xx, are passed to application
+        aCallback.Set(CConnectionCallback::EIncomingResponseInRegistration,
+	                  ta,
+	                  &aRegistration.Binding(),
+	                  NULL,
+	                  NULL,
+	                  KErrNone,
+	                  objToDelete);
+		}
+
+	return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CUnregistering::ErrorOccured
+// -----------------------------------------------------------------------------
+//
+TBool CUnregistering::ErrorOccured(CRegBindingImplementation& aRegistration,
+                                   TInt aError,
+                                   TUint32 aRequestId,
+                                   CConnectionCallback& aCallback) const
+    {
+    return aRegistration.HandleError(aCallback,
+    								 aError,
+    								 aRequestId,
+    								 *iUnregistered);
+    }
+
+// -----------------------------------------------------------------------------
+// CUnregistering::ConnectionLost
+// -----------------------------------------------------------------------------
+//
+void
+CUnregistering::ConnectionLost(CRegBindingImplementation& aRegistration) const
+    {    
+    aRegistration.ChangeState(iUnregistered);
+    }