diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/sdpkeyfield.h --- a/epoc32/include/sdpkeyfield.h Tue Nov 24 13:55:44 2009 +0000 +++ b/epoc32/include/sdpkeyfield.h Tue Mar 16 16:12:26 2010 +0000 @@ -1,1 +1,193 @@ -sdpkeyfield.h +/* +* 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 the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Name : SdpKeyField.h +* Part of : SDP Codec +* Interface : SDK API, SDP Codec API +* Version : 1.0 +* +*/ + + + +#ifndef CSDPKEYFIELD_H +#define CSDPKEYFIELD_H + +// INCLUDES +#include +#include +#include "_sdpdefs.h" + +// FORWARD DECLARATIONS +class RReadStream; +class RWriteStream; + +// CLASS DECLARATION +/** + * @publishedAll + * @released + * + * This class encapsulates the encryption key field of + * the Session Description Protocol. + * + * 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 CSdpKeyField : public CBase + { + public: // Constructors and destructor + /** + * Constructs a new encryption key field. + * + * @param aFieldValue A string containing a correctly + * formatted field value terminated by a CRLF. + * @return a new instance. + */ + IMPORT_C static CSdpKeyField* DecodeL(const TDesC8& aFieldValue); + + /** + * Constructs a new encryption key field and adds the pointer to + * the cleanup stack. + * + * @param aFieldValue A string containing a correctly + * formatted field value terminated by a CRLF. + * @return a new instance. + * @leave In error case function leaves. + */ + IMPORT_C static CSdpKeyField* DecodeLC(const TDesC8& aFieldValue); + + /** + * Constructs a new encryption key field. + * + * @param aMethod Encryption method from the pre-defined + * SDP string table. User defined values are not accepted. + * @param aEncryptionKey A valid encryption key value + * or an empty descriptor to omit the key part. + * @return a new instance. + */ + IMPORT_C static CSdpKeyField* NewL(RStringF aMethod, + const TDesC8& aEncryptionKey); + + /** + * Constructs a new encryption key field and adds the pointer to + * the cleanup stack. + * + * @param aMethod Encryption method from the pre-defined + * SDP string table. User defined values are not accepted. + * @param aEncryptionKey A valid encryption key value + * or an empty descriptor to omit the key part. + * @return a new instance. + */ + IMPORT_C static CSdpKeyField* NewLC(RStringF aMethod, + const TDesC8& aEncryptionKey); + + /** + * Deletes the resources held by the instance. + */ + IMPORT_C ~CSdpKeyField(); + + public: // New functions + /** + * Writes the instance as a complete SDP field encoded as UTF-8 + * and formatted as defined in draft-ietf-mmusic-sdp-new-14. + * + * @param aStream Stream used for output. On return + * the stream includes correctly formatted key field. + */ + IMPORT_C void EncodeL(RWriteStream& aStream) const; + + /** + * Creates a new instance that is equal to the target. + * + * @return a new instance. + */ + IMPORT_C CSdpKeyField * 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 CSdpKeyField& aObj) const; + + /** + * Gets the encryption method. + * + * @return The method. + */ + IMPORT_C RStringF Method() const; + + /** + * Gets the encryption key. + * + * @return The key or an empty descriptor if there is no key part. + */ + IMPORT_C const TDesC8& EncryptionKey() const; + + /** + * Sets the encryption method and key. + * + * @param aMethod Encryption method from the pre-defined + * SDP string table. User defined values are not accepted. + * @param aEncryptionKey A valid encryption key value + * or an empty descriptor to omit the key part. + */ + IMPORT_C void SetL(RStringF aMethod, + const TDesC8& aEncryptionKey); + + public: + /** + * 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 CSdpKeyField* InternalizeL(RReadStream& aStream); + + private: + CSdpKeyField(); + void ConstructL(const TDesC8& aText); + void ConstructL(RStringF aMethod, const TDesC8& aEncryptionKey); + void DoInternalizeL(RReadStream& aStream); + void SetMethodAndKeyL(RStringF aMethod, + const TDesC8& aEncryptionKey, + TBool aAllowEmptyKeyValue); + void SetMethodClearAndKeyL(RStringF aMethod, const TDesC8& aEncryptionKey); + void SetMethodBase64AndKeyL(RStringF aMethod, const TDesC8& aText); + void SetMethodUriAndKeyL(RStringF aMethod, const TDesC8& aText); + void SetMethodPromptL(RStringF aMethod, const TDesC8& aText); + RArray GetElementsFromLineL( TLex8& aLexer); + + private: // Data + RStringF iMethod; + TBool iMethodOpen; + HBufC8* iEncryptionKey; + RStringPool iStringPool; + + __DECLARE_TEST; + }; + +#endif // CSDPKEYFIELD_H