omadmadapters/connmoadapter/src/BranchBase.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 11 Jun 2010 13:29:40 +0300
changeset 30 d3981f4fe6a4
permissions -rw-r--r--
Revision: 201021 Kit: 2010123

/*
 * ==============================================================================
 * Copyright (c) 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 <smldmadapter.h>
#include <cdbcols.h>
#include <cmpluginpacketdatadef.h>
#include "BranchBase.h"

#include "Utils.h"
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "BranchBaseTraces.h"
#endif

_LIT8( KCMProxyNodeSeparator,   "/" );



// ======== LOCAL FUNCTIONS =========

// ======== MEMBER FUNCTIONS ========
// -------------------------------------------------------------------------------------
// CBranchBase::CBranchBase()
// -------------------------------------------------------------------------------------
CBranchBase::CBranchBase()
    {
    OstTraceFunctionEntry0( CBRANCHBASE_CBRANCHBASE_ENTRY );
    
    OstTraceFunctionExit0( CBRANCHBASE_CBRANCHBASE_EXIT );
    }
// -------------------------------------------------------------------------------------
// CBranchBase::CBranchBase
// -------------------------------------------------------------------------------------
CBranchBase::CBranchBase( MSmlDmCallback* aDmCallback )

    {
    OstTraceFunctionEntry0( CBRANCHBASE_CBRANCHBASE_2_ENTRY );
    iCallback = aDmCallback;
    OstTraceFunctionExit0( DUP1_CBRANCHBASE_CBRANCHBASE_2_EXIT );
    }
// -------------------------------------------------------------------------------------
// CBranchBase::~CBranchBase()
// -------------------------------------------------------------------------------------
CBranchBase::~CBranchBase()
    {
    OstTraceFunctionEntry0( CBRANCHBASE_DELETE_ENTRY );
    
    OstTraceFunctionExit0( CBRANCHBASE_DELETE_EXIT );
    }

// -------------------------------------------------------------------------------------
// CBranchBase::GetAllConnectionMethodsL()
// Returns all connection methods
// -------------------------------------------------------------------------------------
void CBranchBase::GetAllConnectionMethodsL( RArray<TUint32>& aCmArray,
                                           RCmManagerExt& aCmManager )
    {
    OstTraceFunctionEntry0( CBRANCHBASE_GETALLCONNECTIONMETHODSL_ENTRY );
    
    // Get all connection methods
    TBool supportedBearersOnly = EFalse;
    TBool legacyCmsOnly = EFalse;
    TBool includeEasyWlan = EFalse;
        
    aCmManager.ConnectionMethodL( aCmArray, 
                                 supportedBearersOnly,
                                 legacyCmsOnly,
                                 includeEasyWlan );
    
    RCmConnectionMethodExt cm;
    
    // Loop all connection methods and filter away everything else besides packet data.
    // Other bearer types are not supported
    for( TInt i = 0; i < aCmArray.Count(); i++ )
        {
        if ( GetConnectionMethodLC( aCmManager, cm, aCmArray[i] ) )
            {
            TUint bearerType = cm.GetIntAttributeL( CMManager::ECmBearerType );                      
            
            if( bearerType != KUidPacketDataBearerType )
                {
                // Non supported bearer type. Remove
                aCmArray.Remove( i );
                i--;              
                }            
            }        
        CleanupStack::PopAndDestroy( &cm );
        }
    OstTrace1( TRACE_NORMAL, CBRANCHBASE_GETALLCONNECTIONMETHODSL_COUNT, "CBranchBase::GetAllConnectionMethodsL; Found %u connection methods.", aCmArray.Count() );
    
    OstTraceFunctionExit0( CBRANCHBASE_GETALLCONNECTIONMETHODSL_EXIT );
    }

//-----------------------------------------------------------------------------
// TBool CBranchBase::CheckPreviousURIList()
//-----------------------------------------------------------------------------
TBool CBranchBase::CheckPreviousURIList( const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
                                         const TUint32 aCmId,
                                         TDes8& aURISeg )
    {
    OstTraceExt2( TRACE_NORMAL, CBRANCHBASE_CHECKPREVIOUSURILIST_ENTRY, "ENTRY: CBranchBase::CheckPreviousURIList;aURISeg=%s;aCmId=%u", aURISeg, aCmId );
    
    TBool retval = EFalse;
    
    for ( TInt i = 0; i < aPreviousURISegmentList.Count(); i++ )
        {        
        if ( CUtils::IntLUID( aPreviousURISegmentList.At(i).iURISegLUID ) == aCmId )
            {
            aURISeg.Copy( aPreviousURISegmentList.At(i).iURISeg );
            retval = ETrue;
            break;
            }
        }
    OstTrace1( TRACE_NORMAL, CBRANCHBASE_CHECKPREVIOUSURILIST_EXIT, "EXIT: CBranchBase::CheckPreviousURIList;retval=%d", retval );
    
    return retval;
    }


//-----------------------------------------------------------------------------
// CBranchBase::GetAllDynamicNodesL
//-----------------------------------------------------------------------------
void CBranchBase::GetAllDynamicNodesL( const TDesC8& aURI, 
                                       const TDesC8& /*aLUID*/,
                                       const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
                                       TInt aResultsRef,
                                       TInt aStatusRef,
                                       RCmManagerExt& /*aCmManagerExt*/,
                                       CBufBase& aCurrentURISegmentList,
                                       const TDesC8& aField,
                                       const TInt aNodeCount,
                                       MSmlDmCallback* aCallback )
    {
    OstTraceExt3( TRACE_NORMAL, 
                  CBRANCHBASE_GETALLDYNAMICNODESL_ENTRY, 
                  "ENTRY: CBranchBase::GetAllDynamicNodesL;aURI=%s;aField=%s;aNodeCount=%d", 
                  aURI, 
                  aField, 
                  aNodeCount );
    
    if ( aPreviousURISegmentList.Count() > 0 ) // Already mapped
        {
        for ( TInt i = 0; i < aPreviousURISegmentList.Count(); i++ )
            {
            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), 
                                            aPreviousURISegmentList.At(i).iURISeg );
            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), 
                                            KCMProxyNodeSeparator );                
            }
        }
    else
        {
        TBuf8<KSmlMaxURISegLen> addNodeName;
   
        // Generate as many nodes as defined
        for ( TInt i = 1; i <= aNodeCount; i++ )
            {
            addNodeName.Format( _L8( "%s%d" ), aField.Ptr(), i );
            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), addNodeName );
            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), 
                                            KCMProxyNodeSeparator );
            }            
       }
    
    aCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
    aCallback->SetResultsL( aResultsRef, aCurrentURISegmentList, KNullDesC8);
    
    OstTrace0( TRACE_NORMAL, 
               CBRANCHBASE_GETALLDYNAMICNODESL_EXIT, 
               "EXIT: CBranchBase::GetAllDynamicNodesL" );
       
    }

//------------------------------------------------------------------------------
//  TBool CBranchBase::GetConnectionMethodLC()
//------------------------------------------------------------------------------ 
TBool CBranchBase::GetConnectionMethodLC( RCmManagerExt& aCmManagerExt,
                                          RCmConnectionMethodExt& aCm,
                                          TUint32 aCmId )
    {
    OstTrace1( TRACE_NORMAL, CBRANCHBASE_GETCONNECTIONMETHODLC_ENTRY, "ENTRY: CBranchBase::GetConnectionMethodLC;aCmId=%d", aCmId );
    TInt error( KErrNone );
    
    TRAP( error, aCm = aCmManagerExt.ConnectionMethodL( aCmId ) );
    
    CleanupClosePushL( aCm );
    
    if ( error != KErrNone )
        {
        OstTrace0( TRACE_NORMAL, 
                   CBRANCHBASE_GETCONNECTIONMETHODLC_EXIT_NOT_FOUND, 
                   "EXIT: CBranchBase::GetConnectionMethodLC;Connection Method NOT found: EFalse." );
        return EFalse;
        }
    
    OstTrace0( TRACE_NORMAL, 
               CBRANCHBASE_GETCONNECTIONMETHODLC_EXIT_FOUND, 
               "EXIT: CBranchBase::GetConnectionMethodLC;Connection Method FOUND: ETrue." );
    
    return ETrue;
    }

// ======== GLOBAL FUNCTIONS ========