--- a/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtadatahandler.cpp Fri Oct 02 13:15:59 2009 +0300
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAServer/Server/rtadatahandler.cpp Mon Oct 12 10:17:04 2009 +0300
@@ -49,6 +49,9 @@
{
delete iArchive;
iFile.Close();
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
+ delete iWmdrmContentObject;
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
}
void CRtaDataHandler::ServiceL(const RMessage2& aMessage)
@@ -105,7 +108,38 @@
case EDataSetProperty:
case ENoEnforceDataSetProperty:
SetPropertyL(aMessage);
- break;
+ break;
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
+ case EReadWMDRMHeaderData:
+ case ENoEnforceReadWMDRMHeaderData:
+ ReadWMDRMHeaderL(aMessage);
+ break;
+
+ case EReadWMDRMDataPacket:
+ case ENoEnforceReadWMDRMDataPacket:
+ DecryptWMDRMDataPacketL(aMessage);
+ break;
+
+ case EWMDRMGetAttribute:
+ case ENoEnforceWMDRMGetAttribute:
+ GetWMDRMAttributeL(aMessage);
+ break;
+
+ case EWMDRMGetAttributeSet:
+ case ENoEnforceWMDRMGetAttributeSet:
+ GetWMDRMAttributeSetL(aMessage);
+ break;
+
+ case EWMDRMGetStringAttribute:
+ case ENoEnforceWMDRMGetStringAttribute:
+ GetWMDRMStringAttributeL(aMessage);
+ break;
+
+ case EWMDRMGetStringAttributeSet:
+ case ENoEnforceWMDRMGetStringAttributeSet:
+ GetWMDRMStringAttributeSetL(aMessage);
+ break;
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
default:
CRtaSession::PanicClient(aMessage,EPanicIllegalFunction);
break;
@@ -327,3 +361,114 @@
{
User::Leave(KErrCANotSupported);
}
+
+#ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
+
+void CRtaDataHandler::ReadWMDRMHeaderL(const RMessage2& aMessage)
+ {
+ HBufC8* headerData = ReadDesC8LC(aMessage, 0);
+ iWmdrmContentObject = CWmdrmContentParser::NewL(*headerData);
+
+ CleanupStack::PopAndDestroy(headerData);
+ }
+
+void CRtaDataHandler::DecryptWMDRMDataPacketL(const RMessage2& aMessage)
+ {
+ HBufC8* inputPacket = ReadDesC8LC(aMessage, 0);
+
+ HBufC8* decryptedPacket = ReadDes8LC(aMessage, 1);
+ TPtr8 decryptedPacketPtr = decryptedPacket->Des();
+
+ decryptedPacketPtr.Copy(*inputPacket);
+
+ WriteL(aMessage, 1, decryptedPacketPtr);
+
+ CleanupStack::PopAndDestroy(2, inputPacket);
+ }
+
+void CRtaDataHandler::GetWMDRMAttributeL(const RMessage2& aMessage)
+ {
+ TInt attribute = aMessage.Int0();
+ TInt value;
+ TPckg <TInt> valuePckg(value);
+ User::LeaveIfError(iWmdrmContentObject->GetAttribute(attribute, value));
+
+ WriteL(aMessage, 1, valuePckg);
+ }
+
+void CRtaDataHandler::GetWMDRMStringAttributeL(const RMessage2& aMessage)
+ {
+ TInt attribute = aMessage.Int0();
+ HBufC* value = ReadDes16LC(aMessage, 1);
+ TPtr valuePtr = value->Des();
+
+ User::LeaveIfError(iWmdrmContentObject->GetStringAttribute(attribute, valuePtr));
+ WriteL(aMessage, 1, valuePtr);
+
+ CleanupStack::PopAndDestroy(value);
+ }
+
+void CRtaDataHandler::GetWMDRMAttributeSetL(const RMessage2& aMessage)
+ {
+ RAttributeSet attributeSet;
+ CleanupClosePushL(attributeSet);
+
+ HBufC8* value = ReadDes8LC(aMessage, 0);
+ TPtr8 valuePtr = value->Des();
+ RDesReadStream readStream(valuePtr);
+ CleanupClosePushL(readStream);
+
+ attributeSet.InternalizeL(readStream);
+ CleanupStack::PopAndDestroy(2, value);
+
+ iWmdrmContentObject->GetAttributeSet(attributeSet);
+
+ // Write the object out to a buffer, send to client
+ CBufFlat* buf = CBufFlat::NewL(50);
+ CleanupStack::PushL(buf);
+ // create write stream
+ RBufWriteStream writeStream(*buf);
+ CleanupClosePushL(writeStream);
+
+ // write the directory to the stream
+ attributeSet.ExternalizeL(writeStream);
+ CleanupStack::PopAndDestroy(&writeStream);
+
+ TPtr8 bufPtr = buf->Ptr(0);
+ WriteL(aMessage, 0, bufPtr);
+
+ CleanupStack::PopAndDestroy(2, &attributeSet); // buf, attributeSet
+ }
+
+void CRtaDataHandler::GetWMDRMStringAttributeSetL(const RMessage2& aMessage)
+ {
+ RStringAttributeSet attributeSet;
+ CleanupClosePushL(attributeSet);
+
+ HBufC8* value = ReadDes8LC(aMessage, 0);
+ TPtr8 valuePtr = value->Des();
+ RDesReadStream readStream(valuePtr);
+ CleanupClosePushL(readStream);
+
+ attributeSet.InternalizeL(readStream);
+ CleanupStack::PopAndDestroy(2, value);
+
+ iWmdrmContentObject->GetStringAttributeSet(attributeSet);
+
+ // Write the object out to a buffer, send to client
+ CBufFlat* buf = CBufFlat::NewL(50);
+ CleanupStack::PushL(buf);
+ // create write stream
+ RBufWriteStream writeStream(*buf);
+ CleanupClosePushL(writeStream);
+
+ // write the directory to the stream
+ attributeSet.ExternalizeL(writeStream);
+ CleanupStack::PopAndDestroy(&writeStream);
+
+ TPtr8 bufPtr = buf->Ptr(0);
+ WriteL(aMessage, 0, bufPtr);
+
+ CleanupStack::PopAndDestroy(2, &attributeSet); // buf, attributeSet
+ }
+#endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT