diff -r 000000000000 -r af10295192d8 networkcontrol/qoslib/src/qosselector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkcontrol/qoslib/src/qosselector.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,452 @@ +// Copyright (c) 2003-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 "qoslib.h" + + +const TUint KMaxPort = 65535; + +// +// TQoSSelector +// + +/** +Constructor. + +Initialises all variables to specified, but null, values. +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +*/ +//lint -e{1927} would like some of the following to be in initializer list! +EXPORT_C TQoSSelector::TQoSSelector() + { + iSrc.SetAddress(KInet6AddrNone); + iDst.SetAddress(KInet6AddrNone); + iSrcMask.SetAddress(KInet6AddrNone); + iDstMask.SetAddress(KInet6AddrNone); + iProtocol = 0; + iSrcPortMax = 0; + iDstPortMax = 0; + iIapId = 0; + } + +/** +Compares if the selectors are equal. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aSelector TQoSSelector object that is compared with this object. +@return ETrue, if selectors are equal to this object; otherwise, EFalse. +*/ +EXPORT_C TInt TQoSSelector::operator==(const TQoSSelector& aSelector) const + { + if (iProtocol == aSelector.Protocol() && iSrcPortMax == aSelector.MaxPortSrc() && + iDstPortMax == aSelector.MaxPortDst() && iIapId == (TUint)aSelector.IapId() && + iSrc.CmpAddr(aSelector.GetSrc()) && iDst.CmpAddr(aSelector.GetDst())) + return TRUE; + else + return FALSE; + } + +/** +Compares if the selector matches aSocket. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aSocket RSocket that is compared with this object. +@return ETrue, if selector created from aSocket is equal to this object; +otherwise, EFalse. +*/ +EXPORT_C TBool TQoSSelector::Match(RSocket& aSocket) const + { + TQoSSelector sel; + TInt ret = sel.SetAddr(aSocket); + if (ret!=KErrNone) + return EFalse; + return (*this == sel); + } + +/** +Sets the addresses for selector. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aSrcAddr Source address. Port must have value <= 65535 +(0 is used as uspecified value for a port). +@param aSrcAddrMask Source address mask. Port must have value <= 65535 +(0 is used as uspecified value for a port). +@param aDstAddr Destination address. Port must have value <= 65535 +(0 is used as uspecified value for a port). +@param aDstAddrMask Destination address mask. Port must have value <= 65535 +(0 is used as uspecified value for a port). +@param aProtocol Protocol ID. +@param aSrcPortMax Maximum source port. Must have value <= 65535 +(0 is used as uspecified value for a port). +@param aDstPortMax Maximum destination port. Must have value <= 65535 +(0 is used as uspecified value for a port). +@return KErrNone, if parameters have valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetAddr(const TInetAddr& aSrcAddr, + const TInetAddr& aSrcAddrMask, + const TInetAddr& aDstAddr, + const TInetAddr& aDstAddrMask, + TUint aProtocol, + TUint aSrcPortMax, + TUint aDstPortMax) + { + if (aSrcAddr.Port() > KMaxPort || aDstAddr.Port() > KMaxPort || + aSrcPortMax > KMaxPort || aDstPortMax > KMaxPort) + return KErrArgument; + + iSrc = aSrcAddr; + iDst = aDstAddr; + + iSrcMask = aSrcAddrMask; + iDstMask = aDstAddrMask; + iProtocol = aProtocol; + iSrcPortMax = aSrcPortMax; + iDstPortMax = aDstPortMax; + iIapId = 0; + return KErrNone; + } + +//lint -e{708} does not like union initializers +const TIp6Addr KInet6AddrMask = {{{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}}}; + +// +// RSocket must be connected before this!! +// +/** +Sets the addresses for selector. + +RSocket is used to fetch addresses and ports for a selector. +The resulting selector will match only for one socket. + +Note that RSocket::Connect() must be called before calling this function. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aSocket RSocket object that is used to set the selector variables. +Note: RSocket must be connected +@return KErrNone, if parameters have valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetAddr(RSocket& aSocket) + { + TSockAddr aRemoteAddr, aLocalAddr; + TProtocolDesc aDesc; + aSocket.LocalName(aLocalAddr); + aSocket.RemoteName(aRemoteAddr); + + if (aLocalAddr.Port() < 1 || aLocalAddr.Port() > KMaxPort) + return KErrArgument; + if (aRemoteAddr.Port() < 1 || aRemoteAddr.Port() > KMaxPort) + return KErrArgument; + if (iDst.Family() == KAFUnspec) + return KErrArgument; + + iSrc = TInetAddr(aLocalAddr); + iDst = TInetAddr(aRemoteAddr); + + // Srcaddr is not used when a selector is made from RSocket: + // srcaddr might not be set in Connect() + iSrc.SetFamily(KAFUnspec); + iSrc.SetAddress(KInet6AddrNone); + + if (iDst.Family() == KAfInet) + iDst.ConvertToV4Mapped(); + // + // Set prefixes. + // + iSrcMask.SetAddress(KInet6AddrMask); + iDstMask.SetAddress(KInet6AddrMask); + + iSrcPortMax = iSrc.Port(); + iDstPortMax = iDst.Port(); + aSocket.Info(aDesc); + iProtocol = aDesc.iProtocol; + return KErrNone; + } + +/** +Sets the source address for selector. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aAddr Source address. Port must have value <= 65535 (0 is used as +uspecified value for a port). +@return KErrNone, if parameters have valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetSrc(const TInetAddr& aAddr) + { + if (aAddr.Port() > KMaxPort) + return KErrArgument; + iSrc = aAddr; + return KErrNone; + } + +/** +Sets the destination address for selector. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aAddr Destination address. Port must have value <= 65535 (0 is used +as uspecified value for a port). +@return KErrNone, if parameters have valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetDst(const TInetAddr& aAddr) + { + if (aAddr.Port() > KMaxPort) + return KErrArgument; + iDst = aAddr; + return KErrNone; + } + +/** +Gets the current source address. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Source address. +*/ +EXPORT_C TInetAddr TQoSSelector::GetSrc() const + { + return iSrc; + } + +/** +Gets the current destination address. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Destination address. +*/ +EXPORT_C TInetAddr TQoSSelector::GetDst() const + { + return iDst; + } + +/** +Sets the source address mask. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aMask Source address mask. Port must have value <= 65535 (0 is used +as uspecified value for a port). +@return KErrNone, if parameters have valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetSrcMask(const TInetAddr& aMask) + { + if (aMask.Port() > KMaxPort) + return KErrArgument; + iSrcMask = aMask; + return KErrNone; + } + +/** +Gets the current source address mask. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Source address mask. +*/ +EXPORT_C TInetAddr TQoSSelector::GetSrcMask() const + { + return iSrcMask; + } + +/** +Sets the destination address mask. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aMask Destination address mask. Port must have value <= 65535 (0 is +used as uspecified value for a port). +@return KErrNone, if parameters have valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetDstMask(const TInetAddr& aMask) + { + if (aMask.Port() > KMaxPort) + return KErrArgument; + iDstMask = aMask; + return KErrNone; + } + +/** +Gets the current destination address mask. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Destination address mask. +*/ +EXPORT_C TInetAddr TQoSSelector::GetDstMask() const + { + return iDstMask; + } + +/** +Sets the Internet access point identifier. + +0 is used as unspecified value. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aIapId Value to which to set the IapId. +*/ +EXPORT_C void TQoSSelector::SetIapId(TInt aIapId) + { + iIapId = aIapId; + } + +/** +Gets the current Internet access point identifier. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Internet access point identifier. +*/ +EXPORT_C TInt TQoSSelector::IapId() const + { + return iIapId; + } + +/** +Sets the protocol identifier. + +0 is used as unspecified value. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aProtocol Value to which to set the protocol ID. +*/ +EXPORT_C void TQoSSelector::SetProtocol(TUint aProtocol) + { + iProtocol = aProtocol; + } + +/** +Gets the current protocol identifier. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Protocol identifier. +*/ +EXPORT_C TUint TQoSSelector::Protocol() const + { + return iProtocol; + } + +/** +Sets the maximum source port. + +Port must have value <= 65535 (0 is used as unspecified value). + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aMaxPort Value to which to set maximum source port. +@return KErrNone, if aMaxPort has valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetMaxPortSrc(TUint aMaxPort) + { + if (aMaxPort > KMaxPort) + return KErrArgument; + iSrcPortMax = aMaxPort; + return KErrNone; + } + +/** +Sets the maximum destination port. + +Port must have value <= 65535 (0 is used as unspecified value). + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@param aMaxPort Value to which to set maximum destination port. +@return KErrNone, if aMaxPort has valid values; otherwise, KErrArgument. +*/ +EXPORT_C TInt TQoSSelector::SetMaxPortDst(TUint aMaxPort) + { + if (aMaxPort > KMaxPort) + return KErrArgument; + iDstPortMax = aMaxPort; + return KErrNone; + } + +/** +Gets the maximum source port. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Maximum source port. +*/ +EXPORT_C TUint TQoSSelector::MaxPortSrc() const + { + return iSrcPortMax; + } + +/** +Gets the maximum destination port. + +@publishedPartner +@released +@capability NetworkControl Restrict QoS policy operations because they may +affect several data flows. +@return Maximum destination port. +*/ +EXPORT_C TUint TQoSSelector::MaxPortDst() const + { + return iDstPortMax; + } +