--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wmdrm/wmdrmengine/wmdrmfileserver/client/src/wmdrmfileserverclient.cpp Thu Dec 17 08:52:27 2009 +0200
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2007 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: WMDRM Fileserver Client implementation
+*
+*/
+
+
+#include "wmdrmfileserverclient.h"
+#include "wmdrmfsclientserver.h"
+
+//#define _LOGGING_FILE L"wmdrmfileserver.txt"
+
+//#include "logfn.h"
+
+// Message slots a client can have open: taken from the global slot pool
+const TInt KServerDefaultMessageSlots = -1;
+
+// Number of times the server is attempted to start if it is not running
+const TInt KServerRetryCount = 3;
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Try to start the server if it is not running
+// ---------------------------------------------------------------------------
+//
+static TInt StartServer()
+ {
+ RProcess server;
+ TInt r = server.Create( KWmDrmFileServerImg, KNullDesC );
+ if ( r != KErrNone )
+ return r;
+ TRequestStatus stat;
+ server.Rendezvous( stat );
+ if ( stat != KRequestPending )
+ {
+ server.Kill( 0 );
+ }
+ else
+ {
+ server.Resume();
+ }
+ User::WaitForRequest( stat );
+ r = ( server.ExitType() == EExitPanic ) ? KErrGeneral : stat.Int();
+ server.Close();
+ return r;
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+EXPORT_C TInt RWmDrmFileServerClient::Open( const TDesC& aFilename )
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::Open", r );
+ r = SendReceive( EFsOpen, TIpcArgs( &aFilename ) );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::Create( const TDesC& aFilename )
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::Create", r );
+ r = SendReceive( EFsCreate, TIpcArgs( &aFilename ) );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::Read( TDes8& aBuffer )
+ {
+ TInt r = KErrNone;
+ TInt amountRead;
+ TPckg<TInt> amountPckg( amountRead );
+
+ //LOGFNR( "RWmDrmFileServerClient::Read", r );
+ r = SendReceive( EFsRead, TIpcArgs( &aBuffer, &amountPckg ) );
+ if ( r == KErrNone )
+ {
+ aBuffer.SetLength( amountRead );
+ }
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::Write( const TDesC8& aBuffer )
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::Write", r );
+ r = SendReceive( EFsWrite, TIpcArgs( &aBuffer ) );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::Size( TInt& aSize )
+ {
+ TInt r = KErrNone;
+ TPckg<TInt> sizePckg( aSize );
+
+ //LOGFNR( "RWmDrmFileServerClient::Size", r );
+ r = SendReceive( EFsSize, TIpcArgs( &sizePckg ) );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::Delete( const TDesC& aFilename )
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::Delete", r );
+ r = SendReceive( EFsDelete, TIpcArgs( &aFilename ) );
+ return r;
+ }
+
+EXPORT_C TBool RWmDrmFileServerClient::IsOpen()
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::IsOpen", r );
+ r = SendReceive( EFsIsOpen );
+ return (r == KErrNone ? ETrue : EFalse);
+ }
+
+EXPORT_C void RWmDrmFileServerClient::CloseFile()
+ {
+ //LOGFN( "RWmDrmFileServerClient::CloseFile" );
+ SendReceive( EFsCloseFile );
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::MkDirAll( const TDesC& aPath, TBool aCreateIfMissing )
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::MkDirAll", r );
+ r = SendReceive( EFsMkDirAll, TIpcArgs( &aPath, aCreateIfMissing ) );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::RmDirAll( const TDesC& aPath )
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::RmDirAll", r );
+ r = SendReceive( EFsRmDirAll, TIpcArgs( &aPath ) );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::RmDir( const TDesC& aPath )
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::RmDir", r );
+ r = SendReceive( EFsRmDir, TIpcArgs( &aPath ) );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::DeleteRights()
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::DeleteRights", r );
+ r = SendReceive( EFsDeleteRights );
+ return r;
+ }
+
+EXPORT_C TInt RWmDrmFileServerClient::Connect()
+ {
+ TInt r = KErrNone;
+
+ //LOGFNR( "RWmDrmFileServerClient::Connect", r );
+ TInt retry = KServerRetryCount;
+ for ( ;; )
+ {
+ r = CreateSession( KWmDrmFileServerName, TVersion( 0, 0, 0 ), KServerDefaultMessageSlots );
+ if ( r != KErrNotFound && r != KErrServerTerminated )
+ {
+ return r;
+ }
+ if ( --retry == 0 )
+ {
+ return r;
+ }
+ r = StartServer();
+ if ( r != KErrNone && r != KErrAlreadyExists )
+ {
+ return r;
+ }
+ }
+ }
+
+
+EXPORT_C TInt RWmDrmFileServerClient::UpdateSecureTime( TTime& aHomeTime, TTime& aUTCTime )
+ {
+ TInt r = KErrNone;
+ TPckg<TTime> homeTime( aHomeTime );
+ TPckg<TTime> utcTime( aUTCTime );
+
+ //LOGFNR( "RWmDrmFileServerClient::UpdateSecureTime", r );
+ r = SendReceive( EFsUpdateSecureTime, TIpcArgs( &homeTime, &utcTime ) );
+ return r;
+ }