# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1276067201 -10800 # Node ID fb1bbf85a302319d7bf624519994cb4ad4ab4f46 # Parent 91f50911ea81d26945a1bca50ba5ae6319d72ce9 Revision: 201021 Kit: 2010123 diff -r 91f50911ea81 -r fb1bbf85a302 ipappsrv_plat/media_control_api/inc/mmccinterfacedef.h --- a/ipappsrv_plat/media_control_api/inc/mmccinterfacedef.h Tue May 25 13:07:26 2010 +0300 +++ b/ipappsrv_plat/media_control_api/inc/mmccinterfacedef.h Wed Jun 09 10:06:41 2010 +0300 @@ -104,6 +104,12 @@ class TMccVideoSinkSetting { public: + TMccVideoSinkSetting() : iLocation(0,0), iSize(0,0), iVideoPayloadType(0), + iAudioPayloadType(0), iIAPId(0), iDeviceIndex(0), iWindowOrdinalPosition(0), + iWindowOrdinalPriority(0), iRotation(EMccNone), iVideoFrameRate(0.0), iEnabled(ETrue) + { + } + TPoint iLocation; TSize iSize; TUint iVideoPayloadType; @@ -115,6 +121,7 @@ TInt iWindowOrdinalPriority; TMccVideoRotation iRotation; TReal iVideoFrameRate; + TBool iEnabled; }; typedef TPckgBuf TMccVideoSinkSettingBuf; diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommscontroller/mmcccontroller/src/mcccamerahandler.cpp --- a/multimediacommscontroller/mmcccontroller/src/mcccamerahandler.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommscontroller/mmcccontroller/src/mcccamerahandler.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -150,6 +150,10 @@ iViewFinderSettings = aSetting; + if ( !iViewFinderSettings.iEnabled ){ + __CONTROLLER( "CMccCameraHandler::EnableViewFinderL, param update, exit" ) + return; + } __CONTROLLER( "CMccCameraHandler::EnableViewFinderL, starting vf" ) CCamera* cam = IsCameraReady() ? iCamera : NULL; @@ -217,8 +221,9 @@ iViewFinderSettings.iSize.iWidth) __CONTROLLER_INT2( "CMccCameraHandler::GetViewFinderSettingsL, location", iViewFinderSettings.iLocation.iX, - iViewFinderSettings.iLocation.iY) - aSetting = iViewFinderSettings; + iViewFinderSettings.iLocation.iY) + aSetting = iViewFinderSettings; + aSetting.iEnabled = iViewFinderEnabled; __CONTROLLER( "CMccCameraHandler::GetViewFinderSettingsL,exit" ) } diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommscontroller/mmcccontroller/tsrc/ut_controller/src/UT_CMccCameraHandler.cpp --- a/multimediacommscontroller/mmcccontroller/tsrc/ut_controller/src/UT_CMccCameraHandler.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommscontroller/mmcccontroller/tsrc/ut_controller/src/UT_CMccCameraHandler.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -286,6 +286,22 @@ iCameraHandler->GetViewFinderSettingsL( settings2 ); EUNIT_ASSERT_EQUALS( settings2.iSize.iWidth, 0 ); EUNIT_ASSERT( iCameraHandler->iCamera->iVfStarted == EFalse ) + + // Check that iEnabled in settings is handled correctly + iCameraHandler->iViewFinderEnabled = EFalse; + settings.iEnabled = EFalse; + iCameraHandler->EnableViewFinderL( settings ); + EUNIT_ASSERT( iCameraHandler->iViewFinderEnabled == EFalse ) + EUNIT_ASSERT( iCameraHandler->iCamera->iVfStarted == EFalse ) + iCameraHandler->GetViewFinderSettingsL( settings2 ); + EUNIT_ASSERT( settings2.iEnabled == EFalse ) + + settings.iEnabled = ETrue; + iCameraHandler->EnableViewFinderL( settings ); + EUNIT_ASSERT( iCameraHandler->iViewFinderEnabled == ETrue ) + EUNIT_ASSERT( iCameraHandler->iCamera->iVfStarted == EFalse ) + iCameraHandler->GetViewFinderSettingsL( settings2 ); + EUNIT_ASSERT( settings2.iEnabled == ETrue ) } void UT_CMccCameraHandler::UT_CMccCameraHandler_DisableViewFinderL() diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp --- a/multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -300,22 +300,8 @@ // CMceComCodec* CMceComAMRWbCodec::DoMccValidateL( CMccCodecInformation& aMccCodec, CMceSrvStream& /*aStream*/, - TMceNegotiationRole aRole ) + TMceNegotiationRole /*aRole */) { - //if answerer mcc codec represents the received offer and codec the answer - //if offerer codec represents the sent offer and mcc codec the answer - - // Bitrates field contains also additional information, mask it away - TUint mccBitrates = ( aMccCodec.AllowedBitrates() & KMceAllowedAmrWbBitrateAll ); - TUint mceBitrates = ( iAllowedBitrates & KMceAllowedAmrWbBitrateAll ); - - TBool notValid = aRole == EMceRoleAnswerer ? - ( mceBitrates && mccBitrates == 0 || - mceBitrates > mccBitrates ) : - ( mceBitrates && mccBitrates == 0 || - mceBitrates < mccBitrates ); - - User::LeaveIfError( notValid ? KErrNotSupported : KErrNone ); if ( aMccCodec.CodecMode() != (TCodecMode)iCodecMode ) { // codec-mode was different, fail. diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmceshared/src/mcecomdisplaysink.cpp --- a/multimediacommsengine/mmceshared/src/mcecomdisplaysink.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmceshared/src/mcecomdisplaysink.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -347,6 +347,7 @@ displaySetting.iWindowOrdinalPosition = 1; displaySetting.iWindowOrdinalPriority = iPriority; displaySetting.iRotation = EMccNone; + displaySetting.iEnabled = ETrue; if ( aCodec.Stream() && aCodec.Stream()->iType == KMceVideo ) { diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuredesstream.h --- a/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuredesstream.h Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuredesstream.h Wed Jun 09 10:06:41 2010 +0300 @@ -213,13 +213,12 @@ void ForceUpdateStreamL(); private: - /** - * Set Crypto Context to MCC after Encode/Decode SDP are done - * @return void - */ - void SetCryptoContextL( ); - - + /** + * * Set Crypto Context to MCC after Encode/Decode SDP are done + * @return void + */ + void SetCryptoContextL( TBool aAnswer = ETrue ); + /** * Base64 encoding * @since Series 60 3.0 @@ -422,6 +421,9 @@ CSdpMediaField* iMediaField; TBool iIsSAVP; + + TBool iRemoteChangeKey; + TUint32 iCryptoContextOutId; diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuremediasession.h --- a/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuremediasession.h Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuremediasession.h Wed Jun 09 10:06:41 2010 +0300 @@ -207,6 +207,7 @@ TBool iKeyNeedUpdated; TBool iCryptoContextUpdate; TBool iLSReadyToBind; + TBool iNatBind; private: diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediamanager.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediamanager.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediamanager.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -307,8 +307,8 @@ aSession.NegotiationState().UpdateL(); status = !aSession.NegotiationState().CallbackAllowed() ? KMceReady : KMceAsync; - if( status==KMceReady && aSession.SecureSession() - && negotationStateId!=KMceMediaIdle ) + if ( aSession.SecureSession() && negotationStateId == + KMceOfferingMedia && aSession.SecureSession()->iLSReadyToBind ) { aSession.SecureSession()->BindStreamCrypto(); } diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -916,7 +916,7 @@ const TUint8 KAddrOffsetFromNetType = 4; TInt addr_offset = value.Match( KMatchIp ) + KAddrOffsetFromNetType; - TPtrC8 remoteRtcpAddr = value.Mid( addr_offset ); + TPtrC8 remoteRtcpAddrTxt = value.Mid( addr_offset ); const TUint8 KPortOffsetFromIP = 1; TInt port_offset = @@ -927,11 +927,20 @@ User::LeaveIfError( lexPT.Val( rtcpPort, EDecimal ) ); // copy the address into correct format TBuf16 input; - input.Copy( remoteRtcpAddr ); + input.Copy( remoteRtcpAddrTxt ); MCEMM_DEBUG_SVALUE( "Found RTCP address", input ) - aStream.SetRemoteRtcpMediaAddrL( input ); + TInetAddr remoteRtcpAddr; + User::LeaveIfError( remoteRtcpAddr.Input( input ) ); + TInetAddr localIpAddr( aStream.Session()->iLocalIpAddress ); + TBool validRemoteRtcpAddr( + remoteRtcpAddr.IsLoopback() || !localIpAddr.Match( remoteRtcpAddr ) ); + MCEMM_DEBUG_DVALUE( "Remote RTCP addr valid:", validRemoteRtcpAddr ) + if ( validRemoteRtcpAddr ) + { + aStream.SetRemoteRtcpMediaAddrL( input ); + } } else { @@ -1040,8 +1049,10 @@ else if ( secureSession && aRole == EMceRoleAnswerer && aUpdate ) { // for long session - secureSession->iKeyNeedUpdated = ETrue; - secureSession->DecodeSecureDesSdpUpdateL( aStream, aMediaLine ) ; + if( secureSession->SdpCryptoAttributeCount( aMediaLine ) ) + { + secureSession->DecodeSecureDesSdpUpdateL( aStream, aMediaLine ) ; + } } else if ( secureSession && aRole == EMceRoleOfferer ) { diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesdpsession.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesdpsession.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesdpsession.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -183,6 +183,13 @@ } else { + if( aSession.SecureSession() ) + { + if( aSession.SecureSession()->iKeyNeedUpdated ) + { + aSession.SecureSession()->iKeyNeedUpdated = EFalse; + } + } sdpDocument = iSdpDocument; CleanSessionParams( *iSdpDocument ); } @@ -647,6 +654,11 @@ TOfferType type = !Backup() ? EFirst : EUpdate; + if( type == EUpdate && aSession.SecureSession() ) + { + aSession.SecureSession()->iLSReadyToBind = ETrue; + } + CleanSessionParams( *iSdpDocument ); EncodeSessionParamsL( aSession, *iSdpDocument, type ); diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuredesstream.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuredesstream.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuredesstream.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -88,6 +88,7 @@ iSecInf(aSecureInterface), iMediaStream(aMediaStream), iIsSAVP(ETrue), + iRemoteChangeKey(EFalse), iCryptoContextOutId(0), iCryptoContextInId(0), iOldLocalMediaPort(0) @@ -336,6 +337,11 @@ MCEMM_DEBUG(" Set Multiple Client Cryptoto") User::LeaveIfError ( CountCryptoInOffer( aMediaField ) ); Session().iIsSecureSession = !iGnoreSdpMsg ? ETrue : EFalse; + if( iSecureSession.iNatBind ) + { + SetCryptoContextL( ETrue ); + iSecureSession.iNatBind = EFalse; + } } MCEMM_DEBUG("CMceSecureDesStream::DecodeSecureSdpL(), Exit") MSG_IGNORE_RETURN() @@ -376,7 +382,8 @@ } if ( iSecureSession.iLSReadyToBind ) { - SetCryptoContextL(); + SetCryptoContextL( EFalse ); + iRemoteChangeKey = EFalse; } MSG_IGNORE_RETURN() if ( !iCryptoIn.iCryptoSuite.Length() ) @@ -437,9 +444,10 @@ // Sets crypto context to MCC // ----------------------------------------------------------------------------- // -void CMceSecureDesStream::SetCryptoContextL( ) +void CMceSecureDesStream::SetCryptoContextL( TBool aAnswer ) { - MCEMM_DEBUG("SetCryptoContext(), Entry") + MCEMM_DEBUG("SetCryptoContext(), Entry") + TBool bindContext = ETrue; TBool storedIgnoreSdpMsg = EFalse; //Check state first if the crypto has been set if ( !iCryptoIn.iIfCryptoContextIdSet && @@ -454,6 +462,12 @@ CreateCryptoContextL( iCryptoOut ); MCEMM_DEBUG_DVALUE( "iCryptoContextOutId", iCryptoIn.iCryptoContextId ) MCEMM_DEBUG_DVALUE( "iCryptoContextInId", iCryptoOut.iCryptoContextId ) + + if( !aAnswer ) + { + bindContext = EFalse; + MCEMM_DEBUG("delay to bind!"); + } iCryptoOuts->Reset(); @@ -472,7 +486,7 @@ } MCEMM_DEBUG_DVALUE( "Updated iCryptoContextOutId", iCryptoIn.iCryptoContextId ) MCEMM_DEBUG_DVALUE( "Updated iCryptoContextInId", iCryptoOut.iCryptoContextId ) - if ( iSecureSession.iKeyNeedUpdated ) + if ( iSecureSession.iKeyNeedUpdated || iRemoteChangeKey ) { UpdateCryptoContextL( iCryptoIn ); storedIgnoreSdpMsg = iGnoreSdpMsg; @@ -488,6 +502,10 @@ iGnoreSdpMsg = (iCryptoIn.iIfCryptoContextIdSet && iCryptoOut.iIfCryptoContextIdSet ) && !iGnoreSdpMsg ? EFalse : ETrue; + if ( iWaitingBinding && bindContext ) + { + iSecureSession.BindStreamCrypto(); + } MCEMM_DEBUG("SetCryptoContext(), Exit") } @@ -839,6 +857,13 @@ } else { + if( iRemoteChangeKey ) + { + MCEMM_DEBUG("Update CryptoIn" ) + TBool tmpSet = iCryptoIn.iIfCryptoContextIdSet; + iCryptoIn.Copy( iCryptoIns->At( 0 ) ); + iCryptoIn.iIfCryptoContextIdSet = tmpSet; + } if(iOldLocalMediaPort != iMediaStream.iLocalMediaPort) { GenerateRandomKeys( iCryptoOut ); @@ -852,11 +877,8 @@ MSG_IGNORE_RETURN() if ( iSecureSession.iLSReadyToBind ) { - SetCryptoContextL(); - if ( iWaitingBinding ) - { - iSecureSession.BindStreamCrypto(); - } + SetCryptoContextL( ETrue ); + iRemoteChangeKey = EFalse; } MSG_IGNORE_RETURN() } @@ -1206,13 +1228,14 @@ } TPtrC8 keyInfo = aSecDec.Mid(keyInfoPos, keyInfoLen); - if ( iSecureSession.iKeyNeedUpdated ) - { + - TBool valid = ValidateSecurityDescriptions( keyInfo ); - if ( valid ) + TBool valid = ValidateSecurityDescriptions( keyInfo ); + if ( valid ) + { + iRemoteChangeKey = iCryptoIn.iEncodedKey.Compare( keyInfo ) != 0; + if( iSecureSession.iKeyNeedUpdated || iRemoteChangeKey ) { - // check keyInfo if (iCryptoOut.iEncodedKey.Compare( keyInfo ) == 0) { @@ -1226,11 +1249,11 @@ iCryptoIn.iEncodedKey = keyInfo; StoreKeys(iCryptoIn.iEncodedKey); } - else - { - User::Leave( KErrArgument ); - } - } + } + else + { + User::Leave( KErrArgument ); + } } else { @@ -1285,7 +1308,12 @@ if ( valid ) { - + if( !iSecureSession.iKeyNeedUpdated && + iCryptoIn.iEncodedKey.Compare( keyInfo ) != 0 ) + { + MCEMM_DEBUG("Remote change the key"); + iRemoteChangeKey = ETrue; + } //check keyinfo mki DecodeMKIValueL( aSecDec, EFalse, crypto ); MSG_IGNORE_RETURN() @@ -1489,10 +1517,8 @@ cryptoOut.iAuthAlgms == aCrypto.iAuthAlgms && cryptoOut.iCryptoSuite.Compare(aCrypto.iCryptoSuite) == 0) { - if(!iCryptoOut.iIfCryptoContextIdSet) - { //SEtCrypto - iCryptoOut.Copy( cryptoOut ); - } + //SEtCrypto + iCryptoOut.Copy( cryptoOut ); iCryptoIn.iTag = cryptoOut.iTag; iCryptoIn.iEncAlgms = cryptoOut.iEncAlgms; iCryptoIn.iAuthAlgms = cryptoOut.iAuthAlgms; @@ -1684,8 +1710,7 @@ { iCryptoOuts->AppendL( aCopyFrom.iCryptoOuts->At( i ) ); } - iOldLocalMediaPort = aCopyFrom.iOldLocalMediaPort; - iWaitingBinding = aCopyFrom.iWaitingBinding; + iOldLocalMediaPort = aCopyFrom.iOldLocalMediaPort; MCEMM_DEBUG( "CMceSecureDesStream::CopyStreamCryptoL Exit" ) } diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuremediasession.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuremediasession.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuremediasession.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -49,8 +49,8 @@ iSession( aSession ), iSecureInterface(aSecureInterface), iKeyNeedUpdated( ETrue ), - iCryptoContextUpdate (EFalse), - iLSReadyToBind ( ETrue ), + iCryptoContextUpdate (EFalse ), + iLSReadyToBind ( EFalse ), iStringTable( NULL ) { @@ -433,7 +433,7 @@ { MCEMM_DEBUG("CMceSecureDesStream::BindStreamCrypto(), Entry"); TInt err(KErrNone); - if (iLSReadyToBind && iSession.iClientCryptoSuites.Count()) + if (iSession.iClientCryptoSuites.Count()) { for (TInt i=0; iData().Id().iAppId ); TInt secStreamCount = iMceSecureDesStreams.Count(); - for (TInt j=0; jMediaStream().Id().iId); - MCEMM_DEBUG_DVALUE(" App id in SecureStream ", secureStream->MediaStream().Id().iAppId); - if(secureStream->iWaitingBinding) - { - if (stream->Data().Id()== secureStream->MediaStream().Id() || - ( stream->Data().BoundStream() && - stream->Data().iLinkedStream->Id() == secureStream->MediaStream().Id() ) ) - { - //bind - err = secureStream->BindCrypto(*stream); - } - } - } + for (TInt j=0; jMediaStream().Id().iId); + MCEMM_DEBUG_DVALUE(" App id in SecureStream ", secureStream->MediaStream().Id().iAppId); + if (stream->Data().Id()== secureStream->MediaStream().Id() || + ( stream->Data().BoundStream() && + stream->Data().iLinkedStream->Id() == secureStream->MediaStream().Id() ) ) + { + //bind + if( secureStream->iWaitingBinding ) + { + secureStream->BindCrypto(*stream); + } + } + } } } MCEMM_DEBUG("CMceSecureDesStream::BindStreamCrypto(), Exit"); diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/inc/UT_cmcemediasdpcodec.h --- a/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/inc/UT_cmcemediasdpcodec.h Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/inc/UT_cmcemediasdpcodec.h Wed Jun 09 10:06:41 2010 +0300 @@ -77,7 +77,6 @@ void UT_CMceMediaSdpCodec_EncodeFmtpAttributeLL(); void UT_CMceMediaSdpCodec_DecodeFmtpLinesLL(); void UT_CMceMediaSdpCodec_ValidateSdpL(); - void UT_CMceMediaSdpCodec_DecodeSecureSessionLL(); void UT_CMceMediaSdpCodec_DecodeDirectionLL(); void UT_CMceMediaSdpCodec_DecodeRtpmapLinesLL(); diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_CMceSecureDesStream.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_CMceSecureDesStream.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_CMceSecureDesStream.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -658,7 +658,7 @@ CleanupStack::PushL( mediaAnswer2 ); //iCryptoOut crypto is not set iSecureStream->DecodeSecureSdpAnswerL(*mediaAnswer2); - //EUNIT_ASSERT( !iSecureStream->Session().iIsSecureSession ); + EUNIT_ASSERT( iSecureStream->Session().iIsSecureSession ); EUNIT_ASSERT( iSecureStream->iCryptoIn.iMKLifeTime == 32 ); EUNIT_ASSERT( iSecureStream->iCryptoOut.iMKLifeTime == KDefalutMaterKeysLifeTime ); CleanupStack::PopAndDestroy(mediaAnswer2); @@ -670,7 +670,7 @@ CleanupStack::PushL( mediaOffer ); iSecureSession->iCryptoContextUpdate = ETrue; iSecureStream->EncodeSecureSdpL(*mediaOffer, EFalse ); - //EUNIT_ASSERT( !iSecureStream->Session().iIsSecureSession ); + EUNIT_ASSERT( iSecureStream->Session().iIsSecureSession ); CSdpMediaField* mediaAnswer3 = CSdpMediaField::DecodeL( KMceTestMeidaCryptoMultiple ); CleanupStack::PushL( mediaAnswer3 ); @@ -1015,11 +1015,9 @@ *iSecureInterface, *iStream1); CleanupStack::PushL( copy); - iSecureStream->iWaitingBinding = ETrue; copy->CopyStreamCryptoL(*iSecureStream); CleanupStack::Pop( copy ); EUNIT_ASSERT( copy->iCryptoOuts->Count()==KTotalCryptoAnswerCount ); - EUNIT_ASSERT( copy->iWaitingBinding == ETrue ); delete copy; } diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -908,6 +908,25 @@ EUNIT_ASSERT( mediaStream->iRemoteRtcpAddress.IsUnspecified() ) audioLine->AttributeFields().ResetAndDestroy(); + // Rtcp attribute has incorrectly our local address, it should not be used + mediaStream->Session()->iLocalIpAddress.Input( _L("10.20.30.40") ); + rtcp = CSdpAttributeField::DecodeLC( _L8( "a=rtcp:5020 IN IP4 10.20.30.40\r\n" ) ); + audioLine->AttributeFields().AppendL( rtcp ); + CleanupStack::Pop( rtcp ); + iSdpCodec->DecodeRemoteRtcpFieldL( *audioLine, *mediaStream ); + EUNIT_ASSERT_EQUALS( 5020, mediaStream->iRemoteRtcpPort ) + EUNIT_ASSERT( mediaStream->iRemoteRtcpAddress.IsUnspecified() ) // Not changed + audioLine->AttributeFields().ResetAndDestroy(); + + // Rtcp attrubute is local loopback address, ok to use + rtcp = CSdpAttributeField::DecodeLC( _L8( "a=rtcp:5020 IN IP4 127.0.0.1\r\n" ) ); + audioLine->AttributeFields().AppendL( rtcp ); + CleanupStack::Pop( rtcp ); + iSdpCodec->DecodeRemoteRtcpFieldL( *audioLine, *mediaStream ); + EUNIT_ASSERT_EQUALS( 5020, mediaStream->iRemoteRtcpPort ) + EUNIT_ASSERT_EQUALS( INET_ADDR( 127,0,0,1 ), mediaStream->iRemoteRtcpAddress.Address() ) + audioLine->AttributeFields().ResetAndDestroy(); + CleanupStack::PopAndDestroy( sdp ); } @@ -1350,14 +1369,6 @@ } -void UT_CMceMediaSdpCodec::UT_CMceMediaSdpCodec_DecodeSecureSessionLL() - { - CSdpDocument* sdp = CSdpDocument::DecodeL( KMceTestSdpAMR ); - CSdpMediaField* audioLine = sdp->MediaFields()[ 0 ]; - iSession->SecureSessionL(); - - CMceComMediaStream* mediaStream = iSession->Streams()[ 0 ]; - CMceSecureMediaSession* secureSession = iSession->SecureSession(); CleanupStack::PushL( sdp ); secureSession->iKeyNeedUpdated = EFalse; @@ -1673,17 +1684,11 @@ "FUNCTIONALITY", SetupL, UT_CMceMediaSdpCodec_EncodelocalRtcpAttrLL, Teardown) -EUNIT_TEST ( - "DecodeSecureSessionL test", - "CMceMediaSdpCodec", - "DecodeSecureSessionL", - "FUNCTIONALITY", - SetupL, UT_CMceMediaSdpCodec_DecodeSecureSessionLL, Teardown) - + EUNIT_TEST ( "DecodeDirection test", "CMceMediaSdpCodec", - "DecodeDirectionL", + "DecodeDirectionAttribute", "FUNCTIONALITY", SetupL, UT_CMceMediaSdpCodec_DecodeDirectionLL, Teardown) diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmceserver/src/mcestateconfirming.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/src/mcestateconfirming.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateconfirming.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -242,11 +242,9 @@ NAT_WAIT_NO_EXEC( session, (status = session.Actions().CreateSDP( response ))); if ( !MCE_IS_ERROR( status ) && MCE_NEED_TO_SEND( session, NULL ) ) { - CMceSecureMediaSession* secSession = session.ActiveBody().SecureSession(); - if ( secSession ) + if ( session.ActiveBody().SecureSession() ) { - secSession->iLSReadyToBind = ETrue; - secSession->iKeyNeedUpdated = ETrue; + session.ActiveBody().SecureSession()->iLSReadyToBind = ETrue; } session.SetFirstOffer(); status = session.Actions().DecodeL(); diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -465,12 +465,10 @@ //update FC session.FCActions().PeekFCDocumentL( *session.Offer() ); - CMceSecureMediaSession* secSession = session.ActiveBody().SecureSession(); //decode answer, ignore warning code - if ( secSession ) + if ( session.ActiveBody().SecureSession()) { - secSession->iLSReadyToBind = ETrue; - secSession->iKeyNeedUpdated = ETrue; + session.ActiveBody().SecureSession()->iLSReadyToBind = ETrue; } status = session.Actions().Decode(); diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmceserver/src/mcestateupdating.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/src/mcestateupdating.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateupdating.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -135,6 +135,17 @@ session.Actions().StateChanged( KMceStateAcknowledgementRequired ); } + else + { + if ( session.ActiveBody().SecureSession() ) + { + if( session.IsNatSession() ) + { + session.ActiveBody().SecureSession()->iNatBind = ETrue; + } + session.ActiveBody().SecureSession()->iLSReadyToBind = ETrue; + } + } } else { diff -r 91f50911ea81 -r fb1bbf85a302 multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateOffering.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateOffering.cpp Tue May 25 13:07:26 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateOffering.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -374,7 +374,6 @@ EUNIT_ASSERT ( !iSipSession->WaitingMediaCallback() ); EUNIT_ASSERT ( body.iSipContactAddrSecure == CMceSession::EControlPathUnsecure ); EUNIT_ASSERT ( body.SecureSession()->iLSReadyToBind == ETrue ); - EUNIT_ASSERT ( body.SecureSession()->iKeyNeedUpdated == ETrue ); iSipSession->iSubState = CMceSipSession::EOffering; MCE_RESET_STUBS(); diff -r 91f50911ea81 -r fb1bbf85a302 natfw/natfwconnectionmultiplexer/src/cncmconnectionobserverhandler.cpp --- a/natfw/natfwconnectionmultiplexer/src/cncmconnectionobserverhandler.cpp Tue May 25 13:07:26 2010 +0300 +++ b/natfw/natfwconnectionmultiplexer/src/cncmconnectionobserverhandler.cpp Wed Jun 09 10:06:41 2010 +0300 @@ -260,20 +260,25 @@ const TInt KRtpRtcpDiffByteOffset( 1 ); const TInt KLowestAssignedRtcpMsgType = 200; const TInt KHighestAssignedRtcpMsgType = 209; + TInt rtcpType = aMessage[KRtpRtcpDiffByteOffset]; TBool isRtcp = - ( KLowestAssignedRtcpMsgType <= aMessage[KRtpRtcpDiffByteOffset] && - aMessage[KRtpRtcpDiffByteOffset] <= KHighestAssignedRtcpMsgType ); + ( KLowestAssignedRtcpMsgType <= rtcpType && + rtcpType <= KHighestAssignedRtcpMsgType ); - // This offset refers either to SR RTP timestamp or RR highest - // sequence number received. These are unique for a distinct - // RTCP packet. - const TInt KRtcpDiffByteOffset( 19 ); + // This offset refers to RR highest sequence number received. + const TInt KRRtcpDiffByteOffset( 19 ); + + // This offset refers either to SR RTP packet count received. + const TInt KSRtcpDiffByteOffset( 23 ); // This offset refers to lower byte of unique RTP sequence number. const TInt KRtpDiffByteOffset( 3 ); TInt diffByteOffset - = isRtcp ? KRtcpDiffByteOffset : KRtpDiffByteOffset; + = isRtcp ? KRRtcpDiffByteOffset : KRtpDiffByteOffset; + diffByteOffset = (rtcpType == KLowestAssignedRtcpMsgType)? + KSRtcpDiffByteOffset : diffByteOffset; + if ( diffByteOffset < aMessage.Size() ) { hash = aMessage[diffByteOffset]; @@ -294,14 +299,12 @@ } else { - isDuplicate = EFalse; - } - - iLatestHashes.Append( hash ); - const TInt KMaxHashCount( 5 ); - if ( KMaxHashCount <= iLatestHashes.Count() ) - { - iLatestHashes.Remove( 0 ); + iLatestHashes.Append( hash ); + const TInt KMaxHashCount( 5 ); + if ( KMaxHashCount <= iLatestHashes.Count() ) + { + iLatestHashes.Remove( 0 ); + } } } else