cryptomgmtlibs/cryptotokenfw/source/ctframework/CRefSecurityDialog.h
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptomgmtlibs/cryptotokenfw/source/ctframework/CRefSecurityDialog.h	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* CRefSecurityDialog class implementation
+*
+*/
+
+
+
+
+/**
+ @file 
+ @internalTechnology
+*/
+ 
+#ifndef __CREFSECURITYDIALOG_H__
+#define __CREFSECURITYDIALOG_H__
+
+#include "secdlgimpldefs.h"
+
+class CDialogRequester;
+
+/**
+ * Reference implementation of the MSecurityDialog API. It wraps the arguments into
+ * a form suitable for use with the RNotifier dialog framework.
+ */
+NONSHARABLE_CLASS(CRefSecurityDialog) : public CBase, public MSecurityDialog 
+	{
+public:
+	 ~CRefSecurityDialog();
+	 static CRefSecurityDialog* NewL();
+
+public: // from MSecurityDialog
+     void ServerAuthenticationFailure(const TDesC8& aServerName,const TValidationError& aFailureReason,const TDesC8& aEncodedCert,TRequestStatus& aStatus );
+	 void Release();
+	 void EnterPIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue,
+						   TRequestStatus& aStatus );
+	 void EnablePIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue,
+							TRequestStatus& aStatus );
+	 void DisablePIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue,
+							 TRequestStatus& aStatus );
+	 void ChangePIN( const TPINParams& aPINParams, TBool aRetry,
+							TPINValue& aOldPINValue, TPINValue& aNewPINValue,
+							TRequestStatus& aStatus );
+	 void UnblockPIN( const TPINParams& aBlockedPINParams,
+							 const TPINParams& aUnblockingPINParams, TBool aRetry,
+							 TPINValue& aUnblockingPINValue, TPINValue& aNewPINValue,
+							 TRequestStatus& aStatus );
+	 void UnblockPINInClear( const TPINParams& aBlockedPINParams,
+							 const TPINParams& aUnblockingPINParams, TBool aRetry,
+							 TUnblockPINValue& aUnblockingPINValue, TPINValue& aNewPINValue,
+							 TRequestStatus& aStatus );
+	 void Cancel();
+	 void PINBlocked( const TPINParams& aPINParams, TRequestStatus& aStatus );
+	 void TotalBlocked( const TPINParams& aPINParams, TRequestStatus& aStatus );
+	 void EstablishSecureConnection( const TDesC8& aCertData,
+						const RArray<TCTTokenObjectHandle>& aCertHandleList,
+						MSecurityDialog::TConnectionType aConnectionType,
+						TBool& aDoClientAuthentication, TCTTokenObjectHandle& aCertId,
+						TRequestStatus& aStatus );
+	 void SignText( const TDesC& aText,
+							const RArray<TCTTokenObjectHandle>& aCertIdList,
+							TCTTokenObjectHandle& aCertId,
+							TRequestStatus& aStatus );
+
+	void HandleResponse( TInt aResult );
+
+private:
+	void ConstructL();
+	void DoBasicPINOperation( TSecurityDialogOperation aOperation,
+								const TPINParams& aPINParams, TBool aRetry, TDes8& aPINValue,
+								TRequestStatus& aStatus );
+	void InitClientStatus( TRequestStatus& aStatus );
+
+private:
+	CDialogRequester* iRequester;
+	TSecurityDialogOperation iCurrentOperation;
+	TRequestStatus* iClientStatus;
+	TPINValue* iClientPINValuePtr;
+	TUnblockPINValue* iClientUnblockPINValuePtr;
+	TPINValue* iClientSecondPINValuePtr;
+	TPINValueBuf iPINValueBuf;
+	TTwoPINOutputBuf iTwoPINOutputBuf;
+	TUnblockPINInClearOutputBuf iUnblockPINInClearOutputBuf;
+	TSignInputBuf iSignInputBuf;
+	TPtrC8 iVariableDataPtr;
+	TCTTokenObjectHandle* iClientCertInfoHandlePtr;
+	TBool* iClientDoClientAuthenticationPtr;
+	TCTTokenObjectHandleBuf iCertInfoHandleBuf;
+	TUnblockPINInputBuf iUnblockPINInputBuf;
+	TPINInputBuf iPINInputBuf;
+	TServerAuthenticationFailureOutputBuf iServerAuthenticationOutputBuf;
+	};
+
+/**
+ * An AO used to call the notifier, which allows packaging and unpackaging of the
+ * arguments and return values for the client.
+ */
+NONSHARABLE_CLASS(CDialogRequester) : public CActive
+	{
+private:
+	enum TState { KFillingVariableInputBuffer, KMakingRequest };
+
+public:
+	static CDialogRequester* NewL( CRefSecurityDialog& aSecDialog );
+	~CDialogRequester();
+	void RequestDialog( const TDesC8& aData, TDes8& aResponse );
+	void RequestVariableBufferDialog( const TDesC8& aOperationData,
+										const TDesC8& aVariableData,
+										const RArray<TCTTokenObjectHandle>& aCertHandleList,
+										TDes8& aResponse );
+
+	void RequestDialog(HBufC8* iInputBuffer, TDes8& aResponse);
+
+private:
+	CDialogRequester( CRefSecurityDialog& aSecDialog );
+	void ConstructL();
+
+private: // from CActive
+	void RunL();
+	void DoCancel();
+	TInt RunError( TInt aError );
+
+private:
+	TState iState;
+	RNotifier iNotifier;
+	CRefSecurityDialog& iSecDialog;
+	const TDesC8* iOperationDataPtr;
+	const TDesC8* iVariableDataPtr;
+	const RArray<TCTTokenObjectHandle>* iCertHandleListPtr;
+	HBufC8* iInputBuffer;
+	TDes8* iResponsePtr;
+	};
+
+#endif