--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/WimClient/src/WimClient.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2002 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: Startup place for client & server, message handling.
+*
+*/
+
+
+//INCLUDES
+#include "WimClient.h"
+#include "WimSig.h"
+#include "WimTrace.h"
+
+#ifdef __WINS__
+#include <c32comm.h>
+
+#endif // WINS
+
+
+// -----------------------------------------------------------------------------
+// FindServerFileName()
+// Return the name of the WIM server file
+// -----------------------------------------------------------------------------
+//
+TInt RWimClient::FindServerFileName( TFileName& aServer )
+ {
+ // just return .EXE name, it's loaded from /sys/bin
+ aServer = KWimServerFile;
+ return ( KErrNone );
+ }
+
+
+// -----------------------------------------------------------------------------
+// StartWim()
+// Start the WIM server
+// -----------------------------------------------------------------------------
+//
+TInt RWimClient::StartWim()
+ {
+ _WIMTRACE( _L( "StartWim() ") );
+ // just get .EXE name, it's loaded from /sys/bin
+ TFileName serverFileName( KWimServerFile );
+ TRequestStatus stat;
+
+ RProcess server;
+ _WIMTRACE( _L( "StartWim Process() start" ) );
+ TInt r = server.Create( serverFileName,
+ KNullDesC,
+ TUidType( KNullUid,
+ KNullUid,
+ KWimServerUid ) );
+ if ( r != KErrNone )
+ {
+ return r;
+ }
+
+ _WIMTRACE( _L( "StartWim Process() started" ) );
+
+
+ _WIMTRACE( _L( "wait util server release mutex..." ) );
+
+ server.Rendezvous( stat );
+
+ _WIMTRACE( _L( "mutex is released" ) );
+
+
+
+ if ( stat != KRequestPending )
+ {
+ // logon failed - server is not yet running, so cannot have terminated
+ server.Kill(0); // Abort startup
+ }
+ else
+ {
+ // logon OK - start the server
+ server.Resume();
+ }
+
+ _WIMTRACE( _L( "RWimClient::StartWim() | Wait status to complete" ) );
+
+ User::WaitForRequest( stat ); // Wait server to signal is has started
+
+ _WIMTRACE2( _L( "RWimClient::StartWim() | complete with error %d" ), stat.Int() );
+
+ if ( stat.Int() == KErrAlreadyExists )
+ {
+ r = KErrNone;
+ }
+ else
+ {
+ r = stat.Int();
+ }
+
+ server.Close();
+ _WIMTRACE( _L( "RWimClient::StartWim() | End" ) );
+
+
+ return r;
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::RWimClient()
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+RWimClient::RWimClient()
+ {
+ _WIMTRACE ( _L( "RWimClient::RWimClient()" ) );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RWimClient::~RWimClient()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+RWimClient::~RWimClient()
+ {
+ _WIMTRACE ( _L( "RWimClient::~RWimClient()" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::Connect()
+// Connect to WIMI server
+// -----------------------------------------------------------------------------
+//
+TInt RWimClient::Connect()
+ {
+ _WIMTRACE ( _L( "RWimClient::Connect()" ) );
+#ifdef __WINS__
+ StartC32();
+#endif
+ TInt retryCount = 0;
+ TInt retval = 0;
+ retval = CreateSession( KWIMServerName,
+ Version(),
+ KMessageSlotsNum );
+ if ( retval == KErrServerTerminated )
+ {
+ while ( (retval == KErrServerTerminated )
+ && ( retryCount++ < KWimServerTerminatingMaxRetryCount) )
+ {
+ /* Server can take some time to shutdown, retry in a moment */
+ User::After( KWimServerTerminatingRetryTimeout );
+ retval = CreateSession( KWIMServerName,
+ Version(),
+ KMessageSlotsNum );
+ }
+ }
+ return retval;
+ }
+
+
+// -----------------------------------------------------------------------------
+// RWimClient::Version() const
+// Return version
+// -----------------------------------------------------------------------------
+//
+TVersion RWimClient::Version( void ) const
+ {
+ _WIMTRACE ( _L( "RWimClient::Version()" ) );
+ return( TVersion( KWIMServMajorVersionNumber,
+ KWIMServMinorVersionNumber,
+ KWIMServBuildVersionNumber ) );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::SendReceiveData()
+// Send message synchronously to server
+// -----------------------------------------------------------------------------
+//
+TInt RWimClient::SendReceiveData( TWimServRqst aFn, TIpcArgs& aIpcArgs )
+ {
+ _WIMTRACE ( _L( "RWimClient::SendReceiveData()" ) );
+ return SendReceive( aFn, aIpcArgs );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::SendReceiveData()
+// Send message asyncronously to server
+// -----------------------------------------------------------------------------
+//
+void RWimClient::SendReceiveData( TWimServRqst aFn,
+ TIpcArgs& aIpcArgs,
+ TRequestStatus& aStatus )
+ {
+ _WIMTRACE ( _L( "RWimClient::SendReceiveData()" ) );
+ SendReceive( aFn, aIpcArgs, aStatus );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::FreeAddrLst()
+// Free the address list
+// -----------------------------------------------------------------------------
+//
+void RWimClient::FreeAddrLst( const TUint32 addrLst )
+ {
+ _WIMTRACE ( _L( "RWimClient::FreeAddrLst()" ) );
+
+ TIpcArgs args;
+ args.Set( 0, addrLst );
+ SendReceiveData( EFreeMemoryLst, args );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::FreeWIMAddrLst()
+// Free the address list
+// -----------------------------------------------------------------------------
+//
+void RWimClient::FreeWIMAddrLst( const TWimAddressList addrLst,
+ const TUint aSize )
+ {
+ _WIMTRACE ( _L( "RWimClient::FreeWIMAddrLst()" ) );
+
+ TIpcArgs args;
+ args.Set( 0, addrLst[0] );
+ args.Set( 1, aSize );
+
+ SendReceiveData( EFreeWIMMemoryLst, args );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::FreeWIMAddr()
+// Free the address
+// -----------------------------------------------------------------------------
+//
+void RWimClient::FreeWIMAddr( const TWimAddress aAddr )
+ {
+ _WIMTRACE ( _L( "RWimClient::FreeWIMAddr()" ) );
+ TIpcArgs args;
+ args.Set( 0, aAddr );
+ SendReceiveData( EFreeMemory, args );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::Initialize()
+// Sends initialization command to Server.
+// -----------------------------------------------------------------------------
+//
+void RWimClient::Initialize( TRequestStatus& aStatus )
+ {
+ aStatus = KRequestPending;
+ _WIMTRACE ( _L( "RWimClient::Initialize( TRequestStatus& aStatus )" ) );
+ TIpcArgs args;
+ SendReceiveData( EWimInitialize, args, aStatus );
+ }
+
+// -----------------------------------------------------------------------------
+// RWimClient::CancelInitialize()
+// Cancel initialization command to Server.
+// -----------------------------------------------------------------------------
+//
+void RWimClient::CancelInitialize()
+ {
+ _WIMTRACE ( _L( "RWimClient::CancelInitialize()" ) );
+ TIpcArgs args;
+ SendReceiveData( ECancelWimInitialize, args );
+ }
+// End of File
+
+
+