--- 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);
}