pkiutilities/CTSecurityDialogs/ClientSrc/CTsecuritydialogrequestor.cpp
changeset 0 164170e6151a
--- /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