networkcontrol/pfqoslib/inc/pfqoslib.h
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkcontrol/pfqoslib/inc/pfqoslib.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,267 @@
+// Copyright (c) 2006-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 pfqoslib.h
+// Header file for PF_QOS messages
+// @internalTechnology
+// @released
+//
+
+#ifndef __PFQOSLIB_H__
+#define __PFQOSLIB_H__
+
+#include <e32std.h>
+#include <in_sock.h>
+#include <es_mbuf.h>
+
+#include <networking/pfqos.h>
+#include <networking/qosparameters.h>
+
+class CSelectorBase;
+
+/** 
+ * Map the basic PFQOS_MSG V1 structures into Classes with
+ * constructors for initialized content.
+ *
+ * @internalTechnology 
+ */
+class T_pfqos_msg : public pfqos_msg
+    {
+    public:
+    IMPORT_C T_pfqos_msg(TUint8 aMsgType, TUint32 aSeq = 0);
+    };
+
+/** @internalTechnology */
+class T_pfqos_selector : public pfqos_selector
+    {
+    public:
+    IMPORT_C T_pfqos_selector(CSelectorBase* aSelector);
+    };
+
+/** @internalTechnology */
+class T_pfqos_address : public pfqos_address
+    {
+    public:
+    IMPORT_C T_pfqos_address(TUint aType, TUint16 aPortMax);
+    };
+
+/** @internalTechnology */
+class T_pfqos_module : public pfqos_modulespec
+    {
+    public:
+    IMPORT_C T_pfqos_module(TUint aProtocolId, TUint32 aFlags, const TDesC& aName, const TDesC& aPath, TInt aDataLen);
+    };
+
+/** @internalTechnology */
+class T_pfqos_flowspec : public pfqos_flowspec
+    {
+    public:
+    IMPORT_C T_pfqos_flowspec(const TQoSParameters& aParameters);
+    };
+
+/** @internalTechnology */
+class T_pfqos_event : public pfqos_event
+    {
+    public:
+    IMPORT_C T_pfqos_event(TUint8 aType, TUint16 aEventType, TUint16 aValue);
+    };
+
+/** @internalTechnology */
+class T_pfqos_channel : public pfqos_channel
+    {
+    public:
+    IMPORT_C T_pfqos_channel(TUint32 aChannelId);
+    };
+
+/** @internalTechnology */
+class T_pfqos_configure : public pfqos_configure
+    {
+    public:
+    IMPORT_C T_pfqos_configure(TUint16 aProtocolId);
+    };
+
+/**
+ * Internal representation of PfqosMessage
+ *
+ * @internalTechnology 
+ */
+class TPfqosBase
+    {
+    public:
+    const struct pfqos_msg *iMsg;
+    IMPORT_C TPfqosBase();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aTotal) const;
+    };
+
+/** @internalTechnology */
+class TPfqosSelector
+    {
+    public:
+    const struct pfqos_selector *iExt;
+    IMPORT_C TPfqosSelector();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    IMPORT_C TInt GetUid(TCheckedUid& aUid);
+    };
+
+/** @internalTechnology */
+class TPfqosAddress
+    {
+    public:
+    const struct pfqos_address *iExt;
+    const TInetAddr *iAddr;
+    const TInetAddr *iPrefix;
+    IMPORT_C TPfqosAddress();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    };
+
+class CExtension;
+
+/** @internalTechnology */
+class TPfqosModule
+    {
+    public:
+    const struct pfqos_modulespec *iExt;
+    TPtrC8 iData;
+    IMPORT_C TPfqosModule();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    TSglQueLink iNext;
+    };
+
+/** @internalTechnology */
+class TPfqosFlowSpec
+    {
+    public:
+    const struct pfqos_flowspec *iExt;
+    IMPORT_C TPfqosFlowSpec();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    };
+
+/** @internalTechnology */
+class TPfqosEvent
+    {
+    public:
+    const struct pfqos_event *iExt;
+    IMPORT_C TPfqosEvent();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    };
+
+/** @internalTechnology */
+class TPfqosChannel
+    {
+    public:
+    struct pfqos_channel *iExt;
+    IMPORT_C TPfqosChannel();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    };
+
+/** @internalTechnology */
+class TPfqosConfigure
+    {
+    public:
+    const struct pfqos_configure *iExt;
+    IMPORT_C TPfqosConfigure();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    };
+
+/** @internalTechnology */
+class TPfqosConfigFile
+    {
+    public:
+    const struct pfqos_config_file *iExt;
+    IMPORT_C TPfqosConfigFile();
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+    };
+
+/** @internalTechnology */
+class CPfqosPolicyData : public CBase
+    {
+    public:
+    IMPORT_C ~CPfqosPolicyData();
+    IMPORT_C static CPfqosPolicyData* NewL(TInt aType);
+    IMPORT_C static CPfqosPolicyData* NewL(TInt aType, const TUint8 *aBuf,TInt aLength);
+    IMPORT_C TUint Length() const;
+    IMPORT_C TInt Size() const;
+    IMPORT_C void CopyL(const TUint8 *aBuf,TInt aLength);
+    IMPORT_C TDesC8& Data();
+    IMPORT_C TInt Type();
+    IMPORT_C TInt ByteStream(RMBufChain &aPacket, TInt aOffset) const;
+
+    TSglQueLink iNext;
+
+    private:
+
+    IMPORT_C CPfqosPolicyData(TInt aType);
+    IMPORT_C void ConstructL();
+    TInt    iType;
+    TPtr8    iBufPtr;
+    HBufC8* iBuf;
+    };
+
+
+
+/**
+ * Internal representation of PF_QOS message
+ *
+ * This class is either misnamed (should not be a T-class) or
+ * misdesigned. The instance of this object owns dynamically
+ * allocated heap objects in member variables iModuleList and
+ * iExtentions. Thus, the destructor of this class must always
+ * be executed.
+ *
+ * @internalTechnology 
+ */
+class TPfqosMessage
+    {
+    public:
+    IMPORT_C TPfqosMessage(const TDesC8& aMsg);
+    IMPORT_C TPfqosMessage();
+    IMPORT_C ~TPfqosMessage();
+    IMPORT_C void AddModuleL(T_pfqos_module& aModule, const TDesC8& aConfigData);
+    IMPORT_C void AddExtensionL(const TDesC8& aExtension, TInt aType);
+    IMPORT_C TUint ExtensionLength();
+    IMPORT_C TUint ModuleLength();
+    IMPORT_C TUint16 Length64();
+    IMPORT_C void ByteStreamL(RMBufChain &aPacket);
+    IMPORT_C void Add(TPfqosModule& aModule);
+    IMPORT_C void AddExtension(CPfqosPolicyData& aExtension);
+    IMPORT_C TInt SetQoSParameters(TQoSParameters& aParameters) const;
+    IMPORT_C void RemovePolicyData(); // Remove all policy data (flowspec, modules, extensions, event, configure)
+
+    public:
+    TInt iError;
+    TPfqosBase iBase;
+    TPfqosSelector iSelector;
+    TPfqosAddress iSrcAddr;
+    TPfqosAddress iDstAddr;
+    TPfqosFlowSpec iFlowSpec;
+    TPfqosEvent iEvent;
+    TPfqosChannel iChannel;
+    TPfqosConfigure iConfigure;
+    TPfqosConfigFile iConfigFile;
+    TUint iNumModules;
+    TSglQue<TPfqosModule> iModuleList;
+    TUint iNumExtensions;
+    TSglQue<CPfqosPolicyData> iExtensions;
+    };
+
+
+#endif