sl@0: /* sl@0: * Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * CRefSecurityDialog class implementation sl@0: * sl@0: */ sl@0: sl@0: sl@0: /** sl@0: @file sl@0: @internalTechnology sl@0: */ sl@0: sl@0: #ifndef __CREFSECURITYDIALOG_H__ sl@0: #define __CREFSECURITYDIALOG_H__ sl@0: sl@0: #include "secdlgImplDefs.h" sl@0: sl@0: class CDialogRequester; sl@0: sl@0: /** sl@0: * Reference implementation of the MSecurityDialog API. It wraps the arguments into sl@0: * a form suitable for use with the RNotifier dialog framework. sl@0: */ sl@0: NONSHARABLE_CLASS(CRefSecurityDialog) : public CBase, public MSecurityDialog sl@0: { sl@0: public: sl@0: ~CRefSecurityDialog(); sl@0: static CRefSecurityDialog* NewL(); sl@0: sl@0: public: // from MSecurityDialog sl@0: void ServerAuthenticationFailure(const TDesC8& aServerName,const TValidationError& aFailureReason,const TDesC8& aEncodedCert,TRequestStatus& aStatus ); sl@0: void Release(); sl@0: void EnterPIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue, sl@0: TRequestStatus& aStatus ); sl@0: void EnablePIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue, sl@0: TRequestStatus& aStatus ); sl@0: void DisablePIN( const TPINParams& aPINParams, TBool aRetry, TPINValue& aPINValue, sl@0: TRequestStatus& aStatus ); sl@0: void ChangePIN( const TPINParams& aPINParams, TBool aRetry, sl@0: TPINValue& aOldPINValue, TPINValue& aNewPINValue, sl@0: TRequestStatus& aStatus ); sl@0: void UnblockPIN( const TPINParams& aBlockedPINParams, sl@0: const TPINParams& aUnblockingPINParams, TBool aRetry, sl@0: TPINValue& aUnblockingPINValue, TPINValue& aNewPINValue, sl@0: TRequestStatus& aStatus ); sl@0: void UnblockPINInClear( const TPINParams& aBlockedPINParams, sl@0: const TPINParams& aUnblockingPINParams, TBool aRetry, sl@0: TUnblockPINValue& aUnblockingPINValue, TPINValue& aNewPINValue, sl@0: TRequestStatus& aStatus ); sl@0: void Cancel(); sl@0: void PINBlocked( const TPINParams& aPINParams, TRequestStatus& aStatus ); sl@0: void TotalBlocked( const TPINParams& aPINParams, TRequestStatus& aStatus ); sl@0: void EstablishSecureConnection( const TDesC8& aCertData, sl@0: const RArray& aCertHandleList, sl@0: MSecurityDialog::TConnectionType aConnectionType, sl@0: TBool& aDoClientAuthentication, TCTTokenObjectHandle& aCertId, sl@0: TRequestStatus& aStatus ); sl@0: void SignText( const TDesC& aText, sl@0: const RArray& aCertIdList, sl@0: TCTTokenObjectHandle& aCertId, sl@0: TRequestStatus& aStatus ); sl@0: sl@0: void HandleResponse( TInt aResult ); sl@0: sl@0: private: sl@0: void ConstructL(); sl@0: void DoBasicPINOperation( TSecurityDialogOperation aOperation, sl@0: const TPINParams& aPINParams, TBool aRetry, TDes8& aPINValue, sl@0: TRequestStatus& aStatus ); sl@0: void InitClientStatus( TRequestStatus& aStatus ); sl@0: sl@0: private: sl@0: CDialogRequester* iRequester; sl@0: TSecurityDialogOperation iCurrentOperation; sl@0: TRequestStatus* iClientStatus; sl@0: TPINValue* iClientPINValuePtr; sl@0: TUnblockPINValue* iClientUnblockPINValuePtr; sl@0: TPINValue* iClientSecondPINValuePtr; sl@0: TPINValueBuf iPINValueBuf; sl@0: TTwoPINOutputBuf iTwoPINOutputBuf; sl@0: TUnblockPINInClearOutputBuf iUnblockPINInClearOutputBuf; sl@0: TSignInputBuf iSignInputBuf; sl@0: TPtrC8 iVariableDataPtr; sl@0: TCTTokenObjectHandle* iClientCertInfoHandlePtr; sl@0: TBool* iClientDoClientAuthenticationPtr; sl@0: TCTTokenObjectHandleBuf iCertInfoHandleBuf; sl@0: TUnblockPINInputBuf iUnblockPINInputBuf; sl@0: TPINInputBuf iPINInputBuf; sl@0: TServerAuthenticationFailureOutputBuf iServerAuthenticationOutputBuf; sl@0: }; sl@0: sl@0: /** sl@0: * An AO used to call the notifier, which allows packaging and unpackaging of the sl@0: * arguments and return values for the client. sl@0: */ sl@0: NONSHARABLE_CLASS(CDialogRequester) : public CActive sl@0: { sl@0: private: sl@0: enum TState { KFillingVariableInputBuffer, KMakingRequest }; sl@0: sl@0: public: sl@0: static CDialogRequester* NewL( CRefSecurityDialog& aSecDialog ); sl@0: ~CDialogRequester(); sl@0: void RequestDialog( const TDesC8& aData, TDes8& aResponse ); sl@0: void RequestVariableBufferDialog( const TDesC8& aOperationData, sl@0: const TDesC8& aVariableData, sl@0: const RArray& aCertHandleList, sl@0: TDes8& aResponse ); sl@0: sl@0: void RequestDialog(HBufC8* iInputBuffer, TDes8& aResponse); sl@0: sl@0: private: sl@0: CDialogRequester( CRefSecurityDialog& aSecDialog ); sl@0: void ConstructL(); sl@0: sl@0: private: // from CActive sl@0: void RunL(); sl@0: void DoCancel(); sl@0: TInt RunError( TInt aError ); sl@0: sl@0: private: sl@0: TState iState; sl@0: RNotifier iNotifier; sl@0: CRefSecurityDialog& iSecDialog; sl@0: const TDesC8* iOperationDataPtr; sl@0: const TDesC8* iVariableDataPtr; sl@0: const RArray* iCertHandleListPtr; sl@0: HBufC8* iInputBuffer; sl@0: TDes8* iResponsePtr; sl@0: }; sl@0: sl@0: #endif