--- /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);
+ }