bearermanagement/mpm/src/mpmdefaultconnection.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:55:21 +0200
changeset 0 5a93021fdf25
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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 defualt connection logic
*
*/

#include <metadatabase.h>
#include <datamobilitycommsdattypes.h>
#include <cmdefconnvalues.h>
#include "mpmdefaultconnection.h"
#include "mpmserversession.h" //KShift8
#include "mpmserver.h" 
#include "mpmlogger.h"
#include "mpmcommsdataccess.h"

using namespace CommsDat;
// ---------------------------------------------------------------------------
// CMPMDefaultConnection::NewL
// ---------------------------------------------------------------------------
//
CMPMDefaultConnection* CMPMDefaultConnection::NewL( const CMPMServer* aServer)
    {
    CMPMDefaultConnection * self = new (ELeave) 
    CMPMDefaultConnection( aServer );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }
    

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CMPMDefaultConnection::~CMPMDefaultConnection()
    {
    }
// ---------------------------------------------------------------------------
// CMPMDefaultConnection::SetDefaultIAP
// ---------------------------------------------------------------------------
//
TInt CMPMDefaultConnection::SetDefaultIAP( TInt aIapId )
    {
    TInt err( KErrNone );
    //check validity
    if( ( aIapId ) > 0 && ( aIapId <= KCDMaxRecords ) )
        {
        iDefaultIapId = aIapId;
        MPMLOGSTRING2(
            "CMPMDefaultConnection::SetDefaultIAP Set default connection iap: %d", 
            aIapId)
        }
    else
        {
        err = KErrArgument;
        MPMLOGSTRING2(
            "CMPMDefaultConnection::SetDefaultIAP Invalid iap: %d", 
            aIapId)
        }    
    return err;
    }
// ---------------------------------------------------------------------------
// CMPMDefaultConnection::ClearDefaultIAP
// ---------------------------------------------------------------------------
//
void CMPMDefaultConnection::ClearDefaultIAP()
    {
    iDefaultIapId = 0;
    MPMLOGSTRING( "CMPMDefaultConnection::ClearDefaultIAP:\
 cleared default iap" )
    }
// ---------------------------------------------------------------------------
// CMPMDefaultConnection::GetDefaultConnectionL
// ---------------------------------------------------------------------------
//
void CMPMDefaultConnection::GetDefaultConnectionL( TCmDefConnType& aMode, 
                                                   TUint32& aConnection )
    {
    // first option is registered default iap
    if( iDefaultIapId )
        {
        MPMLOGSTRING2( "CMPMDefaultConnection::GetDefaultConnectionL:\
 default iap set as id %d", iDefaultIapId )
        aMode = ECmDefConnConnectionMethod;
        aConnection = iDefaultIapId;
        }
    else
        {
        MPMLOGSTRING( "CMPMDefaultConnection::GetDefaultConnectionL:\
 getting value from commsdat" )

        // read global commsdat setting     
        //
        TRAPD( err, ReadDefConnSettingL( aMode, aConnection ) )

        if( err != KErrNone )
            {
            //use default values
            //
            aMode = KDefaultMode;
            aConnection = KDefaultConnectionId;
            }

        MPMLOGSTRING3( "CMPMDefaultConnection::GetDefaultConnectionL: \
found type %d, id %d", aMode, aConnection )                
          
        }
    }

// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
//
CMPMDefaultConnection::CMPMDefaultConnection( const CMPMServer* aServer ) : 
    iServer( aServer )
    {
    
    }

// ---------------------------------------------------------------------------
// CMPMDefaultConnection::ConstructL
// ---------------------------------------------------------------------------
//    
void CMPMDefaultConnection::ConstructL()
    {
    
    }
    
// ---------------------------------------------------------------------------
// CMPMDefaultConnection::IntToCmDefConnType
// ---------------------------------------------------------------------------
//
TCmDefConnType CMPMDefaultConnection::IntToCmDefConnTypeL( const TUint& aInt )
    {
    TCmDefConnType type( TCmDefConnType ( 0 ) );

    if( aInt == ECmDefConnDestination )
        {
        type = ECmDefConnDestination;
        }
    else if( aInt == ECmDefConnConnectionMethod )
        {
        type = ECmDefConnConnectionMethod;
        }
    else
        {
        MPMLOGSTRING2( "CMPMDefaultConnection::IntToCmDefConnType:\
 incorrect value %d", aInt )
        User::Leave( KErrArgument );
        }
    
    return type;    
    }

// ---------------------------------------------------------------------------
// CMPMDefaultConnection::ReadDefConnSetting
// ---------------------------------------------------------------------------
//
void CMPMDefaultConnection::ReadDefConnSettingL( TCmDefConnType& aType,
                                                 TUint32&        aId )
    {
    MPMLOGSTRING( "CMPMDefaultConnection::ReadDefConnSettingL " )
    CMDBSession* db = CMDBSession::NewLC( CMDBSession::LatestVersion() ); 
    TMDBElementId tableId = CCDDefConnRecord::TableIdL( *db );     

    // fetch value from commsdat using record set to be able 
    // to load any and all records in the table.
    // we don't want to make assumptions on id
    //
    CMDBRecordSet<CMDBGenericRecord> * recordSet = new ( ELeave )
    CMDBRecordSet<CMDBGenericRecord>( tableId );
    CleanupStack::PushL( recordSet );
    recordSet->LoadL( *db );
    
    CCDDefConnRecord* dconn = new (ELeave) CCDDefConnRecord( tableId );
    CleanupStack::PushL( dconn );
    if( recordSet->iRecords.Count() )
        {
        // load the first entry found
        dconn->SetElementId( CMPMCommsDatAccess::GetRealElementId( recordSet->iRecords[0] ) );
        dconn->LoadL( *db );
        aType = IntToCmDefConnTypeL( dconn->iDefConnType );
        aId = dconn->iDefConnUid;
        }
    else
        {
        // nothing found, use default value
        // 
        MPMLOGSTRING( "CMPMDefaultConnection::ReadDefConnSettingL \
no entry found" )
        aType = KDefaultMode;
        aId = KDefaultConnectionId;
        }
    db->Close();
    CleanupStack::PopAndDestroy( dconn );
    CleanupStack::PopAndDestroy( recordSet );
    CleanupStack::PopAndDestroy( db );
    }