networkcontrol/qoslib/inc/qos_extension.h
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkcontrol/qoslib/inc/qos_extension.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,127 @@
+// 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:
+//
+
+#ifndef __QOS_EXTENSION_H__
+#define __QOS_EXTENSION_H__
+
+/**
+ * @file qos_extension.h 
+ * This file defines the base class for QoS extensions that can be added to CQoSParameters.
+ */
+
+#include <e32std.h>
+#include <in_sock.h>
+//#include <networking/qosparameters.h>
+
+
+/**
+ * Base class for extension policies.
+ *
+ * @publishedPartner
+ * @released
+ */
+class CExtensionBase : public CBase
+{
+public:
+    IMPORT_C CExtensionBase();
+    IMPORT_C ~CExtensionBase();
+    
+    /** 
+    Extension must implement this function to allow qoslib to create 
+    extensions.
+     
+    @publishedPartner
+    @released
+    @capability NetworkServices Restrict QoS operations in similar way as 
+    normal socket operations.
+    @leave If no memory is available.
+    @return A pointer to extension object. 
+    */
+    virtual CExtensionBase* CreateL()=0;
+
+    /** 
+    Gets the type of the extension. 
+     
+    @publishedPartner
+    @released
+    @capability NetworkServices Restrict QoS operations in similar way as 
+    normal socket operations.
+    @return Extension type. 
+    */
+    inline TInt Type() const { return iType; }
+
+    /** 
+    Gets the extension data in a descriptor.
+     
+    The extension must implement this function to allow qoslib to fetch the 
+    extension data.  
+     
+    @publishedPartner
+    @released
+    @capability NetworkServices Restrict QoS operations in similar way as 
+    normal socket operations.
+    @return Extension data. 
+    */
+    virtual TDesC8& Data()=0;
+
+    /**
+    Parses the extension data received as a parameter.
+     
+    The extension must implement this function to allow qoslib give the 
+    extension data to the extension object.  
+    
+    @publishedPartner
+    @released
+    @capability NetworkServices Restrict QoS operations in similar way as 
+    normal socket operations.
+    @param aData Extension data.
+    @return KErrNone, if aData contains a valid extension; otherwise, error 
+    code. 
+    */
+    virtual TInt ParseMessage(const TDesC8& aData)=0;
+
+    /**
+    Copies aExtension into this object.
+     
+    The extension must implement this function to allow copying of 
+    extensions.  
+     
+    @publishedPartner
+    @released
+    @capability NetworkServices Restrict QoS operations in similar way as 
+    normal socket operations.
+    @param aExtension Extension data.
+    @return KErrNone, if copying succeeded; otherwise, error code. 
+    */
+    virtual TInt Copy(const CExtensionBase& aExtension)=0;
+
+
+public:
+    TSglQueLink iLink; //iLink needs to be accessible for setting offset!
+
+protected:
+    /** The extension type. */
+    TInt iType;
+    /** Buffer for extension data. */
+    HBufC8* iData; 
+    /** Pointer to next item in an extension queue. */
+};
+
+/** A typedef for a queue of extensions. */
+typedef TSglQue<CExtensionBase> TQoSExtensionQueue;
+/** A typedef for an iterator to a queue of extensions. */
+typedef TSglQueIter<CExtensionBase> TQoSExtensionQueueIter;
+
+#endif