--- /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;
+ }
+