diff -r 000000000000 -r af10295192d8 networkcontrol/qosfwconfig/qos/src/policies.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkcontrol/qosfwconfig/qos/src/policies.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,212 @@ +// Copyright (c) 2004-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: +// + +#include "policies.h" +#include "qoslog.h" + +#ifdef _LOG +#include "qos_prot.h" // for the TLogAddress class! + +// Dump selector +void DumpSelector(const CSelectorBase& aSel) + { + TLogAddress dst(aSel.iDst); + TLogAddress dmsk(aSel.iDstMask); + TLogAddress src(aSel.iSrc); + TLogAddress smsk(aSel.iSrcMask); + Log::Printf(_L("\t\tsel(%d): src=%S - %d %S dst=%S - %d %S prot=%d name='%S' iap=%d uid(%d %d %d) pri=%d, owner=%d"), + aSel.iType, + &src, (TInt)aSel.iSrcPortMax, &smsk, + &dst, (TInt)aSel.iDstPortMax, &dmsk, + (TInt)aSel.iProtocol, &aSel.iName, + aSel.iIapId, + aSel.iUid.UidType()[0].iUid, aSel.iUid.UidType()[1].iUid, aSel.iUid.UidType()[2].iUid, + aSel.iPriority, aSel.iOwner); + } +#endif + +// +// CPolicySelector +// +CPolicySelector::CPolicySelector(TPfqosMessage& aMsg) : + CSelectorBase(aMsg.iBase, aMsg.iSelector, aMsg.iSrcAddr, aMsg.iDstAddr, + EPfqosFlowspecPolicy) + { + iType = EPfqosFlowspecPolicy; + LOG(Log::Printf(_L("new\tqos selector[%u] EPfqosFlowspecPolicy(%d) size=%d"), (TInt)this, iType, sizeof(CPolicySelector))); + } + +CPolicySelector::CPolicySelector(CSelectorBase& aSel) + : CSelectorBase(aSel) + { + iType = EPfqosFlowspecPolicy; + LOG(Log::Printf(_L("new\tqos selector[%u] EPfqosFlowspecPolicy(%d) size=%d"), (TInt)this, iType, sizeof(CPolicySelector))); + } + +CPolicySelector::~CPolicySelector() + { + LOG(Log::Printf(_L("~\tqos selector[%u] EPfqosFlowspecPolicy(%d) -- done"), (TInt)this, iType)); + } + +void CPolicySelector::SetQoSParameters(const TPfqosFlowSpec& aSpec) + { + if (!aSpec.iExt) + { + return; + } + + // Uplink + iQoS.SetUpLinkDelay(aSpec.iExt->uplink_delay); + iQoS.SetUpLinkMaximumPacketSize(aSpec.iExt->uplink_maximum_packet_size); + iQoS.SetUpLinkAveragePacketSize(aSpec.iExt->uplink_average_packet_size); + iQoS.SetUpLinkPriority(aSpec.iExt->uplink_priority); + iQoS.SetUpLinkMaximumBurstSize(aSpec.iExt->uplink_maximum_burst_size); + iQoS.SetUplinkBandwidth(aSpec.iExt->uplink_bandwidth); + iQoS.SetName(aSpec.iExt->name); + + // Downlink + iQoS.SetDownLinkDelay(aSpec.iExt->downlink_delay); + iQoS.SetDownLinkMaximumPacketSize( + aSpec.iExt->downlink_maximum_packet_size); + iQoS.SetDownLinkAveragePacketSize( + aSpec.iExt->downlink_average_packet_size); + iQoS.SetDownLinkPriority(aSpec.iExt->downlink_priority); + iQoS.SetDownLinkMaximumBurstSize(aSpec.iExt->downlink_maximum_burst_size); + iQoS.SetDownlinkBandwidth(aSpec.iExt->downlink_bandwidth); + + // Flags + iQoS.SetFlags(aSpec.iExt->flags); + } + + +// +// CModuleSelector +// +CModuleSelector::CModuleSelector(TPfqosMessage& aMsg) + : CSelectorBase(aMsg.iBase, aMsg.iSelector, aMsg.iSrcAddr, aMsg.iDstAddr, + EPfqosModulespecPolicy), + iModules(_FOFF(CModuleSpec, iDLink)) + { + iType = EPfqosModulespecPolicy; + LOG(Log::Printf(_L("new\tqos selector[%u] EPfqosModulespecPolicy(%d) size=%d"), (TInt)this, iType, sizeof(CPolicySelector))); + } + + +CModuleSelector::CModuleSelector(CSelectorBase& aSel) + : CSelectorBase(aSel), iModules(_FOFF(CModuleSpec, iDLink)) + { + iType = EPfqosModulespecPolicy; + LOG(Log::Printf(_L("new\tqos selector[%u] EPfqosModulespecPolicy(%d) size=%d"), (TInt)this, iType, sizeof(CPolicySelector))); + } + + +CModuleSelector::~CModuleSelector() + { + LOG(Log::Printf(_L("~\tqos selector[%u] EPfqosModulespecPolicy(%d) - destruct start"), (TInt)this, iType)); + TDblQueIter iter(iModules); + CModuleSpec* sel; + + while ((sel = iter++) != NULL) + { + sel->iDLink.Deque(); + delete sel; + } + LOG(Log::Printf(_L("~\tqos selector[%u] EPfqosModulespecPolicy(%d) - destruct complete"), (TInt)this, iType)); + } + +void CModuleSelector::AddModuleSpec(CModuleSpec& aModule) + { + iModules.AddLast(aModule); + } + +void CModuleSelector::RemoveModuleSpec(CModuleSpec* aModule) + { + aModule->iDLink.Deque(); + delete aModule; + } + +CModuleSpec* CModuleSelector::FindModuleSpec(TUint aProtocolId) + { + TDblQueIter iter(iModules); + CModuleSpec* sel; + + while ((sel = iter++) != NULL) + { + if (sel->ProtocolId() == aProtocolId) + { + return sel; + } + } + return NULL; + } + +// +// CModuleSpec +// +CModuleSpec* CModuleSpec::NewL(const TDesC& aFileName, + const TDesC& aModuleName) + { + CModuleSpec* moduleSpec = new (ELeave) CModuleSpec(); + CleanupStack::PushL(moduleSpec); + moduleSpec->ContructL(aFileName, aModuleName); + CleanupStack::Pop(); + return moduleSpec; + } + +CModuleSpec* CModuleSpec::NewL(const TPfqosModule& aModule) + { + CModuleSpec* moduleSpec = new (ELeave) CModuleSpec(); + CleanupStack::PushL(moduleSpec); + moduleSpec->ContructL(aModule); + CleanupStack::Pop(); + return moduleSpec; + } + +void CModuleSpec::ContructL(const TPfqosModule& aModule) + { + iExtension = CExtension::NewL(); + iExtension->CopyL(aModule.iData); + TPtrC8 fileName((TUint8*)aModule.iExt->path); + iFileName.Copy(fileName); + TPtrC8 moduleName((TUint8*)aModule.iExt->name); + iName.Copy(moduleName); + iProtocolId = aModule.iExt->protocol_id; + iFlags = aModule.iExt->flags; + } + +void CModuleSpec::ContructL(const TDesC& aFileName, const TDesC& aModuleName) + { + iExtension = CExtension::NewL(); + iFileName.Copy(aFileName); + iName.Copy(aModuleName); + iProtocolId = 0; + iFlags = 0; + } + +CModuleSpec::CModuleSpec() + { + LOG(Log::Printf(_L("new\tqos ModuleSpec[%u] size=%d"), (TInt)this, sizeof(CModuleSpec))); + iProtocolId = 0; + iFlags = 0; + iFileName.FillZ(); + iName.FillZ(); + } + + +CModuleSpec::~CModuleSpec() + { + delete iExtension; + LOG(Log::Printf(_L("~\tqos ModuleSpec[%u] deleted"), (TInt)this)); + }