diff -r a297cbce4e85 -r bcc434605a01 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp Fri May 28 16:08:43 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp Fri Jun 11 11:20:25 2010 +0300 @@ -916,28 +916,43 @@ 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 = value.Match( KMatchIN ) - KPortOffsetFromIP; - TPtrC8 remoteRtcpPort = value.Left( port_offset ); - + HBufC8* dataRemoteRtcpPort = value.Left( port_offset ).AllocLC(); + TPtr8 remoteRtcpPort( dataRemoteRtcpPort->Des() ); + remoteRtcpPort.TrimAll(); TLex8 lexPT( remoteRtcpPort ); User::LeaveIfError( lexPT.Val( rtcpPort, EDecimal ) ); // copy the address into correct format TBuf16 input; - input.Copy( remoteRtcpAddr ); - + input.Copy( remoteRtcpAddrTxt ); + input.TrimAll(); 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 ); + } + CleanupStack::PopAndDestroy( dataRemoteRtcpPort ); } else { // only port present - TLex8 lexPT( value ); + HBufC8* dataRemoteRtcpPort = value.AllocLC(); + TPtr8 remoteRtcpPort( dataRemoteRtcpPort->Des() ); + remoteRtcpPort.TrimAll(); + TLex8 lexPT( remoteRtcpPort ); User::LeaveIfError ( lexPT.Val( rtcpPort, EDecimal ) ); + CleanupStack::PopAndDestroy( dataRemoteRtcpPort ); } aStream.SetRemoteRtcpMediaPort( rtcpPort ); @@ -1040,9 +1055,9 @@ else if ( secureSession && aRole == EMceRoleAnswerer && aUpdate ) { // for long session - if ( secureSession->iKeyNeedUpdated ) + if( secureSession->SdpCryptoAttributeCount( aMediaLine ) ) { - secureSession->DecodeSecureDesSdpUpdateL( aStream, aMediaLine ) ; + secureSession->DecodeSecureDesSdpUpdateL( aStream, aMediaLine ) ; } } else if ( secureSession && aRole == EMceRoleOfferer )