diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/ServerApplication/src/CPbk2AppService.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2AppService.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,393 @@ +/* +* Copyright (c) 2005-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: Phonebook 2 application server service class. +* +*/ + + +#include "CPbk2AppService.h" + +// Phonebook 2 +#include "CPbk2AssignService.h" +#include "CPbk2FetchService.h" +#include + +// Debug +#include + +// -------------------------------------------------------------------------- +// CPbk2AppService::CPbk2AppService +// -------------------------------------------------------------------------- +// +CPbk2AppService::CPbk2AppService() + { + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING + ("CPbk2AppService::CPbk2AppService()") ); + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::~CPbk2AppService +// -------------------------------------------------------------------------- +// +CPbk2AppService::~CPbk2AppService() + { + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING + ("CPbk2AppService::~CPbk2AppService()") ); + if ( !iAcceptMsg.IsNull() ) + { + iAcceptMsg.Complete( KErrServerTerminated ); + } + + if ( !iExitMsg.IsNull() ) + { + iExitMsg.Complete( KErrServerTerminated ); + } + + delete iFetchService; + delete iAssignService; + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::NewL +// -------------------------------------------------------------------------- +// +CPbk2AppService* CPbk2AppService::NewL() + { + CPbk2AppService* self = new ( ELeave ) CPbk2AppService; + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::ServiceL +// -------------------------------------------------------------------------- +// +void CPbk2AppService::ServiceL( const RMessage2& aMessage ) + { + TInt functionId = aMessage.Function(); + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING + ("CPbk2AppService::ServiceL(%d)"), functionId ); + switch ( functionId ) + { + case EPbk2LaunchFetch: + { + // Launch fetch service + delete iFetchService; + iFetchService = NULL; + iFetchService = CPbk2FetchService::NewL( iExitMsg, iAcceptMsg ); + iFetchService->LaunchServiceL( aMessage ); + break; + } + + case EPbk2CancelFetch: + { + // Synchronous service + // Cancel fetch service + if ( iFetchService ) + { + iFetchService->CancelService( aMessage ); + } + // Complete message if it is not completed by service + if ( !aMessage.IsNull() ) + { + aMessage.Complete( KErrNone ); + } + break; + } + + case EPbk2LaunchAssign: // FALLTHROUGH + case EPbk2LaunchAttributeAssign: // FALLTHROUGH + case EPbk2LaunchAttributeUnassign: + { + // Launch assign contact service + delete iAssignService; + iAssignService = NULL; + iAssignService = CPbk2AssignService::NewL( iExitMsg ); + iAssignService->LaunchServiceL( aMessage ); + break; + } + + case EPbk2CancelAssign: + { + // Synchronous service + // Cancel assign service + if ( iAssignService ) + { + iAssignService->CancelService( aMessage ); + } + // Complete message if it is not completed by service + if ( !aMessage.IsNull() ) + { + aMessage.Complete( KErrNone ); + } + break; + } + + case EPbk2GetResults: + { + // Synchronous service + if ( iFetchService ) + { + iFetchService->GetResultsL( aMessage ); + } + if ( iAssignService ) + { + iAssignService->GetResultsL( aMessage ); + } + // Complete message if it is not completed by service + if ( !aMessage.IsNull() ) + { + aMessage.Complete( KErrNone ); + } + break; + } + + case EPbk2GetResultSize: + { + // Synchronous service + if ( iFetchService ) + { + iFetchService->GetResultSizeL( aMessage ); + } + if ( iAssignService ) + { + iAssignService->GetResultSizeL( aMessage ); + } + // Complete message if it is not completed by service + if ( !aMessage.IsNull() ) + { + aMessage.Complete( KErrNone ); + } + break; + } + + case EPbk2ExitRequest: + { + StoreExitRequest( aMessage ); + break; + } + + case EPbk2CancelExitRequest: + { + CancelExitRequest( aMessage ); + break; + } + + case EPbk2AcceptRequest: + { + StoreAcceptRequest( aMessage ); + break; + } + + case EPbk2CancelAcceptRequest: + { + CancelAcceptRequest( aMessage ); + break; + } + + case EPbk2ExitService: + { + // Synchronous service + // After the client has received a completion + // to EPbk2ExitRequest, it must send this + // message to fulfill the protocol + if ( iFetchService ) + { + iFetchService->TryExitServiceL( aMessage ); + } + if ( iAssignService ) + { + iAssignService->TryExitServiceL( aMessage ); + } + // Complete message if it is not completed by service + if ( !aMessage.IsNull() ) + { + aMessage.Complete( KErrNone ); + } + break; + } + + case EPbk2AcceptService: + { + // Synchronous service + // After the client has received a completion + // to EPbk2AcceptRequest, it must send this + // message to fulfill the protocol + if ( iFetchService ) + { + iFetchService->TryAcceptServiceL( aMessage ); + } + if ( iAssignService ) + { + iAssignService->TryAcceptServiceL( aMessage ); + } + // Complete message if it is not completed by service + if ( !aMessage.IsNull() ) + { + aMessage.Complete( KErrNone ); + } + break; + } + + default: + { + // Message not recognized, pass it to base class + CAknAppServiceBase::ServiceL( aMessage ); + break; + } + } + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::SecurityCheckL +// Security check performed when client sends a message requesting a service. +// -------------------------------------------------------------------------- +// +CPolicyServer::TCustomResult CPbk2AppService::SecurityCheckL + ( const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing ) + { + CPolicyServer::TCustomResult res = CPolicyServer::EFail; + aAction = CPolicyServer::EPanicClient; + + TInt functionId = aMsg.Function(); + + switch ( functionId ) + { + case EPbk2LaunchFetch: + case EPbk2CancelFetch: // FALLTHROUGH + { + // Fetch needs ReadUserData capability + if ( aMsg.HasCapability( ECapabilityReadUserData ) ) + { + res = CPolicyServer::EPass; + } + break; + } + + case EPbk2LaunchAssign: // FALLTHROUGH + case EPbk2CancelAssign: // FALLTHROUGH + case EPbk2LaunchAttributeAssign: // FALLTHROUGH + case EPbk2LaunchAttributeUnassign: + { + // Assign needs ReadUserData and WriteUserData capabilities + if ( aMsg.HasCapability( ECapabilityReadUserData ) && + aMsg.HasCapability( ECapabilityWriteUserData ) ) + { + res = CPolicyServer::EPass; + } + break; + } + + case EPbk2GetResults: // FALLTHROUGH + case EPbk2GetResultSize: + { + // Result fetching needs ReadUserData capability + if ( aMsg.HasCapability( ECapabilityReadUserData ) ) + { + res = CPolicyServer::EPass; + } + break; + } + + case EPbk2AcceptService: // FALLTHROUGH + case EPbk2AcceptRequest: + { + // Accepting needs ReadUserData capability + if ( aMsg.HasCapability( ECapabilityReadUserData ) ) + { + res = CPolicyServer::EPass; + } + break; + } + + case EPbk2ExitService: // FALLTHROUGH + case EPbk2ExitRequest: // FALLTHROUGH + case EPbk2CancelExitRequest: // FALLTHROUGH + case EPbk2CancelAcceptRequest: + { + // No capabilities required + res = CPolicyServer::EPass; + break; + } + + default: + { + // Call base class + res = CAknAppServiceBase::SecurityCheckL + ( aMsg, aAction, aMissing ); + break; + } + } + + return res; + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::StoreExitRequest +// -------------------------------------------------------------------------- +// +void CPbk2AppService::StoreExitRequest( const RMessage2& aMessage ) + { + if ( iExitMsg.Handle() != KNullHandle ) + { + aMessage.Complete( KErrAlreadyExists ); + } + else + { + iExitMsg = aMessage; + } + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::CancelExitRequest +// -------------------------------------------------------------------------- +// +void CPbk2AppService::CancelExitRequest( const RMessage2& aMessage ) + { + if ( iExitMsg.Handle() != KNullHandle ) + { + iExitMsg.Complete( KErrCancel ); + } + aMessage.Complete( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::StoreAcceptRequest +// -------------------------------------------------------------------------- +// +void CPbk2AppService::StoreAcceptRequest( const RMessage2& aMessage ) + { + if ( iAcceptMsg.Handle() != KNullHandle ) + { + aMessage.Complete( KErrAlreadyExists ); + } + else + { + iAcceptMsg = aMessage; + } + } + +// -------------------------------------------------------------------------- +// CPbk2AppService::CancelAcceptRequest +// -------------------------------------------------------------------------- +// +void CPbk2AppService::CancelAcceptRequest( const RMessage2& aMessage ) + { + if ( iAcceptMsg.Handle() != KNullHandle ) + { + iAcceptMsg.Complete( KErrCancel ); + } + aMessage.Complete( KErrNone ); + } + +// End of File