multimediacommscontroller/mmccmsrpsourcesink/src/mccmsrpsource.cpp
branchrcs
changeset 49 64c62431ac08
child 50 1d8943dd8be6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccmsrpsourcesink/src/mccmsrpsource.cpp	Mon Sep 06 17:32:13 2010 +0530
@@ -0,0 +1,373 @@
+/*
+* Copyright (c) 2004-2006 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:    Provides a comfort noise generator class
+*
+*/
+
+        
+// INCLUDE FILES
+#include "mccmsrpsource.h"
+#include "mmccinterfacedef.h"
+#include "mccmsrpsourcesinklogs.h"
+#include "mccinternalevents.h"
+#include "mccinternaldef.h"
+#include "rtpheader.h"
+#include "formatstatemachine.h"
+
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+void CMccMsrpSource::IncomingMessage( HBufC8* aMessageContent, TInt aStatus )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::IncomingMessage" )
+    __MSRPSOURCESINK_CONTROLL_INT1( "Status : %d    ----- ", aStatus)
+    
+	TRAP_IGNORE(PlayoutMsrpPacketL(aMessageContent));
+    }
+    
+void CMccMsrpSource::IncomingReport( TInt aStatus, TInt aRangeStart,
+                                           TInt aRangeEnd, TInt aTotal )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::IncomingReport" )
+    __MSRPSOURCESINK_CONTROLL("\nReport has been received!\n");
+    __MSRPSOURCESINK_CONTROLL_INT1("Status      :", aStatus);
+    __MSRPSOURCESINK_CONTROLL_INT1("Range start :", aRangeStart);
+    __MSRPSOURCESINK_CONTROLL_INT1("Range end   :", aRangeEnd);
+    __MSRPSOURCESINK_CONTROLL_INT1("Total       :", aTotal);
+    }
+    
+void CMccMsrpSource::SendResult( TInt aStatus, const TDesC8& aMessageid )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SendResult" )
+    __MSRPSOURCESINK_CONTROLL("\nResult of send... ");
+    __MSRPSOURCESINK_CONTROLL_INT1("Status :", aStatus);
+    
+    __MSRPSOURCESINK_CONTROLL_INT1("Message ID :", aMessageid);
+    }
+    
+void CMccMsrpSource::ListenPortFailure( TInt aStatus )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::ListenPortFailure" )
+    __MSRPSOURCESINK_CONTROLL("\nListen port failure. ");
+    __MSRPSOURCESINK_CONTROLL_INT1("Status :", aStatus);
+    //CActiveScheduler::Stop();
+    }
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::NewSourceL
+// -----------------------------------------------------------------------------
+//
+MDataSource* CMccMsrpSource::NewSourceL( TUid /*aImplementationUid*/, 
+                                         const TDesC8& /*aInitData*/ )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::NewSourceL" )
+    
+    CMccMsrpSource* self = new ( ELeave ) CMccMsrpSource();
+    return static_cast<MDataSource*>( self );
+    }
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::ConstructSourceL
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::ConstructSourceL( const TDesC8& /*aInitData*/ )
+    {    	
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::ConstructSourceL" )
+    }
+	    
+// -----------------------------------------------------------------------------
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CMccMsrpSource::CMccMsrpSource() : CMccDataSource( KMccMsrpSourceUid )
+    {
+    }
+        
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CMccMsrpSource::~CMccMsrpSource()
+    {   
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::~CMccMsrpSource" )
+    
+    iFillBufferRequester = NULL;
+
+    iBufferToBeFilled = NULL;
+    iConsumer = NULL;
+    }
+
+	
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::SourcePrimeL()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::SourcePrimeL()
+	{
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SourcePrimeL" )
+    
+    SendStreamEventToClient( KMccStreamPrepared );
+	}
+	    
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::PlayL()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::SourcePlayL()
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SourcePlayL" )
+    
+    if ( iPaused )
+        {
+        SendStreamEventToClient( KMccStreamResumed );
+        }
+    else
+        {
+    	SendStreamEventToClient( KMccStreamStarted );	
+        }
+		
+    iPaused = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::PauseL()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::SourcePauseL()
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SourcePauseL" )
+    
+    iPaused = ETrue;
+    
+    SendStreamEventToClient( KMccStreamPaused );
+	}
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::StopL()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::SourceStopL()
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SourceStopL" )
+    
+    SendStreamEventToClient( KMccStreamStopped );
+    }
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::SourceDataTypeCode()
+// -----------------------------------------------------------------------------
+//
+TFourCC CMccMsrpSource::SourceDataTypeCode( TMediaId /*aMediaId*/ )
+	{
+	__MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SourceDataTypeCode" )
+	
+	return iFourCC;
+	}
+	
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::SetSourceDataTypeCode()
+// -----------------------------------------------------------------------------
+//
+TInt CMccMsrpSource::SetSourceDataTypeCode( TFourCC aCodec, 
+                            TMediaId /*aMediaId*/ )
+	{
+	__MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SetSourceDataTypeCode" )
+	
+	iFourCC = aCodec;
+	return KErrNone;
+	}	
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::BufferEmptiedL()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::BufferEmptiedL( CMMFBuffer* /*aBuffer*/ )
+	{
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::BufferEmptiedL" )
+    
+   	User::Leave( KErrNotSupported );
+	}
+	
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::CanCreateSourceBuffer()
+// -----------------------------------------------------------------------------
+//
+TBool CMccMsrpSource::CanCreateSourceBuffer()
+	{
+	__MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::CanCreateSourceBuffer" )
+
+    return EFalse;
+	}	
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::CreateSourceBufferL()
+// -----------------------------------------------------------------------------
+//
+CMMFBuffer* CMccMsrpSource::CreateSourceBufferL( 
+	TMediaId /*aMediaId*/, 
+    TBool& /*aReference*/ )
+	{
+	__MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::CreateSourceBufferL" )
+
+   	User::Leave( KErrNotSupported );
+	
+	return NULL;	
+	}
+	
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::SourceThreadLogon()
+// -----------------------------------------------------------------------------
+//
+TInt CMccMsrpSource::SourceThreadLogon( MAsyncEventHandler& aEventHandler )
+	{
+	__MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SourceThreadLogon" )
+	
+	iAsyncEventHandler = &aEventHandler;
+	
+    return KErrNone;
+	}
+	
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::SourceThreadLogoff()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::SourceThreadLogoff()
+	{
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SourceThreadLogoff" )
+    
+    iAsyncEventHandler = NULL;
+	}
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::FillBufferL()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::FillBufferL( 
+	CMMFBuffer* aBuffer,
+    MDataSink* aConsumer,
+    TMediaId /*aMediaId*/ )
+	{
+	__MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::FillBufferL" )
+	iBufferToBeFilled = static_cast<CMMFDataBuffer*>( aBuffer );
+	iConsumer = aConsumer;
+	}	
+                  
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::NegotiateSourceL()
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::NegotiateSourceL( MDataSink& aDataSink )
+	{
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::NegotiateSourceL" )
+	iFillBufferRequester = &aDataSink;
+	}
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::SendStreamEventToClient
+// -----------------------------------------------------------------------------
+//	
+void CMccMsrpSource::SendStreamEventToClient( 
+    TMccEventType aEventType, 
+    TInt aError )
+	{
+	__MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::SendStreamEventToClient" )
+	
+	if ( iAsyncEventHandler )
+	    {
+        TMccEvent event( 0, 
+                         0, 
+                         0, 
+                         MCC_ENDPOINT_ID( static_cast<MDataSource*>( this ) ), 
+                         KMccEventCategoryStream, 
+                         aEventType, 
+                         aError, 
+                         KNullDesC8 );
+                     
+        TMccInternalEvent internalEvent( KMccMsrpSourceUid, 
+		                                 EMccInternalEventNone,
+		                                 event );
+		                         
+		iAsyncEventHandler->SendEventToClient( internalEvent );
+	    }
+	}
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSource::DataReceivedL
+// -----------------------------------------------------------------------------
+//	
+void CMccMsrpSource::DataReceivedL( const TDesC8& aData )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSource::DataReceivedL" )
+    if ( iBufferToBeFilled && iConsumer )
+        {
+        CMMFDataBuffer* buffer = static_cast<CMMFDataBuffer*>(iBufferToBeFilled);
+
+        if (buffer->Data().MaxLength() >= aData.Length())
+            {            
+            buffer->Data().Copy( aData );
+            iConsumer->BufferFilledL( iBufferToBeFilled );
+        	iBufferToBeFilled = 0;
+        	iConsumer = 0;
+      		}      		
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMccMsrpSink::BufferFilledL
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::SetSessionParamsL( const TMccMsrpSessionParams& aParams )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSink::SetSessionParamsL IN" )
+    
+    User::LeaveIfNull( aParams.iMsrp );
+    User::LeaveIfNull( aParams.iMsrpSession );
+    
+    iMsrp = aParams.iMsrp;
+    iMsrpSession = aParams.iMsrpSession;
+//    iMsrpObserver = aParams.iMsrpObserver;
+    
+//    iMsrpObserver->RegisterDataObserver(*this);  
+    
+    __MSRPSOURCESINK_CONTROLL( "CMccMsrpSink::SetSessionParamsL OUT" )
+    }
+
+// End of file
+
+// -----------------------------------------------------------------------------
+// CMccRtpDataSource::PlayoutRtpPacketL
+// Pass filled buffer to the data sink of RTP data source.
+// -----------------------------------------------------------------------------
+//
+void CMccMsrpSource::PlayoutMsrpPacketL( HBufC8* aMessageContent )
+    {
+    __MSRPSOURCESINK_CONTROLL( "CMccRtpDataSource::PlayoutRtpPacketL" )
+    __ASSERT_ALWAYS( iBufferToBeFilled, User::Leave( KErrNotReady ) );
+    __ASSERT_ALWAYS( iFillBufferRequester, User::Leave( KErrNotReady ) );
+    
+    iBufferToBeFilled->Data().Copy( *aMessageContent );
+    
+    CPayloadFormatRead* sink = static_cast<CPayloadFormatRead*>( iFillBufferRequester );
+    User::LeaveIfNull( sink );
+    
+    TRtpRecvHeader aHeaderInfo;
+    sink->DataBufferFilledL( iBufferToBeFilled, aHeaderInfo );
+    
+    delete aMessageContent;
+    }