--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SDP/api/SdpAttributeField.h Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,391 @@
+/*
+* 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:
+* Name : SdpAttributeField.h
+* Part of : SDP Codec
+* Interface : SDK API, SDP Codec API
+* Version : 1.0
+*
+*/
+
+
+
+#ifndef CSDPATTRIBUTEFIELD_H
+#define CSDPATTRIBUTEFIELD_H
+
+// INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "sdpcodecstringconstants.h"
+
+// FORWARD DECLARATIONS
+class RReadStream;
+class RWriteStream;
+class CSdpFmtAttributeField;
+class CSdpAttributeFieldPtrs;
+
+// CLASS DECLARATION
+/**
+ * @publishedAll
+ * @released
+ *
+ * This class encapsulates the attribute field of Session Description Protocol
+ * for media and session level attributes. Media format/payload type level
+ * attributes are supported by the CSdpFmtAttributeField class.
+ *
+ * The normative reference for correct formatting and values is
+ * draft-ietf-mmusic-sdp-new-14 unless specified otherwise in
+ * member documentation. The implementation supports this normative
+ * reference, but does not enforce it fully.
+ *
+ * @lib sdpcodec.lib
+ */
+class CSdpAttributeField : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructs a new attribute field.
+ *
+ * @param aText A string containing a correctly
+ * formatted field value terminated by a CRLF.
+ * @return a new instance.
+ */
+ IMPORT_C static CSdpAttributeField* DecodeL( const TDesC8& aText );
+
+ /**
+ * Constructs a new attribute field and adds the pointer to the
+ * cleanup stack.
+ *
+ * @param aTest A string containing a correctly
+ * formatted field value terminated by a CRLF.
+ * @return a new instance.
+ */
+ IMPORT_C static CSdpAttributeField* DecodeLC( const TDesC8& aText );
+
+ /**
+ * Constructs a new attribute field.
+ *
+ * @param aAttribute The attribute name. It can be a pre-
+ * defined name in the SDP string pool or defined by the
+ * client.
+ * @param aValue A valid attribute value or an empty
+ * descriptor to omit the value part.
+ * @return a new instance.
+ */
+ IMPORT_C static CSdpAttributeField* NewL(
+ RStringF aAttribute, const TDesC8& aValue );
+
+ /**
+ * Constructs a new attribute field and adds the pointer to the
+ * cleanup stack.
+ *
+ * @param aAttribute The attribute name. It can be a pre-defined
+ * name in the SDP string pool or defined by the client.
+ * @param aValue A valid attribute value or an empty
+ * descriptor to omit the value part.
+ * @return a new instance.
+ */
+ IMPORT_C static CSdpAttributeField* NewLC(
+ RStringF aAttribute, const TDesC8& aValue );
+
+ /**
+ * Deletes the resources held by the instance.
+ */
+ IMPORT_C ~CSdpAttributeField();
+
+ public: // New functions
+
+ /**
+ * Outputs the field formatted according to SDP syntax and including
+ * the terminating CRLF.
+ *
+ * @param aStream Stream used for output. On return the
+ * stream includes correctly formatted attribute field.
+ */
+ IMPORT_C void EncodeL( RWriteStream& aStream ) const;
+
+ /**
+ * Creates a new instance that is equal to the target.
+ *
+ * @return a new instance.
+ */
+ IMPORT_C CSdpAttributeField* CloneL() const;
+
+ /**
+ * Compares this instance to another for equality.
+ *
+ * @param aObj: The instance to compare to.
+ * @return ETrue if equal, EFalse if not.
+ */
+ IMPORT_C TBool operator == ( const CSdpAttributeField& aObj ) const;
+
+ /**
+ * Gets the attribute name.
+ *
+ * @return The attribute name. The name can be pre-defined
+ * name in the SDP string table or defined by the client.
+ */
+ IMPORT_C RStringF Attribute() const;
+
+ /**
+ * Gets the attribute.
+ *
+ * @return The value or an empty descriptor if there is no value part.
+ */
+ IMPORT_C const TDesC8& Value() const;
+
+ /**
+ * Sets the attribute and attribute value.
+ *
+ * @param aAttribute A valid attribute name. It can be a
+ * pre-defined name in the SDP string pool or
+ * defined by the client.
+ * @param aValue A valid attribute value or an empty
+ * descriptor to omit the value part.
+ * @leave KErrSdpCodecAttributeField if the attribute part is not
+ * pre-defined EAttributeFmtp or EAttributeRtpmap.
+ */
+ IMPORT_C void SetL( RStringF aAttribute, const TDesC8& aValue );
+
+ /**
+ * Assigns attribute to the format level attribute.
+ * In the final output the attribute will placed after format level
+ * attribute.
+ *
+ * @param aFmtAttribute A format level
+ * attribute this attribute is assigned to.
+ */
+ IMPORT_C void AssignTo(const CSdpFmtAttributeField& aFmtAttribute);
+
+ /**
+ * Test if the attribute belongs to the given format level attribute.
+ * Note, that the check can be true for the media level paremeter if
+ * it appears after the last format level attribute.
+ *
+ * @param aFmtAttribute: A format level
+ * attribute this attribute belongs to.
+ * @return ETrue if attribute belongs to the format level attribute,
+ * EFalse otherwise.
+ */
+ IMPORT_C TBool BelongsTo(const CSdpFmtAttributeField& aFmtAttribute) const;
+
+ public: // Internal to codec
+
+ /**
+ * Externalizes the object to stream
+ *
+ * @param aStream Stream where the object's state will be stored
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ /**
+ * Creates object from the stream data
+ *
+ * @param aStream Stream where the object's state will be read
+ * @return Initialized object
+ */
+ static CSdpAttributeField* InternalizeL( RReadStream& aStream );
+
+ /**
+ * Informs if the attribute belongs to any format level attribute.
+ *
+ * @return ETrue if attribute belongs to any format level
+ * attribute, EFalse otherwise.
+ */
+ TBool IsFmtAttribute();
+
+ private: // Constructors
+
+ /**
+ * Constructor
+ */
+ CSdpAttributeField();
+
+ /**
+ * Second phase constructor
+ *
+ * @param aText Text string ending to LF character
+ */
+ void ConstructL( const TDesC8& aText );
+
+ /**
+ * Second phase constructor
+ *
+ * @param aAttribute Attribute identifier
+ * @param aValue Value of the attribute of KNullDesC8
+ */
+ void ConstructL( RStringF aAttribute, const TDesC8& aValue );
+
+ private: // Internal
+
+ /**
+ * Verifies that attribute is valid property attribute and initializes
+ * the member variables of class accordingly
+ *
+ * @param aAttribute Attribute in descriptor
+ */
+ void FormatProperyAttributeL( const TDesC8& aAttribute );
+
+ /**
+ * Verifies that attribute is valid value attribute and initializes
+ * the member variables of class accordingly
+ *
+ * @param aArray Array of the attributes
+ */
+ void FormatValueAttributeL( const TDesC8& aAttribute,
+ const TDesC8& aValue );
+
+ /**
+ * Verifies that the value is valid for the attribute
+ *
+ * @param aAttribute The attribute
+ * @param aArray Array containing the values (and attribute)
+ */
+ void VerifyValueAttributeL( SdpCodecStringConstants::TStrings aString,
+ const TDesC8& aValue );
+
+ /**
+ * Forms attribute and value strings out of the token array
+ * and pushes both (aAttribute & aValue) into cleanup stack
+ *
+ * @param aArray Token array
+ * @param aAttribute Attribute string (in cleanup stack)
+ * @param aValue Value string (in cleanup stack)
+ */
+ void CreateAttributeAndValueStringsLC( RArray<TPtrC8>& aArray,
+ HBufC8*& aAttribute,
+ HBufC8*& aValue );
+
+ /**
+ * Checks if the value is among the valid orient attributes
+ *
+ * @param aValue Value string
+ */
+ void CheckValidOrientL( const TDesC8& aValue );
+
+ /**
+ * Checks if the value is valid language attribute as
+ * specified in RFC 3066
+ *
+ * @param aValue Value string
+ */
+ void CheckValidLangStrL( const TDesC8& aValue );
+
+ /**
+ * Checks if the value is valid framerate attribute
+ *
+ * @param aValue Value string
+ */
+ void CheckValidFrameRateL( const TDesC8& aValue );
+
+ /**
+ * Checks if the value is among valid uri value for control attribute
+ *
+ * @param aValue Value string
+ */
+ void CheckValidControlL( const TDesC8& aValue );
+
+ /**
+ * Checks if the value is valid value for group attribute as
+ * specified in RFC 3388
+ *
+ * @param aValue Value string
+ */
+ void CheckValidGroupL( const TDesC8& aValue );
+
+ /**
+ * Checks if the value is valid value for des attribute as
+ * specified in RFC 3312
+ *
+ * @param aValue Value string
+ */
+ void CheckValidDesL( const TDesC8& aValue );
+
+ /**
+ * Checks if the value is valid value for curr and conf attribute as
+ * specified in RFC 3312
+ *
+ * @param aValue Value string
+ */
+ void CheckValidCurrAndConfL( const TDesC8& aValue );
+
+ /**
+ * Checks if value is included in the list of predefined values
+ *
+ * @param aItemsCount Predefined values count
+ * @param aValuesList List of predefined values
+ * @param aValue Value string
+ */
+ void ValidValueInListL( TInt aItemsCount,
+ const TText8* const aValuesList[],
+ const TDesC8& aValue );
+
+ /**
+ * Checks if the value is valid value for range attribute as
+ * specified in RFC 2326
+ *
+ * @param aValue Value string
+ */
+ void CheckValidRangeL( const TDesC8& aValue );
+
+
+ /**
+ * Checks if the value is valid rtpmap string
+ *
+ * @param aValue Value string
+ */
+ void CheckValidRtpmapL( const TDesC8& aValue );
+
+ /**
+ * Checks if the value is valid fmtp string
+ *
+ * @param aValue Value string
+ */
+ void CheckValidFmtpL( const TDesC8& aValue );
+
+ /**
+ * Set attribute and values. Attribute is not one of predefined ones.
+ *
+ * @param aAttribute Attribute string (in cleanup stack)
+ * @param aValue Value string
+ */
+ void SetNotPredefinedAttributeL( const TDesC8& aAttribute,
+ const TDesC8& aValue );
+
+ void CreateAttributeFieldPtrsL();
+
+ inline CSdpAttributeFieldPtrs& AttributeFieldPtrs();
+
+ inline const CSdpAttributeFieldPtrs& AttributeFieldPtrs() const;
+
+ void __DbgTestInvariant() const;
+
+
+ private: // Data
+
+ // String pool
+ RStringPool iPool;
+
+ // Attribute name
+ RStringF iAttribute;
+
+ // Flag indicating if the attribute is a property attribute
+ TBool iPropertyAttribute;
+
+ // Value field
+ HBufC8* iValue;
+ };
+
+#endif // CSDPATTRIBUTEFIELD_H