omaprovisioning/provisioning/accesspointadapter/Src/CWPAPAccesspointItem.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 07 Jan 2010 13:15:03 +0200
changeset 1 a9c0ce913924
permissions -rw-r--r--
Revision: 200951 Kit: 201001

/*
* Copyright (c) 2002 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:   Class stores data for one accesspoint
*
*/



// INCLUDE FILES

#include "CWPAPAccesspointItem.h"		// Own header

#include <CWPCharacteristic.h>
#include <CWPParameter.h>
#include <CWPAdapter.h>


#include <bldvariant.hrh>
#include <featmgr.h>					// Feature manager
#include <CWPAdapter.h>					// Leave code for protected	
#include "CWPAPItemBase.h"
#include "CWPAPNapdef.h"
#include "WPAPAdapter.pan"
#include "ProvisioningDebug.h"
#include <cmconnectionmethodext.h>
#include <cmmanagerext.h>
#include <cmpluginpacketdatadef.h> 
#include <cmpluginwlandef.h>

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

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::NewLC
// -----------------------------------------------------------------------------
CWPAPAccesspointItem* CWPAPAccesspointItem::NewLC(
                                            const TDesC& aDefaultName,
                                            CWPAPItemBase* aLogicalProxy,
                                            CWPAPItemBase* aPhysicalProxy,
                                            CWPAPItemBase* aNapdef,
                                            CWPCharacteristic& aCharacteristic )
	{
	CWPAPAccesspointItem* self = 
                        new(ELeave) CWPAPAccesspointItem( aDefaultName, 
                                                          aLogicalProxy,
                                                          aPhysicalProxy,
                                                          aNapdef,
                                                          aCharacteristic ); 
	CleanupStack::PushL( self );
	self->ConstructL();
	return self;
	}

// -----------------------------------------------------------------------------
// Destructor
// -----------------------------------------------------------------------------
CWPAPAccesspointItem::~CWPAPAccesspointItem()
	{
	}

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::Name
// -----------------------------------------------------------------------------
//
const TDesC& CWPAPAccesspointItem::Name() const
	{
	if ( iLogicalProxy && iLogicalProxy->Name() != KNullDesC )
        {
        return iLogicalProxy->Name();
		}
    else if( iPhysicalProxy && iPhysicalProxy->Name() != KNullDesC )
        {
        return iPhysicalProxy->Name();
        }
    else if( iNapdef && iNapdef->Name() != KNullDesC )
        {
        return iNapdef->Name();
        }
	else
		{
		return iDefaultName;
		}
	}
// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::NapDef
// -----------------------------------------------------------------------------
//
CWPAPItemBase* CWPAPAccesspointItem::NapDef()
	{
	return iNapdef;
	}
	

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::SetCMManager
// -----------------------------------------------------------------------------
//
void CWPAPAccesspointItem::SetCMManager( RCmManagerExt* aCm )
	{
	iCmManager = aCm;
	}

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::Characteristic
// -----------------------------------------------------------------------------
//
TInt CWPAPAccesspointItem::Characteristic()
	{
	return iCharacteristic.Type();
	}
	

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::SaveL
// -----------------------------------------------------------------------------
//
TUint32 CWPAPAccesspointItem::SaveL( CCommsDatabase& aCommsDb )
	{
	FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::SaveL:" ) );
	
	if ( FeatureManager::FeatureSupported( KFeatureIdSettingsProtection ) )
		{
		// This protection check is no longer needed since CMManager 
		// initiates the transactions to the database
		/*if( CApProtHandler::IsTableProtectedL( &aCommsDb ) )
			{
			// Table protected -> leave with specific code.
			User::Leave( EWPAccessPointsProtected );
			}*/	
		}

	  TUint32 iap = 0;
    TRAPD( err,iap = StoreL( aCommsDb ) );
    if( err == KErrLocked )
        {
        err = EWPCommsDBLocked;
        }
    User::LeaveIfError( err );
    return iap;
	}

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::StoreL
// -----------------------------------------------------------------------------
//
TUint32 CWPAPAccesspointItem::StoreL( CCommsDatabase& aCommsDb )
	{
	FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::StoreL:" ) );
    
    // CMManager
    // Create the cmIten, give the bearer as parameter if it is available
    RCmConnectionMethodExt cmItem;
    TBool created = EFalse;
    TUint bearer;
    TInt err(KErrNone);
    
    // If the NapDef object exists and the bearer is defined, then we can
    // create the connection method using the bearer
    if ( iNapdef != NULL )
    	{
    	bearer = static_cast<CWPAPNapdef*>(iNapdef)->Bearer();
    	if ( bearer != 0 )
    		{
    		cmItem = iCmManager->CreateConnectionMethodL(bearer);
    		created = ETrue;
    		}
    	}
    	
    // If the bearer id is not known we will use packet data
    if ( !created)
    	{
    	cmItem = iCmManager->CreateConnectionMethodL(KUidPacketDataBearerType);
    	}
    // Create the connection method into the DB
    TRAP( err,cmItem.UpdateL() );
    // Leave if the creation fails for some reason
    if(err!=KErrNone)
		{
       	User::Leave(err);
       	}
       
    if( iNapdef )
        {
        FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::StoreL: napdef" ) );
        
        // CMManager 
        TRAP (err, iNapdef->AddDataL( cmItem ));
       	TRAP ( err,cmItem.UpdateL() );
       	// Leave if the update of the parameters fails
    	if(err!=KErrNone)
			{
       		User::Leave(err);
       		}
        }
        
    if( iLogicalProxy )
        {
        FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::StoreL: logicalproxy" ) );
        // CMManager 
        iLogicalProxy->AddDataL( cmItem );
        TRAP( err,cmItem.UpdateL() );
        // Leave if the update of the parameters fails
    	if(err!=KErrNone)
			{
       		User::Leave(err);
       		}
        }

    if( iPhysicalProxy )
        {
        FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::StoreL: physicalproxy" ) );
        // CMManager 
        iPhysicalProxy->AddDataL( cmItem );
        TRAP( err,cmItem.UpdateL() );
        // Leave if the update of the parameters fails
    	if(err!=KErrNone)
			{
       		User::Leave(err);
       		}
        }

    FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::StoreL: cmItem.UpdateL" ) );
    
    // CMManager
    iUid = cmItem.GetIntAttributeL( CMManager::ECmWapId );
    
    TInt test( KErrNone );
    // Update parameter data to CM
    TRAP( test,cmItem.UpdateL() );
    FTRACE(RDebug::Print(_L("[AccessPointAdapter] CWPAPAccesspointItem::StoreL: UpdateL err: %d"), test ));
    
    TUint32 cmId = cmItem.GetIntAttributeL( CMManager::ECmId ); 
    cmItem.Close();
    
	if( iNapdef )
    	{
		iNapdef->UpdateLingerL(iUid());
    	}
       

    FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::StoreL: SaveWlanDataL" ) );
    if( iNapdef )
        { 
        // Give CMManager pointer and save WLAN data
		static_cast<CWPAPNapdef*>(iNapdef)->SetCMManager( iCmManager );
        iNapdef->SaveWlanDataL( cmId, aCommsDb );
        }
    
    
    TInt i( 0 );
    TPtrC8 data( iCharacteristic.Data(i) );
    while( data != KNullDesC8 )
        {
        i++;
        data.Set( iCharacteristic.Data(i) );
        }
        
    iCharacteristic.SetDataL( iUid, i );
    
    FLOG( _L( "[AccessPointAdapter] CWPAPAccesspointItem::StoreL: done" ) );
    return iUid();
    }

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::Uid
// -----------------------------------------------------------------------------
//
const TDesC8& CWPAPAccesspointItem::Uid() const
	{
    return iUid;
    }

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::DeleteUidData
// -----------------------------------------------------------------------------
//
void CWPAPAccesspointItem::DeleteUidData() const
	{
    iCharacteristic.DeleteAllData();
    }

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::CWPAPAccesspointItem
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CWPAPAccesspointItem::CWPAPAccesspointItem( const TDesC& aDefaultName,
                                            CWPAPItemBase* aLogicalProxy,
                                            CWPAPItemBase* aPhysicalProxy,
                                            CWPAPItemBase* aNapdef,
                                            CWPCharacteristic& aCharacteristic )
                                        : iDefaultName( aDefaultName ),
                                          iNapdef( aNapdef ),
                                          iPhysicalProxy( aPhysicalProxy ),
                                          iLogicalProxy( aLogicalProxy ),
                                          iCharacteristic( aCharacteristic )
	{
	}

// -----------------------------------------------------------------------------
// CWPAPAccesspointItem::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CWPAPAccesspointItem::ConstructL()
	{
	}

//  End of File