multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesrvstream.cpp
branchrcs
changeset 49 64c62431ac08
parent 21 b7fa3d2db8f4
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesrvstream.cpp	Mon Aug 23 17:50:26 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesrvstream.cpp	Mon Sep 06 17:32:13 2010 +0530
@@ -37,6 +37,7 @@
 #include "mcedisplaysink.h"
 #include "mcecamerasource.h"
 
+#include <mcemessagestream.h>
 #include "mceaudiostream.h"
 #include "mcevideostream.h"
 #include "mcesrvstreamiterator.h"
@@ -44,6 +45,10 @@
 #include "mcedtmfcodec.h"
 #include "mcemmlogs.h"
 #include "mcedtmfhandler.h"
+#include "mcecommessagestream.h"
+#include "mcecommessagecodec.h"
+#include "mceexternalsource.h"
+#include "mceexternalsink.h"
 
 #define MCE_MCC_STREAM_STATE_CHANGE_EVENT( event )\
 ( aEvent.iEvent == KMccStreamPrepared || \
@@ -82,6 +87,13 @@
             DecodeVideoL( aStreams, video, aManager );
             break;
             }
+        case KMceMessage:
+            {
+            CMceComMessageStream& message =
+                reinterpret_cast<CMceComMessageStream&>(aStream);
+            DecodeMessageL(aStreams, message, aManager); 
+            break;
+            }
         default:
             {
             User::Leave( KErrNotSupported );
@@ -94,6 +106,49 @@
 
 
 // -----------------------------------------------------------------------------
+// CMceSrvStream::DecodeMessageL
+// -----------------------------------------------------------------------------
+
+void CMceSrvStream::DecodeMessageL( RPointerArray<CMceSrvStream>& aStreams,
+                                  CMceComMessageStream& aMessage,
+                                  CMceMediaManager& aManager )
+    {
+    MCEMM_DEBUG("CMceSrvStream::DecodeMessageL(), Entry ");
+    
+//Data path for Message stream is handled
+    if(aMessage.Source()->Type() != KMceExternalSource )
+        {
+        for( TInt codecNdx = 0;codecNdx < aMessage.CodecCount();codecNdx++ )
+            {
+            aMessage.CodecL( codecNdx )->SetEnabled( codecNdx == 0 || IS_RECEIVESTREAM( &aMessage ) );
+                
+            for( TInt sinkNdx = 0 ; sinkNdx < aMessage.Sinks().Count() ; sinkNdx++ )
+                {
+                if(aMessage.Sinks()[ sinkNdx ]->Type() == KMceExternalSink)
+                    {
+                    return;
+                    }
+                CMceSrvStream* srvStream = NewL( aManager, aMessage, 
+                                                 *aMessage.Source(),
+                                                 *aMessage.Sinks()[ sinkNdx ],
+                                                 *aMessage.CodecL( codecNdx ) );
+                    CleanupStack::PushL( srvStream );
+                    MCEMM_DEBUG_STREAM( "CMceSrvStream::DecodeMessageL(): decoded message", *srvStream );
+                    aStreams.AppendL( srvStream );
+                    CleanupStack::Pop( srvStream );
+                }
+            }
+        if ( aMessage.BoundStream() && aMessage.Binder() )
+            {
+            DecodeL( aStreams, aMessage.BoundStreamL(), aManager );
+            }
+        }
+
+    MCEMM_DEBUG("CMceSrvStream::DecodeMessageL(), Exit ");
+    }
+
+
+// -----------------------------------------------------------------------------
 // CMceSrvStream::DecodeAudioL
 // -----------------------------------------------------------------------------
 //
@@ -686,6 +741,33 @@
     {
     Data()().SetLinkId( aLinkId );
     }
+
+// -----------------------------------------------------------------------------
+// CMceSrvStream::RemMsrpPath
+// -----------------------------------------------------------------------------
+//
+TDes8 & CMceSrvStream::RemMsrpPath() const
+    {
+    return Data().iRemoteMsrpPath;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvStream::RemMsrpPath
+// -----------------------------------------------------------------------------
+//
+TDes8 & CMceSrvStream::ConnStatus() const
+    {
+    return Data().iConnStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvStream::SetLinkId
+// -----------------------------------------------------------------------------
+//
+void CMceSrvStream::SetMsrpPath( TDesC8& aLocalMsrpPath )
+    {
+    Data()().SetLocalMsrpPath(aLocalMsrpPath);
+    }
     
     
 // -----------------------------------------------------------------------------
@@ -898,17 +980,20 @@
         MCEMM_DEBUG("CMceSrvStream::RequireSignalling(): codec requires signalling");
         action = KMceRequiresSignalling;
         }
-    else if ( LocalMediaPort() != aCurrent.LocalMediaPort() )
+    
+    else if ( Codec().MccRequireSignalling( *this, aCurrent, aMccCurentCodec, aMccUpdateCodec ) )
+        {
+        MCEMM_DEBUG("CMceSrvStream::RequireSignalling(): codec requires signalling");
+        action = KMceRequiresSignalling;
+        }
+    
+    else if ( LocalMediaPort() != aCurrent.LocalMediaPort() ||
+              Data().RemoteMediaPortChanged( aCurrent.Data().RemoteMediaPort() ) )
     //local port has changed => needs new media session & signaling
         {
         MCEMM_DEBUG("CMceSrvStream::RequireSignalling(): local port changed. requires signalling");
         action = KMceRequiresSignalling;
         }
-    else if ( Data().RemoteMediaPortChanged( aCurrent.Data().RemoteMediaPort() ) )
-    	{
-    	MCEMM_DEBUG("CMceSrvStream::RequireSignalling(): Remote port changed. requires signalling");
-    	action = KMceRequiresSipSignallingOnly;
-    	}
         
     else if ( Data().RemoteRTCPAddressChanged(aCurrent.Data().iRemoteRtcpPort, 
     		 	aCurrent.Data().iRemoteRtcpAddress))