diff -r 05bc53fe583b -r 83ca720e2b9a cmmanager/cmmgr/Framework/Src/cmpluginlanbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Framework/Src/cmpluginlanbase.cpp Wed Sep 01 12:23:51 2010 +0100 @@ -0,0 +1,328 @@ +/* +* 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 base for Lan Plugin interface +* for Lan Bearer. +* +*/ +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include "cmlogger.h" +#include // For REComSession +#include +#include +#include "cmmanagerimpl.h" +#include +#include + +using namespace CMManager; +using namespace CommsDat; + +// default values for fields... +// CONSTANTS +_LIT( KEmpty, ""); + +_LIT( KLanBearerName, "LANBearer" ); +_LIT( KLanBearerAgent, "lanagt.agt" ); +_LIT( KLanBearerNif, "lannif" ); + +_LIT( KLanLDDName, "not used" ); +_LIT( KLanPDDName, "not used" ); + +const TInt KLanLastSocketActivityTimeout = -1; +const TInt KLanLastSocketClosedTimeout = -1; + +const TBool KDefIpAddrFromServer = ETrue; +const TBool KDefIpDnsAddrFromServer = ETrue; +const TBool KDefIp6DnsAddrFromServer = ETrue; + +static const TCmAttribConvTable SLanConvTbl[] = + { + { ELanBaseIfNetworks, ELanBaseRangeMax, NULL }, + { ELanBaseIfNetworks, KCDTIdLANIfNetworks, NULL }, + { ELanBaseIpNetMask, KCDTIdLANIpNetMask, &CheckIPv4ValidityL, + R_QTN_NETW_SETT_SUBNET_MASK, + KIpAddressWidth, EConvCompulsory | EConvIPv4, R_QTN_SELEC_SETTING_COMPULSORY, 0, NULL, NULL }, + { ELanBaseIpGateway, KCDTIdLANIpGateway, &CheckIPv4ValidityL, + R_QTN_NETW_SETT_DEFAULT_GATEWAY, + KIpAddressWidth, EConvCompulsory | EConvIPv4, R_QTN_SELEC_SETTING_COMPULSORY, 0, NULL, NULL }, + { ELanBaseIpAddrFromServer, KCDTIdLANIpAddrFromServer, NULL }, + { ELanBaseIpAddr, KCDTIdLANIpAddr, &CheckIPv4ValidityL, + R_QTN_SET_IP_ADDRESS, + KIpAddressWidth, EConvIPv4, R_QTN_SET_IP_ADDRESS_DYNAMIC, 0, NULL, NULL }, + { ELanBaseIpDNSAddrFromServer, KCDTIdLANIpDNSAddrFromServer, NULL, + R_QTN_SET_DNS_SERVERS_IP, + 0, 0, 0, 0, NULL, NULL }, + { ELanBaseIpNameServer1, KCDTIdLANIpNameServer1, &CheckIPv4ValidityL, + R_QTN_SET_PRIMARY_DNS, + KMaxIPv4NameServerLength, EConvIPv4, R_QTN_SET_DNS_SERVERS_AUTOMATIC, 0, NULL, NULL }, + { ELanBaseIpNameServer2, KCDTIdLANIpNameServer2, &CheckIPv4ValidityL, + R_QTN_SET_SECONDARY_DNS, + KMaxIPv4NameServerLength, EConvIPv4, R_QTN_SET_DNS_SERVERS_AUTOMATIC, 0, NULL, NULL }, + { ELanBaseIp6DNSAddrFromServer, KCDTIdLANIp6DNSAddrFromServer, NULL, + R_QTN_SET_DNS_SERVERS_IP, + 0, 0, 0, 0, NULL, NULL }, + { ELanBaseIp6NameServer1, KCDTIdLANIp6NameServer1, &CheckIPv6ValidityL }, + { ELanBaseIp6NameServer2, KCDTIdLANIp6NameServer2, &CheckIPv6ValidityL }, + { ELanBaseIpAddrLeaseValidFrom, KCDTIdLANIpAddrLeaseValidFrom, NULL }, + { ELanBaseIpAddrLeaseValidTo, KCDTIdLANIpAddrLeaseValidTo, NULL }, + { ELanBaseConfigDaemonManagerName, KCDTIdLANConfigDaemonManagerName, NULL }, + { ELanBaseConfigDaemonName, KCDTIdLANConfigDaemonName, NULL }, + { ELanBaseServiceExtensionTableName, KCDTIdLANServiceExtensionTableName, NULL }, + { ELanBaseServiceExtensionTableRecordId, KCDTIdLANServiceExtensionTableRecordId, &CheckRecordIdValidityL }, + { 0,0, NULL } + }; + +static const TCmCommonAttrConvArrayItem SCommonConvTbl[] = +{ + { ELanBaseIfNetworks, ECmIFNetworks }, + { ELanBaseIpNetMask, ECmIPNetmask }, + { ELanBaseIpGateway, ECmIPGateway }, + { ELanBaseIpAddrFromServer, ECmIPAddFromServer }, + { ELanBaseIpAddr, ECmIPAddress }, + { ELanBaseIpDNSAddrFromServer, ECmIPDNSAddrFromServer }, + { ELanBaseIpNameServer1, ECmIPNameServer1 }, + { ELanBaseIpNameServer2, ECmIPNameServer2 }, + { ELanBaseIp6DNSAddrFromServer, ECmIP6DNSAddrFromServer }, + { ELanBaseIp6NameServer1, ECmIP6NameServer1 }, + { ELanBaseIp6NameServer2, ECmIP6NameServer2 }, + { ELanBaseIpAddrLeaseValidFrom, ECmIPAddrLeaseValidFrom }, + { ELanBaseIpAddrLeaseValidTo, ECmIPAddrLeaseValidTo }, + { ELanBaseConfigDaemonManagerName, ECmConfigDaemonManagerName }, + { ELanBaseConfigDaemonName, ECmConfigDaemonName }, + { 0, 0 } + }; + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::CCmPluginLanBase() +// --------------------------------------------------------------------------- +// +EXPORT_C CCmPluginLanBase::CCmPluginLanBase( TCmPluginInitParam* aInitParam ) + : CCmPluginBaseEng( aInitParam ) + { + CLOG_CREATE; + + + } + +EXPORT_C CCmPluginLanBase::~CCmPluginLanBase() + { + CLOG_CLOSE; + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::ConstructL() +// --------------------------------------------------------------------------- +// +EXPORT_C void CCmPluginLanBase::ConstructL() + { + LOGGER_ENTERFN( "CCmPluginLanBase::ConstructL" ); + + CCmPluginBaseEng::ConstructL(); + + AddConverstionTableL( (CCDRecordBase**)&iServiceRecord, NULL, SLanConvTbl ); + AddCommonConversionTableL( SCommonConvTbl ); + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::RunSettingsL() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CCmPluginLanBase::RunSettingsL() + { + User::Leave( KErrNotSupported ); + return 0; + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::InitializeWithUiL() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CCmPluginLanBase::InitializeWithUiL( + TBool /*aManuallyConfigure*/ ) + { + User::Leave(KErrNotSupported); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::LoadServiceSettingL() +// --------------------------------------------------------------------------- +// +EXPORT_C void CCmPluginLanBase::LoadServiceSettingL() + { + LOGGER_ENTERFN( "CCmPluginLanBase::LoadServiceSettingL" ); + + if( TPtrC(KCDTypeNameLANService) == iIapRecord->iServiceType ) + { + iServiceRecord = static_cast + (CCDRecordBase::RecordFactoryL(KCDTIdLANServiceRecord)); + } + else + // this IAP service is not supported by this plugin. + { + User::Leave( KErrNotSupported ); + } + + CCmPluginBaseEng::LoadServiceSettingL(); + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::ServiceRecord() +// --------------------------------------------------------------------------- +// +EXPORT_C CCDLANServiceRecord& CCmPluginLanBase::ServiceRecord()const + { + LOGGER_ENTERFN( "CCmPluginLanBase::ServiceRecord" ); + return *static_cast(iServiceRecord); + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::ServiceRecordIdLC +// --------------------------------------------------------------------------- +// +EXPORT_C void CCmPluginLanBase::ServiceRecordIdLC( HBufC* &aName, + TUint32& aRecordId ) + { + LOGGER_ENTERFN( "CCmPluginLanBase::ServiceRecordIdLC" ); + + aName = TPtrC( KCDTypeNameLANService ).AllocLC(); + aRecordId = iServiceRecord->RecordId(); + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::BearerRecordIdLC() +// --------------------------------------------------------------------------- +// +EXPORT_C void CCmPluginLanBase::BearerRecordIdLC( HBufC* &aBearerName, + TUint32& aRecordId ) + { + LOGGER_ENTERFN( "CCmPluginLanBase::BearerRecordIdLC" ); + + CCDLANBearerRecord* tmprec = static_cast + (CCDRecordBase::RecordFactoryL( KCDTIdLANBearerRecord )); + CleanupStack::PushL( tmprec ); + + tmprec->iRecordName.SetL( TPtrC(iBearerRecName) ); + if ( !tmprec->FindL( Session() ) ) + { // bearer not found -> create dummy values + CLOG_WRITE( "No bearer found" ); + + tmprec->SetRecordId( KCDNewRecordRequest ); + tmprec->iBearerAgent = KLanBearerAgent; + tmprec->iRecordName = KLanBearerName; + tmprec->iLanBearerNifName = KLanBearerNif; + tmprec->iLanBearerLddName = KLanLDDName; + tmprec->iLanBearerPddName = KLanPDDName; + tmprec->iLastSocketActivityTimeout = + (TUint32)KLanLastSocketActivityTimeout; + tmprec->iLastSocketClosedTimeout = + (TUint32)KLanLastSocketClosedTimeout; + + tmprec->StoreL( Session() ); + } + + aRecordId = tmprec->RecordId(); + + CLOG_WRITE_2( "Name: [%S], id: [%d]", + &tmprec->iRecordName.GetL(), + aRecordId ); + + CleanupStack::PopAndDestroy( tmprec ); + + aBearerName = TPtrC(KCDTypeNameLANBearer).AllocLC(); + } + +// --------------------------------------------------------------------------- +// CCmPluginLanBase::CreateNewServiceRecordL() +// --------------------------------------------------------------------------- +// +EXPORT_C void CCmPluginLanBase::CreateNewServiceRecordL() + { + LOGGER_ENTERFN( "CCmPluginLanBase::CreateNewServiceRecordL" ); + + delete iServiceRecord; + iServiceRecord = NULL; + + iServiceRecord = static_cast + (CCDRecordBase::RecordFactoryL(KCDTIdLANServiceRecord)); + + // I do not think that we have to use the default record, + // but for compatibility with ApEngine, we write all fields + + CCDLANServiceRecord* record = + static_cast(iServiceRecord); + + + if( FeatureSupported( KFeatureIdIPv6 ) ) + { + record->iIfNetworks.SetL( KDefIspIfNetworksIPv4IPv6LAN ); + } + else + { + record->iIfNetworks.SetL( KDefIspIfNetworksIPv4 ); + } + +// record->iIpNetmask.SetL(); + + record->iIpGateway.SetL( KUnspecifiedIPv4 ); + record->iIpAddrFromServer.SetL( KDefIpAddrFromServer ); + + record->iIpAddr.SetL( KUnspecifiedIPv4 ); + + record->iIpDnsAddrFromServer.SetL( KDefIpDnsAddrFromServer ); + + record->iIpNameServer1.SetL( KUnspecifiedIPv4 ); + record->iIpNameServer2.SetL( KUnspecifiedIPv4 ); + record->iIp6DnsAddrFromServer.SetL( KDefIp6DnsAddrFromServer ); + record->iIp6NameServer1.SetL( KDynamicIpv6Address ); + record->iIp6NameServer2.SetL( KDynamicIpv6Address ); + +// record->iIpAddrLeaseValidFrom.SetL(); +// record->iIpAddrLeaseValidTo.SetL(); + + if ( KDefIpAddrFromServer ) + { + record->iConfigDaemonManagerName.SetL( KDaemonManagerName ); + record->iConfigDaemonName.SetL( KConfigDaemonName ); + } + else + { + record->iConfigDaemonManagerName.SetL( KEmpty ); + record->iConfigDaemonName.SetL( KEmpty ); + } + +// record->iServiceExtensionTableName.SetL(); +// record->iServiceExtensionTableRecordId.SetL(); + } + +// -------------------------------------------------------------------------- +// CCmPluginLanBase::PrepareToUpdateRecordsL() +// -------------------------------------------------------------------------- +// +EXPORT_C void CCmPluginLanBase::PrepareToUpdateRecordsL() + { + LOGGER_ENTERFN( "CCmPluginLanBase::PrepareToUpdateRecordsL" ); + + CheckDNSServerAddressL( ETrue, + ServiceRecord().iIp6NameServer1, + ServiceRecord().iIp6NameServer2, + ServiceRecord().iIp6DnsAddrFromServer ); + + CheckDNSServerAddressL( EFalse, + ServiceRecord().iIpNameServer1, + ServiceRecord().iIpNameServer2, + ServiceRecord().iIpDnsAddrFromServer ); + }