diff -r 000000000000 -r 667063e416a2 locationmapnavfw/library/src/mngeocodingservicebase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationmapnavfw/library/src/mngeocodingservicebase.cpp Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,207 @@ +/* +* Copyright (c) 2005-2006 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: CMnGeocodingServiceBase class implementation +* +*/ + + +#include + +#include +#include + +#include "mndebug.h" +#include "mnerrors.h" +#include "mninternal.h" +#include "mninternal.inl" + +#include "mngeocodingservicebase.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CMnGeocodingServiceBase::CMnGeocodingServiceBase() + { + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CMnGeocodingServiceBase::~CMnGeocodingServiceBase() + { + delete iResult; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C void CMnGeocodingServiceBase::BaseConstructL() + { + CMnServiceBase::BaseConstructL(); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CMnGeocoder::TOptions CMnGeocodingServiceBase::Options() const + { + LOG("CMnGeocodingServiceBase::Options"); + return iOptions; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C void CMnGeocodingServiceBase::CompleteGeocodingRequestL( + const CPosLandmark& aLandmark ) + { + LOG("CMnGeocodingServiceBase::CompleteGeocodingRequestL in"); + switch ( CurrentAsyncRequest() ) + { + case EMnIpcCoordToAddress: + iResultType = EMnGeoResultAddress; + break; + + case EMnIpcAddressToCoord: + case EMnIpcPlainAddressToCoord: + iResultType = EMnGeoResultCoordinates; + break; + + default: + PanicServer( KMnPanicAttemptToCompleteNoRequest ); + } + + delete iResult; + iResult = NULL; + iResult = PosLandmarkSerialization::PackL( aLandmark ); + + TInt resultSize = iResult->Size(); + TPckg resultSizePack( resultSize ); + TInt err = iMessage.Write( EMnIpcGeoResultSizeParamIndex, resultSizePack ); + CompleteRequest( err ); + + LOG("CMnGeocodingServiceBase::CompleteGeocodingRequestL out"); + } + +// --------------------------------------------------------------------------- +// From class CAknAppServiceBase +// --------------------------------------------------------------------------- +// +EXPORT_C void CMnGeocodingServiceBase::ServiceL( const RMessage2& aMessage ) + { + LOG1("CMnGeocodingServiceBase::ServiceL in, function %d", aMessage.Function()); + + switch ( aMessage.Function() ) + { + case EMnIpcCoordToAddress: + case EMnIpcAddressToCoord: + case EMnIpcPlainAddressToCoord: + PrepareAsyncRequestL( aMessage ); + StartAsyncRequestL( aMessage ); + break; + + case EMnIpcGetConversionResult: + HandleGetConversionResultL( aMessage ); + break; + + case EMnIpcCancel: + HandleCancelRequestL( aMessage ); + break; + + default: + CMnServiceBase::ServiceL( aMessage ); + } + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CMnGeocodingServiceBase::StartAsyncRequestL( const RMessage2& aMessage ) + { + LOG("CMnGeocodingServiceBase::StartAsyncRequestL in"); + + HBufC* addr = NULL; + CPosLandmark* lm = NULL; + + UnpackOptionsL( aMessage ); + + switch ( CurrentAsyncRequest() ) + { + case EMnIpcCoordToAddress: + lm = UnpackLandmarkLC( aMessage, EMnIpcGeoLandmarkParamIndex ); + HandleFindAddressByCoordinateL( *lm ); + CleanupStack::PopAndDestroy( lm ); + break; + + case EMnIpcAddressToCoord: + lm = UnpackLandmarkLC( aMessage, EMnIpcGeoLandmarkParamIndex ); + HandleFindCoordinateByAddressL( *lm ); + CleanupStack::PopAndDestroy( lm ); + break; + + case EMnIpcPlainAddressToCoord: + addr = UnpackPlainAddressLC( aMessage ); + HandleFindCoordinateByAddressL( addr->Des() ); + CleanupStack::PopAndDestroy( addr ); + break; + + default: + User::Leave( KErrNotSupported ); + } + + LOG("CMnGeocodingServiceBase::StartAsyncRequestL out"); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CMnGeocodingServiceBase::UnpackOptionsL( const RMessage2& aMessage ) + { + LOG("CMnGeocodingServiceBase::UnpackOptionsL"); + + TPckg optsPack( iOptions ); + aMessage.ReadL( EMnIpcGeoOptionsParamIndex, optsPack ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +HBufC* CMnGeocodingServiceBase::UnpackPlainAddressLC( const RMessage2& aMessage ) + { + LOG("CMnGeocodingServiceBase::UnpackPlainAddressLC"); + return CopyClientBufferLC( aMessage, EMnIpcGeoPlainAddressParamIndex ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CMnGeocodingServiceBase::HandleGetConversionResultL( const RMessage2& aMessage ) + { + LOG("CMnGeocodingServiceBase::HandleGetConversionResultL in"); + + if ( !iResult ) + { + User::Leave( KErrNotFound ); + } + + aMessage.WriteL( EMnIpcGeoResultParamIndex, *iResult ); + TPckg typePack( iResultType ); + aMessage.WriteL( EMnIpcGeoResultTypeParamIndex, typePack ); + + Complete( aMessage, KErrNone ); + + LOG("CMnGeocodingServiceBase::HandleGetConversionResultL out"); + }