diff -r 000000000000 -r 8e480a14352b messagingfw/msgsrvnstore/server/src/MSVOPERT.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/server/src/MSVOPERT.CPP Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,278 @@ +// Copyright (c) 1998-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: +// + + +#include + +#include "MSVSTD.H" + +#include "MTSR.H" +#include "MSVENTRY.H" +#include "MSVSERV.H" +#include "MSVROPS.H" +#include "MSVPANIC.H" + + +//********************************** +// CMsvServerOperation +//********************************** + +CMsvServerOperation::CMsvServerOperation(const RMessage2& aMessage, TMsvOp aId, TUid aMtmUid, TMsvId aServiceId, TInt aSessionId) +: CActive(EPriorityStandard), iMessage(aMessage), iId(aId), iMtmUid(aMtmUid), iServiceId(aServiceId), iSessionId(aSessionId), iState(EMsvOperationNull) +// +// +// + { + __DECLARE_NAME(_S("CMsvServerOperation")); + } + + +CMsvServerOperation::~CMsvServerOperation() +// +// +// + { + } + +/** +This method should be overridden by SystemProgress() in other server MTMs to populate the +TMsvSystemProgress structure. +@param aOutSysProg The TMsvSystemProgress structure to be populated by the server +@return KErrExtensionNotSupported +*/ +TInt CMsvServerOperation::SystemProgress(TMsvSystemProgress& /*aSysProgress*/) + { + return KErrExtensionNotSupported; + } + +//********************************** +// CMsvMtmOperation +//********************************** + +CMsvMtmOperation* CMsvMtmOperation::NewL(const RMessage2& aMessage, TMsvOp aId, TUid aMtmUid, TMsvId aServiceId, TInt aSessionId, MMsvOperationObserver& aOpObserver) +// +// +// + { + CMsvMtmOperation* self = new(ELeave) CMsvMtmOperation(aMessage, aId, aMtmUid, aServiceId, aSessionId, aOpObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + + +CMsvMtmOperation::CMsvMtmOperation(const RMessage2& aMessage, TMsvOp aId, TUid aMtmUid, TMsvId aServiceId, TInt aSessionId, MMsvOperationObserver& aOpObserver) +: CMsvServerOperation(aMessage, aId, aMtmUid, aServiceId, aSessionId), iOpType(EMtmOpNone), iOpObserver(aOpObserver) +// +// +// + { + __DECLARE_NAME(_S("CMsvMtmOperation")); + } + + +void CMsvMtmOperation::ConstructL() +// +// +// + { + CActiveScheduler::Add(this); + } + + +void CMsvMtmOperation::Start(CBaseServerMtm& aServerMtm, TBool aCapabilityCheck) +// +// +// + { + iServerMtm = &aServerMtm; + TRAPD(leave, DoStartL(aCapabilityCheck)); + if (leave) + { + iStatus=KRequestPending; + TRequestStatus* st = &iStatus; + User::RequestComplete(st, leave); + } + SetActive(); + } + + +void CMsvMtmOperation::Failed(TInt aError) +// +// +// + { + iMessage.Complete(aError); + SetState(EMsvOperationFailed); + } + + +void CMsvMtmOperation::DoStartL(TBool aCapabilityCheck) +// +// +// + { +#if (defined SYMBIAN_USER_PROMPT_SERVICE) + iServerMtm->ClientThreadInfo(iThreadId, aCapabilityCheck); +#else + // For versions which don't support SYMBIAN_USER_PROMPT_SERVICE, + // this is needed to stop compiler warnings . + aCapabilityCheck = aCapabilityCheck; +#endif + switch (iOpType) + { + case EMtmOpCopyFromLocal: + iServerMtm->CopyFromLocalL(*iSelection, iIntParam, iStatus); + break; + case EMtmOpCopyToLocal: + iServerMtm->CopyToLocalL(*iSelection, iIntParam, iStatus); + break; + case EMtmOpCopyWithinService: + iServerMtm->CopyWithinServiceL(*iSelection, iIntParam, iStatus); + break; + case EMtmOpMoveFromLocal: + iServerMtm->MoveFromLocalL(*iSelection, iIntParam, iStatus); + break; + case EMtmOpMoveToLocal: + iServerMtm->MoveToLocalL(*iSelection, iIntParam, iStatus); + break; + case EMtmOpMoveWithinService: + iServerMtm->MoveWithinServiceL(*iSelection, iIntParam, iStatus); + break; + case EMtmOpDeleteAll: + iServerMtm->DeleteAllL(*iSelection, iStatus); + break; + case EMtmOpCreate: + iServerMtm->CreateL(*iEntry, iStatus); + break; + case EMtmOpChange: + iServerMtm->ChangeL(*iEntry, iStatus); + break; + case EMtmOpCommand: + iServerMtm->StartCommandL(*iSelection, iIntParam, *iDesParam, iStatus); + break; + default: + PanicServer(EMsvUnknownMtmOpType); + break; + } + } + +CMsvMtmOperation::~CMsvMtmOperation() +// +// +// + { + Cancel(); + + + switch (State()) + { + case EMsvOperationQueued: + __ASSERT_DEBUG(iServerMtm==NULL, PanicServer(EMsvDeletingMtmOperation1)); + iMessage.Complete(KErrCancel); + iOpObserver.OperationCancelled(*this); + break; + case EMsvOperationCompleted: + __ASSERT_DEBUG(iServerMtm, PanicServer(EMsvDeletingMtmOperation2)); + iOpObserver.OperationCompleted(ServiceId(), Id()); + break; + default: + __ASSERT_DEBUG(State()!=EMsvOperationRunning, PanicServer(EMsvDeletingMtmOperation3)); + break; + } + + delete iEntry; + delete iSelection; + delete iBuf1; + delete iBuf2; + delete iDesParam; + } + + +void CMsvMtmOperation::DoCancel() +// +// +// + { + __ASSERT_DEBUG(State()==EMsvOperationRunning, PanicServer(EMsvCancellingNonRunningOp)); + iServerMtm->Cancel(); + // inform client of the cancellation (or completion) + iMessage.Complete(iStatus.Int()); + SetState(EMsvOperationCompleted); + } + + +void CMsvMtmOperation::RunL() +// +// +// + { + __ASSERT_DEBUG(State()==EMsvOperationRunning, PanicServer(EMsvCompletedNonRunningOp)); + // inform client of the completion + iMessage.Complete(iStatus.Int()); + SetState(EMsvOperationCompleted); + } + + +const TDesC8& CMsvMtmOperation::Progress() +// +// +// + { + __ASSERT_DEBUG(iServerMtm, PanicServer(EMsvProgressOnQueuedOp)); + return iServerMtm->Progress(); + } + +/** +Call one of the server MTMs to populate the TMsvSystemProgress structure. +@param aOutSysProg The TMsvSystemProgress structure to be populated by the server +@return error if SystemProgress method fails +*/ +TInt CMsvMtmOperation::SystemProgress(TMsvSystemProgress& aSysProgress) +// +// +// + { + __ASSERT_DEBUG(iServerMtm, PanicServer(EMsvSystemProgressOnQueuedOp)); + return iServerMtm->SystemProgress(aSysProgress); + } + +void CMsvMtmOperation::StoreParametersL(TMtmOpType aOpType, const TMsvEntry& aNewEntry) +// +// +// + { + iOpType = aOpType; + iEntry = new (ELeave) TMsvEntry(aNewEntry); + iBuf1 = HBufC::NewL(iEntry->iDescription.Length()); + iBuf1->Des() = iEntry->iDescription; + iEntry->iDescription.Set(iBuf1->Des()); + iBuf2 = HBufC::NewL(iEntry->iDetails.Length()); + iBuf2->Des() = iEntry->iDetails; + iEntry->iDetails.Set(iBuf2->Des()); + } + +void CMsvMtmOperation::StoreParameters(TMtmOpType aOpType, CMsvEntrySelection* aSelection, TInt aIntParam, HBufC8* aDesParam) +// +// +// + { + iOpType = aOpType; + iSelection = aSelection; + iIntParam = aIntParam; + iDesParam = aDesParam; + } +