cmmanager/cmmgr/Framework/Src/cmmanager.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 15 Mar 2010 12:42:11 +0200
branchRCL_3
changeset 13 68f0c7cd80ec
parent 0 5a93021fdf25
permissions -rw-r--r--
Revision: 201009 Kit: 201010

/*
* Copyright (c) 2006 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:  Implementation of RCmManager.
*
*/

#include <cmmanager.h>
#include <cmconnectionmethod.h>
#include <cmdestination.h>
#include "cmlogger.h"
#include "cmmanagerimpl.h"
#include "cmdestinationimpl.h"
#include "cmmanager.hrh"
#include <cmcommonconstants.h>
#include <cmpluginbaseeng.h>
#include <cmpluginbase.h>

//-----------------------------------------------------------------------------
//  RCmManager::Close()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::Close()
    {
    CLOG_WRITE( "RCmManagerExt::Close()" );
    delete iImplementation;
    iImplementation = NULL;
    
    CLOG_CLOSE;
    }

//-----------------------------------------------------------------------------
//  RCmManager::OpenL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::OpenL()
    {
    CLOG_CREATE;
    CLOG_NAME_1( _L("Manager_0x%x"), this );
    iImplementation = CCmManagerImpl::NewL(EFalse);
    CLOG_ATTACH( iImplementation, this );
    }

//-----------------------------------------------------------------------------
//  RCmManagerExt::CreateTablesAndOpenL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::CreateTablesAndOpenL()
    {
    CLOG_CREATE;
    CLOG_NAME_1( _L("Manager_0x%x"), this );
    iImplementation = CCmManagerImpl::NewL();
    CLOG_ATTACH( iImplementation, this );
    }

//-----------------------------------------------------------------------------
//  RCmManager::OpenLC()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::OpenLC()
    {
    CLOG_CREATE;
    CLOG_NAME_1( _L("Manager_0x%x"), this );
    CleanupClosePushL(*this);
    iImplementation = NULL;
    iImplementation = CCmManagerImpl::NewL();
    CLOG_ATTACH( iImplementation, this );
    }

//-----------------------------------------------------------------------------
//  RCmManager::ConnectionMethodL( TUint aId )
//-----------------------------------------------------------------------------
//
EXPORT_C RCmConnectionMethod RCmManager::ConnectionMethodL( 
                                                    TUint32 aIapId ) const
    {
    RCmConnectionMethod cm;
    CCmPluginBase* cM =  iImplementation->GetConnectionMethodL( aIapId );
    cm.iImplementation = cM->Plugin();
    cm.iImplementation->IncrementRefCounter();
    delete cM;
    
    return cm;
    }

//-----------------------------------------------------------------------------
//  RCmManager::GetBearerInfoIntL()
//-----------------------------------------------------------------------------
//
EXPORT_C TUint32 RCmManager::GetBearerInfoIntL( TUint32 aBearerType,
                                                TUint32 aAttribute ) const
    {
    return iImplementation->GetBearerInfoIntL( aBearerType,
                                                       aAttribute );
    }

//-----------------------------------------------------------------------------
//  RCmManager::GetBearerInfoBoolL()
//-----------------------------------------------------------------------------
//
EXPORT_C TBool RCmManager::GetBearerInfoBoolL( TUint32 aBearerType,
                                               TUint32 aAttribute ) const
    {
    return iImplementation->GetBearerInfoBoolL( aBearerType,
                                                       aAttribute );
    }

//-----------------------------------------------------------------------------
//  RCmManager::GetBearerInfoStringL()
//-----------------------------------------------------------------------------
//
EXPORT_C HBufC* RCmManager::GetBearerInfoStringL( TUint32 aBearerType,
                                                  TUint32 aAttribute ) const
    {
    return iImplementation->GetBearerInfoStringL( aBearerType,
                                                       aAttribute );
    }

//-----------------------------------------------------------------------------
//  RCmManager::GetBearerInfoStringL()
//-----------------------------------------------------------------------------
//
EXPORT_C HBufC8* RCmManager::GetBearerInfoString8L( TUint32 aBearerType,
                                                    TUint32 aAttribute ) const
    {
    return iImplementation->GetBearerInfoString8L( aBearerType,
                                                       aAttribute );
    }

// -----------------------------------------------------------------------------
// RCmManager::GetConnectionMethodInfoIntL()
// -----------------------------------------------------------------------------
//
EXPORT_C TUint32 RCmManager::GetConnectionMethodInfoIntL( 
                                                    TUint32 aIapId,
                                                    TUint32 aAttribute ) const
    {
    return iImplementation->GetConnectionMethodInfoIntL( aIapId, aAttribute );
    }
    
// -----------------------------------------------------------------------------
// RCmManager::GetConnectionMethodInfoBoolL()
// -----------------------------------------------------------------------------
//
EXPORT_C TBool RCmManager::GetConnectionMethodInfoBoolL( 
                                                    TUint32 aIapId,
                                                    TUint32 aAttribute ) const
    {
    return iImplementation->GetConnectionMethodInfoBoolL( aIapId, aAttribute );
    }
    
// -----------------------------------------------------------------------------
// RCmManager::GetConnectionMethodInfoStringL()
// -----------------------------------------------------------------------------
//
EXPORT_C HBufC* RCmManager::GetConnectionMethodInfoStringL( 
                                                    TUint32 aIapId,
                                                    TUint32 aAttribute ) const
    {
    return iImplementation->GetConnectionMethodInfoStringL( aIapId, aAttribute );
    }
    
// -----------------------------------------------------------------------------
// RCmManager::GetConnectionMethodInfoString8L()
// -----------------------------------------------------------------------------
//
EXPORT_C HBufC8* RCmManager::GetConnectionMethodInfoString8L( 
                                                    TUint32 aIapId,
                                                    TUint32 aAttribute ) const
    {
    return iImplementation->GetConnectionMethodInfoString8L( aIapId, aAttribute );
    }
    
//=============================================================================
// CREATION / DELETION API
//=============================================================================
//

//-----------------------------------------------------------------------------
//  RCmManager::CreateDestinationL( const TDesC& aName )
//-----------------------------------------------------------------------------
//
EXPORT_C RCmDestination RCmManager::CreateDestinationL( const TDesC& aName )
    {
    LOGGER_ENTERFN( "RCmManager::CreateDestinationL" );

    RCmDestination dest;
    
    CCmDestinationImpl* destImp = iImplementation->CreateDestinationL( aName );
    dest.iDestinatonData = destImp->GetData();
    dest.iDestinatonData->IncrementRefCounter();
    delete destImp;
    
    return dest;
    }

// -----------------------------------------------------------------------------
// RCmManager::CreateConnectionMethodL()
// -----------------------------------------------------------------------------
//  
EXPORT_C RCmConnectionMethod RCmManager::CreateConnectionMethodL(
    TUint32 aImplementationUid )
    {
    LOGGER_ENTERFN( "RCmManager::CreateConnectionMethodL" );

    RCmConnectionMethod cm;
        
    CCmPluginBase* cM =  
        iImplementation->CreateConnectionMethodL( aImplementationUid );
    cm.iImplementation = cM->Plugin();
    cm.iImplementation->IncrementRefCounter();
    delete cM;

    return cm;
    }

//-----------------------------------------------------------------------------
// RCmManager::CopyL()
//-----------------------------------------------------------------------------
//
EXPORT_C TInt RCmManager::CopyConnectionMethodL(
    RCmDestination& aTargetDestination,
    RCmConnectionMethod& aConnectionMethod )
    {
    LOGGER_ENTERFN( "RCmManager::CopyConnectionMethodL" );

    CCmDestinationImpl* aImplementation = 
            CCmDestinationImpl::NewLC(aTargetDestination.iDestinatonData);
    // Deleting aImplementation will decrement the ref counter
    aImplementation->IncrementRefCounter();
    CCmPluginBase* connMethod = new (ELeave) 
                            CCmPluginBase(aConnectionMethod.iImplementation);
    connMethod->IncrementRefCounter();    
    CleanupStack::PushL( connMethod );        
    TInt retVal = iImplementation->CopyConnectionMethodL( 
                                           *aImplementation, 
                                           *connMethod );
    CleanupStack::PopAndDestroy(connMethod);
    CleanupStack::PopAndDestroy(aImplementation);
    return retVal;
    }

//-----------------------------------------------------------------------------
// RCmManager::MoveConnMethodL()
//-----------------------------------------------------------------------------
//
EXPORT_C TInt RCmManager::MoveConnectionMethodL( 
    RCmDestination& aSourceDestination,
    RCmDestination& aTargetDestination,
    RCmConnectionMethod& aConnectionMethod )
    {
    LOGGER_ENTERFN( "RCmManager::MoveConnectionMethodL" );

    CCmDestinationImpl* aSourceImpl = 
            CCmDestinationImpl::NewLC(aSourceDestination.iDestinatonData);
    aSourceImpl->IncrementRefCounter();
    CCmDestinationImpl* aTargetImpl = 
            CCmDestinationImpl::NewLC(aTargetDestination.iDestinatonData);
    aTargetImpl->IncrementRefCounter();
    CCmPluginBase* connMethod = new (ELeave) 
                            CCmPluginBase(aConnectionMethod.iImplementation);
    connMethod->IncrementRefCounter();    
    CleanupStack::PushL( connMethod );        
    TInt retVal = iImplementation->MoveConnectionMethodL( 
                    *aSourceImpl, 
                    *aTargetImpl, 
                    *connMethod );
    CleanupStack::PopAndDestroy(connMethod);
    CleanupStack::PopAndDestroy(aTargetImpl);
    CleanupStack::PopAndDestroy(aSourceImpl);
    return retVal;
    }

//-----------------------------------------------------------------------------
// RCmManager::RemoveConnectionMethodL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::RemoveConnectionMethodL( 
    RCmDestination& aDestination,
    RCmConnectionMethod& aConnectionMethod )
    {
    LOGGER_ENTERFN( "RCmManager::RemoveConnectionMethodL" );

    CCmDestinationImpl* aDestImpl = 
            CCmDestinationImpl::NewLC(aDestination.iDestinatonData);
    aDestImpl->IncrementRefCounter();
    CCmPluginBase* connMethod = new (ELeave) 
                            CCmPluginBase(aConnectionMethod.iImplementation);
    connMethod->IncrementRefCounter();    
    CleanupStack::PushL( connMethod );        

    iImplementation->RemoveConnectionMethodL( *aDestImpl, *connMethod );

    CleanupStack::PopAndDestroy(connMethod);
    CleanupStack::PopAndDestroy(aDestImpl);
    }

//-----------------------------------------------------------------------------
// RCmManager::RemoveAllReferencesL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::RemoveAllReferencesL( 
    RCmConnectionMethod& aConnectionMethod )
    {
    LOGGER_ENTERFN( "RCmManager::RemoveAllReferencesL" );

    iImplementation->RemoveAllReferencesL( *aConnectionMethod.iImplementation );
    }

//-----------------------------------------------------------------------------
//  RCmManager::ConnectionMethodL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::ConnectionMethodL( RArray<TUint32>& aCMArray,
                                             TBool aCheckBearerType,
                                             TBool aLegacyOnly,
                                             TBool aEasyWlan ) const
    {
    LOGGER_ENTERFN( "RCmManager::ConnectionMethodL" );

    return iImplementation->ConnectionMethodL( aCMArray, 
                                               aCheckBearerType, 
                                               aLegacyOnly,
                                               aEasyWlan );
    }

//-----------------------------------------------------------------------------
//  RCmManager::AllDestinationsL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::AllDestinationsL( RArray<TUint32>& aDestArray ) const
    {
    LOGGER_ENTERFN( "RCmManager::AllDestinationsL" );

    return iImplementation->AllDestinationsL( aDestArray );
    }


//-----------------------------------------------------------------------------
//  RCmManager::DestinationL()
//-----------------------------------------------------------------------------
//  
EXPORT_C RCmDestination RCmManager::DestinationL( TUint32 aId ) const
    {
    LOGGER_ENTERFN( "RCmManager::DestinationL" );

    RCmDestination dest;
    
    CCmDestinationImpl* aDestImpl = iImplementation->DestinationL( aId );
    dest.iDestinatonData = aDestImpl->GetData( );
    dest.iDestinatonData->IncrementRefCounter();
    delete aDestImpl;
    
    return dest;
    }

//-----------------------------------------------------------------------------
//  RCmManager::BearerPriorityArrayL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::BearerPriorityArrayL( 
                                        RArray<TBearerPriority>& aArray ) const
    {
    LOGGER_ENTERFN( "RCmManager::BearerPriorityArray" );

    iImplementation->BearerPriorityArrayL( aArray ); 
    }

//-----------------------------------------------------------------------------
//  RCmManager::UpdateBearerPriorityArrayL()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::UpdateBearerPriorityArrayL( 
    const RArray<TBearerPriority>& aArray )
    {
    LOGGER_ENTERFN( "RCmManager::UpdateBearerPriorityArray" );    

    iImplementation->UpdateBearerPriorityArrayL( aArray );
    }

//-----------------------------------------------------------------------------
//  RCmManager::CleanupGlobalPriorityArray()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::CleanupGlobalPriorityArray( 
    RArray<TBearerPriority>& aArray ) const
    {
    LOGGER_ENTERFN( "RCmManager::CleanupGlobalPriorityArray" );

    iImplementation->CleanupGlobalPriorityArray( aArray ); 
    }

//-----------------------------------------------------------------------------
//  RCmManager::SupportedBearers()
//-----------------------------------------------------------------------------
//
EXPORT_C void RCmManager::SupportedBearersL( RArray<TUint32>& aArray ) const
    {
    LOGGER_ENTERFN( "RCmManager::SupportedBearersL" );

    return iImplementation->SupportedBearersL( aArray );        
    }

//-----------------------------------------------------------------------------
//  RCmManagerExt::UncategorizedIconL()
//-----------------------------------------------------------------------------
//    
EXPORT_C CGulIcon* RCmManager::UncategorizedIconL() const
    {
    LOGGER_ENTERFN( "RCmManager::UncategorizedIconL" );

    return iImplementation->UncategorizedIconL();        
    }

//-----------------------------------------------------------------------------
//  RCmManager::EasyWlanIdL()
//-----------------------------------------------------------------------------
//    
EXPORT_C TUint32 RCmManager::EasyWlanIdL() const
    {
    LOGGER_ENTERFN( "RCmManager::EasyWlanIdL" );

    return iImplementation->EasyWlanIdL();        
    }
    
//-----------------------------------------------------------------------------
//  RCmManagerExt::ReadDefConnL()
//-----------------------------------------------------------------------------
//    
EXPORT_C void RCmManager::ReadDefConnL( TCmDefConnValue& aDCSetting )
    {
    LOGGER_ENTERFN( "RCmManager::ReadDefConnL" );

    return iImplementation->ReadDefConnL( aDCSetting );        
    }
    
//-----------------------------------------------------------------------------
//  RCmManager::WriteDefConnL()
//-----------------------------------------------------------------------------
//    
EXPORT_C void RCmManager::WriteDefConnL( const  TCmDefConnValue& aDCSetting )
    {
    LOGGER_ENTERFN( "RCmManager::WriteDefConnL" );

    return iImplementation->WriteDefConnL( aDCSetting );        
    }

//-----------------------------------------------------------------------------
//  RCmManager::ReadGenConnSettingsL()
//-----------------------------------------------------------------------------
//  
EXPORT_C void RCmManager::ReadGenConnSettingsL( TCmGenConnSettings& aGenConnSettings )
{
    LOGGER_ENTERFN( "RCmManager::ReadGenConnSettingsL" );

    return iImplementation->ReadGenConnSettingsL( aGenConnSettings ); 
}

//-----------------------------------------------------------------------------
//  RCmManager::WriteGenConnSettingsL()
//-----------------------------------------------------------------------------
//  
EXPORT_C void RCmManager::WriteGenConnSettingsL( const TCmGenConnSettings& aGenConnSettings )
{
    LOGGER_ENTERFN( "RCmManager::WriteGenConnSettingsL" );

    return iImplementation->WriteGenConnSettingsL( aGenConnSettings ); 
}

//-----------------------------------------------------------------------------
//  RCmManager::CreateDestinationL( const TDesC& aName,
//                                     TUint32 aDestId )
//-----------------------------------------------------------------------------
//
EXPORT_C RCmDestination RCmManager::CreateDestinationL(
    const TDesC& aName,
    TUint32 aDestId )
    {
    LOGGER_ENTERFN( "RCmManager::CreateDestinationL" );

    if ( aDestId == 0 )
        {
        return CreateDestinationL( aName );
        }

    // Check if there already exists a destination with the same Id
    RArray<TUint32> destIdArray = RArray<TUint32>( KCmArrayBigGranularity );
    iImplementation->AllDestinationsL( destIdArray );
    for ( TInt i = 0; i < destIdArray.Count(); i++ )
        {
        if ( aDestId > 0 && aDestId < 255 )
            {
            aDestId = aDestId + KCmDefaultDestinationAPTagId;
            }
        else if ( aDestId < KCmDefaultDestinationAPTagId+1 
                  && ( aDestId > ( KCmDefaultDestinationAPTagId+255 ) ) )
            {
            User::Leave( KErrArgument );
            }
        if ( aDestId == destIdArray[i] )
            {
            destIdArray.Close();
            User::Leave( KErrAlreadyExists );
            }
        }
    destIdArray.Close();

    RCmDestination dest;

    CCmDestinationImpl* destImp =
                        iImplementation->CreateDestinationL( aName,
                                                             aDestId );
    dest.iDestinatonData = destImp->GetData();
    dest.iDestinatonData->IncrementRefCounter();
    delete destImp;

    return dest;
    }

// -----------------------------------------------------------------------------
// RCmManager::CreateConnectionMethodL()
// -----------------------------------------------------------------------------
//  
EXPORT_C RCmConnectionMethod RCmManager::CreateConnectionMethodL(
    TUint32 aImplementationUid,
    TUint32 aConnMethodId )
    {
    LOGGER_ENTERFN( "RCmManager::CreateConnectionMethodL" );

    if ( aConnMethodId == 0 )
        {
        return CreateConnectionMethodL( aImplementationUid );
        }

    RCmConnectionMethod cm;

    CCmPluginBase* cM =
                   iImplementation->CreateConnectionMethodL( aImplementationUid,
                                                             aConnMethodId );
    cm.iImplementation = cM->Plugin();
    cm.iImplementation->IncrementRefCounter();
    delete cM;

    return cm;
    }