sipvoipprovider/svphold/src/svpholdmediahandler.cpp
branchRCL_3
changeset 27 f742655b05bf
parent 26 65a3ef1d5bd0
child 28 d38647835c2e
--- a/sipvoipprovider/svphold/src/svpholdmediahandler.cpp	Thu Aug 19 09:45:22 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,491 +0,0 @@
-/*
-* Copyright (c) 2006-2008 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:  Pauses and resumes audio stream.
-*
-*/
-
-#include    <e32cmn.h>
-
-#include    <mcesession.h>
-#include    <mcemediastream.h>
-#include    <mceaudiostream.h>
-#include    <mcemediasource.h>
-#include    <mcemicsource.h>
-#include    <mcemediasink.h>
-#include    <mcespeakersink.h>
-#include    <mcertpsource.h>
-#include    <mcertpsink.h>
-
-#include    "svpholdcontext.h"
-#include    "svpholdmediahandler.h"
-#include    "svplogger.h"
-#include    "svpaudioutility.h"
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::CSVPHoldMediaHandler
-// ---------------------------------------------------------------------------
-//
-CSVPHoldMediaHandler::CSVPHoldMediaHandler()
-    {
-    }
-
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::NewL
-// ---------------------------------------------------------------------------
-//
-CSVPHoldMediaHandler* CSVPHoldMediaHandler::NewL()
-    {
-    CSVPHoldMediaHandler* self = new ( ELeave ) CSVPHoldMediaHandler;
-    return self;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::~CSVPHoldMediaHandler
-// ---------------------------------------------------------------------------
-//
-CSVPHoldMediaHandler::~CSVPHoldMediaHandler()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::PerformMediaActionL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::PerformMediaActionL( CMceMediaStream& aMediaStream,
-                                                TSVPHoldRequestType aRequest )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::PerformMediaActionL - IN" );
-
-    CMceMediaStream& boundStream = aMediaStream.BoundStreamL();
-    
-    // Always set the priorites because MCE/MCC must have those correctly
-    // all the time. This is due to the fact that we may do session update
-    // later and then the priority settings need to be correct.
-    SVPAudioUtility::SetAudioStreamPrioritiesL( aMediaStream, boundStream );
-    
-    switch ( aRequest )
-        {
-        case ESVPLocalHold:
-        case ESVPLocalDoubleHold:
-            {            
-            HandleLocalHoldingL( aMediaStream, boundStream );
-            break;
-            }
-            
-        case ESVPLocalResume:
-        case ESVPLocalDoubleHoldResume:
-            {
-            HandleLocalResumingL( aMediaStream, boundStream, aRequest );
-            break;
-            }
-                        
-        case ESVPRemoteHold:
-        case ESVPRemoteDoubleHold:
-            {
-            HandleRemoteHoldingL( aMediaStream, boundStream, aRequest );
-            break;
-            }
-        
-        case ESVPRemoteResume:
-        case ESVPRemoteDoubleHoldResume:
-            {
-            HandleRemoteResumingL( aMediaStream, boundStream, aRequest );
-            break;
-            }
-
-        default:
-            {
-            SVPDEBUG1( "CSVPHoldMediaHandler::PerformMediaActionL: Leave" );
-            User::Leave( KErrNotFound );            
-            }
-        }
-    SVPDEBUG1( "CSVPHoldMediaHandler::PerformMediaActionL - Out" );
-    }
-    
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::HandleLocalHoldingL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::
-HandleLocalHoldingL( CMceMediaStream& aMediaStream,
-                     CMceMediaStream& aBoundStream )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleLocalHoldingL - In" );
-    
-    // In case of local hold RTP source must be disabled
-    if ( aMediaStream.Source() &&
-         KMceRTPSource == aMediaStream.Source()->Type() )
-        {
-        aMediaStream.DisableL();
-        }
-    else if ( aBoundStream.Source() &&
-              KMceRTPSource == aBoundStream.Source()->Type() )
-        {
-        aBoundStream.DisableL();
-        }
-    else
-        {
-        SVPDEBUG1( "CSVPHoldMediaHandler::HandleLocalHoldingL:" );
-        SVPDEBUG1( "Local hold: No stream - User::Leave" );
-        User::Leave( KErrNotFound );
-        }
-    
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleLocalHoldingL - Out" );
-    }
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::HandleLocalResumingL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::
-HandleLocalResumingL( CMceMediaStream& aMediaStream,
-                      CMceMediaStream& aBoundStream,
-                      TSVPHoldRequestType aRequest )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleLocalResumingL - In" );
-    
-    switch ( aRequest )
-        {
-        case ESVPLocalResume:
-            {
-            // In case of local resume disabled stream must be enabled              
-            SVPDEBUG1( "CSVPHoldMediaHandler::HandleLocalResumingL - LocalResume" );
-            if ( !aBoundStream.IsEnabled() )
-                {
-                aBoundStream.EnableL();
-                }
-                
-            if ( !aMediaStream.IsEnabled() )
-                {
-                aMediaStream.EnableL();
-                }
-            
-            break;
-            }
-            
-        case ESVPLocalDoubleHoldResume:
-            {
-            // In case of localDH resume RTP source must be enabled
-            if ( KMceRTPSource == aMediaStream.Source()->Type() )
-                {
-                aMediaStream.EnableL();
-                }
-                
-            else if ( KMceRTPSource == aBoundStream.Source()->Type() )
-                {
-                aBoundStream.EnableL();
-                }
-                
-            else
-                {
-                SVPDEBUG1( "CSVPHoldMediaHandler::HandleLocalResumingL:" );
-                SVPDEBUG1( "Local DH resume: No stream - User::Leave" );
-                User::Leave( KErrNotFound );
-                }            
-
-            break;
-            }
-            
-        default:
-            {
-            User::Leave( KErrNotFound );
-            }
-        }
-    
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleLocalResumingL - Out" );
-    }
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::HandleRemoteHoldingL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::
-HandleRemoteHoldingL( CMceMediaStream& aMediaStream,
-                      CMceMediaStream& aBoundStream,
-                      TSVPHoldRequestType aRequest )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteHoldingL - In" );
-    
-    // In case of remote hold RTP sink must be disabled    
-    if ( KMceRTPSource == aMediaStream.Source()->Type() )
-        {
-        aBoundStream.DisableL();
-        if ( ESVPRemoteDoubleHold == aRequest )
-            {
-            aMediaStream.DisableL();
-            }
-        }
-        
-    else if ( KMceRTPSource == aBoundStream.Source()->Type() )
-        {
-        aMediaStream.DisableL();
-        if ( ESVPRemoteDoubleHold == aRequest )
-            {
-            aBoundStream.DisableL();
-            }
-        }
-        
-    else
-        {
-        SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteHoldingL:" );
-        SVPDEBUG1( "Remote hold: No stream - User::Leave" );
-        User::Leave( KErrNotFound );
-        }    
-
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteHoldingL - Out" );
-    }
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::HandleRemoteResumingL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::
-HandleRemoteResumingL( CMceMediaStream& aMediaStream,
-                       CMceMediaStream& aBoundStream,
-                       TSVPHoldRequestType aRequest )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteResumingL - In" )
-    
-    switch ( aRequest )
-        {
-        case ESVPRemoteResume:
-            {
-            SVPDEBUG2( "CSVPHoldMediaHandler::HandleRemoteResumingL aBound ena: %d",
-                aBoundStream.IsEnabled() )
-            
-            SVPDEBUG2( "CSVPHoldMediaHandler::HandleRemoteResumingL aMedia ena: %d",
-                aMediaStream.IsEnabled() )
-            
-            // In case of remote resume disabled stream(s) must be enabled
-            if ( !aBoundStream.IsEnabled() )
-                {
-                SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteResumingL RR 1st ena/dis" )
-                
-                aBoundStream.EnableL();
-                aMediaStream.DisableL();
-                }
-                
-            if ( !aMediaStream.IsEnabled() )
-                {
-                SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteResumingL RR 2nd ena/dis" )
-                
-                aMediaStream.EnableL();
-                aBoundStream.DisableL();
-                }
-            
-            break;
-            }
-            
-        case ESVPRemoteDoubleHoldResume:
-            {
-            // In case of remoteDH resume RTP sink must be enabled                    
-            if ( KMceRTPSource == aMediaStream.Source()->Type() )
-                {
-                aBoundStream.EnableL();
-                aMediaStream.DisableL();
-                }
-            
-            else if ( KMceRTPSource == aBoundStream.Source()->Type() )
-                {
-                aMediaStream.EnableL();
-                aBoundStream.DisableL();
-                }
-            
-            else
-                {
-                SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteResumingL:" );
-                SVPDEBUG1( "Remote DH resume: No stream - User::Leave" );
-                User::Leave( KErrNotFound );
-                }
-            
-            break;
-            }
-            
-        default:
-            {
-            User::Leave( KErrNotFound );
-            }
-        }
-    
-    SVPDEBUG1( "CSVPHoldMediaHandler::HandleRemoteResumingL - Out" )
-    }
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::DisableAudioL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::DisableAudioL( CSVPHoldContext& aContext,
-                                          TBool aLeaveSpeakerEnabled )
-    {
-    if ( aContext.AudioHandlingAllowed() )
-        {
-        // Disable speaker & microphone
-        SVPDEBUG1( "CSVPHoldMediaHandler::DisableAudioL - Disabling audio..." );
-        CMceSession* session = aContext.SessionObject();
-        const RPointerArray< CMceMediaStream >& streams = session->Streams();
-        TInt streamCount = streams.Count();
-        for ( TInt i = 0; i < streamCount; i++ )
-            {
-            CMceMediaStream* mediaStream = streams[ i ];
-            TMceMediaType mediaType = mediaStream->Type();
-            if ( KMceAudio == mediaType )
-                {
-                TSVPHoldRequestType request = aContext.HoldRequest();
-                
-                CMceMediaStream& boundStream = mediaStream->BoundStreamL();
-                DisableAudioStreamL( boundStream, aLeaveSpeakerEnabled );
-                DisableAudioStreamL( *mediaStream, aLeaveSpeakerEnabled );
-                SVPDEBUG1( "CSVPHoldMediaHandler::DisableAudioL - Audio disabled" );
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::DisableAudioStreamL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::DisableAudioStreamL( CMceMediaStream& aAudioStream,
-                                                TBool aLeaveSpeakerEnabled )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::DisableAudioL - In" );
-    
-    SVPAudioUtility::DisableMicSourceL( aAudioStream );
-    if ( !aLeaveSpeakerEnabled )
-        {
-        SVPAudioUtility::DisableSpeakerSinkL( aAudioStream.Sinks() );
-        }
-    
-    SVPDEBUG1( "CSVPHoldMediaHandler::DisableAudioL - Out" );
-    }
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::EnableAudioL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::EnableAudioL( CSVPHoldContext& aContext )
-    {
-    if ( aContext.AudioHandlingAllowed() )
-        {
-        // Enable speaker & microphone
-        SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioL - Enabling audio..." );
-        
-        const RPointerArray< CMceMediaStream >& streams =
-            aContext.SessionObject()->Streams();
-        const TInt streamCount = streams.Count();
-        for ( TInt i = 0; i < streamCount; i++ )
-            {
-            CMceMediaStream* mediaStream = streams[ i ];
-            if ( KMceAudio == mediaStream->Type() )
-                {
-                EnableAudioL( *mediaStream, aContext );
-                }
-            }
-        }
-    }
-
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::EnableAudioL (private)
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::EnableAudioL( CMceMediaStream& aMediaStream,
-                                         CSVPHoldContext& aContext )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioL - Audio enabled In" );
-
-    TBool muted = aContext.Muted();
-    TBool mobileOriginated = aContext.IsMobileOriginated();
-
-    // Now enable the audio streams.
-    if ( !muted )
-        {
-        // Normal case, audio not muted
-        SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioL - no mute" );
-        EnableAudioStreamL( aMediaStream.BoundStreamL() );
-        EnableAudioStreamL( aMediaStream );
-        }
-        
-    else
-        {
-        // Enabling depends on the direction of muted stream
-        if ( mobileOriginated || aContext.IsRemoteRequest() )
-            {
-            SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioL - Bound" );
-            EnableAudioStreamL( aMediaStream.BoundStreamL(), EFalse );
-            EnableAudioStreamL( aMediaStream, EFalse );
-            // Make sure that mic is disabled
-            SVPAudioUtility::DisableMicSourceL( *( aMediaStream.Source() ) );
-            SVPAudioUtility::DisableMicSourceL( *( aMediaStream.BoundStreamL().
-                                                                  Source() ) );
-            }
-        else
-            {
-            SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioL - Main" );
-            EnableAudioStreamL( aMediaStream, EFalse );
-            EnableAudioStreamL( aMediaStream.BoundStreamL(), EFalse );
-            // Make sure that mic is disabled
-            SVPAudioUtility::DisableMicSourceL( aMediaStream );
-            SVPAudioUtility::DisableMicSourceL( aMediaStream.BoundStreamL() );
-            }
-        }
-
-    SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioL - Audio enabled Out" );    
-    }
-
-
-// ---------------------------------------------------------------------------
-// CSVPHoldMediaHandler::EnableAudioStreamL
-// ---------------------------------------------------------------------------
-//
-void CSVPHoldMediaHandler::EnableAudioStreamL( CMceMediaStream& aAudioStream,
-                                               TBool aAllowMicEnable )
-    {
-    SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioStreamL - In" );
-    
-
-    const RPointerArray< CMceMediaSink >& sinks = aAudioStream.Sinks();
-    TInt snkCount( sinks.Count() );
-
-    // Go throug every sink that is associated to that stream
-    for ( TInt i = 0; i < snkCount; i++ )
-        {
-        SVPDEBUG2( "CSVPHoldMediaHandler::EnableAudioStreamL -  Check sink # %d", i );
-        if ( !sinks[ i ]->IsEnabled() )
-            {
-            SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioStreamL - disabled" )
-            sinks[ i ]->EnableL();            
-            SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioStreamL - ENABLED" )
-            }
-        }
-
-    if ( aAudioStream.Source() &&
-         ( KMceMicSource == aAudioStream.Source()->Type() ||
-           KMceRTPSource == aAudioStream.Source()->Type() ) )
-        {
-        CMceMediaSource* source = aAudioStream.Source();
-        if ( !source->IsEnabled() && aAllowMicEnable )
-            {
-            // Enable source
-            source->EnableL();
-            SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioStreamL - Source" );
-            }
-        }
-    
-    SVPDEBUG1( "CSVPHoldMediaHandler::EnableAudioStreamL - Out" );
-    }
-
-