--- /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 <secdlgimpldefs.h>
+
+// ============================ 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<TCTTokenObjectHandle>& 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<TCTTokenObjectHandle> 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