vpnengine/ikev2lib/src/ikev2sa.cpp
branchRCL_3
changeset 10 68dc8923de26
parent 0 33413c0669b9
--- a/vpnengine/ikev2lib/src/ikev2sa.cpp	Fri Feb 19 23:50:52 2010 +0200
+++ b/vpnengine/ikev2lib/src/ikev2sa.cpp	Fri Mar 12 15:48:43 2010 +0200
@@ -22,6 +22,9 @@
 #include "ikev2ipsecsadata.h"
 #include "ikev2pluginsession.h"
 
+static const TUint32 KMinRekeyingThreshold = 70;
+static const TUint32 KMaxRekeyingThreshold = 95;
+
 CIkev2SA* CIkev2SA::NewL(CIkev2PluginSession& aIkeV2PluginSession, TIkev2SAData& aIkev2SAdata, MIkeDebug& aDebug)
 {
 	CIkev2SA *sa = new (ELeave) CIkev2SA(aIkeV2PluginSession, aDebug);
@@ -45,9 +48,32 @@
 	// Calculate lifetime value for the new IKE SA
 	// The jitter value is adjusted from SA internal ID (SAId mod 8) 
 	//
-    iRemainingTime = iIkeV2SaData.iLifetime + (iIkeV2SaData.SaId() % 8);
+	
+	if (iIkeV2SaData.iIkeData->iRekeyingThreshold != 0)
+	    {
+        if (iIkeV2SaData.iIkeData->iRekeyingThreshold < KMinRekeyingThreshold)
+            {
+            iRekeyingThreshold = KMinRekeyingThreshold;
+            }
+        else if (iIkeV2SaData.iIkeData->iRekeyingThreshold > KMaxRekeyingThreshold)
+            {
+            iRekeyingThreshold = KMaxRekeyingThreshold;
+            }
+        else
+            {
+            iRekeyingThreshold = iIkeV2SaData.iIkeData->iRekeyingThreshold;
+            }
+        TReal lifeTime = (TReal)iIkeV2SaData.iLifetime * ((TReal)iRekeyingThreshold / 100.0);
+        iRemainingTime = (TUint32)lifeTime + (iIkeV2SaData.SaId() % 8);
+	    }
+	else
+	    {
+        iRemainingTime = iIkeV2SaData.iLifetime + (iIkeV2SaData.SaId() % 8);
+	    }
+	    
 	iIkeV2SaData.iSAState  = KSaStateReady;
 
+	
 	TInt DPDHeartbeat = 0;
 	if ( iIkeV2SaData.iIkeData->iDPDHeartBeat )
 	   DPDHeartbeat = iIkeV2SaData.iIkeData->iDPDHeartBeat;      
@@ -236,7 +262,7 @@
             iIkeV2SaData.SaId(), iRemainingTime );
 	if (iRemainingTime == 0) 
 	{										 		
-		if ( iIpsecSaQue )
+		if ( iIpsecSaQue && iRekeyingThreshold != 0)
 		{
 		    iIkeV2PluginSession.RekeyIkeSAL(&iIkeV2SaData);
 		}