contentmgmt/cafstreamingsupport/inc/keystreamsink.h
branchRCL_3
changeset 43 2f10d260163b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/cafstreamingsupport/inc/keystreamsink.h	Mon Mar 15 12:46:43 2010 +0200
@@ -0,0 +1,111 @@
+// Copyright (c) 2007-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 "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
+ @publishedPartner
+ @released
+*/
+
+#ifndef KEYSTREAMSINK_H
+#define KEYSTREAMSINK_H
+
+#include <e32base.h>
+#include <caf/streaming/keyassociation.h>
+
+class RWriteStream;
+
+namespace StreamAccess
+	{
+	enum TEncryptionAlgorithm
+		{
+		ENoEncryption = 0,
+		EAES_128_CBC,
+		EAES_128_CTR
+		};
+	
+	enum TAuthenticationAlgorithm
+		{
+		ENoAuthentication = 0,
+		EHMAC_SHA1		 
+		};
+	/**
+ 	Defines the key stream sink abstraction. Key stream sink is used for applying keys decrypted by the CAF streaming agent
+	to their correct destination.
+ 
+ 	Typical implementations would be CIpSecKeyStreamSink, CSrtpKeyStreamSink etc.
+ 	*/
+	class CKeyStreamSink : public CBase
+		{
+	public:
+
+		/**  Clone the key stream sink. Required to support copying of key stream sinks without knowing their runtime type. 
+		*/
+		virtual CKeyStreamSink *CloneLC() const = 0;
+
+		/**  Push a decrypted key association to its sink. This function should be called only by CAgentKeyStreamDecoder
+		instances. Please note that this interface is synchronous, i.e. the function returns when the key is implemented.
+						 
+		@see CAgentKeyStreamDecoder
+
+		@param aKeyAssociation The key association extracted from the short-term key message. 
+		@leave One of the system-wide error codes.
+		*/
+		virtual void ProcessNewKeyAssociationL(const CKeyAssociation& aKeyAssociation) = 0;
+		 
+		/**  Set the encryption algorithm. If encryption is used, the encryption algorithm must be set before processing any key associations. 
+		Please note that changing the encryption algorithm once key associations have been processed is not supported. 
+		 
+		@param aEncryptionAlgorithm The encryption algorithm
+		@leave One of the system-wide error codes.
+		*/		 
+		virtual void SetEncryptionAlgorithmL(const TEncryptionAlgorithm& aEncryptionAlgorithm) = 0;
+		 
+		/**  Set the authentication algorithm. If authentication is used, the authetication algorithm must be set before processing any key associations. 
+		Please note that changing the authentication algorithm once key associations have been processed is not supported. 
+		 
+		@param aAuthenticationAlgorithm The authentication algorithm
+		@leave One of the system-wide error codes.
+		*/		 		 
+		virtual void SetAuthenticationAlgorithmL(const TAuthenticationAlgorithm& aAuthenticationAlgorithm) = 0;
+
+		/**  Externalize the key stream sink to a buffer. Leaves the allocated buffer on the cleanup stack.
+		 
+		@return Pointer to the buffer
+		@leave One of the system-wide error codes.
+		*/		 		 
+		IMPORT_C TPtr8 ExternalizeLC() const;
+
+		/**  Internalize the key stream sink from a buffer. Leaves the allocated key stream sink on the cleanup stack.
+		
+		@param aBuf Buffer with the externalized key stream sink
+		@return Pointer to the key stream sink
+		@leave One of the system-wide error codes.
+		*/		 		 
+		IMPORT_C static CKeyStreamSink *InternalizeLC(const TDesC8 &aBuf);
+		 
+		virtual ~CKeyStreamSink() {}
+	protected:
+		virtual void DoExternalizeL(RWriteStream &aStream) const = 0;
+	protected:
+		// Used for serialization
+		enum TSinksEnum
+			{
+			EIpSecSinkId = 1
+			};
+		};
+	} // namespace StreamAccess
+#endif // KEYSTREAMSINK_H
+