realtimenetprots/sipfw/SIP/SIPSec/IpSecPlugin/src/CState.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/SIPSec/IpSecPlugin/src/CState.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,256 @@
+// Copyright (c) 2004-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          : CState.cpp
+// Part of       : SIPSec, IpSec Plugin
+// Version       : SIP/4.0 
+//
+
+
+
+#include "sipsecurityheaderbase.h"
+#include "sipresponse.h"
+#include "CSipSecAgreeRecord.h"
+#include "SipSecIpsecParams.h"
+#include "MIpSecAgreeContextParams.h"
+#include "CIpSecSadbHandler.h"
+#include "MIpSecMechanismParams.h"
+#include "CState.h"
+
+#ifdef CPPUNIT_TEST
+#include "CActiveObjController1.h"
+#endif
+    
+// ----------------------------------------------------------------------------
+// CState::~CState
+// ----------------------------------------------------------------------------
+//  
+CState::~CState() 
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::SaAddedL
+// ----------------------------------------------------------------------------
+//  
+void CState::SaAddedL( CSipSecAgreeRecord& /* aRec */ )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::SaDeleted
+// ----------------------------------------------------------------------------
+//  
+void CState::SaDeleted( CSipSecAgreeRecord& /* aRec */ )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::PolicyActivatedL
+// ----------------------------------------------------------------------------
+//  
+void CState::PolicyActivatedL( CSipSecAgreeRecord& /* aRec */ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CState::PolicyUnloaded
+// ----------------------------------------------------------------------------
+//      
+void CState::PolicyUnloaded( CSipSecAgreeRecord& /* aRec */ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CState::TimerExpiredL
+// ----------------------------------------------------------------------------
+// 		
+void CState::TimerExpiredL(
+	CSipSecAgreeRecord& /* aRec */, 
+	TTimerId /* aTimerId */, 
+	TAny* /* aTimerParam */ )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::Resp4xxL
+// ----------------------------------------------------------------------------
+// 	
+void CState::Resp4xxL( 
+	CSipSecAgreeRecord& /* aRec */,
+    CSIPResponse& /* aResponse */,
+    CSIPRequest& /* aRequest */ )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::AuthKeyL
+// ----------------------------------------------------------------------------
+// 
+TBool CState::AuthKeyL( 
+	CSipSecAgreeRecord& /* aRec */,
+	const TDesC8& /* aAuthKey */ )
+	{
+	return EFalse;
+	}
+	
+// ----------------------------------------------------------------------------
+// CState::AuthKeyFailedL
+// ----------------------------------------------------------------------------
+//	
+void CState::AuthKeyFailedL( CSipSecAgreeRecord& /* aRec */ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CState::RegisterL
+// ----------------------------------------------------------------------------
+// 
+void CState::RegisterL( 
+	CSipSecAgreeRecord& /* aRec */,
+	CSIPRequest& /* aRequest */,
+	TSIPTransportParams& /* aTransportParams */,
+	const TDesC8& /* aOutboundProxy */ )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::ReguestL
+// ----------------------------------------------------------------------------
+// 	
+void CState::ReguestL( 
+	CSipSecAgreeRecord& /* aRec */,
+	CSIPRequest& /* aRequest */,
+	TSIPTransportParams& /* aTransportParams */,
+	const TDesC8& /* aOutboundProxy */ )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::Resp2xxL
+// ----------------------------------------------------------------------------
+// 
+void CState::Resp2xxL( 
+	CSipSecAgreeRecord& /* aRec */,
+	CSIPResponse& /* aResponse */ )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CState::ProcessSecVerifyL
+// ----------------------------------------------------------------------------
+// 	
+void CState::ProcessSecVerifyL( 
+    CSipSecAgreeRecord& /* aRec */,
+	RPointerArray<CSIPSecurityVerifyHeader>& /* aSecurityVerify */ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CState::ClearSaL
+// ----------------------------------------------------------------------------
+// 	
+void CState::ClearSaL( CSipSecAgreeRecord& aRec )
+	{
+	DoClearSaL( aRec );	
+	}	
+
+// ----------------------------------------------------------------------------
+// CState::ReInitializeL
+// ----------------------------------------------------------------------------
+// 	
+void CState::ReInitializeL( 
+	CSipSecAgreeRecord& aRec,
+	CSIPResponse& aResponse,
+	TBool aFullReInitialize )
+	{
+	if ( aFullReInitialize )
+	    {
+	    DeleteSasAndPolicyL( aRec );
+	    }
+	else
+	    {
+	    aRec.DeleteSasL();
+	    }
+			 		 
+	aRec.iSecVerifyHeaders.ResetAndDestroy();
+	aRec.CopyHeadersFromMessageL( aResponse, EFalse );
+	// Wait for Digest plugin generate a key
+	// Set timer to 4 min while SA is temporal
+	aRec.StartTimerL( KTempTime );
+	aRec.NextState( EPendingKey );	
+	}
+
+// ----------------------------------------------------------------------------
+// CState::DeleteSasL
+// ----------------------------------------------------------------------------
+// 	
+void CState::DeleteSasL( CSipSecAgreeRecord& aRec )
+	{
+	DeleteSasAndPolicyL( aRec );
+    aRec.NextState( EDeleting );	
+	}
+
+// ----------------------------------------------------------------------------
+// CState::DoClearSaL
+// ----------------------------------------------------------------------------
+// 	
+void CState::DoClearSaL( CSipSecAgreeRecord& aRec )
+	{
+	DeleteSasAndPolicyL( aRec );				 	 
+	aRec.NextState( EClearing );	
+	}
+	
+// ----------------------------------------------------------------------------
+// CState::DeleteSasAndPolicyL
+// ----------------------------------------------------------------------------
+// 	
+void CState::DeleteSasAndPolicyL( CSipSecAgreeRecord& aRec )
+	{
+	aRec.RemoveTransportL();		 	 	
+	}
+
+// ----------------------------------------------------------------------------
+// CState::UpdateExpirationTimeL
+// ----------------------------------------------------------------------------
+//		
+void CState::UpdateExpirationTimeL(  
+	CSipSecAgreeRecord& aRec,
+	CSIPResponse& aResponse )
+	{
+	TUint t = CSipSecAgreeRecord::ExpiresFromContactL( aResponse );
+	
+	// Set lifetime to expiration time of just completed registration + 
+	// 2 x transaction timeout (since timeouted ta is retried without sigcomp)
+	const TUint KTATimeoutMultiplier = 128;
+	const TUint KSecondAsMillisecs = 1000;
+    
+    __ASSERT_ALWAYS( 
+        t <= ( KMaxTUint / KSecondAsMillisecs - 
+               KTATimeoutMultiplier * aRec.iParams.MechParams().T1() ), 
+        User::Leave( KErrOverflow ) );
+
+	t = t * KSecondAsMillisecs + 
+	    KTATimeoutMultiplier * aRec.iParams.MechParams().T1();
+
+    TUint t2;
+    if ( aRec.iParams.HasLongerLifetimeSA( t, t2 ) )
+        {
+        // t2 is filled with longer lifetime, use it instead
+        t = t2;
+        }
+        
+	aRec.StartTimerL( t );
+	}
+		
+// End of File