convergedcallengine/cce/src/ccceextension.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007 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:  Handles Extension interfaces
*
*/


//  INCLUDE FILES
#include "cccepluginmanager.h"
#include "ccceextension.h"
#include "cccelogger.h"


#include "mcceextensionobserver.h"
#include "mccpextensionprovider.h"

#include "cconvergedcallprovider.h"


// ======== MEMBER FUNCTIONS ========
// -----------------------------------------------------------------------------
// NewL()
// -----------------------------------------------------------------------------
//
CCCEExtension* CCCEExtension::NewL( CCCEPluginManager& aPluginManager )
    {
    CCCEExtension* self = new (ELeave) CCCEExtension( aPluginManager );
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CCCEDtmf()
// -----------------------------------------------------------------------------
//
CCCEExtension::CCCEExtension( CCCEPluginManager& aPluginManager ):
    iPluginManager( aPluginManager )
    {

    }

// -----------------------------------------------------------------------------
// ConstructL()
// -----------------------------------------------------------------------------
//
void CCCEExtension::ConstructL()
    {

    }

// -----------------------------------------------------------------------------
// ~CCCEExtension()
// -----------------------------------------------------------------------------
//
CCCEExtension::~CCCEExtension()
    {
    }

// -----------------------------------------------------------------------------
// AddObserverL( MCCEDtmfObserver& aObserver )
// -----------------------------------------------------------------------------
//
void CCCEExtension::AddObserverL( const MCCEExtensionObserver& aObserver )
    {
    // add support for more than one observer later on. Only one is used at the moment. Last one 
    // given is used.
    iMCCEExtensionObserver = const_cast<MCCEExtensionObserver*>(&aObserver);
    }

// -----------------------------------------------------------------------------
// RemoveObserver( MCCEDtmfObserver& aObserver )
// -----------------------------------------------------------------------------
//
TInt CCCEExtension::RemoveObserver( const MCCEExtensionObserver& /*aObserver*/ )
    {
    // add support for more than one observer later on. Only one is used at the moment. Last one 
    // given is used.

    if( !iMCCEExtensionObserver )
    	{
    	return KErrNotFound;
    	}
    	
	iMCCEExtensionObserver = NULL;
    return KErrNone;
    }

// -----------------------------------------------------------------------------
// RequestCommand()
// -----------------------------------------------------------------------------
//
TInt CCCEExtension::RequestCommand( TUint32 aServiceId,
									TInt aRequestId, 
									TDesC8& aData )
    {
    CCELOGSTRING3("CCCEExtension::RequestCommand(): Service id=%d Request id=%d", aServiceId, aRequestId );

	CConvergedCallProvider* plugin = GetExtIfPlugin(aServiceId);

	if( !plugin )
	    {
    	CCELOGSTRING("CCCEExtension::RequestCommand(): Plug-in for service-id was not found. Returning KErrNotFound" );
	    return KErrNotFound;
	    }

    MCCPExtensionProvider* extif = NULL;
	TRAPD( err, extif = plugin->ExtensionProviderL(*this) );

	if( err!=KErrNone )
		{
    	CCELOGSTRING2("CCCEExtension::RequestCommand(): Plug-in was found, but extension interface get failed with error=%d", err );
		return err;
		}
   
    if( extif )
        {
        extif->RequestCommand(aRequestId,aData);
        }
    else
        {
    	CCELOGSTRING("CCCEExtension::RequestCommand() Plug-in extension interface was found, but extensions are not supported. Returning KErrNotSupported" );
        return KErrNotSupported;
        }

    return KErrNone;
    }

// -----------------------------------------------------------------------------
// CancelRequest()
// -----------------------------------------------------------------------------
//
TInt CCCEExtension::CancelRequest( TUint32 aServiceId,
								   TInt aRequestId )
    {
    CCELOGSTRING3("CCCEExtension::CancelRequest(): Service id=%d Request id=%d", aServiceId, aRequestId );

	CConvergedCallProvider* plugin = GetExtIfPlugin(aServiceId);

	if( !plugin )
	    {
    	CCELOGSTRING("CCCEExtension::CancelRequest(): Plug-in for service-id was not found. Returning KErrNotFound" );
	    return KErrNotFound;
	    }

    MCCPExtensionProvider* extif = NULL;
	TRAPD( err, extif = plugin->ExtensionProviderL(*this) );

	if( err!=KErrNone )
		{
    	CCELOGSTRING2("CCCEExtension::CancelRequest(): Plug-in was found, but extension interface get failed with error=%d", err );
		return err;
		}
	
    if( extif )
        {
        extif->CancelRequest(aRequestId);
        }
    else
        {
    	CCELOGSTRING("CCCEExtension::CancelRequest() Plug-in extension interface was found, but extensions are not supported. Returning KErrNotSupported" );
        return KErrNotSupported;
        }

    return KErrNone;
    }

// -----------------------------------------------------------------------------
// HandleExtensionEvents()
// -----------------------------------------------------------------------------
//
void CCCEExtension::HandleExtensionEvents( TUint32 aServiceId,
										   TInt aEvent,
                                           TInt aStatus )
    {
    CCELOGSTRING3("CCCEExtension::HandleExtensionEvents(): Service id=%d Event=%d", aServiceId, aEvent );
    CCELOGSTRING2("CCCEExtension::HandleExtensionEvents(): Status=%d", aStatus );

    if( iMCCEExtensionObserver )
    	{
		iMCCEExtensionObserver->HandleExtensionEvents(aServiceId,aEvent,aStatus);
    	}
   	else
   		{
    	CCELOGSTRING("CCCEExtension::HandleExtensionEvents(): No observer was set, ignoring no event was notified!" );
   		}
    }

// -----------------------------------------------------------------------------
// HandleExtensionEvents()
// -----------------------------------------------------------------------------
//
CConvergedCallProvider* CCCEExtension::GetExtIfPlugin( TUint32 aServiceId )
    {
    CConvergedCallProvider* provider = NULL;
    
    TRAP_IGNORE( provider = iPluginManager.GetPluginL( aServiceId ) );

	return provider;
    }


// end of file