diff -r fc7b30ed2058 -r 05bc53fe583b cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlan.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlan.cpp Tue Aug 31 15:35:44 2010 +0300 @@ -0,0 +1,1443 @@ +/* +* Copyright (c) 2009-2010 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 Lan Plugin interface implementation +* for Lan Bearer +* +* +*/ + + +#include "cmpluginlan.h" + +#include "datamobilitycommsdattypes.h" +#include +#include // For REComSession +#include + +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cmpluginlanTraces.h" +#endif + + +using namespace CMManager; +using namespace CommsDat; + +_LIT( KEmpty, "" ); + +_LIT( KLanBearerName, "LANBearer" ); +_LIT( KLanBearerAgent, "nullagt.agt" ); +_LIT( KLanBearerNif, "ethint" ); + +_LIT( KLanLDDFileName, "enet" ); +_LIT( KLanPDDFileName, "ethernet" ); + +_LIT( KLanLDDName, "Ethernet" ); +_LIT( KLanPDDName, "Ethernet.Wins" ); +_LIT( KLanPacketDriverName, "EtherPkt.drv" ); + + +const TBool KDefIpAddrFromServer = ETrue; +const TBool KDefIpDnsAddrFromServer = ETrue; +const TBool KDefIp6DnsAddrFromServer = ETrue; + +const TInt KLanLastSocketActivityTimeout = -1; +const TInt KLanLastSocketClosedTimeout = -1; +const TInt KLanLastSessionClosedTimeout = -1; + + +// --------------------------------------------------------- +// CCmPluginLan::NewOutgoingL() +// --------------------------------------------------------- +// +CCmPluginLan* CCmPluginLan::NewL( TCmPluginInitParam* aInitParam ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_NEWL_ENTRY ); + + CCmPluginLan* self = new( ELeave ) CCmPluginLan( aInitParam ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + OstTraceFunctionExit0( CCMPLUGINLAN_NEWL_EXIT ); + return self; + } + +// ---------------------------------------------------------------------------- +// CCmPluginLan::CreateInstanceL +// ---------------------------------------------------------------------------- +// +CCmPluginBaseEng* CCmPluginLan::CreateInstanceL( TCmPluginInitParam& aInitParam ) const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_CREATEINSTANCEL_ENTRY ); + + CCmPluginLan* self = new( ELeave ) CCmPluginLan( &aInitParam ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + OstTraceFunctionExit0( CCMPLUGINLAN_CREATEINSTANCEL_EXIT ); + return self; + } + +// --------------------------------------------------------- +// CCmPluginLan::~CCmPluginLan() +// --------------------------------------------------------- +// +CCmPluginLan::~CCmPluginLan() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_CCMPLUGINLAN_ENTRY ); + + ResetBearerRecords(); + + OstTraceFunctionExit0( CCMPLUGINLAN_CCMPLUGINLAN_EXIT ); + } + +// --------------------------------------------------------- +// CCmPluginLan::CCmPluginLan() +// --------------------------------------------------------- +// +CCmPluginLan::CCmPluginLan( TCmPluginInitParam* aInitParam ) + : + CCmPluginBaseEng( aInitParam ) + { + OstTraceFunctionEntry0( DUP1_CCMPLUGINLAN_CCMPLUGINLAN_ENTRY ); + + iBearerType = KUidLanBearerType; + iBearerRecord = NULL; + iBearerPriorityTableId = 0; + + OstTraceFunctionExit0( DUP1_CCMPLUGINLAN_CCMPLUGINLAN_EXIT ); + } + +// --------------------------------------------------------- +// CCmPluginLan::ConstructL() +// --------------------------------------------------------- +// +void CCmPluginLan::ConstructL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_CONSTRUCTL_ENTRY ); + + // Feature Manager is initialized by the CmmServer, so no need to do it here. + + CCmPluginBaseEng::ConstructL(); + + // Get bearer priority table ID. + TRAP_IGNORE( iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::TableIdL( iSession ) ); + + if ( !iBearerPriorityTableId ) + { + iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::CreateTableL( iSession ); + } + + OstTraceFunctionExit0( CCMPLUGINLAN_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------- +// CCmPluginLan::CanHandleIapIdL() +// --------------------------------------------------------- +// +TBool CCmPluginLan::CanHandleIapIdL( TUint32 aIapId ) const + { + OstTraceFunctionEntryExt( CCMPLUGINLAN_CANHANDLEIAPIDL_ENTRY, this ); + + TBool retVal( EFalse ); + + CCDIAPRecord *iapRecord = static_cast + ( CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) ); + + CleanupStack::PushL( iapRecord ); + iapRecord->SetRecordId( aIapId ); + + TRAPD( err, iapRecord->LoadL( iSession ) ); + + if ( !err ) + { + retVal = CanHandleIapIdL( iapRecord ); + } + + CleanupStack::PopAndDestroy( iapRecord ); + + OstTraceFunctionExitExt( CCMPLUGINLAN_CANHANDLEIAPIDL_EXIT, this, retVal ); + + return retVal; + } + +// --------------------------------------------------------- +// CCmPluginLan::CanHandleIapIdL() +// --------------------------------------------------------- +// +TBool CCmPluginLan::CanHandleIapIdL( CCDIAPRecord *aIapRecord ) const + { + OstTraceFunctionEntryExt( DUP1_CCMPLUGINLAN_CANHANDLEIAPIDL_ENTRY, this ); + + TBool retVal( EFalse ); + + if ( (TPtrC( aIapRecord->iServiceType ) == TPtrC( KCDTypeNameLANService ) ) && + TPtrC( aIapRecord->iBearerType ) == TPtrC( KCDTypeNameLANBearer ) ) + { + retVal = ETrue; + } + + OstTraceFunctionExitExt( DUP1_CCMPLUGINLAN_CANHANDLEIAPIDL_EXIT, this, retVal ); + + return retVal; + } + +// ---------------------------------------------------------------------------- +// CCmPluginLan::PreparePluginToUpdateRecordsL() +// ---------------------------------------------------------------------------- +// +void CCmPluginLan::PreparePluginToLoadRecordsL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_PREPAREPLUGINTOLOADRECORDSL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_PREPAREPLUGINTOLOADRECORDSL_EXIT ); + } + +// ---------------------------------------------------------------------------- +// CCmPluginLan::PreparePluginToUpdateRecordsL() +// ---------------------------------------------------------------------------- +// +void CCmPluginLan::PreparePluginToUpdateRecordsL( + RPointerArray& aGenRecordArray, + RPointerArray& aBearerSpecRecordArray ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_PREPAREPLUGINTOUPDATERECORDSL_ENTRY ); + + CCDIAPRecord* iapRecord = + static_cast( aGenRecordArray[KIapRecordIndex] ); + + CCDLANServiceRecord* serviceRecord = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + CheckIfNameModifiedL( iapRecord, serviceRecord ); + + CheckDNSServerAddressL( ETrue, + serviceRecord->iIp6NameServer1, + serviceRecord->iIp6NameServer2, + serviceRecord->iIp6DnsAddrFromServer ); + + CheckDNSServerAddressL( EFalse, + serviceRecord->iIpNameServer1, + serviceRecord->iIpNameServer2, + serviceRecord->iIpDnsAddrFromServer ); + + SetDaemonNameL( aGenRecordArray, aBearerSpecRecordArray ); + + OstTraceFunctionExit0( CCMPLUGINLAN_PREPAREPLUGINTOUPDATERECORDSL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::CreateServiceRecordL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::CreateServiceRecordL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_CREATESERVICERECORDL_ENTRY ); + + delete iServiceRecord; + iServiceRecord = NULL; + + iServiceRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + + CCDLANServiceRecord* lanServiceRecord = static_cast( iServiceRecord ); + + if ( FeatureManager::FeatureSupported( KFeatureIdIPv6 ) ) + { + lanServiceRecord->iIfNetworks.SetL( KDefIspIfNetworksIPv4IPv6LAN ); + } + else + { + lanServiceRecord->iIfNetworks.SetL( KDefIspIfNetworksIPv4 ); + } + + lanServiceRecord->iIpGateway.SetL( KUnspecifiedIPv4 ); + lanServiceRecord->iIpAddrFromServer.SetL( KDefIpAddrFromServer ); + + lanServiceRecord->iIpAddr.SetL( KUnspecifiedIPv4 ); + + lanServiceRecord->iIpDnsAddrFromServer.SetL( KDefIpDnsAddrFromServer ); + + lanServiceRecord->iIpNameServer1.SetL( KUnspecifiedIPv4 ); + lanServiceRecord->iIpNameServer2.SetL( KUnspecifiedIPv4 ); + lanServiceRecord->iIp6DnsAddrFromServer.SetL( KDefIp6DnsAddrFromServer ); + lanServiceRecord->iIp6NameServer1.SetL( KDynamicIpv6Address ); + lanServiceRecord->iIp6NameServer2.SetL( KDynamicIpv6Address ); + + if ( KDefIpAddrFromServer ) + { + lanServiceRecord->iConfigDaemonManagerName.SetL( KDaemonManagerName ); + lanServiceRecord->iConfigDaemonName.SetL( KConfigDaemonName ); + } + else + { + lanServiceRecord->iConfigDaemonManagerName.SetL( KEmpty ); + lanServiceRecord->iConfigDaemonName.SetL( KEmpty ); + } + + OstTraceFunctionExit0( CCMPLUGINLAN_CREATESERVICERECORDL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::LoadServiceRecordL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::LoadServiceRecordL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_LOADSERVICERECORDL_ENTRY ); + + if ( TPtrC( KCDTypeNameLANService ) == iIapRecord->iServiceType ) + { + iServiceRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + + ServiceRecord().SetRecordId( iIapRecord->iService ); + ServiceRecord().LoadL( iSession ); + } + else + { + // This IAP service is not supported by this plugin. + User::Leave( KErrNotSupported ); + } + + OstTraceFunctionExit0( CCMPLUGINLAN_LOADSERVICERECORDL_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::PrepareToCopyDataL +// --------------------------------------------------------------------------- +// +void CCmPluginLan::PrepareToCopyDataL( CCmPluginBaseEng* /*aCopyInstance*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_PREPARETOCOPYDATAL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_PREPARETOCOPYDATAL_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::CopyServiceRecordL +// --------------------------------------------------------------------------- +// +CommsDat::CCDRecordBase* CCmPluginLan::CopyServiceRecordL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_COPYSERVICERECORDL_ENTRY ); + + // New service record to be returned. + CCDRecordBase* serviceRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + CleanupStack::PushL( serviceRecord ); + + CCDLANServiceRecord* tempServiceRecordPtrToNew = + static_cast( serviceRecord ); + + // CommsDat version of service record. + CCDLANServiceRecord* origServiceRecord = + static_cast( iServiceRecord ); + + if ( !origServiceRecord->iRecordTag.IsNull() ) + { + tempServiceRecordPtrToNew->iRecordTag.SetL( + origServiceRecord->iRecordTag ); + } + if ( !origServiceRecord->iRecordName.IsNull() ) + { + tempServiceRecordPtrToNew->iRecordName.SetL( + origServiceRecord->iRecordName ); + } + if ( !origServiceRecord->iServiceEnableLlmnr.IsNull() ) + { + tempServiceRecordPtrToNew->iServiceEnableLlmnr.SetL( + origServiceRecord->iServiceEnableLlmnr ); + } + if ( !origServiceRecord->iIfNetworks.IsNull() ) + { + tempServiceRecordPtrToNew->iIfNetworks.SetL( + origServiceRecord->iIfNetworks ); + } + if ( !origServiceRecord->iIpNetmask.IsNull() ) + { + tempServiceRecordPtrToNew->iIpNetmask.SetL( + origServiceRecord->iIpNetmask ); + } + if ( !origServiceRecord->iIpGateway.IsNull() ) + { + tempServiceRecordPtrToNew->iIpGateway.SetL( + origServiceRecord->iIpGateway ); + } + if ( !origServiceRecord->iIpAddrFromServer.IsNull() ) + { + tempServiceRecordPtrToNew->iIpAddrFromServer.SetL( + origServiceRecord->iIpAddrFromServer ); + } + if ( !origServiceRecord->iIpAddr.IsNull() ) + { + tempServiceRecordPtrToNew->iIpAddr.SetL( + origServiceRecord->iIpAddr ); + } + if ( !origServiceRecord->iIpDnsAddrFromServer.IsNull() ) + { + tempServiceRecordPtrToNew->iIpDnsAddrFromServer.SetL( + origServiceRecord->iIpDnsAddrFromServer ); + } + if ( !origServiceRecord->iIpNameServer1.IsNull() ) + { + tempServiceRecordPtrToNew->iIpNameServer1.SetL( + origServiceRecord->iIpNameServer1 ); + } + if ( !origServiceRecord->iIpNameServer2.IsNull() ) + { + tempServiceRecordPtrToNew->iIpNameServer2.SetL( + origServiceRecord->iIpNameServer2 ); + } + if ( !origServiceRecord->iIp6DnsAddrFromServer.IsNull() ) + { + tempServiceRecordPtrToNew->iIp6DnsAddrFromServer.SetL( + origServiceRecord->iIp6DnsAddrFromServer ); + } + if ( !origServiceRecord->iIp6NameServer1.IsNull() ) + { + tempServiceRecordPtrToNew->iIp6NameServer1.SetL( + origServiceRecord->iIp6NameServer1 ); + } + if ( !origServiceRecord->iIp6NameServer2.IsNull() ) + { + tempServiceRecordPtrToNew->iIp6NameServer2.SetL( + origServiceRecord->iIp6NameServer2 ); + } + if ( !origServiceRecord->iIpAddrLeaseValidFrom.IsNull() ) + { + tempServiceRecordPtrToNew->iIpAddrLeaseValidFrom.SetL( + origServiceRecord->iIpAddrLeaseValidFrom ); + } + if ( !origServiceRecord->iIpAddrLeaseValidTo.IsNull() ) + { + tempServiceRecordPtrToNew->iIpAddrLeaseValidTo.SetL( + origServiceRecord->iIpAddrLeaseValidTo ); + } + if ( !origServiceRecord->iConfigDaemonManagerName.IsNull() ) + { + tempServiceRecordPtrToNew->iConfigDaemonManagerName.SetL( + origServiceRecord->iConfigDaemonManagerName ); + } + if ( !origServiceRecord->iConfigDaemonName.IsNull() ) + { + tempServiceRecordPtrToNew->iConfigDaemonName.SetL( + origServiceRecord->iConfigDaemonName ); + } + if ( !origServiceRecord->iServiceExtensionTableName.IsNull() ) + { + tempServiceRecordPtrToNew->iServiceExtensionTableName.SetL( + origServiceRecord->iServiceExtensionTableName ); + } + if ( !origServiceRecord->iServiceExtensionTableRecordId.IsNull() ) + { + tempServiceRecordPtrToNew->iServiceExtensionTableRecordId.SetL( + origServiceRecord->iServiceExtensionTableRecordId ); + } + + CleanupStack::Pop( serviceRecord ); + + OstTraceFunctionExit0( CCMPLUGINLAN_COPYSERVICERECORDL_EXIT ); + return serviceRecord; + } + +// ---------------------------------------------------------------------------- +// CCmPluginLan::UpdateServiceRecordL() +// ---------------------------------------------------------------------------- +// +void CCmPluginLan::UpdateServiceRecordL( + RPointerArray& aGenRecordArray, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_UPDATESERVICERECORDL_ENTRY ); + + // Delete the original record and create a copy from the client's copy. + delete iServiceRecord; + iServiceRecord = NULL; + + iServiceRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + + CCDLANServiceRecord* origServiceRecord = static_cast( iServiceRecord ); + + // Client's copy of lan service record. + CCDLANServiceRecord* clientServiceRecordCopy = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + CopyRecordFieldsL( *clientServiceRecordCopy, *origServiceRecord ); + + origServiceRecord->SetElementId( clientServiceRecordCopy->ElementId() ); + + if ( !origServiceRecord->RecordId() ) + { + origServiceRecord->SetRecordId( KCDNewRecordRequest ); + origServiceRecord->StoreL( iSession ); + + // Have to be "reloaded" to get possible default values from template records. + origServiceRecord->LoadL( iSession ); + + // Update received element ID to client's copy too. + clientServiceRecordCopy->SetElementId( origServiceRecord->ElementId() ); + } + else + { + origServiceRecord->ModifyL( iSession ); + } + + CCmPluginBaseEng::CopyRecordFieldsL( *origServiceRecord, + *clientServiceRecordCopy ); + + OstTraceFunctionExit0( CCMPLUGINLAN_UPDATESERVICERECORDL_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::CreateBearerRecordsL +// --------------------------------------------------------------------------- +// +void CCmPluginLan::CreateBearerRecordsL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_CREATEBEARERRECORDSL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_CREATEBEARERRECORDSL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::LoadBearerRecordsL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::LoadBearerRecordsL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_LOADBEARERRECORDSL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_LOADBEARERRECORDSL_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::ServiceRecord() +// --------------------------------------------------------------------------- +// +CCDLANServiceRecord& CCmPluginLan::ServiceRecord() const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SERVICERECORD_ENTRY ); + + return *static_cast( iServiceRecord ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::ServiceRecordIdLC +// --------------------------------------------------------------------------- +// +TUint32 CCmPluginLan::ServiceRecordId() const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SERVICERECORDID_ENTRY ); + + return ServiceRecord().RecordId(); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::ServiceRecordNameLC +// --------------------------------------------------------------------------- +// +void CCmPluginLan::ServiceRecordNameLC( HBufC* &aName ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SERVICERECORDNAMELC_ENTRY ); + + aName = TPtrC( KCDTypeNameLANService ).AllocLC(); + + OstTraceFunctionExit0( CCMPLUGINLAN_SERVICERECORDNAMELC_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::BearerRecordIdL() +// --------------------------------------------------------------------------- +// +void CCmPluginLan::BearerRecordIdL( TUint32& aRecordId ) + { + CCDLANBearerRecord* lanBearerRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANBearerRecord ) ); + CleanupStack::PushL( lanBearerRecord ); + + lanBearerRecord->iRecordName.SetL( TPtrC( KLanBearerName ) ); + if ( !lanBearerRecord->FindL( iSession ) ) + { // Bearer not found -> create dummy values. + lanBearerRecord->SetRecordId( KCDNewRecordRequest ); + lanBearerRecord->iBearerAgent = KLanBearerAgent; + lanBearerRecord->iRecordName = KLanBearerName; + lanBearerRecord->iLanBearerNifName = KLanBearerNif; + + lanBearerRecord->iLanBearerLddFilename = KLanLDDFileName; + lanBearerRecord->iLanBearerLddName = KLanLDDName; + lanBearerRecord->iLanBearerPddFilename = KLanPDDFileName; + lanBearerRecord->iLanBearerPddName = KLanPDDName; + lanBearerRecord->iLanBearerPacketDriverName = KLanPacketDriverName; + lanBearerRecord->iLastSocketActivityTimeout = (TUint32)KLanLastSocketActivityTimeout; + lanBearerRecord->iLastSessionClosedTimeout = (TUint32)KLanLastSessionClosedTimeout; + lanBearerRecord->iLastSocketClosedTimeout = (TUint32)KLanLastSocketClosedTimeout; + + lanBearerRecord->StoreL( iSession ); + } + + aRecordId = lanBearerRecord->RecordId(); + + CleanupStack::PopAndDestroy( lanBearerRecord ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::BearerRecordNameLC() +// --------------------------------------------------------------------------- +// +void CCmPluginLan::BearerRecordNameLC( HBufC*& aBearerName ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_BEARERRECORDNAMELC_ENTRY ); + + aBearerName = TPtrC( KCDTypeNameLANBearer ).AllocLC(); + + OstTraceFunctionExit0( CCMPLUGINLAN_BEARERRECORDNAMELC_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::GetBearerSpecificRecordsL +// --------------------------------------------------------------------------- +// +void CCmPluginLan::GetBearerSpecificRecordsL( + RPointerArray& /*aRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERSPECIFICRECORDSL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERSPECIFICRECORDSL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::DeleteBearerRecordsL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::DeleteBearerRecordsL() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_DELETEBEARERRECORDSL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_DELETEBEARERRECORDSL_EXIT ); + } + +// ---------------------------------------------------------------------------- +// CCmPluginLan::UpdateBearerRecordsL() +// ---------------------------------------------------------------------------- +// +void CCmPluginLan::UpdateBearerRecordsL( + RPointerArray& /*aGenRecordArray*/, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_UPDATEBEARERRECORDSL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_UPDATEBEARERRECORDSL_EXIT ); + } + +// --------------------------------------------------------- +// CCmPluginLan::ResetBearerRecords() +// --------------------------------------------------------- +// +void CCmPluginLan::ResetBearerRecords() + { + OstTraceFunctionEntry0( CCMPLUGINLAN_RESETBEARERRECORDS_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_RESETBEARERRECORDS_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::SetDaemonNameL +// --------------------------------------------------------------------------- +// +void CCmPluginLan::SetDaemonNameL( + RPointerArray& aGenRecordArray, + RPointerArray& aBearerSpecRecordArray ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SETDAEMONNAMEL_ENTRY ); + + // We have to check first that these values have not been set (or changed) + // by any 3rd party SW to ensure that we don't break their settings. + HBufC* daemonName = GetBearerStringAttributeL( + ECmConfigDaemonManagerName, + aGenRecordArray, + aBearerSpecRecordArray ); + if ( daemonName ) + { + if ( daemonName->Compare( KDaemonManagerName ) != 0 ) + { + delete daemonName; + OstTraceFunctionExit1( CCMPLUGINWLAN_SETDAEMONNAMEL_EXIT, this ); + OstTraceFunctionExit0( CCMPLUGINLAN_SETDAEMONNAMEL_EXIT ); + return; + } + delete daemonName; + } + + // Use DHCP if we can. + TBool ipfromSrv = GetBearerBoolAttributeL( + ECmIPAddFromServer, + aGenRecordArray, + aBearerSpecRecordArray ); + if ( ipfromSrv ) + { + SetBearerStringAttributeL( + ECmConfigDaemonManagerName, + KDaemonManagerName, + aGenRecordArray, + aBearerSpecRecordArray ); + SetBearerStringAttributeL(ECmConfigDaemonName, + KConfigDaemonName, + aGenRecordArray, + aBearerSpecRecordArray ); + } + else + { + if ( FeatureManager::FeatureSupported( KFeatureIdIPv6 ) ) + { + SetBearerStringAttributeL( + ECmConfigDaemonManagerName, + KDaemonManagerName, + aGenRecordArray, + aBearerSpecRecordArray ); + SetBearerStringAttributeL( + ECmConfigDaemonName, + KConfigDaemonName, + aGenRecordArray, + aBearerSpecRecordArray ); + } + else + { + SetBearerStringAttributeL( + ECmConfigDaemonManagerName, + KNullDesC(), + aGenRecordArray, + aBearerSpecRecordArray ); + SetBearerStringAttributeL( + ECmConfigDaemonName, + KNullDesC(), + aGenRecordArray, + aBearerSpecRecordArray ); + } + } + + OstTraceFunctionExit0( DUP1_CCMPLUGINLAN_SETDAEMONNAMEL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::GetBearerIntAttributeL +// -------------------------------------------------------------------------- +// +TUint32 CCmPluginLan::GetBearerIntAttributeL( + TUint32 aAttribute, + RPointerArray& aGenRecordArray, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERINTATTRIBUTEL_ENTRY ); + + TUint32 retVal( 0 ); + + CCDLANServiceRecord* serviceRecord = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + switch ( aAttribute ) + { + case ECmInvalidAttribute: + { + // This attribute has been deprecated since Symbian^4. + User::Leave( KErrNotSupported ); //TODO, update attribute definition comments. + } + break; + case ECmExtensionLevel: + { + retVal = KExtensionBaseLevel; + } + break; + case ECmCommsDBBearerType: + { + retVal = KCommDbBearerLAN; + } + break; + case ECmDefaultUiPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; + case ECmDefaultPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; + case ELanServiceExtensionTableRecordId: + { + if ( !serviceRecord->iServiceExtensionTableRecordId.IsNull() ) + { + retVal = serviceRecord->iServiceExtensionTableRecordId.RecordId(); + } + else + { + retVal = 0; + } + } + break; + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERINTATTRIBUTEL_EXIT ); + return retVal; + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::GetBearerBoolAttributeL +// -------------------------------------------------------------------------- +// +TBool CCmPluginLan::GetBearerBoolAttributeL( + TUint32 aAttribute, + RPointerArray& aGenRecordArray, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERBOOLATTRIBUTEL_ENTRY ); + + TBool retVal( 0 ); + + CCDLANServiceRecord* serviceRecord = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + switch ( aAttribute ) + { + case ECmCoverage: + { + retVal = ETrue; + } + break; + case ECmDestination: + { + retVal = EFalse; + } + break; + case ECmBearerHasUi: + { + retVal = EFalse; + } + break; + case ECmIPv6Supported: + { + retVal = FeatureManager::FeatureSupported( KFeatureIdIPv6 ); + } + break; + case ECmIPAddFromServer: + case ELanIpAddrFromServer: + { + retVal = serviceRecord->iIpAddrFromServer; + } + break; + case ECmIPDNSAddrFromServer: + case ELanIpDNSAddrFromServer: + { + retVal = serviceRecord->iIpDnsAddrFromServer; + } + break; + case ECmIP6DNSAddrFromServer: + case ELanIp6DNSAddrFromServer: + { + retVal = serviceRecord->iIp6DnsAddrFromServer; + } + break; + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERBOOLATTRIBUTEL_EXIT ); + return retVal; + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::GetBearerStringAttributeL +// -------------------------------------------------------------------------- +// +HBufC* CCmPluginLan::GetBearerStringAttributeL( + TUint32 aAttribute, + RPointerArray& aGenRecordArray, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERSTRINGATTRIBUTEL_ENTRY ); + + HBufC* retVal = NULL; + + CCDLANServiceRecord* serviceRecord = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + switch ( aAttribute ) + { + case ECmIFNetworks: + case ELanIfNetworks: + { + retVal = TPtrC( serviceRecord->iIfNetworks ).AllocL(); + } + break; + case ECmIPNetmask: + case ELanIpNetMask: + { + retVal = TPtrC( serviceRecord->iIpNetmask ).AllocL(); + } + break; + case ECmIPGateway: + case ELanIpGateway: + { + retVal = TPtrC( serviceRecord->iIpGateway ).AllocL(); + } + break; + case ECmIPAddress: + case ELanIpAddr: + { + retVal = TPtrC( serviceRecord->iIpAddr ).AllocL(); + } + break; + case ECmIPNameServer1: + case ELanIpNameServer1: + { + retVal = TPtrC( serviceRecord->iIpNameServer1 ).AllocL(); + } + break; + case ECmIPNameServer2: + case ELanIpNameServer2: + { + retVal = TPtrC( serviceRecord->iIpNameServer2 ).AllocL(); + } + break; + case ECmIP6NameServer1: + case ELanIp6NameServer1: + { + retVal = TPtrC( serviceRecord->iIp6NameServer1 ).AllocL(); + } + break; + case ECmIP6NameServer2: + case ELanIp6NameServer2: + { + retVal = TPtrC( serviceRecord->iIp6NameServer2 ).AllocL(); + } + break; + case ECmIPAddrLeaseValidFrom: + case ELanIpAddrLeaseValidFrom: + { + retVal = TPtrC( serviceRecord->iIpAddrLeaseValidFrom ).AllocL(); + } + break; + case ECmIPAddrLeaseValidTo: + case ELanIpAddrLeaseValidTo: + { + retVal = TPtrC( serviceRecord->iIpAddrLeaseValidTo ).AllocL(); + } + break; + case ECmConfigDaemonManagerName: + case ELanConfigDaemonManagerName: + { + retVal = TPtrC( serviceRecord->iConfigDaemonManagerName ).AllocL(); + } + break; + case ECmConfigDaemonName: + case ELanConfigDaemonName: + { + retVal = TPtrC( serviceRecord->iConfigDaemonName ).AllocL(); + } + break; + case ELanServiceExtensionTableName: + { + retVal = TPtrC( serviceRecord->iServiceExtensionTableName ).AllocL(); + } + break; + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERSTRINGATTRIBUTEL_EXIT ); + return retVal; + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::GetBearerString8AttributeL +// -------------------------------------------------------------------------- +// +HBufC8* CCmPluginLan::GetBearerString8AttributeL( + TUint32 aAttribute, + RPointerArray& /*aGenRecordArray*/, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERSTRING8ATTRIBUTEL_ENTRY ); + + HBufC8* retVal( NULL ); + + switch ( aAttribute ) + { + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERSTRING8ATTRIBUTEL_EXIT ); + return retVal; + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::SetBearerIntAttributeL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::SetBearerIntAttributeL( + TUint32 aAttribute, + TUint32 aValue, + RPointerArray& aGenRecordArray, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SETBEARERINTATTRIBUTEL_ENTRY ); + + CCDLANServiceRecord* serviceRecord = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + switch ( aAttribute ) + { + case ECmExtensionLevel: + case ECmCommsDBBearerType: + case ECmDefaultUiPriority: + case ECmDefaultPriority: + { + User::Leave( KErrArgument ); + } + break; + case ELanServiceExtensionTableRecordId: + { + serviceRecord->iServiceExtensionTableRecordId = aValue; + } + break; + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_SETBEARERINTATTRIBUTEL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::SetBearerBoolAttributeL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::SetBearerBoolAttributeL( + TUint32 aAttribute, + TBool aValue, + RPointerArray& aGenRecordArray, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SETBEARERBOOLATTRIBUTEL_ENTRY ); + + CCDLANServiceRecord* serviceRecord = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + switch ( aAttribute ) + { + case ECmIPAddFromServer: + case ELanIpAddrFromServer: + { + serviceRecord->iIpAddrFromServer.SetL( aValue ); + } + break; + case ECmIPDNSAddrFromServer: + case ELanIpDNSAddrFromServer: + { + serviceRecord->iIpDnsAddrFromServer.SetL( aValue ); + } + break; + case ECmIP6DNSAddrFromServer: + case ELanIp6DNSAddrFromServer: + { + serviceRecord->iIp6DnsAddrFromServer.SetL( aValue ); + } + break; + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_SETBEARERBOOLATTRIBUTEL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::SetBearerStringAttributeL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::SetBearerStringAttributeL( + TUint32 aAttribute, + const TDesC16& aValue, + RPointerArray& aGenRecordArray, + RPointerArray& aBearerSpecRecordArray ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SETBEARERSTRINGATTRIBUTEL_ENTRY ); + + CCDLANServiceRecord* serviceRecord = + static_cast( aGenRecordArray[KServiceRecordIndex] ); + + switch ( aAttribute ) + { + case ECmIFNetworks: + case ELanIfNetworks: + { + serviceRecord->iIfNetworks.SetL( aValue ); + } + break; + case ECmIPNetmask: + case ELanIpNetMask: + { + serviceRecord->iIpNetmask.SetL( aValue ); + } + break; + case ECmIPGateway: + case ELanIpGateway: + { + serviceRecord->iIpGateway.SetL( aValue ); + } + break; + case ECmIPAddress: + case ELanIpAddr: + { + if ( ( aValue.Compare( KUnspecifiedIPv4 ) == 0 ) || + ( aValue.Compare( KNullDesC ) == 0 ) ) + { + // If unspecified or NULL address is set dynamic + // IP must be enabled. + SetBearerBoolAttributeL( ECmIPAddFromServer, + ETrue, + aGenRecordArray, + aBearerSpecRecordArray ); + } + else + { + // If valid address is set dynamic IP is disabled. + SetBearerBoolAttributeL( ECmIPAddFromServer, + EFalse, + aGenRecordArray, + aBearerSpecRecordArray ); + } + serviceRecord->iIpAddr.SetL( aValue ); + } + break; + case ECmIPNameServer1: + case ELanIpNameServer1: + { + serviceRecord->iIpNameServer1.SetL( aValue ); + } + break; + case ECmIPNameServer2: + case ELanIpNameServer2: + { + serviceRecord->iIpNameServer2.SetL( aValue ); + } + break; + case ECmIP6NameServer1: + case ELanIp6NameServer1: + { + serviceRecord->iIp6NameServer1.SetL( aValue ); + } + break; + case ECmIP6NameServer2: + case ELanIp6NameServer2: + { + serviceRecord->iIp6NameServer2.SetL( aValue ); + } + break; + case ECmIPAddrLeaseValidFrom: + case ELanIpAddrLeaseValidFrom: + { + serviceRecord->iIpAddrLeaseValidFrom.SetL( aValue ); + } + break; + case ECmIPAddrLeaseValidTo: + case ELanIpAddrLeaseValidTo: + { + serviceRecord->iIpAddrLeaseValidTo.SetL( aValue ); + } + break; + case ECmConfigDaemonManagerName: + case ELanConfigDaemonManagerName: + { + serviceRecord->iConfigDaemonManagerName.SetL( aValue ); + } + break; + case ECmConfigDaemonName: + case ELanConfigDaemonName: + { + serviceRecord->iConfigDaemonName.SetL( aValue ); + } + break; + case ELanServiceExtensionTableName: + { + serviceRecord->iServiceExtensionTableName.SetL( aValue ); + } + break; + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_SETBEARERSTRINGATTRIBUTEL_EXIT ); + } + +// -------------------------------------------------------------------------- +// CCmPluginLan::SetBearerString8AttributeL +// -------------------------------------------------------------------------- +// +void CCmPluginLan::SetBearerString8AttributeL( + TUint32 aAttribute, + const TDesC8& /*aValue*/, + RPointerArray& /*aGenRecordArray*/, + RPointerArray& /*aBearerSpecRecordArray*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_SETBEARERSTRING8ATTRIBUTEL_ENTRY ); + + switch ( aAttribute ) + { + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_SETBEARERSTRING8ATTRIBUTEL_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::GetBearerInfoIntL +// --------------------------------------------------------------------------- +// +TUint32 CCmPluginLan::GetBearerInfoIntL( TUint32 aAttribute ) const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERINFOINTL_ENTRY ); + + TUint32 retVal( 0 ); + switch ( aAttribute ) + { + case ECmBearerType: + { + retVal = iBearerType; + } + break; + case ECmCommsDBBearerType: + { + retVal = KCommDbBearerLAN; + } + break; + case ECmDefaultUiPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; + case ECmDefaultPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; + case ECmExtensionLevel: + { + retVal = KExtensionBaseLevel; + } + break; + case ECmSeamlessnessLevel: + { + retVal = ESeamlessnessShowprogress; + } + break; + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERINFOINTL_EXIT ); + return retVal; + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::GetBearerInfoBoolL +// --------------------------------------------------------------------------- +// +TBool CCmPluginLan::GetBearerInfoBoolL( TUint32 aAttribute ) const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERINFOBOOLL_ENTRY ); + + TBool retVal( EFalse ); + + switch ( aAttribute ) + { + case ECmCoverage: + { +#ifndef __WINS__ + retVal = EFalse; +#else + retVal = ETrue; +#endif + } + break; + case ECmDestination: + { + retVal = EFalse; + } + break; + case ECmBearerHasUi: + { + retVal = EFalse; + } + break; + case ECmIPv6Supported: + { + retVal = FeatureManager::FeatureSupported( KFeatureIdIPv6 ); + } + break; + case ECmVirtual: + { + retVal = EFalse; + } + break; + + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERINFOBOOLL_EXIT ); + return retVal; + } + + +// --------------------------------------------------------------------------- +// CCmPluginLan::GetBearerInfoStringL +// --------------------------------------------------------------------------- +// +HBufC* CCmPluginLan::GetBearerInfoStringL( TUint32 aAttribute ) const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERINFOSTRINGL_ENTRY ); + + HBufC* retVal( NULL ); + switch ( aAttribute ) + { + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERINFOSTRINGL_EXIT ); + return retVal; + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::GetBearerInfoString8L +// --------------------------------------------------------------------------- +// +HBufC8* CCmPluginLan::GetBearerInfoString8L( TUint32 aAttribute ) const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERINFOSTRING8L_ENTRY ); + + HBufC8* retVal( NULL ); + switch ( aAttribute ) + { + default: + { + User::Leave( KErrNotSupported ); + } + break; + } + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERINFOSTRING8L_EXIT ); + return retVal; + } + +// --------------------------------------------------------------------------- +// CCmPluginPacketData::CopyBearerRecordsL +// --------------------------------------------------------------------------- +// +void CCmPluginLan::CopyBearerRecordsL( CCmPluginBaseEng* /*aCopyInstance*/ ) + { + OstTraceFunctionEntry0( CCMPLUGINLAN_COPYBEARERRECORDSL_ENTRY ); + OstTraceFunctionExit0( CCMPLUGINLAN_COPYBEARERRECORDSL_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::GetBearerTableIdsToBeObserved +// --------------------------------------------------------------------------- +// +void CCmPluginLan::GetBearerTableIdsToBeObservedL( + RArray& aTableIdArray ) const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETBEARERTABLEIDSTOBEOBSERVED_ENTRY ); + + aTableIdArray.AppendL( KCDTIdLANServiceRecord ); + + OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERTABLEIDSTOBEOBSERVED_EXIT ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLan::GetDefPriorityL +// --------------------------------------------------------------------------- +// +TUint32 CCmPluginLan::GetDefPriorityL( const TUint32 aAttribute ) const + { + OstTraceFunctionEntry0( CCMPLUGINLAN_GETDEFPRIORITYL_ENTRY ); + + TUint32 retVal( KDataMobilitySelectionPolicyPriorityWildCard ); + + CCDGlobalBearerTypePriorizationRecord* priorityRecord = + new( ELeave ) CCDGlobalBearerTypePriorizationRecord( iBearerPriorityTableId ); + CleanupStack::PushL( priorityRecord ); + + priorityRecord->iServiceType.SetL( TPtrC( KCDTypeNameLANService ) ); + + if ( priorityRecord->FindL( iSession ) ) + { + priorityRecord->LoadL( iSession ); + switch ( aAttribute ) + { + case ECmDefaultPriority: + { + retVal = priorityRecord->iPriority; + } + break; + case ECmDefaultUiPriority: + { + retVal = priorityRecord->iUIPriority; + } + break; + default: + break; + } + } + CleanupStack::PopAndDestroy( priorityRecord ); + + OstTraceFunctionExit0( CCMPLUGINLAN_GETDEFPRIORITYL_EXIT ); + return retVal; + } + +// End of File