diff -r 000000000000 -r c53acadfccc6 locationmanager/server/src/clocationmanagersession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationmanager/server/src/clocationmanagersession.cpp Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,517 @@ +/* +* Copyright (c) 2006-2009 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: A session class for LocationManagerServer. +* +*/ + +#include +#include +#include +#include +#include + +#include "clocationmanagerserver.h" +#include "clocationmanagersession.h" +#include "locationmanagerdefs.h" +#include "locationmanagerdebug.h" +#include "rlocationtrail.h" +#include "rlocationobjectmanipulator.h" +#include "rlocationtrail.h" +#include "mdsutils.h" + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CLocationManagerSession +// C++ constructor. +// -------------------------------------------------------------------------- +// +CLocationManagerSession::CLocationManagerSession() + { + + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::~CLocationManagerSession +// C++ destructor. +// -------------------------------------------------------------------------- +// +CLocationManagerSession::~CLocationManagerSession() + { + LOG( "CLocationManagerSession::~CLocationManagerSession(), begin" ); + Server().CancelNotificationRequest( iNotificationHandle ); + Server().CancelLocationRequest( iLocationHandle ); + Server().CancelTrackLogNotificationRequest( iTrackLogNotificationHandle ); + Server().RemoveSession(); + LOG( "CLocationManagerSession::~CLocationManagerSession(), end" ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CreateL +// From CSession2, used to increase server's session count. +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CreateL() + { + LOG( "CLocationManagerSession::CreateL(), begin" ); + Server().AddSession(); + LOG( "CLocationManagerSession::CreateL(), end" ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::Server +// Reference to server. +// -------------------------------------------------------------------------- +// +CLocationManagerServer& CLocationManagerSession::Server() + { + return *static_cast + ( const_cast( CSession2::Server() ) ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::ServiceL +// From CSession2, passes the request forward to DispatchMessageL. +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::ServiceL( const RMessage2& aMessage ) + { + LOG( "CLocationManagerSession::ServiceL" ); + _LIT( KSemaphore, "LocManSynchSemaphore" ); + RSemaphore semaphore; + TInt result = semaphore.OpenGlobal( KSemaphore ); + LOG1( "CLocationManagerSession::ServiceL - semaphore open result: %d", result ); + iMessage = RMessage2( aMessage ); + if ( result == KErrNone ) + { + semaphore.Signal(); + semaphore.Close(); + } + TRAPD( err, DispatchMessageL( aMessage ) ); + if ( err != KErrNone ) + { + aMessage.Complete( err ); + } + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::DispatchMessageL +// Handles the request from client. +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::DispatchMessageL( const RMessage2& aMessage ) + { + LOG( "CLocationManagerSession::DispatchMessageL" ); + switch( aMessage.Function() ) + { + case ELocManStartTrail: + StartLocationTrailL( aMessage ); + break; + case ELocManStopTrail: + StopLocationTrailL( aMessage ); + break; + case ELocManTrailState: + GetLocationTrailStateL( aMessage ); + break; + case ELocManNotifyTrailStateChange: + NotifyLocationTrailStateChangeL( aMessage ); + break; + case ELocManCancelNotification: + CancelNotificationRequest( aMessage ); + break; + case ELocManRetrieveLoc: + RetrieveLocationL( aMessage ); + break; + case ELocManCurrentLoc: + CurrentLocationL( aMessage ); + break; + case ELocManCancelCurrentLoc: + CancelLocationRequest( aMessage ); + break; + case ELocManCreateLocationObject: + CreateLocationObjectL( aMessage ); + break; + case ELocManLocationSnapshot: + LocationSnapshotL( aMessage ); + break; + case ELocManRemoveLocationObject: + RemoveLocationObjectL( aMessage ); + break; + case ELocManCopyLocationDataById: + CopyLocationDataByIdL( iMessage ); + break; + case ELocManCopyLocationDataByUri: + CopyLocationDataByURIL( iMessage ); + break; + case ELocManStartTrackLog: + StartTrackLogL( aMessage ); + break; + case ELocManStopTrackLog: + StopTrackLogL( aMessage ); + break; + case ELocManGetTrackLogStatus: + GetTrackLogStatusL( aMessage ); + break; + case ELocManDeleteTrackLog: + DeleteTrackLogL( aMessage ); + break; + case ELocManIsTrackLogRecording: + IsTrackLogRecordingL( aMessage ); + break; + case ELocManTrackLogName: + TrackLogNameL( aMessage ); + break; + case ELocManRegObserver: + RegisterTrackLogObserver( aMessage ); + break; + case ELocManGetCaptureSetting: + GetCaptureSettingL( aMessage ); + break; + case ELocManCancelTrackLogNotify: + CancelTrackLogNotificationRequest( aMessage ); + break; + default: + aMessage.Complete( KErrArgument ); + break; + } + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::StartLocationTrailL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::StartLocationTrailL( const RMessage2& aMessage ) + { + const TInt KParamSetting = 0; + + RLocationTrail::TTrailCaptureSetting setting; + TPckg locSetting( setting ); + aMessage.ReadL(KParamSetting, locSetting); + + LOG1 ("CLocationManagerSession::StartLocationTrailL TTrailCaptureSetting: %d", setting); + + Server().StartGPSPositioningL( setting ); + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::StopLocationTrailL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::StopLocationTrailL( const RMessage2& aMessage ) + { + Server().StopGPSPositioningL(); + if( !aMessage.IsNull() ) + { + aMessage.Complete( KErrNone ); + } + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::GetLocationTrailStateL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::GetLocationTrailStateL( const RMessage2& aMessage ) + { + RLocationTrail::TTrailState state; + Server().GetLocationTrailState( state ); + + TPckg locState( state ); + aMessage.WriteL( 0, locState ); + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::NotifyLocationTrailStateChangeL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::NotifyLocationTrailStateChangeL( const RMessage2& aMessage ) + { + iNotificationHandle = aMessage.Handle(); + Server().AddNotificationRequestL( aMessage ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CancelNotificationRequest +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CancelNotificationRequest( const RMessage2& aMessage ) + { + Server().CancelNotificationRequest( iNotificationHandle ); + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::RetrieveLocationL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::RetrieveLocationL( const RMessage2& aMessage ) + { + TTime time( 0 ); + TPckg timeBuf( time ); + aMessage.ReadL( EArgumentTime, timeBuf ); + + TLocationData locationData; + TLocTrailState state; + Server().GetLocationByTimeL( time, locationData, state ); + + TPckg locDataBuf( locationData ); + aMessage.WriteL( EArgumentLocationData, locDataBuf ); + + TPckg stateBuf( state ); + aMessage.WriteL( EArgumentState, stateBuf ); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CurrentLocationL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CurrentLocationL( const RMessage2& aMessage ) + { + LOG ("CLocationManagerSession::StartLocationTrailL begin"); + iLocationHandle = aMessage.Handle(); + // server creates completion after it has received current location data + Server().RequestCurrentLocationL( aMessage ); + LOG ("CLocationManagerSession::StartLocationTrailL end"); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CancelLocationRequest() +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CancelLocationRequest( const RMessage2& aMessage ) + { + Server().CancelLocationRequest( iLocationHandle ); + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CancelTrackLogNotificationRequest() +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CancelTrackLogNotificationRequest( const RMessage2& aMessage ) + { + Server().CancelTrackLogNotificationRequest( iTrackLogNotificationHandle ); + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CreateLocationObjectL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CreateLocationObjectL( const RMessage2& aMessage ) + { + LOG( "CLocationManagerSession::CreateLocationObjectL begin" ); + const TInt KParamData = 0; + const TInt KParamId = 1; + + TLocationData locationData; + TUint objectId; + + TPckg locData( locationData ); + aMessage.ReadL( KParamData, locData ); + + TPckg objId( objectId); + aMessage.ReadL( KParamId, objId ); + + Server().CreateLocationObjectL( locationData, objectId ); + + aMessage.Complete( KErrNone ); + LOG( "CLocationManagerSession::CreateLocationObjectL end" ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::LocationSnapshotL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::LocationSnapshotL( const RMessage2& aMessage ) + { + LOG( "CLocationManagerSession::LocationSnapshotL begin" ); + const TInt KParamId = 0; + + TUint objectId; + + TPckg objId( objectId); + aMessage.ReadL( KParamId, objId ); + + Server().LocationSnapshotL( objectId ); + + aMessage.Complete( KErrNone ); + LOG( "CLocationManagerSession::LocationSnapshotL end" ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::RemoveLocationObjectL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::RemoveLocationObjectL( const RMessage2& aMessage ) + { + LOG( "CLocationManagerSession::RemoveLocationObjectL begin" ); + const TInt KParamId = 0; + TUint objectId; + TPckg locObjectId( objectId ); + aMessage.ReadL(KParamId, locObjectId); + Server().RemoveLocationObjectL(objectId); + aMessage.Complete( KErrNone ); + LOG( "CLocationManagerSession::RemoveLocationObjectL end" ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CopyLocationDataByIdL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CopyLocationDataByIdL( const RMessage2& aMessage ) + { + Server().InitCopyLocationByIdL( aMessage ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::CopyLocationDataByURIL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::CopyLocationDataByURIL( const RMessage2& aMessage ) + { + Server().InitCopyLocationByURIL( aMessage ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::StartTrackLog +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::StartTrackLogL( const RMessage2& aMessage ) + { + RLocationTrail::TTrailState state; + Server().GetLocationTrailState( state ); + + if ( state == RLocationTrail::ETrailStopped ) + { + Server().StartGPSPositioningL( RLocationTrail::ECaptureAll ); + } + + Server().StartTrackLogL(); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::StopTrackLog +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::StopTrackLogL( const RMessage2& aMessage ) + { + Server().StopTrackLogL(); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::GetStatus +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::GetTrackLogStatusL(const RMessage2& aMessage) + { + const TInt KParamRec = 0; + const TInt KParamQuality = 1; + TBool rec = EFalse; + TPositionSatelliteInfo fixQuality; + + Server().GetTrackLogStatus( rec, fixQuality ); + + TPckg wrapRec( rec ); + aMessage.WriteL( KParamRec, wrapRec ); + + TPckg wrapQuality( fixQuality ); + aMessage.WriteL( KParamQuality, wrapQuality ); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::DeleteTrackLog +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::DeleteTrackLogL(const RMessage2& aMessage) + { + const TInt KParamUri = 0; + const TInt KParamUriLength = aMessage.GetDesLength(KParamUri); + + TInt err = KErrNone; + if (KParamUriLength > 0) + { + // read TDesC& aURI from request + HBufC* uriBuf = HBufC::NewLC( KParamUriLength ); + TPtr ptrUri( uriBuf->Des() ); + aMessage.ReadL( KParamUri, ptrUri ); + + err = Server().DeleteTrackLogL( ptrUri ); + CleanupStack::PopAndDestroy( uriBuf ); + } + aMessage.Complete( err ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::IsTrackLogRecordingL +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::IsTrackLogRecordingL(const RMessage2& aMessage) + { + const TInt KParamRec = 0; + TBool rec = EFalse; + + Server().IsTrackLogRecording( rec ); + + TPckg wrapRec( rec ); + aMessage.WriteL(KParamRec, wrapRec); + + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::TrackLogName +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::TrackLogNameL(const RMessage2& aMessage) + { + const TInt KParamName = 0; + TFileName fileName; + TInt err; + + err = Server().TrackLogName( fileName ); + aMessage.WriteL(KParamName, fileName); + aMessage.Complete( err ); + } + +// -------------------------------------------------------------------------- +// CLocationManagerSession::GpsQualityChange +// -------------------------------------------------------------------------- +// +void CLocationManagerSession::RegisterTrackLogObserver( const RMessage2& aMessage ) + { + iTrackLogNotificationHandle = aMessage.Handle(); + TRAP_IGNORE( Server().AddTrackLogNotificationRequestL( aMessage ) ); + } + +void CLocationManagerSession::GetCaptureSettingL( const RMessage2& aMessage ) + { + TInt KParamCaptureSetting = 0; + RLocationTrail::TTrailCaptureSetting captureSetting = RLocationTrail::EOff; + + Server().GetCaptureSetting( captureSetting ); + + TPckg setting( captureSetting ); + aMessage.WriteL( KParamCaptureSetting, setting ); + aMessage.Complete( KErrNone ); + } + +// End of file