commondrm/drmqtencryptor/drmencyptor.cpp
branchRCL_3
changeset 72 1481bf457703
parent 71 1221b68b8a5f
child 73 6661d8259859
child 77 00671737faf2
--- a/commondrm/drmqtencryptor/drmencyptor.cpp	Tue Aug 31 15:29:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,795 +0,0 @@
-/*
-* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  DRM Encryption tool.
-*
-*/
-
-#include "drmencryptor.h"
-//#include "ui_dialog.h"
-#include <QMessageBox>
-#include <QDoubleValidator>
-#include <QMenu>
-#include <QHBoxLayout>
-#include <QString>
-#include <QLabel>
-#include <QPlainTextEdit>
-#include <QVBoxLayout>
-#include <QWidget>
-#include <QPalette>
-
-#ifdef RD_MULTIPLE_DRIVE
-#include <driveinfo.h>
-#endif
-
-#include <e32std.h>
-#include <e32base.h>
-#include <e32cmn.h>
-
-#include <Oma1DcfCreator.h>
-#include <s32file.h>
-#include <DRMMessageParser.h>
-#include <DcfRep.h>
-#include <DcfEntry.h>
-#include <DRMRights.h>
-//#include <drmbrowserlauncher.h>
-
-#include "drmserviceapi.h"
-#include "DRMTypes.h"
-
-const TInt KBufferSize = 20000;
-
-DRMEncryptor::DRMEncryptor()
-{   
-    QWidget *widget = new QWidget();
-    setCentralWidget(widget);
-    
-    setBackgroundRole( QPalette::Window );
-
-    QVBoxLayout *layout = new QVBoxLayout;
-    layout->setAlignment(Qt::AlignCenter);
-   
-    QLabel *mainWindowLabel = new QLabel("DRM Encryptor");
-    layout->addWidget(mainWindowLabel);
-    
-    //layout->addStretch();
-
-    //ui->setupUi(this);
-    //iOptionsMenu = menuBar()->addMenu(tr("&Options"));
-    
-    // Create menu options
-    iSetDRMClockAct = new QAction(tr("&Set DRM Clock"), this);
-    iSetDRMClockAct->setStatusTip(tr("Set DRM secure clock time."));
-    
-    iGetDRMClockAct = new QAction(tr("&Get DRM Clock Time"), this);
-    iGetDRMClockAct->setStatusTip(tr("Get DRM secure clock time."));
-    
-    iEncryptAct = new QAction(tr("&Encrypt"), this);
-    iEncryptAct->setStatusTip(tr("Encrypt"));
-    
-    iLaunchBrowserAct = new QAction(tr("&Launch Browser"), this);
-    iLaunchBrowserAct->setStatusTip(tr("Launch Browser"));
-        
-    iDeleteWMDRMDBAct = new QAction(tr("&Delete WMDRM DB"), this);
-    iDeleteWMDRMDBAct->setStatusTip(tr("Delete WMDRM Database rights."));
-    
-    iDeleteOMADRMDBAct = new QAction(tr("&Delete OMADRM DB"), this);
-    iDeleteOMADRMDBAct->setStatusTip(tr("Delete OMADRM Database rights."));
-    
-    menuBar()->addAction(iSetDRMClockAct);
-    menuBar()->addAction(iGetDRMClockAct);
-    menuBar()->addAction(iEncryptAct);
-    menuBar()->addAction(iDeleteWMDRMDBAct);
-    menuBar()->addAction(iDeleteOMADRMDBAct);
-    menuBar()->addAction(iLaunchBrowserAct);
-    
-    connect(iSetDRMClockAct, SIGNAL(triggered()), this, SLOT(setDRMClock()));
-    connect(iGetDRMClockAct, SIGNAL(triggered()), this, SLOT(getDRMClock()));
-    connect(iEncryptAct, SIGNAL(triggered()), this, SLOT(startEncrypt()));
-    connect(iDeleteWMDRMDBAct, SIGNAL(triggered()), this, SLOT(deleteWmDrmDB()));
-    connect(iDeleteOMADRMDBAct, SIGNAL(triggered()), this, SLOT(deleteOmaDrmDB()));
-    connect(iLaunchBrowserAct, SIGNAL(triggered()), this, SLOT(launchBrowser()));
-    
-    //setDRMClockButton = new QPushButton("Set DRM Clock", this);
-    //connect(setDRMClockButton, SIGNAL(clicked()), this, SLOT(setDRMClock()));
-    //setDRMClockButton->show();
-    
-/*  ui->pushButton->setEnabled(false);
-
-    ui->lineEdit->setValidator(new QDoubleValidator(this));
-    ui->lineEdit_2->setValidator(new QDoubleValidator(this));
-*/
-    //connect(ui->mainMenu,SIGNAL(onChanged()),this,SLOT(onLaske()));
-    //connect(ui->lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(onTextChanged(const QString &)));
-    //connect(ui->mainMenu,SIGNAL(textChanged(const QString &)),this,SLOT(onTextChanged(const QString &)));
-
-    widget->setLayout(layout);
-}
-
-DRMEncryptor::~DRMEncryptor()
-{
-    //delete ui;
-}
-
-void DRMEncryptor::setDRMClock()
-{
-    DateTimeDialog *dateTimeDialog = new DateTimeDialog();
-    dateTimeDialog->show();
-}
-
-void DRMEncryptor::getDRMClock()
-{
-	TTime time;
-    TInt timeZone;
-    TDateTime date;
-    DRMClock::ESecurityLevel level;
-    TInt error( KErrNone );
-    TBuf< 80 > buf;
-    
-    DRM::CDrmServiceApi* service = NULL;
-    
-    TRAPD(err, service = DRM::CDrmServiceApi::NewL());
-    if(err!=KErrNone)
-    	{
-    	QMessageBox::information(this, tr("DRM Clock"),tr("Error creating CDrmServiceApi."));
-    	buf.AppendNum(error);
-        QString string((QChar*)buf.Ptr(),buf.Length());
-        QMessageBox::information(this, tr("DRM Clock"),string);
-    	delete service; // service
-    	return;
-    	}
-    
-    error = service->GetSecureTime( time, timeZone, level );
-    if(!error==KErrNone)
-        {
-        QMessageBox::information(this, tr("DRM Clock"),tr("Error getting secure time."));
-        
-        buf.AppendNum(error);
-        QString string((QChar*)buf.Ptr(),buf.Length());
-        QMessageBox::information(this, tr("DRM Clock"),string);
-        delete service;
-        return;
-        }
-    
-    date = time.DateTime();
-    
-    if(level == DRMClock::KSecure)
-    {
-        _LIT(KFormatTxt,"DRMClock Time:\n%d/%d/%d\n%d:%d:%d\nNitz available");
-        buf.Format( KFormatTxt,
-                date.Day()+1,
-                TInt(date.Month()+1),
-                date.Year(),
-                date.Hour(),
-                date.Minute(),
-                date.Second());
-    }
-    else
-    {
-        _LIT(KFormatTxt,"DRMClock Time:\n%d/%d/%d\n%d:%d:%d\nNitz unavailable");
-        buf.Format( KFormatTxt,
-                date.Day()+1,
-                TInt(date.Month()+1),
-                date.Year(),
-                date.Hour(),
-                date.Minute(),
-                date.Second());
-    }
-    
-    QGridLayout *layout = new QGridLayout;
-    layout->setAlignment(Qt::AlignCenter);
-    setLayout(layout);
-        
-    
-    QString datetimeString((QChar*)buf.Ptr(),buf.Length());
-    
-    QMessageBox *drmClockTime = new QMessageBox(this);
-    drmClockTime->setWindowTitle(tr("DRM Clock"));
-    drmClockTime->setText(datetimeString);
-    
-    layout->addWidget(drmClockTime);
-    drmClockTime->show();
-    
-}
-
-LOCAL_C void ReadFileL(HBufC8*& aContent, const TDesC& aName, RFs& aFs)
-    {
-    TInt size = 0;
-    RFile file;
-    User::LeaveIfError(file.Open(aFs, aName, EFileRead));
-    User::LeaveIfError(file.Size(size));
-    aContent = HBufC8::NewLC(size);
-    TPtr8 ptr(aContent->Des());
-    User::LeaveIfError(file.Read(ptr, size));
-    CleanupStack::Pop(); //aContent
-    }
-
-// ---------------------------------------------------------
-// UpdateDCFRepositoryL()
-// Update saved file to DCFRepository
-// ---------------------------------------------------------
-//
-LOCAL_C void UpdateDCFRepositoryL( const TDesC& aFileName)
-    {
-    CDcfEntry* dcf( NULL );
-    CDcfRep* dcfRep( NULL );
-
-    dcf = CDcfEntry::NewL();
-    CleanupStack::PushL( dcf );
-
-    dcfRep = CDcfRep::NewL();
-    CleanupStack::PushL( dcfRep );
-
-    dcf->SetLocationL( aFileName, 0 );
-    dcfRep->UpdateL( dcf );
-
-    CleanupStack::PopAndDestroy(2); // dcf, dcfRep
-    }
-
-void ProcessRightsL(const TDesC& aFile)
-    {
-    CDRMMessageParser* c = NULL;
-    HBufC8* d = NULL;
-    RFs fs;
-    RPointerArray<CDRMRights> rights;
-
-    User::LeaveIfError(fs.Connect());
-    c = CDRMMessageParser::NewL();
-    ReadFileL(d, aFile, fs);
-    c->ProcessRightsObject(*d, rights);
-    rights.ResetAndDestroy();
-    delete d;
-    delete c;
-    fs.Close();
-    }
-
-void DRMEncryptor::ProcessMessageL(const TDesC& aFile, const TDesC& aOutput)
-    {
-    CDRMMessageParser* c = NULL;
-    HBufC8* d = NULL;
-    RFs fs;
-    TPtr8 inRead(NULL, 0);
-    TInt error = 1;
-    __UHEAP_MARK;
-
-    User::LeaveIfError(fs.Connect());
-    CleanupClosePushL(fs);
-    c = CDRMMessageParser::NewL();
-    CleanupStack::PushL(c);
-
-    d = HBufC8::NewLC( KBufferSize );
-
-    RFile input;
-    User::LeaveIfError(input.Open( fs, aFile, EFileRead ));
-    CleanupClosePushL( input );
-
-    RFileWriteStream output;
-    output.Replace( fs, aOutput, EFileWrite );
-    CleanupClosePushL( output );
-
-    c->InitializeMessageParserL( output );
-
-    while( error )
-        {
-        inRead.Set( const_cast<TUint8*>(d->Ptr()),0,KBufferSize);
-        error = input.Read( inRead );
-
-        if( error )
-            {
-            c->FinalizeMessageParserL();
-
-            User::Leave( error );
-            }
-        else
-            {
-            error = inRead.Length();
-            }
-
-        if( error )
-            {
-            c->ProcessMessageDataL(inRead);
-            }
-        }
-
-    c->FinalizeMessageParserL();
-
-
-    CleanupStack::PopAndDestroy( 5 ); // fs, c, d, input, output
-    UpdateDCFRepositoryL( aOutput );
-    __UHEAP_MARKEND;
-    }
-
-void EncryptFileL(const TDesC& aFile, TDesC& aOutput, TInt aMultiplier)
-    {
-    COma1DcfCreator* c = NULL;
-    CDRMRights* rights = NULL;
-    TBuf8<64> mime;
-    RFs fs;
-    TFileName aDcfFile;
-    TInt aOriginalFileNameLength(aOutput.Length() - 4);
-
-    User::LeaveIfError(fs.Connect());
-    if (aFile.Right(3).CompareF(_L("amr")) == 0) //AMR
-        {
-        mime.Copy(_L8("audio/amr"));
-        }
-    else if (aFile.Right(3).CompareF(_L("awb")) == 0) //AMR-AWB
-        {
-        mime.Copy(_L8("audio/amr-wb"));
-        }
-    else if (aFile.Right(3).CompareF(_L("mp3")) == 0) //MP3
-        {
-        mime.Copy(_L8("audio/mpeg"));
-        }
-    else if (aFile.Right(3).CompareF(_L("mp4")) == 0) //MP4
-        {
-        mime.Copy(_L8("audio/mp4"));
-        }
-    else if (aFile.Right(3).CompareF(_L("m4a")) == 0) //M4A
-        {
-        mime.Copy(_L8("audio/mp4"));
-        }
-    else if (aFile.Right(3).CompareF(_L("3gp")) == 0) //3GPP
-        {
-        mime.Copy(_L8("audio/3gpp"));
-        }
-    else if (aFile.Right(3).CompareF(_L("3g2")) == 0) //3GPP2
-        {
-        mime.Copy(_L8("audio/3gpp2"));
-        }
-    else if (aFile.Right(3).CompareF(_L("aac")) == 0) //AAC
-        {
-        mime.Copy(_L8("audio/aac"));
-        }
-    else if (aFile.Right(3).CompareF(_L("mid")) == 0) //MIDI
-        {
-        mime.Copy(_L8("audio/midi"));
-        }
-    else if (aFile.Right(5).CompareF(_L(".spmid")) == 0) //SP-MIDI
-        {
-        mime.Copy(_L8("audio/sp-midi"));
-        }
-    else if (aFile.Right(3).CompareF(_L("rmf")) == 0) //RMF
-        {
-        mime.Copy(_L8("audio/rmf"));
-        }
-    else if (aFile.Right(4).CompareF(_L("mxmf")) == 0) //Mobile-XMF
-        {
-        mime.Copy(_L8("audio/mobile-xmf"));
-        }
-    else if (aFile.Right(3).CompareF(_L("wav")) == 0) //WAV
-        {
-        mime.Copy(_L8("audio/x-wav"));
-        }
-    else if (aFile.Right(3).CompareF(_L("gif")) == 0) // GIF
-        {
-        mime.Copy(_L8("image/gif"));
-        }
-    else if (aFile.Right(3).CompareF(_L("jpg")) == 0) // JPEG
-        {
-        mime.Copy(_L8("image/jpeg"));
-        }
-    else if (aFile.Right(3).CompareF(_L("txt")) == 0) // text
-        {
-        mime.Copy(_L8("text/plain"));
-        }
-    else if (aFile.Right(3).CompareF(_L("pip")) == 0) // PIP
-        {
-        mime.Copy(_L8("application/x-pip"));
-        }
-
-    aDcfFile.Append(aOutput);
-
-    for(TInt i = 0; i < aMultiplier ; ++i)
-        {
-        aDcfFile.Delete(aOriginalFileNameLength, aDcfFile.Length());
-        aDcfFile.Append(_L("-"));
-        aDcfFile.AppendNum(i);
-        aDcfFile.Append(_L(".dcf"));
-        c = COma1DcfCreator::NewL();
-        CleanupStack::PushL(c);
-        fs.Delete(aOutput);
-        c->EncryptFileL(aFile, aDcfFile, mime, rights);
-        UpdateDCFRepositoryL( aDcfFile );
-        delete rights;
-        CleanupStack::PopAndDestroy(); // c
-        }
-    fs.Close();
-
-    }
-
-void DRMEncryptor::startEncrypt()
-    {
-        TUint result = 0;
-        TUint aEncryptedCount = 0;
-        TUint aRightsCount = 0;
-        TUint aMessagesProcessed = 0;
-        TBuf<128> buffer;
-        
-        result = EncryptL(aEncryptedCount, aRightsCount, aMessagesProcessed);
-    
-        buffer.Append(_L("Encryption done\n"));
-        if(result < 1) 
-        {
-            buffer.Append(_L("No files found"));
-        }
-        if(aMessagesProcessed != 0) 
-        {
-            buffer.AppendNum(aMessagesProcessed);
-            buffer.Append(_L(" messages processed\n"));
-        }
-        if(aRightsCount != 0) 
-        {
-            buffer.AppendNum(aRightsCount);
-            buffer.Append(_L(" rights objects processed\n"));
-        }
-        if(aMessagesProcessed != 0) 
-        {
-            buffer.AppendNum(aEncryptedCount);
-            buffer.Append(_L(" files encrypted\n"));
-        }
-        
-        QGridLayout *layout = new QGridLayout;
-        layout->setAlignment(Qt::AlignCenter);
-        setLayout(layout);
-               
-        QString encryptString((QChar*)buffer.Ptr(),buffer.Length());
-        QMessageBox *encrpytMessage = new QMessageBox(this);
-        encrpytMessage->setWindowTitle(tr("Encrypt"));
-        encrpytMessage->setText(encryptString);
-          
-        layout->addWidget(encrpytMessage);
-        encrpytMessage->show();
-           
-    }
-
-TUint DRMEncryptor::EncryptL(TUint& aEncryptedCount, TUint& aRightsCount, TUint& aMessagesProcessed)
-    {
-    TInt i;
-    CDir* files;
-    TFileName input;
-    TFileName output;
-    TUint inputNameSize = 0;
-    TUint outputNameSize = 0;
-    RFs fs;
-    User::LeaveIfError(fs.Connect());
-    TInt aMultiplier(1);
-
-
-#ifdef __WINS__
-    input.Append(_L("c:\\data\\DRM\\"));
-    output.Append(_L("c:\\data\\Others\\"));
-#else
-#ifndef RD_MULTIPLE_DRIVE
-
-    input.Append(_L("e:\\DRM\\"));
-    output.Append(_L("e:\\Others\\"));
-
-#else //RD_MULTIPLE_DRIVE
-
-    TInt driveNumber( -1 );
-    TChar driveLetter;
-    DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, driveNumber );
-    fs.DriveToChar( driveNumber, driveLetter );
-
-    _LIT( KdrmDir, "%c:\\DRM\\" );
-    input.Format( KdrmDir, (TUint)driveLetter );
-
-    _LIT( KothersDir, "%c:\\Others\\" );
-    output.Format( KothersDir, (TUint)driveLetter );
-
-#endif
-#endif
-
-    inputNameSize = input.Length();
-    outputNameSize = output.Length();
-
-
-    fs.MkDir(input);
-    fs.MkDir(output);
-
-    fs.GetDir(input, KEntryAttNormal, ESortNone, files);
-    for (i = 0; i < files->Count(); i++)
-        {
-        input.Append((*files)[i].iName);
-
-        output.Append((*files)[i].iName);
-
-        if (input.Right(2).CompareF(_L("dm")) == 0)
-            {
-
-            for(TInt ii = 0; ii < aMultiplier ; ++ii)
-                {
-                output.Delete(outputNameSize +(*files)[i].iName.Length() , output.Length()-1);
-                output.Append(_L("-"));
-                output.AppendNum(ii);
-                output.Append(_L(".dcf"));
-                ProcessMessageL(input, output);
-                ++aMessagesProcessed;
-                }
-            }
-        else if (input.Right(3).CompareF(_L("oro")) == 0 ||
-                input.Right(3).CompareF(_L("drc")) == 0 ||
-                input.Right(2).CompareF(_L("ro")) == 0 ||
-                input.Right(2).CompareF(_L("dr")) == 0 )
-            {
-            for (TInt iii = 0; iii < aMultiplier; ++iii)
-                {
-                ProcessRightsL(input);
-                ++aRightsCount;
-                }
-            }
-        else if (input.Right(3).CompareF(_L("dcf")) != 0)
-            {
-            output.Append(_L(".dcf"));
-            EncryptFileL(input, output, aMultiplier);
-            ++aEncryptedCount;
-            }
-
-        //restore paths
-        input.Delete(inputNameSize, input.Length()-1);
-        output.Delete(outputNameSize, output.Length()-1);
-        }
-
-    fs.Close();
-
-    TRequestStatus status;
-    CDcfRep* rep = CDcfRep::NewL();
-    CleanupStack::PushL(rep);
-    rep->RefreshDcf(status);
-    User::WaitForRequest( status );
-    CleanupStack::PopAndDestroy( rep );
-
-    delete files;
-
-    return (aEncryptedCount*aMultiplier + aRightsCount + aMessagesProcessed);
-    
-    }
-
-ContentAccess::CManager* GetCafDataL( TAgent& aAgent )
-    {
-    TPtr8 ptr(NULL, 0, 0);
-    RArray<TAgent> agents;
-    TRequestStatus status;
-    TInt i;
-
-    CleanupClosePushL( agents );
-    CManager* manager = CManager::NewLC();
-
-    manager->ListAgentsL( agents );
-
-    for (i = 0; i < agents.Count(); i++)
-        {
-        if (agents[i].Name().Compare(KWmDrmAgentName) == 0)
-            {
-            aAgent = agents[i];
-            break;
-            }
-        }
-    CleanupStack::Pop( manager );
-    CleanupStack::PopAndDestroy(); // agents
-    return manager;
-    }
-
-void DRMEncryptor::DeleteWmDrmRdbL()
-    {
-    // get the data part
-    ContentAccess::CManager* manager = NULL;
-    ContentAccess::TAgent agent;
-    TPtr8 ptr(NULL, 0, 0);
-    TPtrC8 ptr2;
-
-    // Find the caf agent and create manager
-    manager = GetCafDataL( agent );
-    CleanupStack::PushL( manager );
-
-    User::LeaveIfError(
-        manager->AgentSpecificCommand( agent,
-                                       (TInt)DRM::EWmDrmDeleteRights,
-                                       ptr2,
-                                       ptr) );
-    CleanupStack::PopAndDestroy( manager );
-    }
-
-void DRMEncryptor::deleteWmDrmDB()
-    {
-    TRAPD(err, DeleteWmDrmRdbL());
-    if(!err)
-        {
-        QMessageBox::information(this, tr("WMDRM DB"),tr("DRM rights deleted."));
-        }
-    else
-        {
-        QMessageBox::information(this, tr("WMDRM DB"),tr("Error deleting WMDRM rights."));
-        }
-    }
-
-void DRMEncryptor::deleteOmaDrmDB()
-    {
-    RDRMRightsClient client;
-    User::LeaveIfError(client.Connect());
-    client.DeleteAll();
-    client.Close();
-    }
-
-
-
-void DRMEncryptor::launchBrowser()
-    {
-    /*_LIT( KTestDrmFile, "c:\\data\\others\\sd_water003.dcf" );
-    TInt urlLength = 256;
-    TFileName fileName(KTestDrmFile);
-    RFile file;
-    RFs fs;
-    
-    User::LeaveIfError(fs.Connect());
-    TInt result = 0;
-    
-    result = file.Open(fs, fileName, EFileRead | EFileShareReadersOrWriters);    
-    
-    CData* content = CData::NewLC( file, KDefaultContentObject, EPeek );
-    
-    HBufC* rightsIssuerBuf = HBufC::NewLC( urlLength ); // Content issuer max URL length
-    TPtr rightsIssuer(const_cast<TUint16*>(rightsIssuerBuf->Ptr()), 0, urlLength);
-    
-    // Get value of rights-issuer header field
-    TInt error = content->GetStringAttribute( ERightsIssuerUrl, rightsIssuer );
-    rightsIssuer.TrimAll();
-    
-    rightsIssuer.Insert(0, _L("http://"));
-    
-    HBufC* finalUrl = rightsIssuer.AllocLC();
-    
-    DRM::CDrmBrowserLauncher::LaunchUrlL(*finalUrl);
-
-    CleanupStack::PopAndDestroy(3); // finalUrl, rightsIssuerBuf, content;*/
-    }
-
-/*
-void DRMEncryptorsetDRMClock()
-{
-   
-  double value1 = ui->lineEdit->text().toDouble(&bOK1);
-   double value2 = ui->lineEdit_2->text().toDouble(&bOK2);
-
-   ui->lineEdit_3->setText("");
-
-   if(bOK1 && bOK2)
-   {
-       if(value2 != 0)
-       {
-           double result = value1 / value2;
-           ui->lineEdit_3->setText(QString::number(result));
-       }
-       else
-       {
-           box.setText("Et voi jakaa nollalla");
-           box.exec();
-       }
-   }
-   else
-   {
-       box.setText("Virheellinen syöte");
-       box.exec();
-   }
-}
-
- void DRMEncryptoronDateTimeChanged(const QDateTime & datetime )
-    {
-    
-    }
-*/
-
-void DRMEncryptor::onTextChanged(const QString &)
-{
-    //ui->pushButton->setEnabled(ui->lineEdit->text() != "" && ui->lineEdit_2->text() != "");
-}
-
-DateTimeDialog::DateTimeDialog()
-    {
-    //iLayout = new QHBoxLayout;
-    QGridLayout *layout = new QGridLayout;
-    layout->setAlignment(Qt::AlignCenter);
-    setLayout(layout);
-    
-    iDateEdit = new QDateTimeEdit(QDate::currentDate());
-    iDateEdit->setAlignment(Qt::AlignHCenter);
-    iDateEdit->setDisplayFormat("yyyy.mm.dd hh.mm.ss");
-    iDateEdit->setWindowTitle("Set DRM Clock yyyy.MM.dd hh.mm.ss");
-    QPushButton *okButton = new QPushButton("OK", this);
-    QPushButton *cancelButton = new QPushButton("Cancel", this);
-    
-    layout->addWidget(iDateEdit);
-    layout->addWidget(okButton);
-    layout->addWidget(cancelButton);
-    
-    connect(okButton, SIGNAL(clicked()), this, SLOT(setDRMClock()));
-    connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
-    
-    //this->setLayout(iLayout);
-    okButton->show();
-    cancelButton->show();
-    this->show();
-    }
-
-DateTimeDialog::~DateTimeDialog()
-    {
-    
-    }
-
-void DateTimeDialog::setDRMClock()
-    {
-    DRM::CDrmServiceApi* service = NULL;
-    TBuf<5> buf;
-    TRAPD(err, service = DRM::CDrmServiceApi::NewL());
-    if(err!=KErrNone)
-        {
-        QMessageBox::information(this, tr("DRM Clock"),tr("Error creating CDrmServiceApi."));
-        buf.AppendNum(err);
-        QString string((QChar*)buf.Ptr(),buf.Length());
-        QMessageBox::information(this, tr("DRM Clock"),string);
-        delete service; // service
-        return;
-        }
-       
-    QString datetimeString = iDateEdit->dateTime().toString("yyyy.mm.dd hh.mm.ss");
-    
-    // datetime in format YYYYMMDD:HHMMSS for TTime
-    datetimeString.remove(QChar('.'));
-    datetimeString.replace(" ", ":");
-    datetimeString.append(".000000");
-    
-    TPtrC datetimePtr(reinterpret_cast<const TText*>(datetimeString.constData()));
-    HBufC *datetimeBuf = NULL;
-    TBuf<5> errorBuf;
-    TRAPD(errorCode, datetimeBuf = datetimePtr.AllocL());
-    if(errorCode!=KErrNone)
-        {
-        QMessageBox::information(this, tr("DRM Clock"),tr("Error in datetimePtr.AllocL."));
-        errorBuf.AppendNum(errorCode);
-        QString string((QChar*)buf.Ptr(),buf.Length());
-        QMessageBox::information(this, tr("DRM Clock"),string);
-        delete service;
-        delete datetimeBuf;
-        return;
-        }
-        
-    
-    TTime inputTime(*datetimeBuf);
-    TInt timezone = 0;
-    delete datetimeBuf;
-    
-    // Get secure time from service api to get timezone
-    DRMClock::ESecurityLevel level;
-    TInt error( KErrNone );
-
-    TTime currentTime;
-    error = service->GetSecureTime(currentTime, timezone, level);
-    
-    if(error != KErrNone)
-        {
-        return;
-        }
-    
-    error = service->UpdateSecureTime(inputTime, timezone);
-    
-    if(error != KErrNone)
-        {
-        return;
-        }
-    
-    delete service;
-    
-    QMessageBox::information(this, tr("DRM Clock"),tr("DRM Clock Set"));
-    }
-