diff -r 000000000000 -r 164170e6151a wim/WimClient/src/WimClient.cpp --- /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 + +#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 + + +