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.
Figure: CAF Architecture
Note: The F32 agent is a client-side implementation as it is used for accessing unprotected content only.
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:
Providing services for applications that render content and multimedia plug-ins. For more information, see Consumer API Tutorial.