Home · All Namespaces · All Classes · Grouped Classes · Modules · Functions codeless banner

DRM Agent Integration

DRM Agent Integration

Qt Extended applications access DRM content through the use of plug-ins to the Qt Extended document system. These plug-ins implement the QDrmContentPlugin interface which is used to retrieve content permissions and meta-data, trigger the activation of content with invalid permissions, read unencrypted data from protected files, and update license constraints.

A complete DRM agent integration is typically composed of three parts, a plug-in to the content system, a license and settings management application, and a Qt Extended service. The QDrmAgentPlugin interface allows all three components to be delivered in a single plug-in library.

License Management and Settings Application

Qt Extended includes the 'Licenses' application as a common utility for DRM agents to host license management and settings widgets. It is composed of a single QTabWidget in which each tab contains a different widget from the set created by a calls to QDrmAgentPlugin::createManagerWidgets() for each loaded agent plug-in. Widgets are grouped according to the agent which created them and in the order returned.

The source for the Licenses application is located at:


DRM Services

Qt Extended utilizes Qt Extended Data Sharing (QDS) services to process data received through WAP Push, web download and MMS. Agents that wish to handle data received through these channels should provide a QDS service for each mime type handled. Data received through WAP push will be delivered to a service with the "push" attribute and a request data type matching the mime type of the data, web browsers and MMS clients will search for services with the "handle" attribute and possibly also the "drm" attribute. Services with the "handle" attribute (but not the "push" attribute) may also specify a response data type allowing conversion of some data types to a device localized format.

The QDS definition for a service which installs an OMA DRM v1 XML rights objects may be:

    Description[]=Installs an OMA DRM v1 XML rights object.

A DRM service may also be used to perform activation actions requested of a DRM content plug-in. A DRM service may be hosted in an application with higher privileges than that of the application requesting the activation making it possible to successfully request an activation which requires a rights download from an application without network privileges for example. Also because the activation is performed in a separate process it is possible to use blocking operations without causing the user interface of the application requesting the activation to become unresponsive.

Services provided by a DRM agent plug-in are hosted in the Licenses application and should have "drmbrowser" as the service application.


Agents that don't require a license management application or service, or wish to implement that functionality in their own application should create a plug-in library for a QDrmContentPlugin and install it to:


Agents that wish to utilize the common license management and settings application or expose a service in the DRM server process should should create a plug-in library for a QDrmAgentPlugin and install it to:


Beep Science OMA DRM Agent

Qt Extended includes a reference integration of the Beep Science OMA DRM agent version 2.4.

The Beep Science DRM agent plug-in can be included in a Qt Extended build by passing the -drm switch to configure or excluded with the -no-drm switch. The -drm switch is the default option for desktop builds of Qt Extended and -no-drm is the default for device builds.

When Qt Extended is configured with the -drm switch it will attempt to build a small test program that links against the Beep Science DRM agent libraries to determine if the DRM agent plug-in can be built. The default installation path for agent headers is /usr/local/include/bscidrm2.4 and for libraries /usr/local/lib/bscidrm2.4, if the agent is not installed to these locations or other standard include and library paths then the installation paths will need to passed to configure with the -I and -L switches. The default paths are absolute so if the libraries are not in the standard library paths of the tool chain then then the path to the library must be passed to configure. The library binaries are copied into the Qt Extended image so it is not necessary to have them installed in the rootfs of the device.

Configure for DRM enabled desktop debug build with the agent headers and libraries installed in the default paths:

$QTOPIA_DEPOT_PATH/configure -debug -edition phone

Configure for DRM enabled greenphone build with the agent headers installed in the default path, and libraries in /opt/toolchains/greenphone/gcc-4.1.1-glibc-2.3.6/arm-linux/arm-linux/usr/local/lib/bscidrm2.4

$QTOPIA_DEPOT_PATH/configure -device greenphone -drm -L/opt/toolchains/greenphone/gcc-4.1.1-glibc-2.3.6/arm-linux/arm-linux/usr/local/lib/bscidrm2.4

The directory in which the DRM agent's rights database and logs are stored on a device is obtained from the value of the BSCI_DATABASE_PATH which should be defined in the device's custom.h file. If BSCI_DATABASE_PATH is not defined then the agent will attempt to use the value of the environment variable BSCI_DATABASE_PATH, it that also fails then the path defaults to $HOME/Applications/Qtopia/DRM.

The DRM agent database needs to be initialized with a device key and certificate chain in order to authenticate the device during ROAP transactions. When the database is constructed Qt Extended will import the key file BSCI_Device_1033.pem.key and certificate chain file BSCI_DeviceChain.pem.crt from the <Qt Extended Runtime Prefix>/etc/bscidrm directory. These files and the root certificate chain bscidrm2.crt are not included in a Qt Extended distribution and need to be added to the source tree in etc/bscidrm. The import step can be avoided by pre-installing a database on the device.

The Beep Science DRM agent libraries can be acquired by contacting Beep Science.

The source for the Beep Science DRM agent plug-in is located in:


Copyright © 2009 Trolltech Trademarks
Qt Extended 4.4.3