realtimenetprots/sipfw/SIP/Dialogs/src/Confirmed.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/Dialogs/src/Confirmed.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,133 @@
+// Copyright (c) 2007-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          : Confirmed.cpp
+// Part of       : SIPDialogs
+// Version       : SIP/6.0 
+//
+
+
+
+#include "Confirmed.h"
+#include "MDialogContext.h"
+#include "TransactionItemBase.h"
+#include "sipresponse.h"
+#include "CSigCompMgr.h"
+#include "sip.h"
+#include "TSIPTransportParams.h"
+
+_LIT8(KConfirmed, "Confirmed");
+
+// -----------------------------------------------------------------------------
+// TConfirmed::TConfirmed
+// -----------------------------------------------------------------------------
+//
+TConfirmed::TConfirmed (MDialogContext& aDialog,
+                        TDialogStateBase& aStateTerminated)
+ : TDialogStateBase(aDialog),
+   iStateTerminated(aStateTerminated)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// TConfirmed::Name
+// -----------------------------------------------------------------------------
+//
+const TDesC8& TConfirmed::Name () const
+	{
+	return KConfirmed;
+	}
+
+// -----------------------------------------------------------------------------
+// TConfirmed::SendL
+// -----------------------------------------------------------------------------
+//
+void TConfirmed::SendL (TTransactionId& aTransactionId,
+						CSIPRequest* aRequest,
+						CTransactionItemBase& aTransactionItem,
+						CURIContainer& aRemoteTarget)
+
+	{
+	// When a dialog is in Confirmed state, its route must be fixed. Using any
+	// other registration id than KEmptyRegistrationId potentially causes
+	// the transaction layer to add an outbound proxy to the route. To prevent
+	// this, the registration id is forced to be KEmptyRegistrationId
+	TSIPTransportParams params(iDialog.TransportParams(KEmptyRegistrationId));
+	params.SetSkipNaptrAndSrv(iDialog.HasRouteSet());	
+    aTransactionItem.SendL(params,aTransactionId,KEmptyRegistrationId,
+                           aRequest,aRemoteTarget);
+	}
+
+
+// -----------------------------------------------------------------------------
+// TConfirmed::SendL
+// -----------------------------------------------------------------------------
+//
+void TConfirmed::SendL (CTransactionItemBase& aTransactionItem,
+						CSIPResponse* aResponse) 
+	{
+	TSIPTransportParams params(iDialog.TransportParams(KEmptyRegistrationId));
+    aTransactionItem.SendL(params,aResponse,EFalse);
+	}
+
+// -----------------------------------------------------------------------------
+// TConfirmed::ReceiveL
+// -----------------------------------------------------------------------------
+//
+void TConfirmed::ReceiveL (TTransactionId aTransactionId, 
+                           CSIPRequest* aRequest)
+	{
+    PassToOwnerL (aTransactionId,aRequest);
+	}
+
+// -----------------------------------------------------------------------------
+// TConfirmed::ReceiveL
+// -----------------------------------------------------------------------------
+//
+void TConfirmed::ReceiveL (CTransactionItemBase& aTransactionItem, 
+                           CSIPResponse* aResponse)
+	{
+    if (aResponse->Type() != CSIPResponse::E1XX &&
+        aTransactionItem.OverlappingRestricted())
+        {
+        aTransactionItem.SetOverlappingRestricted(EFalse);
+        }
+    if (aResponse->Type() == CSIPResponse::E2XX &&
+        aTransactionItem.TargetRefresh())
+        {
+        iDialog.SetRemoteTargetWithMsgL(*aResponse);
+        }
+    PassToOwnerL(aTransactionItem,aResponse);
+    }
+
+// -----------------------------------------------------------------------------
+// TConfirmed::EndTransaction
+// -----------------------------------------------------------------------------
+//
+void TConfirmed::EndTransaction (CTransactionItemBase& aTransactionItem, 
+                                 TInt aReason)
+	{
+	if (aReason)
+		{
+		PassToOwner(aTransactionItem,aReason);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// TConfirmed::GetState
+// -----------------------------------------------------------------------------
+//
+void TConfirmed::GetState (CSIPInternalStates::TState& aState)
+    {
+    aState = CSIPInternalStates::EDialogConfirmed;
+    }