diff -r 09b1ac925e3f -r 03674e5abf46 pkiutilities/securitydialognotifiersrv/src/untrustedcertquery.cpp --- a/pkiutilities/securitydialognotifiersrv/src/untrustedcertquery.cpp Tue Aug 31 16:04:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,250 +0,0 @@ -/* -* Copyright (c) 2010 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: Displays untrusted certificate dialog -* -*/ - -#include "untrustedcertquery.h" // CUntrustedCertQuery -#include // CHbSymbianVariantMap -#include "securitydialogstrace.h" // TRACE macro - -// Note that the dialog type string, the parameters name strings, and the return code -// name string and values must match to those defined in Qt-side untrusted certificate -// dialog (in untrustedcertificatedefinitions.h file). - -// Device dialog type for untrusted certificate dialog -_LIT( KUntrustedCertificateDialog, "com.nokia.untrustedcert/1.0" ); - -// Variant map parameter names for untrusted certificate dialog -_LIT( KUntrustedCertEncodedCertificate, "cert" ); // bytearray, mandatory -_LIT( KUntrustedCertServerName, "host" ); // string, mandatory -_LIT( KUntrustedCertValidationError, "err" ); // int (TValidationError), mandatory -_LIT( KUntrustedCertTrustedSiteStoreFail, "tss" ); // any, prevents permanent acceptance - -// Dialog return code name and values -_LIT( KUntrustedCertDialogResult, "result" ); // int -const TInt KUntrustedCertDialogRejected = 0; -const TInt KUntrustedCertDialogAccepted = 1; -const TInt KUntrustedCertDialogAcceptedPermanently = 2; - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::NewL() -// --------------------------------------------------------------------------- -// -CUntrustedCertQuery* CUntrustedCertQuery::NewL( - TValidationError aValidationError, const TDesC8& aCertificate, - const TDesC& aServerName, TBool aCanHandlePermanentAccept ) - { - TRACE( "CUntrustedCertQuery::NewL" ); - CUntrustedCertQuery* self = new ( ELeave ) CUntrustedCertQuery( - aValidationError, aCertificate, aServerName, - aCanHandlePermanentAccept ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::~CUntrustedCertQuery() -// --------------------------------------------------------------------------- -// -CUntrustedCertQuery::~CUntrustedCertQuery() - { - TRACE( "CUntrustedCertQuery::~CUntrustedCertQuery, begin" ); - Cancel(); - delete iWait; - iWait = NULL; - delete iDeviceDialog; - iDeviceDialog = NULL; - delete iVariantMap; - iVariantMap = NULL; - TRACE( "CUntrustedCertQuery::~CUntrustedCertQuery, end" ); - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::ShowQueryAndWaitForResponseL() -// --------------------------------------------------------------------------- -// -void CUntrustedCertQuery::ShowQueryAndWaitForResponseL( TResponse& aResponse ) - { - TRACE( "CUntrustedCertQuery::ShowQueryAndWaitForResponseL, begin" ); - if( !iDeviceDialog ) - { - iDeviceDialog = CHbDeviceDialogSymbian::NewL(); - } - if( !iVariantMap ) - { - iVariantMap = CHbSymbianVariantMap::NewL(); - } - - CHbSymbianVariant *variant = NULL; - variant = CHbSymbianVariant::NewL( &iCertificate, CHbSymbianVariant::EBinary ); - User::LeaveIfError( iVariantMap->Add( KUntrustedCertEncodedCertificate, variant ) ); - variant = CHbSymbianVariant::NewL( &iValidationError, CHbSymbianVariant::EInt ); - User::LeaveIfError( iVariantMap->Add( KUntrustedCertValidationError, variant ) ); - variant = CHbSymbianVariant::NewL( &iServerName, CHbSymbianVariant::EDes ); - User::LeaveIfError( iVariantMap->Add( KUntrustedCertServerName, variant ) ); - if( !iCanHandlePermanentAccept ) - { - variant = CHbSymbianVariant::NewL( &iCanHandlePermanentAccept, CHbSymbianVariant::EBool ); - User::LeaveIfError( iVariantMap->Add( KUntrustedCertTrustedSiteStoreFail, variant ) ); - } - - User::LeaveIfError( iDeviceDialog->Show( KUntrustedCertificateDialog, *iVariantMap, this ) ); - iStatus = KRequestPending; - SetActive(); - - TRACE( "CUntrustedCertQuery::ShowQueryAndWaitForResponseL, iWait start" ); - iWait->Start(); - TRACE( "CUntrustedCertQuery::ShowQueryAndWaitForResponseL, iWaitCompletionCode=%d", - iWaitCompletionCode ); - User::LeaveIfError( iWaitCompletionCode ); - TRACE( "CUntrustedCertQuery::ShowQueryAndWaitForResponseL, iResponse=%d", iResponse ); - aResponse = iResponse; - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::DoCancel() -// --------------------------------------------------------------------------- -// -void CUntrustedCertQuery::DoCancel() - { - TRACE( "CUntrustedCertQuery::DoCancel, begin" ); - if( iDeviceDialog ) - { - TRACE( "CUntrustedCertQuery::DoCancel, cancelling device dialog" ); - iDeviceDialog->Cancel(); - } - - // Have to complete the request here, because cancelled device dialog does not - // call DeviceDialogClosed() that normally completes it. The request needs to - // be completed since CActive::Cancel() waits until the request is completed. - TRACE( "CUntrustedCertQuery::DoCancel, completing self with KErrCancel" ); - TRequestStatus* status( &iStatus ); - User::RequestComplete( status, KErrCancel ); - - // Normally the above request complete would trigger running RunL(). Now RunL() - // is not run since the active object is already cancelled. Hence, have to stop - // the waiting here so that iWait->Start() returns. - iWaitCompletionCode = KErrCancel; - if( iWait && iWait->IsStarted() ) - { - TRACE( "CUntrustedCertQuery::DoCancel, stopping iWait" ); - iWait->AsyncStop(); - } - TRACE( "CUntrustedCertQuery::DoCancel, end" ); - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::RunL() -// --------------------------------------------------------------------------- -// -void CUntrustedCertQuery::RunL() - { - TRACE( "CUntrustedCertQuery::RunL, iStatus.Int()=%d", iStatus.Int() ); - iWaitCompletionCode = iStatus.Int(); - if( iWait && iWait->IsStarted() ) - { - TRACE( "CUntrustedCertQuery::RunL, stopping iWait" ); - iWait->AsyncStop(); - } - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::DataReceived() -// --------------------------------------------------------------------------- -// -void CUntrustedCertQuery::DataReceived( CHbSymbianVariantMap& aData ) - { - TRACE( "CUntrustedCertQuery::DataReceived" ); - const CHbSymbianVariant* variant = aData.Get( KUntrustedCertDialogResult ); - if( variant ) - { - TInt* value = variant->Value(); - if( value ) - { - switch( *value ) - { - case KUntrustedCertDialogRejected: - TRACE( "CUntrustedCertQuery::DataReceived, rejected" ); - iResponse = EQueryRejected; - break; - case KUntrustedCertDialogAccepted: - TRACE( "CUntrustedCertQuery::DataReceived, accepted" ); - iResponse = EQueryAccepted; - break; - case KUntrustedCertDialogAcceptedPermanently: - TRACE( "CUntrustedCertQuery::DataReceived, accepted permanently" ); - iResponse = EQueryAcceptedPermanently; - break; - default: - __ASSERT_DEBUG( EFalse, User::Invariant() ); - break; - } - } - else - { - __ASSERT_DEBUG( EFalse, User::Invariant() ); - } - } - else - { - __ASSERT_DEBUG( EFalse, User::Invariant() ); - } - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::DeviceDialogClosed() -// --------------------------------------------------------------------------- -// -void CUntrustedCertQuery::DeviceDialogClosed( TInt aCompletionCode ) - { - TRACE( "CUntrustedCertQuery::DeviceDialogClosed, aCompletionCode=%d", aCompletionCode ); - if( IsActive() ) - { - TRACE( "CUntrustedCertQuery::DeviceDialogClosed, request complete" ); - TRequestStatus* status( &iStatus ); - User::RequestComplete( status, aCompletionCode ); - } - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::CUntrustedCertQuery() -// --------------------------------------------------------------------------- -// -CUntrustedCertQuery::CUntrustedCertQuery( - TValidationError aValidationError, const TDesC8& aCertificate, - const TDesC& aServerName, TBool aCanHandlePermanentAccept ) : - CActive( CActive::EPriorityStandard ), iValidationError( aValidationError ), - iCertificate( aCertificate ), iServerName( aServerName ), - iCanHandlePermanentAccept( aCanHandlePermanentAccept ), - iResponse( EQueryRejected ) - { - CActiveScheduler::Add( this ); - } - -// --------------------------------------------------------------------------- -// CUntrustedCertQuery::ConstructL() -// --------------------------------------------------------------------------- -// -void CUntrustedCertQuery::ConstructL() - { - TRACE( "CUntrustedCertQuery::ConstructL" ); - iWait = new( ELeave ) CActiveSchedulerWait; - } -