diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatemgr/sus/src/susmiscadaptation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatemgr/sus/src/susmiscadaptation.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,256 @@ +// Copyright (c) 2008-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 +#include +#include "susmiscadaptation.h" + +/** +@internalComponent +*/ + +void CMiscAdaptation::SubmitOrQueueL(const RMessage2 &aMessage) + { + + CAdaptationMessage *messageCopy = new(ELeave) CAdaptationMessage(aMessage); + + if(!IsActive()) + { + Submit(messageCopy); + } + else + { + CleanupStack::PushL(messageCopy); + DEBUGPRINT2A("CMiscAdaptationRequests queuing request with function id: %d", aMessage.Function()); + User::LeaveIfError(iPendingRequestsQueue.Queue(messageCopy)); + CleanupStack::Pop(messageCopy); + } + } + +void CMiscAdaptation::Submit(CAdaptationMessage*& aMessage) + { + DEBUGPRINT2A("CMiscAdaptationRequests immediate submission of request with function id: %d", aMessage->Function()); + iCurrentMessage = aMessage; + switch(aMessage->Function()) + { + case ESecurityStateChange : + { + TInt state = aMessage->Int0 ( ); + iMiscAdaptation.SecurityStateChange(state,iResponsePckg,iStatus); + break; + } + case EGetGlobalStartupMode : + { + iMiscAdaptation.GetGlobalStartupMode(iModePckg,iStatus); + break; + } + case EPrepareSimLanguages : + { + TSsmLanguageListPriority priority = (TSsmLanguageListPriority)aMessage->Int0(); + iMiscAdaptation.PrepareSimLanguages(priority,iSizePckg,iStatus); + break; + } + case EGetHiddenReset : + { + iMiscAdaptation.GetHiddenReset(iHiddenResetPckg, iStatus); + break; + } + default : + { + break; + } + } + SetActive(); + } + + +/** +CMiscAdaptation implements Miscellaneous Adaptation related functionality as part of +CSsmAdaptationServer.CSsmAdaptationServer loads Misc Adaptation plugin and creates +CMiscAdaptation using the NewL. From then the loaded Misc Adaptation plugin will be owned +by CMiscAdaptation. + +@internalComponent +*/ +CMiscAdaptation* CMiscAdaptation::NewL(MMiscAdaptation& aAdaptation) + { + CMiscAdaptation* self = new(ELeave) CMiscAdaptation(aAdaptation); + return self; + } + +CMiscAdaptation::~CMiscAdaptation() + { + iPendingRequestsQueue.NotifyAndRemoveAll(); + Cancel(); + iPendingRequestsQueue.Close(); + Release(); + } + +CMiscAdaptation::CMiscAdaptation(MMiscAdaptation& aAdaptation) :CActive(EPriorityStandard), +iMiscAdaptation(aAdaptation),iResponsePckg(0),iModePckg(0),iSizePckg(0),iListPckg(0) + { + CActiveScheduler::Add(this); + } + +void CMiscAdaptation::Release() + { + iMiscAdaptation.Release(); + } + +void CMiscAdaptation::DoSecurityStateChangeL(const RMessage2& aMessage) + { + SubmitOrQueueL(aMessage); + } + +void CMiscAdaptation::DoGetGlobalStartupModeL(const RMessage2& aMessage) + { + SubmitOrQueueL(aMessage); + } + +void CMiscAdaptation::DoPrepareSimLanguagesL(const RMessage2& aMessage) + { + SubmitOrQueueL(aMessage); + } + +void CMiscAdaptation::DoGetSimLanguagesArrayL(const RMessage2& aMessage) + { + const TInt simLanguageCount = aMessage.Int1(); + CBufFlat* const buf=CBufFlat::NewL(simLanguageCount * sizeof(TInt32)); + CleanupStack::PushL(buf); + + iMiscAdaptation.GetSimLanguagesL(buf, simLanguageCount); + + aMessage.WriteL(0, buf->Ptr(0)); + + CleanupStack::PopAndDestroy(buf); + } + +void CMiscAdaptation::DoMiscAdaptationCancelL(const RMessage2& aMessage) + { + if(iCurrentMessage != NULL) + { + if(aMessage.Session() == iCurrentMessage->Session()) + { + DEBUGPRINT1A("CMiscAdaptationRequests cancelling current request as requested"); + iMiscAdaptation.Cancel(); + } + iPendingRequestsQueue.RemoveFromQueueAndComplete(aMessage); + aMessage.Complete(KErrNone); + } + else + { + DEBUGPRINT1A("CMiscAdaptationRequests nothing to cancel, but cancel requested"); + aMessage.Complete(KErrNone); + } + } + +void CMiscAdaptation::DoMiscAdaptationHiddenResetL(const RMessage2& aMessage) + { + SubmitOrQueueL(aMessage); + } + +// from CActive +void CMiscAdaptation::RunL() + { + + DEBUGPRINT2A("CMiscAdaptation processed the request with funtion id: %d", iCurrentMessage->Function()); + WriteResponseDataToClientMessageL(); + iCurrentMessage->Complete(iStatus.Int()); + delete iCurrentMessage; + iCurrentMessage = NULL; + + if( (iPendingRequestsQueue.IsEmpty()) == EFalse ) + { + CAdaptationMessage *messageCopy = NULL; + iPendingRequestsQueue.Dequeue(messageCopy); + Submit(messageCopy); + } + } + + + +void CMiscAdaptation::WriteResponseDataToClientMessageL() + { + switch(iCurrentMessage->Function()) + { + case ESecurityStateChange: + { + iCurrentMessage->WriteL(1,iResponsePckg); + break; + } + case EGetGlobalStartupMode: + { + iCurrentMessage->WriteL(0,iModePckg); + break; + } + case EPrepareSimLanguages: + { + iCurrentMessage->WriteL(1,iSizePckg); + break; + } + case EGetHiddenReset : + { + iCurrentMessage->WriteL(0,iHiddenResetPckg); + } + default: + { + break; + } + } + } + + +TInt CMiscAdaptation::RunError( TInt aError) + { + + if(iCurrentMessage != NULL) + { + iCurrentMessage->Complete(aError); + delete iCurrentMessage; + iCurrentMessage = NULL; + } + + while( (iPendingRequestsQueue.IsEmpty()) == EFalse ) + { + iPendingRequestsQueue.Dequeue(iCurrentMessage); + iCurrentMessage->Complete(aError); + delete iCurrentMessage; + iCurrentMessage = NULL; + } + + return KErrNone; + + } + +void CMiscAdaptation::DoCancel() + { + if(iCurrentMessage != NULL) + { + iCurrentMessage->Complete(KErrCancel); + delete iCurrentMessage; + iCurrentMessage = NULL; + } + + while( (iPendingRequestsQueue.IsEmpty()) == EFalse ) + { + iPendingRequestsQueue.Dequeue(iCurrentMessage); + iCurrentMessage->Complete(KErrCancel); + delete iCurrentMessage; + iCurrentMessage = NULL; + } + } + +