diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesrvendpoint.cpp --- /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 +