omadrm/drmengine/notifier/src/DRMNotifierClient.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 15:14:55 +0300
changeset 23 493788a4a8a4
parent 0 95b198f216e5
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2004 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:  This file contains implementation of RDRMNotifierClient class.
*
*/



// INCLUDE FILES
#include    "DRMNotifierClient.h"
#include "drmnotifierclientserver.h"
#include "DRMRightsClient.h"
// EXTERNAL DATA STRUCTURES
// EXTERNAL FUNCTION PROTOTYPES
// CONSTANTS
// MACROS
// LOCAL CONSTANTS AND MACROS
// MODULE DATA STRUCTURES
// LOCAL FUNCTION PROTOTYPES
// FORWARD DECLARATIONS

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// RDRMNotifierClient::RDRMNotifierClient
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
RDRMNotifierClient::RDRMNotifierClient(TDRMEventType* aEventType, TDRMEventType* aEventTypeWait,
                                       TPtr8* aPtr, TPtr8* aWaitPtr) :
    iEventType( aEventType ),
    iEventTypeWait( aEventTypeWait ),
    iData( aPtr ),
    iWaitData( aWaitPtr ),
    numdata( 0 )
    {
   // Nothing
    }

// Destructor
RDRMNotifierClient::~RDRMNotifierClient()
    {
    Close();
    }


// -----------------------------------------------------------------------------
// RDRMNotifierClient::Connect
// Connects to the server
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt RDRMNotifierClient::Connect( void )
    {
    const TVersion requiredVersion(
        DRMNotifier::KServerMajorVersion,
        DRMNotifier::KServerMinorVersion,
        DRMNotifier::KServerBuildVersion );

    TInt ret = KErrNotFound;
    TUint8 count( 0 );
    TUint8 cont( 1 );

    do
        {
        ret = CreateSession( DRMNotifier::KServerName,
                             requiredVersion,
                             KMaxMessageSlots );
        if ( !ret )
            {
            cont = 0;
            }
        else
            {
            if ( ( count++ == 0 ) && ( ret == KErrNotFound ) )
                {
                ret = RDRMRightsClient::StartServer();
                }
            }
        }
    while ( cont && ( count < 2 ) );

    return ret;
    }

// -----------------------------------------------------------------------------
// RDRMNotifierClient::Close
// Closes the connection to the server
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void RDRMNotifierClient::Close()
    {
    RHandleBase::Close();
    }


// -----------------------------------------------------------------------------
// RDRMNotifierClient::SendEvent
// Sends an event to the client, asynchronous
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void RDRMNotifierClient::SendEvent(TRequestStatus& aStatus)
    {
    // Send the message.
    SendReceive( DRMNotifier::ENotifyClients, TIpcArgs(iData, *iEventType),
        aStatus );
    };

// -----------------------------------------------------------------------------
// RDRMNotifierClient::WaitForCompletion
// Waits for the notifications from the server, asynchronous
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void RDRMNotifierClient::WaitForCompletion(TRequestStatus& aStatus)
    {
    numdata.Set(reinterpret_cast<TUint8*>(iEventTypeWait),sizeof(TDRMEventType),sizeof(TDRMEventType));

    // Send the message.
    SendReceive( DRMNotifier::ERecieveNotification, TIpcArgs(iWaitData, &numdata),
        aStatus );
    };

// -----------------------------------------------------------------------------
// RDRMNotifierClient::RegisterForType
// Registeres a type to the server, synchronous
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void RDRMNotifierClient::RegisterForType( TDRMEventType aEventType,
                                          HBufC8* aURI )
    {
    TPckg<TInt> eventType(0);
    eventType.Set(reinterpret_cast<TUint8*>(&aEventType),sizeof(TDRMEventType),sizeof(TDRMEventType));

    if( aURI )
        {
        TUint8* dataptr = const_cast<TUint8*>(aURI->Ptr());
        TPtr8 uriPkg(dataptr,aURI->Size(),aURI->Size());

        // Send the message.
        SendReceive( DRMNotifier::ERegisterURI, TIpcArgs(&uriPkg, &eventType));
        }
    else
        {
        // Send the message.
        SendReceive( DRMNotifier::ERegister, TIpcArgs(&eventType));
        }
    }

// -----------------------------------------------------------------------------
// RDRMNotifierClient::UnRegisterFromType
// Unregisteres a type from the server, synchronous
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void RDRMNotifierClient::UnRegisterFromType( TDRMEventType aEventType,
                                             HBufC8* aURI)
    {
    TPckg<TInt> eventType(0);
    eventType.Set(reinterpret_cast<TUint8*>(&aEventType),sizeof(TDRMEventType),sizeof(TDRMEventType));

    if( aURI )
        {
        TUint8* dataptr = const_cast<TUint8*>(aURI->Ptr());
        TPtr8 uriPkg(dataptr,aURI->Size(),aURI->Size());

        // Send the message.
        SendReceive( DRMNotifier::EUnRegisterURI, TIpcArgs(&uriPkg, &eventType));
        }
    else
        {
        // Send the message.
        SendReceive( DRMNotifier::EUnRegister, TIpcArgs(&eventType));
        }
    }


// -----------------------------------------------------------------------------
// RDRMNotifierClient::CancelRequest
// Cancels the request from the server, synchronous
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void RDRMNotifierClient::CancelRequest()
    {
    // Send the message.
    SendReceive( DRMNotifier::ECancelNotification);
    };

//  End of File