The Content Access Framework (CAF) provides a common interface for applications to access Digital Rights Management (DRM) protected content. An application might be a video or sound player or an internet browser and DRM content might be a media files or a game.
CAF provides a single point of access to all functionality related to DRM-protected content.
Content is logically-coupled data such as a movie, a soundtrack or a ringtone forming a content file.
Content consumers are applications such as media players or software installers that access DRM-protected content.
A content access agent is an ECom plug-in which implements the CAF interface and performs the following functions:
Provides access to protected content such as MPEG and MP3, and allows viewing them as plain text (even if the content is encrypted).
Provides indirect access to a private server directory.
Provides platform security enforcement. CAF does not provide any capability enforcement so the agent must police access to the APIs. The agent can choose to deny some operations in the CAF API based upon both the application's capabilities and the agent's policy.
The F32 agent provides access to unprotected files. CAF treats the F32 agent as a special case. If no other agent is responsible for a file or directory, the F32 Agent is used.
The F32 agent runs in the same process and thread as the calling application, so its file operations are limited to the capability of the calling application's.
Few agents can provide access to files stored in their private directory. They can share their files existence to applications through implementation of the ContentAccess::CAgentManager::GetDir() function. In the file system the private directories have the format:
\private\xxxxxxxx\directory_1\...directory_n\filename.ext
where xxxxxxxx is the UID of the agent.
CAF will translate that path so applications see the file as:
\private\agent_name\directory_1\...directory_n\filename.ext
where agent_name is the name of the agent.
When an application opens a file stored in the private directory, CAF selects the agent which handles that content based upon the name in the path. If the file is not stored in a private directory, CAF asks each of the agents in turn whether they support the file. If no agent supports the file, it will be read as plaintext using the F32Agent.
CAF provides interfaces for applications to read both unprotected and DRM protected content. It behaves as a switch between different Content Access Agents.
CAF uses a client-server architecture. The CAF client DLL must be linked with the client process. CAF agents can be implemented as plug-ins to the CAF client if they do not require access to keys or rights. An agent requiring access to encryption or decryption of keys, or rights must be implemented as a server-side plug-in. A server side plug-in must ensure that only applications with the right capabilities can access the content.
Each agent is an ECOM plug-in implementing the content access agent interface UID 0x10204740. The agents can run in separate processes and need not have the capability to open files in the TCB or private server directories using just a file name. Files must be opened by the process that owns them and an open RFile handle passed to CAF to read it.
In the following diagram the yellow blocks represent the components provided by Symbian and the blue blocks represent the components that must be implemented by device creators.
Note: The F32 agent is a client-side implementation as it is used for accessing unprotected content only.
The following table summarizes the important classes provided by CAF:
Note: The classes below are defined within the namespace ContentAccess
Class | Description |
---|---|
Delivers and transforms content into a secure format for storing it in the device |
|
Provides read access to content (including protected content) stored in a device. |
|
Manages files and content access agents |
|
Manages DRM rights for a specific CAF agent |
|
Allows clients to read data from a content object |
|
Represents the ECom interface for a CAF Agent. A CAF agent must implement a concrete factory derived from ContentAccess::CAgentFactory. |
The above APIs are grouped as follows:
Supplier API
The classes ContentAccess::CSupplier and ContentAccess::CImportFile together represents the supplier API.
The Supplier API handles the delivery and transformation of content. It is used to transform DRM protected files when they arrive on a device into a compatible format for storing it securely on the device. It is also used to intercept content and ensure it is stored in an agent's private directory.
Consumer API
The classes ContentAccess::CContent and ContentAccess::CData together represents the consumer API.
The consumer API allows applications to view the content as plain text, regardless of how it is actually stored on the device. (For instance, it might be encrypted). It is used by applications to render content and multimedia plug-ins. Note: Rendering implies reading data from a file, transforming it, then playing or displaying it on the device.
Manager API
The ContentAccess::CManager class, which manages the files and content access agents forms the manager API.
Rights Manager API
The ContentAccess::CRightsManager class, which manages DRM rights within a particular DRM agent forms the rights manager API.
Agent API
The ContentAccess::CAgentFactory class forms the agent interface. It allows to integrate new agents at a later date, dynamically if required. The agent's factory produces products derived from the following:
CAF provides interfaces for implementing and using CAF agents. CAF agents allows authorised users to access the DRM protected content for installation and playback. CAF APIs can be used to perform the following tasks:
Handling delivery and transformation of DRM protected content. For more information, see Supplier API Tutorial.
Providing services for applications that render content and multimedia plug-ins. For more information, see Consumer API Tutorial.
Managing files and CAF agents. For more information, see Manager API Tutorials.
Managing DRM rights within a particular DRM agent. For more information, see Rights Manager API Tutorial.
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.