diff -r bb2423252ea3 -r c1029e558ef5 linklayerprotocols/tundriver/src/tundriverprovision.cpp --- a/linklayerprotocols/tundriver/src/tundriverprovision.cpp Wed Sep 15 13:53:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,310 +0,0 @@ -/** -* Copyright (c) 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: -* Provision implemtation for Ipv4 and Ipv6 binders for tundriver. -* -* -*/ - -/** - @file tundriverprovision.cpp - @internalTechnology -*/ - -#include -#include -#include -#include -#include -#include "tundrivermcpr.h" -#include "tundriverprovision.h" - -using namespace ESock; - -void CTunDriverProtoProvision::InitialiseConfigL(CCommsDatIapView* aIapView) -/** -* CTunDriverProtoProvision::InitialiseConfigL is called from TunDriver MCPR to initialze -* tundriver with values from comms database. -* @param aIapView -* @returns -*/ - { - ProvisionNetworkConfigL(aIapView); - } - -void CTunDriverProtoProvision::ProvisionNetworkConfigL(CCommsDatIapView* aIapView) -/** -* CTunDriverProtoProvision::ProvisionNetworkConfigL is called from TunDriver MCPR to identify -* tundriver is associated with protocol IPv4 or IPv6 -* @param aIapView -* @returns -*/ - { - HBufC* buf = NULL; - aIapView->GetTextL(KCDTIdLANIfNetworks, buf); - CleanupStack::PushL(buf); - if (buf->Length() == 0) - { - User::Leave(KErrCorrupt); - } - - TPtrC16 networks; - networks.Set(*buf); - TPtrC16 current; - TUint32 order = 0; - TInt commaPos = 0; - while (commaPos != KErrNotFound) - { - commaPos = networks.LocateF(','); - if (commaPos == KErrNotFound) - { - // take all of string - current.Set(networks); - } - else - { - current.Set(networks.Ptr(), commaPos); - } - - if (current.CompareF(_L("ip")) == KErrNone) - { - ProvisionIp4ConfigL(aIapView, order); - } -#ifdef IPV6SUPPORT - else if (current.CompareF(_L("ip6")) == KErrNone) - { - ProvisionIp6ConfigL(aIapView, order); - } -#endif - else - { - User::Leave(KErrCorrupt); - } - - order++; - networks.Set(networks.Mid(commaPos+1)); - } - - CleanupStack::PopAndDestroy(buf); - } - - -void CTunDriverProtoProvision::ProvisionIp4ConfigL(CCommsDatIapView* aIapView, TUint32 aOrder) -/** -* CTunDriverProtoProvision::ProvisionIp4ConfigL will initialize with IPv4 Header values -* for tundriver IPv4 configuration. like IPaddress, NetMask, Gateway and DNS Address. -* @param aIapView -* @returns -*/ - { - iIp4Provision.SetOrder(aOrder); - - // Read IP address configuration parameters - TBool serverRequired; - aIapView->GetBoolL(KCDTIdLANIpAddrFromServer, serverRequired); - - TUint32 addr; - TInt err; - - iIp4Provision.SetLocalAddr(KInetAddrNone); - iIp4Provision.SetNetMask(KInetAddrNone); - iIp4Provision.SetDefGateway(KInetAddrNone); - iIp4Provision.SetPrimaryDns(KInetAddrNone); - iIp4Provision.SetSecondaryDns(KInetAddrNone); - if (!serverRequired) - { - CAgentMetaConnectionProvider::GetIp4AddrL(aIapView, KCDTIdLANIpAddr, addr); - TInetAddr v4MappedAddr; - v4MappedAddr.SetV4MappedAddress(addr); - iIp4Provision.SetLocalAddr(v4MappedAddr); - err = CAgentMetaConnectionProvider::GetIp4Addr(aIapView, KCDTIdLANIpNetMask, addr); - if (err == KErrNone) - { - v4MappedAddr.SetV4MappedAddress(addr); - iIp4Provision.SetNetMask(v4MappedAddr); - } - - err = CAgentMetaConnectionProvider::GetIp4Addr(aIapView, KCDTIdLANIpGateway, addr); - if (err == KErrNone) - { - v4MappedAddr.SetV4MappedAddress(addr); - iIp4Provision.SetDefGateway(v4MappedAddr); - } - else if (err == KErrNotFound || err == KErrArgument) - { - iIp4Provision.SetDefGateway(iIp4Provision.LocalAddr()); - } - else - { - User::Leave(err); - } - - // Because CommDB doesn't define a Broadcast Address field, we must - // calculate the broadcast address. This is based on the localAddr - // and the netMask. - - TInetAddr localAddr; - localAddr.SetV4MappedAddress(iIp4Provision.LocalAddr().Address()); - localAddr.SetPort(0); - TInetAddr netMask; - netMask.SetV4MappedAddress(iIp4Provision.NetMask().Address()); - netMask.SetPort(0); - TInetAddr broadcast; - broadcast.SubNetBroadcast(localAddr, netMask); - iIp4Provision.SetBroadcastAddr(broadcast.Address()); - } - - aIapView->GetBoolL(KCDTIdLANIpDNSAddrFromServer, serverRequired); - if (!serverRequired) - { - err = CAgentMetaConnectionProvider::GetIp4Addr(aIapView, KCDTIdLANIpNameServer1, addr); - if (err == KErrNone) - { - TInetAddr primaryDns; - primaryDns.SetV4MappedAddress(addr); - iIp4Provision.SetPrimaryDns(primaryDns); - err = CAgentMetaConnectionProvider::GetIp4Addr(aIapView, KCDTIdLANIpNameServer2, addr); - if (err == KErrNone) - { - TInetAddr secondaryDns; - secondaryDns.SetV4MappedAddress(addr); - iIp4Provision.SetSecondaryDns(secondaryDns); - } - } - - if (err != KErrNone && err != KErrNotFound && err != KErrArgument) - { - User::Leave(err); - } - } - } - -#ifdef IPV6SUPPORT -void CTunDriverProtoProvision::ProvisionIp6ConfigL(CCommsDatIapView* aIapView, TUint32 aOrder) -/** -* CTunDriverProtoProvision::ProvisionIp6ConfigL will initialize with IPv4 Header values -* for tundriver IPv6 configuration. like IPaddress, NetMask, Gateway and DNS Address. -* @param aIapView -* @returns -*/ - { - iIp6Provision.SetOrder(aOrder); - - // Read IP address configuration parameters - TBool serverRequired; - aIapView->GetBoolL(KCDTIdLANIpAddrFromServer, serverRequired); - - TIp6Addr addr; - TInetAddr inetAddress; - TInt err; - - iIp6Provision.SetLocalAddr(KInetAddrNone); - iIp6Provision.SetNetMask(KInetAddrNone); - iIp6Provision.SetDefGateway(KInetAddrNone); - iIp6Provision.SetPrimaryDns(KInetAddrNone); - iIp6Provision.SetSecondaryDns(KInetAddrNone); - if (!serverRequired) - { - CAgentMetaConnectionProvider::GetIp6AddrL(aIapView, KCDTIdLANIpAddr, addr); - inetAddress.SetAddress(addr); - iIp6Provision.SetLocalAddr(inetAddress); - err = CAgentMetaConnectionProvider::GetIp6Addr(aIapView, KCDTIdLANIpNetMask, addr); - if (err == KErrNone) - { - inetAddress.SetAddress(addr); - iIp6Provision.SetNetMask(inetAddress); - } - err = CAgentMetaConnectionProvider::GetIp6Addr(aIapView, KCDTIdLANIpGateway, addr); - if (err == KErrNone) - { - inetAddress.SetAddress(addr); - iIp6Provision.SetDefGateway(inetAddress); - } - else if (err == KErrNotFound || err == KErrArgument) - { - iIp6Provision.SetDefGateway(iIp6Provision.LocalAddr()); - } - else - { - User::Leave(err); - } - err = CAgentMetaConnectionProvider::GetIp6Addr(aIapView, KCDTIdLANIpNameServer1, addr); - if(err == KErrNone) - { - inetAddress.SetAddress(addr); - iIp6Provision.SetPrimaryDns(inetAddress); - } - else - { - User::LeaveIfError(err); - } - err = CAgentMetaConnectionProvider::GetIp6Addr(aIapView, KCDTIdLANIpNameServer2, addr); - if(err == KErrNone) - { - inetAddress.SetAddress(addr); - iIp6Provision.SetSecondaryDns(inetAddress); - } - else - { - User::LeaveIfError(err); - } - // Because CommDB doesn't define a Broadcast Address field, we must - // calculate the broadcast address. This is based on the localAddr - // and the netMask. - - TInetAddr localAddr; - localAddr = iIp6Provision.LocalAddr(); - localAddr.SetPort(0); - TInetAddr netMask; - netMask = iIp6Provision.NetMask(); - netMask.SetPort(0); - TInetAddr broadcast; - broadcast.SubNetBroadcast(localAddr, netMask); - iIp6Provision.SetBroadcastAddr(broadcast); - } - - iIp6Provision.SetPrimaryDns(KInetAddrNone); - iIp6Provision.SetSecondaryDns(KInetAddrNone); - - aIapView->GetBoolL(KCDTIdLANIpDNSAddrFromServer, serverRequired); - if (!serverRequired) - { - err = CAgentMetaConnectionProvider::GetIp6Addr(aIapView, KCDTIdLANIpNameServer1, addr); - if (err == KErrNone) - { - inetAddress.SetAddress(addr); - iIp6Provision.SetPrimaryDns(inetAddress); - err = CAgentMetaConnectionProvider::GetIp6Addr(aIapView, KCDTIdLANIpNameServer2, addr); - if (err == KErrNone) - { - inetAddress.SetAddress(addr); - iIp6Provision.SetSecondaryDns(inetAddress); - } - } - - if (err != KErrNone && err != KErrNotFound && err != KErrArgument) - { - User::Leave(err); - } - } - } -#endif - -// -// Attribute table for provisioning structures passed to CFProtocol -// - -START_ATTRIBUTE_TABLE(CTunDriverProtoProvision, CTunDriverProtoProvision::EUid, CTunDriverProtoProvision::ETypeId) -// no attributes defined as no serialisation takes place. -END_ATTRIBUTE_TABLE()