diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/Dialogs/src/RefreshItem.cpp --- /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 + (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); + }