natfw/natfwunsaf_protocols/unsaf_codec/inc/natfwunsafattribute.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwunsaf_protocols/unsaf_codec/inc/natfwunsafattribute.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2006-2007 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 CNATFWUNSAFATTRIBUTE_H
+#define CNATFWUNSAFATTRIBUTE_H
+
+// INCLUDES
+#include <e32base.h>
+#include "natfwinternaldefs.h"    //UNIT_TEST
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+/**
+ * An abstract base class for UNSAF attributes.
+ */
+class CNATFWUNSAFAttribute : public CBase
+    {
+    public: // Enumerations
+
+        enum TType // Values are from RFC 3489 and TURN-draft
+            {
+            EMappedAddress = 0x0001,
+            EResponseAddress = 0x0002,
+            EChangeRequest = 0x0003,
+            ESourceAddress = 0x0004,
+            EChangedAddress = 0x0005,
+            EUsername = 0x0006,
+            EPassword = 0x0007,
+            EMessageIntegrity = 0x0008,
+            EErrorCode = 0x0009,
+            EUnknownAttributes = 0x000a,
+            EReflectedFrom = 0x000b,
+            ELifetime = 0x000d,
+            EMagicCookie = 0x000f,
+            EBandwidth = 0x0010,
+            EDestinationAddress = 0x0011,
+            ERemoteAddress = 0x0012,
+            EData = 0x0013,
+            ERealm = 0x0014,
+            ENonce = 0x0015,
+            ERelayAddress = 0x0016,
+            ERequestedPortProps = 0x0018,
+            ERequestedTransport = 0x0019,
+            EXorMappedAddress = 0x0020,
+            ETimerVal = 0x0021,
+            ERequestedIp = 0x0022,
+            EConnectStat = 0x0023,
+            EPriority = 0x0024,
+            EUseCandidate = 0x0025,
+            EXorOnly = 0x8021,      //was 0x0021, but clashes with TIMER_VAL
+            EServer = 0x8022,
+            EAlternateServer = 0x8023,
+            EFingerprint = 0x8028,
+            EIceControlled = 0x8029,
+            EIceControlling = 0x802a
+            };
+
+    public: // Constructors and destructor
+
+        /**
+        * Destructor, deletes the resources of CNATFWUNSAFAttribute.
+        */
+        virtual ~CNATFWUNSAFAttribute();
+
+    public: // New pure virtual functions
+
+        /**
+        * The type of the UNSAF attribute
+        * @return UNSAF attribute type
+        */
+        virtual CNATFWUNSAFAttribute::TType Type() const = 0;
+
+    public: // New functions
+
+        /**
+        * Encodes the UNSAF attribute including its type and length
+        * @return The encoded UNSAF attribute. The ownership is
+        *         transferred.
+        */
+        HBufC8* EncodeL() const;
+
+        /**
+        * Parses the byte stream for a UNSAF attribute type and length.
+        * Leaves if stream does not contain enough data
+        * @param aByteStream Stream to parse
+        * @param aType OUT: attribute type
+        * @param aTotalLength OUT: Total length of the attribute, including
+        *    type, length and value elements
+        * @leave KErrArgument If the stream doesn't contain enough data
+        */
+        static void ParseTypeAndLengthL(const TDesC8& aByteStream,
+                                        TUint16& aType,
+                                        TUint16& aLength);
+
+        /**
+        * Checks if the UNSAF attribute indicated by aType is mandatory to
+        * understand.
+        * @param aType UNSAF attribute type
+        * @return ETrue  Attribute is mandatory and must be understood
+        *         EFalse Attribute is optional
+        */
+        static TBool IsMandatory(TUint16 aType);
+
+        /**
+        * Checks if the UNSAF attribute indicated by aType is word boundary
+        * aligned by definition.
+        * @param aType UNSAF attribute type
+        * @return ETrue  Attribute is word boundary aligned and must not be
+        *                padded out.
+        *         EFalse Attribute may need padding out.
+        */
+        static TBool IsWordBoundaryAligned(TUint16 aType);
+
+    protected: // Enums
+
+        enum TEncodedAttributeOffset
+            {
+            //Offset to fields inside the encoded attribute
+            ETypeOffset = 0,
+            ELengthOffset = 2,
+            EValueOffset = 4
+            };
+
+    protected: // Constructors
+
+        CNATFWUNSAFAttribute();
+
+
+    protected: // New pure virtual functions
+
+        /**
+        * Encodes the UNSAF attribute value.
+        * Used from CNATFWUNSAFAttribute::EncodeL.
+        * @return The encoded UNSAF attribute value.
+        *         The ownership is transferred.
+        */
+        virtual HBufC8* EncodeValueL() const = 0;
+
+    protected: // New functions
+
+        /**
+        * Parses the byte stream and returns the value of length element.
+        * @param aByteStream Stream to parse
+        * @return Length of value element
+        * @leave KErrArgument If the stream doesn't contain enough data
+        */
+        static TUint16 ParseLengthL(const TDesC8& aByteStream);
+
+    private: // For testing purposes
+
+        UNIT_TEST(CNATFWUNSAFMessageTest)
+        UNIT_TEST(CNATFWUNSAFMessageFactoryTest)
+        UNIT_TEST(CNATFWUNSAFMappedAddressAttributeTest)
+        UNIT_TEST(CNATFWUNSAFMessageIntegrityAttributeTest)
+    };
+
+#endif // CNATFWUNSAFATTRIBUTE_H
+
+