realtimenetprots/sipfw/SIP/Dialogs/src/RefreshItem.cpp
changeset 0 307788aac0a8
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Name          : RefreshItem.cpp
       
    15 // Part of       : SIPDialogs
       
    16 // Version       : SIP/4.0 
       
    17 //
       
    18 
       
    19 
       
    20 
       
    21 #include "RefreshItem.h"
       
    22 #include "MSipRefreshMgr.h"
       
    23 #include "siprequest.h"
       
    24 #include "sipexpiresheader.h"
       
    25 #include "sipstrings.h"
       
    26 #include "sipstrconsts.h"
       
    27 
       
    28 const TUint K200Response = 200;
       
    29 
       
    30 // -----------------------------------------------------------------------------
       
    31 // CRefreshItem::NewL
       
    32 // -----------------------------------------------------------------------------
       
    33 //
       
    34 CRefreshItem* CRefreshItem::NewL (MSipRefreshMgr& aRefreshMgr,
       
    35                                   MRefreshOwner* aRefreshOwner,
       
    36                                   MSIPSecUser& aSIPSecUser,
       
    37                                   RStringF aMethod)
       
    38     {
       
    39 	CRefreshItem* self = 
       
    40         CRefreshItem::NewLC(aRefreshMgr,aRefreshOwner,aSIPSecUser,aMethod);
       
    41 	CleanupStack::Pop(self);
       
    42 	return self;
       
    43     }
       
    44 
       
    45 // -----------------------------------------------------------------------------
       
    46 // CRefreshItem::NewLC
       
    47 // -----------------------------------------------------------------------------
       
    48 //
       
    49 CRefreshItem* CRefreshItem::NewLC (MSipRefreshMgr& aRefreshMgr,
       
    50                                    MRefreshOwner* aRefreshOwner,
       
    51                                    MSIPSecUser& aSIPSecUser,
       
    52                                    RStringF aMethod)
       
    53     {
       
    54 	CRefreshItem* self = 
       
    55         new(ELeave)CRefreshItem(aRefreshMgr,aRefreshOwner,aSIPSecUser,aMethod);
       
    56 	CleanupStack::PushL(self);
       
    57 	return self;
       
    58     }
       
    59 
       
    60 // -----------------------------------------------------------------------------
       
    61 // CRefreshItem::CRefreshItem
       
    62 // -----------------------------------------------------------------------------
       
    63 //
       
    64 CRefreshItem::CRefreshItem (MSipRefreshMgr& aRefreshMgr,
       
    65                             MRefreshOwner* aRefreshOwner,
       
    66                             MSIPSecUser& aSIPSecUser,
       
    67                             RStringF aMethod)
       
    68  : CTransactionItemBase(KEmptyTransactionId,aMethod),
       
    69    iRefreshMgr(aRefreshMgr),
       
    70    iRefreshOwner(aRefreshOwner),
       
    71    iSIPSecUser(aSIPSecUser),
       
    72    iRefreshId(KEmptyRefreshId),
       
    73    iFirstRequestSent(EFalse)
       
    74 	{
       
    75 	}
       
    76 
       
    77 // -----------------------------------------------------------------------------
       
    78 // CRefreshItem::~CRefreshItem
       
    79 // -----------------------------------------------------------------------------
       
    80 //
       
    81 CRefreshItem::~CRefreshItem ()
       
    82 	{
       
    83     iRefreshMgr.TerminateRefresh(iRefreshId,iRefreshOwner);
       
    84 	}
       
    85 
       
    86 // -----------------------------------------------------------------------------
       
    87 // CRefreshItem::RefreshId
       
    88 // -----------------------------------------------------------------------------
       
    89 //
       
    90 TRefreshId CRefreshItem::RefreshId()
       
    91 	{
       
    92 	return iRefreshId;
       
    93 	}
       
    94 
       
    95 // -----------------------------------------------------------------------------
       
    96 // CRefreshItem::SetTerminated
       
    97 // -----------------------------------------------------------------------------
       
    98 //
       
    99 void CRefreshItem::SetTerminated ()
       
   100     {
       
   101     iTerminate = ETrue;
       
   102     }
       
   103 
       
   104 // -----------------------------------------------------------------------------
       
   105 // CRefreshItem::IsRefreshed
       
   106 // From CTransactionItemBase:
       
   107 // -----------------------------------------------------------------------------
       
   108 //
       
   109 TBool CRefreshItem::IsRefreshed () const
       
   110 	{
       
   111 	return ETrue;
       
   112 	}
       
   113 
       
   114 // -----------------------------------------------------------------------------
       
   115 // CRefreshItem::ResponseReceived
       
   116 // From CTransactionItemBase:
       
   117 // -----------------------------------------------------------------------------
       
   118 //
       
   119 void CRefreshItem::ResponseReceived (TUint aResponseCode)
       
   120 	{
       
   121 	if (aResponseCode >= K200Response)
       
   122 		{
       
   123 		iPassResponseToOwner = EFalse;
       
   124 		}
       
   125 	}
       
   126 
       
   127 // -----------------------------------------------------------------------------
       
   128 // CRefreshItem::SendAndGetHeadersL
       
   129 // From CTransactionItemBase:
       
   130 // -----------------------------------------------------------------------------
       
   131 //
       
   132 MTransactionHeaders* CRefreshItem::SendAndGetHeadersL (
       
   133     const TSIPTransportParams& /*aTransportParams*/,
       
   134     TTransactionId& aTransactionId,
       
   135     TRegistrationId aRegistrationId,
       
   136     CSIPRequest* aRequest,
       
   137     CURIContainer& aRemoteTarget)
       
   138     {
       
   139 
       
   140     MTransactionHeaders* headers = 
       
   141         iRefreshMgr.RefreshAndGetHeadersL(aTransactionId,iRefreshId,
       
   142                                           aRegistrationId,
       
   143                                           aRequest,iRefreshOwner,
       
   144                                           iSIPSecUser,aRemoteTarget);
       
   145     iFirstRequestSent = ETrue;
       
   146     SetTransactionId (aTransactionId);
       
   147     return headers;
       
   148     }
       
   149 
       
   150 
       
   151 // -----------------------------------------------------------------------------
       
   152 // CRefreshItem::SendL
       
   153 // From CTransactionItemBase:
       
   154 // -----------------------------------------------------------------------------
       
   155 //
       
   156 void CRefreshItem::SendL (const TSIPTransportParams& /*aTransportParams*/,
       
   157                           TTransactionId& aTransactionId,
       
   158                           TRegistrationId aRegistrationId,
       
   159                           CSIPRequest* aRequest,
       
   160                           CURIContainer& aRemoteTarget)
       
   161     {
       
   162     if (!iFirstRequestSent)
       
   163         {
       
   164         iRefreshMgr.RefreshL(aTransactionId,iRefreshId,aRegistrationId,aRequest,
       
   165                              iRefreshOwner,iSIPSecUser,aRemoteTarget,
       
   166                              ETrue,ETrue);
       
   167         iFirstRequestSent= ETrue;
       
   168         }
       
   169     else
       
   170         {
       
   171         TBool terminate = EFalse;
       
   172         CSIPExpiresHeader* expires = static_cast<CSIPExpiresHeader*>
       
   173             (aRequest->Header(
       
   174                 SIPStrings::StringF(SipStrConsts::EExpiresHeader),0));
       
   175         if (expires && expires->Value() == 0)
       
   176             {
       
   177             terminate = ETrue;
       
   178             }
       
   179         iRefreshMgr.UpdateRefreshL(aTransactionId,iRefreshId,aRequest,
       
   180                                    iRefreshOwner,ETrue);
       
   181         if (terminate)
       
   182             {
       
   183             SetTerminated();
       
   184             }
       
   185 		// After a refresh update pass the next response from Refreshes to the
       
   186 		// dialog owner
       
   187 		iPassResponseToOwner = ETrue;
       
   188         }
       
   189     SetTransactionId (aTransactionId);
       
   190     }
       
   191 
       
   192 // -----------------------------------------------------------------------------
       
   193 // CTransactionItem::SendL
       
   194 // From CTransactionItemBase:
       
   195 // -----------------------------------------------------------------------------
       
   196 //
       
   197 void CRefreshItem::SendL (const TSIPTransportParams& /*aTransportParams*/,
       
   198                           CSIPResponse* /*aResponse*/,
       
   199                           TBool /*aAddOwner*/)
       
   200     {
       
   201     User::Leave(KErrNotSupported);
       
   202     }