contentmgmt/contentaccessfwfordrm/inc/supplier.h
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/contentaccessfwfordrm/inc/supplier.h	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,164 @@
+/*
+* 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 "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 __SUPPLIER_H__
+#define __SUPPLIER_H__
+
+#include <e32base.h>
+#include <e32std.h>
+#include <caf/caftypes.h>
+
+class RHTTPHeaders;
+class RStringPool;
+
+namespace ContentAccess 
+	{
+	class CImportFile;
+	class CMetaDataArray;
+	class CAgentResolver;
+	class MFileHandleProvider;
+
+#ifndef REMOVE_CAF1
+	class CCafMimeHeader;
+#endif
+
+	/** 
+	Used to import files using a content access agent. In the case of some
+	DRM agents the import will be a transformation from an unprotected content type
+	to a protected content type.
+	 
+	It creates CImportFile objects to import files into a Content Access
+	Agent. CSupplier uses it's CAgentResolver to determine which agent should receive
+	the file based upon the mime type of the file.
+	
+	Clients can check if a mime type is supported by by calling the
+	CSupplier::IsImportSupported() function.
+	
+	The CSupplier does not dynamically update it's list of agents so applications
+	should not use a long term persistent instance of CSupplier.
+	
+	@publishedPartner
+	@released
+	*/
+	class CSupplier : public CBase
+		{ 
+	public:
+		/** Create a new CSupplier 
+		@return a CSupplier object
+		*/
+		IMPORT_C static CSupplier* NewL();
+
+		/** Create a new CSupplier 
+		@return a CSupplier object
+		*/
+		IMPORT_C static CSupplier* NewLC();
+
+		/** destructor */
+		virtual ~CSupplier();
+
+		/** Sets the output directory for any files generated by the CAF.
+		
+		@param aOutputDirectory The preferred location to store any output files
+		*/
+		IMPORT_C void SetOutputDirectoryL(const TDesC& aOutputDirectory);
+
+		/** Determines whether one of the CAF agents wants to import
+		a file with the given mimetype
+
+		If this function returns ETrue the application should use the CSupplier to 
+		create a ContentAccess::CImportFile session and import the file into CAF.
+		
+		@param aMimeType	The mime type of the file determined by an Apparc recognition or transmission header information.
+		@return				ETrue if the mimetype is recognized by one of the CAF agents, EFalse otherwise.
+		*/
+		IMPORT_C TBool IsImportSupported(const TDesC8& aMimeType);
+
+		
+		/** Get HTTP download headers from the agents
+
+		Some DRM schemes require specific headers to be present in the HTTP request
+		header. This function allows a client to retrieve these headers from the
+		agents so any download request will satisfy the criteria required by 
+		the HTTP server.
+
+		@param aStringPool The string pool used by the HTTP session
+		@param aRequestHeaders The agents will add any required fields to the headers
+		*/
+		IMPORT_C void PrepareHTTPRequestHeaders(RStringPool& aStringPool, RHTTPHeaders& aRequestHeaders) const;
+		
+		
+		/** Creates a new CImportFile object and allow the agent to generate the output files 
+		
+		@param aMimeType			This should be one of the mime types supported by CAF, IsImportSupported() can be used to check this.
+		@param aImportMetaData		Any additional information that may be useful for the agent performing the import. 
+									Ideally this will include the mime headers for the file about to be passed into CAF.
+		@param aSuggestedFileName	Suggested filename for the CAF agent to use when 
+		 							creating the output files, Details of the output files produced can be obtained using
+									CImportFile::OutputFileL().
+		@return					    A CImportFile object to import the file.
+		
+		@leave KErrCANoAgent		No agent supports the mime type supplied in aMimeType
+		*/
+		IMPORT_C CImportFile* ImportFileL(const TDesC8& aMimeType, const CMetaDataArray& aImportMetaData, const TDesC& aSuggestedFileName);
+
+		/** Creates a new CImportFile object where the caller must provide file handles to store output files. 
+		
+		This allows a server to store the output files within its own private directory. The CAF agent will write to the private directory 
+		using the file handle provided by the server.
+
+		If the agent requires a new output file it will return KErrCANewFileHandleRequired from CImportFile::Write() or CImportFile::WriteComplete() 
+		The application performing the supply should provide the agent with a new file handle using CImportFile::ContinueWithNewOutputFile();
+		
+		@param aMimeType			This should be one of the mime types supported a CAF agent, IsImportSupported() can be used to check this.
+		@param aImportMetaData		Any additional information that may be useful for the agent performing the import. 
+									Ideally this will include the mime headers for the file about to be passed into CAF.
+		@return					    A CImportFile object to import the file.
+		
+		@leave KErrCANoAgent		No agent supports the mime type supplied in aMimeType
+		*/
+		IMPORT_C CImportFile* ImportFileL(const TDesC8& aMimeType, const CMetaDataArray& aImportMetaData);
+
+#ifndef REMOVE_CAF1
+		/** Import a file
+		@param aMimeHeader Mime headers associated with the file to import
+		@param aSuggestedFileName The application supplied name for any output file created by the agent
+		@deprecated 
+		*/
+		IMPORT_C CImportFile* ImportFileL(CCafMimeHeader &aMimeHeader, const TDesC &aSuggestedFileName);
+#endif
+
+	private:	
+		CSupplier();
+		void ConstructL();
+
+		// Resolver used to figure out which CA agent is responsible for importing a particular file
+		CAgentResolver* iAgentResolver;
+		HBufC* iOutputDirectory;
+		};
+	}
+
+#endif