realtimenetprots/sipfw/SIP/Dialogs/src/RefreshItem.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/Dialogs/src/RefreshItem.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,202 @@
+// 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          : RefreshItem.cpp
+// Part of       : SIPDialogs
+// Version       : SIP/4.0 
+//
+
+
+
+#include "RefreshItem.h"
+#include "MSipRefreshMgr.h"
+#include "siprequest.h"
+#include "sipexpiresheader.h"
+#include "sipstrings.h"
+#include "sipstrconsts.h"
+
+const TUint K200Response = 200;
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::NewL
+// -----------------------------------------------------------------------------
+//
+CRefreshItem* CRefreshItem::NewL (MSipRefreshMgr& aRefreshMgr,
+                                  MRefreshOwner* aRefreshOwner,
+                                  MSIPSecUser& aSIPSecUser,
+                                  RStringF aMethod)
+    {
+	CRefreshItem* self = 
+        CRefreshItem::NewLC(aRefreshMgr,aRefreshOwner,aSIPSecUser,aMethod);
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::NewLC
+// -----------------------------------------------------------------------------
+//
+CRefreshItem* CRefreshItem::NewLC (MSipRefreshMgr& aRefreshMgr,
+                                   MRefreshOwner* aRefreshOwner,
+                                   MSIPSecUser& aSIPSecUser,
+                                   RStringF aMethod)
+    {
+	CRefreshItem* self = 
+        new(ELeave)CRefreshItem(aRefreshMgr,aRefreshOwner,aSIPSecUser,aMethod);
+	CleanupStack::PushL(self);
+	return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::CRefreshItem
+// -----------------------------------------------------------------------------
+//
+CRefreshItem::CRefreshItem (MSipRefreshMgr& aRefreshMgr,
+                            MRefreshOwner* aRefreshOwner,
+                            MSIPSecUser& aSIPSecUser,
+                            RStringF aMethod)
+ : CTransactionItemBase(KEmptyTransactionId,aMethod),
+   iRefreshMgr(aRefreshMgr),
+   iRefreshOwner(aRefreshOwner),
+   iSIPSecUser(aSIPSecUser),
+   iRefreshId(KEmptyRefreshId),
+   iFirstRequestSent(EFalse)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::~CRefreshItem
+// -----------------------------------------------------------------------------
+//
+CRefreshItem::~CRefreshItem ()
+	{
+    iRefreshMgr.TerminateRefresh(iRefreshId,iRefreshOwner);
+	}
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::RefreshId
+// -----------------------------------------------------------------------------
+//
+TRefreshId CRefreshItem::RefreshId()
+	{
+	return iRefreshId;
+	}
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::SetTerminated
+// -----------------------------------------------------------------------------
+//
+void CRefreshItem::SetTerminated ()
+    {
+    iTerminate = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::IsRefreshed
+// From CTransactionItemBase:
+// -----------------------------------------------------------------------------
+//
+TBool CRefreshItem::IsRefreshed () const
+	{
+	return ETrue;
+	}
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::ResponseReceived
+// From CTransactionItemBase:
+// -----------------------------------------------------------------------------
+//
+void CRefreshItem::ResponseReceived (TUint aResponseCode)
+	{
+	if (aResponseCode >= K200Response)
+		{
+		iPassResponseToOwner = EFalse;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::SendAndGetHeadersL
+// From CTransactionItemBase:
+// -----------------------------------------------------------------------------
+//
+MTransactionHeaders* CRefreshItem::SendAndGetHeadersL (
+    const TSIPTransportParams& /*aTransportParams*/,
+    TTransactionId& aTransactionId,
+    TRegistrationId aRegistrationId,
+    CSIPRequest* aRequest,
+    CURIContainer& aRemoteTarget)
+    {
+
+    MTransactionHeaders* headers = 
+        iRefreshMgr.RefreshAndGetHeadersL(aTransactionId,iRefreshId,
+                                          aRegistrationId,
+                                          aRequest,iRefreshOwner,
+                                          iSIPSecUser,aRemoteTarget);
+    iFirstRequestSent = ETrue;
+    SetTransactionId (aTransactionId);
+    return headers;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CRefreshItem::SendL
+// From CTransactionItemBase:
+// -----------------------------------------------------------------------------
+//
+void CRefreshItem::SendL (const TSIPTransportParams& /*aTransportParams*/,
+                          TTransactionId& aTransactionId,
+                          TRegistrationId aRegistrationId,
+                          CSIPRequest* aRequest,
+                          CURIContainer& aRemoteTarget)
+    {
+    if (!iFirstRequestSent)
+        {
+        iRefreshMgr.RefreshL(aTransactionId,iRefreshId,aRegistrationId,aRequest,
+                             iRefreshOwner,iSIPSecUser,aRemoteTarget,
+                             ETrue,ETrue);
+        iFirstRequestSent= ETrue;
+        }
+    else
+        {
+        TBool terminate = EFalse;
+        CSIPExpiresHeader* expires = static_cast<CSIPExpiresHeader*>
+            (aRequest->Header(
+                SIPStrings::StringF(SipStrConsts::EExpiresHeader),0));
+        if (expires && expires->Value() == 0)
+            {
+            terminate = ETrue;
+            }
+        iRefreshMgr.UpdateRefreshL(aTransactionId,iRefreshId,aRequest,
+                                   iRefreshOwner,ETrue);
+        if (terminate)
+            {
+            SetTerminated();
+            }
+		// After a refresh update pass the next response from Refreshes to the
+		// dialog owner
+		iPassResponseToOwner = ETrue;
+        }
+    SetTransactionId (aTransactionId);
+    }
+
+// -----------------------------------------------------------------------------
+// CTransactionItem::SendL
+// From CTransactionItemBase:
+// -----------------------------------------------------------------------------
+//
+void CRefreshItem::SendL (const TSIPTransportParams& /*aTransportParams*/,
+                          CSIPResponse* /*aResponse*/,
+                          TBool /*aAddOwner*/)
+    {
+    User::Leave(KErrNotSupported);
+    }