// Copyright (c) 2006-2009 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 FILES
#include "cmmmessagemanagerbase.h"
#include <ctsy/tflogger.h>
#include "ctsydelegates.h"

// ======== MEMBER FUNCTIONS ========

EXPORT_C CMmMessageManagerBase* CMmMessageManagerBase::NewL()
    {
    CMmMessageManagerBase* messageManager = NULL;
    messageManager = new ( ELeave ) CMmMessageManagerBase();
    CleanupStack::PushL( messageManager );
     messageManager->ConstructL();
    CleanupStack::Pop();
    return messageManager;
    }

CMmMessageManagerBase::~CMmMessageManagerBase()
    {
    // instance was created in this object, so we delete it here
    if ( iTsyDelgates )
        {
        delete iTsyDelgates;
        }
    iTsyDelgates = NULL;
    
    if ( iMessageRouterProxy )
        {
        delete iMessageRouterProxy;
        }
    iMessageRouterProxy = NULL;
    }

CMmMessageManagerBase::CMmMessageManagerBase()
    {
    }

void CMmMessageManagerBase::ConstructL()
    {
    //Create instances
    iTsyDelgates = CTsyDelegates::NewL();
    iMessageRouterProxy = CMmMessageRouterProxy::NewL( *iTsyDelgates );
    }
    
// ---------------------------------------------------------------------------
// CMmMessageManagerBase::SetPhoneTsy
// Set phone Tsy object
// (other items were commented in a header).
// ---------------------------------------------------------------------------    
EXPORT_C void CMmMessageManagerBase::SetPhoneTsy( CMmPhoneTsy* aMmPhone )    
    {
TFLOGSTRING2("TSY: CMmMessageManagerBase::SetPhoneTsy : Phone=0x%x", aMmPhone );   
    iMmPhone = aMmPhone;
    
    if( iMessageRouterProxy )
        {
        iMessageRouterProxy->SetPhoneTsy( iMmPhone );    
        }
    }
// ---------------------------------------------------------------------------
// CMmMessageManagerBase::HandleRequestL
// Forwards a request to DOS layer
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
TInt CMmMessageManagerBase::HandleRequestL(    
    const TInt aIpc )        
    {
TFLOGSTRING2("TSY: CMmMessageManagerBase::HandleRequestL. IPC = %d", aIpc );
    return HandleRequestL( 
        aIpc, REINTERPRET_CAST( const CMmDataPackage*, NULL ) );
    }

// ---------------------------------------------------------------------------
// CMmMessageManagerBase::HandleRequestL
// Forwards a request to DOS layer
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
TInt CMmMessageManagerBase::HandleRequestL(    
    const TInt aIpc,      
    const CMmDataPackage* aDataPackage )
    {
TFLOGSTRING2("TSY: CMmMessageManagerBase::HandleRequestL. IPC = %d", aIpc );
   
    return iMessageRouter->ExtFuncL( aIpc, aDataPackage );
    }

// ---------------------------------------------------------------------------
// CMmMessageManagerBase::HandleRequestL
// Forwards a request to DOS layer
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
TInt CMmMessageManagerBase::HandleRequestL(    
    const TInt aIpc,        
    const TDataPackage* aDataPackage )
    {
TFLOGSTRING2("TSY: CMmMessageManagerBase::HandleRequestL. IPC = %d", aIpc );

    // map the TDataPackage into a CMmDataPackage
    // Non-core Methods from the SOS layer using the DOS layer will perforn
    // always this mapping.
    // TSY core methods will call directly the overloaded HandleRequest method 
    // which uses a CMmDataPackage in the method's signature.
    iDataPackage.SetPacketData ( aDataPackage );

    //call the overloaded HandleRequest of CMmMessageManagerBase
    return HandleRequestL( aIpc, &iDataPackage );
    }

// ---------------------------------------------------------------------------
// CMmMessageManagerBase::RegisterTsyObject
// Registers a Tsy object for request and notification completions
// Stored in Tsy Delegates
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
void CMmMessageManagerBase::RegisterTsyObject( 
    TTsyObjects aTsyObjectType,
    CBase* aTsyObject )
    {
    iTsyDelgates->RegisterTsyObject( aTsyObjectType, aTsyObject );
    }

// ---------------------------------------------------------------------------
// CMmMessageManagerBase::DeregisterTsyObject
// Remove registered Tsy object stored in Tsy Delegates
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
void CMmMessageManagerBase::DeregisterTsyObject(
    CBase* aTsyObject )
    {
    iTsyDelgates->DeregisterTsyObject( aTsyObject );
    }
    
// ---------------------------------------------------------------------------
// CMmMessageManagerBase::GetMessageManagerCallback
// Return pointer to MessageManagerCallback object
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
EXPORT_C MmMessageManagerCallback* 
    CMmMessageManagerBase::GetMessageManagerCallback()    
    {
    return iMessageRouterProxy;
    }

    
// ======== OTHER EXPORTED FUNCTIONS ========

// ---------------------------------------------------------------------------
// CMmMessageManagerBase::SetMessageRouter
// Sets message router ptr.
// (other items were commented in a header)
// ---------------------------------------------------------------------------
//
EXPORT_C void CMmMessageManagerBase::SetMessageRouter(
    MMessageRouter* aMessageRouter )
    {
TFLOGSTRING2("TSY: CMmMessageManagerBase::SetMessageRouter : MessageRouter=0x%x", aMessageRouter );
    iMessageRouter = aMessageRouter;
    }


//  End of File 

