# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1268401723 -7200 # Node ID 68dc8923de26600b9776192c9485a927b7dfdf2b # Parent 032d3a818f4904b6cf5525a69b7585f3c3714f75 Revision: 201007 Kit: 201008 diff -r 032d3a818f49 -r 68dc8923de26 group/vpnclient_version_update.flm --- a/group/vpnclient_version_update.flm Fri Feb 19 23:50:52 2010 +0200 +++ b/group/vpnclient_version_update.flm Fri Mar 12 15:48:43 2010 +0200 @@ -2,7 +2,7 @@ # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). # All rights reserved. # This component and the accompanying materials are made available -# under the terms of the License "Eclipse Public License v1.0" +# 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". # diff -r 032d3a818f49 -r 68dc8923de26 group/vpnclient_version_update.xml --- a/group/vpnclient_version_update.xml Fri Feb 19 23:50:52 2010 +0200 +++ b/group/vpnclient_version_update.xml Fri Mar 12 15:48:43 2010 +0200 @@ -4,7 +4,7 @@ # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). # All rights reserved. # This component and the accompanying materials are made available -# under the terms of the License "Eclipse Public License v1.0" +# 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". # @@ -19,7 +19,7 @@ # Name : vpnclient_version_update.xml # Part of : vpnclient # Description : -# Version : %version: 1 % +# Version : %version: 2 % # ============================================================================ --> diff -r 032d3a818f49 -r 68dc8923de26 layers.sysdef.xml --- a/layers.sysdef.xml Fri Feb 19 23:50:52 2010 +0200 +++ b/layers.sysdef.xml Fri Mar 12 15:48:43 2010 +0200 @@ -8,8 +8,7 @@ + mrp="" bldFile="&layer_real_source_path;/group" name="vpnclient" /> diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikeutils/inc/ipsecsadata.h --- a/vpnengine/ikeutils/inc/ipsecsadata.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikeutils/inc/ipsecsadata.h Fri Mar 12 15:48:43 2010 +0200 @@ -33,7 +33,7 @@ class TIpsecSAData { public: - TIpsecSAData(); + IMPORT_C TIpsecSAData(); public: // data TUint8 iSAType; diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikeutils/inc/pfkeyextdatautil.h --- a/vpnengine/ikeutils/inc/pfkeyextdatautil.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikeutils/inc/pfkeyextdatautil.h Fri Mar 12 15:48:43 2010 +0200 @@ -44,7 +44,7 @@ * @param aDestinAddr Destination address * @param aOriginalAddr Peer original address */ - EXPORT_C static void BuildUdpEncExtensionData( TDes8& aExtData, + IMPORT_C static void BuildUdpEncExtensionData( TDes8& aExtData, TUint32 aNAT_D_Flags, TBool aNATDetected, TBool aNokiaNATProbeUsed, diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikeutils/inc/vpnaddrinfo.h --- a/vpnengine/ikeutils/inc/vpnaddrinfo.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikeutils/inc/vpnaddrinfo.h Fri Mar 12 15:48:43 2010 +0200 @@ -45,7 +45,7 @@ * @param aVPNAddress Internal address info (returned) * @param aDebug Debug trace interface */ - EXPORT_C static void BuildVPNAddrInfo( const CInternalAddress* aInternalAddr, + IMPORT_C static void BuildVPNAddrInfo( const CInternalAddress* aInternalAddr, const TInetAddr& aDnsServerAddr, TVPNAddress& aVPNAddress, MIkeDebug& aDebug ); diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikeutils/src/pfkeyextdatautil.cpp --- a/vpnengine/ikeutils/src/pfkeyextdatautil.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikeutils/src/pfkeyextdatautil.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -37,7 +37,7 @@ // (common macros with IPSEC) // --------------------------------------------------------------------------- // -void PFKeyExtDataUtil::BuildUdpEncExtensionData( TDes8& aExtData, +EXPORT_C void PFKeyExtDataUtil::BuildUdpEncExtensionData( TDes8& aExtData, TUint32 aNAT_D_Flags, TBool aNATDetected, TBool aNokiaNATProbeUsed, diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikeutils/src/vpnaddrinfo.cpp --- a/vpnengine/ikeutils/src/vpnaddrinfo.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikeutils/src/vpnaddrinfo.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -29,7 +29,7 @@ // Build internal address info object from internal address information. // --------------------------------------------------------------------------- // -void VPNAddrInfo::BuildVPNAddrInfo( const CInternalAddress* aInternalAddr, +EXPORT_C void VPNAddrInfo::BuildVPNAddrInfo( const CInternalAddress* aInternalAddr, const TInetAddr& aDnsServerAddr, TVPNAddress& aVPNAddress, MIkeDebug& aDebug ) diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev1lib/inc/ikev1extra.h --- a/vpnengine/ikev1lib/inc/ikev1extra.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev1lib/inc/ikev1extra.h Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 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" @@ -165,6 +165,8 @@ TInt iTransNum; //Remote transform number selected TPtrC8 iReducedLifeSecs; //Own lifetime (in case is smaller then received) TPtrC8 iReducedLifeKBytes; //Own lifesize (in case is smaller then received) + TPtrC8 iResponderLifetimeSecs; //Responder lifetime + TPtrC8 iResponderLifetimeKBytes; //Responder lifetime size TUint8 iReplayWindowLength; }; @@ -188,9 +190,9 @@ TUint8 iTransformNum; //Transform number TUint8 iTransformID; //Transform ID TBuf8 iLifeDurationSecs; - //TBool iLifetimeReduced; TBuf8 iLifeDurationKBytes; - //TBool iLifesizeReduced; + TBuf8 iResponderLifetimeSecs; + TBuf8 iResponderLifetimeKBytes; TUint16 iGroupDesc; //OAKLEY GROUP TUint16 iEncMode; //Encapsulation Mode TUint16 iAuthAlg; //HMAC diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev1lib/inc/ikev1negotiation.h --- a/vpnengine/ikev1lib/inc/ikev1negotiation.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev1lib/inc/ikev1negotiation.h Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 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" @@ -362,6 +362,15 @@ TBool IsRetransmit(TLastIKEMsg& aRef); void SaveRetransmitInfo(TLastIKEMsg& aRef); void SaveLastMsgL(); + + HBufC8* GetPskFromPolicyL(); + + void SetPhase2LifeDurations( const TInt64 aSoftAddTime, + const TInt64 aHardAddTime, + const TInt64 aSoftBytes, + const TInt64 aHardBytes, + TAttrib_II& aAttr_II, + TBool aResponder ); public: TCookie iCookie_I; // Initiator Cookie (Used with responder to create KEYID) diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev1lib/inc/ikev1receiver.h --- a/vpnengine/ikev1lib/inc/ikev1receiver.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev1lib/inc/ikev1receiver.h Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008-2010 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" @@ -80,6 +80,11 @@ */ void StartReceive(); + /** + * Cancels receiving. + */ + void CancelReceive(); + private: CIkev1Receiver( MIkeDataInterface& aDataInterface, @@ -135,6 +140,12 @@ TInt iLocalPort; /** + * Informs if receiving data. + * Own. + */ + TBool iReceiving; + + /** * IKE data interface. * Not own. */ diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev1lib/src/ikev1extra.cpp --- a/vpnengine/ikev1lib/src/ikev1extra.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev1lib/src/ikev1extra.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 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" @@ -250,8 +250,8 @@ if ( iTransformID != aAttr.iTransformID ) //Transform ID return KErrTransformID; - if ((iGroupDesc != aAttr.iGroupDesc) && - (!(iGroupDesc == 0) && (aAttr.iGroupDesc == MODP_768))) //OAKLEY GROUP + if ((aAttr.iGroupDesc < iGroupDesc) && + (!(iGroupDesc == 0))) return KErrGroupDesc; if (iEncMode != aAttr.iEncMode) //Encapsulation Mode return KErrEncMode; @@ -291,6 +291,10 @@ return KErrLifeTime; if (iLifeDurationKBytes.Compare(aAttr.iLifeDurationKBytes)!=0) return KErrLifeSize; + if (iResponderLifetimeSecs.Compare(aAttr.iResponderLifetimeSecs)!=0) + return KErrLifeTime; + if (iResponderLifetimeKBytes.Compare(aAttr.iResponderLifetimeKBytes)!=0) + return KErrLifeSize; } return KErrNone; } @@ -301,6 +305,8 @@ iTransformID = aAttr.iTransformID; //Transform ID iLifeDurationSecs.Copy(aAttr.iLifeDurationSecs); iLifeDurationKBytes.Copy(aAttr.iLifeDurationKBytes); + iResponderLifetimeSecs.Copy(aAttr.iResponderLifetimeSecs); + iResponderLifetimeKBytes.Copy(aAttr.iResponderLifetimeKBytes); iGroupDesc = aAttr.iGroupDesc; //OAKLEY GROUP iEncMode = aAttr.iEncMode; //Encapsulation Mode iAuthAlg = aAttr.iAuthAlg; //HMAC @@ -426,6 +432,8 @@ tmodif->iReplayWindowLength = prop1->iReplayWindowLength; //to update SAD correctly tmodif->iReducedLifeSecs.Set(prop1->iAttrList->At(local_num)->iLifeDurationSecs); tmodif->iReducedLifeKBytes.Set(prop1->iAttrList->At(local_num)->iLifeDurationKBytes); + tmodif->iResponderLifetimeSecs.Set(prop1->iAttrList->At(local_num)->iResponderLifetimeSecs); + tmodif->iResponderLifetimeKBytes.Set(prop1->iAttrList->At(local_num)->iResponderLifetimeKBytes); aTransArray->AppendL(tmodif); //add to the array and go for the next CleanupStack::Pop(); //tmodif safe if ( (i1 + 1) < Count() ) //still proposals left in 'this' list diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev1lib/src/ikev1negotiation.cpp --- a/vpnengine/ikev1lib/src/ikev1negotiation.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev1lib/src/ikev1negotiation.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 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" @@ -833,37 +833,12 @@ } } - //Only Hard Lifetimes taken into account - TInt64 lifetime64 = aReq.iProposal.iComb->sadb_comb_soft_addtime; - iHardLifetime = aReq.iProposal.iComb->sadb_comb_hard_addtime; - - if ( lifetime64 == 0 ) - { - lifetime64 = iHardLifetime; - } - - TUint high = 0; - TUint low = 0; - if (lifetime64!=0) - { - high = ByteOrder::Swap32(I64HIGH(lifetime64)); - if (high > 0) - attr_II->iLifeDurationSecs.Copy((TUint8 *)&high, sizeof(high)); - low = ByteOrder::Swap32(I64LOW(lifetime64)); - attr_II->iLifeDurationSecs.Append((TUint8 *)&low, sizeof(low)); - } - - //Bytes lifetime - lifetime64 = aReq.iProposal.iComb->sadb_comb_soft_bytes; - lifetime64 = (lifetime64/1024); //Bytes to KB - if (lifetime64 != 0) - { - high = ByteOrder::Swap32(I64HIGH(lifetime64)); - if (high > 0) - attr_II->iLifeDurationKBytes.Copy((TUint8 *)&high, sizeof(high)); - low = ByteOrder::Swap32(I64LOW(lifetime64)); - attr_II->iLifeDurationKBytes.Append((TUint8 *)&low, sizeof(low)); - } + SetPhase2LifeDurations( aReq.iProposal.iComb->sadb_comb_soft_addtime, + aReq.iProposal.iComb->sadb_comb_hard_addtime, + aReq.iProposal.iComb->sadb_comb_soft_bytes, + aReq.iProposal.iComb->sadb_comb_hard_bytes, + *attr_II, + EFalse ); //Save some pf_key data to use later in PFKEY_UPDATE msg iAcquireSeq = aReq.iBase.iMsg->sadb_msg_seq; //msg Seq. number @@ -1735,31 +1710,14 @@ break; } - //Only Hard Lifetimes taken into account - TInt64 lifetime64 = spec->iHard.iAddTime; - TUint high = 0; - TUint low = 0; - if (lifetime64!=0) - { - high = ByteOrder::Swap32(I64HIGH(lifetime64)); - if (high > 0) - attr_II->iLifeDurationSecs.Copy((TUint8 *)&high, sizeof(high)); - low = ByteOrder::Swap32(I64LOW(lifetime64)); - attr_II->iLifeDurationSecs.Append((TUint8 *)&low, sizeof(low)); - } - - //Bytes lifetime - lifetime64 = spec->iHard.iBytes; - lifetime64 = (lifetime64/1024); //Bytes to KB - if (lifetime64 != 0) - { - high = ByteOrder::Swap32(I64HIGH(lifetime64)); - if (high > 0) - attr_II->iLifeDurationKBytes.Copy((TUint8 *)&high, sizeof(high)); - low = ByteOrder::Swap32(I64LOW(lifetime64)); - attr_II->iLifeDurationKBytes.Append((TUint8 *)&low, sizeof(low)); - } - if (iPFS) + SetPhase2LifeDurations( spec->iSoft.iAddTime, + spec->iHard.iAddTime, + spec->iSoft.iBytes, + spec->iHard.iBytes, + *attr_II, + ETrue ); + + if (iPFS) { switch (iHostData->iGroupDesc_II) { @@ -3938,7 +3896,6 @@ AppendAttributeError(num, err_buf); DEBUG_LOG(err_buf); #endif - SetErrorStatus( KKmdIkeNoProposalErr ); SendNotifyL(NO_PROPOSAL_CHOSEN); CleanupStack::PopAndDestroy(3); //transarray + recv_proposals + payload return EFalse; @@ -4011,7 +3968,7 @@ } TTransModifier *tmodif; - TInt64 own_time, own_bytes, peer_time, peer_bytes; + TInt64 own_time, own_bytes, peer_time, peer_bytes, responderLifetime_time, responderLifetime_bytes; delete iChosenProp_IIList; //Must be erased because can contain data from previous retransmissions iChosenProp_IIList = NULL; iChosenProp_IIList = new (ELeave) CProposal_IIList(1); @@ -4037,6 +3994,7 @@ attr_II = prop->iAttrList->At(tmodif->iTransNum); //look for the chosen transform in the prop ComputeLifetimes_II(tmodif->iReducedLifeSecs, tmodif->iReducedLifeKBytes, own_time, own_bytes); ComputeLifetimes_II(attr_II->iLifeDurationSecs, attr_II->iLifeDurationKBytes, peer_time, peer_bytes); + ComputeLifetimes_II(tmodif->iResponderLifetimeSecs, tmodif->iResponderLifetimeKBytes, responderLifetime_time, responderLifetime_bytes); //Only copy the chosen transform new_attr_II = new (ELeave) TChosenAttrib_II(); @@ -4057,7 +4015,19 @@ } else new_attr_II->iReducedLifeKBytes.Set(NULL, 0); - + + if (responderLifetime_time) + { + new_attr_II->iResponderLifetimeSecs = tmodif->iResponderLifetimeSecs; + DEBUG_LOG1(_L("Responder lifetime set to %d"), responderLifetime_time); + } + + if (responderLifetime_bytes) + { + new_attr_II->iResponderLifetimeKBytes = tmodif->iResponderLifetimeKBytes; + DEBUG_LOG1(_L("Responder lifetime in bytes set to %d"), responderLifetime_bytes); + } + new_propII->iAttrList->AppendL(new_attr_II); CleanupStack::Pop(); //new_attrII safe @@ -7347,17 +7317,12 @@ prf_data->Des().Copy(iNONCE_I.Ptr(),iNONCE_I.Length()); prf_data->Des().Append(iNONCE_R.Ptr(),iNONCE_R.Length()); DEBUG_LOG(_L("Pre-shared Key")); -#ifdef _UNICODE - HBufC8 *preshared_key_buf = HBufC8::NewLC(iHostData->iPresharedKey.iKey.Length()); - preshared_key_buf->Des().Copy(iHostData->iPresharedKey.iKey); + + HBufC8 *preshared_key_buf = GetPskFromPolicyL(); + CleanupStack::PushL(preshared_key_buf); TPtrC8 preshared_key_ptr(preshared_key_buf->Des()); -#else - TPtrC8 preshared_key_ptr(iHostData->iPresharedKey.iKey); -#endif ComputePRFL(iSKEYID, preshared_key_ptr, prf_data->Des()); -#ifdef _UNICODE - CleanupStack::PopAndDestroy(); //presharedkey_buf -#endif + CleanupStack::PopAndDestroy(preshared_key_buf); } break; default://method not implemented @@ -8091,7 +8056,10 @@ attr_II = (TChosenAttrib_II *)prop->iAttrList->At(0); //only 1 transform is chosen no matter how many there are if ((attr_II->iReducedLifeSecs.Length() != 0) || (attr_II->iReducedLifeKBytes.Length() != 0)) //Any lifetime to update - aMsg.IsakmpResponderLifetime(prop->iProtocol, inboundspi_node.iSPI, attr_II->iReducedLifeSecs, attr_II->iReducedLifeKBytes); + aMsg.IsakmpResponderLifetime(prop->iProtocol, + inboundspi_node.iSPI, + attr_II->iResponderLifetimeSecs, + attr_II->iResponderLifetimeKBytes); } } @@ -8302,5 +8270,127 @@ } } - - +HBufC8* CIkev1Negotiation::GetPskFromPolicyL() +{ + ASSERT(iHostData); + // + // Get Preshared Key from IKE policy and return in to caller in + // HBufc8. + // + HBufC8* psk = NULL; + if ( iHostData->iPresharedKey.iFormat == STRING_KEY ) + { + psk = HBufC8::NewL(iHostData->iPresharedKey.iKey.Length()); + psk->Des().Copy(iHostData->iPresharedKey.iKey); + } + else if ( iHostData->iPresharedKey.iFormat == HEX_KEY ) + { + psk = HBufC8::NewL(iHostData->iPresharedKey.iKey.Length() / 2); + + for(TInt i = 0; i < iHostData->iPresharedKey.iKey.Length(); i += 2) + { + TPtrC hexByte(iHostData->iPresharedKey.iKey.Mid(i, 2)); + TLex lex(hexByte); + TUint8 value; + User::LeaveIfError(lex.Val(value, EHex)); + + psk->Des().Append(&value, 1); + } + + } + + return psk; +} + +void CIkev1Negotiation::SetPhase2LifeDurations( const TInt64 aSoftAddTime, + const TInt64 aHardAddTime, + const TInt64 aSoftBytes, + const TInt64 aHardBytes, + TAttrib_II& aAttr_II, + TBool aResponder ) +{ + TInt64 lifetime64 = aSoftAddTime; + iHardLifetime = aHardAddTime; + + if ( lifetime64 == 0 || + aResponder ) + { + lifetime64 = iHardLifetime; + } + + TUint high = 0; + TUint low = 0; + if ( lifetime64 != 0 ) + { + high = ByteOrder::Swap32(I64HIGH(lifetime64)); + if (high > 0) + { + aAttr_II.iLifeDurationSecs.Copy((TUint8 *)&high, sizeof(high)); + } + low = ByteOrder::Swap32(I64LOW(lifetime64)); + aAttr_II.iLifeDurationSecs.Append((TUint8 *)&low, sizeof(low)); + } + + if ( aResponder ) + { + // Set responder lifetime. + lifetime64 = aSoftAddTime; + if ( lifetime64 == 0 ) + { + lifetime64 = iHardLifetime; + } + + if ( lifetime64 != 0 ) + { + high = ByteOrder::Swap32(I64HIGH(lifetime64)); + if (high > 0) + { + aAttr_II.iResponderLifetimeSecs.Copy((TUint8 *)&high, sizeof(high)); + } + low = ByteOrder::Swap32(I64LOW(lifetime64)); + aAttr_II.iResponderLifetimeSecs.Append((TUint8 *)&low, sizeof(low)); + } + } + + //Bytes lifetime + lifetime64 = aSoftBytes; + + if ( lifetime64 == 0 || + aResponder ) + { + lifetime64 = aHardBytes; + } + + lifetime64 = (lifetime64/1024); //Bytes to KB + if ( lifetime64 != 0 ) + { + high = ByteOrder::Swap32(I64HIGH(lifetime64)); + if (high > 0) + aAttr_II.iLifeDurationKBytes.Copy((TUint8 *)&high, sizeof(high)); + low = ByteOrder::Swap32(I64LOW(lifetime64)); + aAttr_II.iLifeDurationKBytes.Append((TUint8 *)&low, sizeof(low)); + } + + if ( aResponder ) + { + // Set responder lifetime. + if ( lifetime64 == 0 ) + { + lifetime64 = iHardLifetime; + } + lifetime64 = (lifetime64/1024); //Bytes to KB + + if ( lifetime64 != 0 ) + { + high = ByteOrder::Swap32(I64HIGH(lifetime64)); + if (high > 0) + { + aAttr_II.iResponderLifetimeKBytes.Copy((TUint8 *)&high, sizeof(high)); + } + low = ByteOrder::Swap32(I64LOW(lifetime64)); + aAttr_II.iResponderLifetimeKBytes.Append((TUint8 *)&low, sizeof(low)); + } + } +} + + diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev1lib/src/ikev1pluginsession.cpp --- a/vpnengine/ikev1lib/src/ikev1pluginsession.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev1lib/src/ikev1pluginsession.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008-2010 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" @@ -1447,7 +1447,8 @@ CleanupStack::Pop(); //negotiation safe return; } - CleanupStack::PopAndDestroy(); + CleanupStack::Pop(); + DeleteNegotiation(negotiation); } return; } @@ -1900,7 +1901,7 @@ // void CIkev1PluginSession::DoCancelDataTransfer() { - iReceiver->Cancel(); + iReceiver->CancelReceive(); iDataInterface.StopReceive(); DoEmptySendQueue(); iSender->Cancel(); diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev1lib/src/ikev1receiver.cpp --- a/vpnengine/ikev1lib/src/ikev1receiver.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev1lib/src/ikev1receiver.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008-2010 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" @@ -82,10 +82,21 @@ // void CIkev1Receiver::StartReceive() { + iReceiving = ETrue; DoReceive(); } // --------------------------------------------------------------------------- +// Cancels receive. +// --------------------------------------------------------------------------- +// +void CIkev1Receiver::CancelReceive() + { + iReceiving = EFalse; + Cancel(); + } + +// --------------------------------------------------------------------------- // From class CActive // Handles completion of receive. // --------------------------------------------------------------------------- @@ -112,13 +123,15 @@ } else { + iReceiving = EFalse; iCallback.ReceiveError( iStatus.Int() ); } delete iUdpData; iUdpData = NULL; - if ( iStatus.Int() == KErrNone ) + if ( iReceiving && + iStatus.Int() == KErrNone ) { // Continue receiving. DoReceive(); @@ -145,6 +158,8 @@ // TInt CIkev1Receiver::RunError( TInt aError ) { + iReceiving = EFalse; + delete iUdpData; iUdpData = NULL; diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev2lib/inc/ikev2SA.h --- a/vpnengine/ikev2lib/inc/ikev2SA.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev2lib/inc/ikev2SA.h Fri Mar 12 15:48:43 2010 +0200 @@ -73,6 +73,7 @@ TIkeV2IpsecSAData* iIpsecSaQue; // Ipsec SA information queue CIkeV2KeepAlive* iIkeKeepAlive; // Pointer to common IKE keepalive object TUint32 iRemainingTime; // Current lifetime left + TUint32 iRekeyingThreshold; }; diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev2lib/src/ikev2negotiation.cpp --- a/vpnengine/ikev2lib/src/ikev2negotiation.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev2lib/src/ikev2negotiation.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -2620,7 +2620,6 @@ DEBUG_LOG1(_L("IKE SA Rekey started by peer for SAID: %d"), iHdr.SaId()); iState = KStateIkeSARekeyResponse; Status = ProcessIkeSARekeyL(aIkeMsg); - iIkeV2PlugInSession.UpdateIkev2SAL(&iHdr, NULL); } return Status; } diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/ikev2lib/src/ikev2pluginsession.cpp --- a/vpnengine/ikev2lib/src/ikev2pluginsession.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/ikev2lib/src/ikev2pluginsession.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -273,18 +273,14 @@ void CIkev2PluginSession::DoDeleteIkeSAExhangeL(TIkev2SAData& aIkev2SAdata) { DEBUG_LOG1(_L("Deleting IKE SA SAID = %d"), aIkev2SAdata.SaId()); - - __ASSERT_DEBUG(iFirstNegotiation == NULL, User::Invariant()); - - CIkev2Negotiation* negotiation = CIkev2Negotiation::NewL(*this, iPfKeySocketIf, - iEventLogger, *iMessageSendQue, - iDebug, aIkev2SAdata); - CleanupStack::PushL(negotiation); - negotiation->StartIkeSADeleteL(); - CleanupStack::Pop(negotiation); - - __ASSERT_DEBUG( !negotiation->Stopped(), User::Invariant() ); - + + CIkev2Negotiation* negotiation = CIkev2Negotiation::NewL(*this, iPfKeySocketIf, + iEventLogger, *iMessageSendQue, + iDebug, aIkev2SAdata); + CleanupStack::PushL(negotiation); + negotiation->StartIkeSADeleteL(); + CleanupStack::Pop(negotiation); + __ASSERT_DEBUG( !negotiation->Stopped(), User::Invariant() ); } 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); } diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/utlpkcs10/EABI/utlpkcs10U.def --- a/vpnengine/utlpkcs10/EABI/utlpkcs10U.def Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/utlpkcs10/EABI/utlpkcs10U.def Fri Mar 12 15:48:43 2010 +0200 @@ -13,4 +13,6 @@ _ZN10CPkcs10ReqD2Ev @ 12 NONAME _ZTI10CPkcs10Req @ 13 NONAME ; ## _ZTV10CPkcs10Req @ 14 NONAME ; ## + _ZN10CPkcs10ReqC1Ev @ 15 NONAME + _ZN10CPkcs10ReqC2Ev @ 16 NONAME diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/utlpkcs10/bwins/UTLPKCS10U.DEF --- a/vpnengine/utlpkcs10/bwins/UTLPKCS10U.DEF Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/utlpkcs10/bwins/UTLPKCS10U.DEF Fri Mar 12 15:48:43 2010 +0200 @@ -9,4 +9,5 @@ ?SetDistinguishedNameExtendedL@CPkcs10Req@@QAEHABVTDesC8@@@Z @ 8 NONAME ; int CPkcs10Req::SetDistinguishedNameExtendedL(class TDesC8 const &) ?SetPublicKey@CPkcs10Req@@QAEHABVTDesC8@@@Z @ 9 NONAME ; int CPkcs10Req::SetPublicKey(class TDesC8 const &) ?SetSubjectAltNameRfc822@CPkcs10Req@@QAEHABVTDesC8@@@Z @ 10 NONAME ; int CPkcs10Req::SetSubjectAltNameRfc822(class TDesC8 const &) + ??0CPkcs10Req@@QAE@XZ @ 11 NONAME ; CPkcs10Req::CPkcs10Req(void) diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/utlpkcs10/inc/pkcs10.h --- a/vpnengine/utlpkcs10/inc/pkcs10.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/utlpkcs10/inc/pkcs10.h Fri Mar 12 15:48:43 2010 +0200 @@ -130,10 +130,8 @@ class CPkcs10Req : public CBase { public: -#ifdef __EABI__ /** Cause vtable & typeinfo to be exported */ - IMPORT_C CPkcs10Req() {}; -#endif + IMPORT_C CPkcs10Req(); IMPORT_C ~CPkcs10Req(); ////////////////////////////////////////////////////////////////////// // Visible interface diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/utlpkcs10/src/pkcs10.cpp --- a/vpnengine/utlpkcs10/src/pkcs10.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/utlpkcs10/src/pkcs10.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -27,6 +27,10 @@ #include "pkidefs.h" #include "utlcrypto.h" +EXPORT_C CPkcs10Req::CPkcs10Req() + { + } + ////////////////////////////////////////////////////////////////////////////// // Destructor ////////////////////////////////////////////////////////////////////////////// diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/vpnmanager/inc/cmmanagerutils.h --- a/vpnengine/vpnmanager/inc/cmmanagerutils.h Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/vpnmanager/inc/cmmanagerutils.h Fri Mar 12 15:48:43 2010 +0200 @@ -48,8 +48,7 @@ const TUint32 aInternetDestinationId); - static HBufC* CreateConnectionMethodNameLC(RCmManagerExt& aCmManagerExt, - const TDesC& aPolicyName); + static HBufC* CreateConnectionMethodNameLC(const TDesC& aPolicyName); static HBufC* CreateIntranetDestinationNameLC(RCmManagerExt& aCmManagerExt); diff -r 032d3a818f49 -r 68dc8923de26 vpnengine/vpnmanager/src/cmmanagerutils.cpp --- a/vpnengine/vpnmanager/src/cmmanagerutils.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnengine/vpnmanager/src/cmmanagerutils.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -65,8 +65,7 @@ if ( internetDestinationId != 0) { //Generate name for the connection method - HBufC* name = CreateConnectionMethodNameLC(cmManagerExt, - aVpnPolicyInfo.iName); + HBufC* name = CreateConnectionMethodNameLC(aVpnPolicyInfo.iName); //Create VPN connection method RCmConnectionMethodExt vpnConnectionMethod = @@ -111,59 +110,16 @@ LOG_("CmManagerUtils::SetVpnConnectionMethodAttributesL - end \n"); } -HBufC* CmManagerUtils::CreateConnectionMethodNameLC(RCmManagerExt& aCmManagerExt, - const TDesC& aPolicyName) +HBufC* CmManagerUtils::CreateConnectionMethodNameLC(const TDesC& aPolicyName) { - using namespace CMManager; - + LOG_("CmManagerUtils::CreateConnectionMethodNameLC \n"); HBufC* name = HBufC::NewLC(KMaxDestinationNameLength); TPtr namePtr = name->Des(); - RArray connections; - CleanupClosePushL( connections ); - aCmManagerExt.ConnectionMethodL( connections, EFalse, EFalse, EFalse ); + namePtr.Copy(aPolicyName.Left(KMaxDestinationNameLength)); - TInt connectionMethodCount = connections.Count(); - TBool matchFound = EFalse; - TInt counter = 1; - do - { - matchFound = EFalse; - - namePtr.Copy(aPolicyName.Left(KMaxDestinationNameLength)); - if (counter > 1) - { - TBuf<10> numberValue; - numberValue.Format(_L("(%d)"), counter); - if (namePtr.MaxLength() < numberValue.Length() + namePtr.Length()) - { - namePtr.SetLength(namePtr.MaxLength() - numberValue.Length()); - - } - namePtr.Append(numberValue); - } - - for (TInt i = 0; i < connectionMethodCount; i++) - { - RCmConnectionMethodExt connectionMethod = aCmManagerExt.ConnectionMethodL( connections[i] ); - CleanupClosePushL(connectionMethod); - HBufC* existingName = connectionMethod.GetStringAttributeL( ECmName ); - CleanupStack::PopAndDestroy(); //connectionMethod - - if (name->Compare(*existingName) == 0) - { - delete existingName; - matchFound = ETrue; - break; - } - delete existingName; - } - counter++; - }while(matchFound); - - CleanupStack::PopAndDestroy(); // connections LOG_("CmManagerUtils::CreateConnectionMethodNameLC - end \n"); return name; } diff -r 032d3a818f49 -r 68dc8923de26 vpnui/vpnmanagementui/src/vpnuiloader.cpp --- a/vpnui/vpnmanagementui/src/vpnuiloader.cpp Fri Feb 19 23:50:52 2010 +0200 +++ b/vpnui/vpnmanagementui/src/vpnuiloader.cpp Fri Mar 12 15:48:43 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2003 - 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2003 - 2010 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" @@ -70,12 +70,6 @@ { LOG_("CVpnUiLoader::~CVpnUiLoader()"); iVpnManagementUiView = NULL; - - if ( iLogViewVisited == EFalse ) - delete iVpnManagementUiLogView; - - if ( iPolicyViewVisited == EFalse ) - delete iVpnManagementUiPolicyView; delete iVpnManagementUiParametersView; delete iVpnManagementUiServerView; @@ -139,12 +133,8 @@ iPreviousAppViewId = aViewId; CreateWindowL(); - - iVpnManagementUiPolicyView = CVpnManagementUiPolicyView::NewL( - aRect, *this); iVpnManagementUiServerView = CVpnManagementUiServerView::NewL( aRect, *this); - iVpnManagementUiLogView = CVpnManagementUiLogView::NewL( aRect, *this); iVpnManagementUiParametersView = CServerSettingsView::NewL( aRect, *this); SetRect(aRect); @@ -197,11 +187,12 @@ } case KChangeViewBack: ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiPolicyViewId); + iPolicyViewVisited = EFalse; ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiLogViewId); + iLogViewVisited = EFalse; ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiParametersViewId); ((CAknViewAppUi*)iAvkonAppUi)->RemoveView(KVpnManagementUiServerViewId); ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL( iGsViewId.iViewUid ); - ReleaseResource(ETrue); if(iObserver) { iObserver->UiComplete(KUirEventNone); @@ -218,7 +209,12 @@ iPreviousViewId = localCurrentViewId.iViewUid; if ( iPolicyViewVisited == EFalse) + { + TRect rect; + iVpnManagementUiPolicyView = CVpnManagementUiPolicyView::NewL( + rect, *this); ((CAknViewAppUi*)iAvkonAppUi)->AddViewL(iVpnManagementUiPolicyView); + } iPolicyViewVisited=ETrue; ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL( KVpnManagementUiPolicyViewId ); @@ -249,7 +245,11 @@ iPreviousViewId = localCurrentViewId.iViewUid; if ( iLogViewVisited == EFalse) + { + TRect rect; + iVpnManagementUiLogView = CVpnManagementUiLogView::NewL( rect, *this); ((CAknViewAppUi*)iAvkonAppUi)->AddViewL(iVpnManagementUiLogView); + } iLogViewVisited=ETrue; ((CAknViewAppUi*)iAvkonAppUi)->ActivateLocalViewL( KVpnManagementUiLogViewId );