contentmgmt/contentaccessfwfordrm/inc/agentinterface.h
changeset 0 2c201484c85f
child 8 35751d3474b7
equal deleted inserted replaced
-1:000000000000 0:2c201484c85f
       
     1 /*
       
     2 * Copyright (c) 2003-2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 /** 
       
    21 @file
       
    22 
       
    23 @publishedPartner
       
    24 @released
       
    25 */
       
    26 
       
    27 #ifndef __AGENTINTERFACE_H__
       
    28 #define __AGENTINTERFACE_H__
       
    29 
       
    30 #include <e32base.h>
       
    31 #include <ecom/ecom.h>
       
    32 
       
    33 #include <caf/caftypes.h>
       
    34 #include <caf/streamableptrarray.h>
       
    35 #include <caf/caferr.h>
       
    36 
       
    37 class RStringPool;
       
    38 class RHTTPHeaders;
       
    39 
       
    40 namespace ContentAccess
       
    41 {
       
    42 	class CEmbeddedObject;
       
    43 	class CSupplierOutputFile;
       
    44 	class RAttributeSet;
       
    45 	class RStringAttributeSet;
       
    46 	class TVirtualPathPtr;
       
    47 	class CRightsInfo;
       
    48 	class CVirtualPath;
       
    49 	class MAgentRightsBase;
       
    50 	class CImportFile;
       
    51 	class CMetaDataArray;
       
    52 	class CDirStreamable;
       
    53 
       
    54 	/**
       
    55 	 Defines the agent interface for consumer operations such as 
       
    56 	 reading and seeking within a content object in a file.
       
    57 
       
    58 	 @publishedPartner
       
    59 	 @released
       
    60      */
       
    61 	class CAgentData : public CBase
       
    62 		{
       
    63 	public:
       
    64 		/**
       
    65 		 Gets the data size in bytes.
       
    66 		 
       
    67 		 @param aSize	On return this will contain the size of the plaintext data in bytes.
       
    68 		 @leave KErrCASizeNotDetermined	Size could not be determined by the managing agent.
       
    69 		 @leave ...		One of the other CAF error codes defined in \c caferr.h  or one of the 
       
    70 						system-wide error codes for any other errors.		 
       
    71 		 @capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted
       
    72 		 */
       
    73 		virtual void DataSizeL(TInt &aSize) = 0;
       
    74 		
       
    75 		/**
       
    76 		 Allows a client to verify that the intent is supported by the
       
    77 		 current rights for the data object. 
       
    78 		 
       
    79 		 Doing so may cause subsequent reads (or other accesses)
       
    80 		 to fail. The result of the agent's evaluation
       
    81 		 of the intent is returned.
       
    82 		 
       
    83 		 @note Since the intent is only evaluated the agent will not decrement 
       
    84 		 any rights-state such as play counts.
       
    85 		  
       
    86 		 @param aIntent	The intended way the content will be used.
       
    87 		 @return Whether rights exist allowing the content to be used for this intent.
       
    88 		 @return KErrNone if the intent is permitted.
       
    89 		 @return KErrNoRights if no rights exist for the specified content object.
       
    90 		 @return KErrCANoPermission	if rights exist but the specified intent is not permitted.
       
    91 		 @return KErrCAPendingRights if the rights have not yet arrived but are expected soon.
       
    92 		 @return KErrNoPermission if rights exist but none permit the specified intent.
       
    93 		 @return KErrPermissionDenied if the client is not allowed to use this content object.
       
    94 		 @return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
    95 				other system-wide error codes for any other errors.
       
    96 
       
    97 		 @capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted
       
    98 		 */
       
    99 		virtual TInt EvaluateIntent(TIntent aIntent) = 0;
       
   100 		
       
   101 		/**
       
   102 		 Execute intent allows the application to signal it is about to carry out
       
   103 		 the specified intent on DRM protected content.The agent will decrement applicable 
       
   104 		 stateful rights such as play counts where necessary.
       
   105 
       
   106   		 Applications should be very careful to use this function correctly.
       
   107 		 @li If ExecuteIntent() is never called stateful rights will never be decremented. Users will be able to use the content forever
       
   108 		 @li If ExecuteIntent() is called too often stateful rights may be consumed prematurely. 
       
   109 
       
   110 		 Usually it would be best to call ExecuteIntent immediately before the content 
       
   111 		 is displayed or the instant playback begins. ExecuteIntent should not be considered a 
       
   112 		 prerequisite for calling the Read functions. It is valid for an application to read from 
       
   113 		 the file before calling ExecuteIntent. 
       
   114 
       
   115 		 @note Since rights are executed here the agent will decrement any rights-state such as 
       
   116 		 play counts that apply. 
       
   117 		 
       
   118 		@param aIntent	The intent indicator.
       
   119 		@return The result of attempting executing the intent.
       
   120 		@return KErrNone if the intent is permitted and stateful rights may have been decremented.
       
   121 		@return KErrNoRights if no rights exist for the specified content object.
       
   122 		@return KErrCANoPermission	if rights exist but the specified intent is not permitted.
       
   123 		@return KErrCAPendingRights if the rights have not yet arrived but are expected soon.
       
   124 		@return KErrNoPermission if rights exist but none permit the specified intent.
       
   125 		@return KErrPermissionDenied if the client is not allowed to use this content object.
       
   126 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the
       
   127 				other system-wide error codes for any other errors.
       
   128 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   129 		*/
       
   130 		virtual TInt ExecuteIntent(TIntent aIntent) = 0;
       
   131 
       
   132 		/** 
       
   133 		 Reads from a content object up to the maximum length of the
       
   134 		 descriptor or the end of the content object.
       
   135 		 	
       
   136 		 When an attempt is made to read beyond the end of the content,
       
   137 		 no error is returned. The descriptor’s length is set to the
       
   138 		 number of bytes that were read into it. Therefore, when reading
       
   139 		 through content, the end has been reached when the
       
   140 		 descriptor length (given by TDesC::Length()) is zero.
       
   141 		 
       
   142 		 @param aDes	Descriptor into which binary data is read. Any existing
       
   143 		  				contents are overwritten. On return, its length is set
       
   144 		 				to the number of bytes read.
       
   145 		 @return		KErrNone if successful, otherwise another of the
       
   146 		  				system-wide error codes.
       
   147 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   148 		*/
       
   149 		virtual TInt Read(TDes8& aDes) = 0;
       
   150 
       
   151 		/**
       
   152 		 Reads a specified number of bytes of content.
       
   153 		  
       
   154 		 @see Read(TDes8& aDes)
       
   155 		 		 
       
   156 		 @param aDes	Descriptor into which binary data is read. Any existing
       
   157 		  				contents are overwritten. On return, its length is set
       
   158 		 				to the number of bytes read.
       
   159 		 @param aLength		The number of bytes to read from the file,
       
   160 		 					or to the end of the file, whichever is encountered first. 
       
   161 		 					The length of the buffer is set to the number of bytes actually read.
       
   162 		 @return		KErrNone if successful.
       
   163 		 @return		Otherwise one of the CAF error codes defined in \c caferr.h  or 
       
   164 		 				one of the other system-wide error codes.
       
   165 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   166 		*/
       
   167 		virtual TInt Read(TDes8& aDes, TInt aLength) = 0;
       
   168 
       
   169 		/**
       
   170 		 Reads content asynchronously.
       
   171 		 
       
   172 		 @see Read(TDes8& aDes)
       
   173 		 
       
   174 		 @param aDes 		Descriptor into which binary data is read. Any
       
   175 		  					existing contents are overwritten. On return,
       
   176 		 					its length is set to the number of bytes read. 
       
   177 		 @param aStatus		Asynchronous request status. On completion this will contain one 
       
   178 		 					of the following error codes: KErrNone if the data was 
       
   179 							successfully read. Otherwise one of the CAF error codes defined in 
       
   180 							\c caferr.h  or one of the other standard system-wide
       
   181 							error codes for any other errors.
       
   182 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   183 		*/
       
   184 		virtual void Read(TDes8& aDes, TRequestStatus& aStatus) = 0;
       
   185 
       
   186 		/**
       
   187 		 Reads content asynchronously (up to a specified maximum number of bytes)
       
   188 		 
       
   189 		 @see Read(TDes8& aDes)
       
   190 		 
       
   191 		 @param aDes 		Descriptor into which binary data is read. Any
       
   192 		  					existing contents are overwritten. On return,
       
   193 		 					its length is set to the number of bytes read. 
       
   194 		 @param aLength		The number of bytes to read from the file,
       
   195 		 					or to the end of the file, whichever is encountered first. 
       
   196 		 					The length of the buffer is set to the number of bytes actually read.
       
   197 		 @param aStatus		Asynchronous request status. On completion this will contain one 
       
   198 		 					of the following error codes: KErrNone if the data was 
       
   199 							successfully read. Otherwise one of the CAF error codes defined in 
       
   200 							\c caferr.h  or one of the other standard system-wide
       
   201 							error codes for any other errors.
       
   202 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   203 		*/
       
   204 		virtual void Read(TDes8& aDes, TInt aLength, TRequestStatus& aStatus) = 0;
       
   205 		
       
   206 		/**
       
   207 		 Cancels asynchronous read.
       
   208 		 
       
   209 		 @param aStatus		Asynchronous request status. This parameter should have been supplied earlier to
       
   210 		 					an asynchronous Read call. If it has not been previously supplied to a Read call,
       
   211 		 					this function will not have any effect.
       
   212 		 @capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   213 		*/
       
   214 		virtual void ReadCancel(TRequestStatus& aStatus);
       
   215 
       
   216 		/**
       
   217 		 Changes or retrieves the location of the file pointer within 
       
   218 		 the content object
       
   219 		 
       
   220 		 There are four seek modes used: 
       
   221 		 
       
   222 		 @li ESeekStart - Sets the file pointer aPos bytes from the start of the 
       
   223 		 content object.  aPos is not modified by the call to Seek()
       
   224 		 @li ESeekEnd - Sets the file pointer aPos bytes from the end of the 
       
   225 		 content object. The aPos parameter supplied should be zero or negative 
       
   226 		 when using ESeekEnd. Upon completion aPos is updated with the current 
       
   227 		 position relative to the start of the content object.
       
   228 		 @li ESeekCurrent - Moves the file pointer aPos bytes from the current 
       
   229 		 position. Upon completion aPos is updated with the new position relative 
       
   230 		 to the start of the content object. Suppling a zero value for the aPos Parameter can be
       
   231 		 used to retrieve the current file pointer location 
       
   232 		 @li ESeekAddress Sets the aPos parameter to the address of the byte 
       
   233 		 aPos bytes from the start of the content object
       
   234 
       
   235 		 @see TSeek
       
   236 		 
       
   237 		 @param aMode	Seek mode - controls the destination of the
       
   238 		  				seek operation.
       
   239 		  
       
   240 		 @param aPos	Offset from either the start, end or current position depending upon 
       
   241 		 the seek mode. Negative offsets are used to seek before the current position or
       
   242 		 relative to the end of the file.
       
   243 		 
       
   244 		 @return		KErrNone if successful. 
       
   245 		 @return		Otherwise one of the CAF error codes defined in \c caferr.h  or one 
       
   246 		 				of the other system-wide error codes.
       
   247 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   248 		*/
       
   249 		virtual TInt Seek(TSeek aMode, TInt& aPos) = 0;
       
   250 
       
   251 		/** 
       
   252 		Allows an application to request the modification of a property 
       
   253 		within the agent handling this content. The agent may or may not
       
   254 		permit the property to be changed
       
   255 		 	
       
   256 		@param aProperty The property to set.
       
   257 		@param aValue The value of the property.
       
   258 		@return Whether or not the property was set.
       
   259 		@return KErrNone if the property was set.
       
   260 		@return KErrCANotSupported if the agent does not support the property or value.
       
   261 		@return KErrAccessDenied if the agent does not permit the property to be changed.
       
   262 		@return KErrPermissionDenied if the application does not have the necessary capability to change the property.
       
   263 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   264 		 */
       
   265 		virtual TInt SetProperty(TAgentProperty aProperty, TInt aValue) = 0;
       
   266 
       
   267 		/**  Get the value of an attribute for this content object
       
   268  
       
   269 		@param aAttribute The attribute to query, from ContentAccess::TAttribute.
       
   270 		@param aValue Used to return the attribute value.
       
   271 		@return Whether the attribute was updated.
       
   272 		@return KErrNone if the value of the attribute was updated.
       
   273 		@return KErrCANotSupported if the requested attribute does not exist.
       
   274 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.
       
   275 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   276 				other system-wide error codes for any other errors.
       
   277 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   278 		*/
       
   279 		virtual TInt GetAttribute(TInt aAttribute, TInt& aValue)=0;
       
   280 
       
   281 		/** Get a set of attributes from a content object
       
   282 
       
   283 		@param aAttributeSet The set of attributes to query and update.
       
   284 		@return Whether the attribute set was updated.
       
   285 		@return KErrNone if the attributes were retrieved successfully.
       
   286 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.
       
   287 		@return Otherwise one of the CAF error codes defined in \c caferr.h  or one of the 
       
   288 				other system-wide error codes for any other errors.				 
       
   289 		*/
       
   290 		virtual TInt GetAttributeSet(RAttributeSet& aAttributeSet) = 0;
       
   291 
       
   292 		/**  Get text string attributes or meta-data for this content object
       
   293 
       
   294 		@param aAttribute The attribute to query, from ContentAccess::TStringAttribute.
       
   295 		@param aValue Returns the value of the attribute.
       
   296 		@return Whether the value was updated.
       
   297 		@return KErrNone if the attribute was retrieved.
       
   298 		@return KErrOverflow if the buffer was not large enough to return the result.
       
   299 		@return KErrCANotSupported if the requested attribute does not exist.
       
   300 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.
       
   301 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   302 				other system-wide error codes for any other errors.				 
       
   303 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   304 		*/
       
   305 		virtual TInt GetStringAttribute(TInt aAttribute, TDes& aValue)=0;
       
   306 
       
   307 	
       
   308 		/** Used to obtain a set of string attributes 
       
   309 
       
   310 		@param aStringAttributeSet The set of attributes to query and update.
       
   311 		@return Whether the string attribute set was updated.
       
   312 		@return KErrNone if the attributes were retrieved successfully.
       
   313 		@return KErrNotFound if the default content object was not found.
       
   314 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.
       
   315 		@return Otherwise one of the CAF error codes defined in \c caferr.h  or one of the 
       
   316 				other system-wide error codes for any other errors.				 
       
   317 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
   318 		*/
       
   319 		virtual TInt GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet)=0;
       
   320 		
       
   321 		/**  
       
   322 		 Reads content asynchronously. The data is read from a specified offset 
       
   323 		 up to a specified number of bytes or until the end of the content object 
       
   324 		 is reached. The data is read into the descriptor buffer supplied.
       
   325 		 
       
   326 		 @see Read(TDes8& aDes)
       
   327 		 
       
   328 		 @param aPos		Position of first byte to be read. 
       
   329 		 					This is an offset from the start of the file. 
       
   330 		 @param aDes 		Descriptor into which binary data is read. Any
       
   331 		  					existing contents are overwritten. On return,
       
   332 		 					its length is set to the number of bytes read. 
       
   333 		 @param aLength		The number of bytes to read from the file,
       
   334 		 					or to the end of the file, whichever is encountered first. 
       
   335 		 					The length of the buffer is set to the number of bytes actually read.
       
   336 		 @param aStatus		Asynchronous request status. On completion this will contain one 
       
   337 		 					of the following error codes: KErrNone if the data was 
       
   338 							successfully read. Otherwise one of the CAF error codes defined in 
       
   339 							\c caferr.h  or one of the other standard system-wide
       
   340 							error codes for any other errors.
       
   341 		 @return KErrNone if the async read request was successfully submitted.
       
   342 		 @return KErrCANotSupported if the agent does not support this operation.
       
   343 		 @capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   344 		*/
       
   345 		virtual TInt Read(TInt aPos, TDes8& aDes, TInt aLength, TRequestStatus& aStatus);
       
   346 		};
       
   347 
       
   348 	/**	Defines the agent interface allowing clients to browse the objects 
       
   349 	within a file
       
   350 
       
   351 	@publishedPartner
       
   352 	@released
       
   353 	*/
       
   354 	class CAgentContent : public CBase
       
   355 		{
       
   356 	public:
       
   357  		/** Open a Container object within the file.
       
   358  		
       
   359  		Allows an application to access the content objects and 
       
   360  		any nested container objects within the specified container.
       
   361   		
       
   362  		@param aUniqueId The container object's unique ID.
       
   363 		@return Whether the container was opened.
       
   364  		@return KErrNone if the container was opened successfully.
       
   365  		@return KErrNotFound if the container does not exist.
       
   366 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.		 
       
   367 		@return Otherwise one of the CAF error codes defined in \c caferr.h  or one of the 
       
   368 				other system-wide error codes for any other errors.
       
   369 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   370  		*/
       
   371 		virtual TInt OpenContainer(const TDesC& aUniqueId) = 0;
       
   372 
       
   373  		/** Close the current container object and go back to previous enclosing
       
   374  		container within the file.
       
   375  		
       
   376  		Allows an application to access the content objects and 
       
   377  		any nested container objects within parent container
       
   378   		
       
   379 		@return Whether the container was closed.
       
   380   		@return KErrNone if the container was closed.
       
   381   		@return KErrNotFound if there is no enclosing container.
       
   382   		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.		 		
       
   383   		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   384  		*/
       
   385 		virtual  TInt CloseContainer() = 0;
       
   386 
       
   387 		/** List all the embedded container objects and content objects within the 
       
   388 		current container
       
   389  		 		
       
   390 		The UniqueId() member of CEmbeddedObject can be used to refer directly to 
       
   391 		a particular object within the file.
       
   392 
       
   393 		@param aArray The array to be populated with the embedded objects. 
       
   394 		@leave KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.		 
       
   395 		@leave ...			One of the CAF error codes defined in \c caferr.h  or one of the 
       
   396 							other system-wide error codes for any other errors.
       
   397   		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   398  		*/
       
   399 		virtual void GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray) = 0;
       
   400 		
       
   401 		/** List all the embedded objects within the current container that
       
   402 		are of the specified type
       
   403  		 		
       
   404 		@param aArray The array to be populated with the embedded objects. 
       
   405 		@param aType The type of objects to list.
       
   406 		@leave KErrPermissionDenied If the access to the protected content is not permitted by the CAF Agent.		 
       
   407 		@leave ...			One of the CAF error codes defined in \c caferr.h  or one of the 
       
   408 							other system-wide error codes for any other errors.
       
   409   		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   410  		*/
       
   411 		virtual void GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray, TEmbeddedType aType) = 0;
       
   412 
       
   413 		/** Search the current container for content objects with a particular mime type
       
   414 
       
   415   		@param aArray The array to store the results of the search. The agent will add CEmbeddedObject objects to the supplied array.
       
   416 		@param aMimeType The mime type to search for.
       
   417 		@param aRecursive ETrue to search inside containers embedded within the current container, EFalse to search only the current container.
       
   418 		@return The result of the search.
       
   419 		@return KErrNone if the search was successful, even if no content objects were found.
       
   420 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.		 
       
   421 		@return Otherwise one of the CAF error codes defined in \c caferr.h  or one of the 
       
   422 				other system-wide error codes for any other errors.
       
   423 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   424 		*/
       
   425 		virtual TInt Search(RStreamablePtrArray<CEmbeddedObject>& aArray, const TDesC8& aMimeType, TBool aRecursive) = 0;
       
   426 		
       
   427 		/**  Get an attribute for an object within the file
       
   428 	
       
   429 		@param aAttribute The attribute to query, from ContentAccess::TAttribute.
       
   430 		@param aValue Used to return the attribute value.
       
   431 		@param aUniqueId The UniqueId of the object within the file.
       
   432 		@return Whether the attribute value was updated.
       
   433 		@return KErrNone if the value of the attribute was updated.
       
   434 		@return KErrNotFound if the object with the given UniqueId was not found.
       
   435 		@return KErrCANotSupported if the requested attribute does not exist.
       
   436 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.	 
       
   437 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   438 				other system-wide error codes for any other errors.
       
   439 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
   440 		*/
       
   441 		virtual TInt GetAttribute(TInt aAttribute, TInt& aValue, const TDesC& aUniqueId) = 0;
       
   442 
       
   443 		/** Get a set of attributes for an object within the file
       
   444 
       
   445 		@param aAttributeSet The set of attributes to query and update.
       
   446 		@param aUniqueId The unique ID of the object within the file.
       
   447 		@return Whether that attribute set was updated.
       
   448 		@return KErrNone if the attributes were retrieved successfully.
       
   449 		@return KErrNotFound if the default content object was not found.
       
   450 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.		 
       
   451 		@return Otherwise one of the CAF error codes defined in \c caferr.h  or one of the 
       
   452 				other system-wide error codes for any other errors.
       
   453 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
   454 		*/
       
   455 		virtual TInt GetAttributeSet(RAttributeSet& aAttributeSet, const TDesC& aUniqueId) = 0;
       
   456 
       
   457 		/**  Get text string attributes or meta-data for an object within the file
       
   458 
       
   459 		@param aAttribute The attribute to query, from ContentAccess::TStringAttribute.
       
   460 		@param aValue Returns the value of the attribute.
       
   461 		@param aUniqueId The UniqueId of the object within the file. 
       
   462 		@return Whether the attribute value was updated.
       
   463 		@return KErrNone if the attribute was retrieved.
       
   464 		@return KErrNotFound if the object with the given UniqueId was not found.
       
   465 		@return KErrOverflow if the buffer was not large enough to return the result.
       
   466 		@return KErrCANotSupported if the requested attribute does not exist.
       
   467 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.	 
       
   468 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   469 				other system-wide error codes for any other errors.
       
   470 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
   471 		*/
       
   472 		virtual TInt GetStringAttribute(TInt aAttribute, TDes& aValue, const TDesC& aUniqueId) = 0;
       
   473 
       
   474 		/** Used to obtain a set of string attributes for an object within the file
       
   475 
       
   476 		@param aStringAttributeSet The set of attributes to query and update.
       
   477 		@param aUniqueId The UniqueId of the container or content. 
       
   478 		@return Whether the attribute set was updated.
       
   479 		@return KErrNone if the attributes were retrieved successfully.
       
   480 		@return KErrNotFound if the object with the given UniqueId was not found.
       
   481 		@return KErrPermissionDenied if the access to the protected content is not permitted by the CAF Agent.		 
       
   482 		@return Otherwise one of the CAF error codes defined in \c caferr.h  or one of the 
       
   483 				other system-wide error codes for any other errors.
       
   484 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
   485 		*/
       
   486 		virtual TInt GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, const TDesC& aUniqueId)=0;
       
   487 
       
   488 		/** Allows extended synchronous calls to the CAF agent handling this file
       
   489 		
       
   490 		Applications familiar with the agent can pass objects in and out using serialization.
       
   491 
       
   492 		@param aCommand The agent defined command.
       
   493 		@param aInputBuffer Non modifyable input data buffer.
       
   494 		@param aOutputBuffer Modifyable output buffer to hold the result of the command.
       
   495 		@return The outcome of the agent specific command.
       
   496 		@return KErrCANotSupported if the agent does not recognize the command.
       
   497 		@return KErrOverflow if the output buffer supplied is too small.
       
   498 		@return KErrPermissionDenied if the agent does not allow the client to execute the command.
       
   499 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   500 				other system-wide error codes for any other errors.
       
   501 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   502 		*/
       
   503 		virtual TInt AgentSpecificCommand(TInt aCommand, const TDesC8& aInputBuffer, TDes8& aOutputBuffer) = 0;
       
   504 
       
   505 		/** Allows extended synchronous calls to the CAF agent handling this file.
       
   506 		Applications familiar with the agent can pass objects in and out using serialization.
       
   507 		NB: No assumption should be made about the scope of the descriptor 
       
   508 		passed to aInputBuffer for asynchronous IPC.
       
   509 
       
   510 		@param aCommand The agent defined command.
       
   511 		@param aInputBuffer Non modifyable input data buffer.
       
   512 		@param aOutputBuffer Modifyable output buffer to hold the result of the command.
       
   513 		@param aStatus Asynchronous request status. On completion this will contain 
       
   514 						one of the following error codes:
       
   515 						KErrNone if the command was successfully executed.
       
   516 						KErrCANotSupported  if the agent does not recognize the command.
       
   517 						KErrOverflow if the output buffer supplied is too small.
       
   518 						KErrPermissionDenied if the agent does not allow the client 
       
   519 						to execute the command. Otherwise one of the other CAF error codes defined 
       
   520 						in \c caferr.h  or one of the other system-wide error codes 
       
   521 						for any other errors.
       
   522 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   523 		*/
       
   524 		virtual void AgentSpecificCommand(TInt aCommand, const TDesC8& aInputBuffer, TDes8& aOutputBuffer, TRequestStatus& aStatus) = 0;
       
   525 
       
   526 		/** Request notification for an event for an object within the file.
       
   527 		NB: No assumption should be made about the scope of the descriptor 
       
   528 		passed to aUniqueId for asynchronous IPC.
       
   529 
       
   530 		@param aMask Bitmask of events the caller is interested in.
       
   531 		@param aStatus The TRequestStatus object to complete if the event occurs.
       
   532 		@param aUniqueId The UniqueId of the container or content. 
       
   533 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   534 		*/
       
   535 		virtual void NotifyStatusChange(TEventMask aMask, TRequestStatus& aStatus, const TDesC& aUniqueId) = 0;
       
   536 		
       
   537 		/** Cancel a previous notification request
       
   538 
       
   539 		@param aStatus The TRequestStatus supplied in the call to NotifyStatusChange().
       
   540 		@param aUniqueId The UniqueId of the content object within the file.
       
   541 		@return The outcome of the cancel request.
       
   542 		@return KErrNone if the request was cancelled.
       
   543 		@return KErrNotFound if there was no matching request outstanding.
       
   544 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   545 		*/
       
   546 		virtual TInt CancelNotifyStatusChange(TRequestStatus& aStatus, const TDesC& aUniqueId) = 0;
       
   547 
       
   548 		/** Request the agent to obtain rights for a protected content object.
       
   549 		NB: No assumption should be made about the scope of the descriptor 
       
   550 		passed to aUniqueId for asynchronous IPC.
       
   551 
       
   552 		This request may be handled differently by different agents. 
       
   553 		Some agents may open a browser and direct the user to a URL. Others may 
       
   554 		download and install the rights in the background.
       
   555 
       
   556 		The call should not block execution, applications can wait for a notification 
       
   557 		if they are interested in the outcome. 
       
   558 		
       
   559 		If a rights request completes sucessfully it does not necessarily mean rights 
       
   560 		are available. It just means the request is complete.
       
   561 
       
   562 		@param aStatus Asynchronous request status. On completion this will contain 
       
   563 						one of the following error codes:
       
   564 						KErrNone if the rights request was successful.
       
   565 						KErrCANotSupported  if the agent does not allow rights requests.
       
   566 						Otherwise one of the other CAF error codes defined in \c caferr.h  
       
   567 						or one of the other system-wide error codes 
       
   568 						for any other errors.
       
   569 
       
   570 		@param aUniqueId The unique id of the object within the file.
       
   571 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted.		
       
   572 		*/
       
   573 		virtual void RequestRights(TRequestStatus& aStatus, const TDesC& aUniqueId) = 0; 
       
   574 
       
   575 		/** Cancel a previous RequestRights() request
       
   576 
       
   577 		@param aStatus The TRequestStatus that was supplied to the RequestRights() function.
       
   578 		@param aUniqueId The objects Unique Id that was supplied to the RequestRights() function.
       
   579 		@return The result of the cancel rights request.
       
   580 		@return KErrNone if the rights request was cancelled.
       
   581 		@return KErrNotFound if there was no matching rights request outstanding.
       
   582 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   583 		*/
       
   584 		virtual TInt CancelRequestRights(TRequestStatus& aStatus, const TDesC& aUniqueId) = 0;
       
   585 
       
   586 		/** View information associated with a single content object
       
   587 		
       
   588 		This call blocks execution and only returns once the display is dismissed 
       
   589 		by the user.
       
   590 
       
   591 		@param aInfo The information to display.
       
   592 		@param aUniqueId The unique id of the object within the file.
       
   593 		@leave KErrCANotSupported if information cannot be displayed or does not exist.
       
   594 		@leave ...			One of the other CAF error codes defined in \c caferr.h  
       
   595 							or one of the system-wide error codes for 
       
   596 							any other errors.
       
   597 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
   598 		*/
       
   599 		virtual void DisplayInfoL(TDisplayInfo aInfo, const TDesC& aUniqueId) = 0;
       
   600 
       
   601 		/** 
       
   602 		Allows an application to request the modification of a property 
       
   603 		within the agent handling this content. The agent may or may not
       
   604 		permit the property to be changed
       
   605 		 	
       
   606 		@param aProperty The property to set.
       
   607 		@param aValue The value of the property.
       
   608 		@return Whether the property was set.
       
   609 		@return KErrNone if the property was set.
       
   610 		@return KErrCANotSupported if the agent does not support the property or value.
       
   611 		@return KErrAccessDenied if the agent does not permit the property to be changed.
       
   612 		@return KErrPermissionDenied if the application does not have the necessary capability to change the property.
       
   613 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
   614 		*/
       
   615 		virtual TInt SetProperty(TAgentProperty aProperty, TInt aValue) = 0;
       
   616 		
       
   617 		};
       
   618 
       
   619 	/**
       
   620 	 Defines the interface for importing files into a Content access agent. 
       
   621 
       
   622 	The agent should treat the import as a transaction and either import the
       
   623 	entire file or revert to the state before the import if the import is cancelled.
       
   624 	
       
   625 	The client cancels an import by deleting the CAgentImportFile object 
       
   626 	before WriteDataComplete() is called. 
       
   627 	 
       
   628 	 @publishedPartner
       
   629 	 @released
       
   630 	 */
       
   631 	class CAgentImportFile : public CBase
       
   632 		{
       
   633 	public:
       
   634 
       
   635 		/** Writes a block of data from a file to the agent
       
   636 		
       
   637 		@param aData The block of data.
       
   638 		@return	The result of the write operation.
       
   639 		@return KErrNone if the data was written successfully.
       
   640 		@return	KErrCANewFileHandleRequired if the agent requires the client to provide a new file handle before proceeding. The agent must save its state and continue processing when the new handle is supplied by ContinueWithNewOutputFile().
       
   641 		@return KErrNotReady if the agent was not expecting WriteData() to be called at this point.
       
   642 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   643 				other system-wide error codes for any other errors.
       
   644 		@capability DRM Importing DRM protected content is not permitted for processes without DRM capability. 
       
   645 		*/
       
   646 		virtual TInt WriteData(const TDesC8& aData)=0;
       
   647 
       
   648 		/** Signals to the agent that the entire file has now been transferred to the agent.
       
   649 		
       
   650 		@return The result of the write operation. 
       
   651 		@return KErrNone if the data was written successfully.
       
   652 		@return	KErrCANewFileHandleRequired if the agent requires the client to provide a new file handle before proceeding. The agent must save its state and continue processing when the new handle is supplied by ContinueWithNewOutputFile().
       
   653 		@return KErrNotReady if the agent was not expecting WriteDataComplete() to be called at this point.
       
   654 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   655 				other system-wide error codes for any other errors.		
       
   656 		@capability DRM Importing DRM protected content is not permitted for processes without DRM capability. 
       
   657 		*/
       
   658 		virtual TInt WriteDataComplete()=0;
       
   659 
       
   660 		/** Asynchronously writes a block of data from a file the agent
       
   661 		 
       
   662 		Notifies the client when the write operation is complete.
       
   663 		
       
   664 		@param aData 	The block of data.
       
   665 		@param aStatus 	Asynchronous request status. On completion this will 
       
   666 						contain one of the following error codes: KErrNone if the data was written successfully. 
       
   667 						KErrCANewFileHandleRequired if the agent requires a new 
       
   668 						file handle before proceeding - the agent must save its 
       
   669 						state and continue processing when the new handle 
       
   670 						is supplied by ContinueWithNewOutputFile().
       
   671 						KErrNotReady if the agent was not expecting WriteDataComplete() 
       
   672 						to be called at this point. Otherwise one of the other CAF error codes 
       
   673 						defined in \c caferr.h  or one of the other standard system-wide 
       
   674 						error codes for any other errors.
       
   675 		@capability DRM Importing DRM protected content is not permitted for processes without DRM capability. 
       
   676 		*/
       
   677 		virtual void WriteData(const TDesC8& aData, TRequestStatus& aStatus)=0;
       
   678 
       
   679 		/** Signals to the agent that the entire file has now been transferred to the agent
       
   680 		
       
   681 		Notifies the client when any final processing operation is complete.
       
   682 		
       
   683 		@param aStatus 	Asynchronous request status. On completion this will 
       
   684 						contain one of the following error codes: KErrNone if the data was written successfully. 
       
   685 						KErrCANewFileHandleRequired if the agent requires a new 
       
   686 						file handle before proceeding - the agent must save its 
       
   687 						state and continue processing when the new handle 
       
   688 						is supplied by ContinueWithNewOutputFile().
       
   689 						KErrNotReady if the agent was not expecting WriteDataComplete() 
       
   690 						to be called at this point. Otherwise one of the other CAF error codes 
       
   691 						defined in \c caferr.h  or one of the other standard system-wide 
       
   692 						error codes for any other errors.
       
   693 		@capability DRM Importing DRM protected content is not permitted for processes without DRM capability. 
       
   694 		*/
       
   695 		virtual void WriteDataComplete(TRequestStatus& aStatus)=0;
       
   696 
       
   697 		/** Gets the number of output files produced so far. 
       
   698 		@return The number of output files.
       
   699 		*/
       
   700 		virtual TInt OutputFileCountL() const = 0;
       
   701 
       
   702 		/** Return information about an output file generated by the import operation. 
       
   703 		
       
   704 		 It is possible that the output file does not have the same name 
       
   705 		 as the one suggested at the beginning of the import. An agent may
       
   706 		 need to use a particular file extension or a particular name.
       
   707 
       
   708 		The agent may decide not to store the output file in the output directory 
       
   709 		suggested at the start of the import. eg. it may store the file in its private 
       
   710 		server directory.
       
   711 
       
   712 		The output files may only appear in this array after the WriteDataComplete() 
       
   713 		function has been called. 
       
   714 
       
   715 		@param aIndex The zero-based index of the file (must be less than the value returned by OutputFileCountL().
       
   716 		@return The CSupplierOutputFile for this object.
       
   717 		@capability DRM Importing DRM protected content is not permitted for processes without DRM capability. 
       
   718 		*/
       
   719 		virtual CSupplierOutputFile& OutputFileL(TInt aIndex) = 0;
       
   720 
       
   721 		/** Retrieve the import status
       
   722 
       
   723 		Used to indicate non fatal problems encountered during the import operation.
       
   724 		Provides feedback to the client in case any problems are encountered.
       
   725 
       
   726 		The client can then decide whether or not to continue the import.
       
   727 		 
       
   728 		@return	The state of the import operation.
       
   729 		@capability DRM Importing DRM protected content is not permitted for processes without DRM capability. 
       
   730 		*/
       
   731 		virtual TImportStatus GetImportStatus() const = 0;
       
   732 
       
   733 		
       
   734 		/** Get the agents suggestion for the file extension of the output file required by the agent
       
   735 
       
   736 		This function should only be called when the agent has returned KErrCANewFileHandleRequired from
       
   737 		WriteData() or WriteDataComplete().
       
   738 
       
   739 		The extension must include the dot '.' character.
       
   740 
       
   741 		@param aFileExtension On completion this will contain the appropriate file extension.
       
   742 		@return The result of the request for a file extension.
       
   743 		@return KErrNone if the agent populated aFileExtension with the correct file extension.
       
   744 		@return KErrNotReady if the agent is not waiting for another file handle to be provided.
       
   745 		@return KErrUnknown if the agent does not know what extension should be used.
       
   746 		*/
       
   747 		virtual TInt GetSuggestedOutputFileExtension(TDes& aFileExtension) = 0;
       
   748 
       
   749 		/** Get the agents suggestion for the file name (with extension) of the output file required by the agent
       
   750 
       
   751 		This function should only be called when the agent has returned KErrCANewFileHandleRequired from
       
   752 		WriteData() or WriteDataComplete().
       
   753 
       
   754 		The file name is of the form filename.extension.
       
   755 
       
   756 		@param aFileName On completion this will contain the appropriate filename.
       
   757 		@return KErrNone if the agent populated aFileName with the correct file name.
       
   758 		@return KErrNotReady if the agent is not waiting for another file handle to be provided.
       
   759 		@return KErrUnknown if the agent does not know what file name should be used.
       
   760 		*/
       
   761 		virtual TInt GetSuggestedOutputFileName(TDes& aFileName) = 0;
       
   762 
       
   763 		/** Continue the last write operation with a new file handle as requested by the agent
       
   764 
       
   765 		@param aFile A new file handle opened with write permission.
       
   766 		@param aFileName The name of the file handle that has  been supplied. This is used by the agent when creating CSupplierOutputFile objects. It should include the full path and filename in order to be consistent with files generated by the agent.
       
   767 		@return The result of the continuing write operation.
       
   768 		@return KErrNone if the WriteData() or WriteDataComplete() operation is now complete.
       
   769 		@return KErrCANewFileHandleRequired if the agent requires a new 
       
   770 						file handle before proceeding - the agent must save its 
       
   771 						state and continue processing when the new handle 
       
   772 						is supplied by ContinueWithNewOutputFile().
       
   773 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   774 				other system-wide error codes for any other errors.		
       
   775 		*/
       
   776 		virtual TInt ContinueWithNewOutputFile(RFile& aFile, const TDesC& aFileName) = 0;
       
   777 
       
   778 		/** Continue the last write operation with a new file handle and return the result asynchronously.
       
   779 
       
   780 		@param aFile A new file handle opened with write permission
       
   781 		@param aFileName The name of the file handle that has  been supplied. This is used by the agent when creating CSupplierOutputFile objects. It should include the full path and filename in order to be consistent with files generated by the agent
       
   782 		
       
   783 		@param aStatus 	Asynchronous request status. On completion this will 
       
   784 						contain one of the following error codes: KErrNone if the 
       
   785 						WriteData() or WriteDataComplete() operation is now complete.
       
   786 						KErrCANewFileHandleRequired if the agent requires a new 
       
   787 						file handle before proceeding - the agent must save its 
       
   788 						state and continue processing when the new handle 
       
   789 						is supplied by ContinueWithNewOutputFile(). Otherwise one of the 
       
   790 						other CAF error codes defined in \c caferr.h  or one of the 
       
   791 						other system-wide error codes for any other errors.
       
   792 		*/
       
   793 		virtual void ContinueWithNewOutputFile(RFile& aFile, const TDesC& aFileName, TRequestStatus& aStatus) = 0;
       
   794 		
       
   795 		/** Cancel an outstanding asynchronous WriteData() request.
       
   796 		*/
       
   797 		IMPORT_C virtual void Cancel();
       
   798 		
       
   799 		/** Retrieve the content MIME type based on available data
       
   800 		
       
   801 		This function should only be called when the agent has returned KErrCANewFileHandleRequired from WriteData()
       
   802 		If the agent cannot return a content MIME type, the importer should assume that no content type
       
   803 		will be available until after the import session has been finished 
       
   804 
       
   805 		@param aContentMime On return this will contain the appropriate content MIME type.
       
   806 		@return The result of the request for a content MIME type.
       
   807 		@return ETrue if the agent populated aContentMime with the correct content MIME type.
       
   808 		@return EFalse if the agent cannot return the content MIME type (for example, there 
       
   809 					is not enough data, or the content is multi-part)
       
   810 		*/
       
   811 		IMPORT_C virtual TBool ContentMimeTypeL(TDes8& aContentMime);
       
   812 				
       
   813 		};
       
   814 
       
   815 	/**
       
   816 	 Defines the agent interface for manager operations. 
       
   817 	 
       
   818 	 The CAgentManager is not related to any particular content object but 
       
   819 	 used to manage files and settings belonging to this agent
       
   820 	 
       
   821 	All operations performed by the agent manager should be implemented in a 
       
   822 	transactional manner by either completing or reverting to the state before
       
   823 	the function was called.
       
   824 	 
       
   825  	 @publishedPartner
       
   826 	 @released
       
   827 	 */	
       
   828 	class CAgentManager : public CBase
       
   829 		{
       
   830 	public:
       
   831 		/** 
       
   832 		 Delete a file belonging to this agent
       
   833 
       
   834 		 The agent implementation may delete rights that were associated with 
       
   835 		 the content at the same time. If an agent does delete rights at the same
       
   836 		 time as the content it should display a confirmation dialog that makes it
       
   837 		 clear to the user the rights they paid for will be also deleted. 
       
   838 
       
   839 		 Execution will be blocked until any dialog displayed is complete. Applications 
       
   840 		 can request to disable the agents user interface using the SetProperty() command
       
   841 		 
       
   842 		 Access to the agents private directory is permitted at the 
       
   843 		 agents discretion.
       
   844 
       
   845 		 @param aFileName The full pathname of the file to delete.
       
   846 		 @return The outcome of the delete operation.
       
   847 		 @return KErrNone if the file was deleted successfully.
       
   848 		 @return KErrCancel if the user selects cancel in an agent supplied confirmation screen.
       
   849 		 @return KErrAccessDenied if the agent does not allow the file to be deleted.
       
   850 		 @return KErrCANotSupported if the agent does not support file deletion
       
   851 		 @return KErrPermissionDenied if the client does not have the necessary capabilities to delete the file.
       
   852 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   853 				other system-wide error codes for any other errors.
       
   854 		 @capability DRM Deleting DRM protected content is not permitted for processes without DRM capability. 
       
   855 		 */
       
   856 		virtual TInt DeleteFile(const TDesC &aFileName) = 0;
       
   857 
       
   858 		/**
       
   859 		Make a copy of the content file (eg to removable media) belonging to this agent
       
   860 
       
   861 		Access to the agents private directory is permitted at the 
       
   862 		agents discretion.
       
   863 
       
   864   		@param aSource The full pathname of the source file.
       
   865 		@param aDestination The full pathname of the destination file.
       
   866 		@return The outcome of the copy operation.
       
   867 		@return KErrNone if the file was copied successfully.
       
   868 		@return KErrAccessDenied if the agent does not allow the file to be copied.
       
   869 		@return KErrCANotSupported if the agent does not support file copying.
       
   870 		@return KErrPermissionDenied if the client does not have the necessary capabilities to copy the file.
       
   871 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   872 				other system-wide error codes for any other errors.
       
   873   		@capability DRM Copying DRM protected files is not permitted for processes without DRM capability. Copying unprotected files is permitted
       
   874 		*/
       
   875 		virtual TInt CopyFile(const TDesC& aSource, const TDesC& aDestination) = 0;
       
   876 
       
   877 		/**
       
   878 		Rename or move the content file (eg to removable media) belonging to this agent
       
   879 
       
   880 		Access to the agent private directories is permitted at the 
       
   881 		agents discretion.
       
   882 
       
   883 		@param aSource The full pathname of the source file.
       
   884 		@param aDestination The full pathname of the destination file.
       
   885 		@return The outcome of the Rename operation.
       
   886 		@return KErrNone if the file was moved or renamed successfully.
       
   887 		@return KErrAccessDenied if the agent does not allow the file to be moved or renamed.
       
   888 		@return KErrCANotSupported if the agent does not support file renaming.
       
   889 		@return KErrPermissionDenied if the client does not have the necessary capabilities to move or rename the file.
       
   890 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   891 				other system-wide error codes for any other errors.
       
   892   		@capability DRM Moving DRM protected files is not permitted for processes without DRM capability. Moving unprotected files is permitted
       
   893 		*/
       
   894 		virtual TInt RenameFile(const TDesC& aSource, const TDesC& aDestination) = 0;
       
   895 
       
   896 		/** Create a directory
       
   897 
       
   898 		This function can be used to create a directory within in the agent's 
       
   899 		private directory. Access to the agents private directory is permitted at the 
       
   900 		agents discretion. 
       
   901 
       
   902 		@param aPath The full pathname of the directory to create.
       
   903 		@return The outcome of the MkDir operation.
       
   904 		@return KErrNone if the directory was created successfully.
       
   905 		@return KErrAccessDenied if the agent does not allow the directory to be created.
       
   906 		@return KErrCANotSupported if the agent does not support directory creation.
       
   907 		@return KErrPermissionDenied if the client does not have the necessary capabilities to create directories.
       
   908 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   909 				other system-wide error codes for any other errors.
       
   910 		
       
   911 		@capability DRM Required when attempting to access an agents private directory
       
   912 		*/
       
   913 		virtual TInt MkDir(const TDesC& aPath) = 0;
       
   914 
       
   915 		/** Create all directories in the given path if they do not exist
       
   916 
       
   917 		This function can be used to create directories within in the agent's 
       
   918 		private directory. Access to the agents private directory is permitted at the 
       
   919 		agents discretion. 
       
   920 		
       
   921 		@param aPath The full pathname of the directory to create.
       
   922 		@return The outcome of the MkDirAll operation.
       
   923 		@return KErrNone if the directory was created successfully.
       
   924 		@return KErrAccessDenied if the agent does not allow the directory to be created.
       
   925 		@return KErrPermissionDenied if the client does not have the necessary capabilities to create directories.
       
   926 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   927 				other system-wide error codes for any other errors.
       
   928 		@capability DRM Required when attempting to access an agents private directory
       
   929 		*/
       
   930 		virtual TInt MkDirAll(const TDesC& aPath) = 0;
       
   931 
       
   932 		/** Remove a directory
       
   933 
       
   934 		This function can be used to remove a directory from within the agent's 
       
   935 		private directory. Access to the agents private directory is permitted 
       
   936 		at the agents discretion. 
       
   937 		
       
   938 		@param aPath The full pathname of the directory to remove.
       
   939 		@return The outcome of the RmDir operation.
       
   940 		@return KErrNone if the directory was removed successfully.
       
   941 		@return KErrAccessDenied if the agent does not allow the directory to be removed.
       
   942 		@return KErrCANotSupported if the agent does not support directory removal.
       
   943 		@return KErrPermissionDenied if the client does not have the necessary capabilities to remove directories.
       
   944 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   945 				other system-wide error codes for any other errors.
       
   946 		@capability DRM Required when attempting to access an agents private directory
       
   947 		*/
       
   948 		virtual TInt RmDir(const TDesC& aPath) = 0;
       
   949 
       
   950 		/**  Gets a filtered list of a directory's contents. 
       
   951 
       
   952 		The bitmask determines which file and directory entry types should be listed. The sort key determines the order in which they are listed.
       
   953 
       
   954 		Notes:
       
   955 		-# If sorting by UID (as indicated when the ESortByUid bit is OR'ed with the sort key), then UID information will be included in the listing whether or not KEntryAttAllowUid is specified in aEntryAttMask.
       
   956 		-# The function sets aFileList to NULL, and then allocates memory for it before appending entries to the list. Therefore, aFileList should have no memory allocated to it before this function is called, otherwise this memory will become orphaned.
       
   957 		-# The caller of this function is responsible for deleting aFileList after the function has returned.
       
   958 
       
   959 
       
   960 		This function can be used to list the contents of the agent's 
       
   961 		private directory. Access to the agents private directory is permitted at 
       
   962 		the agents discretion. 
       
   963 		
       
   964 		Agents can just return KErrCANotSupported if they do not wish to publish their
       
   965 		private directory. Alternatively they can just populate the CDir object
       
   966 		with the entries they wish to show.
       
   967 	
       
   968   		@param aName The name of the directory for which a listing is required. Wildcards may be used to specify particular files.
       
   969 		@param aEntryAttMask Bitmask indicating the attributes of interest. Only files and directories whose attributes match those specified here can be included in the listing. For more information, see KEntryAttMatchMask and the other directory entry details. Also see KEntryAttNormal and the other file or directory attributes 
       
   970 		@param aEntrySortKey The sort key. This is a set of flags indicating the order in which the entries are to be sorted. These flags are defined by TEntryKey. 
       
   971 		@param aEntryList On return contains a filtered list of directory and file entries.
       
   972 		@return The outcome of the GetDir operation.
       
   973 		@return KErrNone if the directory contents were listed successfully.
       
   974 		@return KErrCANotSupported if the agent does not allow clients to view its private directory.
       
   975 		@return KErrPermissionDenied if the process does not have the correct capabilities to view the directory.
       
   976 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
   977 				other system-wide error codes for any other errors.
       
   978 		@capability DRM Required when attempting to access an agents private directory
       
   979 		*/
       
   980 		virtual TInt GetDir(const TDesC& aName,TUint aEntryAttMask,TUint aEntrySortKey, CDir*& aEntryList) const = 0;
       
   981 
       
   982 		/**  Gets a filtered list of the directory and file entries contained in a directory and a list of the directory entries only
       
   983 
       
   984 		The bitmask determines which file and directory entry types should be listed in aFileList. The contents of the second list, aDirList are not affected by the bitmask; it returns all directory entries contained in directory aName. The sort key determines the order in which both lists are sorted.
       
   985 
       
   986 		Notes:
       
   987 		-# If sorting by UID (as indicated when the ESortByUid bit is OR'ed with the sort key), then UID information will be included in the listing whether or not KEntryAttAllowUid is specified in aEntryAttMask.
       
   988 		-# The function sets both aFileList and aDirList to NULL, and then allocates memory to them before appending entries to the lists. Therefore, aFileList and aDirList should have no memory allocated to them before this function is called, otherwise the allocated memory will become orphaned.
       
   989 		-# The caller of this function is responsible for deleting aFileList and aDirList after the function has returned.
       
   990 
       
   991 		This function can be used to list the contents of the agent's 
       
   992 		private directory. Access to the agents private directory is permitted at 
       
   993 		the agents discretion. 
       
   994 
       
   995 		Agents can just return KErrCANotSupported if they do not wish to publish their
       
   996 		private directory. Alternatively they can just populate the CDir object
       
   997 		with the entries they wish to show.
       
   998 
       
   999 		@param aName The name of the directory for which a listing is required. Wildcards may be used to specify particular files. 
       
  1000 		@param aEntryAttMask Bitmask indicating the attributes of interest. Only files and directories whose attributes match those specified here can be included in aFileList. aDirList is unaffected by this mask. For more information, see KEntryAttMatchMask and the other directory entry details. Also see KEntryAttNormal and the other file or directory attributes.
       
  1001 		@param aEntrySortKey The sort key. This is a set of flags indicating the order in which the entries in both lists are to be sorted. These flags are defined by TEntryKey. 
       
  1002 		@param aEntryList On return contains a filtered list of directory and file entries. 
       
  1003 		@param aDirList On return contains a filtered list of directory entries only.
       
  1004 		@return The outcome of the GetDir operation.
       
  1005 		@return KErrNone The directory contents were listed successfully.
       
  1006 		@return KErrCANotSupported The agent does not allow clients to view its private directory.
       
  1007 		@return KErrPermissionDenied If the process does not have the correct capabilities to view the directory.
       
  1008 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1009 				other system-wide error codes for any other errors.
       
  1010 		@capability DRM Required when attempting to access an agents private directory
       
  1011 		*/
       
  1012 		virtual TInt GetDir(const TDesC& aName,TUint aEntryAttMask,TUint aEntrySortKey, CDir*& aEntryList,CDir*& aDirList) const = 0;
       
  1013 
       
  1014 		/**  Gets a filtered list of a directory's contents by UID
       
  1015 
       
  1016 		The aUidType parameter determines which file entry types should be listed. The sort key determines the order in which they are listed.
       
  1017 
       
  1018 		Notes:
       
  1019 		-# The function sets aFileList to NULL, and then allocates memory for it before appending entries to the list. Therefore, aFileList should have no memory allocated to it before this function is called, otherwise this memory will become orphaned.
       
  1020 		-# The caller of this function is responsible for deleting aFileList after the function has returned.
       
  1021 
       
  1022 		This function can be used to list the contents of the agent's 
       
  1023 		private directory. Access to the agents private directory is permitted at 
       
  1024 		the agents discretion. 
       
  1025 
       
  1026 		Agents can just return KErrCANotSupported if they do not wish to publish their
       
  1027 		private directory. Alternatively they can just populate the CDir object
       
  1028 		with the entries they wish to show.
       
  1029 
       
  1030 		@param aName The name of the directory for which a listing is required. Wildcards may be used to specify particular files. 
       
  1031 		@param aEntryUid Only those files whose UIDs match those specified within this UID type will be included in the file list. Any, or all, of the three UIDs within the UID type may be omitted. Any UID which is omitted acts in a similar manner to a wildcard character, matching to all UIDs. 
       
  1032 		@param aEntrySortKey The sort key. This is a set of flags indicating the order in which the entries are to be sorted. These flags are defined by TEntryKey.
       
  1033 		@param aFileList On return contains a filtered list of directory and file entries.
       
  1034 		@return The outcome of the GetDir operation.
       
  1035 		@return KErrNone The directory contents were listed successfully.
       
  1036 		@return KErrCANotSupported The agent does not allow clients to view its private directory.
       
  1037 		@return KErrPermissionDenied If the process does not have the correct capabilities to view the directory.
       
  1038 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1039 				other system-wide error codes for any other errors.
       
  1040 		@capability DRM Required when attempting to access an agents private directory
       
  1041 		*/
       
  1042 		virtual TInt GetDir(const TDesC& aName,const TUidType& aEntryUid,TUint aEntrySortKey, CDir*& aFileList) const = 0;
       
  1043 		
       
  1044 		/**  Get an attribute from a content object
       
  1045 	
       
  1046 		@param aAttribute The attribute to retrieve, from ContentAccess::TAttribute.
       
  1047 		@param aValue Used to return the value of the attribute.
       
  1048 		@param aVirtualPath The content object whose attributes are to be queried.
       
  1049 		@return Whether the attribute value was updated.
       
  1050 		@return KErrNone if the attribute value was updated.
       
  1051 		@return KErrNotFound if the URI or the object with the given UniqueId inside the file was not found.
       
  1052 		@return KErrCANotSupported if the requested attribute is not supported for this content object.
       
  1053 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1054 				other system-wide error codes for any other errors.
       
  1055 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
  1056 		*/
       
  1057 		virtual TInt GetAttribute(TInt aAttribute, TInt& aValue, const TVirtualPathPtr& aVirtualPath) = 0;
       
  1058 
       
  1059 		/** Get a set of attributes from a content object
       
  1060 
       
  1061 		@param aAttributeSet The set of attributes to query and update.
       
  1062 		@param aVirtualPath The content object to retrieve attributes from.
       
  1063 		@return Whether the attribute set was updated.
       
  1064 		@return KErrNone if the attribute set was updated successfully.
       
  1065 		@return KErrNotFound if the content object was not found.
       
  1066 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1067 				other system-wide error codes for any other errors.
       
  1068 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
  1069 		*/
       
  1070 		virtual TInt GetAttributeSet(RAttributeSet& aAttributeSet, const TVirtualPathPtr& aVirtualPath) = 0;
       
  1071 		
       
  1072 		/**  Get text string attributes or meta-data from the file 
       
  1073 
       
  1074 		@param aAttribute The attribute to retrieve, from ContentAccess::TStringAttribute.
       
  1075 		@param aValue Used to return the value of the attribute.
       
  1076 		@param aVirtualPath The content object whose attributes are to be retrieved.
       
  1077 		@return Whether the value was updated.
       
  1078 		@return KErrNone if the attribute was retrieved successfully.
       
  1079 		@return KErrNotFound if the content object does not exist.
       
  1080 		@return KErrCANotSupported if the requested attribute does not apply to this content object.
       
  1081 		@return KErrOverflow if the buffer was not large enough to return the result.
       
  1082 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1083 				other system-wide error codes for any other errors.
       
  1084 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
  1085 		*/
       
  1086 		virtual TInt GetStringAttribute(TInt aAttribute, TDes& aValue, const TVirtualPathPtr& aVirtualPath) = 0;
       
  1087 
       
  1088 		/** Used to obtain a set of string attributes 
       
  1089 
       
  1090 		@param aStringAttributeSet The set of attributes to query and update.
       
  1091 		@param aVirtualPath The content object whose attributes are to be retrieved.
       
  1092 		@return Whether the string attribute set was updated.
       
  1093 		@return KErrNone if the attribute set was updated successfully.
       
  1094 		@return KErrNotFound if the object with the given virtual path was not found.
       
  1095 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1096 				other system-wide error codes for any other errors.
       
  1097 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
  1098 		*/
       
  1099 		virtual TInt GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, const TVirtualPathPtr& aVirtualPath) = 0;
       
  1100 
       
  1101 		/** Notify the caller when the status of a DRM protected content object changes.
       
  1102 		NB: No assumption should be made about the scope of the descriptor 
       
  1103 		passed to aURI for asynchronous IPC.
       
  1104 
       
  1105 		@param aURI The location of the file.
       
  1106 		@param aMask Bitmask of events the caller is interested in.
       
  1107 		@param aStatus The TRequestStatus object to complete if the event occurs, or KErrCANotSupported if the agent does not support asynchronous notifications.
       
  1108 		@capability DRM Deleting DRM protected content is not permitted for processes without DRM capability. 
       
  1109 		*/
       
  1110 		virtual void NotifyStatusChange(const TDesC& aURI, TEventMask aMask, TRequestStatus& aStatus) = 0;
       
  1111 
       
  1112 		/** Cancel a previous notification request
       
  1113 		@param aURI The URI supplied in the call to NotifyStatusChange().
       
  1114 		@param aStatus The TRequestStatus supplied in the call to NotifyStatusChange().
       
  1115 		@return The outcome of the cancel request.
       
  1116 		@return KErrNone if the notification was cancelled.
       
  1117 		@return KErrNotFound if there was no matching request outstanding.
       
  1118 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
  1119 		*/
       
  1120 		virtual TInt CancelNotifyStatusChange(const TDesC& aURI, TRequestStatus& aStatus) = 0;
       
  1121 
       
  1122 		/** 
       
  1123 		Allows an application to request the modification of a property 
       
  1124 		within the agent. The agent may or may not permit the property to be changed
       
  1125 		 	
       
  1126 		@param aProperty The property to set.
       
  1127 		@param aValue The value of the property.
       
  1128 		@return The outcome of the set property command.
       
  1129 		@return KErrNone if the property was set by all agents.
       
  1130 		@return KErrCANotSupported if one of the agent does not support the property or value.
       
  1131 		@return KErrAccessDenied if one of the agents does not permit the property to be changed.
       
  1132 		@return KErrPermissionDenied if the application does not have the necessary capability to change the property.
       
  1133 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
  1134 		*/
       
  1135 		virtual TInt SetProperty(TAgentProperty aProperty, TInt aValue) = 0;
       
  1136 
       
  1137 		/** View information associated with a single content object
       
  1138 		
       
  1139 		This call blocks execution and only returns once the display is dismissed 
       
  1140 		by the user.
       
  1141 
       
  1142 		@param aInfo The information to display.
       
  1143 		@param aVirtualPath The content object.
       
  1144 		@leave KErrCANotSupported if agent cannot display the requested information.
       
  1145 		@leave ...		One of the other CAF error codes defined in \c caferr.h  
       
  1146 		 				or one of the system-wide error codes 
       
  1147 						for any other errors.		
       
  1148 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted. 
       
  1149 		*/
       
  1150 		virtual void DisplayInfoL(TDisplayInfo aInfo, const TVirtualPathPtr& aVirtualPath) = 0;
       
  1151 
       
  1152 		/** 
       
  1153 		Identifies whether or not the file at the given URI is to be handled by
       
  1154 		this agent.
       
  1155 
       
  1156 		The agent should perform the mimimum possible processing to make the recognition
       
  1157 		process as fast as possible. It should avoid opening the file whenever possible.
       
  1158 		
       
  1159 		The agent should leave only if a temporary or permanent condition prevents it from knowing
       
  1160 		whether it can detect the content's type.
       
  1161 		  
       
  1162 		@param aURI		Location of the file to be examined.
       
  1163 		@param aShareMode	The share mode to use if the agent opens a file.
       
  1164 		@return			ETrue if this agent supports and recognises the file, EFalse otherwise. 
       
  1165 		*/
       
  1166 		virtual TBool IsRecognizedL(const TDesC& aURI, TContentShareMode aShareMode) const = 0;
       
  1167 
       
  1168 		/** 
       
  1169 		Identifies whether or not the file is handled by this agent.
       
  1170 
       
  1171 		The agent should look at the name of the file first to try and avoid the need
       
  1172 		to read from the file.
       
  1173 		
       
  1174 		The agent should leave only if a temporary or permanent condition prevents it from knowing
       
  1175 		whether it can detect the content's type.		
       
  1176 		  
       
  1177 		@param aFile An open file handle.
       
  1178 	    @return ETrue if this agent supports and recognises the file, EFalse otherwise. 
       
  1179 		*/
       
  1180 		virtual TBool IsRecognizedL(RFile& aFile) const = 0;
       
  1181 
       
  1182 		/** 
       
  1183 		 Determines whether the file is recognized by this agent. 
       
  1184 		 If it is the agent will fill in the file mime type and content mime 
       
  1185 		 type. 
       
  1186 		 
       
  1187 		 The agent should attempt to recognized the file in an efficient manner
       
  1188 		 It should avoid opening the file to provide the best performance.
       
  1189 
       
  1190 		 The agent should leave only if a temporary or permanent condition prevents it from 
       
  1191 		 detecting content's type.
       
  1192 
       
  1193 		 The agent SHOULD NOT perform any API policing on this API since it
       
  1194 		 will be called from within the Apparc server's process. 
       
  1195 		  
       
  1196 		 If a file is recognized, the file mime type should always be set to
       
  1197 		 the correct value. For the content mime type there are three special cases:
       
  1198 		 
       
  1199 		 @li If the file needs to be imported through the Supplier API before
       
  1200 		 it can be used then the agent should leave the aContentMimeType
       
  1201 		 parameter blank (zero length). 
       
  1202 		 
       
  1203 		 @li If the file has no embedded content, eg an image/jpeg (.jpg) file 
       
  1204 		 the agent should leave the aContentMimeType parameter blank (zero length).
       
  1205   
       
  1206 		 @li If more than one content object is contained within the file, the agent will
       
  1207 		 set aContentMimeType to "application/x-caf" indicating it is an archive that can
       
  1208 		 be navigated by CAF regardless of the actual file format.
       
  1209 		 
       
  1210 		 @param aFileName			The name of the file to recognize. The name is examined, not the file itself.
       
  1211 		 @param aBuffer				Buffer containing bytes from the start of the file.
       
  1212 		 @param aFileMimeType 		Used to return the mime type of the file to the caller.
       
  1213 		 @param aContentMimeType	Used to return the mime type of the content embedded within the file to the caller. This field should be zero length if there is no embedded content.
       
  1214 	     @return				Whether or not the file was recognized.
       
  1215  		 @return ETrue if the file is handled by this agent. The aFileMimeType and aContentMimeType were updated.
       
  1216 		 @return EFalse if the file was not recognized by this agent.
       
  1217 		 */
       
  1218 		virtual TBool RecognizeFileL(const TDesC& aFileName, const TDesC8& aBuffer, TDes8& aFileMimeType, TDes8& aContentMimeType) const = 0;
       
  1219 
       
  1220 		
       
  1221 		/** Allows extended synchronous calls to the agent
       
  1222 		Objects are passed in and out using serialization
       
  1223 
       
  1224 		@param aCommand The agent defined command.
       
  1225 		@param aInputBuffer Non modifyable input data buffer.
       
  1226 		@param aOutputBuffer Modifyable output buffer to hold the result of the command.
       
  1227 		@return The outcome of the agent specific command.
       
  1228 		@return KErrNone if the command was successful.
       
  1229 		@return KErrCANotSupported if the agent does not recognize the command.
       
  1230 		@return KErrPermissionDenied if the agent does not permit the client to execute this command.
       
  1231 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  
       
  1232 				or one of the other system-wide error codes 
       
  1233 				for any other errors.		
       
  1234   		@capability DRM Access to extended DRM agent functions is not permitted for processes without DRM capability
       
  1235 		*/
       
  1236 		virtual TInt AgentSpecificCommand(TInt aCommand, const TDesC8& aInputBuffer, TDes8& aOutputBuffer) = 0;
       
  1237 
       
  1238 		/** Allows extended asynchronous calls to the agent. 
       
  1239 		Objects can be passed in and out using serialization.
       
  1240 		NB: No assumption should be made about the scope of the descriptor 
       
  1241 		passed to aInputBuffer for asynchronous IPC.
       
  1242 
       
  1243 		@param aCommand The agent defined command.
       
  1244 		@param aInputBuffer Non modifyable input data buffer.
       
  1245 		@param aOutputBuffer Modifyable output buffer to hold the result of the command.
       
  1246 		@param aStatus 	Asynchronous request status. On completion this will 
       
  1247 						contain one of the following error codes: KErrNone if the command
       
  1248 						was successful. KErrCANotSupported if the agent does 
       
  1249 						not recognize the command. KErrPermissionDenied if the 
       
  1250 						agent does not permit the client to execute this command.
       
  1251 						Otherwise one of the other CAF error codes 
       
  1252 						defined in \c caferr.h  or one of the other 
       
  1253 						system-wide error codes for any other errors.
       
  1254 		@capability DRM Access to extended DRM agent functions is not permitted for processes without DRM capability
       
  1255 		*/
       
  1256 		virtual void AgentSpecificCommand(TInt aCommand, const TDesC8& aInputBuffer, TDes8& aOutputBuffer, TRequestStatus& aStatus) = 0;
       
  1257 
       
  1258 		/** Allow the agent to display management information for users to 
       
  1259 		manage any settings	or other information stored by the agent
       
  1260 
       
  1261 		The scope of this information is left to the agent implementation but it is expected
       
  1262 		that a DRM agent will display the state of all DRM rights objects 
       
  1263 		(pending, available, expired, orphaned) and allow users to delete rights 
       
  1264 		that are no longer required.
       
  1265 
       
  1266 		@leave KErrCANotSupported If the agent does support the display of management information.
       
  1267 		@capability DRM Agents implementing DRM may not display their management dialog to processes without DRM capability
       
  1268 		*/
       
  1269 		virtual void DisplayManagementInfoL() = 0;
       
  1270 
       
  1271 
       
  1272 		/** Prepare the HTTP request headers required to download files that may be 
       
  1273 		required for this agent.
       
  1274 
       
  1275 		@param aStringPool The string pool used by the HTTP session.
       
  1276 		@param aRequestHeaders The agent will add any required headers to this object.
       
  1277 		*/
       
  1278 		virtual void PrepareHTTPRequestHeaders(RStringPool& aStringPool, RHTTPHeaders& aRequestHeaders) const = 0;
       
  1279 
       
  1280 		
       
  1281 		/** Rename a directory
       
  1282 
       
  1283 		This function can be used to rename a directory from within the agent's 
       
  1284 		private directory. Access to the agents private directory is permitted 
       
  1285 		at the agents discretion. 
       
  1286 		
       
  1287 		@param aOldName The existing pathname of the directory to rename.
       
  1288 		@param aNewName The new pathname of the directory.
       
  1289 		@return The outcome of the RenameDir operation.
       
  1290 		@return KErrNone if the directory was removed successfully.
       
  1291 		@return KErrAccessDenied f the agent does not allow the directory to be removed.
       
  1292 		@return KErrCANotSupported if the agent does not support directory removal.
       
  1293 		@return KErrPermissionDenied if the client does not have the necessary capabilities to remove directories.
       
  1294 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1295 				other system-wide error codes for any other errors.
       
  1296 		@capability DRM Required when attempting to access an agents private directory
       
  1297 		*/
       
  1298 		IMPORT_C virtual TInt RenameDir(const TDesC& aOldName, const TDesC& aNewName );
       
  1299 		
       
  1300 		/**
       
  1301 		Make a copy of the content file (eg to removable media) belonging to this agent 
       
  1302 		using a file handle
       
  1303 
       
  1304 		Access to the agents private directory is permitted at the 
       
  1305 		agents discretion.
       
  1306 
       
  1307   		@param aSource The handle the source file.
       
  1308 		@param aDestination The full pathname of the destination file.
       
  1309 		@return The outcome of the copy operation.
       
  1310 		@return KErrNone if the file was copied successfully.
       
  1311 		@return KErrAccessDenied if the agent does not allow the file to be copied.
       
  1312 		@return KErrCANotSupported if the agent does not support file copying.
       
  1313 		@return KErrPermissionDenied if the client does not have the necessary capabilities to copy the file.
       
  1314 		@return Otherwise one of the other CAF error codes defined in \c caferr.h  or one of the 
       
  1315 				other system-wide error codes for any other errors.
       
  1316   		@capability DRM Copying DRM protected files is not permitted for processes without DRM capability. Copying unprotected files is permitted
       
  1317 		*/
       
  1318 		IMPORT_C virtual TInt CopyFile(RFile& aSource, const TDesC& aDestination);
       
  1319 		
       
  1320 		};
       
  1321 
       
  1322 		
       
  1323 	/** 
       
  1324 	Manages and retrieves rights objects from an agent.
       
  1325 
       
  1326  	@publishedPartner
       
  1327 	@released
       
  1328 	*/
       
  1329 	class CAgentRightsManager  : public CBase
       
  1330 		{
       
  1331 	public:
       
  1332 		/** List all rights held by the agent 
       
  1333 		@param aArray The client supplied array used to store the CRightsInfo objects. The agent will add CRightsInfo objects to the supplied array.
       
  1334 		@leave KErrPermissionDenied If the agent does not permit the client to access rights information.
       
  1335 		@leave ...		One of the CAF error codes defined in \c caferr.h  
       
  1336 		 				or one of the other system-wide error codes 
       
  1337 						for any other errors.				
       
  1338 		@capability DRM Access to DRM rights is not permitted for processes without DRM capability. 
       
  1339 		*/
       
  1340 		virtual void ListAllRightsL(RStreamablePtrArray<CRightsInfo>& aArray) const = 0;
       
  1341 
       
  1342 		/** List all rights associated with a particular file
       
  1343 		@param aArray The client supplied array used to store the CRightsInfo objects. The agent will add CRightsInfo objects to the supplied array.
       
  1344 		@param aUri The name of the file.
       
  1345 		@leave KErrPermissionDenied If the agent does not permit the client to access rights information.
       
  1346 		@leave ...		One of the CAF error codes defined in \c caferr.h  
       
  1347 		 				or one of the other system-wide error codes 
       
  1348 						for any other errors.				
       
  1349 		@capability DRM Access to DRM rights is not permitted for processes without DRM capability. 
       
  1350 		*/
       
  1351 		virtual void ListRightsL(RStreamablePtrArray<CRightsInfo>& aArray, const TDesC& aUri) const = 0;
       
  1352 
       
  1353 		/** List all rights associated with a particular content object
       
  1354 		@param aArray The client supplied array used to store the CRightsInfo objects. The agent will add CRightsInfo objects to the supplied array.
       
  1355 		@param aVirtualPath The content object.
       
  1356 		@leave KErrPermissionDenied If the agent does not permit the client to access rights information.
       
  1357 		@leave ...		One of the CAF error codes defined in \c caferr.h  
       
  1358 		 				or one of the other system-wide error codes 
       
  1359 						for any other errors.				
       
  1360 		@capability DRM Access to DRM rights is not permitted for processes without DRM capability. 
       
  1361 		*/
       
  1362 		virtual void ListRightsL(RStreamablePtrArray<CRightsInfo>& aArray, TVirtualPathPtr& aVirtualPath) const = 0;
       
  1363 
       
  1364 		/** List all content associated with a particular rights object
       
  1365 		@param aArray The client supplied array used to store the list of content objects. The agent will add CVirtualPath objects to the supplied array.
       
  1366 		@param aRightsInfo The rights object.
       
  1367 		@leave KErrPermissionDenied If the agent does not permit the client to access rights information.
       
  1368 		@leave ...		One of the CAF error codes defined in \c caferr.h  
       
  1369 		 				or one of the other system-wide error codes 
       
  1370 						for any other errors.				
       
  1371 		@capability DRM Access to DRM rights is not permitted for processes without DRM capability. 
       
  1372 		*/
       
  1373 		virtual void ListContentL(RStreamablePtrArray<CVirtualPath>& aArray, CRightsInfo& aRightsInfo) const = 0;
       
  1374 		
       
  1375 		/** This will be used by applications to retrieve an agent specific rights object
       
  1376 		@param aRightsInfo The rights object.
       
  1377 		@return An agent specific rights object.
       
  1378 		@leave KErrPermissionDenied If the agent does not permit the client to access rights information.
       
  1379 		@leave ...		One of the CAF error codes defined in \c caferr.h  
       
  1380 		 				or one of the other system-wide error codes 
       
  1381 						for any other errors.				
       
  1382 		@capability DRM Access to DRM rights is not permitted for processes without DRM capability. 
       
  1383 		*/
       
  1384 		virtual MAgentRightsBase* GetRightsDataL(const CRightsInfo& aRightsInfo) const = 0;
       
  1385 
       
  1386 		/** Asks the DRM agent to delete a rights object 
       
  1387 
       
  1388 		The agent may display a dialog asking the user to confirm the delete. Execution
       
  1389 		will be blocked until the dialog is complete. Applications can request 
       
  1390 		to disable the agents user interface using the SetProperty() command
       
  1391 	
       
  1392 		@param aRightsInfo The rights object.
       
  1393 		@return The outcome of the delete operation.
       
  1394 		@return KErrNone if the rights were deleted.
       
  1395 		@return KErrCancel if the user cancels an agent supplied confirmation dialog.
       
  1396 		@return KErrNotFound if the rights object does not exist.
       
  1397 		@return KErrPermissionDenied if the agent does not permit the client to access rights information.
       
  1398 		@capability DRM Access to DRM rights is not permitted for processes without DRM capability. 
       
  1399 		*/
       
  1400 		virtual TInt DeleteRightsObject(const CRightsInfo& aRightsInfo) = 0;
       
  1401 
       
  1402 		/** Deletes all rights associated with a particular content object
       
  1403 
       
  1404 		The agent may display a dialog asking the user to confirm the delete. Execution
       
  1405 		will be blocked until the dialog is complete. Applications can request 
       
  1406 		to disable the agents user interface using the SetProperty() command
       
  1407 
       
  1408 		@param aVirtualPath The path of the content object.
       
  1409 		@return The outcome of the delete operation.
       
  1410 		@return KErrNone if the rights were deleted.
       
  1411 		@return KErrNotFound if no rights objects exist for the specified content object.
       
  1412 		@return KErrCancel if the user cancels an agent supplied confirmation dialog.
       
  1413 		@return KErrPermissionDenied if the agent does not permit the client to access rights information.
       
  1414 		@capability DRM Access to DRM rights is not permitted for processes without DRM capability. 
       
  1415 		*/
       
  1416 		virtual TInt DeleteAllRightsObjects(const TVirtualPathPtr& aVirtualPath) = 0;
       
  1417 
       
  1418 		/** 
       
  1419 		Allows an application to request the modification of a property 
       
  1420 		within the agent. The agent may or may not permit the property to be changed
       
  1421 		 	
       
  1422 		@param aProperty The property to set.
       
  1423 		@param aValue The value of the property.
       
  1424 		@return KErrNone if the property was set.
       
  1425 		@return KErrCANotSupported if the agent does not support the property or value.
       
  1426 		@return KErrAccessDenied if the agent does not permit the property to be changed.
       
  1427 		@return KErrPermissionDenied if the application does not have the necessary capability to change the property.
       
  1428 		@capability DRM Access to DRM protected content is not permitted for processes without DRM capability. Access to unprotected content is unrestricted 
       
  1429 		*/
       
  1430  		virtual TInt SetProperty(TAgentProperty aProperty, TInt aValue) = 0;
       
  1431 		};
       
  1432 
       
  1433 
       
  1434 } // namespace ContentAccess
       
  1435 #endif // __AGENTINTERFACE_H__
       
  1436