multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesrvendpoint.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesrvendpoint.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 2005 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:    
+*
+*/
+
+
+
+
+#include "mcesrvendpoint.h"
+#include "mcecommediastream.h"
+#include "mcecomsession.h"
+#include "mcecomendpointproxy.h"
+#include "mcesrvstreamiterator.h"
+
+#include "mcemediaobserver.h"
+#include "mceevents.h"
+#include "mcemmlogs.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+    
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::CMceSrvEndpoint
+// -----------------------------------------------------------------------------
+//
+CMceSrvEndpoint::CMceSrvEndpoint( CMceMediaManager& aManager,
+                                  CMceComEndpoint& aData )
+    : iID( KMceNotAssigned ),
+      iState( CMceSrvStream::ECreated ),
+      iManager( &aManager ),
+      iData( &aData )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::Merge
+// -----------------------------------------------------------------------------
+//
+void CMceSrvEndpoint::Merge( CMceSrvEndpoint& aMergeWith )
+    {
+    iID = aMergeWith.iID;
+    iState = aMergeWith.iState;
+    }
+                   
+    
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::~CMceSrvEndpoint
+// -----------------------------------------------------------------------------
+//
+CMceSrvEndpoint::~CMceSrvEndpoint()
+    {
+    //NOP
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::Id
+// -----------------------------------------------------------------------------
+//
+TUint32& CMceSrvEndpoint::Id()
+    {
+    return iID;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::SetState
+// -----------------------------------------------------------------------------
+//
+void CMceSrvEndpoint::SetState( CMceSrvStream::TState aState )
+    {
+    iState = aState;
+    }
+    
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::State
+// -----------------------------------------------------------------------------
+//
+CMceSrvStream::TState CMceSrvEndpoint::State() const
+    {
+    return iState;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::Data
+// -----------------------------------------------------------------------------
+//
+CMceComEndpoint& CMceSrvEndpoint::Data() const
+    {
+    return *iData;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::MccPrepareCalledL
+// -----------------------------------------------------------------------------
+//
+void CMceSrvEndpoint::MccPrepareCalledL( CMceSrvStream& /*aStream*/ )
+    {
+    //NOP
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::EnableL
+// -----------------------------------------------------------------------------
+//
+
+TBool CMceSrvEndpoint::EnableL( CMceSrvStream& aStream, TBool aSync )
+    {
+    if ( aStream.IsMccPrepared() && !Data().EndpointProxy() )
+        {
+        return KMceSrvStreamDefaultSequence;
+        }
+
+    MCEMM_DEBUG("CMceSrvEndpoint::EnableL(): alternative enable");
+    
+    TBool sequenceType = aStream.IsMccPrepared() ? 
+            KMceSrvStreamDefaultSequence : 
+            KMceSrvStreamAlternativeSequence;
+    
+    if ( State() >= CMceSrvStream::EStarted && 
+         ( aSync || !Data().IsEnabled() ) )
+        {
+        MCEMM_DEBUG("CMceSrvEndpoint::EnableL(): enabling");
+        
+        if ( Data().EndpointProxy() )
+            {
+            sequenceType = 
+                Data().EndpointProxy()->ClientEnableL( Data(), aStream.Codec() );
+            }
+            
+        if ( !aStream.IsMccPrepared() )
+            {     
+            Data().EnableL( aStream.Codec() );
+            sequenceType = KMceSrvStreamAlternativeSequence;
+            }
+        }
+    
+    if ( sequenceType )
+        {
+        Data().Enabled( ETrue );
+        if ( State() >= CMceSrvStream::EStarted )
+            {
+            SetState( CMceSrvStream::EStarted ); 
+            }
+        
+        MCEMM_DEBUG_STREAM( "CMceSrvEndpoint::EnableL(): stream of endpoint after enable", 
+                            aStream );
+        }
+    
+    return sequenceType;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::DisableL
+// -----------------------------------------------------------------------------
+//
+
+TBool CMceSrvEndpoint::DisableL( CMceSrvStream& aStream, TBool aSync, TBool aForce )
+    {
+    if ( aStream.IsMccPrepared() && !Data().EndpointProxy() )
+        {
+        return KMceSrvStreamDefaultSequence;
+        }
+        
+    MCEMM_DEBUG("CMceSrvEndpoint::DisableL(): alternative disable");
+        
+    TBool sequenceType = aStream.IsMccPrepared() ? 
+            KMceSrvStreamDefaultSequence : 
+            KMceSrvStreamAlternativeSequence;
+            
+    if ( ( State() >= CMceSrvStream::EStarted || aForce ) && 
+         ( aSync || Data().IsEnabled() ) )
+        {
+        MCEMM_DEBUG("CMceSrvEndpoint::DisableL(): disabling");
+        
+        if ( Data().EndpointProxy() )
+            {
+            sequenceType = Data().EndpointProxy()->ClientDisableL( Data() );
+            }
+       
+        if ( !aStream.IsMccPrepared() )
+            {  
+            TRAPD( err, Data().DisableL() )
+            if ( !aForce )
+                {
+                // When forcing disable, error is ignored
+                User::LeaveIfError( err );
+                }
+                
+            sequenceType = KMceSrvStreamAlternativeSequence;
+            }
+        }
+    
+    if ( sequenceType )
+        {
+        Data().Enabled( EFalse );
+        if ( State() >= CMceSrvStream::EStarted )
+            {
+            SetState( CMceSrvStream::EPaused ); 
+            }
+        MCEMM_DEBUG_STREAM( "CMceSrvEndpoint::DisableL(): stream of endpoint after disable", 
+                            aStream );
+        } 
+   
+    return sequenceType;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::Reusable
+// -----------------------------------------------------------------------------
+//
+TBool CMceSrvEndpoint::Reusable( const CMceSrvStream& aStream ) const
+    {
+    return Data().Reusable( aStream.Data() );
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::EventReceived
+// -----------------------------------------------------------------------------
+//
+void CMceSrvEndpoint::EventReceived( TMceMccComEvent& aEvent )
+    {
+    switch( aEvent.iEvent )
+        {
+        case KMccLinkCreated:
+            {
+            SetState( CMceSrvStream::ELinkCreated );
+            break;
+            }
+        case KMccStreamPrepared:
+            {
+            SetState( CMceSrvStream::EPrepared ); 
+            break;
+            }
+        case KMccStreamStarted:
+            {
+            SetState( CMceSrvStream::EStarted ); 
+            break;
+            }
+        case KMccStreamStopped:
+            {
+            SetState( CMceSrvStream::EStopped ); 
+            break;
+            }
+        case KMccStreamPaused:
+            {
+            SetState( CMceSrvStream::EPaused ); 
+            break;
+            }
+        case KMccStreamResumed:
+            {
+            SetState( CMceSrvStream::EStarted ); 
+            break;
+            }
+        case KMccMasterKeyStaled:
+        	{
+        	TRAPD ( err, HandleSecureEventReceivedL ());
+        	//ignore err 
+        	err = err != KErrNone ? KErrNone : err;
+        	break;
+        	}
+        default:
+            {
+            //NOP
+            break;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::Type
+// -----------------------------------------------------------------------------
+//
+const TUid CMceSrvEndpoint::Type() const
+    {
+    return iData->MccType();
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::StreamStateChangeEventReceived
+// -----------------------------------------------------------------------------
+//
+TBool CMceSrvEndpoint::StreamStateChangeEventReceived( TMceMccComEvent& aEvent )
+    {
+    TBool allowEvent( ETrue );
+
+    switch ( aEvent.iEvent )
+        {
+        case KMccStreamStarted:
+        case KMccStreamResumed:
+            {
+            TMceSrvStreamIterator streams( Data().MediaStream()->Session()->MccStreams(), 
+                                           Data() );
+            CMceSrvStream* stream = NULL;
+            while ( streams.Next( stream ) && allowEvent )
+                {
+                if ( stream->Codec().iIsEnabled &&
+                     Endpoint( *stream ).State() > CMceSrvStream::EPrepared &&
+                     Endpoint( *stream ).State() != CMceSrvStream::EStarted )
+                    {
+                    allowEvent = EFalse;
+                    }
+                }
+            break;
+            }
+        case KMccStreamPaused:
+            {
+            TMceSrvStreamIterator streams( Data().MediaStream()->Session()->MccStreams(), 
+                                           Data() );
+            CMceSrvStream* stream = NULL;
+            while ( streams.Next( stream ) && allowEvent )
+                {
+                if ( stream->Codec().iIsEnabled &&
+                     Endpoint( *stream ).State() > CMceSrvStream::EPrepared &&
+                     Endpoint( *stream ).State() != CMceSrvStream::EPaused )
+                    {
+                    allowEvent = EFalse;
+                    }
+                }
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    return allowEvent;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceSrvEndpoint::EndpointMatch
+// -----------------------------------------------------------------------------
+//
+TBool CMceSrvEndpoint::EndpointMatch( 
+    const CMceComEndpoint& aEndpoint, 
+    TBool aUseProxyMatch )
+    {
+    TBool match( EFalse );
+    if ( !aUseProxyMatch )
+        {
+        match = aEndpoint == *iData;
+        }
+    else
+        {
+        match = aEndpoint == *iData ||
+                ( aEndpoint.EndpointProxy() && 
+                  aEndpoint.EndpointProxy()->ServesProxyClient( *iData ) );
+
+        }
+    return match;
+    }
+    
+// End of file
+