realtimenetprots/sipfw/SIP/Refreshes/inc/CSipRefreshBase.h
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/Refreshes/inc/CSipRefreshBase.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,249 @@
+/*
+* 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          : CSipRefreshBase.h
+* Part of       : SIPRefreshes
+* Version       : SIP/6.0 
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+
+#ifndef CSIPREFRESHBASE_H
+#define CSIPREFRESHBASE_H
+
+#include <e32base.h>
+#include "SipStackServerDefs.h"
+#include "MTransactionOwner.h"
+#include "Lwtimer.h"
+#include "MSIPSecUser.h"
+#include "_sipcodecdefs.h"
+
+class MTransactionUser;
+class CSipRefreshMgr;
+class MRefreshOwner;
+class CSIPRequest;
+class CSIPResponse;
+class CURIContainer;
+class CSIPHeaderBase;
+class CSIPRouteHeader;
+class MTransactionHeaders;
+class CSIPSec;
+
+
+class CSipRefreshBase : public CBase,
+                        public MTransactionOwner,
+                        public MExpirationHandler,
+                        public MSIPSecUser
+    {
+public:
+
+    virtual ~CSipRefreshBase ();
+
+    void ClearTransactionOwner ();
+
+    MRefreshOwner* Owner();
+
+    const TRefreshId& Id () const;
+    
+    TTransactionId CurrentTransactionId() const;
+
+    CSIPRequest* Request();
+    
+    void SetIntervalL(TInt aInterval);
+    
+    TInt Interval() const;
+    
+    void SetRequest(CSIPRequest* aRequest, TBool aDeleteRequest);
+
+    void SendL (TTransactionId& aTransactionId, 
+                CSIPRequest* aRequest);
+
+    MTransactionHeaders* SendAndGetHeadersL (TTransactionId& aTransactionId, 
+                                             CSIPRequest*    aRequest);
+
+    void UpdateRemoteTargetL(CURIContainer& aRemoteTarget);
+
+    void SetUpdatedHeader(CSIPHeaderBase* aHeader);
+
+    void SetUpdatedRouteHeadersL(const RPointerArray<CSIPRouteHeader>& 
+                                 aHeaderArray);
+
+    void RemoveRouteHeaders();
+
+    void UpdateRequestL (TTransactionId& aTransactionId,
+                         CSIPRequest* aRequest);
+
+    void TerminateRequestL (TTransactionId& aTransactionId,
+                            CSIPRequest* aRequest);
+
+    TUint IAPId () const;
+
+    void ResetRegistrationId();
+
+    void UpdateCSeqValueL(CSIPRequest& aRequest);
+
+	void StopTimer();
+
+public: // From MTransactionOwner
+
+    void ReceiveL(TUint32        aIapId, 
+                  TTransactionId aTransactionId, 
+                  CSIPRequest*   aRequest);
+
+    void ReceiveL(TTransactionId aTransactionId,
+                  CSIPResponse* aResponse);
+
+    TInt TransactionEnded(TUint32 aIapId, 
+                          TTransactionId aTransactionId, 
+                          TInt aReason);
+
+    TInt NextCSeq(TUint& aCSeq);
+    
+    virtual const MSIPSecUser* SIPSecUser() const;
+
+public: // From MExpirationHandler
+
+    void TimerExpiredL (TTimerId aTimerId, TAny* aTimerParam);
+    
+public: // From MSIPSecUser
+
+	TBool PassOnlyRealmsToUser() const;
+	
+    void RequestCredentialsL(const TDesC8& aRealm);
+	
+    void RequestCredentialsL(CSIPResponse& aResponse,
+	                         TTransactionId aTransactionId,
+	                         TRefreshId aRefreshId);    
+
+    const MSIPSecUser* TrustedUser(TRegistrationId aRegistrationId);
+
+    TBool ByPassSIPSec() const;
+
+protected:
+
+    CSipRefreshBase (MTransactionUser& aTU,
+                     MTimerManager&    aTimerMgr,
+                     CSIPSec&          aSIPSec,
+                     CSipRefreshMgr&   aRefreshMgr,
+                     TRegistrationId   aRegistrationId,
+                     MRefreshOwner*    aOwner,
+                     MSIPSecUser&      aSIPSecUser);
+
+    void BaseConstructL(CURIContainer& aRemoteTarget,
+                        CSIPRequest& aRequest);
+
+    virtual void Forward2xxResponseToCallerL(CSIPResponse* aResponse) = 0;
+
+    
+
+    virtual void SetExpirationTimeToRequestL(CSIPRequest& aRequest,
+                                             TUint aExpirationTimeInSeconds) = 0;
+
+    virtual void SetExpirationTimeToResponseL(CSIPResponse& 
+                                              aResponse,
+                                              TUint 
+                                              aExpirationTimeInSeconds) = 0;
+
+    virtual void CheckUpdateRequestExpiresValueL(CSIPRequest& aRequest) = 0;
+
+    virtual void CheckTerminateRequestExpiresValueL(CSIPRequest& aRequest) = 0;
+
+    virtual TInt ExpirationTimeFromResponse(CSIPResponse& aResponse) = 0;
+
+    virtual TInt ExpirationTimeFromRequestL(CSIPRequest& aRequest) = 0;
+    
+    void Received200ClassResponseL(CSIPResponse* aResponse);
+    void ReceivedProvisonalResponseL(CSIPResponse* aResponse);
+    void ReceivedErrorResponseL(CSIPResponse* aResponse);
+
+    TInt ExpireTimeFromResponseExpiresHeader(CSIPResponse& aResponse);
+    void SetExpireTimeToResponseExpiresHeaderL(CSIPResponse& 
+                                               aResponse,
+                                               TUint 
+                                               aExpirationTimeInSeconds);
+
+    void UpdateHeaderForL(CSIPRequest& aRequest);
+
+    void UpdateRouteHeadersForL(CSIPRequest& aRequest);
+
+    void RemoveRouteHeadersFor(CSIPRequest& aRequest);
+
+    void SetToFromOriginalRequestL(CSIPRequest& aRequest);
+
+    void SetFromFromOriginalRequestL(CSIPRequest& aRequest);
+
+    void SetCallIdFromOriginalRequestL(CSIPRequest& aRequest);
+
+    void SetCSeqFromOriginalRequestL(CSIPRequest& aRequest);
+
+    void RefreshReceivedL(TTransactionId aTransactionId, 
+                          CSIPResponse*  aResponse);
+
+    void CheckUpdateRequestMethodL(CSIPRequest& aRequest);
+
+    void CheckUpdateRequestHeadersL(CSIPRequest& aRequest);
+
+private:
+
+    void SendUpdateRequestL (TTransactionId& aTransactionId,
+                             CSIPRequest*    aRequest);
+
+    void StartTimerL(TInt aMilliSeconds);
+    
+    TInt CalculateInterval(TInt aValueInSeconds) const;
+
+    TInt RefreshErrorOccured(TTransactionId aTransactionId, TInt aError);
+
+protected: // Data
+
+    CSipRefreshMgr&               iRefreshMgr;
+    TRefreshId                    iRefreshId;
+    CSIPRequest*                  iRequest;
+    CURIContainer*                iRemoteTarget;    
+    TTransactionId                iCurrentTransactionId;
+    TBool                         iFirstRequest;
+    MSIPSecUser&                  iSIPSecUser;
+    MRefreshOwner*                iOwner;
+    
+private: // Data
+
+    MTransactionUser&             iTU;
+    MTimerManager&                iTimerMgr;
+    CSIPSec&                      iSIPSec;
+    TBool                         iTransactionOwnerCleared;
+    TInt                          iIntervalInMilliSeconds;
+    TBool                         iIntervalUpdated;   
+    TRegistrationId               iRegistrationId;
+    TTimerId                      iTimerId;
+    CSIPHeaderBase*               iUpdatedHeader;
+    RPointerArray<CSIPHeaderBase> iUpdatedRouteHeaders;
+    TBool                         iOwnRequest;
+    TBool                         iRemoveRouteHeaders;
+    
+private: // For testing purposes
+
+    UNIT_TEST(CSipRefreshMgrTest)
+    UNIT_TEST(CSipRegisterRefreshTest)
+    };
+
+#endif // CSIPREFRESHBASE_H
+
+// End of File