diff -r 000000000000 -r 95b198f216e5 omadrm/drmengine/notifier/src/DRMNotifierClient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadrm/drmengine/notifier/src/DRMNotifierClient.cpp Thu Dec 17 08:52:27 2009 +0200 @@ -0,0 +1,205 @@ +/* +* 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(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 eventType(0); + eventType.Set(reinterpret_cast(&aEventType),sizeof(TDRMEventType),sizeof(TDRMEventType)); + + if( aURI ) + { + TUint8* dataptr = const_cast(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 eventType(0); + eventType.Set(reinterpret_cast(&aEventType),sizeof(TDRMEventType),sizeof(TDRMEventType)); + + if( aURI ) + { + TUint8* dataptr = const_cast(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