diff -r 000000000000 -r af10295192d8 networkcontrol/ipnetworklayer/src/ItfInfoConfigExt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkcontrol/ipnetworklayer/src/ItfInfoConfigExt.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,124 @@ +// Copyright (c) 2005-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: +// + +/** + @file + @internalTechnology +*/ + +#include "ItfInfoConfigExt.h" +#include + +using namespace Meta; + +START_ATTRIBUTE_TABLE(TItfInfoConfigExt, KIpProtoConfigExtUid, EItfInfoConfigExt) + // No attributes registered as no serialisation takes place. +END_ATTRIBUTE_TABLE() + +START_ATTRIBUTE_TABLE(XInterfaceNames, KIpProtoConfigExtUid, EInterfaceName) + // No attributes registered as no serialisation takes place. +END_ATTRIBUTE_TABLE() + +const TUint KMaxInterfaceNames = 10; + +XInterfaceNames* XInterfaceNames::NewL() + { + XInterfaceNames* self = new(ELeave) XInterfaceNames(); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + +void XInterfaceNames::ConstructL() + { + iInterfaceNames.ReserveL(KMaxInterfaceNames); + User::LeaveIfError(iLock.CreateLocal()); + } + +XInterfaceNames::~XInterfaceNames() + { + iInterfaceNames.Close(); + iLock.Close(); + } + +/** + Retrieves an interface name from the store. + + @param aIndex The index of the interface name to retrieve. + @param aInterfaceName The buffer to be populated with the name of the interface. +*/ +TInt XInterfaceNames::InterfaceName(TUint aIndex, TInterfaceName& aInterfaceName) + { + iLock.Wait(); + { + if(aIndex >= iInterfaceNames.Count() || aIndex >= KMaxInterfaceNames) + { + iLock.Signal(); + return KErrArgument; + } + aInterfaceName = iInterfaceNames[aIndex].iName; + } + iLock.Signal(); + + return KErrNone; + } + +/** + Adds an interface name to the store. + + @param aInterfaceName The name of the interface. + @leave A system-wide error code if the interface name could not be stored. +*/ +void XInterfaceNames::AddInterfaceNameL(const TAny* aOwner, const TInterfaceName& aInterfaceName) + { + TInt ret = KErrNone; + + iLock.Wait(); + { + if(iInterfaceNames.Count() >= KMaxInterfaceNames) + { + iLock.Signal(); + User::Leave(KErrOverflow); + } + + ret = iInterfaceNames.Append(TNameAndOwner(aOwner, aInterfaceName)); + } + iLock.Signal(); + + User::LeaveIfError(ret); + } + +/** + Removes all interfacesName entries matching the supplied owner. + + @param aOwner The owner of the entry +*/ +void XInterfaceNames::RemoveInterfaceName(const TAny* aOwner) + { + iLock.Wait(); + { + for(TUint i=0;i