diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev2lib/src/ikev2sa.cpp --- 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); }