diff -r 000000000000 -r 164170e6151a pkiutilities/CTSecurityDialogs/ClientSrc/CTsecuritydialogrequestor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/CTSecurityDialogs/ClientSrc/CTsecuritydialogrequestor.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,162 @@ +/* +* Copyright (c) 2003 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: Definition of dialog requester +* +*/ + + +// INCLUDE FILES +#include "CTSecurityDialogRequestor.h" +#include "CTSecurityDialogDefs.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::CCTSecurityDialogs() +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCTSecurityDialogRequestor::CCTSecurityDialogRequestor(MSecurityDialogResponse& aSecurityDialogs): + CActive(EPriorityStandard), + iSecurityDialogs(aSecurityDialogs) +{ +} + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::~CCTSecurityDialogs() +// ----------------------------------------------------------------------------- +// +CCTSecurityDialogRequestor::~CCTSecurityDialogRequestor() +{ + Cancel(); + iNotifier.Close(); +} + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CCTSecurityDialogRequestor* CCTSecurityDialogRequestor::NewL(MSecurityDialogResponse& aSecurityDialogs) +{ + CCTSecurityDialogRequestor* self = new (ELeave) CCTSecurityDialogRequestor(aSecurityDialogs); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; +} + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCTSecurityDialogRequestor::ConstructL() +{ + User::LeaveIfError(iNotifier.Connect()); + CActiveScheduler::Add(this); +} + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::RequestDialog() +// ----------------------------------------------------------------------------- +// +void CCTSecurityDialogRequestor::RequestDialog(const TDesC8& aData, TDes8& aResponse) + { + iNotifier.StartNotifierAndGetResponse(iStatus, KUidSecurityDialogNotifier, aData, aResponse); + iState = EMakingRequest; + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::RequestVariableBufferDialog() +// ----------------------------------------------------------------------------- +// +void CCTSecurityDialogRequestor::RequestVariableBufferDialog( const TDesC8& aOperationData, + const TDesC8& aVariableData, + const RArray& aCertHandleList, + TDes8& aResponse ) + { + iOperationDataPtr = &aOperationData; + iVariableDataPtr = &aVariableData; + iCertHandleListPtr = &aCertHandleList; + iResponsePtr = &aResponse; + iState = EFillingVariableInputBuffer; + SetActive(); + // Complete the AO immediately so that buffer processing can occur in RunL(). + TRequestStatus* statusPtr = &iStatus; + User::RequestComplete( statusPtr, KErrNone ); + } + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::DoCancel() +// ----------------------------------------------------------------------------- +// +void CCTSecurityDialogRequestor::DoCancel() + { + iNotifier.CancelNotifier(KUidSecurityDialogNotifier); + } + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::RunL() +// ----------------------------------------------------------------------------- +// +void CCTSecurityDialogRequestor::RunL() + { + switch ( iState ) + { + case EFillingVariableInputBuffer: + { + TInt operationDataSize = iOperationDataPtr->Size(); + TInt variableDataSize = iVariableDataPtr->Size(); + TInt arraySize = sizeof( TCTTokenObjectHandle ) * iCertHandleListPtr->Count(); + TInt bufferSize = operationDataSize + variableDataSize + arraySize; + iInputBuffer = HBufC8::NewL( bufferSize ); + TPtr8 inputBufferPtr( iInputBuffer->Des() ); + inputBufferPtr.Append( *iOperationDataPtr ); + for ( TInt h = 0, total = iCertHandleListPtr->Count(); h < total; ++h ) + { + const TCTTokenObjectHandle& certHandle = (*iCertHandleListPtr)[h]; + TPckgC certHandleBuf( certHandle ); + inputBufferPtr.Append( certHandleBuf ); + } + inputBufferPtr.Append( *iVariableDataPtr ); + RequestDialog( *iInputBuffer, *iResponsePtr ); + break; + } + case EMakingRequest: + { + delete iInputBuffer; + iInputBuffer = NULL; + iSecurityDialogs.HandleResponse(iStatus.Int()); + break; + } + default: + __ASSERT_DEBUG( EFalse, _L( "Invalid state" ) ); + } + } + +// ----------------------------------------------------------------------------- +// CCTSecurityDialogs::RunError() +// ----------------------------------------------------------------------------- +// +TInt CCTSecurityDialogRequestor::RunError(TInt aError) +{ + iSecurityDialogs.HandleResponse(aError); + return KErrNone; +} + +// End of File