multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp
changeset 26 bcc434605a01
parent 21 b7fa3d2db8f4
child 49 64c62431ac08
--- 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 <KMaxAddressLength> 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 )