# HG changeset patch # User hgs # Date 1277372780 -10800 # Node ID cc1cea6aabaf24b0c41cc7b1199341bdf18093a6 # Parent aad866c3751972944ce4003a2e821785443ae7aa 201025_01 diff -r aad866c37519 -r cc1cea6aabaf boottimeintegritycheck/TrkDummy/group/TrkDummy.mmp --- a/boottimeintegritycheck/TrkDummy/group/TrkDummy.mmp Fri Jun 11 14:28:40 2010 +0300 +++ b/boottimeintegritycheck/TrkDummy/group/TrkDummy.mmp Thu Jun 24 12:46:20 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: Dummy exe to prevent installing too liberal TrkApp -* Version : %version: tr1sido#9 % +* Version : %version: tr1sido#10 % * */ @@ -26,9 +26,9 @@ // This component is built-in'. -#if(!defined __SERIES60_30__ && !defined __SERIES60_31__) - #include -#endif + +#include + CAPABILITY None @@ -45,13 +45,9 @@ SOURCE TrkDummy.cpp SOURCE TrkDummyApplication.cpp -USERINCLUDE ../inc -#if defined (__SERIES60_30__) || defined(__SERIES60_31__) - SYSTEMINCLUDE /epoc32/include -#else - MW_LAYER_SYSTEMINCLUDE -#endif +USERINCLUDE ../inc +MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib LIBRARY apparc.lib diff -r aad866c37519 -r cc1cea6aabaf boottimeintegritycheck/TrkDummy/group/TrkDummy1.mmp --- a/boottimeintegritycheck/TrkDummy/group/TrkDummy1.mmp Fri Jun 11 14:28:40 2010 +0300 +++ b/boottimeintegritycheck/TrkDummy/group/TrkDummy1.mmp Thu Jun 24 12:46:20 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: Dummy exe to prevent installing too liberal TrkApp -* Version : %version: 7 % +* Version : %version: 8 % * */ @@ -26,9 +26,9 @@ // This component is built-in'. -#if(!defined __SERIES60_30__ && !defined __SERIES60_31__) - #include -#endif + +#include + CAPABILITY None @@ -45,12 +45,9 @@ SOURCE TrkDummy.cpp SOURCE TrkDummyApplication.cpp -USERINCLUDE ../inc -#if defined (__SERIES60_30__) || defined(__SERIES60_31__) - SYSTEMINCLUDE /epoc32/include -#else - MW_LAYER_SYSTEMINCLUDE -#endif +USERINCLUDE ../inc + +MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib LIBRARY apparc.lib diff -r aad866c37519 -r cc1cea6aabaf boottimeintegritycheck/TrkDummy/group/TrkDummy2.mmp --- a/boottimeintegritycheck/TrkDummy/group/TrkDummy2.mmp Fri Jun 11 14:28:40 2010 +0300 +++ b/boottimeintegritycheck/TrkDummy/group/TrkDummy2.mmp Thu Jun 24 12:46:20 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: Dummy exe to prevent installing too liberal TrkApp -* Version : %version: 7 % +* Version : %version: 8 % * */ @@ -26,9 +26,8 @@ // This component is built-in'. -#if(!defined __SERIES60_30__ && !defined __SERIES60_31__) - #include -#endif + +#include CAPABILITY None @@ -46,13 +45,9 @@ SOURCE TrkDummy.cpp SOURCE TrkDummyApplication.cpp -USERINCLUDE ../inc -#if defined (__SERIES60_30__) || defined(__SERIES60_31__) - SYSTEMINCLUDE /epoc32/include -#else - MW_LAYER_SYSTEMINCLUDE -#endif +USERINCLUDE ../inc +MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib LIBRARY apparc.lib diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/group/advancedsecplugin.pro --- a/cpsecplugins/cpadvancedsecplugin/group/advancedsecplugin.pro Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/group/advancedsecplugin.pro Thu Jun 24 12:46:20 2010 +0300 @@ -40,6 +40,7 @@ LIBS += -lcryptography LIBS += -lDevTokenClient LIBS += -lcrypto + LIBS += -lefsrv PLUGIN_STUB_PATH = /resource/qt/plugins/controlpanel diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/inc/cpcertview.h --- a/cpsecplugins/cpadvancedsecplugin/inc/cpcertview.h Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/inc/cpcertview.h Thu Jun 24 12:46:20 2010 +0300 @@ -70,7 +70,7 @@ private: const CCTCertInfo* certAt(TInt index) const; QString certLabel(TInt index) const; - void deleteCerts( RArray& indexList ); + void deleteCertsL( RArray& indexList ); void setDetails(CpCertView::TCertificateViews currentView); void moveCertList( RArray& indexList ); @@ -90,6 +90,7 @@ HbListView* mSelectAllView; HbView* mOriginalView; HbMessageBox* mNote; + HbMenu* mContextMenu; }; #endif /* CPCERTVIEW_H */ diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/inc/cpmoduleview.h --- a/cpsecplugins/cpadvancedsecplugin/inc/cpmoduleview.h Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/inc/cpmoduleview.h Thu Jun 24 12:46:20 2010 +0300 @@ -69,6 +69,7 @@ CpSecModView::TSecModViews mCurrentView; CSecModUIModel& mSecModUIModel; TInt mPos; + HbMenu* mContextMenu; }; #endif /* CPMODULEVIEW_H */ diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/inc/cpsecurityview.h --- a/cpsecplugins/cpadvancedsecplugin/inc/cpsecurityview.h Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/inc/cpsecurityview.h Thu Jun 24 12:46:20 2010 +0300 @@ -56,6 +56,7 @@ HbView* mCurrentView; TInt mPos; HbMessageBox* mNote; + HbMenu* mContextMenu; }; diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpcertdatacontainer.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpcertdatacontainer.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpcertdatacontainer.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -27,7 +27,7 @@ #include #include - +#include <../../inc/cpsecplugins.h> #include "cpcertdatacontainer.h" #include "cpcertmanuisyncwrapper.h" @@ -108,6 +108,7 @@ // Releases Certificate entries. void CpCertManUICertData::Release() { + RDEBUG("0", 0); if ( iCAEntry ) { iCAEntry->Release(); @@ -210,6 +211,7 @@ // void CpCertDataContainer::ConstructL() { + RDEBUG("0", 0); // Ensure that file server session is succesfully created User::LeaveIfError( iRfs.Connect() ); @@ -272,6 +274,7 @@ // void CpCertDataContainer::RefreshCAEntriesL() { + RDEBUG("0", 0); iFilter->SetOwnerType( ECACertificate ); iCAEntries.Close(); CUnifiedCertStore*& store = CertManager(); @@ -378,6 +381,7 @@ // void CpCertDataContainer::RefreshPeerCertEntriesL() { + RDEBUG("0", 0); iFilter->SetOwnerType( EPeerCertificate ); iPeerEntries.Close(); CUnifiedCertStore*& store = CertManager(); @@ -458,6 +462,7 @@ // void CpCertDataContainer::RefreshUserCertEntriesL() { + RDEBUG("0", 0); iFilter->SetOwnerType( EUserCertificate ); iUserEntries.Close(); CUnifiedCertStore*& store = CertManager(); @@ -594,6 +599,7 @@ // void CpCertDataContainer::RefreshDeviceCertEntriesL() { + RDEBUG("0", 0); iFilter->SetOwnerType( EUserCertificate ); iDeviceEntries.Close(); CUnifiedCertStore*& store = CertManager(); diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpcertdetailview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpcertdetailview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpcertdetailview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -45,7 +45,7 @@ #include #include #include - +#include <../../inc/cpsecplugins.h> #include "cpcertdetailview.h" #include "cpcertview.h" #include "cpcertdatacontainer.h" @@ -117,7 +117,7 @@ void CpCertDetailView::viewCertificateDetailsL( TInt aIndex, CpCertView::TCertificateViews aType ) { - + RDEBUG("0", 0); QGraphicsLinearLayout *layout = q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical)); setLayout(layout); @@ -151,7 +151,7 @@ { addLabel(*entry, *mCertDetails); } - + RDEBUG("0", 0); // certificate issuer and owner if( certificateFormat == EX509Certificate ) { @@ -168,7 +168,7 @@ TKeyUsagePKCS15 usage = keyUsageAndLocationL( *entry, &keyLocation ); addCertUsage(usage, *mCertDetails); } - + RDEBUG("0", 0); if( certificateFormat == EX509Certificate ) { addValidityPeriod( *details, *mCertDetails ); @@ -205,7 +205,7 @@ { // SetUrlCertAlgorihm() } - + RDEBUG("0", 0); if( certificateFormat != EX509CertificateUrl ) { CleanupStack::PopAndDestroy( details ); @@ -220,6 +220,7 @@ const CCTCertInfo* CpCertDetailView::certInfo( TInt index, CpCertView::TCertificateViews certView ) { + RDEBUG("0", 0); const CCTCertInfo* certinfo = NULL; if( certView == CpCertView::EAuthorityView ) @@ -243,6 +244,7 @@ void CpCertDetailView::addTrustedSitesL( const CCertificate& certDetails, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL(); CleanupStack::PushL( trustedSitesStore ); @@ -271,6 +273,7 @@ void CpCertDetailView::addLabel( const CCTCertInfo& aCertInfo, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); QString sLabel("Label:"); QString sLabelDetails = "(No label)"; if(aCertInfo.Label().Length() != 0) @@ -301,6 +304,7 @@ void CpCertDetailView::addSubjectL( const CCertificate& aCertDetails, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); HBufC* subject = NULL; X509CertNameParser::SubjectFullNameL( (CX509Certificate&)aCertDetails, subject ); CleanupStack::PushL( subject ); @@ -319,6 +323,7 @@ void CpCertDetailView::addCertUsage( TKeyUsagePKCS15 usage, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); QString strUsage; switch( usage ) { @@ -341,6 +346,7 @@ void CpCertDetailView::addValidityPeriod( const CCertificate& aCertDetails, HbListWidget& certDisplayDetails) { + RDEBUG("0", 0); // Certificate validity period // Hometime's offset to UTC TLocale locale; @@ -375,6 +381,7 @@ void CpCertDetailView::setURLLocation( HBufC8& urlDetails, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); TPtr8 urlPtr = urlDetails.Des(); QString certUrl = "Location:"; @@ -389,6 +396,7 @@ void CpCertDetailView::addCertFormat( TCertificateFormat aCertFormat, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); // certificate format QString certFormat = "Certificate format:"; QString certFormatDetails = "(Not defined)"; @@ -402,6 +410,7 @@ void CpCertDetailView::addAlgoDetails( const CCertificate& certificate, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); // certificate algorithms QString sDgstAlgoDetails = "Unknown"; // digest algorithm @@ -440,6 +449,7 @@ void CpCertDetailView::addSerialNo( const CCertificate& certificate, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); // certificate serial number QString sCertSerialNo("Serial number:"); QString sCertSerialNoDetails = 0; @@ -457,37 +467,47 @@ void CpCertDetailView::addFingerprint( const CCertificate& certificate, HbListWidget& certDisplayDetails) { + RDEBUG("0", 0); // certificate fingerprint SHA-1 QString sSha1("Fingerprint (SHA1):"); TPtrC8 sha1_fingerprint = certificate.Fingerprint(); HBufC* finalSha1 = NULL; - QT_TRAP_THROWING( finalSha1 = HBufC::NewLC(100)); - TPtr finalShaPtr = finalSha1->Des(); - divideIntoBlocks( sha1_fingerprint, finalShaPtr ); - QString sSha1Details = QString( (QChar*)finalShaPtr.Ptr(), finalShaPtr.Length() ); - CleanupStack::PopAndDestroy(finalSha1); + QString sSha1Details = NULL; + + QT_TRAP_THROWING + ( + finalSha1 = HBufC::NewLC(100); + TPtr finalShaPtr = finalSha1->Des(); + divideIntoBlocks( sha1_fingerprint, finalShaPtr ); + sSha1Details = QString( (QChar*)finalShaPtr.Ptr(), finalShaPtr.Length() ); + CleanupStack::PopAndDestroy(finalSha1); + ) addToListWidget(certDisplayDetails, sSha1, sSha1Details); // certificate fingerprint MD5 QString sMd5("Fingerprint (MD5):"); CMD5* md5= NULL; - QT_TRAP_THROWING( md5 = CMD5::NewL()); - QT_TRAP_THROWING(CleanupStack::PushL( md5 )); - TBuf8<20> fingerprint = md5->Hash( certificate.Encoding() ); - CleanupStack::PopAndDestroy( md5 ); - HBufC* finalMd5 = NULL; - QT_TRAP_THROWING( finalMd5 = HBufC::NewLC(100)); - TPtr finalMd5Ptr = finalMd5->Des(); - divideIntoBlocks( fingerprint, finalMd5Ptr ); - QString sMd5Details = QString( (QChar*)finalMd5Ptr.Ptr(), finalMd5Ptr.Length()); - CleanupStack::PopAndDestroy(finalMd5); - addToListWidget(certDisplayDetails, sMd5, sMd5Details); + QT_TRAP_THROWING + ( + md5 = CMD5::NewL(); + CleanupStack::PushL( md5 ); + TBuf8<20> fingerprint = md5->Hash( certificate.Encoding() ); + CleanupStack::PopAndDestroy( md5 ); + HBufC* finalMd5 = NULL; + finalMd5 = HBufC::NewLC(100); + TPtr finalMd5Ptr = finalMd5->Des(); + divideIntoBlocks( fingerprint, finalMd5Ptr ); + QString sMd5Details = QString( (QChar*)finalMd5Ptr.Ptr(), finalMd5Ptr.Length()); + CleanupStack::PopAndDestroy(finalMd5); + addToListWidget(certDisplayDetails, sMd5, sMd5Details); + ) } void CpCertDetailView::addPublicKeyDetailsL( const CCertificate& certificate, HbListWidget& certDisplayDetails ) { + RDEBUG("0", 0); // Public key // Should look like: "Public key (%0U %1N bit):" @@ -574,6 +594,7 @@ QString CpCertDetailView::asymmetricAlgoId( const CCertificate& certificate ) { + RDEBUG("0", 0); QString sAsymmetricAlgoId = 0; // public-key algorithm TAlgorithmId algorithmId = certificate.SigningAlgorithm().AsymmetricAlgorithm().Algorithm(); @@ -625,7 +646,7 @@ void CpCertDetailView::validateCertificateL( TInt aIndex, const CCertificate& certDetails, const CCTCertInfo& aCertInfo, CpCertView::TCertificateViews aType ) { - + RDEBUG("0", 0); TInt poppableItems = 0; // Check allways first the validity period // Show Expired/Not yet valid notes @@ -738,6 +759,7 @@ CArrayFixFlat* CpCertDetailView::validateX509CertificateL( const CX509Certificate& certDetails ) { + RDEBUG("0", 0); TInt poppableItems = 0; CArrayFixFlat* validationError = new ( ELeave ) CArrayFixFlat( 1 ); @@ -774,7 +796,7 @@ TUid* keyLocation ) { TKeyUsagePKCS15 keyUsage; - + RDEBUG("0", 0); // Check whether we have key for this certificate RMPointerArray keyEntry; TCTKeyAttributeFilter filter; @@ -806,7 +828,7 @@ // void CpCertDetailView::setLocationInfo(TBool certificate, TUid locUid, HbListWidget& certDisplayDetails) { - + RDEBUG("0", 0); QString locationDetails = "(Not defined)"; switch ( locUid.iUid ) @@ -847,6 +869,7 @@ // void CpCertDetailView::divideIntoBlocks( const TDesC8& input, TPtr& output ) { + RDEBUG("0", 0); const TInt KBlockLength = 2; TInt blockIndex = 0; for ( TInt j = 0 ; j < input.Length() ; j++ ) diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpcertmanuisyncwrapper.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpcertmanuisyncwrapper.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpcertmanuisyncwrapper.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -23,7 +23,7 @@ #include #include #include - +#include <../../inc/cpsecplugins.h> #include "cpcertmanuisyncwrapper.h" // CONSTANTS @@ -42,7 +42,7 @@ const CCertAttributeFilter& aFilter, const TUid aTokenUid ) { - + RDEBUG("0", 0); if ( IsActive() ) { // Wrapper is active. Don't go further @@ -78,7 +78,7 @@ RMPointerArray* aArray, const TCTKeyAttributeFilter& aFilter ) { - + RDEBUG("0", 0); if ( IsActive() ) { // Wrapper is active. Don't go further @@ -104,7 +104,7 @@ TUid aTokenUid ) { aCert = NULL; - + RDEBUG("0", 0); HBufC8* buf = HBufC8::NewLC( KMaxCertificateLength ); iCertPtr.Set( buf->Des() ); @@ -156,7 +156,7 @@ void CpCertManUISyncWrapper::DeleteCertL( CUnifiedCertStore*& aStore, const CCTCertInfo& aCertInfo ) { - + RDEBUG("0", 0); aStore->Remove( aCertInfo, iStatus ); iOperation = EOperationDelete; iStore = aStore; @@ -174,7 +174,7 @@ const CCTCertInfo& aCertInfo, TUid aTokenUid ) { - + RDEBUG("0", 0); TInt count = aStore->WritableCertStoreCount(); for (TInt i = 0; i < count; i++) { @@ -256,7 +256,7 @@ void CpCertManUISyncWrapper::RunL() { - + RDEBUG("0", 0); if ( iWait.IsStarted() ) { iWait.AsyncStop(); @@ -271,6 +271,7 @@ // void CpCertManUISyncWrapper::DoCancel() { + RDEBUG("iOperation", iOperation); switch ( iOperation ) { case EOperationInit: diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpcertpluginloader.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpcertpluginloader.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpcertpluginloader.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -20,9 +20,11 @@ #include "cpcertpluginloader.h" #include "cpsecurityview.h" #include +#include <../../inc/cpsecplugins.h> CpCertPluginLoader::CpCertPluginLoader() { + RDEBUG("0", 0); mTranslator =q_check_ptr( new QTranslator()); // to be uncommented after translation sumission. // QString lang = QLocale::system().name(); @@ -43,6 +45,7 @@ QList CpCertPluginLoader::createSettingFormItemData(CpItemDataHelper &itemDataHelper) const { + RDEBUG("0", 0); return QList() << new CpSettingFormEntryItemDataImpl(itemDataHelper,tr("Advanced Security"), QString()); } diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpcerttrustview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpcerttrustview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpcerttrustview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -35,7 +35,7 @@ #include #include - +#include <../../inc/cpsecplugins.h> #include "cpcerttrustview.h" #include "cpcertdatacontainer.h" #include "cpcertmanuisyncwrapper.h" @@ -71,6 +71,7 @@ void CpCertTrustView::viewTrustSettings() { + RDEBUG("0", 0); mTrustedClients << " \tWAP connection\t\t"; mTrustedClients << " \tMail and Image conn.\t\t"; mTrustedClients << " \tNative installing\t\t"; @@ -111,6 +112,7 @@ // void CpCertTrustView::updateListBoxL() { + RDEBUG("0", 0); mClientUids.Reset(); TInt clientCount = 0; @@ -196,7 +198,7 @@ certLabel->setText(QString( (QChar*)label.Ptr(),label.Length() ) ); mCertLabelList->addItem(certLabel.get()); certLabel.release(); - + RDEBUG("0", 0); int count = mTrustedClients.size(); for( int index = 0 ;index < count; ++index) { @@ -226,6 +228,7 @@ void CpCertTrustView::saveTrustSettings() { + RDEBUG("0", 0); CCTCertInfo& entry = *( mCertDataContainer.iCALabelEntries[ mCertificateIndex ]->iCAEntry ); if ( entry.IsDeletable() ) { @@ -249,6 +252,7 @@ TUid CpCertTrustView::trusterId(const QString& clientDescription) const { + RDEBUG("0", 0); TUid retValue = TUid::Uid(0); if( clientDescription == " \tWAP connection\t\t" ) retValue = KCertManUIViewTrustWapConnectionId; @@ -273,6 +277,7 @@ // TInt CpCertTrustView::trustIdIndex( TUid trustUid ) const { + RDEBUG("0", 0); TInt resIndex = KErrNotFound; if ( trustUid == KCertManUIViewTrustApplicationControllerId ) @@ -322,6 +327,7 @@ TBool CpCertTrustView::checkCertificateClientTrustL( const TUid clientUid, const CCTCertInfo& entry ) const { + RDEBUG("0", 0); TBool trustSettingTrusted = EFalse; TCertificateFormat format = entry.CertificateFormat(); diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpcertview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpcertview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpcertview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -42,7 +42,7 @@ #include #include #include - +#include <../../inc/cpsecplugins.h> #include "cpcertdetailview.h" #include "cpcertview.h" #include "cpcertdatacontainer.h" @@ -61,7 +61,7 @@ mOriginalView(NULL), mNote(NULL) { - + RDEBUG("0", 0); mOriginalView = mainWindow()->currentView(); HbMenu* menu = this->menu(); @@ -89,11 +89,15 @@ { title = "Move to Personal"; } - std::auto_ptr moveToDeviceAction(q_check_ptr(new HbAction(title))); - connect(moveToDeviceAction.get(), SIGNAL(triggered()), this, SLOT(moveCert())); - menu->addAction(moveToDeviceAction.get()); - moveToDeviceAction.release(); - + RDEBUG("0", 0); + if(currentView == EPersonalView || currentView == EDeviceView) + { + std::auto_ptr moveToDeviceAction(q_check_ptr(new HbAction(title))); + connect(moveToDeviceAction.get(), SIGNAL(triggered()), this, SLOT(moveCert())); + menu->addAction(moveToDeviceAction.get()); + moveToDeviceAction.release(); + } + setDetails(currentView); TInt count = 0; try @@ -106,7 +110,7 @@ HbMessageBox::information(exception.what()); throw(exception); } - + RDEBUG("0", 0); for(int index = 0; index< count; index++) { QString certificateLabel = certLabel(index); @@ -122,13 +126,18 @@ layout->addItem(certificateList); setLayout(layout.get()); layout.release(); + + mPopup = q_check_ptr(new HbDialog()); + mContextMenu = q_check_ptr(new HbMenu()); + + RDEBUG("0", 0); } CpCertView::~CpCertView() { delete mCertDataContainer; mCertDataContainer = NULL; - + RDEBUG("0", 0); if(mPrevView) { mPrevView->deleteLater(); @@ -164,10 +173,14 @@ delete mNote; mNote = NULL; + + delete mContextMenu; + } void CpCertView::setDetails(CpCertView::TCertificateViews currentView) { + RDEBUG("0", 0); switch(currentView) { case EAuthorityView: @@ -194,12 +207,13 @@ void CpCertView::indicateLongPress(HbAbstractViewItem *item,QPointF coords) { - std::auto_ptr contextMenu(q_check_ptr(new HbMenu())); + RDEBUG("0", 0); mPos = item->modelIndex().row(); // Pos will tell you what is the certificate clicked in particular view. - std::auto_ptr open(q_check_ptr(new HbAction(hbTrId("txt_common_menu_open")))); - connect(open.get(), SIGNAL(triggered()), this, SLOT( openCertificate())); - contextMenu->addAction(open.get()); + mContextMenu->clearActions(); + std::auto_ptr open(q_check_ptr(new HbAction(hbTrId("txt_common_menu_open")))); + connect(open.get(), SIGNAL(triggered()), this, SLOT( openCertificate())); + mContextMenu->addAction(open.get()); open.release(); QString moveTitle; @@ -208,7 +222,7 @@ { std::auto_ptr trustSettings(q_check_ptr(new HbAction(hbTrId("txt_certificate_manager_menu_trust_settings")))); connect(trustSettings.get(), SIGNAL(triggered()), this, SLOT(showTrustSettings())); - contextMenu->addAction(trustSettings.get()); + mContextMenu->addAction(trustSettings.get()); trustSettings.release(); } else if(mCertView == EPersonalView) @@ -219,31 +233,38 @@ { moveTitle = hbTrId("txt_certificate_manager_menu_move_to_personal_cert"); } - std::auto_ptr moveCert(q_check_ptr(new HbAction(moveTitle))); - connect(moveCert.get(), SIGNAL(triggered()), this, SLOT(moveSelectedCert())); - contextMenu->addAction(moveCert.get()); - moveCert.release(); - + + if(mCertView == EPersonalView || mCertView == EDeviceView ) + { + std::auto_ptr moveCert(q_check_ptr(new HbAction(moveTitle))); + connect(moveCert.get(), SIGNAL(triggered()), this, SLOT(moveSelectedCert())); + mContextMenu->addAction(moveCert.get()); + moveCert.release(); + } + + RDEBUG("0", 0); if( certAt(mPos)->IsDeletable() ) { std::auto_ptr menuDelete(q_check_ptr(new HbAction(hbTrId("txt_common_menu_delete")))); connect(menuDelete.get(), SIGNAL(triggered()), this, SLOT(deleteCertificate())); - contextMenu->addAction(menuDelete.get()); + mContextMenu->addAction(menuDelete.get()); menuDelete.release(); } - contextMenu->open(); - contextMenu->setPreferredPos(coords); + mContextMenu->setPreferredPos(coords); + mContextMenu->open(); } void CpCertView::openCertFromList(const QModelIndex& modelIndex) { + RDEBUG("0", 0); // Pos will tell you what is the certificate clicked in particular view. mPos = modelIndex.row(); openCertificate(); } void CpCertView::openCertificate() - { + { + RDEBUG("0", 0); mCurrentView = q_check_ptr(new CpCertDetailView(mCertView,mPos,*mCertDataContainer)); connect(mCurrentView, SIGNAL(aboutToClose()), this, SLOT(displayPreviousView())); mPrevView = mainWindow()->currentView(); @@ -253,6 +274,7 @@ void CpCertView::displayPreviousView() { + RDEBUG("0", 0); mainWindow()->removeView(mCurrentView); mCurrentView->deleteLater(); mCurrentView= NULL; @@ -261,16 +283,16 @@ void CpCertView::deleteCertificate() { + RDEBUG("0", 0); RArray pos; pos.Append(mPos); - QT_TRAP_THROWING(deleteCerts(pos)); + QT_TRAP_THROWING(deleteCertsL(pos)); } void CpCertView::deleteList() { + RDEBUG("0", 0); mSelectAll = EFalse; - mPopup = new HbDialog(); - mPopup->setDismissPolicy(HbDialog::NoDismiss); // Set the label as heading widget mPopup->setHeadingWidget(q_check_ptr(new HbLabel(hbTrId("txt_certificate_manager_setlabel_certificates")))); @@ -298,7 +320,7 @@ QStandardItemModel* model = q_check_ptr(new QStandardItemModel(this)); TInt count=0; QT_TRAP_THROWING( count = refreshListL()); - + RDEBUG("0", 0); for(TInt index = 0; index < count ; ++index) { const CCTCertInfo* cert = certAt(index); @@ -327,7 +349,7 @@ mPopup->setPrimaryAction(q_check_ptr(new HbAction(hbTrId("txt_common_opt_delete")))); mPopup->setSecondaryAction(q_check_ptr(new HbAction(hbTrId("txt_common_button_cancel")))); mPopup->setTimeout(HbPopup::NoTimeout); - + RDEBUG("0", 0); // Launch popup syncronously mPopup->open(this, SLOT(handleMultipleDelete(HbAction*))); @@ -335,6 +357,7 @@ void CpCertView::handleMultipleDelete(HbAction* action) { + RDEBUG("0", 0); if(action == mPopup->primaryAction()) { QItemSelectionModel *selectionModel = mListView->selectionModel(); @@ -343,27 +366,29 @@ // start deleting from end of array so that the indexes do not changes of the ones // at the front. RArray actualIndex; - QT_TRAP_THROWING(CleanupClosePushL(actualIndex)); - for (TInt index = deleteCount-1; index>= 0 ; --index) - { - TInt selectedItemIndex = mWidgetItemsToRemove[index].row(); - actualIndex.Append( mSelectionIndex[selectedItemIndex] ); - } - deleteCerts(actualIndex); - CleanupStack::PopAndDestroy(&actualIndex); + QT_TRAP_THROWING + ( + CleanupClosePushL(actualIndex); + for (TInt index = deleteCount-1; index>= 0 ; --index) + { + TInt selectedItemIndex = mWidgetItemsToRemove[index].row(); + actualIndex.Append( mSelectionIndex[selectedItemIndex] ); + } + deleteCertsL(actualIndex); + CleanupStack::PopAndDestroy(&actualIndex); + ) // QT_TRAP_THROWING } + RDEBUG("0", 0); mListView->deleteLater(); mListView = NULL; mSelectAllView->deleteLater(); mSelectAllView = NULL; - delete mPopup; - mPopup = NULL; } void CpCertView::moveCert() { + RDEBUG("0", 0); mSelectAll = EFalse; - mPopup = new HbDialog(); mPopup->setDismissPolicy(HbDialog::NoDismiss); // Set the label as heading widget if(mCertView == EPersonalView) @@ -396,6 +421,7 @@ // Create a model QStandardItemModel* model = q_check_ptr(new QStandardItemModel(this)); TInt count =0; + RDEBUG("0", 0); QT_TRAP_THROWING(count = refreshListL()); for(TInt index = 0; index < count ; ++index) { @@ -418,17 +444,19 @@ layout.release(); mPopup->setContentWidget(widget.get()); widget.release(); - + RDEBUG("0", 0); mPopup->setPrimaryAction(q_check_ptr(new HbAction(tr("Yes")))); mPopup->setSecondaryAction(q_check_ptr(new HbAction(tr("No")))); mPopup->setTimeout(HbPopup::NoTimeout); // Launch popup syncronously mPopup->open(this, SLOT(handleMoveCertDialog(HbAction*))); + RDEBUG("0", 0); } void CpCertView::handleMoveCertDialog(HbAction* action) { + RDEBUG("0", 0); if(action == mPopup->primaryAction()) { QItemSelectionModel *selectionModel = mListView->selectionModel(); @@ -437,25 +465,29 @@ // start deleting from end of array so that the indexes do not changes of the ones // at the front. RArray actualIndex; - QT_TRAP_THROWING(CleanupClosePushL(actualIndex)); - for (TInt index = deleteCount-1; index>= 0 ; --index) - { - TInt selectedItemIndex = mWidgetItemsToRemove[index].row(); - actualIndex.Append(mSelectionIndex[selectedItemIndex]); - } - moveCertList(actualIndex); - CleanupStack::PopAndDestroy(&actualIndex); + RDEBUG("0", 0); + QT_TRAP_THROWING + ( + CleanupClosePushL(actualIndex); + for (TInt index = deleteCount-1; index>= 0 ; --index) + { + TInt selectedItemIndex = mWidgetItemsToRemove[index].row(); + actualIndex.Append(mSelectionIndex[selectedItemIndex]); + } + moveCertList(actualIndex); + CleanupStack::PopAndDestroy(&actualIndex); + ) } mListView->deleteLater(); mListView = NULL; mSelectAllView->deleteLater(); mSelectAllView = NULL; - delete mPopup; - mPopup = NULL; + RDEBUG("0", 0); } void CpCertView::selectAll() { + RDEBUG("0", 0); if(mSelectAll == EFalse) { mListView->selectAll(); @@ -468,12 +500,16 @@ } } -void CpCertView::deleteCerts( RArray& indexList ) +void CpCertView::deleteCertsL( RArray& indexList ) { - mIndexList = indexList; - TInt count = indexList.Count(); - - mNote = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + RDEBUG("0", 0); + TInt count = indexList.Count(); + for(int index = 0;index setText(deleteMsg); - mNote->setPrimaryAction(q_check_ptr(new HbAction("Yes"))); - mNote->setSecondaryAction(q_check_ptr(new HbAction("No"))); mNote->setTimeout(HbPopup::NoTimeout); mNote->open(this,SLOT(handleDeleteDialog(HbAction*))); @@ -499,7 +533,7 @@ void CpCertView::handleDeleteDialog(HbAction* action) { - + RDEBUG("0", 0); TInt count = mIndexList.Count(); if (action != mNote->primaryAction() || count == 0 ) @@ -508,53 +542,57 @@ } RPointerArray errCerts; - QT_TRAP_THROWING(CleanupClosePushL(errCerts)); + QT_TRAP_THROWING( + CleanupClosePushL(errCerts); - for(TInt index = 0; index < count; ++index) - { - const CCTCertInfo* entry = certAt(mIndexList[index]); - - if( mCertView == EPersonalView || mCertView == EAuthorityView ) - { - QT_TRAP_THROWING( mCertDataContainer->iWrapper->DeleteCertL( - mCertDataContainer->CertManager(), *entry )); - } - else if( mCertView == ETrustedView ) - { - QT_TRAP_THROWING( mCertDataContainer->iWrapper->DeleteCertL( - mCertDataContainer->CertManager(),*entry, KCMTrustedServerTokenUid )); - } - else if( mCertView == EDeviceView ) + for(TInt index = 0; index < count; ++index) { - QT_TRAP_THROWING( mCertDataContainer->iWrapper->DeleteCertL( - mCertDataContainer->CertManager(), *entry, KCMDeviceCertStoreTokenUid )); - } - QT_TRAP_THROWING( errCerts.AppendL(entry)); - } + const CCTCertInfo* entry = certAt(mIndexList[index]); + + if( mCertView == EPersonalView || mCertView == EAuthorityView ) + { + mCertDataContainer->iWrapper->DeleteCertL( + mCertDataContainer->CertManager(), *entry ); + } + else if( mCertView == ETrustedView ) + { + mCertDataContainer->iWrapper->DeleteCertL( + mCertDataContainer->CertManager(),*entry, KCMTrustedServerTokenUid ); + } + else if( mCertView == EDeviceView ) + { + mCertDataContainer->iWrapper->DeleteCertL( + mCertDataContainer->CertManager(), *entry, KCMDeviceCertStoreTokenUid ); + } + errCerts.AppendL(entry); + } + RDEBUG("0", 0); + if(errCerts.Count() > 0) + { + QString message("Unable to delete the following certificate: \n"); + TInt count = errCerts.Count(); + for(TInt index=0;indexLabel(); + QString certName = QString((QChar*)certLabel.Ptr(),certLabel.Length()); + message.append(certName).append("\n"); + } + HbMessageBox::warning(message); + } + count = refreshListL(); + refreshView(count); + + CleanupStack::PopAndDestroy(&errCerts); + ) // QT_TRAP_THROWING - if(errCerts.Count() > 0) - { - QString message("Unable to delete the following certificate: \n"); - TInt count = errCerts.Count(); - for(TInt index=0;indexLabel(); - QString certName = QString((QChar*)certLabel.Ptr(),certLabel.Length()); - message.append(certName).append("\n"); - } - HbMessageBox::warning(message); - } - QT_TRAP_THROWING( count = refreshListL()); - refreshView(count); - - CleanupStack::PopAndDestroy(&errCerts); delete mNote; mNote = NULL; - + RDEBUG("0", 0); } const CCTCertInfo* CpCertView::certAt(TInt index) const { + RDEBUG("0", 0); CCTCertInfo* currentCert = NULL; switch(mCertView) { @@ -584,6 +622,7 @@ QString CpCertView::certLabel(TInt index) const { + RDEBUG("0", 0); CpCertManUICertData* certData = NULL; HBufC* label = NULL; TInt length = 0; @@ -623,6 +662,7 @@ TInt CpCertView::refreshListL() { + RDEBUG("0", 0); TInt count = 0; switch(mCertView) { @@ -649,6 +689,7 @@ void CpCertView::refreshView( TInt count ) { + RDEBUG("0", 0); if(mRefreshedView) { mRefreshedView->deleteLater(); @@ -681,7 +722,7 @@ } HbMenu* menu = mRefreshedView->menu(); - + RDEBUG("0", 0); std::auto_ptr endAction( q_check_ptr(new HbAction(hbTrId("txt_common_opt_delete"))) ); connect(endAction.get(), SIGNAL(triggered()), this, SLOT(deleteList())); menu->addAction(endAction.get()); @@ -700,7 +741,7 @@ connect(moveAction.get(), SIGNAL(triggered()), this, SLOT(moveCert())); menu->addAction(moveAction.get()); moveAction.release(); - + RDEBUG("0", 0); std::auto_ptr layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical))); HbListWidget* mCertificateList = q_check_ptr(new HbListWidget(this)); @@ -718,7 +759,7 @@ connect(mCertificateList, SIGNAL(longPressed(HbAbstractViewItem*, QPointF )), this, SLOT(indicateLongPress(HbAbstractViewItem*, QPointF))); layout->addItem(mCertificateList); - + RDEBUG("0", 0); // Refresh current view QObject::connect(mRefreshedView , SIGNAL(aboutToClose()), this, SLOT(viewDone())); mPrevView = mainWindow()->currentView(); @@ -726,11 +767,13 @@ mainWindow()->setCurrentView(mRefreshedView); mRefreshedView->setLayout(layout.get()); layout.release(); + RDEBUG("0", 0); } void CpCertView::viewDone() { + RDEBUG("0", 0); mCurrentView = mainWindow()->currentView(); mCurrentView->deleteLater(); mCurrentView= NULL; @@ -738,6 +781,7 @@ } void CpCertView::showTrustSettings() { + RDEBUG("0", 0); mCurrentView = q_check_ptr(new CpCertTrustView(mPos, *mCertDataContainer)); connect(mCurrentView , SIGNAL(aboutToClose()), this, SLOT(saveTrustSettings())); mPrevView = mainWindow()->currentView(); @@ -753,6 +797,7 @@ void CpCertView::moveSelectedCert() { + RDEBUG("0", 0); RArray pos; pos.Append(mPos); moveCertList(pos); @@ -760,7 +805,7 @@ void CpCertView::moveCertList(RArray& indexList) { - + RDEBUG("0", 0); mIndexList = indexList; mNote = new HbMessageBox(HbMessageBox::MessageTypeQuestion); mNote->setHeadingWidget(q_check_ptr(new HbLabel(hbTrId("txt_certificate_manager_info_move")))); @@ -773,16 +818,15 @@ mNote->setText("Use of Personal certificates may require user confirmation. Proceed?"); } - mNote->setPrimaryAction(q_check_ptr(new HbAction("Yes"))); - mNote->setSecondaryAction(q_check_ptr(new HbAction("No"))); mNote->setTimeout(HbPopup::NoTimeout); mNote->setIconVisible (EFalse); mNote->open(this,SLOT(handleMoveDialog(HbAction*))); + RDEBUG("0", 0); } void CpCertView::handleMoveDialog(HbAction* action) { - + RDEBUG("0", 0); if (action != mNote->primaryAction()) { return; @@ -806,7 +850,7 @@ TCTKeyAttributeFilter keyFilter; keyFilter.iKeyId = entry->SubjectKeyId(); keyFilter.iPolicyFilter = TCTKeyAttributeFilter::EAllKeys; - + RDEBUG("0", 0); TUid sourceCertStoreUid = TUid::Uid(0); TUid targetCertStoreUid = TUid::Uid(0); TUid sourceKeyStoreUid = TUid::Uid(0); @@ -826,6 +870,7 @@ sourceCertStoreUid = KCMDeviceCertStoreTokenUid; targetCertStoreUid = KCMFileCertStoreTokenUid; } + RDEBUG("0", 0); try { @@ -843,7 +888,7 @@ QT_TRAP_THROWING(mCertDataContainer->ShowErrorNoteL( error.toInt() )); User::Exit( KErrNone ); } - + RDEBUG("0", 0); try { if(mCertView == EPersonalView) @@ -872,5 +917,6 @@ QT_TRAP_THROWING(refreshView(refreshListL())); delete mNote; mNote = NULL; + RDEBUG("0", 0); } diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpmoduleview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpmoduleview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpmoduleview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -41,7 +41,7 @@ #include #include - +#include <../../inc/cpsecplugins.h> #include "cpmoduleview.h" #include "cpsecmodmodel.h" #include "cpsecmodview.h" @@ -53,9 +53,12 @@ mCurrentView(currentView), mSecModUIModel(secModUIModel) { + RDEBUG("0", 0); QString title = mSecModUIModel.TokenLabelForTitle(); setTitle(title); + mContextMenu = (q_check_ptr(new HbMenu())); + if(currentView == CpSecModView::EAccessView) { showAccessView(); @@ -71,6 +74,7 @@ void CpModuleView::showAccessView() { + RDEBUG("0", 0); HbMenu* menu = this->menu(); std::auto_ptr endAction(q_check_ptr(new HbAction("Module Info"))); connect(endAction.get(), SIGNAL(triggered()), this, SLOT(saveProv())); @@ -95,7 +99,7 @@ const TDesC& label = mSecModUIModel.AuthObj(KPinGSettIndex).Label(); titleName = QString((QChar*)label.Ptr(), label.Length()); } - + RDEBUG("0", 0); HbListWidget* accessDetails = q_check_ptr(new HbListWidget(this)); std::auto_ptr codeLabel(q_check_ptr(new HbListWidgetItem())); @@ -122,7 +126,7 @@ } accessDetails->addItem(requestText.get()); requestText.release(); - + RDEBUG("0", 0); std::auto_ptr statusLabel(q_check_ptr(new HbListWidgetItem())); statusLabel->setText("Status"); accessDetails->addItem(statusLabel.get()); @@ -142,10 +146,12 @@ form.release(); setLayout(layout.get()); layout.release(); + RDEBUG("0", 0); } void CpModuleView::showSignatureView(TBool showBlockedNote) { + RDEBUG("0", 0); mCurrentView = CpSecModView::ESignatureView; std::auto_ptr layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical))); std::auto_ptr form(q_check_ptr(new HbDataForm())); @@ -158,8 +164,7 @@ while(authDetailsIter.hasNext()) { - authDetailsIter.next(); - QPair pair; + QPair pair = authDetailsIter.next(); QString label = pair.first; TUint32 status = pair.second; QString blockedDetails = NULL; @@ -176,7 +181,7 @@ HbMessageBox::information(totalBlocked); } blockedDetails = label.append(" Blocked"); - + RDEBUG("0", 0); std::auto_ptr statusLabel(q_check_ptr(new HbListWidgetItem())); statusLabel->setText(tr("Status")); accessDetails->addItem(statusLabel.get()); @@ -212,13 +217,15 @@ form.release(); setLayout(layout.get()); layout.release(); + RDEBUG("0", 0); } void CpModuleView::indicateLongPress(HbAbstractViewItem *item,QPointF coords) { + RDEBUG("0", 0); try { - std::auto_ptr contextMenu(q_check_ptr(new HbMenu())); + mContextMenu->clearActions(); mPos = item->modelIndex().row(); if(mCurrentView == CpSecModView::EAccessView) @@ -229,21 +236,21 @@ { std::auto_ptr changePIN(q_check_ptr(new HbAction("Change"))); connect(changePIN.get(), SIGNAL(triggered()), this, SLOT( handleAccessView())); - contextMenu->addAction(changePIN.get()); + mContextMenu->addAction(changePIN.get()); changePIN.release(); } if( mSecModUIModel.PinUnblockable(KPinGSettIndex) ) { std::auto_ptr unblockPIN(q_check_ptr(new HbAction("Unblock"))); connect(unblockPIN.get(), SIGNAL(triggered()), this, SLOT( handleAccessView())); - contextMenu->addAction(unblockPIN.get()); + mContextMenu->addAction(unblockPIN.get()); unblockPIN.release(); } if( mSecModUIModel.PinOpen(KPinGSettIndex) ) { std::auto_ptr closePIN(q_check_ptr(new HbAction("Close"))); connect(closePIN.get(), SIGNAL(triggered()), this, SLOT( handleAccessView())); - contextMenu->addAction(closePIN.get()); + mContextMenu->addAction(closePIN.get()); closePIN.release(); } } @@ -253,29 +260,31 @@ { std::auto_ptr changePIN(q_check_ptr(new HbAction("Change"))); connect(changePIN.get(), SIGNAL(triggered()), this, SLOT( handleSigViewCommand())); - contextMenu->addAction(changePIN.get()); + mContextMenu->addAction(changePIN.get()); changePIN.release(); } if (mSecModUIModel.PinUnblockable(KPinNrSettIndex)) { std::auto_ptr unblockPIN(q_check_ptr(new HbAction("Unblock"))); connect(unblockPIN.get(), SIGNAL(triggered()), this, SLOT( handleSigViewCommand())); - contextMenu->addAction(unblockPIN.get()); + mContextMenu->addAction(unblockPIN.get()); unblockPIN.release(); } } - contextMenu->open(); - contextMenu->setPreferredPos(coords); + mContextMenu->setPreferredPos(coords); + mContextMenu->open(); } catch(const std::exception& exception) { HbMessageBox::information(exception.what()); } + RDEBUG("0", 0); } void CpModuleView::handleAccessView( const QModelIndex& modelIndex ) { + RDEBUG("0", 0); try { mPos = modelIndex.row(); @@ -289,6 +298,7 @@ void CpModuleView::handleAccessView() { + RDEBUG("0", 0); try { if(mPos == EIndexCodeLabel) @@ -316,6 +326,7 @@ void CpModuleView::handleSigView() { + RDEBUG("0", 0); try { QT_TRAP_THROWING(mSecModUIModel.ChangeOrUnblockPinL(KPinNrSettIndex)); @@ -329,6 +340,7 @@ void CpModuleView::handleSigViewCommand() { + RDEBUG("0", 0); try { switch(mPos) diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpsecmodmodel.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpsecmodmodel.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpsecmodmodel.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -27,7 +27,7 @@ #include #include - +#include <../../inc/cpsecplugins.h> #include "cpsecmodmodel.h" #include "cpsecmodsyncwrapper.h" @@ -47,6 +47,7 @@ // CSecModUIModel* CSecModUIModel::NewL() { + RDEBUG("0", 0); CSecModUIModel* self = new( ELeave ) CSecModUIModel(); CleanupStack::PushL( self ); self->ConstructL(); @@ -93,6 +94,7 @@ // void CSecModUIModel::ResetAndDestroyAOs() { + RDEBUG("0", 0); if (iAOList) { iAOList->Release(); @@ -125,6 +127,7 @@ // void CSecModUIModel::InitializeKeyStoreL() { + RDEBUG("0", 0); ResetAndDestroyCTObjects(); // Ensure that file server session is succesfully created @@ -184,7 +187,7 @@ // QMap CSecModUIModel::LoadTokenLabelsL() { - + RDEBUG("0", 0); TInt keyStoreCount = iAOKeyStores.Count(); QMap labelList; @@ -222,6 +225,7 @@ // QString CSecModUIModel::Location( TUid aUid ) const { + RDEBUG("0", 0); QString location = 0; switch ( aUid.iUid ) @@ -252,7 +256,7 @@ void CSecModUIModel::ShowErrorNote(TInt aError) const { QString sError; - + RDEBUG("aError", aError); switch (aError) { case KErrCancel: @@ -292,6 +296,7 @@ // void CSecModUIModel::OpenTokenL(TInt aTokenIndex) { + RDEBUG("0", 0); ResetAndDestroyAOs(); iKeyStore = iAOKeyStores[aTokenIndex]; } @@ -316,6 +321,7 @@ // void CSecModUIModel::InitAuthObjectsL() { + RDEBUG("0", 0); TInt err = KErrNone; // Symbian's file key store does not support // MCTAuthenticationObjectList interface, so we need to use @@ -369,6 +375,7 @@ // void CSecModUIModel::ListAuthObjectsL() { + RDEBUG("0", 0); if (0 >= iAOArray.Count()) { __ASSERT_ALWAYS(iAOList, Panic(EPanicNullPointer)); @@ -420,6 +427,7 @@ // QString CSecModUIModel::PINStatus( TInt aIndex, TBool aShowBlockedNote ) const { + RDEBUG("0", 0); __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange)); QString pinStatus; TUint32 status = iAOArray[aIndex]->Status(); @@ -486,6 +494,7 @@ // void CSecModUIModel::ChangeOrUnblockPinL(TInt aIndex) { + RDEBUG("0", 0); __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange)); TUint32 status = iAOArray[aIndex]->Status(); @@ -531,6 +540,7 @@ // void CSecModUIModel::ChangePinL(TInt aIndex) { + RDEBUG("0", 0); __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange)); TInt err = KErrNone; @@ -596,6 +606,7 @@ // void CSecModUIModel::DeleteKeysL(TInt aTokenIndex) { + RDEBUG("0", 0); __ASSERT_ALWAYS(aTokenIndex < iAOKeyStores.Count(), Panic(EPanicIndexOutOfRange)); RMPointerArray keyInfos; CleanupClosePushL(keyInfos); @@ -647,6 +658,7 @@ // QVector< QPair > CSecModUIModel::GetSecModDetailsL() { + RDEBUG("0", 0); MCTToken& token = iKeyStore->Token(); QVector< QPair > securityModDetails; @@ -723,6 +735,7 @@ const TDesC& aValue, QString aNullDescription) { + RDEBUG("0", 0); if( aValue.Length() == 0 ) { aSecModDetails.append(QPair(aLabel, aNullDescription)); @@ -785,6 +798,7 @@ // void CSecModUIModel::ChangePinNrL(TInt aIndex) { + RDEBUG("0", 0); ChangePinL(aIndex+1); } @@ -826,6 +840,7 @@ // TBool CSecModUIModel::PinChangeable(TInt aIndex) const { + RDEBUG("0", 0); __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange)); TUint32 status = iAOArray[aIndex]->Status(); TBool ret = ETrue; @@ -875,6 +890,7 @@ // TBool CSecModUIModel::PinRequestChangeable(TInt aIndex) const { + RDEBUG("0", 0); __ASSERT_ALWAYS(aIndex < iAOArray.Count(), Panic(EPanicIndexOutOfRange)); TUint32 status = iAOArray[aIndex]->Status(); TBool ret = EFalse; diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpsecmodsyncwrapper.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpsecmodsyncwrapper.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpsecmodsyncwrapper.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -26,7 +26,7 @@ #include #include #include - +#include <../../inc/cpsecplugins.h> // ============================ MEMBER FUNCTIONS =============================== @@ -62,6 +62,7 @@ // CSecModUISyncWrapper* CSecModUISyncWrapper::NewL() { + RDEBUG("0", 0); CSecModUISyncWrapper* wrap = CSecModUISyncWrapper::NewLC(); CleanupStack::Pop(wrap); return wrap; @@ -102,6 +103,7 @@ TInt CSecModUISyncWrapper::GetAuthObjectInterface( MCTToken& aToken, MCTTokenInterface*& aTokenInterface) { + RDEBUG("0", 0); if( !IsActive() && !iWait.IsStarted() ) { iOperation = EOperationGetAOInterface; @@ -148,6 +150,7 @@ RMPointerArray& aKeysInfos, const TCTKeyAttributeFilter& aFilter) { + RDEBUG("0", 0); if( !IsActive() && !iWait.IsStarted() ) { iOperation = EOperationListKeys; @@ -169,6 +172,7 @@ CUnifiedKeyStore& aKeyStore, TCTTokenObjectHandle aHandle) { + RDEBUG("0", 0); if( !IsActive() && !iWait.IsStarted() ) { iOperation = EOperationDelKey; @@ -189,6 +193,7 @@ TInt CSecModUISyncWrapper::ChangeReferenceData( MCTAuthenticationObject& aAuthObject) { + RDEBUG("0", 0); if( !IsActive() && !iWait.IsStarted() ) { iOperation = EOperationChangeReferenceData; @@ -209,6 +214,7 @@ TInt CSecModUISyncWrapper::UnblockAuthObject( MCTAuthenticationObject& aAuthObject) { + RDEBUG("0", 0); if( !IsActive() && !iWait.IsStarted() ) { iOperation = EOperationUnblockAO; @@ -229,6 +235,7 @@ TInt CSecModUISyncWrapper::EnableAuthObject( MCTAuthenticationObject& aAuthObject) { + RDEBUG("0", 0); if( !IsActive() && !iWait.IsStarted() ) { iOperation = EOperationEnableAO; @@ -291,6 +298,7 @@ MCTAuthenticationObject& aAuthObject, TInt& aStime ) { + RDEBUG("0", 0); if( !IsActive() && !iWait.IsStarted() ) { iOperation = EOperationTimeRemAO; @@ -311,6 +319,7 @@ // void CSecModUISyncWrapper::DoCancel() { + RDEBUG("iOperation", iOperation); switch ( iOperation ) { case EOperationInit: diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpsecmoduleinfoview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpsecmoduleinfoview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpsecmoduleinfoview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -44,13 +44,14 @@ #include #include - +#include <../../inc/cpsecplugins.h> #include "cpsecmoduleinfoview.h" CpSecmoduleInfoView::CpSecmoduleInfoView(const QVector< QPair >& securityDetails, QGraphicsItem *parent /*= 0*/) : CpBaseSettingView(0,parent) { + RDEBUG("0", 0); setTitle(tr("Module info")); std::auto_ptr layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical))); @@ -75,6 +76,7 @@ layout->addItem(listSecurityDetails); setLayout(layout.get()); layout.release(); + RDEBUG("0", 0); } CpSecmoduleInfoView::~CpSecmoduleInfoView() diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpsecmodview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpsecmodview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpsecmodview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -42,7 +42,7 @@ #include #include - +#include <../../inc/cpsecplugins.h> #include "cpsecmodview.h" #include "cpsecmodmodel.h" #include "cpmoduleview.h" @@ -55,6 +55,7 @@ mAccessView(NULL), mPrevView(NULL) { + RDEBUG("0", 0); try { QT_TRAP_THROWING(mSecModUIModel.OpenTokenL(mPos)); @@ -72,7 +73,7 @@ moduleWidget->setText("\tModule PIN"); listSecView->addItem(moduleWidget.get()); moduleWidget.release(); - + RDEBUG("count", count); if( count == 2 ) { std::auto_ptr signingWidget(q_check_ptr(new HbListWidgetItem())); @@ -112,6 +113,7 @@ void CpSecModView::showNextView( const QModelIndex& modelIndex ) { + RDEBUG("0", 0); try { mAccessView = q_check_ptr(new CpModuleView((TSecModViews)modelIndex.row(),mSecModUIModel)); @@ -128,6 +130,7 @@ void CpSecModView::displayPrevious() { + RDEBUG("0", 0); try { mainWindow()->removeView(mAccessView); diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpadvancedsecplugin/src/cpsecurityview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpsecurityview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpadvancedsecplugin/src/cpsecurityview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -41,6 +41,8 @@ #include +#include <../../inc/cpsecplugins.h> + #include "cpsecurityview.h" #include "cpsecmodview.h" #include "cpcertview.h" @@ -57,6 +59,7 @@ mPos(0), mNote(NULL) { + RDEBUG("0", 0); setTitle(hbTrId("txt_certificate_manager_setlabel_advanced_security")); std::auto_ptr layout(q_check_ptr(new QGraphicsLinearLayout(Qt::Vertical))); @@ -87,7 +90,7 @@ HbListWidget* listSecView = q_check_ptr(new HbListWidget(this)); QMap keystoreLabels; - + RDEBUG("0", 0); try { QT_TRAP_THROWING( @@ -123,7 +126,7 @@ listSecView->addItem(emptyWidget.get()); emptyWidget.release(); } - + RDEBUG("0", 0); std::auto_ptr certificatesList(q_check_ptr(new HbGroupBox())); certificatesList->setHeading(hbTrId("txt_certificate_manager_setlabel_certificates")); certificatesList->setContentWidget(listCertView); @@ -144,6 +147,8 @@ layout->addItem(securityModuleList.get()); securityModuleList.release(); + mContextMenu = q_check_ptr(new HbMenu()); + setLayout(layout.get()); layout.release(); } @@ -174,10 +179,12 @@ delete mSecModUIModel; delete mNote; + delete mContextMenu; } void CpSecurityView::showCodeView() { + RDEBUG("0", 0); try { mSecModView = q_check_ptr(new CpSecModView(mPos, *mSecModUIModel)); @@ -200,6 +207,7 @@ void CpSecurityView::showWIMview() { + RDEBUG("0", 0); try { QObject::connect(mSecModView , SIGNAL(aboutToClose()), this, SLOT(viewDone())); @@ -230,6 +238,7 @@ void CpSecurityView::displayCert(const QModelIndex& modelIndex) { + RDEBUG("0", 0); try { mCertView = q_check_ptr(new CpCertView(modelIndex)); @@ -246,6 +255,7 @@ void CpSecurityView::displayPrevious() { + RDEBUG("0", 0); try { mainWindow()->removeView(mCertView); @@ -261,31 +271,32 @@ void CpSecurityView::indicateLongPress(HbAbstractViewItem *item,QPointF coords) { + RDEBUG("0", 0); try { - std::auto_ptr contextMenu(q_check_ptr(new HbMenu())); + mContextMenu->clearActions(); mPos = item->modelIndex().row(); std::auto_ptr openModule(q_check_ptr(new HbAction("Open"))); connect(openModule.get(), SIGNAL(triggered()), this, SLOT( showCodeView())); - contextMenu->addAction(openModule.get()); + mContextMenu->addAction(openModule.get()); openModule.release(); if(mSecModUIModel->IsTokenDeletable(mPos)) { std::auto_ptr deleteModule(q_check_ptr(new HbAction("Delete"))); connect(deleteModule.get(), SIGNAL(triggered()), this, SLOT( deleteModule())); - contextMenu->addAction(deleteModule.get()); + mContextMenu->addAction(deleteModule.get()); deleteModule.release(); } std::auto_ptr moduleInfo(q_check_ptr(new HbAction("Module Info"))); connect(moduleInfo.get(), SIGNAL(triggered()), this, SLOT( moduleDetails())); - contextMenu->addAction(moduleInfo.get()); + mContextMenu->addAction(moduleInfo.get()); moduleInfo.release(); - contextMenu->open(); - contextMenu->setPreferredPos(coords); + mContextMenu->setPreferredPos(coords); + mContextMenu->open(); } catch(const std::exception& exception) { @@ -295,6 +306,7 @@ void CpSecurityView::deleteModule() { + RDEBUG("0", 0); try { @@ -320,6 +332,7 @@ } void CpSecurityView::dialogClosed(HbAction* action) { + RDEBUG("0", 0); if (action != mNote->primaryAction()) { return; @@ -339,6 +352,7 @@ void CpSecurityView::moduleDetails() { + RDEBUG("0", 0); try { QVector< QPair > securityDetails; @@ -358,6 +372,7 @@ void CpSecurityView::displayPreviousFromModInfo() { + RDEBUG("0", 0); try { mainWindow()->removeView(mModuleinfoView); diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/cpplugincommon.pri --- a/cpsecplugins/cpplugincommon.pri Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/cpplugincommon.pri Thu Jun 24 12:46:20 2010 +0300 @@ -16,7 +16,7 @@ include (common.pri) -LIBS += -lcpframework -lcpcategorymodel +LIBS += -lcpframework symbian: plugin { # copy qtstub and manifest diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/devicelockplugin/src/cpdevicelockplugin.cpp --- a/cpsecplugins/devicelockplugin/src/cpdevicelockplugin.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/devicelockplugin/src/cpdevicelockplugin.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -17,7 +17,7 @@ #include "cpdevicelockplugin.h" #include "cpdevicelockpluginview.h" #include - +#include <../../inc/cpsecplugins.h> /* @@ -30,6 +30,7 @@ */ CpDeviceLockPlugin::CpDeviceLockPlugin() { + RDEBUG("0", 0); } @@ -56,6 +57,7 @@ */ QList CpDeviceLockPlugin::createSettingFormItemData(CpItemDataHelper &itemDataHelper) const { + RDEBUG("0", 0); return QList() << new CpSettingFormEntryItemDataImpl(itemDataHelper,tr("Device lock"), QString()); } diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/devicelockplugin/src/cpdevicelockpluginview.cpp --- a/cpsecplugins/devicelockplugin/src/cpdevicelockpluginview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/devicelockplugin/src/cpdevicelockpluginview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -43,7 +43,7 @@ #include "debug.h" #include #include - +#include <../../inc/cpsecplugins.h> @@ -112,6 +112,9 @@ TInt err = iALPeriodRep->Get(KSettingsAutoLockTime, autoLockVal); TInt index = GetAutoLockIndex(autoLockVal); Dprint((_L("Current AL period value %d"),autoLockVal)); + RDEBUG("err", err); + RDEBUG("index", index); + RDEBUG("autoLockVal", autoLockVal); //TODO: need to set autoLockVal in editor QStringList autolockPeriodList; autolockPeriodList << hbTrId("txt_devicelocking_button_off") @@ -141,6 +144,7 @@ TBool lockVal = mUiSecuSettings->IsLockEnabledL( RMobilePhone::ELockPhoneToICC); Dprint((_L("LockWhenSimChange enabled %d"),lockVal)); + RDEBUG("lockVal", lockVal); if (lockVal) { mLockWhenSimChangeItem->setContentWidgetData("text", hbTrId( @@ -167,6 +171,7 @@ TBool enabled = true; TBool val = mRemoteLockSettings->GetEnabled(enabled); Dprint((_L("Remote Lock Setting enabled %d"),val)); + RDEBUG("val", val); mDeviceRemoteLockItem = new HbDataFormModelItem( HbDataFormModelItem::ToggleValueItem, hbTrId( "txt_devicelocking_subhead_remote_locking")); @@ -245,6 +250,7 @@ void CpDeviceLockPluginView::onLockCodeClicked() { Dprint(_L("CpDeviceLockPluginView::onLockCodeClicked()..Enter")); + RDEBUG("0", 0); mUiSecuSettings->ChangeSecCodeL(); Dprint(_L("CpDeviceLockPluginView::onLockCodeClicked()..Exit")); } @@ -261,21 +267,27 @@ void CpDeviceLockPluginView::onAutoLockChanged(int index) { Dprint(_L("CpDeviceLockPluginView::onAutoLockChanged()..Enter")); + RDEBUG("index", index); if (index != mThemeComboPrevIndex) { //TODO: need to set user entered/selected value TInt lockValue = GetValueAtIndex(index); TInt newAutoLockVal = mUiSecuSettings->ChangeAutoLockPeriodL( lockValue); + RDEBUG("newAutoLockVal", newAutoLockVal); + RDEBUG("lockValue", lockValue); if (newAutoLockVal == lockValue) { Dprint(_L("onAutoLockChanged().AL setting success !!")); + RDEBUG("success", 1); TInt err = iALPeriodRep->Set(KSettingsAutoLockTime, lockValue); + RDEBUG("err", err); mThemeComboPrevIndex = index; } else { Dprint(_L("onAutoLockChanged()..Setting to previous value")); + RDEBUG("previous", 0); QVariant data(mThemeComboPrevIndex); mAutolockPeriodItem->setContentWidgetData( QString("currentIndex"), data); @@ -283,6 +295,7 @@ } Dprint(_L("CpDeviceLockPluginView::onAutoLockChanged()..Exit")); + RDEBUG("0", 0); } @@ -298,21 +311,28 @@ void CpDeviceLockPluginView::onLockMessageClicked() { Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..Exit")); + RDEBUG("0", 0); TBuf remoteLockCode; TBool remoteLockStatus(EFalse); TInt retVal = KErrNone; TInt autoLockVal = -1; retVal = mUiSecuSettings->ChangeRemoteLockStatusL(remoteLockStatus, remoteLockCode, autoLockVal); + RDEBUG("retVal", retVal); + RDEBUG("autoLockVal", autoLockVal); + RDEBUG("remoteLockStatus", remoteLockStatus); if (retVal) { Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..ChangeRemoteLockStatusL sucess")); + RDEBUG("sucess", 1); } else { Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..ChangeRemoteLockStatusL failed")); + RDEBUG("failed", 0); } Dprint(_L("CpDeviceLockPluginView::onLockMessageClicked()..Exit")); + RDEBUG("0", 0); } @@ -332,9 +352,10 @@ void CpDeviceLockPluginView::onAutoTextChanged(const QString& aText) { Dprint(_L("CpDeviceLockPluginView::onAutoTextChanged()..Enter")); + RDEBUG("0", 0); //TBool ret = DisplaySecurityDialog(); Dprint(_L("CpDeviceLockPluginView::onAutoTextChanged()..Exit")); - + RDEBUG("0", 0); } #endif @@ -350,13 +371,14 @@ { Q_UNUSED(aEndIn); Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..Enter")); + RDEBUG("0", 0); HbDataFormModelItem *item = formModel->itemFromIndex(aStartIn); if ((item->type() == HbDataFormModelItem::ToggleValueItem) && (item->data(HbDataFormModelItem::LabelRole).toString() == hbTrId("txt_devicelocking_subhead_remote_locking"))) { - + RDEBUG("mHack", mHack); //The following If-Else condition should be removed once orbit team fix the issue with datachanged() signal /****************************************************************************************************************/ if ((mHack % 2) == 0) //need to capture second datachanged() signal , not first one. @@ -375,6 +397,9 @@ TBool remoteLockStatus(EFalse); CRemoteLockSettings *remoteLockSetting = CRemoteLockSettings::NewL(); TInt err = iALPeriodRep->Get(KSettingsAutoLockTime, autoLockVal); + RDEBUG("err", err); + RDEBUG("autoLockVal", autoLockVal); + RDEBUG("retVal", retVal); QVariant remLockData = mDeviceRemoteLockItem->contentWidgetData( QString("text")); if (remLockData.toString() == hbTrId( @@ -390,13 +415,16 @@ retVal = mUiSecuSettings->ChangeRemoteLockStatusL( remoteLockStatus, remoteLockCode, autoLockVal); } + RDEBUG("retVal", retVal); if (retVal == KErrNone) { + RDEBUG("remoteLockStatus", remoteLockStatus); if (remoteLockStatus) { if (remoteLockSetting->SetEnabledL(remoteLockCode)) { Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetEnabledL success")); + RDEBUG("success", 1); mPrevRemLockData = mDeviceRemoteLockItem->contentWidgetData( QString("text")); @@ -405,6 +433,7 @@ { RollbackRemoteLockSettingState(); Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetEnabledL failed")); + RDEBUG("failed", 0); } } else @@ -412,6 +441,7 @@ if (mRemoteLockSettings->SetDisabled()) { Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetDisabled success")); + RDEBUG("success", 1); mPrevRemLockData = mDeviceRemoteLockItem->contentWidgetData( QString("text")); @@ -420,17 +450,20 @@ { RollbackRemoteLockSettingState(); Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..remoteLockSetting->SetDisabled failed")); + RDEBUG("failed", 0); } } } else { Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..RollbackRemoteLockSettingState")); + RDEBUG("Rollback", 0); RollbackRemoteLockSettingState(); } delete remoteLockSetting; } Dprint(_L("CpDeviceLockPluginView::onRemoteLockDataChanged..Exit")); + RDEBUG("0", 0); } @@ -453,6 +486,7 @@ == hbTrId( "txt_devicelocking_formlabel_lock_when_sim_changed"))) { + RDEBUG("mHack", mHack); //The following If-Else condition should be removed once orbit team fix the issue with datachanged() signal /****************************************************************************************************************/ if ((mHack % 2) == 0) //need to capture second datachanged() signal , not first one. @@ -467,6 +501,7 @@ /****************************************************************************************************************/ TBool ret = mUiSecuSettings->ChangeSimSecurityL(); + RDEBUG("ret", ret); if (!ret) { /* @@ -507,6 +542,7 @@ TInt CpDeviceLockPluginView::GetAutoLockIndex(TInt aValue) { TInt index = 0; + RDEBUG("ret", aValue); switch (aValue) { case 0: @@ -527,7 +563,7 @@ default: break; } - + RDEBUG("index", index); return index; } @@ -544,7 +580,7 @@ TInt CpDeviceLockPluginView::GetValueAtIndex(TInt aIndex) { TInt value = 0; - + RDEBUG("aIndex", aIndex); switch (aIndex) { case 0: @@ -565,7 +601,7 @@ default: break; } - + RDEBUG("value", value); return value; } @@ -581,6 +617,7 @@ */ void CpDeviceLockPluginView::RollbackRemoteLockSettingState() { + RDEBUG("0", 0); /* * disconnect to datachanged() signal as we are not interested in this signal * generated as a part of setContentWidgetData() API call below @@ -606,5 +643,5 @@ mRemoteLockMessageItem->setEnabled(true); else mRemoteLockMessageItem->setEnabled(false); - + RDEBUG("0", 0); } diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/devicelockplugin/src/cpremotelockdataformviewitem.cpp --- a/cpsecplugins/devicelockplugin/src/cpremotelockdataformviewitem.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/devicelockplugin/src/cpremotelockdataformviewitem.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,7 +18,7 @@ #include "cpremotelockdataformviewitem.h" #include #include - +#include <../../inc/cpsecplugins.h> /* @@ -58,6 +58,7 @@ */ HbAbstractViewItem* CpRemoteLockDataFormViewItem::createItem() { + RDEBUG("0", 0); return new CpRemoteLockDataFormViewItem(*this); } @@ -73,6 +74,7 @@ bool CpRemoteLockDataFormViewItem::canSetModelIndex(const QModelIndex &index) const { int type = index.data(HbDataFormModelItem::ItemTypeRole).toInt(); + RDEBUG("type", type); return ((type == CpRemoteLockItem) || (type == CpCodeEditItem)); } @@ -88,6 +90,7 @@ HbWidget *CpRemoteLockDataFormViewItem::createCustomWidget() { int type = modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt(); + RDEBUG("type", type); if (type == CpCodeEditItem) { CpLockEdit *edit = new CpLockEdit("1234"); @@ -140,6 +143,7 @@ */ void CpLockEdit::mousePressEvent(QGraphicsSceneMouseEvent *event) { + RDEBUG("0", 0); if (event->button() != Qt::LeftButton) { event->ignore(); return; diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/inc/cpsecplugins.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpsecplugins/inc/cpsecplugins.h Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,30 @@ +/* + * 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: + * + */ + +#ifndef CPSECPLUGINS_H +#define CPSECPLUGINS_H + +#include + +// #if defined _DEBUG +#ifdef _DEBUG +#define RDEBUG( x, y ) RDebug::Printf( "%s %s (%u) %s=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, x, y ); +#else +#define RDEBUG( x, y ) +#endif + +#endif //CPSECPLUGINS_H diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/inc/cppincodepluginview.h --- a/cpsecplugins/simpincodeplugin/inc/cppincodepluginview.h Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/inc/cppincodepluginview.h Thu Jun 24 12:46:20 2010 +0300 @@ -24,6 +24,7 @@ // Forward declarations class SecCodeSettings; class HbDataFormModelItem; +class HbDataFormModel; // Class declaration class CpPinCodePluginView : public CpBaseSettingView @@ -37,10 +38,11 @@ private slots: void changePinCode(); void changePin2Code(); - void changePinCodeRequest(); + void toggleChange(QModelIndex startIn, QModelIndex endIn); private: SecCodeSettings *mSecCodeSettings; + HbDataFormModel *mFormModel; HbDataFormModelItem *mPinCodeRequestItem; }; diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/rom/pincodeplugin.iby --- a/cpsecplugins/simpincodeplugin/rom/pincodeplugin.iby Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/rom/pincodeplugin.iby Thu Jun 24 12:46:20 2010 +0300 @@ -21,9 +21,9 @@ #include #include -// pincodeplugin.iby should not export pincodeplugin.dll because controlpanelui.iby already exports cppincodeplugin.dll -// file=ABI_DIR\BUILD_DIR\pincodeplugin.dll SHARED_LIB_DIR\pincodeplugin.dll +// pincodeplugin.iby should export cppincodeplugin.dll because controlpanelui.iby does NOT exports cppincodeplugin.dll +file=ABI_DIR\BUILD_DIR\cppincodeplugin.dll SHARED_LIB_DIR\cppincodeplugin.dll -data=/epoc32/data/c/resource/qt/plugins/controlpanel/pincodeplugin.qtplugin resource/qt/plugins/controlpanel/pincodeplugin.qtplugin +data=/epoc32/data/c/resource/qt/plugins/controlpanel/cppincodeplugin.qtplugin resource/qt/plugins/controlpanel/cppincodeplugin.qtplugin #endif diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/cppincodeplugin.cpp --- a/cpsecplugins/simpincodeplugin/src/cppincodeplugin.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/cppincodeplugin.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -17,6 +17,7 @@ // System includes #include +#include <../../inc/cpsecplugins.h> // User includes #include "cppincodeplugin.h" @@ -36,6 +37,7 @@ */ CpPinCodePlugin::CpPinCodePlugin() { +RDEBUG("0", 0); } /*! @@ -51,6 +53,7 @@ QList CpPinCodePlugin::createSettingFormItemData( CpItemDataHelper &itemDataHelper) const { + RDEBUG("0", 0); return QList() << new CpSettingFormEntryItemDataImpl (itemDataHelper, tr("PIN code"), QString()); diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/cppincodepluginview.cpp --- a/cpsecplugins/simpincodeplugin/src/cppincodepluginview.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/cppincodepluginview.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -25,6 +25,7 @@ // User includes #include "cppincodepluginview.h" +#include <../../inc/cpsecplugins.h> /*! \class CpPinCodePluginView @@ -41,6 +42,7 @@ CpPinCodePluginView::CpPinCodePluginView(QGraphicsItem *parent /*= 0*/) : CpBaseSettingView(0,parent), mSecCodeSettings(new SecCodeSettings()) { + RDEBUG("0", 0); HbDataForm *form = qobject_cast(widget()); if (form) { QList protoTypeList = form->itemPrototypes(); @@ -48,7 +50,7 @@ form->setItemPrototypes(protoTypeList); form->setHeading(tr("PIN code")); - HbDataFormModel *formModel = new HbDataFormModel(); + mFormModel = new HbDataFormModel(this); mPinCodeRequestItem = new HbDataFormModelItem( HbDataFormModelItem::ToggleValueItem, tr("PIN code requests")); @@ -60,10 +62,10 @@ mPinCodeRequestItem->setContentWidgetData("text",tr("Off")); mPinCodeRequestItem->setContentWidgetData("additionalText", tr("Off")); } - - form->addConnection(mPinCodeRequestItem, SIGNAL(clicked()), this, - SLOT(changePinCodeRequest())); - formModel->appendDataFormItem(mPinCodeRequestItem); + RDEBUG("form->addConnection", 1); + connect(mFormModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(toggleChange(QModelIndex, QModelIndex))); + mFormModel->appendDataFormItem(mPinCodeRequestItem); HbDataFormModelItem *pinCodeItem = new HbDataFormModelItem( static_cast @@ -73,7 +75,7 @@ pinCodeItem->setContentWidgetData("readOnly", true); form->addConnection(pinCodeItem, SIGNAL(clicked()), this, SLOT(changePinCode())); - formModel->appendDataFormItem(pinCodeItem); + mFormModel->appendDataFormItem(pinCodeItem); HbDataFormModelItem *pin2CodeItem = new HbDataFormModelItem( static_cast @@ -83,9 +85,9 @@ pin2CodeItem->setContentWidgetData("readOnly", true); form->addConnection(pin2CodeItem, SIGNAL(clicked()), this, SLOT(changePin2Code())); - formModel->appendDataFormItem(pin2CodeItem); - - form->setModel(formModel); + mFormModel->appendDataFormItem(pin2CodeItem); + RDEBUG("form->setModel", 1); + form->setModel(mFormModel); } } @@ -98,10 +100,51 @@ } /*! + response for click pin code request +*/ +void CpPinCodePluginView::toggleChange(QModelIndex startIn, + QModelIndex /*endIn*/) +{ + RDEBUG("0", 0); + HbDataFormModelItem *item = mFormModel->itemFromIndex(startIn); + if(item->type() == HbDataFormModelItem::ToggleValueItem) { + if (mSecCodeSettings->changePinCodeRequest()) { + RDEBUG("got changePinCodeRequest", 1); + disconnect(mFormModel, + SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, + SLOT(toggleChange(QModelIndex, QModelIndex))); + RDEBUG("disconnected", 1); + QString text = mPinCodeRequestItem->contentWidgetData( + "text").toString(); + if (0 == text.compare("On")) { + mPinCodeRequestItem->setContentWidgetData("text", + tr("Off")); + mPinCodeRequestItem->setContentWidgetData("additionalText", + tr("Off")); + } else { + mPinCodeRequestItem->setContentWidgetData("text", + tr("On")); + mPinCodeRequestItem->setContentWidgetData("additionalText", + tr("On")); + } + RDEBUG("reconnect", 1); + connect(mFormModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(toggleChange(QModelIndex, QModelIndex))); + } + else + { + RDEBUG("value was not changed", 0); + } + } + RDEBUG("0", 0); +} + +/*! response for click pin code */ void CpPinCodePluginView::changePinCode() { + RDEBUG("0", 0); mSecCodeSettings->changePinCode(); } @@ -110,26 +153,6 @@ */ void CpPinCodePluginView::changePin2Code() { + RDEBUG("0", 0); mSecCodeSettings->changePin2Code(); } - -/*! - response for click pin code request -*/ -void CpPinCodePluginView::changePinCodeRequest() -{ - if (mSecCodeSettings->changePinCodeRequest()) { - QString text = mPinCodeRequestItem->contentWidgetData("text").toString(); - if (0 == text.compare("On")) { - mPinCodeRequestItem->setContentWidgetData("text", - tr("Off")); - mPinCodeRequestItem->setContentWidgetData("additionalText", - tr("Off")); - } else { - mPinCodeRequestItem->setContentWidgetData("text", - tr("On")); - mPinCodeRequestItem->setContentWidgetData("additionalText", - tr("On")); - } - } -} diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/seccodeedit.cpp --- a/cpsecplugins/simpincodeplugin/src/seccodeedit.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/seccodeedit.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -20,6 +20,7 @@ // User includes #include "seccodeedit.h" +#include <../../inc/cpsecplugins.h> // ======== MEMBER FUNCTIONS ======== @@ -43,6 +44,7 @@ */ void SecCodeEdit::mousePressEvent(QGraphicsSceneMouseEvent *event) { + RDEBUG("0", 0); if (event->button() != Qt::LeftButton) { event->ignore(); return; diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/seccodeeditdataformviewitem.cpp --- a/cpsecplugins/simpincodeplugin/src/seccodeeditdataformviewitem.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/seccodeeditdataformviewitem.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,6 +18,7 @@ // User includes #include "seccodeeditdataformviewitem.h" #include "seccodeedit.h" +#include <../../inc/cpsecplugins.h> // ======== MEMBER FUNCTIONS ======== @@ -27,6 +28,7 @@ SecCodeEditDataFormViewItem::SecCodeEditDataFormViewItem( QGraphicsItem *parent): HbDataFormViewItem(parent) { + RDEBUG("0", 0); } /*! @@ -41,6 +43,7 @@ */ HbAbstractViewItem *SecCodeEditDataFormViewItem::createItem() { + RDEBUG("0", 0); return new SecCodeEditDataFormViewItem( *this); } @@ -51,6 +54,7 @@ const QModelIndex &index) const { int type = index.data(HbDataFormModelItem::ItemTypeRole).toInt(); + RDEBUG("type", type); return type == SecCodeEditItem; } @@ -60,13 +64,15 @@ HbWidget *SecCodeEditDataFormViewItem::createCustomWidget() { int type = modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt(); + RDEBUG("type", type); if (type == SecCodeEditItem) { SecCodeEdit *edit = new SecCodeEdit("1234"); edit->setEchoMode(HbLineEdit::Password); + RDEBUG("edit->setReadOnly", 1); edit->setReadOnly(true); return edit; } - + RDEBUG("0", 0); return 0; } diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/seccodemodel.cpp --- a/cpsecplugins/simpincodeplugin/src/seccodemodel.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/seccodemodel.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,6 +18,7 @@ // User includes #include "seccodemodel.h" #include "seccodemodel_p.h" +#include <../../inc/cpsecplugins.h> // ======== MEMBER FUNCTIONS ======== @@ -43,6 +44,7 @@ */ bool SecCodeModel::pinCodeRequest() const { + RDEBUG("0", 0); return d_ptr->pinCodeRequest(); } @@ -51,6 +53,7 @@ */ bool SecCodeModel::changePinCodeRequest() { + RDEBUG("0", 0); return d_ptr->changePinCodeRequest(); } @@ -59,6 +62,7 @@ */ int SecCodeModel::changePinCode() { + RDEBUG("0", 0); return d_ptr->changePinCode(); } @@ -67,5 +71,6 @@ */ int SecCodeModel::changePin2Code() { + RDEBUG("0", 0); return d_ptr->changePin2Code(); } diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/seccodemodel_symbian.cpp --- a/cpsecplugins/simpincodeplugin/src/seccodemodel_symbian.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/seccodemodel_symbian.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -23,6 +23,7 @@ // User includes #include "seccodemodel_p.h" #include "seccodeuiglobal.h" +#include <../../inc/cpsecplugins.h> // ======== MEMBER FUNCTIONS ======== @@ -50,6 +51,7 @@ */ void SecCodeModelPrivate::ConstructL() { + RDEBUG("0", 0); iSecurity = CSecuritySettings::NewL(); } @@ -68,9 +70,11 @@ */ bool SecCodeModelPrivate::pinCodeRequest() const { + RDEBUG("0", 0); bool isLockEnabled = false; QT_TRAP_THROWING(isLockEnabled = iSecurity->IsLockEnabledL( RMobilePhone::ELockICC)); + RDEBUG("isLockEnabled", isLockEnabled); return isLockEnabled; } @@ -79,8 +83,10 @@ */ bool SecCodeModelPrivate::changePinCodeRequest() { + RDEBUG("0", 0); bool result = false; QT_TRAP_THROWING(result =iSecurity->ChangePinRequestL()); + RDEBUG("result", result); return result; } @@ -89,7 +95,9 @@ */ int SecCodeModelPrivate::changePinCode() { + RDEBUG("0", 0); QT_TRAP_THROWING(iSecurity->ChangePinL()); + RDEBUG("0", 0); return 0; } @@ -98,6 +106,8 @@ */ int SecCodeModelPrivate::changePin2Code() { + RDEBUG("0", 0); QT_TRAP_THROWING(iSecurity->ChangePin2L()); + RDEBUG("0", 0); return 0; } diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/seccodemodel_win.cpp --- a/cpsecplugins/simpincodeplugin/src/seccodemodel_win.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/seccodemodel_win.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -17,6 +17,7 @@ // User includes #include "seccodemodel_p.h" +#include <../../inc/cpsecplugins.h> // ======== MEMBER FUNCTIONS ======== /*! @@ -54,6 +55,7 @@ */ bool SecCodeModelPrivate::pinCodeRequest() const { + RDEBUG("0", 0); QString information; information = QString("Emulator NOT supported!"); HbMessageBox messageBox(information); @@ -66,6 +68,7 @@ */ bool SecCodeModelPrivate::changePinCodeRequest() { + RDEBUG("0", 0); QString information; information = QString("Emulator NOT supported!"); HbMessageBox messageBox(information); @@ -78,6 +81,7 @@ */ int SecCodeModelPrivate::changePinCode() { + RDEBUG("0", 0); QString information; information = QString("Emulator NOT supported!"); HbMessageBox messageBox(information); @@ -90,6 +94,7 @@ */ int SecCodeModelPrivate::changePin2Code() { + RDEBUG("0", 0); QString information; information = QString("Emulator NOT supported!"); HbMessageBox messageBox(information); diff -r aad866c37519 -r cc1cea6aabaf cpsecplugins/simpincodeplugin/src/seccodesettings.cpp --- a/cpsecplugins/simpincodeplugin/src/seccodesettings.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/cpsecplugins/simpincodeplugin/src/seccodesettings.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,6 +18,7 @@ // User includes #include "seccodesettings.h" #include "seccodemodel.h" +#include <../../inc/cpsecplugins.h> // Class declaration class SecCodeSettingsPrivate @@ -44,7 +45,7 @@ SecCodeSettings::SecCodeSettings(QObject * parent /*= 0*/) : QObject(parent), d_ptr(new SecCodeSettingsPrivate()) { - +RDEBUG("0", 0); } /*! @@ -60,6 +61,7 @@ */ bool SecCodeSettings::pinCodeRequest() const { + RDEBUG("0", 0); return d_ptr->mSecCodeModel->pinCodeRequest(); } @@ -68,6 +70,7 @@ */ bool SecCodeSettings::changePinCodeRequest() { + RDEBUG("0", 0); return d_ptr->mSecCodeModel->changePinCodeRequest(); } @@ -76,6 +79,7 @@ */ void SecCodeSettings::changePinCode() { + RDEBUG("0", 0); d_ptr->mSecCodeModel->changePinCode(); } @@ -84,5 +88,6 @@ */ void SecCodeSettings::changePin2Code() { + RDEBUG("0", 0); d_ptr->mSecCodeModel->changePin2Code(); } diff -r aad866c37519 -r cc1cea6aabaf package_definition.xml --- a/package_definition.xml Fri Jun 11 14:28:40 2010 +0300 +++ b/package_definition.xml Thu Jun 24 12:46:20 2010 +0300 @@ -1,113 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r aad866c37519 -r cc1cea6aabaf package_map.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_map.xml Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,2 @@ + + \ No newline at end of file diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CTSecurityDialogs/Group/CTSecDialogImpl.mmp --- a/pkiutilities/CTSecurityDialogs/Group/CTSecDialogImpl.mmp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CTSecurityDialogs/Group/CTSecDialogImpl.mmp Thu Jun 24 12:46:20 2010 +0300 @@ -47,10 +47,13 @@ SYSTEMINCLUDE ../../DeviceToken/Inc SYSTEMINCLUDE ../../../inc // securityservices/inc directory MW_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore +SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets USERINCLUDE ../NotifInc USERINCLUDE ../ClientInc +USERINCLUDE ../../../securitydialogs/SecUi/Inc SOURCEPATH ../NotifSrc @@ -63,7 +66,7 @@ SOURCE CTPinPinQueryDialog.cpp SOURCE CTCertificateQuery.cpp SOURCE CTSecurityDialogsAO.cpp -SOURCE CTNoTrustQuery.cpp +SOURCE CTUntrustedCertQuery.cpp SOURCE CTInvalidCertNote.cpp LIBRARY EUSER.LIB @@ -88,6 +91,9 @@ LIBRARY aknlayout.lib LIBRARY X500.lib LIBRARY DevTokenClient.lib +LIBRARY HbCore.lib // CHbDeviceDialog +LIBRARY HbWidgets.lib +LIBRARY secui.lib DEBUGLIBRARY flogger.lib diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CTSecurityDialogs/NotifInc/CTNoTrustQuery.h --- a/pkiutilities/CTSecurityDialogs/NotifInc/CTNoTrustQuery.h Fri Jun 11 14:28:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2002-2009 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: -* -*/ - - - -#ifndef CTNOTRUSTQUERY_H -#define CTNOTRUSTQUERY_H - -// INCLUDES - -#include - -// FORWARD DECLARATIONS - -class CCTSecurityDialogsAO; -class CAknSinglePopupMenuStyleListBox; - -// CLASS DECLARATION - -/** -* Notifier class for showing SSL security dialogs -*/ -NONSHARABLE_CLASS( CCTNoTrustQuery ): public CAknQueryDialog - { - public: // constructors and destructor - - CCTNoTrustQuery( - CCTSecurityDialogsAO& aNotifier, - TBool& aRetVal, - TRequestStatus& aClientStatus, - HBufC* aServerName, - TBool aShowPermAccept, - TBool& aIsDeleted ); - - virtual ~CCTNoTrustQuery(); - - private: // from CEikDialog - TBool OkToExitL( TInt aButtonId ); - void PostLayoutDynInitL(); - - private: // New functions - TBool OptionsMenuL(); - - private: // data - CCTSecurityDialogsAO& iNotifier; - TBool& iRetVal; //Dialog response - TRequestStatus* iClientStatus; - HBufC* iServerName; - TBool iShowPermAccept; - TBool& iDeleted; - }; - -#endif // CTNOTRUSTQUERY_H - diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CTSecurityDialogs/NotifInc/CTSecurityDialogsAO.h --- a/pkiutilities/CTSecurityDialogs/NotifInc/CTSecurityDialogsAO.h Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CTSecurityDialogs/NotifInc/CTSecurityDialogsAO.h Thu Jun 24 12:46:20 2010 +0300 @@ -323,9 +323,6 @@ TBool& iDeleted; - CAknQueryDialog* iQueryDialog; - TBool iQueryDialogDeleted; - CCTPinQueryDialog* iPinQueryDialog; TBool iPinQueryDialogDeleted; }; diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CTSecurityDialogs/NotifInc/CTUntrustedCertQuery.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/CTSecurityDialogs/NotifInc/CTUntrustedCertQuery.h Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,78 @@ +/* +* 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. +* +*/ + +#ifndef CTUNTRUSTEDCERTQUERY_H +#define CTUNTRUSTEDCERTQUERY_H + +#include // CActive +#include // MHbDeviceDialogObserver +#include // TValidationError + +class CHbDeviceDialogSymbian; +class CHbSymbianVariantMap; + + +/** +* Displays untrusted certificate query. +* Untrusted certificate query dialog is displayed for secure connection +* (SSL/TLS) server authentication failure errors. CCTUntrustedCertQuery +* class uses UntrustedCertificateDialog device dialog to show the query. +*/ +NONSHARABLE_CLASS( CCTUntrustedCertQuery ) : public CActive, public MHbDeviceDialogObserver + { + public: // constructors and destructor + static CCTUntrustedCertQuery* NewLC( TValidationError aValidationError, + const TDesC8& aCertificate, const TDesC& aServerName, + TBool aCanHandlePermanentAccept ); + ~CCTUntrustedCertQuery(); + + public: // new functions + enum TResponse { + EQueryRejected, + EQueryAccepted, + EQueryAcceptedPermanently + }; + void ShowQueryAndWaitForResponseL( TResponse& aResponse ); + + protected: // from CActive + void DoCancel(); + void RunL(); + + private: // from MHbDeviceDialogObserver + void DataReceived( CHbSymbianVariantMap& aData ); + void DeviceDialogClosed( TInt aCompletionCode ); + + private: // new functions + CCTUntrustedCertQuery( TValidationError aValidationError, + const TDesC8& aCertificate, const TDesC& aServerName, + TBool aCanHandlePermanentAccept ); + void ConstructL(); + + private: // data + TValidationError iValidationError; + const TDesC8& iCertificate; + const TDesC& iServerName; + TBool iCanHandlePermanentAccept; + CActiveSchedulerWait *iWait; + TInt iWaitCompletionCode; + CHbDeviceDialogSymbian* iDeviceDialog; + CHbSymbianVariantMap* iVariantMap; + TResponse iResponse; + }; + +#endif // CTUNTRUSTEDCERTQUERY_H + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CTSecurityDialogs/NotifSrc/CTNoTrustQuery.cpp --- a/pkiutilities/CTSecurityDialogs/NotifSrc/CTNoTrustQuery.cpp Fri Jun 11 14:28:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,213 +0,0 @@ -/* -* Copyright (c) 2006-2009 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: -* -*/ - - - -// INCLUDE FILES - -#include -#include "CTNoTrustQuery.h" -#include "CTSecurityDialogsAO.h" -#include "CTCertificateQuery.h" -#include -#include -#include -#include - - -// ================= MEMBER FUNCTIONS ========================================== - -// ----------------------------------------------------------------------------- -// CSecNotNoTrustQuery::CCTNoTrustQuery() -// ----------------------------------------------------------------------------- -// -CCTNoTrustQuery::CCTNoTrustQuery( - CCTSecurityDialogsAO& aNotifier, - TBool& aRetVal, - TRequestStatus& aClientStatus, - HBufC* aServerName, - TBool aShowPermAccept, - TBool& aIsDeleted ): - CAknQueryDialog( CAknQueryDialog::ENoTone ), - iNotifier( aNotifier ), - iRetVal( aRetVal ), - iClientStatus( &aClientStatus ), - iServerName( aServerName ), - iShowPermAccept( aShowPermAccept ), - iDeleted( aIsDeleted ) - { - iDeleted = EFalse; - } - -// ----------------------------------------------------------------------------- -// CSecNotNoTrustQuery::~CCTNoTrustQuery() -// ----------------------------------------------------------------------------- -// -CCTNoTrustQuery::~CCTNoTrustQuery() - { - // Allow application switching again - CEikonEnv* eikonEnv = CEikonEnv::Static(); - if( eikonEnv ) - { - CEikServAppUi* eikServAppUi = static_cast( eikonEnv->EikAppUi() ); - if( eikServAppUi ) - { - eikServAppUi->SuppressAppSwitching( EFalse ); - } - } - - // Complete the client request - if( iClientStatus && *iClientStatus == KRequestPending ) - { - iRetVal = EFalse; - User::RequestComplete( iClientStatus, KErrNone ); - } - - // Notify that the dialog has been deleted - iDeleted = ETrue; - } - -// ----------------------------------------------------------------------------- -// CSecNotNoTrustQuery::OkToExitL() -// ----------------------------------------------------------------------------- -// -TBool CCTNoTrustQuery::OkToExitL( TInt aButtonId ) - { - if ( aButtonId == EAknSoftkeyOptions || aButtonId == EAknSoftkeyOk ) - { - return OptionsMenuL(); - } - else - { - iRetVal = EFalse; - User::RequestComplete( iClientStatus, KErrNone ); - } - return ETrue; - } - -// ----------------------------------------------------------------------------- -// CCTNoTrustQuery::PostLayoutDynInitL() -// ----------------------------------------------------------------------------- -// -void CCTNoTrustQuery::PostLayoutDynInitL() - { - CAknQueryControl* control = QueryControl(); - if (control) - control->StartAnimationL(); - ((CEikServAppUi*)(CEikonEnv::Static())->EikAppUi())->SuppressAppSwitching( ETrue ); - } - -// ----------------------------------------------------------------------------- -// CCTNoTrustQuery::OptionsMenuL() -// ----------------------------------------------------------------------------- -TBool CCTNoTrustQuery::OptionsMenuL() - { - TBool ret = EFalse; - CAknSinglePopupMenuStyleListBox* list = - new( ELeave ) CAknSinglePopupMenuStyleListBox; - CleanupStack::PushL( list ); - CAknPopupList* popupList = CAknPopupList::NewL( - list, R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT, AknPopupLayouts::EMenuWindow ); - CleanupStack::PushL( popupList ); - list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect ); - list->CreateScrollBarFrameL( ETrue ); - list->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); - - TInt resourceid; - - if ( iShowPermAccept ) - { - resourceid = R_NOTRUST_MENUPANE; - } - else - { - resourceid = R_NOTRUST_MENUPANE_NO_PERM; - } - - CDesCArrayFlat* items = - CEikonEnv::Static()->ReadDesCArrayResourceL( resourceid ); - - CTextListBoxModel* model = list->Model(); - model->SetOwnershipType( ELbmOwnsItemArray ); - model->SetItemTextArray( items ); - - CleanupStack::Pop( popupList ); //popupList - if ( popupList->ExecuteLD() ) - { - if( !iDeleted ) - { - TInt index = list->CurrentItemIndex(); - if ( index == 0 ) // Accept now - { - iRetVal = EServerCertAcceptedTemporarily; - User::RequestComplete(iClientStatus, KErrNone); - ret = ETrue; - } - else if (( index == 1 ) && ( resourceid == R_NOTRUST_MENUPANE )) // Accept permanently - { - - HBufC* prompt = StringLoader::LoadLC( R_QTN_HTTPSEC_QUERY_PERM_ACCEPT_TEXT, *iServerName ); - - CAknMessageQueryDialog* note = CAknMessageQueryDialog::NewL( *prompt ); - - note->PrepareLC( R_HTTPSEC_QUERY_PERM_ACCEPT ); - note->SetPromptL( *prompt ); - - if ( note->RunLD() ) - { - iRetVal = EServerCertAcceptedPermanently; - User::RequestComplete( iClientStatus, KErrNone ); - ret = ETrue; - } - else - { - ret = EFalse; - } - - CleanupStack::PopAndDestroy( prompt ); - } - else if ((( index == 2 ) && ( resourceid == R_NOTRUST_MENUPANE )) || - (( index == 1 ) && ( resourceid == R_NOTRUST_MENUPANE_NO_PERM )) ) // Details - { - // We need to delay this implementation in other releases, because - // separate ICD was taken to 3.0. - CCTCertificateQuery* query = - CCTCertificateQuery::NewL( iNotifier ); - query->ExecuteLD( R_NOTRUST_CERTIFICATE_QUERY ); - ret = EFalse; - } - else - { - iRetVal = EServerCertNotAccepted; - User::RequestComplete( iClientStatus, KErrNone ); - ret = ETrue; - } - } - else - { - ret = EFalse; - } - } - else - { - ret = EFalse; - } - CleanupStack::PopAndDestroy( list ); // list - return ret; - } - diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CTSecurityDialogs/NotifSrc/CTSecurityDialogsAO.cpp --- a/pkiutilities/CTSecurityDialogs/NotifSrc/CTSecurityDialogsAO.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CTSecurityDialogs/NotifSrc/CTSecurityDialogsAO.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -24,7 +24,7 @@ #include "CTSelectCertificateDialog.h" #include "CTQueryDialog.h" #include "CTPinPinQueryDialog.h" -#include "CTNoTrustQuery.h" +#include "CTUntrustedCertQuery.h" #include "CTInvalidCertNote.h" #include #include @@ -46,6 +46,11 @@ #include #include +#include "SecQueryUi.h" // needed for password dialog + +#include // needed for Note dialogs +#include + // LOCAL CONSTANTS AND MACROS const TInt KCertArrayGranularity = 3; const TInt KMaxLengthTextDetailsBody = 5000; @@ -53,8 +58,6 @@ const TInt KMaxLengthTextCertLabelVisible = 200; // "dd/mm/yyyy0" const TInt KMaxLengthTextDateString = 20; -// HH0 -const TInt KMaxLengthTextSerialNumberFormatting = 3; // Maximum length of a certificate const TInt KMaxCertificateLength = 5000; @@ -63,12 +66,8 @@ const TInt KMinImportKeyPwLen = 1; -const TInt KMaxCNLength = 64; +const TInt KMaxCommonNameLength = 64; -_LIT(KCertManUIDetailsViewHexFormat, "%02X"); - -const TInt KFileCertStoreUid( 0x101F501A ); -const TInt KWIMCertStoreUid ( 0x101F79D9 ); const TUid KTrustedServerTokenUid = { 0x101FB66F }; const TUid KDeviceCertStoreTokenUid = { 0x101FB668 }; @@ -81,6 +80,18 @@ _LIT( KKeyStoreExportKeyLabel, "Passphrase of the exported key file" ); _LIT( KPKCS12TokenLabel, "PKCS12"); + +// TODO: replace with OST tracing +#ifdef _DEBUG +#include +#define TRACE(x) RDebug::Printf(x) +#define TRACE1(x,y) RDebug::Printf(x,y) +#else +#define TRACE(x) +#define TRACE1(x,y) +#endif + + // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- @@ -106,9 +117,6 @@ void CCTSecurityDialogsAO::ConstructL() { iDeleted = EFalse; - - iQueryDialog = NULL; - iQueryDialogDeleted = ETrue; } // ----------------------------------------------------------------------------- @@ -184,6 +192,7 @@ iMessagePtr = aMessage; WIMSECURITYDIALOGS_WRITE_FORMAT( "CCTSecurityDialogsAO::StartLD iOperation=%d", iOperation ); + TRACE1( "CCTSecurityDialogsAO::StartLD iOperation=%d", iOperation ); MapTlsProviderOperation( iOperation ); @@ -338,6 +347,8 @@ // void CCTSecurityDialogsAO::DoHandleServerAuthFailL( const TDesC8& aBuffer ) { + TRACE( "CCTSecurityDialogsAO::DoHandleServerAuthFailL" ); + CServerAuthenticationFailureInput* srvAuthFail = CServerAuthenticationFailureInput::NewLC( aBuffer ); TPtrC8 cert; @@ -350,33 +361,31 @@ iServerName = HBufC::NewL( serverName.Length() ); iServerName->Des().Copy( serverName ); + iCertLabel = NULL; - HBufC* cn = NULL; - iCertLabel = NULL; // Site will be checked later. For now it is not trusted iTrustedSite = EFalse; - CX509Certificate* serverCert = CX509Certificate::NewLC( cert ); - // Retrieve subject name const CX500DistinguishedName& dName = serverCert->SubjectName(); - // Retrieve CN - cn = dName.ExtractFieldL( KX520CommonName ); - if ( cn != NULL ) + + HBufC* commonName = dName.ExtractFieldL( KX520CommonName ); + CleanupStack::PushL( commonName ); + if( commonName != NULL ) { - // commonName exist in the certificate. // Check the length of CN. RFC 3280 states // that max length of CN is 64. - if ( cn->Length() <= KMaxCNLength ) + if( commonName->Length() <= KMaxCommonNameLength ) { - iCertLabel = HBufC::NewL( cn->Length() ); - iCertLabel->Des().Append( cn->Des() ); + iCertLabel = HBufC::NewL( commonName->Length() ); + iCertLabel->Des().Append( commonName->Des() ); } } + CleanupStack::PopAndDestroy( commonName ); - if ( iCertLabel == NULL ) + if( iCertLabel == NULL ) { - // No or invalid commonName. Use domain name as label + // No or invalid commonName. Use domain name as label. iCertLabel = HBufC::NewL( iServerName->Length() ); iCertLabel->Des().Append( iServerName->Des() ); } @@ -586,7 +595,13 @@ else if ( iPIN.iPINLabel == KKeyStoreCreatePwLabel ) { iPIN.iMinLength = KMaxKeystorePwLength; - DoHandleMessageL( EInfoPwCreating, KNullDesC, KNullDesC, 0, 0 ); + // DoHandleMessageL( EInfoPwCreating, KNullDesC, KNullDesC, 0, 0 ); +//TODO: add timeout +/* + HBufC* buffer = CEikonEnv::Static()->AllocReadResourceLC( R_QTN_CM_CREATING_KEYSTORE ); // EInfoPwCreating + CHbDeviceMessageBoxSymbian::InformationL(buffer->Des()); + CleanupStack::PopAndDestroy( buffer ); +*/ DoHandleMultilinePinQueryL( EEnterNewKeyStorePw ); iNextStep = EVerifyPINs; } @@ -620,12 +635,45 @@ TDialogType dlgType = ( TDialogType )aDlgType; if ( EEnterNewKeyStorePw == dlgType ) { - dlgText1 = iNotifier->LoadResourceStringLC( dlgType, KNullDesC ); + +/* + dlgText1 = iNotifier->LoadResourceStringLC( dlgType, KNullDesC ); dlgText2 = iNotifier->LoadResourceStringLC( EVerifyKeyStorePw, KNullDesC ); - dlg = CCTPinPinQueryDialog::NewL( *dlgText1, *dlgText2, iPINValue2, - iPINValueVerify, iPIN.iMinLength, iPIN.iMaxLength, iRetValue ); - dlg->RunDlgLD( iStatus, R_WIM_PWPW_QUERY_DIALOG ); - CleanupStack::PopAndDestroy( 2, dlgText1 ); // dlgText1, dlgText2 + dlg = CCTPinPinQueryDialog::NewL( *dlgText1, *dlgText2, iPINValue2, + iPINValueVerify, iPIN.iMinLength, iPIN.iMaxLength, iRetValue ); + dlg->RunDlgLD( iStatus, R_WIM_PWPW_QUERY_DIALOG ); + CleanupStack::PopAndDestroy( 2, dlgText1 ); // dlgText1, dlgText2 +*/ + +/* + dlgText1 = StringLoader::LoadLC( R_QTN_SN_NEW_PHONE_KEYSTORE ); + dlgText2 = StringLoader::LoadLC( R_QTN_WIM_VERIFY_PIN ); + HBufC* message = HBufC::NewLC( KMaxLengthTextCertLabelVisible ); + message->Des().Append(dlgText1->Des()); + message->Des().Append(_L("|")); + message->Des().Append(dlgText2->Des()); + CSecQueryUi* SecQueryUi = CSecQueryUi::NewL(); + TInt queryAccepted = SecQueryUi->SecQueryDialog(message->Des(), iPINValueVerify, + iPIN.iMinLength,iPIN.iMaxLength, + ESecUiAlphaSupported | + ESecUiCancelSupported | + ESecUiSecretSupported | + ESecUiEmergencyNotSupported); + iRetValue=(queryAccepted==KErrNone); +*/ + + iPINValueVerify.Copy(_L("123456")); + iRetValue=true; + if(iRetValue) + iPINValue2.Copy(iPINValueVerify); // dialog already does not allow different pins +/* + delete SecQueryUi; + SecQueryUi=NULL; + CleanupStack::PopAndDestroy( message ); + CleanupStack::PopAndDestroy( dlgText2 ); + CleanupStack::PopAndDestroy( dlgText1 ); + */ + RunL(); // had to call it this way } else if ( EExportKeyPw == dlgType ) { @@ -801,6 +849,8 @@ // void CCTSecurityDialogsAO::InitCertStoreL() { + TRACE( "CCTSecurityDialogsAO::InitCertStoreL" ); + switch(iOperation) { case ESignText: @@ -936,13 +986,15 @@ { WIMSECURITYDIALOGS_WRITE_FORMAT( "CCTSecurityDialogsAO::RunL, iStatus %d", iStatus.Int() ); WIMSECURITYDIALOGS_WRITE_FORMAT( " iNextStep %d", iNextStep ); + TRACE1( "CCTSecurityDialogsAO::RunL, iStatus.Int()=%d", iStatus.Int() ); - if ( iStatus != KErrNone ) + if( iStatus != KErrNone ) { User::Leave( iStatus.Int() ); - } // if + } - switch ( iNextStep ) + TRACE1( "CCTSecurityDialogsAO::RunL, iNextStep=%d", iNextStep ); + switch( iNextStep ) { case EOperationCompleted: { @@ -950,35 +1002,34 @@ HandleResponseAndCompleteL(); break; } + case ECheckServerCerts: { WIMSECURITYDIALOGS_WRITE( "ECheckServerCerts" ); TBool foundCert( EFalse ); - if ( iServerCerts.Count() ) + if( iServerCerts.Count() ) { // Found certificates in the trusted site certificate storage. // Compare them with the one received from TlsProvider iCertPtr.Set( iCertBuf->Des() ); CX509Certificate* serverCert = CX509Certificate::NewLC( iCertPtr ); - for (TInt i=0; iDes() ); - CX509Certificate* cert = CX509Certificate::NewLC( certPtr ); - - // Compare fingerprints - if ( cert->Fingerprint() == serverCert->Fingerprint() ) + if( cert->Fingerprint() == serverCert->Fingerprint() ) { - // Fingerprints match foundCert = ETrue; } CleanupStack::PopAndDestroy( cert ); } + CleanupStack::PopAndDestroy( serverCert ); - if ( foundCert ) + + if( foundCert ) { // Found matching certificate. Complete the operation iRetValue = EServerCertAcceptedPermanently; @@ -987,24 +1038,26 @@ } } - if ( !foundCert ) - { - // Couldn't find matching certificate. Prompt user - ShowNoTrustDialogL(); - } - + if ( !foundCert ) + { + // Couldn't find matching certificate. Prompt user + ShowNoTrustDialogL(); + } break; } + case EProcessTrustedSite: { WIMSECURITYDIALOGS_WRITE( "EProcessTrustedSite" ); + TRACE( "CCTSecurityDialogsAO::RunL, EProcessTrustedSite" ); + TInt count = iCertStore->WritableCertStoreCount(); - for ( TInt i = 0; i < count; i++ ) + for( TInt i = 0; i < count; i++ ) { MCTWritableCertStore *certstore = &iCertStore->WritableCertStore( i ); MCTToken& token = certstore->Token(); TUid tokenuid = token.Handle().iTokenTypeUid; - if ( tokenuid == KTrustedServerTokenUid ) + if( tokenuid == KTrustedServerTokenUid ) { iTrustedSiteCertStore = certstore; } @@ -1016,11 +1069,11 @@ // Find out whether or not site associated with certificate is trusted iTrustedSite = trustedSitesStore->IsTrustedSiteL( *iCertBuf, *iServerName ); - if ( iTrustedSite ) + if( iTrustedSite ) { TBool allowOutOfDate = trustedSitesStore->IsOutOfDateAllowedL(*iCertBuf, *iServerName); - if (!allowOutOfDate) + if( !allowOutOfDate ) { CX509Certificate* cert = CX509Certificate::NewLC( iCertBuf->Des() ); @@ -1041,7 +1094,7 @@ } CleanupStack::PopAndDestroy( trustedSitesStore ); - if ( iTrustedSite ) + if( iTrustedSite ) { // Site is trusted. Next step is to check that server // certificate is in the trusted site certificate storage @@ -1108,9 +1161,11 @@ } break; } + case EAddTrustedSite: { - if ( iStatus.Int() == KErrNone ) + TRACE( "CCTSecurityDialogsAO::RunL, EAddTrustedSite" ); + if( iStatus.Int() == KErrNone ) { //Added server certificate succesfully CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL(); @@ -1119,7 +1174,7 @@ TInt status = trustedSitesStore->AddL( *iCertBuf, *iServerName ); CleanupStack::PopAndDestroy( trustedSitesStore ); - if ( status == KErrNone ) + if( status == KErrNone ) { iRetValue = EServerCertAcceptedPermanently; } @@ -1134,23 +1189,27 @@ else { //Adding server certificate failed + // TODO: unreached code? iNextStep = EOperationCompleted; iRetValue = EServerCertNotAccepted; HandleResponseAndCompleteL(); } - break; + break; } case ESaveServerCert: { WIMSECURITYDIALOGS_WRITE( "ESaveServerCert" ); + TRACE( "CCTSecurityDialogsAO::RunL, ESaveServerCert" ); DoHandleSaveServerCertL(); break; } + case EServerCertCheckUserResp: { WIMSECURITYDIALOGS_WRITE( "EServerCertCheckUserResp" ); - if ( iRetValue == EServerCertAcceptedPermanently ) + TRACE( "CCTSecurityDialogsAO::RunL, EServerCertCheckUserResp" ); + if( iRetValue == EServerCertAcceptedPermanently ) { // User accepted to select certificate permanently. // First add server certificate @@ -1167,6 +1226,7 @@ } break; } + case EOperationSignTextShown: { if ( iRetValue || iOperation == EUserAuthentication ) @@ -1183,6 +1243,7 @@ User::RequestComplete( status, KErrNone ); break; } + case EOperationInitCertStore: { TInt err = KErrNone; @@ -1200,6 +1261,7 @@ iNextStep = EOperationRetrieveCertInfos; break; } + case EOperationRetrieveCertInfos: { if ( iCertInfo ) @@ -1235,11 +1297,13 @@ } break; } + case EOperationSelectCert: { DoHandleSelectCertificateL(); break; } + case EGetCertInfo: { iStatus = KRequestPending; @@ -1249,6 +1313,7 @@ SetActive(); break; } + case EGetCertificate: { iStatus = KRequestPending; @@ -1268,36 +1333,42 @@ iNextStep = EInitKeyStore; break; } + case EInitKeyStore: { InitKeyStoreL(); iNextStep = EGetKeyInfos; break; } + case EGetKeyInfos: { GetKeyInfosL(); iNextStep = EShowCertDialog; break; } + case EGetKeyInfoByHandle: { GetKeyInfoByHandleL(); iNextStep = EShowCSRDialog; break; } + case EShowCSRDialog: { ShowCSRDialogL(); iNextStep = EOperationCompleted; break; } + case EShowCertDialog: { ShowCertDialogL(); iNextStep = EOperationCompleted; break; } + ///////////// // PIN steps ///////////// @@ -1340,11 +1411,13 @@ } break; } + case EVerifyPINs: { VerifyPinsL(); break; } + default: { User::Panic( _L("CTestSecDlgNotifier"), 0 ); @@ -1434,84 +1507,40 @@ // void CCTSecurityDialogsAO::ShowNoTrustDialogL() { - CX509Certificate* cert = CX509Certificate::NewLC( iCertBuf->Des() ); - TInt resourceid = R_WIM_NO_TRUST_QUERY_UNTRUSTED; - TBool showPermAccept = ETrue; + TRACE( "CCTSecurityDialogsAO::ShowNoTrustDialogL, begin" ); - if( iAuthFailReason == ESignatureInvalid || iAuthFailReason == ECertificateRevoked ) - { - // Invalid or revoked certificate - CCTInvalidCertificateNote* note = - new( ELeave ) CCTInvalidCertificateNote( *this, iStatus ); - note->ExecuteLD( R_WIM_INVALID_CERTIFICATE_INFORMATION_NOTE ); - iRetValue = EServerCertNotAccepted; - } - else - { - if( iAuthFailReason == EValidatedOK || iAuthFailReason == EDateOutOfRange ) - { - // Trusted certificate, but problems with CN or date - - // Retrieve subject name - const CX500DistinguishedName& dName = cert->SubjectName(); - - // Retrieve common name - HBufC* cn = dName.ExtractFieldL( KX520CommonName ); + // If trusted site certstore open has failed, then it is not possible to save + // the host name for permanent use. Hence, choice for permanent accept is not + // displayed if trusted site certstore open has failed. Other restrictions for + // permanent accept are defined in device dialog (UntrustedCertificateWidget). + TBool isTrustedSiteCertStoreOpened = ( iTrustedSiteCertStore != NULL ); + CCTUntrustedCertQuery *untrustedCertDlg = CCTUntrustedCertQuery::NewLC( + iAuthFailReason, *iCertBuf, *iServerName, isTrustedSiteCertStoreOpened ); - // Check common name first and then date - if( !cn ) - { - // Couldn't retrieve CN from certificate - resourceid = R_WIM_NO_TRUST_QUERY_UNTRUSTED; - } - else if( iServerName->Des() != cn->Des() ) - { - // Domain name doesn't match with CN - resourceid = R_WIM_NO_TRUST_QUERY_SITE; - } - else if( iAuthFailReason == EDateOutOfRange ) - { - // Certificate is out of date - resourceid = R_WIM_NO_TRUST_QUERY_OOD; - showPermAccept = EFalse; - } - else - { - // Otherwise show general untrusted note - resourceid = R_WIM_NO_TRUST_QUERY_UNTRUSTED; - } - } - else - { - // Untrusted certificate - resourceid = R_WIM_NO_TRUST_QUERY_UNTRUSTED; - } - - // No "Accept Permanently" option if certificate is out of date, or - // if domain name is not defined, or if trusted site store failed to - // open (and it's not possible to save the server certificate). - const CValidityPeriod& validityPeriod = cert->ValidityPeriod(); - const TTime& startValue = validityPeriod.Start(); - const TTime& finishValue = validityPeriod.Finish(); - TTime current; - current.UniversalTime(); - - if( (( startValue > current ) || ( finishValue < current )) || - ( iServerName->Des().Length() == 0 ) || - ( !iTrustedSiteCertStore ) ) - { - showPermAccept = EFalse; - } - - iQueryDialog = new( ELeave ) CCTNoTrustQuery( *this, iRetValue, iStatus, iServerName, - showPermAccept, iQueryDialogDeleted ); - iQueryDialog->ExecuteLD( resourceid ); + CCTUntrustedCertQuery::TResponse response = CCTUntrustedCertQuery::EQueryRejected; + untrustedCertDlg->ShowQueryAndWaitForResponseL( response ); + switch( response ) + { + case CCTUntrustedCertQuery::EQueryAccepted: + iRetValue = EServerCertAcceptedTemporarily; + break; + case CCTUntrustedCertQuery::EQueryAcceptedPermanently: + // TODO: show confirmation note, qtn_httpsec_query_perm_accept_text + // "Connection to site %U will be made in future without any warnings. Continue?"" + iRetValue = EServerCertAcceptedPermanently; + break; + case CCTUntrustedCertQuery::EQueryRejected: + default: + iRetValue = EServerCertNotAccepted; + break; } - - CleanupStack::PopAndDestroy( cert ); + CleanupStack::PopAndDestroy( untrustedCertDlg ); + TRACE1( "CCTSecurityDialogsAO::ShowNoTrustDialogL, iRetValue=%d", iRetValue ); iNextStep = EServerCertCheckUserResp; iStatus = KRequestPending; + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); SetActive(); } @@ -2028,9 +2057,9 @@ // CCTSecurityDialogsAO::AddCertFormatL(...) // ----------------------------------------------------------------------------- // -void CCTSecurityDialogsAO::AddCertFormatL( TDes& aMessage, TCertificateFormat aCertFormat) +void CCTSecurityDialogsAO::AddCertFormatL( TDes& /*aMessage*/, TCertificateFormat aCertFormat) { - TInt fieldType = 0; + //TInt fieldType = 0; switch ( aCertFormat ) { case EX509CertificateUrl: @@ -2312,6 +2341,7 @@ iMessagePtr.WriteL( iReplySlot, pinValueBufPtr ); break; } + case EChangePIN: case EUnblockPIN: { @@ -2322,6 +2352,7 @@ iMessagePtr.WriteL( iReplySlot, twoPINOutputBuf ); break; } + case ESignText: // flow thru case EUserAuthenticationText: // flow thru case EUserAuthentication: @@ -2330,13 +2361,14 @@ iMessagePtr.WriteL( iReplySlot, tokenObjectHandleBuf ); break; } + case EServerAuthenticationFailure: { TServerAuthenticationFailureDialogResult result = EStop; - if ( iRetValue != EServerCertAcceptedPermanently ) + if( iRetValue != EServerCertAcceptedPermanently ) { - if ( iRetValue == EServerCertAcceptedTemporarily ) + if( iRetValue == EServerCertAcceptedTemporarily ) { result = EContinue; } @@ -2357,12 +2389,14 @@ break; } + case EPINBlocked: case EUnblockPINInClear: { User::Leave( KErrNotSupported ); break; } + case ECreateCSR: case ECertDetails: case ESaveCert: @@ -2378,6 +2412,7 @@ { break; // Complete is enough } + default: User::Panic( _L("CTestSecDlgNotifier"), 0 ); } @@ -2425,18 +2460,7 @@ void CCTSecurityDialogsAO::DoCancel() { WIMSECURITYDIALOGS_WRITE( "CCTSecurityDialogsAO::DoCancel" ); - - // Note that iQueryDialog may point to already deleted memory. - // Dialogs need to set and reset iQueryDialogDeleted flag to - // allow deleting the dialog from CCTSecurityDialogsAO. - if( !iQueryDialogDeleted ) - { - delete iQueryDialog; - iQueryDialogDeleted = ETrue; - } - iQueryDialog = NULL; - - if ( !iPinQueryDialogDeleted ) + if( !iPinQueryDialogDeleted ) { delete iPinQueryDialog; iPinQueryDialogDeleted = ETrue; @@ -2469,10 +2493,12 @@ // void CCTSecurityDialogsAO::DoHandleSaveServerCertL() { + TRACE( "CCTSecurityDialogsAO::DoHandleSaveServerCertL" ); + if ( iTrustedSiteCertStore ) { iTrustedSiteCertStore->Add( *iCertLabel, EX509Certificate, - EPeerCertificate, NULL, NULL, *iCertBuf, iStatus ); + EPeerCertificate, NULL, NULL, *iCertBuf, iStatus ); // Next step is to update trust site db iNextStep = EAddTrustedSite; diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CTSecurityDialogs/NotifSrc/CTUntrustedCertQuery.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/CTSecurityDialogs/NotifSrc/CTUntrustedCertQuery.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,238 @@ +/* +* 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 "CTUntrustedCertQuery.h" // CCTUntrustedCertQuery +#include // CHbSymbianVariantMap + +// 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; + +// TODO: replace with OST tracing +#ifdef _DEBUG +#include +#define TRACE(x) RDebug::Printf(x) +#define TRACE1(x,y) RDebug::Printf(x,y) +#else +#define TRACE(x) +#define TRACE1(x,y) +#endif + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::NewLC() +// --------------------------------------------------------------------------- +// +CCTUntrustedCertQuery* CCTUntrustedCertQuery::NewLC( + TValidationError aValidationError, const TDesC8& aCertificate, + const TDesC& aServerName, TBool aCanHandlePermanentAccept ) + { + TRACE( "CCTUntrustedCertQuery::NewLC" ); + CCTUntrustedCertQuery* self = new ( ELeave ) CCTUntrustedCertQuery( + aValidationError, aCertificate, aServerName, + aCanHandlePermanentAccept ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::~CCTUntrustedCertQuery() +// --------------------------------------------------------------------------- +// +CCTUntrustedCertQuery::~CCTUntrustedCertQuery() + { + TRACE( "CCTUntrustedCertQuery::~CCTUntrustedCertQuery" ); + Cancel(); + delete iWait; + delete iDeviceDialog; + delete iVariantMap; + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::ShowQueryAndWaitForResponseL() +// --------------------------------------------------------------------------- +// +void CCTUntrustedCertQuery::ShowQueryAndWaitForResponseL( TResponse& aResponse ) + { + TRACE( "CCTUntrustedCertQuery::ShowQueryAndWaitForResponseL" ); + 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( "CCTUntrustedCertQuery::ShowQueryAndWaitForResponseL, wait start" ); + iWait->Start(); + TRACE( "CCTUntrustedCertQuery::ShowQueryAndWaitForResponseL, wait end" ); + TRACE1( "CCTUntrustedCertQuery::ShowQueryAndWaitForResponseL, iWaitCompletionCode=%d", iWaitCompletionCode ); + User::LeaveIfError( iWaitCompletionCode ); + TRACE1( "CCTUntrustedCertQuery::ShowQueryAndWaitForResponseL, iResponse=%d", iResponse ); + aResponse = iResponse; + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::DoCancel() +// --------------------------------------------------------------------------- +// +void CCTUntrustedCertQuery::DoCancel() + { + TRACE( "CCTUntrustedCertQuery::DoCancel begin" ); + if( iDeviceDialog ) + { + TRACE( "CCTUntrustedCertQuery::DoCancel, iDeviceDialog->Cancel()" ); + iDeviceDialog->Cancel(); + } + if( iWait && iWait->IsStarted() && iWait->CanStopNow() ) + { + TRACE( "CCTUntrustedCertQuery::DoCancel, iWait->AsyncStop()" ); + iWaitCompletionCode = KErrCancel; + iWait->AsyncStop(); + } + TRACE( "CCTUntrustedCertQuery::DoCancel end" ); + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::RunL() +// --------------------------------------------------------------------------- +// +void CCTUntrustedCertQuery::RunL() + { + TRACE1( "CCTUntrustedCertQuery::RunL, iStatus.Int()=%d", iStatus.Int() ); + iWaitCompletionCode = iStatus.Int(); + if( iWait ) + { + iWait->AsyncStop(); + } + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::DataReceived() +// --------------------------------------------------------------------------- +// +void CCTUntrustedCertQuery::DataReceived( CHbSymbianVariantMap& aData ) + { + TRACE( "CCTUntrustedCertQuery::DataReceived" ); + const CHbSymbianVariant* variant = aData.Get( KUntrustedCertDialogResult ); + if( variant ) + { + TInt* value = variant->Value(); + if( value ) + { + switch( *value ) + { + case KUntrustedCertDialogRejected: + TRACE( "CCTUntrustedCertQuery::DataReceived, rejected" ); + iResponse = EQueryRejected; + break; + case KUntrustedCertDialogAccepted: + TRACE( "CCTUntrustedCertQuery::DataReceived, accepted" ); + iResponse = EQueryAccepted; + break; + case KUntrustedCertDialogAcceptedPermanently: + TRACE( "CCTUntrustedCertQuery::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() ); + } + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::DeviceDialogClosed() +// --------------------------------------------------------------------------- +// +void CCTUntrustedCertQuery::DeviceDialogClosed( TInt aCompletionCode ) + { + TRACE1( "CCTUntrustedCertQuery::DeviceDialogClosed aCompletionCode=%d", aCompletionCode ); + TRequestStatus* status( &iStatus ); + User::RequestComplete( status, aCompletionCode ); + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::CCTUntrustedCertQuery() +// --------------------------------------------------------------------------- +// +CCTUntrustedCertQuery::CCTUntrustedCertQuery( + 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 ); + } + +// --------------------------------------------------------------------------- +// CCTUntrustedCertQuery::ConstructL() +// --------------------------------------------------------------------------- +// +void CCTUntrustedCertQuery::ConstructL() + { + TRACE( "CCTUntrustedCertQuery::ConstructL" ); + iWait = new( ELeave ) CActiveSchedulerWait; + } + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/data/CertSaver.rss --- a/pkiutilities/CertSaver/data/CertSaver.rss Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/data/CertSaver.rss Thu Jun 24 12:46:20 2010 +0300 @@ -22,14 +22,9 @@ // INCLUDES #include -#include #include -#include #include -#include -#include #include -//#include //qtn_cm_not_valid_yet #include #include "certsaver.hrh" @@ -158,6 +153,7 @@ buf = qtn_cm_not_defined; } + //---------------------------------------------------- // // r_certsaver_softkeys_save_discard @@ -209,8 +205,6 @@ }; } - - //---------------------------------------------------- // // r_message_query_dosave @@ -282,24 +276,28 @@ // //---------------------------------------------------- // -RESOURCE DIALOG r_certsaver_warning_note - { - flags = EGeneralQueryFlags; - buttons = r_certsaver_softkeys_save_discard; - items= - { - DLG_LINE - { - type=EAknCtQuery; - id=EGeneralQuery; - control= AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationLayout; +RESOURCE TBUF r_certsaver_warning_note { buf = qtn_httpsec_save_rootcertificate; } + +/* +RESOURCE DIALOG r_certsaver_warning_note + { + flags = EGeneralQueryFlags; + buttons = r_certsaver_softkeys_save_discard; + items= + { + DLG_LINE + { + type=EAknCtQuery; + id=EGeneralQuery; + control= AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationLayout; label = qtn_httpsec_save_rootcertificate; - }; - } - }; - } + }; + } + }; + } +*/ //----------------------------------------------------------------------------- // @@ -472,6 +470,7 @@ RESOURCE TBUF r_certsaver_one_private_key{ buf = qtn_cm_one_private_key; } RESOURCE TBUF r_certsaver_one_personal_certificate { buf = qtn_cm_one_personal_certificate; } RESOURCE TBUF r_certsaver_one_authority_certificate { buf = qtn_cm_one_authority_certificate; } -RESOURCE TBUF r_certsaver_trustedsite_warning { buf = qtn_cm_save_trustedsite_certificate_warning_text; } +RESOURCE TBUF r_certsaver_trustedsite_warning + { buf = qtn_cm_save_trustedsite_certificate_warning_text; } // End of File diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/group/CertSaver.mmp --- a/pkiutilities/CertSaver/group/CertSaver.mmp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/group/CertSaver.mmp Thu Jun 24 12:46:20 2010 +0300 @@ -54,11 +54,16 @@ USERINCLUDE ../inc USERINCLUDE ../../Include +USERINCLUDE ../../../securitydialogs/SecUi/Inc MW_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE ../../PKCS12/CrPkcs12/Inc SYSTEMINCLUDE ../../DeviceToken/Inc +SYSTEMINCLUDE /epoc32/include/mw/hb/hbcore +SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets + + LIBRARY euser.lib LIBRARY apparc.lib LIBRARY cone.lib @@ -81,5 +86,9 @@ LIBRARY aknskins.lib LIBRARY DevTokenClient.lib +LIBRARY HbCore.lib +LIBRARY HbWidgets.lib +LIBRARY secui.lib + SMPSAFE diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/inc/CertSaverModel.h --- a/pkiutilities/CertSaver/inc/CertSaverModel.h Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/inc/CertSaverModel.h Thu Jun 24 12:46:20 2010 +0300 @@ -310,10 +310,12 @@ */ void DivideToBlocks( const TDesC8& aInput, TDes& aOutput ) const; - TBool DoMessageQueryL( - TInt aDialogResId, +/* + TBool DoMessageQueryL( + TInt aDialogResId, TInt aHeadingResId, - TDesC& aMessage ); + TDesC& aMessage ); +*/ private: //data TCertificateOwnerType iCertOwnerType; @@ -336,6 +338,8 @@ TInt iSavedUserCertsCount; TInt iSelectedKeyStore; TBool iKeyAlreadyExists; + + CEikonEnv* iEikEnv; }; #endif diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/loc/certsaver.loc --- a/pkiutilities/CertSaver/loc/certsaver.loc Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/loc/certsaver.loc Thu Jun 24 12:46:20 2010 +0300 @@ -30,6 +30,7 @@ //l:control_pane_t1/opt7 #define text_wmls_list_disc_recvd_cert "Discard" + //d:Item in save-confirmation query pop up. //d:This represents to whom the certificate //d:has been issued to. diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/src/CertSaverAppUi.cpp --- a/pkiutilities/CertSaver/src/CertSaverAppUi.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/src/CertSaverAppUi.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,7 +18,6 @@ // INCLUDE FILES #include // For FFSSpaceBelowCriticalLevelL(..) -#include // Note dialogs #include #include #include diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/src/CertSaverDocument.cpp --- a/pkiutilities/CertSaver/src/CertSaverDocument.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/src/CertSaverDocument.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -112,7 +112,7 @@ OpenFileL( docStore, file ); - CleanupStack::PopAndDestroy(); // Close file + CleanupStack::PopAndDestroy(&file); // Close file return docStore; } @@ -137,7 +137,7 @@ iAO = new (ELeave) CShutterAO; iAO->Exit(); #ifdef _DEBUG - RDebug::Print( _L("Exiting OpenFileL") ); + #endif } diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/src/CertSaverModel.cpp --- a/pkiutilities/CertSaver/src/CertSaverModel.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/src/CertSaverModel.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,7 +18,9 @@ // INCLUDE FILES #include // Note dialogs -#include // For CAknMessageQueryDialog + + + #include // For loading resource strings #include // For saving the certificates #include // For saving the certificates @@ -44,7 +46,14 @@ #include "certsaver.hrh" #include "securityuisvariant.hrh" +#include +#include +#include + +#include "SecQueryUi.h" // needed for label dialog + // CONSTANTS + const TInt32 KWTLSTrusterUID( 268479059 ); const TInt32 KInternetTrusterUID( 268441661 ); const TInt32 KApplicationControllerTrusterUID( 268452523 ); @@ -56,12 +65,14 @@ const TInt KMaxLengthTextMeassageBody( 5000 ); const TInt KMaxLengthTextDateString( 11 ); // "dd/mm/yyyy0" +const TInt KMaxLengthTextCheckBoxData( 255 ); // "dd/mm/yyyy0" //Issuer and Owner max visible length const TInt KMaxLengthTextCertIdentifierVisible( 1000 ); const TInt KAttempts( 3 ); const TInt KFingerprintLength( 50 ); +const TInt KTokenLength( 32 ); _LIT( KCertSaverListBoxItemPrefix, "1\t" ); const TInt KItemBufLen = 2 + KMaxName; @@ -116,6 +127,7 @@ const TCertificateOwnerType& aOwnerType, const TCertificateFormat& aCertFormat ) { + iCertOwnerType = aOwnerType; iCertFormat = aCertFormat; iNewCert = &aCertificate; @@ -139,6 +151,7 @@ // void CCertSaverModel::DoSavePrivateKeyL( const TDesC8& aKey ) { + CheckFSSpaceL( aKey ); TKeyIdentifier keyIdentifier; @@ -158,7 +171,8 @@ CleanupStack::PopAndDestroy( pkcs8Data ); if (KeyAlreadyExistsL( startDate, endDate, keyIdentifier, keyUsage) ) { - User::Leave( KErrNone ); + // used to leave with error none + return; } TInt accessType( 0 ); @@ -254,6 +268,7 @@ const TKeyIdentifier& aKeyIdentifier, TKeyUsagePKCS15& aKeyUsage ) { + TBool ret = EFalse; TCTKeyAttributeFilter keyFilter; keyFilter.iKeyAlgorithm = CKeyInfoBase::EInvalidAlgorithm; @@ -304,6 +319,7 @@ const TKeyIdentifier& aKeyIdentifier ) { + for ( TInt i = 0; i < iParser.UserCertificates().Count(); i++ ) { const CX509Certificate* cert = iParser.UserCertificates().At( i ); @@ -330,6 +346,7 @@ // void CCertSaverModel::CreateKeyLabelL( TDes& aLabel ) { + TTime time; time.UniversalTime(); TBuf dateBuf; @@ -349,6 +366,7 @@ // void CCertSaverModel::SavePrivateKeyL() { + if ( iParser.Keys().Count() <= 0 ) { return; @@ -397,6 +415,7 @@ TAlgorithmId aAlgorithm ) { + TKeyUsagePKCS15 pkcs15KeyUsage = EPKCS15UsageNone; TKeyUsageX509 x509Usage = EX509UsageNone; @@ -485,16 +504,15 @@ // void CCertSaverModel::CheckFSSpaceL( const TDesC8& aDataToSave ) { + if (SysUtil::FFSSpaceBelowCriticalLevelL( &iFs, aDataToSave.Size() )) { HBufC* p = StringLoader::LoadLC( R_CERTSAVER_MEMORY ); - CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue ); - note->ExecuteLD( p->Des() ); + CHbDeviceMessageBoxSymbian::WarningL(p->Des()); CleanupStack::PopAndDestroy( p ); User::Leave( KErrExitApp ); } } - // ---------------------------------------------------------- // CCertSaverModel::SaveCertL() // Saves certificate @@ -502,38 +520,33 @@ // void CCertSaverModel::SaveCertL() { + if ( !CertificateOkL() ) { User::Leave( KErrCancel ); } - + HBufC* message = HBufC::NewLC( KMaxLengthTextMeassageBody ); TPtr msgPtr = message->Des(); ConstructMessageL( msgPtr ); - CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *message ); - CleanupStack::PopAndDestroy( message ); - CleanupStack::PushL( dlg ); - - - dlg->PrepareLC( R_MESSAGE_QUERY_DOSAVE ); - - HBufC* header = StringLoader::LoadLC( R_CERTSAVER_DETAILS_HEADING ); - dlg->QueryHeading()->SetTextL( header->Des() ); - CleanupStack::PopAndDestroy( header ); - CleanupStack::Pop( dlg ); - TBool doSave = dlg->RunLD(); + CHbDeviceMessageBoxSymbian::TButtonId selection = + CHbDeviceMessageBoxSymbian::QuestionL(msgPtr, KNullDesC, KNullDesC); + TBool doSave= (selection == CHbDeviceMessageBoxSymbian::EAcceptButton); + CleanupStack::PopAndDestroy(message); if ( doSave && iCertOwnerType == ECACertificate ) { // warn user about security risk - CAknQueryDialog* warningDialog = CAknQueryDialog::NewL(); - doSave = warningDialog->ExecuteLD( R_CERTSAVER_WARNING_NOTE ); + HBufC* stringHolder = StringLoader::LoadLC( R_CERTSAVER_WARNING_NOTE ); + CHbDeviceMessageBoxSymbian::TButtonId selection = + CHbDeviceMessageBoxSymbian::QuestionL(stringHolder->Des(),KNullDesC, KNullDesC); + CleanupStack::PopAndDestroy(stringHolder); + doSave=(selection == CHbDeviceMessageBoxSymbian::EAcceptButton); } if ( doSave ) { - //Check that there still is enough space to store the - //certificate. + //Check that there still is enough space to store the certificate. CheckFSSpaceL( iNewCert->Encoding() ); DoSaveCertL(); } @@ -544,6 +557,7 @@ } } + // ---------------------------------------------------------- // CCertSaverModel::InitCertStoreL() // @@ -551,6 +565,7 @@ // void CCertSaverModel::InitCertStoreL() { + if ( !iUnifiedCertStore ) { TRAPD( status, iUnifiedCertStore = CUnifiedCertStore::NewL( iFs, ETrue ) ); @@ -576,6 +591,7 @@ // void CCertSaverModel::DoSaveCertL() { + TInt status = KErrNone; CCertAttributeFilter* filter = NULL; TCertificateFormat certFormat = EX509Certificate; @@ -678,7 +694,8 @@ MCTToken& token = writableCertStore.Token(); TUid tokenuid = token.Handle().iTokenTypeUid; - if ( ( tokenuid == KTrustedServerTokenUid ) && ( iCertOwnerType == EPeerCertificate ) || + if ( ( tokenuid == KTrustedServerTokenUid ) && + ( iCertOwnerType == EPeerCertificate ) || ( tokenuid == KFileTokensUid ) && ( iCertOwnerType == ECACertificate ) || ( tokenuid == KFileTokensUid ) && ( iCertOwnerType == EUserCertificate ) ) { @@ -786,6 +803,7 @@ // TInt CCertSaverModel::QueryLabelL( TCertLabel& aLabel, CUnifiedCertStore& aStore ) { + CCertAttributeFilter* filter = NULL; TInt status = KErrNone; RMPointerArray entries; @@ -793,8 +811,18 @@ while ( loop ) { - CAknTextQueryDialog* dialog = CAknTextQueryDialog::NewL( aLabel ); - if ( !dialog->ExecuteLD( R_CERTSAVER_LABEL_QUERY ) ) + HBufC* labelprompt = CEikonEnv::Static()->AllocReadResourceLC( R_CERTSAVER_ENTER_LABEL ); + CSecQueryUi* SecQueryUi = CSecQueryUi::NewL(); + TInt queryAccepted = SecQueryUi->SecQueryDialog(labelprompt->Des(), aLabel, + 1,KMaxCertLabelLength, + ESecUiAlphaSupported | + ESecUiCancelSupported | + ESecUiEmergencyNotSupported); + CleanupStack::PopAndDestroy( labelprompt ); + delete SecQueryUi; + SecQueryUi=NULL; + + if ( queryAccepted!=KErrNone ) { // cancel ShowConfirmationNoteL( R_CERTSAVER_CERT_DISCARDED ); @@ -840,6 +868,7 @@ // void CCertSaverModel::HandleSaveErrorL( TInt aStatus ) const { + switch ( aStatus ) { case KErrNone: @@ -884,6 +913,7 @@ void CCertSaverModel::AddToMessageWithStringL( TDes& aMessage, TInt aStringResID, const TDesC& aString ) const { + HBufC* promptPtr = NULL; promptPtr = StringLoader::LoadL( aStringResID, aString ); CleanupStack::PushL( promptPtr ); @@ -904,6 +934,7 @@ TInt aStringResID, TInt aInt ) const { + HBufC* promptPtr = NULL; promptPtr = StringLoader::LoadL( aStringResID, aInt ); CleanupStack::PushL( promptPtr ); @@ -922,6 +953,7 @@ // void CCertSaverModel::AddToMessageL( TDes& aMessage, TInt aStringResID ) const { + HBufC* promptPtr = NULL; promptPtr = StringLoader::LoadL( aStringResID ); CleanupStack::PushL( promptPtr ); @@ -940,6 +972,7 @@ // void CCertSaverModel::ConstructMessageL( TDes& aMessage ) const { + HBufC16* issuerName = NULL; HBufC16* subjectName = NULL; @@ -996,6 +1029,7 @@ // void CCertSaverModel::AddKeyUsageL( TDes& aMessage, const CX509Certificate& aCert ) const { + TKeyUsageX509 x509Usage = EX509UsageNone; TKeyUsagePKCS15 pkcs15KeyUsage = EPKCS15UsageNone; const CX509CertExtension* ext = aCert.Extension( KKeyUsage ); @@ -1079,6 +1113,7 @@ void CCertSaverModel::AddValidityPeriodL( TDes& aMessage, const CX509Certificate& aCert ) const { + // Hometime's offset to UTC TLocale locale; TTimeIntervalSeconds offSet = locale.UniversalTimeOffset(); @@ -1108,7 +1143,7 @@ // format the date to user readable format. The format is locale dependent finishValue.FormatL( finishString, *dateFormatString ); AknTextUtils::DisplayTextLanguageSpecificNumberConversion( finishString ); - CleanupStack::PopAndDestroy(); // dateFormatString + CleanupStack::PopAndDestroy(dateFormatString); // dateFormatString aMessage.Append( finishString ); AddNewlinesToMessage( aMessage ); } @@ -1120,6 +1155,7 @@ // void CCertSaverModel::AddNewlinesToMessage( TDes& aMessage ) const { + aMessage.Append( KDoubleEnter ); } @@ -1130,6 +1166,7 @@ // TBool CCertSaverModel::CertificateSupported() const { + if ( iCertFormat == EX509Certificate && ( iCertOwnerType == ECACertificate || iCertOwnerType == EPeerCertificate || @@ -1151,14 +1188,15 @@ // TBool CCertSaverModel::CertificateOkL() const { - if ( !CertificateSupported() ) + + if ( !CertificateSupported() ) { - ShowErrorNoteL( R_CERTSAVER_ERROR_UNSUPPORTED_CERT ); + ShowErrorNoteL( R_CERTSAVER_ERROR_UNSUPPORTED_CERT ); return EFalse; } if ( CertNotValidAnymore() ) { - ShowErrorNoteL( R_CERTSAVER_ERROR_CERT_NOT_VALID ); + ShowErrorNoteL(R_CERTSAVER_ERROR_CERT_NOT_VALID); return ETrue; } else if ( CertNotValidYet() ) @@ -1175,6 +1213,7 @@ // TBool CCertSaverModel::CertNotValidAnymore() const { + TTime homeTime; homeTime.HomeTime(); if ( iNewCert->ValidityPeriod().Finish() < homeTime ) @@ -1191,6 +1230,7 @@ // TBool CCertSaverModel::CertNotValidYet() const { + TTime homeTime; homeTime.HomeTime(); if ( iNewCert->ValidityPeriod().Start() > homeTime ) @@ -1207,9 +1247,9 @@ // void CCertSaverModel::ShowInformationNoteL( TInt aResourceID ) const { + HBufC* buffer = iAppUi->CoeEnv()->AllocReadResourceLC( aResourceID ); - CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue ); - note->ExecuteLD( buffer->Des() ); + CHbDeviceMessageBoxSymbian::InformationL(buffer->Des()); CleanupStack::PopAndDestroy( buffer ); } // ---------------------------------------------------------- @@ -1219,9 +1259,9 @@ // void CCertSaverModel::ShowConfirmationNoteL( TInt aResourceID ) const { + HBufC* buffer = iAppUi->CoeEnv()->AllocReadResourceLC( aResourceID ); - CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote( ETrue ); - note->ExecuteLD( buffer->Des() ); + CHbDeviceMessageBoxSymbian::WarningL(buffer->Des()); CleanupStack::PopAndDestroy( buffer ); } @@ -1232,9 +1272,10 @@ // void CCertSaverModel::ShowErrorNoteL( TInt aResourceID ) const { + HBufC* buffer = iAppUi->CoeEnv()->AllocReadResourceLC( aResourceID ); - CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue ); - note->ExecuteLD(buffer->Des()); + //TODO: can be changed when hb supports ErrorL + CHbDeviceMessageBoxSymbian::WarningL(buffer->Des()); CleanupStack::PopAndDestroy( buffer ); } @@ -1247,6 +1288,7 @@ // TPtrC CCertSaverModel::TrimCertificateFields( TPtrC aField ) const { + TPtrC cutField = CutCertificateField( aField ); // Find one semicolon at a time and crop the // helpField from the left to search for the next semicolon @@ -1298,6 +1340,7 @@ // TPtrC CCertSaverModel::CutCertificateField( TPtrC aField ) const { + TInt fieldLength = aField.Length(); if ( fieldLength >= KMaxLengthTextCertIdentifierVisible ) { @@ -1314,10 +1357,8 @@ // TInt CCertSaverModel::QueryTrusterUidsL( RArray& aUids ) { + TInt ret = KErrCancel; - CArrayFixFlat* selectionArray = - new (ELeave) CArrayFixFlat( KTrusterArrayInitSize ); - CleanupStack::PushL( selectionArray ); CDesCArray* itemsArray = new (ELeave) CDesCArrayFlat( KTrusterArrayInitSize ); CleanupStack::PushL( itemsArray ); @@ -1330,18 +1371,38 @@ CleanupClosePushL( appsInItemArray ); UpdateTrustListboxItemL( apps, appsInItemArray, *itemsArray ); - CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog( selectionArray ); - CleanupStack::PushL( dlg ); - dlg->PrepareLC( R_CERTSAVER_TRUST_SETTINGS_QUERY ); - dlg->SetItemTextArray( itemsArray ); - dlg->SetOwnershipType( ELbmDoesNotOwnItemArray ); - if ( dlg->RunLD() ) + HBufC* title = CEikonEnv::Static()->AllocReadResourceLC( R_CERTSAVER_SELECT_TRUSTED_APPS); + + RBuf rBuf; // buffer for items with big enough space + rBuf.CreateL(KMaxLengthTextMeassageBody); + CleanupClosePushL(rBuf); + for(TInt i = 0; iCount(); i++) + rBuf.Append( (*itemsArray)[i] ); + + CSecQueryUi* SecQueryUi = CSecQueryUi::NewL(); + TInt saved = SecQueryUi->SecQueryDialog(*title, rBuf,1,KTokenLength, + ESecUiAlphaSupported | ESecUiCancelSupported | + ESecUiBasicTypeMultiCheck | + ESecUiEmergencyNotSupported); + delete SecQueryUi; + SecQueryUi=NULL; + + if (saved==KErrNone) { - for ( TInt i = 0; i < selectionArray->Count(); ++i ) - { - TInt ii = (*selectionArray)[ i ]; - aUids.Append( appsInItemArray[ ii ].Id() ); - } + TLex16 lex(rBuf); + TChar ch; + TBuf16 token; + TInt val; + while((ch = lex.Get()) != 0 ){ + while ((ch = lex.Peek()) != '|' && ch!=0) lex.Inc(); + token.Copy(lex.MarkedToken()); + TLex lexc(token); + if(lexc.Val(val)!=KErrNone) val=0; + if(val<=appsInItemArray.Count()-1) + aUids.Append( appsInItemArray[ val ].Id() ); + lex.Inc(); + lex.Mark(); + } ret = KErrNone; } else @@ -1349,8 +1410,13 @@ ShowConfirmationNoteL( R_CERTSAVER_CERT_DISCARDED ); ret = KErrCancel; } - CleanupStack::Pop( dlg ); - CleanupStack::PopAndDestroy( 4, selectionArray ); + + rBuf.Close(); + CleanupStack::PopAndDestroy(&rBuf); + CleanupStack::PopAndDestroy(title); + CleanupStack::PopAndDestroy(&appsInItemArray); + CleanupStack::PopAndDestroy(appInfoManager); + CleanupStack::PopAndDestroy(itemsArray); return ret; } @@ -1361,6 +1427,7 @@ // TInt CCertSaverModel::QueryTrustedSiteL() { + TInt ret = KErrCancel; HBufC* label = NULL; HBufC* secondaryName = NULL; @@ -1372,16 +1439,10 @@ delete secondaryName; secondaryName = NULL; labelBuf = label->Des().Left( CERTSAVER_MAX_LABEL_LEN ); - - HBufC* prompt = StringLoader::LoadLC( R_CERTSAVER_TRUSTEDSITE_WARNING, labelBuf ); - - CAknMessageQueryDialog* note = CAknMessageQueryDialog::NewL( *prompt ); - - note->PrepareLC( R_CERTSAVER_TRUSTED_SITE_QUERY ); - note->SetPromptL( *prompt ); - - if ( note->RunLD() ) + CHbDeviceMessageBoxSymbian::TButtonId selection = + CHbDeviceMessageBoxSymbian::QuestionL(prompt->Des(), KNullDesC, KNullDesC); + if ( selection == CHbDeviceMessageBoxSymbian::EAcceptButton) { ret = KErrNone; } @@ -1390,9 +1451,7 @@ ShowConfirmationNoteL( R_CERTSAVER_CERT_DISCARDED ); ret = KErrCancel; } - CleanupStack::PopAndDestroy( prompt ); - CleanupStack::PopAndDestroy( label ); return ret; } @@ -1407,6 +1466,7 @@ RArray& aAppsInItemArray, CDesCArray& aItemsArray ) const { + for ( TInt i = 0; i < aApps.Count(); i++ ) { TCertificateAppInfo appInfo = aApps[ i ]; @@ -1469,6 +1529,7 @@ // void CCertSaverModel::DivideToBlocks( const TDesC8& aInput, TDes& aOutput ) const { + _LIT( KBlockSeparator, " " ); const TInt KBlockLength = 2; TInt blockIndex = 0; @@ -1491,17 +1552,27 @@ // void CCertSaverModel::SavePKCS12L() { + HBufC* message = HBufC::NewLC( KMaxLengthTextMeassageBody ); TPtr msgPtr = message->Des(); ConstructPKCS12QueryMsgL(msgPtr, iParser.Keys().Count(), iParser.UserCertificates().Count(), iParser.CACertificates().Count() ); - TBool save = DoMessageQueryL( - R_MESSAGE_QUERY_DOSAVE, R_CERTSAVER_HEADER_PKCS12_FILE_CONTAINS, - *message ); - CleanupStack::PopAndDestroy( message ); + + //TODO: Should be in loc file but hardcoded now + _LIT(KCheckBoxCaption,"Protect with Password|1"); + TBuf CheckeBoxData(KCheckBoxCaption); + + CSecQueryUi* SecQueryUi = CSecQueryUi::NewL(); + TInt save = SecQueryUi->SecQueryDialog(*message, CheckeBoxData,1,1, + ESecUiAlphaSupported | ESecUiCancelSupported | + ESecUiBasicTypeCheck | ESecUiEmergencyNotSupported); + CleanupStack::Pop(message); message = NULL; - if ( !save ) + delete SecQueryUi; + SecQueryUi=NULL; + + if ( save!=KErrNone ) { ShowInformationNoteL( R_CERTSAVER_PKCS12_DISCARDED ); User::Leave( KErrExitApp ); @@ -1545,42 +1616,24 @@ if ( iSavedCACertsCount != 0 || iSavedKeysCount != 0 || iSavedUserCertsCount != 0 ) { + HBufC* p = StringLoader::LoadLC( R_CERTSAVER_HEADER_SAVED ); message = HBufC::NewLC( KMaxLengthTextMeassageBody ); + message->Des().Append(p->Des()); TPtr msgPtr2 = message->Des(); ConstructPKCS12QueryMsgL( msgPtr2, iSavedKeysCount, iSavedUserCertsCount, iSavedCACertsCount ); - DoMessageQueryL( - R_MESSAGE_QUERY_SAVED, R_CERTSAVER_HEADER_SAVED, *message ); + CHbDeviceMessageBoxSymbian::InformationL(message->Des()); CleanupStack::PopAndDestroy( message ); + CleanupStack::PopAndDestroy( p ); } else { ShowInformationNoteL( R_QTN_CM_PKCS12_SAVING_FAILED ); + CleanupStack::PopAndDestroy( message ); } } // ---------------------------------------------------------- -// CCertSaverModel::DoMessageQuery() -// Displays message query dialog for user. -// ---------------------------------------------------------- -// -TBool CCertSaverModel::DoMessageQueryL( - TInt aDialogResId, - TInt aHeadingResId, - TDesC& aMessage ) - { - CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( aMessage ); - CleanupStack::PushL( dlg ); - dlg->PrepareLC( aDialogResId ); - - HBufC* header = StringLoader::LoadLC( aHeadingResId ); - dlg->QueryHeading()->SetTextL( header->Des() ); - CleanupStack::PopAndDestroy( header ); - CleanupStack::Pop( dlg ); - return dlg->RunLD(); - } - -// ---------------------------------------------------------- // CCertSaverModel::ConstructPKCS12QueryMsgL() const // Creates the certificate details message shown to the user. // ---------------------------------------------------------- @@ -1591,6 +1644,7 @@ TInt aUserCerts, TInt aCACerts ) const { + if ( aPrivateKeys > 0 ) { if ( aPrivateKeys == 1 ) diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/CertSaver/src/certparser.cpp --- a/pkiutilities/CertSaver/src/certparser.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/CertSaver/src/certparser.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -25,14 +25,17 @@ #include #include #include -#include #include #include #include -#include // Note dialogs +#include // Note dialogs text, TODO: could be removed after localization is ready #include #include "certparser.h" +#include "SecQueryUi.h" // needed for password dialog + +#include // needed for Note dialogs + // CONSTANTS _LIT( KPKCS12DllName, "crpkcs12.dll" ); // PKCS12 DLL name const TInt KX509Version3 = 3; @@ -94,6 +97,7 @@ // void CCertParser::SetContentL( RFile& aFile ) { + delete iCert; iCert = NULL; TInt fileSize = 0; @@ -126,7 +130,8 @@ // void CCertParser::CreatePKCS12L() { - // Load PKCS#12 dll + + // Load PKCS#12 dll #ifdef __WINS__ User::LeaveIfError ( iLibrary.Load( KPKCS12DllName ) ); #else @@ -151,6 +156,7 @@ const TDesC8& aPKCS12, const TDesC& aFileName ) { + CreatePKCS12L(); if ( !iPKCS12->IsPKCS12Data( aPKCS12 ) ) @@ -173,8 +179,7 @@ if ( !GetPasswordL( password, aFileName ) ) { buffer = iEikEnv->AllocReadResourceLC( R_CERTSAVER_PKCS12_DISCARDED ); - CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue ); - note->ExecuteLD(buffer->Des()); + CHbDeviceMessageBoxSymbian::InformationL(buffer->Des()); CleanupStack::PopAndDestroy( buffer ); User::Leave( KErrExitApp ); } @@ -226,15 +231,19 @@ // TInt CCertParser::GetPasswordL( TDes& aPassword, const TDesC& aFileName ) { - CAknTextQueryDialog* query = CAknTextQueryDialog::NewL( aPassword ); - CleanupStack::PushL( query ); - HBufC* prompt = - StringLoader::LoadLC( R_QTN_CM_TITLE_P12_PASSWORD, aFileName ); - query->SetPromptL( *prompt ); - CleanupStack::PopAndDestroy( prompt ); - CleanupStack::Pop( query ); - return query->ExecuteLD( R_PKCS12_PW_QUERY_DIALOG ); - } + CSecQueryUi* SecQueryUi = CSecQueryUi::NewL(); + HBufC* prompt =StringLoader::LoadLC( R_QTN_CM_TITLE_P12_PASSWORD, aFileName ); + TInt queryAccepted = SecQueryUi->SecQueryDialog(prompt->Des(), aPassword, + 1,KPwMaxLength, + ESecUiAlphaSupported | + ESecUiCancelSupported | + ESecUiSecretSupported | + ESecUiEmergencyNotSupported); + CleanupStack::PopAndDestroy( prompt ); + delete SecQueryUi; + SecQueryUi=NULL; + return (queryAccepted==KErrNone); + } // ---------------------------------------------------------- // CCertParser::CheckIfX509CertificateL() @@ -243,6 +252,7 @@ // TBool CCertParser::CheckIfX509CertificateL(const TDesC8& aCert) { + TRAPD( err, iCert = CX509Certificate::NewL(aCert); ); @@ -302,6 +312,7 @@ // const CArrayPtr& CCertParser::CACertificates() const { + __ASSERT_ALWAYS( iPKCS12, User::Panic( KCertSaverPanic, KPanicNullPointer ) ); return iPKCS12->CACertificates(); } @@ -312,6 +323,7 @@ // const CArrayPtr& CCertParser::UserCertificates() const { + __ASSERT_ALWAYS( iPKCS12, User::Panic( KCertSaverPanic, KPanicNullPointer ) ); return iPKCS12->UserCertificates(); } @@ -322,6 +334,7 @@ // const CArrayPtr& CCertParser::Keys() const { + __ASSERT_ALWAYS( iPKCS12, User::Panic( KCertSaverPanic, KPanicNullPointer ) ); return iPKCS12->PrivateKeys(); } @@ -332,6 +345,7 @@ // CCertParser::TCertType CCertParser::CertType() const { + return iCertType; } @@ -342,6 +356,7 @@ // const TPtrC8 CCertParser::CertificateBuf() const { + __ASSERT_ALWAYS( iCert, User::Panic( KCertSaverPanic, KPanicNullPointer ) ); return iCert->Encoding(); } @@ -353,6 +368,7 @@ // const CX509Certificate& CCertParser::Certificate() const { + __ASSERT_ALWAYS( iCert, User::Panic( KCertSaverPanic, KPanicNullPointer ) ); return *((CX509Certificate*)iCert); } @@ -369,8 +385,7 @@ iEikEnv = CEikonEnv::Static(); } HBufC* buffer = iEikEnv->AllocReadResourceLC( aResourceID ); - CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue ); - note->ExecuteLD(buffer->Des()); + CHbDeviceMessageBoxSymbian::WarningL(buffer->Des()); CleanupStack::PopAndDestroy( buffer ); } diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/StubSIS/swipolicy.ini --- a/pkiutilities/StubSIS/swipolicy.ini Fri Jun 11 14:28:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -AllowUnsigned = false -MandatePolicies = false -MandateCodeSigningExtension = false -Oid = 1.2.3.4.5.6 -Oid = 2.3.4.5.6.7 -DRMEnabled = true -DRMIntent = 3 -OcspMandatory = false -OcspEnabled = true -AllowGrantUserCapabilities = true -AllowOrphanedOverwrite = true -UserCapabilities = NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment Location -AllowPackagePropagate = true -SISCompatibleIfNoTargetDevices = false -RunWaitTimeoutSeconds = 600 -AllowRunOnInstallUninstall = false -DeletePreinstalledFilesOnUninstall = true -AlternativeCodeSigningOID = 1.3.6.1.4.1.94.1.49.1.2.2.1 1.3.6.1.4.1.94.1.49.1.2.2.5 -RemoveOnlyWithLastDependent = true -PhoneTsyName = phonetsy diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/StubSIS/tlsproviderpolicy.ini --- a/pkiutilities/StubSIS/tlsproviderpolicy.ini Fri Jun 11 14:28:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -ClientAuthDlgEnabled = true - diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/group/bld.inf --- a/pkiutilities/group/bld.inf Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/group/bld.inf Thu Jun 24 12:46:20 2010 +0300 @@ -27,14 +27,6 @@ ../StubSIS/CenRepStub.sis /epoc32/data/z/system/install/CenRepStub.sis -//SWI and TLSProvider config files -../StubSIS/swipolicy.ini /epoc32/release/winscw/udeb/z/system/data/swipolicy.ini -../StubSIS/swipolicy.ini /epoc32/release/winscw/urel/z/system/data/swipolicy.ini -../StubSIS/swipolicy.ini /epoc32/data/z/system/data/swipolicy.ini - -../StubSIS/tlsproviderpolicy.ini /epoc32/release/winscw/urel/z/resource/tlsproviderpolicy.ini -../StubSIS/tlsproviderpolicy.ini /epoc32/release/winscw/udeb/z/resource/tlsproviderpolicy.ini - // export iby files ../rom/x509certnameparser.iby CORE_MW_LAYER_IBY_EXPORT_PATH( x509certnameparser.iby ) ../rom/pkcs12.iby CORE_MW_LAYER_IBY_EXPORT_PATH( pkcs12.iby ) diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/rom/StubSIS.iby --- a/pkiutilities/rom/StubSIS.iby Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/rom/StubSIS.iby Thu Jun 24 12:46:20 2010 +0300 @@ -25,6 +25,4 @@ data=ZSYSTEM\install\CenRepStub.sis System\Install\CenRepStub.sis -//data = EPOCROOT##epoc32\release\winscw\urel\z\system\data\swipolicy.ini System\data\swipolicy.ini - #endif diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/inc/untrustedcertificatedialog.h --- a/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificatedialog.h Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificatedialog.h Thu Jun 24 12:46:20 2010 +0300 @@ -59,19 +59,22 @@ bool constructDialog(const QVariantMap ¶meters); bool updateFromParameters(const QVariantMap ¶meters); void sendResult(int result); + void confirmPermanentAccept(); private slots: // new slots void handleAccepted(); void handleRejected(); + void handlePermanentAcceptance(); private: // new functions Q_DISABLE_COPY(UntrustedCertificateDialog) private: // data int mLastError; - bool mShowEventReceived; UntrustedCertificateWidget *mContent; QVariantMap mResultMap; + bool mShowEventReceived; + HbAction *mOkAction; }; #endif // UNTRUSTEDCERTIFICATEDIALOG_H diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/inc/untrustedcertificateinfo_symbian.h --- a/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificateinfo_symbian.h Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificateinfo_symbian.h Thu Jun 24 12:46:20 2010 +0300 @@ -30,20 +30,21 @@ class UntrustedCertificateInfoSymbian : public UntrustedCertificateInfoBase { public: // constructor and destructor - UntrustedCertificateInfoSymbian(const CX509Certificate& aCert); + UntrustedCertificateInfoSymbian(const QByteArray &aEncodedCert); ~UntrustedCertificateInfoSymbian(); public: // from UntrustedCertificateInfoBase bool commonNameMatches(const QString &siteName) const; - bool isPermanentAcceptAllowed() const; - QString certificateDetails() const; + QString certificateDetails(const QString &siteName) const; private: // new functions - void ConstructL(const CX509Certificate& aCert); + void ConstructL(const QByteArray &aEncodedCert); bool CommonNameMatchesL(const QString &siteName) const; + QByteArray Md5FingerprintL( const TDesC8& aEncodedCert ) const; private: // data - CX509Certificate* iCert; + CX509Certificate* mCert; + QByteArray mMd5Fingerprint; }; #endif // UNTRUSTEDCERTIFICATEINFOSYMBIAN_H diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/inc/untrustedcertificateinfobase.h --- a/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificateinfobase.h Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificateinfobase.h Thu Jun 24 12:46:20 2010 +0300 @@ -61,21 +61,20 @@ virtual const QString subjectName() const; virtual const QString issuerName() const; virtual const QByteArray fingerprint() const; - virtual const QString formattedFingerprint() const; virtual const QByteArray serialNumber() const; - virtual const QString formattedSerialNumber() const; virtual const QDateTime validFrom() const; virtual const QDateTime validTo() const; virtual const QString format() const; virtual const QString digestAlgorithm() const; virtual const QString asymmetricAlgorithm() const; virtual const QString combinedAlgorithmName() const; + virtual const QString formattedFingerprint(const QByteArray &fingerprint) const; + virtual const QString formattedSerialNumber(const QByteArray &serialNumber) const; virtual bool isDateValid() const; public: // new abstract functions virtual bool commonNameMatches(const QString &siteName) const = 0; - virtual bool isPermanentAcceptAllowed() const = 0; - virtual QString certificateDetails() const = 0; + virtual QString certificateDetails(const QString &siteName) const = 0; private: // new functions const QString algorithmName(Algorithm algorithm) const; diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/inc/untrustedcertificatewidget.h --- a/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificatewidget.h Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/inc/untrustedcertificatewidget.h Thu Jun 24 12:46:20 2010 +0300 @@ -44,7 +44,9 @@ void constructFromParameters(const QVariantMap ¶meters); void updateFromParameters(const QVariantMap ¶meters); + bool isPermanentAcceptAllowed() const; bool isPermanentAcceptChecked() const; + QString serverName() const; public: // new platform specific functions bool isCertificateValid(); diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/src/untrustedcertificatedialog.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificatedialog.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificatedialog.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -21,17 +21,30 @@ #include "untrustedcertificatewidget.h" #include #include +#include +#include const int KNoError = 0; // KErrNone const int KParameterError = -6; // KErrArgument +// TODO: replace with OST tracing +#ifdef _DEBUG +#include +#define TRACE(x) qDebug() << x +#define TRACE1(x,y) qDebug() << x << y +#else +#define TRACE(x) +#define TRACE1(x,y) +#endif + // ---------------------------------------------------------------------------- // UntrustedCertificateDialog::UntrustedCertificateDialog() // ---------------------------------------------------------------------------- // -UntrustedCertificateDialog::UntrustedCertificateDialog(const QVariantMap ¶meters) : HbDialog(), - mLastError(KNoError), mShowEventReceived(false), mContent(0) +UntrustedCertificateDialog::UntrustedCertificateDialog(const QVariantMap ¶meters) : + HbDialog(), mLastError(KNoError), mContent(0), mResultMap(), + mShowEventReceived(false), mOkAction(0) { constructDialog(parameters); } @@ -69,6 +82,7 @@ void UntrustedCertificateDialog::closeDeviceDialog(bool byClient) { Q_UNUSED(byClient); + TRACE("UntrustedCertificateDialog::closeDeviceDialog"); close(); // If show event has been received, close is signalled from hide event. @@ -93,6 +107,7 @@ // void UntrustedCertificateDialog::hideEvent(QHideEvent *event) { + TRACE("UntrustedCertificateDialog::hideEvent"); HbDialog::hideEvent(event); emit deviceDialogClosed(); } @@ -103,6 +118,7 @@ // void UntrustedCertificateDialog::showEvent(QShowEvent *event) { + TRACE("UntrustedCertificateDialog::showEvent"); HbDialog::showEvent(event); mShowEventReceived = true; } @@ -128,6 +144,7 @@ // bool UntrustedCertificateDialog::constructDialog(const QVariantMap ¶meters) { + TRACE("UntrustedCertificateDialog::constructDialog"); if (!isParametersValid(parameters)) { return false; } @@ -152,17 +169,20 @@ setContentWidget(mContent); if (mContent->isCertificateValid()) { - HbAction *okAction = new HbAction(qtTrId("txt_common_button_ok"), this); - connect(okAction, SIGNAL(triggered()), this, SLOT(handleAccepted())); - addAction(okAction); + mOkAction = new HbAction(qtTrId("txt_common_button_ok"), this); + addAction(mOkAction); + disconnect(mOkAction, SIGNAL(triggered()), this, SLOT(close())); + connect(mOkAction, SIGNAL(triggered()), this, SLOT(handleAccepted())); HbAction *cancelAction = new HbAction(qtTrId("txt_common_button_cancel"), this); + addAction(cancelAction); + disconnect(cancelAction, SIGNAL(triggered()), this, SLOT(close())); connect(cancelAction, SIGNAL(triggered()), this, SLOT(handleRejected())); - addAction(cancelAction); } else { HbAction *closeAction = new HbAction(qtTrId("txt_common_button_close"), this); + addAction(closeAction); + disconnect(closeAction, SIGNAL(triggered()), this, SLOT(close())); connect(closeAction, SIGNAL(triggered()), this, SLOT(handleRejected())); - addAction(closeAction); } return true; @@ -174,6 +194,7 @@ // bool UntrustedCertificateDialog::updateFromParameters(const QVariantMap ¶meters) { + TRACE("UntrustedCertificateDialog::updateFromParameters"); if (!isParametersValid(parameters)) { return false; } @@ -189,21 +210,63 @@ // void UntrustedCertificateDialog::sendResult(int result) { + TRACE1("UntrustedCertificateDialog::sendResult", result); QVariant resultValue(result); mResultMap.insert(KUntrustedCertificateDialogResult, resultValue); emit deviceDialogData(mResultMap); } // ---------------------------------------------------------------------------- +// UntrustedCertificateDialog::confirmPermanentAccept() +// ---------------------------------------------------------------------------- +// +void UntrustedCertificateDialog::confirmPermanentAccept() +{ + TRACE("UntrustedCertificateDialog::confirmPermanentAccept"); + + HbDialog *dialog = new HbDialog(); + dialog->setAttribute(Qt::WA_DeleteOnClose, true); + dialog->setTimeout(HbPopup::NoTimeout); + dialog->setDismissPolicy(HbDialog::NoDismiss); + dialog->setModal(true); + + // TODO: localised UI string needed + QString questionTitle = tr("Certificate access"); + dialog->setHeadingWidget(new HbLabel(questionTitle)); + + HbWidget *widget = new HbWidget(); + QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(); + // TODO: localized UI string needed + QString questionText = + tr("Connections to '%1' will be made without warnings. Continue?") + .arg(mContent->serverName()); + HbLabel *textLabel = new HbLabel(questionText); + textLabel->setTextWrapping(Hb::TextWordWrap); + layout->addItem(textLabel); + widget->setLayout(layout); + dialog->setContentWidget(widget); + + HbAction *yesAction = new HbAction(hbTrId("txt_common_button_yes")); + dialog->addAction(yesAction); + disconnect(yesAction, SIGNAL(triggered()), this, SLOT(close())); + connect(yesAction, SIGNAL(triggered()), this, SLOT(handlePermanentAcceptance())); + dialog->addAction(new HbAction(hbTrId("txt_common_button_no"))); + + dialog->show(); +} + +// ---------------------------------------------------------------------------- // UntrustedCertificateDialog::handleAccepted() // ---------------------------------------------------------------------------- // void UntrustedCertificateDialog::handleAccepted() { + TRACE("UntrustedCertificateDialog::handleAccepted"); if (mContent->isPermanentAcceptChecked()) { - sendResult(KDialogAcceptedPermanently); + confirmPermanentAccept(); } else { sendResult(KDialogAccepted); + close(); } } @@ -213,6 +276,19 @@ // void UntrustedCertificateDialog::handleRejected() { + TRACE("UntrustedCertificateDialog::handleRejected"); sendResult(KDialogRejected); + close(); } +// ---------------------------------------------------------------------------- +// UntrustedCertificateDialog::handlePermanentAcceptance() +// ---------------------------------------------------------------------------- +// +void UntrustedCertificateDialog::handlePermanentAcceptance() +{ + TRACE("UntrustedCertificateDialog::handlePermanentAcceptance"); + sendResult(KDialogAcceptedPermanently); + close(); +} + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfo_symbian.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -18,7 +18,8 @@ #include "untrustedcertificateinfo_symbian.h" #include // TAlgorithmId #include // CX509Certificate -#include +#include // X509CertNameParser +#include // CMD5 // ======== LOCAL FUNCTIONS ======== @@ -72,17 +73,14 @@ // convertDateTime() // ---------------------------------------------------------------------------- // -QDateTime convertDateTime(const TTime& aTime) +void convertDateTime(const TTime& aFromTime, QDateTime& aToDateTime) { - const TDateTime &symbianDateTime = aTime.DateTime(); + const TDateTime &symbianDateTime = aFromTime.DateTime(); - QDateTime dateTime; QDate date(symbianDateTime.Year(), symbianDateTime.Month()+1, symbianDateTime.Day()+1); QTime time(symbianDateTime.Hour(), symbianDateTime.Minute(), symbianDateTime.Second()); - dateTime.setDate(date); - dateTime.setTime(time); - - return dateTime; + aToDateTime.setDate(date); + aToDateTime.setTime(time); } @@ -93,9 +91,10 @@ // ---------------------------------------------------------------------------- // UntrustedCertificateInfoSymbian::UntrustedCertificateInfoSymbian( - const CX509Certificate& aCert) : UntrustedCertificateInfoBase(), iCert(0) + const QByteArray &aEncodedCert) : UntrustedCertificateInfoBase(), + mCert(0), mMd5Fingerprint() { - QT_TRAP_THROWING(ConstructL(aCert)); + QT_TRAP_THROWING(ConstructL(aEncodedCert)); } // ---------------------------------------------------------------------------- @@ -104,7 +103,7 @@ // UntrustedCertificateInfoSymbian::~UntrustedCertificateInfoSymbian() { - delete iCert; + delete mCert; } // ---------------------------------------------------------------------------- @@ -119,39 +118,26 @@ } // ---------------------------------------------------------------------------- -// UntrustedCertificateInfoSymbian::isPermanentAcceptAllowed() -// ---------------------------------------------------------------------------- -// -bool UntrustedCertificateInfoSymbian::isPermanentAcceptAllowed() const -{ - return isDateValid(); -} - -// ---------------------------------------------------------------------------- // UntrustedCertificateInfoSymbian::certificateDetails() // ---------------------------------------------------------------------------- // -QString UntrustedCertificateInfoSymbian::certificateDetails() const +QString UntrustedCertificateInfoSymbian::certificateDetails(const QString &siteName) const { - QString details; - QTextStream stream(&details); - // TODO: localised UI strings needed - stream << tr("Issuer:\n%1\n").arg(issuerName()); - stream << endl; - stream << tr("Subject:\n%1\n").arg(subjectName()); - stream << endl; - stream << tr("Valid from:\n%1\n").arg(validFrom().toString()); - stream << endl; - stream << tr("Valid until:\n%1\n").arg(validTo().toString()); - stream << endl; - stream << tr("Certificate format:\n%1\n").arg(format()); - stream << endl; - stream << tr("Algorithm:\n%1\n").arg(combinedAlgorithmName()); - stream << endl; - stream << tr("Serial number:\n%1\n").arg(formattedSerialNumber()); - stream << endl; - stream << tr("Fingerprint (SHA1):\n%1\n").arg(formattedFingerprint()); - // TODO: MD5 fingerprint missing + // TODO: localized UI string needed + QString details = tr("Service:\n%1\n\nIssuer:\n%2\n\nSubject:\n%3\n\n" + "Valid from:\n%4\n\nValid until:\n%5\n\nCertificate format:\n%6\n\n" + "Algorithm:\n%7\n\nSerial number:\n%8\n\n" + "Fingerprint (SHA1):\n%9\n\nFingerprint (MD5):\n%10") + .arg(siteName) // %1 + .arg(issuerName()) // %2 + .arg(subjectName()) // %3 + .arg(validFrom().toString()) // %4 + .arg(validTo().toString()) // %5 + .arg(format()) // %6 + .arg(combinedAlgorithmName()) // %7 + .arg(formattedSerialNumber(serialNumber())) // %8 + .arg(formattedFingerprint(fingerprint())) // %9 + .arg(formattedFingerprint(mMd5Fingerprint)); // %10 return details; } @@ -159,34 +145,45 @@ // UntrustedCertificateInfoSymbian::ConstructL() // ---------------------------------------------------------------------------- // -void UntrustedCertificateInfoSymbian::ConstructL(const CX509Certificate& aCert) +void UntrustedCertificateInfoSymbian::ConstructL(const QByteArray &aEncodedCert) { - ASSERT( iCert == 0 ); - iCert = CX509Certificate::NewL( aCert ); + TPtrC8 encodedCert( reinterpret_cast( aEncodedCert.constData() ), + aEncodedCert.length() ); + + ASSERT( mCert == 0 ); + mCert = CX509Certificate::NewL( encodedCert ); - HBufC16* subjectBuf = iCert->SubjectL(); - mSubjectName = QString::fromUtf16(subjectBuf->Ptr(), subjectBuf->Length()); - delete subjectBuf; + HBufC16* subjectBuf = NULL; + X509CertNameParser::SubjectFullNameL( *mCert, subjectBuf ); + CleanupStack::PushL( subjectBuf ); + QT_TRYCATCH_LEAVING( mSubjectName = + QString::fromUtf16(subjectBuf->Ptr(), subjectBuf->Length()) ); + CleanupStack::PopAndDestroy( subjectBuf ); - HBufC16* issuerBuf = iCert->IssuerL(); - mIssuerName = QString::fromUtf16(issuerBuf->Ptr(), issuerBuf->Length()); - delete issuerBuf; - - TPtrC8 fingerprint = iCert->Fingerprint(); - mFingerprint = QByteArray::fromRawData( - reinterpret_cast(fingerprint.Ptr()), fingerprint.Length()); + HBufC16* issuerBuf = NULL; + X509CertNameParser::IssuerFullNameL( *mCert, issuerBuf ); + CleanupStack::PushL( issuerBuf ); + QT_TRYCATCH_LEAVING( mIssuerName = + QString::fromUtf16(issuerBuf->Ptr(), issuerBuf->Length())); + CleanupStack::PopAndDestroy( issuerBuf ); - TPtrC8 serialNumber = iCert->SerialNumber(); - mSerialNumber = QByteArray::fromRawData( - reinterpret_cast(serialNumber.Ptr()), serialNumber.Length()); + TPtrC8 fingerprint = mCert->Fingerprint(); + QT_TRYCATCH_LEAVING( mFingerprint = QByteArray::fromRawData( + reinterpret_cast(fingerprint.Ptr()), fingerprint.Length()) ); + + mMd5Fingerprint = Md5FingerprintL( mCert->Encoding() ); - const CValidityPeriod& validityPeriod = iCert->ValidityPeriod(); - mValidFrom = convertDateTime(validityPeriod.Start()); - mValidTo = convertDateTime(validityPeriod.Finish()); + TPtrC8 serialNumber = mCert->SerialNumber(); + QT_TRYCATCH_LEAVING( mSerialNumber = QByteArray::fromRawData( + reinterpret_cast(serialNumber.Ptr()), serialNumber.Length()) ); + + const CValidityPeriod& validityPeriod = mCert->ValidityPeriod(); + convertDateTime(validityPeriod.Start(), mValidFrom); + convertDateTime(validityPeriod.Finish(), mValidTo); mFormat = X509Certificate; - const CSigningAlgorithmIdentifier& alg = iCert->SigningAlgorithm(); + const CSigningAlgorithmIdentifier& alg = mCert->SigningAlgorithm(); mDigestAlgorithm = mapAlgorithm(alg.DigestAlgorithm().Algorithm()); mAsymmetricAlgorithm = mapAlgorithm(alg.AsymmetricAlgorithm().Algorithm()); } @@ -198,7 +195,7 @@ bool UntrustedCertificateInfoSymbian::CommonNameMatchesL(const QString &siteName) const { bool matches = false; - const CX500DistinguishedName& distinguishedName = iCert->SubjectName(); + const CX500DistinguishedName& distinguishedName = mCert->SubjectName(); HBufC* commonNameSymbian = distinguishedName.ExtractFieldL( KX520CommonName ); if (commonNameSymbian) { CleanupStack::PushL(commonNameSymbian); @@ -211,3 +208,20 @@ return matches; } +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoSymbian::Md5FingerprintL() +// ---------------------------------------------------------------------------- +// +QByteArray UntrustedCertificateInfoSymbian::Md5FingerprintL( const TDesC8& aEncodedCert ) const +{ + CMD5* md5 = CMD5::NewL(); + CleanupStack::PushL( md5 ); + + const TPtrC8 fingerprintSymbian = md5->Hash( aEncodedCert ); + QByteArray fingerprint( reinterpret_cast( fingerprintSymbian.Ptr() ), + fingerprintSymbian.Length() ); + + CleanupStack::PopAndDestroy( md5 ); + return fingerprint; +} + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfobase.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfobase.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateinfobase.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -71,32 +71,6 @@ } // ---------------------------------------------------------------------------- -// UntrustedCertificateInfoBase::formattedFingerprint() -// ---------------------------------------------------------------------------- -// -const QString UntrustedCertificateInfoBase::formattedFingerprint() const -{ - QString formatted; - QByteArray fp = fingerprint(); - - QString number; - int blockIndex = 0; - int count = fp.count(); - for (int index = 0; index < count; ++index) { - if (blockIndex == KCharsPerBlock) { - formatted.append(KBlockSeparator); - blockIndex = 0; - } - number.sprintf(KHexNumberFormatTwoDigitsWithLeadingZeroes, - static_cast(fp.at(index))); - formatted.append(number); - ++blockIndex; - } - - return formatted; -} - -// ---------------------------------------------------------------------------- // UntrustedCertificateInfoBase::serialNumber() // ---------------------------------------------------------------------------- // @@ -106,26 +80,6 @@ } // ---------------------------------------------------------------------------- -// UntrustedCertificateInfoBase::formattedSerialNumber() -// ---------------------------------------------------------------------------- -// -const QString UntrustedCertificateInfoBase::formattedSerialNumber() const -{ - QString formatted; - QByteArray sn = serialNumber(); - - QString number; - int count = sn.count(); - for (int index = 0; index < count; ++index) { - number.sprintf(KHexNumberFormatSimple, - static_cast(sn.at(index))); - formatted.append(number); - } - - return formatted; -} - -// ---------------------------------------------------------------------------- // UntrustedCertificateInfoBase::validFrom() // ---------------------------------------------------------------------------- // @@ -154,7 +108,7 @@ case X509Certificate: //: Type name for X509 certificates displayed in certificate details. // TODO: localised UI string - format = tr("X509"); + format = tr("X.509"); break; default: //: Type name for unknown certificates displayed in certificate details. @@ -201,6 +155,52 @@ } // ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::formattedFingerprint() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::formattedFingerprint( + const QByteArray &byteArray) const +{ + QString formatted; + + QString number; + int blockIndex = 0; + int count = byteArray.count(); + for (int index = 0; index < count; ++index) { + if (blockIndex == KCharsPerBlock) { + formatted.append(KBlockSeparator); + blockIndex = 0; + } + number.sprintf(KHexNumberFormatTwoDigitsWithLeadingZeroes, + static_cast(byteArray.at(index))); + formatted.append(number); + ++blockIndex; + } + + return formatted; +} + +// ---------------------------------------------------------------------------- +// UntrustedCertificateInfoBase::formattedSerialNumber() +// ---------------------------------------------------------------------------- +// +const QString UntrustedCertificateInfoBase::formattedSerialNumber( + const QByteArray &serialNumber) const +{ + QString formatted; + + QString number; + int count = serialNumber.count(); + for (int index = 0; index < count; ++index) { + number.sprintf(KHexNumberFormatSimple, + static_cast(serialNumber.at(index))); + formatted.append(number); + } + + return formatted; +} + +// ---------------------------------------------------------------------------- // UntrustedCertificateInfoBase::isDateValid() // ---------------------------------------------------------------------------- // diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/src/untrustedcertificateplugin.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateplugin.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificateplugin.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -82,7 +82,7 @@ Q_UNUSED(deviceDialogType); Q_UNUSED(parameters); - info->group = DeviceNotificationDialogGroup; // TODO: SecurityGroup ? + info->group = GenericDeviceDialogGroup; info->flags = NoDeviceDialogFlags; info->priority = DefaultPriority; diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/src/untrustedcertificatewidget.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificatewidget.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificatewidget.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -24,7 +24,6 @@ #include #include #include -#include const int KUnknownError = -5; // KErrNotSupported @@ -71,7 +70,7 @@ mProblemDescription->setTextWrapping(Hb::TextWordWrap); mMainLayout->addItem(mProblemDescription); - if (mIsSavingServerNamePossible && mCertificateInfo->isPermanentAcceptAllowed()) { + if (isPermanentAcceptAllowed()) { Q_ASSERT(mAcceptPermanently == 0); // TODO: localised UI string needed mAcceptPermanently = new HbCheckBox(tr("Accept permanently")); @@ -85,16 +84,12 @@ Q_ASSERT(mCertificateDetailsText == 0); mCertificateDetailsText = new HbTextEdit; - QString certificateDetails; - QTextStream stream(&certificateDetails); - // TODO: localized UI string needed - stream << tr("Service:\n%1\n").arg(mServerName); - stream << endl; - stream << mCertificateInfo->certificateDetails(); + QString certificateDetails = mCertificateInfo->certificateDetails(mServerName); mCertificateDetailsText->setPlainText(certificateDetails); mCertificateDetailsText->setReadOnly(true); mCertificateDetailsGroupBox->setContentWidget(mCertificateDetailsText); + mCertificateDetailsGroupBox->setCollapsed(true); mMainLayout->addItem(mCertificateDetailsGroupBox); setLayout(mMainLayout); @@ -111,6 +106,16 @@ } // ---------------------------------------------------------------------------- +// UntrustedCertificateWidget::isPermanentAcceptAllowed() +// ---------------------------------------------------------------------------- +// +bool UntrustedCertificateWidget::isPermanentAcceptAllowed() const +{ + return (mCertificateInfo->isDateValid() && (mServerName.length() > 0) && + mIsSavingServerNamePossible); +} + +// ---------------------------------------------------------------------------- // UntrustedCertificateWidget::isPermanentAcceptChecked() // ---------------------------------------------------------------------------- // @@ -123,6 +128,15 @@ } // ---------------------------------------------------------------------------- +// UntrustedCertificateWidget::serverName() +// ---------------------------------------------------------------------------- +// +QString UntrustedCertificateWidget::serverName() const +{ + return mServerName; +} + +// ---------------------------------------------------------------------------- // UntrustedCertificateWidget::processParameters() // ---------------------------------------------------------------------------- // diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/src/untrustedcertificatewidget_symbian.cpp --- a/pkiutilities/untrustedcertificatedialog/src/untrustedcertificatewidget_symbian.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificatewidget_symbian.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -20,26 +20,7 @@ #include "untrustedcertificatedefinitions.h" #include "untrustedcertificateinfobase.h" #include "untrustedcertificateinfo_symbian.h" -#include // CX509Certificate - - -// ======== LOCAL FUNCTIONS ======== - -// ---------------------------------------------------------------------------- -// DoProcessEncodedCertificateL() -// ---------------------------------------------------------------------------- -// -UntrustedCertificateInfoBase* DoProcessEncodedCertificateL( const QByteArray &encodedCert ) -{ - TPtrC8 ptr8( reinterpret_cast(encodedCert.constData()), encodedCert.length()); - CX509Certificate* cert = CX509Certificate::NewLC( ptr8 ); - - UntrustedCertificateInfoSymbian *info = 0; - info = new UntrustedCertificateInfoSymbian(*cert); - CleanupStack::PopAndDestroy( cert ); - - return info; -} +#include // TValidationError // ======== MEMBER FUNCTIONS ======== @@ -59,8 +40,7 @@ // void UntrustedCertificateWidget::processEncodedCertificate(const QByteArray &encodedCert) { - UntrustedCertificateInfoBase *info = 0; - QT_TRAP_THROWING(info = DoProcessEncodedCertificateL(encodedCert)); + UntrustedCertificateInfoBase *info = new UntrustedCertificateInfoSymbian(encodedCert); if (mCertificateInfo) { delete mCertificateInfo; mCertificateInfo = 0; diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.cpp --- a/pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -33,7 +33,7 @@ #include // EValidatedOK, ESignatureInvalid, EDateOutOfRange #endif -const QString RootDir = "c:/"; +const QString KTestCertDir = "c:/data/testCerts"; UntrustedCertDialogLauncher::UntrustedCertDialogLauncher(int& argc, char* argv[]) @@ -50,7 +50,7 @@ mFilesList = new HbComboBox; mFilesList->setEditable(false); - QDir dir(RootDir); + QDir dir(KTestCertDir); if (dir.exists()) { QFileInfoList list = dir.entryInfoList(QDir::Files); QListIterator iter(list); @@ -61,7 +61,7 @@ } layout->addItem(mFilesList); - mHostName = new HbTextEdit(tr("some.host.name.com")); + mHostName = new HbTextEdit(tr("some.host.com")); layout->addItem(mHostName); HbPushButton *button = 0; @@ -115,7 +115,7 @@ QString fileName = mFilesList->currentText(); QFile file; - QDir::setCurrent(RootDir); + QDir::setCurrent(KTestCertDir); file.setFileName(fileName); file.open(QIODevice::ReadOnly); QByteArray fileContent = file.readAll(); diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.iby Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,25 @@ +/* +* 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: Test application for untrusted certificate dialog. +* +*/ + + +#ifndef __DIALOGLAUNCHER_IBY__ +#define __DIALOGLAUNCHER_IBY__ + +file=ABI_DIR/BUILD_DIR/dialoglauncher.exe SHARED_LIB_DIR/dialoglauncher.exe +HB_UPGRADABLE_APP_REG_RSC( dialoglauncher ) + +#endif // __DIALOGLAUNCHER_IBY__ diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.pkg Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,43 @@ +; +; 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: Test application for untrusted certificate dialog. +; + +; Language +&EN + +; SIS header: name, uid, version +#{"dialoglauncher"},(0xE9bbd80d),1,0,0 + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Manual PKG pre-rules from PRO files +; Default dependency to Qt libraries +(0x2001E61C), 4, 6, 3, {"Qt"} + +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +; Executable and default resource files +"/epoc32/release/armv5/urel/dialoglauncher.exe" - "!:\sys\bin\dialoglauncher.exe" +"/epoc32/data/z/resource/apps/dialoglauncher.rsc" - "!:\resource\apps\dialoglauncher.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/dialoglauncher_reg.rsc" - "!:\private\10003a3f\import\apps\dialoglauncher_reg.rsc" + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.pro --- a/pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.pro Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/dialoglauncher.pro Thu Jun 24 12:46:20 2010 +0300 @@ -27,3 +27,10 @@ TARGET.CAPABILITY = CAP_APPLICATION } +BLD_INF_RULES.prj_exports += \ + "$${LITERAL_HASH}include " \ + "dialoglauncher.iby CORE_APP_LAYER_IBY_EXPORT_PATH(dialoglauncher.iby)" \ + "test_cert_expired.crt /epoc32/winscw/c/data/testCerts/test_cert_expired.crt" \ + "test_cert_server.crt /epoc32/winscw/c/data/testCerts/test_cert_server.crt" \ + "test_cert_sha2.crt /epoc32/winscw/c/data/testCerts/test_cert_sha2.crt" + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/test_cert_expired.crt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/test_cert_expired.crt Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICpTCCAg6gAwIBAgIBBDANBgkqhkiG9w0BAQUFADBwMQswCQYDVQQGEwJGSTEQ +MA4GA1UECBMHVGFtcGVyZTEQMA4GA1UEBxMHVGFtcGVyZTEOMAwGA1UEChMFTm9r +aWExFTATBgNVBAsTDFM2MCBTZWN1cml0eTEWMBQGA1UEAxMNc29tZS5ob3N0LmNv +bTAeFw0xMDA2MDIxMTQwMDFaFw0wNjA2MDIxMzU0MTdaMHAxCzAJBgNVBAYTAkZJ +MRAwDgYDVQQIEwdUYW1wZXJlMRAwDgYDVQQHEwdUYW1wZXJlMQ4wDAYDVQQKEwVO +b2tpYTEVMBMGA1UECxMMUzYwIFNlY3VyaXR5MRYwFAYDVQQDEw1zb21lLmhvc3Qu +Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/31fdPI+OcFPpaUC0D2XO +SmmDbRdouyUa0LCQ9sP9ChiGBqT6g2uv/irhcezA+gUdlERrEQsmmeXuMqktG0Jb +dxHJNSEboERr+65q7F4g3nJlxeNOlVllCKd4cFO7/oGRtduAJALkQmeKkPwgHPW+ +AFtG7U3rAd5xRjxzK8q7SQIDAQABo08wTTAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW +BBSJJ8UI5B6SWTG05XFyD3N+/6/+CTALBgNVHQ8EBAMCBeAwEQYJYIZIAYb4QgEB +BAQDAgZAMA0GCSqGSIb3DQEBBQUAA4GBAB+kN6paDHW46pLwCR5yJLp5m7DoEJ/L +IMWCmxKB90FADiBz+jvNQue3hO8SJVpvuRsy1y/e915LXYD4JAlIhZektB2DmYqg +6Tic9tlcQh101myX9sV5ORC2BKg4Tol2PUDaiVsaXSU2cgfWmxPmza2d4RvMvkGp +4L/EpR5ol37y +-----END CERTIFICATE----- diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/test_cert_server.crt Binary file pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/test_cert_server.crt has changed diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/test_cert_sha2.crt Binary file pkiutilities/untrustedcertificatedialog/tsrc/dialoglauncher/test_cert_sha2.crt has changed diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnection.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,471 @@ +/* +* 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: Secure connections test application +* +*/ + +#include "tlsconnection.h" +#include +#include +#include // KSolInetSSL, KSoSSLDomainName + +_LIT( KData, "GET index.html" ); +_LIT( KSecureProtocol, "TLS1.0" ); +_LIT( KCommDBIapId, "IAP\\Id" ); +_LIT8( KNewLine, "\n" ); + +const TInt KRecvBufferLength = 0x4000; +const TInt KOneSecondInMicroseconds = 1000000; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------- +// CTlsConnection::NewL +// --------------------------------------------------------- +// +CTlsConnection* CTlsConnection::NewL( MTlsConnectionObserver& aObs ) + { + RDebug::Print( _L("CTlsConnection::NewL()") ); + CTlsConnection* self = new ( ELeave ) CTlsConnection( aObs ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CTlsConnection::~CTlsConnection() +// ----------------------------------------------------------------------------- +// +CTlsConnection::~CTlsConnection() + { + RDebug::Print( _L("CTlsConnection::~CTlsConnection()") ); + Cancel(); + iDelayTimer.Close(); + CloseSession(); + delete iSendBuffer; + delete iSendBufPtr; + } + +// ----------------------------------------------------------------------------- +// CTlsConnection::ConnectL() +// ----------------------------------------------------------------------------- +// +void CTlsConnection::ConnectL( const TDesC& aHostName, TInt aPort, TInt aDelay ) + { + RDebug::Print( _L("CTlsConnection::Connect() host '%S', port %d, delay %d"), + &aHostName, aPort, aDelay ); + CloseConnection(); + + // Parameters + if( iHostName ) + { + delete iHostName; + iHostName = NULL; + } + iHostName = aHostName.AllocL(); + iPort = aPort; + iDelay = aDelay; + + // Save host name in 8-bit form for server certificate checking + if( iHostNameForCertCheck ) + { + delete iHostNameForCertCheck; + iHostNameForCertCheck = NULL; + } + iHostNameForCertCheck = HBufC8::NewL( aHostName.Length() ); + TPtr8 ptr( iHostNameForCertCheck->Des() ); + ptr.Copy( aHostName ); + + // Convert send data to 8-bit and add newline at the end + if( iSendBuffer || iSendBufPtr ) + { + delete iSendBuffer; + iSendBuffer = NULL; + delete iSendBufPtr; + iSendBufPtr = NULL; + } + iSendBuffer = HBufC8::NewL( KData().Length() + 1 ); + iSendBufPtr = new( ELeave ) TPtr8( iSendBuffer->Des() ); + iSendBufPtr->Copy( KData ); + iSendBufPtr->Append( KNewLine ); + + // Connect + RDebug::Printf( "CTlsConnection::ConnectL iConnection.Open" ); + User::LeaveIfError( iConnection.Open( iSockServer ) ); + RDebug::Printf( "CTlsConnection::ConnectL iConnPref.SetDirection" ); + iConnPref.SetDirection( ECommDbConnectionDirectionOutgoing ); + if( iCurrentIap ) + { + // uses the same IAP as before + RDebug::Printf( "CTlsConnection::ConnectL SetIapId(%d)", iCurrentIap ); + iConnPref.SetIapId( iCurrentIap ); + iConnPref.SetDialogPreference( ECommDbDialogPrefDoNotPrompt ); + } + else + { + // not defined, prompts the IAP from user + RDebug::Printf( "CTlsConnection::ConnectL ECommDbDialogPrefPrompt" ); + iConnPref.SetDialogPreference( ECommDbDialogPrefPrompt ); + } + StateChange( EConnectingNetwork ); + RDebug::Printf( "CTlsConnection::ConnectL iConnection.Start" ); + iConnection.Start( iConnPref, iStatus ); + SetActive(); + RDebug::Printf( "CTlsConnection::ConnectL end" ); + } + +// ----------------------------------------------------------------------------- +// CTlsConnection::Disconnect() +// ----------------------------------------------------------------------------- +// +void CTlsConnection::Disconnect() + { + Cancel(); + CloseConnection(); + StateChange( EDisconnected ); + } + +// ----------------------------------------------------------------------------- +// CTlsConnection::RunL +// ----------------------------------------------------------------------------- +// +void CTlsConnection::RunL() + { + if( iState == EReading && ( iStatus.Int() == KErrEof || iStatus.Int() == KErrSSLAlertCloseNotify ) ) + { + RDebug::Printf( "CTlsConnection::RunL: EReading, EOF: iStatus = %d", iStatus.Int() ); + StateChange( EAllDone ); + } + else if( iStatus.Int() == KErrNone ) + { + switch ( iState ) + { + case EConnectingNetwork: + RDebug::Printf( "CTlsConnection::RunL: EConnectingNetwork" ); + if( !iCurrentIap ) + { + iConnection.GetIntSetting( KCommDBIapId, iCurrentIap ); + } + if( iDelay ) + { + TTimeIntervalMicroSeconds32 delay( iDelay * KOneSecondInMicroseconds ); + iDelayTimer.After( iStatus, delay ); + StateChange( EOpeningDelay ); + } + else + { + iConnection.ProgressNotification( iProgress, iStatus ); + StateChange( EResolvingHostName ); + } + SetActive(); + break; + + case EOpeningDelay: + iConnection.ProgressNotification( iProgress, iStatus ); + StateChange( EResolvingHostName ); + SetActive(); + break; + + case EResolvingHostName: + { + RDebug::Printf( "CTlsConnection::RunL: EResolvingHostName" ); + TInt err = iHostResolver.Open( iSockServer, KAfInet, KProtocolInetUdp, iConnection ); + User::LeaveIfError( err ); + iHostResolver.GetByName( *iHostName, iNameEntry, iStatus ); + StateChange( EConnectingServer ); + SetActive(); + } + break; + + case EConnectingServer: + { + iRemoteAddr.SetFamily( KAfInet ); + iRemoteAddr = TInetAddr( iNameEntry().iAddr ); + iRemoteAddr.SetPort( iPort ); + + RDebug::Printf( "CTlsConnection::RunL: EConnectingServer" ); + TInt err = iSocket.Open( iSockServer, KAfInet, KSockStream, KProtocolInetTcp, iConnection ); + RDebug::Printf( "CTlsConnection::RunL: iSocket.Open ret %d", err ); + User::LeaveIfError( err ); + iSocket.Connect( iRemoteAddr, iStatus ); + StateChange( EHandshaking ); + SetActive(); + } + break; + + case EHandshaking: + { + RDebug::Printf( "CTlsConnection::RunL: EHandshaking" ); + if( iSecureSocket ) + { + delete iSecureSocket; + iSecureSocket = NULL; + } + iSecureSocket = CSecureSocket::NewL( iSocket, KSecureProtocol ); + iSecureSocket->SetDialogMode( EDialogModeAttended ); + // Server name must be set, otherwise CCTSecurityDialogsAO fails with KErrArgument + iSecureSocket->SetOpt( KSoSSLDomainName, KSolInetSSL, *iHostNameForCertCheck ); + iSecureSocket->StartClientHandshake( iStatus ); + StateChange( EConnecting ); + SetActive(); + } + break; + + case EConnecting: + { + RDebug::Printf( "CTlsConnection::RunL: EConnecting" ); + // Check if connection is closed + const TInt stage( iProgress().iStage ); + if( stage == KConnectionClosed || stage == KLinkLayerClosed ) + { + StateChange( EDisconnected ); + } + else + { + iConnection.ProgressNotification( iProgress, iStatus ); + StateChange( ESending ); + SetActive(); + } + } + break; + + case ESending: + RDebug::Printf( "CTlsConnection::RunL: ESending" ); + iSecureSocket->Send( *iSendBufPtr, iStatus, iSendLength ); + StateChange( EReading ); + SetActive(); + break; + + case EReading: + iTotalRecvCount += iRecvLength(); + RDebug::Printf( "CTlsConnection::RunL: EReading, read %d bytes", iTotalRecvCount ); + iObserver.HandleTransferData( iRecvBuffer->Des(), iTotalRecvCount ); + + iRecvBufPtr->Zero(); + iSecureSocket->RecvOneOrMore( *iRecvBufPtr, iStatus, iRecvLength ); + SetActive(); + break; + + default: + break; + } + } + else + { + RDebug::Printf( "CTlsConnection::RunL: ERROR iStatus %d", iStatus.Int() ); + CloseConnection(); + StateChange( EDisconnected, iStatus.Int() ); + } + } + +// --------------------------------------------------------------------------- +// CTlsConnection::DoCancel() +// --------------------------------------------------------------------------- +// +void CTlsConnection::DoCancel() + { + RDebug::Printf( "CTlsConnection::DoCancel(), iState=%d", iState ); + + switch( iState ) + { + case EConnectingNetwork: + iConnection.Stop(); + break; + + case EOpeningDelay: + iDelayTimer.Cancel(); + iConnection.Stop(); + break; + + case EResolvingHostName: + iConnection.CancelProgressNotification(); + iConnection.Stop(); + break; + + case EConnectingServer: + iHostResolver.Cancel(); + iConnection.Stop(); + break; + + case EHandshaking: + iSocket.CancelConnect(); + iConnection.Stop(); + break; + + case EConnecting: + if( iSecureSocket ) + { + iSecureSocket->CancelHandshake(); + delete iSecureSocket; + iSecureSocket = NULL; + } + iSocket.Close(); + iConnection.Stop(); + break; + + case ESending: + if( iSecureSocket ) + { + iSecureSocket->CancelSend(); + delete iSecureSocket; + iSecureSocket = NULL; + } + iSocket.Close(); + iConnection.Stop(); + break; + + case EReading: + if( iSecureSocket ) + { + iSecureSocket->CancelRecv(); + delete iSecureSocket; + iSecureSocket = NULL; + } + iSocket.Close(); + iConnection.Stop(); + break; + + case EAllDone: + case EIdle: + case EDisconnected: + default: + break; + } + + StateChange( EDisconnected ); + } + + +// ----------------------------------------------------------------------------- +// CTlsConnection::RunError() +// ----------------------------------------------------------------------------- +// +TInt CTlsConnection::RunError( TInt aError ) + { + RDebug::Printf( "CTlsConnection::RunError, aError: %d", aError ); + CloseConnection(); + StateChange( EDisconnected, aError ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CTlsConnection::CTlsConnection() +// ----------------------------------------------------------------------------- +// +CTlsConnection::CTlsConnection( MTlsConnectionObserver& aObs ) : + CActive( CActive::EPriorityStandard ), iObserver( aObs ), iState( ENotInitialized ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CTlsConnection::ConstructL() +// ----------------------------------------------------------------------------- +// +void CTlsConnection::ConstructL() + { + RDebug::Printf( "CTlsConnection::ConstructL begin" ); + + User::LeaveIfError( iDelayTimer.CreateLocal() ); + RDebug::Printf( "CTlsConnection::ConstructL iSockServer" ); + User::LeaveIfError( iSockServer.Connect() ); + RDebug::Printf( "CTlsConnection::ConstructL iConnection" ); + User::LeaveIfError( iConnection.Open( iSockServer ) ); + RDebug::Printf( "CTlsConnection::ConstructL buffers" ); + iRecvBuffer = HBufC8::NewL( KRecvBufferLength ); + iRecvBufPtr = new( ELeave ) TPtr8( iRecvBuffer->Des() ); + StateChange( EIdle ); + + RDebug::Printf( "CTlsConnection::ConstructL end" ); + } + +// --------------------------------------------------------------------------- +// CTlsConnection::CloseConnection() +// --------------------------------------------------------------------------- +// +void CTlsConnection::CloseConnection() + { + RDebug::Printf( "CTlsConnection::CloseConnection begin" ); + if( iSecureSocket ) + { + delete iSecureSocket; + iSecureSocket = NULL; + } + iSocket.Close(); + iHostResolver.Close(); + if( iConnection.SubSessionHandle() ) + { + if( iState >= EConnectingNetwork ) + { + TInt err = iConnection.Stop(); + if( err != KErrNone ) + { + RDebug::Printf( "iConnection.Stop() failed: %d", err ); + } + } + iConnection.Close(); + } + RDebug::Printf( "CTlsConnection::CloseConnection end" ); + } + +// --------------------------------------------------------------------------- +// CTlsConnection::CloseSession() +// --------------------------------------------------------------------------- +// +void CTlsConnection::CloseSession() + { + RDebug::Printf( "CTlsConnection::CloseSession" ); + CloseConnection(); + iSockServer.Close(); + delete iHostName; + iHostName = NULL; + delete iHostNameForCertCheck; + iHostNameForCertCheck = NULL; + delete iRecvBuffer; + iRecvBuffer = NULL; + delete iRecvBufPtr; + iRecvBufPtr = NULL; + StateChange( EDisconnected ); + } + +// ----------------------------------------------------------------------------- +// CTlsConnection::StateChange() +// ----------------------------------------------------------------------------- +// +void CTlsConnection::StateChange( TTlsConnectionState aNewState, TInt aError ) + { + RDebug::Printf( "CTlsConnection::StateChange, aNewState=%d, aError=%d", aNewState, aError ); + if( aNewState != iState && iState != EAllDone ) + { + iState = aNewState; + iObserver.HandleNetworkEvent( aNewState, aError ); + } + } + +// --------------------------------------------------------------------------- +// CTlsConnection::ReadL() +// --------------------------------------------------------------------------- +// +void CTlsConnection::ReadL() + { + RDebug::Printf( "CTlsConnection::ReadL(), iState=%d", iState ); + + TPtr8 recvBuffer = iRecvBuffer->Des(); + recvBuffer.Zero(); + iSecureSocket->RecvOneOrMore( recvBuffer, iStatus, iRecvLength ); + SetActive(); + } + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnection.h Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,81 @@ +/* +* 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: Secure connections test application +* +*/ + +#ifndef C_TESTTLSCONNECTION_H +#define C_TESTTLSCONNECTION_H + +#include // RConnection +#include // TInetAddr +#include // TCommDbConnPref +#include "tlsconnectionobserver.h" // MTlsConnectionObserver, TTlsConnectionState + +class CSecureSocket; + + +class CTlsConnection : public CActive + { + public: // new functions + static CTlsConnection* NewL( MTlsConnectionObserver& aObs ); + ~CTlsConnection(); + void ConnectL( const TDesC& aHostName, TInt aPort, TInt aDelay ); + void Disconnect(); + + protected: // from CActive + void RunL(); + void DoCancel(); + TInt RunError( TInt aError ); + + private: // constructors + CTlsConnection( MTlsConnectionObserver& aObs ); + void ConstructL(); + + private: // new functions + void CloseConnection(); + void CloseSession(); + void StateChange( TTlsConnectionState aNewState, TInt aError = KErrNone ); + void ReadL(); + + private: // data + MTlsConnectionObserver& iObserver; + RConnection iConnection; + RSocketServ iSockServer; + TCommDbConnPref iConnPref; + TUint32 iCurrentIap; + TNifProgressBuf iProgress; + HBufC* iHostName; + HBufC8* iHostNameForCertCheck; + TInt iPort; + TInt iDelay; + RHostResolver iHostResolver; + TNameEntry iNameEntry; + TInetAddr iRemoteAddr; + RSocket iSocket; + CSecureSocket* iSecureSocket; + HBufC8* iRecvBuffer; + TPtr8* iRecvBufPtr; + TSockXfrLength iRecvLength; + HBufC8* iSendBuffer; + TPtr8* iSendBufPtr; + TSockXfrLength iSendLength; + TInt iTotalRecvCount; + TTlsConnectionState iState; + RTimer iDelayTimer; + }; + + +#endif // C_TESTTLSCONNECTION_H + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionapp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionapp.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,197 @@ +/* +* 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: Secure connections test application +* +*/ + +#include "tlsconnectionapp.h" +#include "tlsconnection.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +TlsConnectionApplication::TlsConnectionApplication(int& aArgc, char* aArgv[]) + : HbApplication(aArgc, aArgv), mMainWindow(0), mMainView(0), mHost(0), + mPort(0), mOpeningDelay(0), mStatusLabel(0), mConnection(0) +{ + qDebug() << "TLStest TlsConnectionApplication begin"; + + mMainWindow = new HbMainWindow(); + mMainView = new HbView(); + mMainView->setTitle(tr("TLS Test")); + + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical); + + mHost = new HbComboBox; + QStringList defaultHosts; + defaultHosts << "www.nokia.com" + << "www.f-secure.com" + << "www.google.fi" + << "www.tut.fi"; + mHost->addItems(defaultHosts); + connect(mHost, SIGNAL(editingFinished()), this, SLOT(addHostName())); + mHost->setEditable(true); + layout->addItem(mHost); + + mPort = new HbLineEdit(tr("Port?")); + mPort->setText(tr("443")); + layout->addItem(mPort); + + mOpeningDelay = new HbLineEdit(tr("Opening delay?")); + mOpeningDelay->setText(tr("0")); + layout->addItem(mOpeningDelay); + + mStatusLabel = new HbLabel(tr("Inactive")); + layout->addItem(mStatusLabel); + + HbPushButton *activateButton = new HbPushButton(tr("Run Test")); + connect(activateButton, SIGNAL(clicked()), this, SLOT(runTestPressed())); + layout->addItem(activateButton); + + HbPushButton *closeButton = new HbPushButton("Close"); + connect(closeButton, SIGNAL(clicked()), qApp, SLOT(quit())); + layout->addItem(closeButton); + + mMainView->setLayout(layout); + mMainWindow->addView(mMainView); + mMainWindow->show(); + + qDebug() << "TLStest TlsConnectionApplication end"; +} + +TlsConnectionApplication::~TlsConnectionApplication() +{ + qDebug() << "TLStest ~TlsConnectionApplication begin"; + + delete mConnection; + delete mMainView; + delete mMainWindow; + + qDebug() << "TLStest ~TlsConnectionApplication end"; +} + +void TlsConnectionApplication::HandleNetworkEvent( TTlsConnectionState aEvent, TInt aError ) +{ + switch( aEvent ) { + case ENotInitialized: + showProgress( tr("NotInitialized"), aError ); + break; + case EDisconnected: + showProgress( tr("Disconnected"), aError ); + break; + case EIdle: + showProgress( tr("Idle"), aError ); + break; + case EConnectingNetwork: + showProgress( tr("ConnectingNetwork"), aError ); + break; + case EOpeningDelay: + showProgress( tr("OpeningDelay"), aError ); + break; + case EResolvingHostName: + showProgress( tr("ResolvingHostName"), aError ); + break; + case EConnectingServer: + showProgress( tr("ConnectingServer"), aError ); + break; + case EHandshaking: + showProgress( tr("Handshaking"), aError ); + break; + case EConnecting: + showProgress( tr("Connecting"), aError ); + break; + case ESending: + showProgress( tr("Sending"), aError ); + break; + case EReading: + showProgress( tr("Reading"), aError ); + break; + case EAllDone: + showProgress( tr("AllDone"), aError ); + break; + default: + showProgress( tr("unknown"), aError ); + break; + } +} + +void TlsConnectionApplication::HandleTransferData( const TDesC8& /*aData*/, TInt aLength ) +{ + qDebug() << "TLStest HandleTransferData, length:" << aLength; +} + +void TlsConnectionApplication::runTestPressed() +{ + qDebug() << "TLStest runTestPressed begin"; + + if (mConnection) { + delete mConnection; + mConnection = NULL; + } + + TPtrC host( reinterpret_cast( mHost->currentText().constData() )); + TInt port = getInt(mPort->text(), 443); + TInt delay = getInt(mOpeningDelay->text(), 0); + qDebug() << "TLStest runTestPressed host:" << mHost->currentText() << "port" << port << "delay" << delay; + TRAPD( err, mConnection = CTlsConnection::NewL( *this ) ); + qDebug() << "TLStest runTestPressed err:" << err; + if( !err ) { + qDebug() << "TLStest runTestPressed CTlsConnection created, connecting"; + TRAP( err, mConnection->ConnectL( host, port, delay ) ); + qDebug() << "TLStest runTestPressed err:" << err; + } + + qDebug() << "TLStest runTestPressed end"; +} + +void TlsConnectionApplication::addHostName() +{ + QString newHostName = mHost->currentText(); + mHost->addItem(newHostName); +} + +void TlsConnectionApplication::showProgress(const QString& aStep, int aError) +{ + qDebug() << "TLStest showProgress step" << aStep << "error" << aError; + if (mStatusLabel) { + if (!aError) { + mStatusLabel->setPlainText(aStep); + } else { + QString msg(aStep); + msg.append(tr(" error %1").arg(aError)); + mStatusLabel->setPlainText(msg); + } + } +} + +TInt TlsConnectionApplication::getInt(const QString& aString, int defaultValue) +{ + qDebug() << "TLStest getInt" << aString << "defaultValue" << defaultValue; + + bool ok = false; + TInt value = aString.toInt(&ok, 10); + if (!ok) { + value = defaultValue; + } + + qDebug() << "TLStest getInt returns " << value; + return value; +} diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionapp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionapp.h Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,63 @@ +/* +* 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: Secure connections test application +* +*/ + +#ifndef TLSCONNECTIONAPP_H +#define TLSCONNECTIONAPP_H + +#include +#include "tlsconnectionobserver.h" + +class HbMainWindow; +class HbView; +class HbComboBox; +class HbLineEdit; +class HbLabel; +class CTlsConnection; + + +class TlsConnectionApplication : public HbApplication, public MTlsConnectionObserver +{ + Q_OBJECT + +public: // constructor and destructor + TlsConnectionApplication(int& aArgc, char* aArgv[]); + virtual ~TlsConnectionApplication(); + +public: // from MTlsConnectionObserver + void HandleNetworkEvent(TTlsConnectionState aEvent, TInt aError); + void HandleTransferData(const TDesC8& aData, TInt aLength); + +private slots: + void runTestPressed(); + void addHostName(); + +private: // new functions + void showProgress(const QString& aStep, int aError); + TInt getInt(const QString& aString, int defaultValue); + +private: // data + HbMainWindow *mMainWindow; + HbView *mMainView; + HbComboBox *mHost; + HbLineEdit *mPort; + HbLineEdit *mOpeningDelay; + HbLabel *mStatusLabel; + CTlsConnection *mConnection; +}; + +#endif // TLSCONNECTIONAPP_H + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionmain.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,43 @@ +/* +* 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: Secure connections test application +* +*/ + +#include "tlsconnectionapp.h" +#include +#include // CTrapCleanup + + +int DoMainL(int argc, char *argv[]) +{ + TlsConnectionApplication app(argc, argv); + return app.exec(); +} + +int main(int argc, char *argv[]) +{ + qDebug() << "TLStest main begin"; + + int err = 0; + CTrapCleanup *cleanup = CTrapCleanup::New(); + if (cleanup) { + TRAP(err, DoMainL(argc, argv)); + delete cleanup; + } + + qDebug() << "TLStest main returns" << err; + return err; +} + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconnectionobserver.h Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,44 @@ +/* +* 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: Secure connections test application +* +*/ + +#ifndef M_MTLSCONNECTIONOBSERVER_H +#define M_MTLSCONNECTIONOBSERVER_H + +enum TTlsConnectionState + { + ENotInitialized = 0, + EDisconnected, + EIdle, + EConnectingNetwork, + EOpeningDelay, + EResolvingHostName, + EConnectingServer, + EHandshaking, + EConnecting, + ESending, + EReading, + EAllDone + }; + +class MTlsConnectionObserver + { + public: + virtual void HandleNetworkEvent( TTlsConnectionState aEvent, TInt aError ) = 0; + virtual void HandleTransferData( const TDesC8& aData, TInt aLength ) = 0; + }; + +#endif // M_MTLSCONNECTIONOBSERVER_H diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.iby Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,25 @@ +/* +* 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: Secure connections test application +* +*/ + + +#ifndef __TLSCONNTEST_IBY__ +#define __TLSCONNTEST_IBY__ + +file=ABI_DIR/BUILD_DIR/tlsconntest.exe SHARED_LIB_DIR/tlsconntest.exe +HB_UPGRADABLE_APP_REG_RSC( tlsconntest ) + +#endif // __TLSCONNTEST_IBY__ diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.loc Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,19 @@ +/* +* 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: Secure connections test application +* +*/ + +#define STRING_r_short_caption "TlsConnTest" +#define STRING_r_caption "TlsConnTest" diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.pkg Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,41 @@ +; +; 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: Secure connections test application +; +; + +; Language +&EN + +; SIS header: name, uid, version +#{"TlsConnTest"},(0xE8DC94B1),1,0,0 + +; Vendor name, localised and unique +%{"Nokia"} +:"Nokia" + +; Default dependency to Qt libraries +(0x2001E61C), *, *, *, {"Qt"} + +; Default platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +; Executable and default resource files +"/epoc32/release/armv5/urel/tlsconntest.exe" - "!:\sys\bin\tlsconntest.exe" +"/epoc32/data/z/resource/apps/tlsconntest.rsc" - "!:\resource\apps\tlsconntest.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/tlsconntest_reg.rsc" - "!:\private\10003a3f\import\apps\tlsconntest_reg.rsc" + diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/untrustedcertificatedialog/tsrc/tlsconntest/tlsconntest.pro Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,39 @@ +# +# 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: Secure connections test application +# + +TEMPLATE = app +TARGET = tlsconntest +CONFIG += hb +DEPENDPATH += . +INCLUDEPATH += . + +HEADERS += tlsconnection.h tlsconnectionobserver.h tlsconnectionapp.h tlsconntest.loc +SOURCES += tlsconnectionmain.cpp tlsconnection.cpp tlsconnectionapp.cpp +LIBS += -lesock -lcommdb -linsock -linetprotutil -lsecuresocket + +symbian { + BLD_INF_RULES.prj_exports += "tlsconntest.loc APP_LAYER_LOC_EXPORT_PATH(tlsconntest.loc)" + + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0xE8DC94B1 # random uid + TARGET.CAPABILITY = CAP_APPLICATION +} + +BLD_INF_RULES.prj_exports += \ + "$${LITERAL_HASH}include " \ + "tlsconntest.iby CORE_APP_LAYER_IBY_EXPORT_PATH(tlsconntest.iby)" + + \ No newline at end of file diff -r aad866c37519 -r cc1cea6aabaf pkiutilities/untrustedcertificatedialog/untrustedcertificateplugin.pro --- a/pkiutilities/untrustedcertificatedialog/untrustedcertificateplugin.pro Fri Jun 11 14:28:40 2010 +0300 +++ b/pkiutilities/untrustedcertificatedialog/untrustedcertificateplugin.pro Thu Jun 24 12:46:20 2010 +0300 @@ -43,7 +43,7 @@ SOURCES += src/untrustedcertificatewidget_symbian.cpp \ src/untrustedcertificateinfo_symbian.cpp - LIBS += -lcrypto -lx509 -lx500 + LIBS += -lcrypto -lx509 -lx500 -lhash -lX509CertNameParser pluginstub.sources = untrustedcertdialog.dll pluginstub.path = /resource/plugins/devicedialogs diff -r aad866c37519 -r cc1cea6aabaf secsrv_plat/security_code_ui_api/inc/SecUiSecurityHandler.h --- a/secsrv_plat/security_code_ui_api/inc/SecUiSecurityHandler.h Fri Jun 11 14:28:40 2010 +0300 +++ b/secsrv_plat/security_code_ui_api/inc/SecUiSecurityHandler.h Thu Jun 24 12:46:20 2010 +0300 @@ -112,7 +112,15 @@ */ void RemoveSplashScreenL() const; + /** + * ShowGenericErrorNoteL + */ void ShowGenericErrorNoteL(TInt aStatus); + /** + * CancelOpenQuery + */ + TInt CancelOpenQuery(TInt aStatus); + private: // DATA /***************************************************** * Series 60 Customer / ETel diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/Autolock/Autolock.pro --- a/securitydialogs/Autolock/Autolock.pro Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/Autolock/Autolock.pro Thu Jun 24 12:46:20 2010 +0300 @@ -34,6 +34,7 @@ LIBS+=-lxqservice -lxqserviceutil -lflogger LIBS += -L../../../../../bin/release -lautolockuseractivityservice LIBS += -lsecui -letelmm -letel -lcustomapi -lcentralrepository +LIBS += -lcone -lws32 -lkeylockpolicyapi SERVICE.FILE = service_conf.xml SERVICE.OPTIONS = embeddable @@ -53,6 +54,8 @@ DEPLOYMENT += crmlFiles } -BLD_INF_RULES.prj_exports += "./rom/Autolock.iby CORE_APP_LAYER_IBY_EXPORT_PATH(Autolock.iby)" -BLD_INF_RULES.prj_exports += "./rom/AutolockSrv.iby CORE_APP_LAYER_IBY_EXPORT_PATH(AutolockSrv.iby)" +BLD_INF_RULES.prj_exports += "./rom/Autolock.iby CORE_APP_LAYER_IBY_EXPORT_PATH(Autolock.iby)" +BLD_INF_RULES.prj_exports += "./conf/Autolock.confml MW_LAYER_CONFML(Autolock.confml)" +BLD_INF_RULES.prj_exports += "./conf/CI_Autolock.confml MW_LAYER_CONFML(CI_Autolock.confml)" +BLD_INF_RULES.prj_exports += "./rom/AutolockSrv.iby CORE_APP_LAYER_IBY_EXPORT_PATH(AutolockSrv.iby)" BLD_INF_RULES.prj_exports += "./PubSub/SecurityUIsPrivatePSKeys.h |../../inc/securityuisprivatepskeys.h" diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/Autolock/autolock.qcrml --- a/securitydialogs/Autolock/autolock.qcrml Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/Autolock/autolock.qcrml Thu Jun 24 12:46:20 2010 +0300 @@ -12,13 +12,15 @@ - + + + + + + - - - diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/Autolock/autolockuseractivityservice/bwins/autolockuseractivityserviceu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/Autolock/autolockuseractivityservice/bwins/autolockuseractivityserviceu.def Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,16 @@ +EXPORTS + ?trUtf8@AutolockUserActivityService@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString AutolockUserActivityService::trUtf8(char const *, char const *, int) + ?tr@AutolockUserActivityService@@SA?AVQString@@PBD0@Z @ 2 NONAME ; class QString AutolockUserActivityService::tr(char const *, char const *) + ?trUtf8@AutolockUserActivityService@@SA?AVQString@@PBD0@Z @ 3 NONAME ; class QString AutolockUserActivityService::trUtf8(char const *, char const *) + ?getStaticMetaObject@AutolockUserActivityService@@SAABUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const & AutolockUserActivityService::getStaticMetaObject(void) + ?setInactivityPeriod@AutolockUserActivityService@@UAEXH@Z @ 5 NONAME ; void AutolockUserActivityService::setInactivityPeriod(int) + ?tr@AutolockUserActivityService@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString AutolockUserActivityService::tr(char const *, char const *, int) + ?qt_metacast@AutolockUserActivityService@@UAEPAXPBD@Z @ 7 NONAME ; void * AutolockUserActivityService::qt_metacast(char const *) + ??1AutolockUserActivityService@@UAE@XZ @ 8 NONAME ; AutolockUserActivityService::~AutolockUserActivityService(void) + ?qt_metacall@AutolockUserActivityService@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 9 NONAME ; int AutolockUserActivityService::qt_metacall(enum QMetaObject::Call, int, void * *) + ?inactivityPeriod@AutolockUserActivityService@@UBEHXZ @ 10 NONAME ; int AutolockUserActivityService::inactivityPeriod(void) const + ??0AutolockUserActivityService@@QAE@XZ @ 11 NONAME ; AutolockUserActivityService::AutolockUserActivityService(void) + ??_EAutolockUserActivityService@@UAE@I@Z @ 12 NONAME ; AutolockUserActivityService::~AutolockUserActivityService(unsigned int) + ?staticMetaObject@AutolockUserActivityService@@2UQMetaObject@@B @ 13 NONAME ; struct QMetaObject const AutolockUserActivityService::staticMetaObject + ?metaObject@AutolockUserActivityService@@UBEPBUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const * AutolockUserActivityService::metaObject(void) const + diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/Autolock/autolockuseractivityservice/eabi/autolockuseractivityserviceu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/Autolock/autolockuseractivityservice/eabi/autolockuseractivityserviceu.def Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,16 @@ +EXPORTS + _ZN27AutolockUserActivityService11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME + _ZN27AutolockUserActivityService11qt_metacastEPKc @ 2 NONAME + _ZN27AutolockUserActivityService16staticMetaObjectE @ 3 NONAME DATA 16 + _ZN27AutolockUserActivityService19getStaticMetaObjectEv @ 4 NONAME + _ZN27AutolockUserActivityService19setInactivityPeriodEi @ 5 NONAME + _ZN27AutolockUserActivityServiceC1Ev @ 6 NONAME + _ZN27AutolockUserActivityServiceC2Ev @ 7 NONAME + _ZN27AutolockUserActivityServiceD0Ev @ 8 NONAME + _ZN27AutolockUserActivityServiceD1Ev @ 9 NONAME + _ZN27AutolockUserActivityServiceD2Ev @ 10 NONAME + _ZNK27AutolockUserActivityService10metaObjectEv @ 11 NONAME + _ZNK27AutolockUserActivityService16inactivityPeriodEv @ 12 NONAME + _ZTI27AutolockUserActivityService @ 13 NONAME + _ZTV27AutolockUserActivityService @ 14 NONAME + diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/Autolock/conf/Autolock.confml Binary file securitydialogs/Autolock/conf/Autolock.confml has changed diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/Autolock/conf/CI_Autolock.confml Binary file securitydialogs/Autolock/conf/CI_Autolock.confml has changed diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/SecUi/Inc/SecQueryUi.h --- a/securitydialogs/SecUi/Inc/SecQueryUi.h Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/SecUi/Inc/SecQueryUi.h Thu Jun 24 12:46:20 2010 +0300 @@ -25,6 +25,7 @@ #include #define ESecUiTypeMask 0x0FFFFFF +#define ESecUiBasicTypeMask 0x00F0000 #define ESecUiCancelSupported 0x1000000 #define ESecUiCancelNotSupported 0x0000000 @@ -38,6 +39,9 @@ #define ESecUiSecretSupported 0x8000000 #define ESecUiSecretNotSupported 0x0000000 +#define ESecUiBasicTypeCheck 0x0010000 +#define ESecUiBasicTypeMultiCheck 0x0020000 + class MSecQueryUiCertificateDetailsProvider; class MSecQueryUiDrmDetailsProvider; class CHbDeviceDialogSymbian; @@ -81,6 +85,8 @@ * @lib SecQueryUi.lib * @since 10.1 */ +typedef TBuf<80> TSecUiPassword; + class CSecQueryUi : public CActive, public MHbDeviceDialogObserver { public: // constructor and destructor @@ -234,7 +240,8 @@ TInt iCompletionCode; TInt iReturnValue; public: - TSecUiPassword iPassword; + // previoulsy it was RMobilePhone::TMobilePassword iPassword; but this was only 10 bytes + TSecUiPassword iPassword; }; diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/SecUi/Src/SecQueryUi.cpp --- a/securitydialogs/SecUi/Src/SecQueryUi.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/SecUi/Src/SecQueryUi.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -99,22 +99,30 @@ TInt err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, secUiOriginatedQuery); RDEBUG("secUiOriginatedQuery", secUiOriginatedQuery); - if (secUiOriginatedQuery != ESecurityUIsSecUIOriginatedUninitialized) - { - // The query is already shown. This is valid for ESecurityUIsSecUIOriginated, and maybe for ESecurityUIsETelAPIOriginated - // For ESecurityUIsSystemLockOriginated it means that the "lock" dialog is already present. - // What to do? Can't dismiss the dialog because it's not owned. Can't device-unlock without asking code. Only can disable keyguard - RDEBUG("!!!! warning: secUiOriginatedQuery", secUiOriginatedQuery); - } - else + if (secUiOriginatedQuery == ESecurityUIsSecUIOriginatedUninitialized ) // && ) { // set only if not set err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsETelAPIOriginated); RDEBUG("setting secUiOriginatedQuery", ESecurityUIsETelAPIOriginated); + } + else if ( secUiOriginatedQuery != ESecurityUIsSecUIOriginated ) + { + RDEBUG("!!!! warning: secUiOriginatedQuery", secUiOriginatedQuery); + // The query is already shown. This is valid for ESecurityUIsSecUIOriginated, and maybe for ESecurityUIsETelAPIOriginated + // For ESecurityUIsSystemLockOriginated it means that the "lock" dialog is already present. + // Try to dismiss the dialog. Do same as CSecurityHandler::CancelSecCodeQuery + TInt aDismissDialog = -1; + err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsDismissDialog, aDismissDialog); + // it might happen that the dialog is already dismissing. Well, it won't harm to try again. + RDEBUG("aDismissDialog", aDismissDialog); + RDEBUG("err", err); + RDEBUG("set KSecurityUIsDismissDialog", ESecurityUIsDismissDialogOn); + err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsDismissDialog, ESecurityUIsDismissDialogOn); + RDEBUG("err", err); } - + RDEBUG("calling ClearParamsAndSetNoteTypeL aMode", aMode); ClearParamsAndSetNoteTypeL(aMode); AddParamL(_L("KSecQueryUiApplicationName"), aCaption); @@ -124,9 +132,22 @@ AddParamL(_L("MinLength"), aMinLength); AddParamL(_L("MaxLength"), aMaxLength); - _LIT(KCodeTop, "codeTop"); - _LIT(KCodeTopValue, "codeTop"); - AddParamL(KCodeTop, KCodeTopValue); + switch (aMode & ESecUiBasicTypeMask) { + case ESecUiBasicTypeCheck: + _LIT(KChecboxDialog, "ChecboxDialog"); + _LIT(KChecbox, "ChecboxDialog"); + AddParamL(KChecboxDialog,KChecbox); + break; + case ESecUiBasicTypeMultiCheck: + _LIT(KMultiChecboxDialog, "MultiChecboxDialog"); + _LIT(KMultiChecbox, "MultiChecboxDialog"); + AddParamL(KMultiChecboxDialog,KMultiChecbox); + break; + default: + _LIT(KCodeTop, "codeTop"); + _LIT(KCodeTopValue, "codeTop"); + AddParamL(KCodeTop, KCodeTopValue); + } if (aCaption.Find(_L("|")) > 0) { @@ -144,10 +165,12 @@ RDEBUG("0", 0); DisplayDeviceDialogL(); + TSecUi::UnInitializeLib(); // the counterpart is at DisplayDeviceDialogL TInt error = WaitUntilDeviceDialogClosed(); RDEBUG("error", error); User::LeaveIfError(error); - + RDEBUG("iPassword", 0); + RDebug::Print(iPassword); aDataText.Copy(iPassword); err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, @@ -520,14 +543,6 @@ iVariantMap->Add(aKey, variant); } -TInt strlen(const char* aStr) - { - TInt len = 0; - while (*aStr++ != 0) - ++len; - return len; - } - // --------------------------------------------------------------------------- // CSecQueryUi::DisplayDeviceDialogL() // --------------------------------------------------------------------------- @@ -535,19 +550,26 @@ void CSecQueryUi::DisplayDeviceDialogL() { RDEBUG("0", 0); + TInt err = KErrNone; + RDEBUG("iIsDisplayingDialog", iIsDisplayingDialog); if (iDeviceDialog && iIsDisplayingDialog) { + RDEBUG("iDeviceDialog", 1); iDeviceDialog->Update(*iVariantMap); } else { + RDEBUG("!iDeviceDialog", 0); if (!iDeviceDialog) { + RDEBUG("new iDeviceDialog", 0); iDeviceDialog = CHbDeviceDialogSymbian::NewL(); } _LIT(KSecQueryUiDeviceDialog, "com.nokia.secuinotificationdialog/1.0"); RDEBUG("Show", 0); - iDeviceDialog->Show(KSecQueryUiDeviceDialog, *iVariantMap, this); + err = iDeviceDialog->Show(KSecQueryUiDeviceDialog, *iVariantMap, this); + RDEBUG("err", err); + TSecUi::InitializeLibL(); RDEBUG("iIsDisplayingDialog", iIsDisplayingDialog); iIsDisplayingDialog = ETrue; RDEBUG("iIsDisplayingDialog", iIsDisplayingDialog); @@ -566,6 +588,7 @@ iReturnValue = KErrUnknown; if (!IsActive() && iWait && !iWait->IsStarted()) { + RDEBUG("KRequestPending", KRequestPending); iStatus = KRequestPending; SetActive(); RDEBUG("Start", 0); diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/SecUi/Src/SecUi.cpp --- a/securitydialogs/SecUi/Src/SecUi.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/SecUi/Src/SecUi.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -39,6 +39,7 @@ TSecUi* instance=(TSecUi*) Dll::Tls(); instance->IncreaseClientCount(); instance->iDialogOpened++; + RDEBUG("instance->iDialogOpened", instance->iDialogOpened); return; } RDEBUG("First initialization", 0); @@ -58,8 +59,12 @@ // EXPORT_C void TSecUi::UnInitializeLib() { + RDEBUG("0", 0); if (Dll::Tls()==NULL) + { + RDEBUG("!!!!!!!!!! Dll::Tls not yet initialized: 0", 0); return; + } RDEBUG("0", 0); TSecUi* instance=(TSecUi*) Dll::Tls(); instance->DecreaseClientCount(); @@ -98,6 +103,7 @@ // void TSecUi::ConstructL() { + RDEBUG("iClientCount", iClientCount); iClientCount = 0; } diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp --- a/securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -29,6 +29,7 @@ #include #include //used for RemoveSplashScreen #include + #include // Property values #include #include @@ -92,9 +93,12 @@ *iDestroyedPtr = ETrue; iDestroyedPtr = NULL; } - CancelSecCodeQuery(); + RDEBUG("calling CancelOpenQuery", 0); + TInt err = CancelOpenQuery(-1); + RDEBUG("err", err); iCustomPhone.Close(); FeatureManager::UnInitializeLib(); + RDEBUG("1", 1); } // // ---------------------------------------------------------- @@ -229,7 +233,6 @@ } /* end check for default code */ - iQueryCanceled = EFalse; RMobilePhone::TMobilePassword required_fourth; TInt ret = KErrNone; @@ -247,6 +250,7 @@ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; lAlphaSupported = ESecUiAlphaSupported; lCancelSupported = ESecUiCancelSupported; TBuf<0x100> title; @@ -263,6 +267,7 @@ RDEBUG("iSecUi_password", 0); RDebug::Print(iSecUi_password); RDEBUG("delete", 0); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); /* end request PIN using QT */ @@ -313,7 +318,7 @@ queryAccepted = KErrNone; } - iQueryCanceled = ETrue; // TODO + iQueryCanceled = ETrue; return ETrue; } case KErrGsmSSPasswordAttemptsViolation: @@ -344,6 +349,53 @@ } // // ---------------------------------------------------------- +// Cancels all security code queries +// aStatus = -1 from destructor +// aStatus = 1 from API. Will kill all dialogs through signal P&S +// ---------------------------------------------------------- +// qtdone +TInt CSecurityHandler::CancelOpenQuery(TInt aStatus) + { + RDEBUG("aStatus", aStatus); + RDEBUG("iQueryCanceled", iQueryCanceled); + TInt res = 0; + + if(aStatus==1) // also signal all other dialogs + { + RDEBUG("set KSecurityUIsDismissDialog to ESecurityUIsDismissDialogOn", ESecurityUIsDismissDialogOn); + TInt err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsDismissDialog, ESecurityUIsDismissDialogOn ); + RDEBUG("err", err); + res += 1; + } + + if (!iQueryCanceled) + { + // notify all dialogs, in particular SecUiNotificationDialog::subscriberKSecurityUIsDismissDialogChanged + // this will cancel only the dialog which was opened by same client. + res += 0x10; + iQueryCanceled = ETrue; + if (iSecurityDlg != NULL) + { + RDEBUG("deleting iSecurityDlg", 0); + res += 0x100; + delete iSecurityDlg; + } + if (iNoteDlg != NULL) + { + RDEBUG("deleting iNoteDlg", 0); + res += 0x1000; + delete iNoteDlg; + } + iNoteDlg = NULL; + iSecurityDlg = NULL; + } + res += 0x10000; + RDEBUG("res", res); + return res; + } + +// +// ---------------------------------------------------------- // CSecurityHandler::CancelSecCodeQuery() // Cancels PIN2 and security code queries // this is used by rfsHandler @@ -351,21 +403,11 @@ // qtdone EXPORT_C void CSecurityHandler::CancelSecCodeQuery() { - RDEBUG("iQueryCanceled", iQueryCanceled); - if (!iQueryCanceled) - { - iQueryCanceled = ETrue; - if (iSecurityDlg != NULL) - { - delete iSecurityDlg; - } - if (iNoteDlg != NULL) - { - delete iNoteDlg; - } - iNoteDlg = NULL; - iSecurityDlg = NULL; - } + RDEBUG("0", 0); + + TInt err = CancelOpenQuery(1); + + RDEBUG("err", err); } // // ---------------------------------------------------------- @@ -539,10 +581,37 @@ RDEBUG("KErrAccessDenied", KErrAccessDenied); return AskSecCodeInAutoLockL(); } + case KErrInUse: + { + RDEBUG("KErrInUse", KErrInUse); + return EFalse; + } + case KErrDied : + { + RDEBUG("KErrDied ", KErrDied ); + return EFalse; + } + case KErrServerTerminated : + { + RDEBUG("KErrServerTerminated ", KErrServerTerminated ); + return EFalse; + } + case KErrServerBusy : + { + RDEBUG("KErrServerBusy ", KErrServerBusy ); + return EFalse; + } case KErrAbort: + { + RDEBUG("KErrAbort", KErrAbort); + return EFalse; + } case KErrCancel: + { + RDEBUG("KErrCancel", KErrCancel); // user pressed "cancel" return EFalse; + } default: { RDEBUG("default", res); @@ -580,7 +649,7 @@ RDEBUG("err", err); if (!StartUp) { - RDebug::Printf( "%s %s (%u) Leaving because StartUp=0 and err=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, err ); + RDebug::Printf( "%s %s (%u) might leave if StartUp=0 and err=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, err ); User::LeaveIfError(err); } TBool isConditionSatisfied = EFalse; @@ -632,6 +701,7 @@ CSecQueryUi *iSecQueryUi; iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; TInt lType = ESecUiSecretSupported | ESecUiAlphaSupported | lCancelSupported | lEmergencySupported | secCodeTypeToAsk; RDEBUG("lType", lType); @@ -641,6 +711,7 @@ RDEBUG("iSecUi_password", 0); RDebug::Print(iSecUi_password); RDEBUG("queryAccepted", queryAccepted); + iQueryCanceled = ETrue; delete iSecQueryUi; TBool wasCancelledOrEmergency = EFalse; @@ -844,14 +915,14 @@ case KErrGsm0707IncorrectPassword: case KErrAccessDenied: RDEBUG("KErrAccessDenied", KErrAccessDenied); - // TODO should this try again? It seems that it's not asked again. + // The Settings caller might retry CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); break; default: RDEBUG("default", status); CSecuritySettings::ShowErrorNoteL(status); - // TODO should this try again? It seems that it's not asked again. + // The Settings caller might retry break; } RDEBUG("returnValue", returnValue); @@ -901,10 +972,9 @@ RDEBUG("FAILED to get the SECUI query Flag err", err); } } - RDEBUG("StartUp", StartUp); + RDEBUG("err", err); RDEBUG("secUiOriginatedQuery", secUiOriginatedQuery); RDEBUG("ESecurityUIsSecUIOriginated", ESecurityUIsSecUIOriginated); - RDEBUG("err", err); if (StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone)) { @@ -938,9 +1008,9 @@ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; RDEBUG("SecQueryDialog", 1); - // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful - // TODO also support Emergency + // ESecUiCodeEtelReqest/ESecUiNone might be useful lAlphaSupported = ESecUiAlphaNotSupported; TBuf<0x100> title; title.Zero(); @@ -954,9 +1024,9 @@ SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, amode); RDEBUG("iSecUi_password", 0); RDebug::Print(iSecUi_password); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); - // TODO handle emergency /* end request PIN using QT */ if (queryAccepted == KErrAbort) // emergency call @@ -1010,14 +1080,14 @@ case KErrGsmSSPasswordAttemptsViolation: case KErrLocked: // code blocked; show error note and terminate. - // TODO what if not during Startup? Probably it's Ok since the SIM would had also failed at StartUp + // what if not during Startup? Probably it's Ok since the SIM would had also failed at StartUp if (StartUp) CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); break; case KErrGsm0707SimWrong: // sim lock active - // TODO no error? This is strange + // no error? This is strange break; default: CSecuritySettings::ShowErrorNoteL(res); @@ -1074,7 +1144,7 @@ RDEBUG("WaitForRequestL res", res); } RDEBUG("res", res); - //If there's still an error we're doomed. Bail out. + // If there's still an error we're doomed. Bail out. User::LeaveIfError(res); RDEBUG("StartUp", StartUp); @@ -1082,7 +1152,7 @@ codeInfo.iRemainingEntryAttempts); TInt attempts(codeInfo.iRemainingEntryAttempts); RDEBUG( "attempts", attempts ); - //show the last "Code Error" note of PIN verify result here so it won't be left under the PUK1 dialog + // show the last "Code Error" note of PIN verify result here so it won't be left under the PUK1 dialog if (!StartUp && (attempts == KMaxNumberOfPUKAttempts)) CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, @@ -1094,16 +1164,16 @@ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; RDEBUG("SecQueryDialog", 1); - // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful - // TODO also support Emergency + // ESecUiCodeEtelReqest/ESecUiNone might be useful TBuf<0x100> title; title.Zero(); title.Append(_L("Puk1RequiredL")); title.Append(_L("#")); title.AppendNum(attempts); TInt lSecUiCancelSupported = ESecUiCancelSupported | ESecUiEmergencyNotSupported; - if(StartUp) // TODO how to know whether PUK comes from failing at Starter, or failing at any other PIN (i.e. changing PIN, or changing PIN-request) ??? + if(StartUp) // how to know whether PUK comes from failing at Starter, or failing at any other PIN (i.e. changing PIN, or changing PIN-request) ??? lSecUiCancelSupported = ESecUiCancelNotSupported | ESecUiEmergencySupported; queryAccepted = iSecQueryUi->SecQueryDialog(title, puk1_password, SEC_C_PUK_CODE_MIN_LENGTH, SEC_C_PUK_CODE_MAX_LENGTH, @@ -1111,6 +1181,7 @@ | lSecUiCancelSupported | ESecUiPukRequired); RDEBUG("puk1_password", 0); RDebug::Print(puk1_password); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); @@ -1147,7 +1218,7 @@ break; case KErrGsm0707SimWrong: // sim lock active - // TODO no message ? + // no message ? break; case KErrGsmSSPasswordAttemptsViolation: case KErrLocked: @@ -1168,9 +1239,8 @@ CSecQueryUi * iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; RDEBUG("SecQueryDialog", 1); - // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful - // TODO also support Emergency queryAccepted = iSecQueryUi->SecQueryDialog( _L("PIN1-New|PIN1-Verif"), aNewPinPassword, @@ -1179,6 +1249,7 @@ | ESecUiPukRequired); RDEBUG("aNewPinPassword", 0); RDebug::Print(aNewPinPassword); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); } @@ -1215,7 +1286,7 @@ break; case KErrGsm0707SimWrong: // sim lock active - // TODO no message ? + // no message ? break; case KErrGsmSSPasswordAttemptsViolation: case KErrLocked: @@ -1263,16 +1334,16 @@ RDEBUG("codeInfo.iRemainingEntryAttempts", codeInfo.iRemainingEntryAttempts); - if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) // TODO this might be 10 ? + if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) codeInfo.iRemainingEntryAttempts = -1; /* request PIN using QT */ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; RDEBUG("SecQueryDialog", 1); - // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful against KLastRemainingInputAttempt - // TODO also support Emergency + // ESecUiCodeEtelReqest/ESecUiNone might be useful against KLastRemainingInputAttempt TBuf<0x100> title; title.Zero(); @@ -1286,6 +1357,7 @@ RDEBUG("iSecUi_password", 0); RDebug::Print(iSecUi_password); RDEBUG("queryAccepted", queryAccepted); + iQueryCanceled = ETrue; delete iSecQueryUi; // If failed or device became locked, any pending request should be cancelled. @@ -1367,9 +1439,9 @@ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; RDEBUG("SecQueryDialog", 1); - // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful - // TODO also support Emergency + // ESecUiCodeEtelReqest/ESecUiNone might be useful RDEBUG("codeInfo.iRemainingEntryAttempts", codeInfo.iRemainingEntryAttempts); @@ -1387,6 +1459,7 @@ | ESecUiCancelSupported | secCodeType ); RDEBUG("iSecUi_password", 0); RDebug::Print(iSecUi_password); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); @@ -1442,9 +1515,8 @@ CSecQueryUi * iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); - // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful - // TODO also support Emergency - + iQueryCanceled = EFalse; + // ESecUiCodeEtelReqest/ESecUiNone might be useful queryAccepted = iSecQueryUi->SecQueryDialog(_L("PIN2-New|PIN2-Verif"), aNewPassword, SEC_C_PIN2_CODE_MIN_LENGTH, @@ -1452,6 +1524,7 @@ | ESecUiCancelSupported | secCodeType); RDEBUG("aNewPassword", 0); RDebug::Print(aNewPassword); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); if (queryAccepted != KErrNone) @@ -1464,8 +1537,7 @@ return; } } - // send code - // TODO the current code should be verified before + // send code. The code was temporarilly changed before. Thus, this really done to set the new-new one RDEBUG("VerifySecurityCode", 0); iPhone.VerifySecurityCode(wait->iStatus, secCodeType, aNewPassword, iSecUi_password); @@ -1558,7 +1630,8 @@ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); - // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful + iQueryCanceled = EFalse; + // ESecUiCodeEtelReqest/ESecUiNone might be useful // TODO also support Emergency if (StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone)) @@ -1577,6 +1650,7 @@ | lCancelSupported | ESecUiCodeEtelReqest); RDEBUG("iSecUi_password", 0); RDebug::Print(iSecUi_password); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); if (queryAccepted != KErrNone) @@ -1688,6 +1762,7 @@ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful // TODO also support Emergency @@ -1702,6 +1777,7 @@ | ESecUiCancelSupported | ESecUiPukRequired); RDEBUG("iSecUi_password", 0); RDebug::Print(iSecUi_password); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); @@ -1717,6 +1793,7 @@ CSecQueryUi *iSecQueryUi; RDEBUG("CSecQueryUi", 0); iSecQueryUi = CSecQueryUi::NewL(); + iQueryCanceled = EFalse; // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful // TODO also support Emergency @@ -1727,6 +1804,7 @@ | ESecUiPukRequired); RDEBUG("aNewPassword", 0); RDebug::Print(aNewPassword); + iQueryCanceled = ETrue; delete iSecQueryUi; RDEBUG("queryAccepted", queryAccepted); if (queryAccepted != KErrNone) diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp --- a/securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -204,8 +204,8 @@ TBuf<0x80> iCaption; iCaption.Copy(_L("ChangePinL")); TInt iShowError = 1; - ChangePinParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("0", 0); + TInt err = ChangePinParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); + RDEBUG("err", err); } // @@ -226,9 +226,9 @@ TBuf<0x80> iCaption; iCaption.Copy(_L("ChangeUPinL")); TInt iShowError = 1; - ChangeUPinParamsL(iOldPassword, iNewPassword, iFlags, iCaption, + TInt err = ChangeUPinParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("0", 0); + RDEBUG("err", err); } @@ -250,10 +250,9 @@ TBuf<0x80> iCaption; iCaption.Copy(_L("ChangePin2L")); TInt iShowError = 1; - ChangePin2ParamsL(iOldPassword, iNewPassword, iFlags, iCaption, + TInt err = ChangePin2ParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("0", 0); - + RDEBUG("err", err); } // // ---------------------------------------------------------- @@ -273,9 +272,9 @@ TBuf<0x80> iCaption; iCaption.Copy(_L("ChangeSecCodeL")); TInt iShowError = 1; - ChangeSecCodeParamsL(iOldPassword, iNewPassword, iFlags, iCaption, + TInt err = ChangeSecCodeParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("0", 0); + RDEBUG("err", err); } // // ---------------------------------------------------------- @@ -357,7 +356,7 @@ // a) first the RemoteMsg is enable, and this function is used to change it // b) if lock was disabled, the "change RemoteMsg" menu is not available. // ---------------------------------------------------------- -// no qtdone +// qtdone TInt CSecuritySettings::RemoteLockCodeQueryL(TDes& aRemoteLockCode) { @@ -406,7 +405,7 @@ RDEBUG( "WaitForRequestL res", res ); #ifdef __WINS__ if (res == KErrNotSupported || res == KErrTimedOut) - res = 0xffffec50; // TODO this means KErrGsm0707IncorrectPassword = incorrect code + res = KErrGsm0707IncorrectPassword; // KErrGsm0707IncorrectPassword = incorrect code #endif RDEBUG( "KErrGsm0707IncorrectPassword", KErrGsm0707IncorrectPassword ); if(res == KErrNone) @@ -428,7 +427,7 @@ // Changes lock setting in domestic OS. Changing the domestic OS lock setting // requires user to enter the security code. // ---------------------------------------------------------- -// no qtdone +// qtdone TInt CSecuritySettings::RemoteLockSetLockSettingL(TBool aLockSetting) { TInt retValue( KErrNone ); @@ -621,12 +620,14 @@ TBuf<0x80> iCaption; iCaption.Copy(_L("ChangePinRequestL")); TInt iShowError = 1; - ChangePinRequestParamsL( + TInt err = ChangePinRequestParamsL( 1/* it's imposible to know if we want to set or clear*/, iOldPassword, iFlags, iCaption, iShowError); - RDEBUG("0", 0); - - return ETrue; + RDEBUG("err", err); + if(err==KErrNone) + return ETrue; + else + return EFalse; } // @@ -1397,8 +1398,13 @@ RDEBUG("aResourceID", aResourceID); RDebug::Print(titleTr); - _LIT(KIconName, "qtg_small_smiley_wondering"); - messageBox->SetIconNameL(KIconName); + _LIT(KIconNameWondering, "qtg_small_smiley_wondering"); + _LIT(KIconNameSmile, "qtg_small_smiley_smile"); + if(aResourceID==0 || aResourceID==R_CONFIRMATION_NOTE) + messageBox->SetIconNameL(KIconNameSmile); + else + messageBox->SetIconNameL(KIconNameWondering); + if (aTone == CAknNoteDialog::EErrorTone) // another case is EConfirmationTone { messageBox->SetTimeout(messageBox->Timeout() * 2); // errors are displayed double time @@ -1645,7 +1651,7 @@ if (res != KErrNone) { ShowResultNoteL(res, CAknNoteDialog::EErrorTone); - return res; // TODO not sure if it's wise to exit now. + return res; // not sure if it's wise to exit now. } newPassword = _L(""); @@ -2037,7 +2043,7 @@ RDEBUG("codeInfo.iRemainingEntryAttempts", codeInfo.iRemainingEntryAttempts); - if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) // TODO this might be 10 + if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) codeInfo.iRemainingEntryAttempts = -1; /* request PIN using QT */ @@ -2519,7 +2525,7 @@ if (simRemoved) { ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return EFalse; + return KErrAccessDenied; } RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; @@ -2598,7 +2604,7 @@ // not allowed with this sim ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return EFalse; + return KErrGsm0707OperationNotAllowed; } case KErrGsm0707IncorrectPassword: case KErrAccessDenied: @@ -2610,11 +2616,11 @@ case KErrGsmSSPasswordAttemptsViolation: case KErrLocked: { - return ETrue; + return KErrLocked; } case KErrAbort: { - return EFalse; + return KErrAbort; } default: { @@ -2622,7 +2628,7 @@ aCaption, aShowError); } } - return ETrue; + return KErrNone; } // diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/SecUi/group/SecUi.mmp --- a/securitydialogs/SecUi/group/SecUi.mmp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/SecUi/group/SecUi.mmp Thu Jun 24 12:46:20 2010 +0300 @@ -55,6 +55,7 @@ SOURCE ../Src/SecUiWait.cpp SOURCE ../Src/SecQueryUi.cpp +// library avkon.lib eikdlg.lib library euser.lib library etel.lib etelmm.lib library commonengine.lib diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/lockapp/src/lockapp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/lockapp/src/lockapp.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2000 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: Very small version of lockapp, which simply launches Autolock + * This is needed becauses starter has the hardcoded name "lockapp" + * + */ + +// INCLUDES + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// ---------------------------------------------------------------------------------------- +// Server startup code +// ---------------------------------------------------------------------------------------- +static void RunServerL() + { + CActiveScheduler* s = new (ELeave) CActiveScheduler; + CleanupStack::PushL(s); + CActiveScheduler::Install(s); + + // start autolock instead of lockapp . This is a backup solution to use in case that not all SysAp and Avkon changes are implemented + /* No need to check the task. A process should not run twice + TApaTaskList taskList( CCoeEnv::Static()->WsSession() ); // can also use CCoeEnv::Static() CEikonEnv::Static() + const TUid KAutolockSrvAppUid = { 0x100059B5 }; + TApaTask task( taskList.FindApp( KAutolockSrvAppUid ) ); + if( !task.Exists()) + */ + + RApaLsSession ls; + User::LeaveIfError(ls.Connect()); + CleanupClosePushL(ls); + + /************/ + _LIT_SECURITY_POLICY_C1(KWritePolicy, ECapabilityWriteDeviceData); + TInt ret = RProperty::Define(KPSUidCoreApplicationUIs, + KCoreAppUIsAutolockStatus, RProperty::EInt, TSecurityPolicy(TSecurityPolicy::EAlwaysPass), + TSecurityPolicy(TSecurityPolicy::EAlwaysPass)); + + TInt autolockState; + RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, autolockState); + if(autolockState==EAutolockStatusUninitialized) + { + autolockState = EAutolockOff; // not-initialized means that the unlock-query hasn't been displayed. Therefore the device should not stay locked. + } + ret = RProperty::Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, + autolockState); // this might re-set it. That's not bad. It will re-notify all listeners. + RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, autolockState); + RDebug::Printf("%s %s (%u) autolockState=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, autolockState); + /************/ + + CApaCommandLine* commandLine = CApaCommandLine::NewLC(); + commandLine->SetExecutableNameL(_L("autolock.exe")); + commandLine->SetCommandL(EApaCommandRun); + // Try to launch the application. + TInt err = ls.StartApp(*commandLine); // this migh fail + RDebug::Printf("%s %s (%u) Start: autolock.exe err=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, err); + + CleanupStack::PopAndDestroy(2); // commandLine, ls + + // Initialisation complete, now signal the client + RProcess::Rendezvous( KErrNone); + + // Ready to run + CActiveScheduler::Start(); + + // Cleanup the server and scheduler + CleanupStack::PopAndDestroy(2); + } + +// Server process entry-point +TInt E32Main() + { + CTrapCleanup* cleanup = CTrapCleanup::New(); + TInt r = KErrNoMemory; + if (cleanup) + { + TRAP(r, RunServerL()); + delete cleanup; + } + RDebug::Printf("%s %s (%u) r=%x", __FILE__, __PRETTY_FUNCTION__, + __LINE__, r); + return r; + } + +// End of file diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/lockclient/group/bld.inf --- a/securitydialogs/lockclient/group/bld.inf Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/lockclient/group/bld.inf Thu Jun 24 12:46:20 2010 +0300 @@ -20,11 +20,12 @@ PRJ_EXPORTS +/* this is also done in .pro , but doesn't harm to do it here, too */ ../rom/lockclient.iby CORE_MW_LAYER_IBY_EXPORT_PATH(lockclient.iby) PRJ_MMPFILES /* -Not any more. This should be done in the QT way, using lockclient.pro +Not any more. This is done in the QT way, using lockclient.pro lockclient.mmp */ \ No newline at end of file diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/lockclient/group/bwins/lockclientu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/lockclient/group/bwins/lockclientu.def Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,20 @@ +EXPORTS + ?ShowKeysLockedNote@CKeyguardAccessApi@@QAEHXZ @ 1 NONAME ; int CKeyguardAccessApi::ShowKeysLockedNote(void) + ?TestDestruct@CKeyguardAccessApi@@QAEHXZ @ 2 NONAME ; int CKeyguardAccessApi::TestDestruct(void) + ?NewL@CDevicelockAccessApi@@SAPAV1@XZ @ 3 NONAME ; class CDevicelockAccessApi * CDevicelockAccessApi::NewL(void) + ?OfferKeyguard@CKeyguardAccessApi@@QAEHXZ @ 4 NONAME ; int CKeyguardAccessApi::OfferKeyguard(void) + ?IsKeyguardEnabled@CKeyguardAccessApi@@QAEHXZ @ 5 NONAME ; int CKeyguardAccessApi::IsKeyguardEnabled(void) + ?EnableKeyguard@CKeyguardAccessApi@@QAEHH@Z @ 6 NONAME ; int CKeyguardAccessApi::EnableKeyguard(int) + ?IsKeylockEnabled@CKeyguardAccessApi@@QAEHXZ @ 7 NONAME ; int CKeyguardAccessApi::IsKeylockEnabled(void) + ?IsDevicelockEnabled@CDevicelockAccessApi@@QAEHXZ @ 8 NONAME ; int CDevicelockAccessApi::IsDevicelockEnabled(void) + ?DisableDevicelock@CDevicelockAccessApi@@QAEHXZ @ 9 NONAME ; int CDevicelockAccessApi::DisableDevicelock(void) + ?TestPanicClient@CKeyguardAccessApi@@QAEHXZ @ 10 NONAME ; int CKeyguardAccessApi::TestPanicClient(void) + ?TestInternal@CKeyguardAccessApi@@QAEHXZ @ 11 NONAME ; int CKeyguardAccessApi::TestInternal(void) + ?DisableKeyguard@CKeyguardAccessApi@@QAEHH@Z @ 12 NONAME ; int CKeyguardAccessApi::DisableKeyguard(int) + ?EnableDevicelock@CDevicelockAccessApi@@QAEHW4TDevicelockReason@@@Z @ 13 NONAME ; int CDevicelockAccessApi::EnableDevicelock(enum TDevicelockReason) + ?IsKeylockEnabled@CDevicelockAccessApi@@QAEHXZ @ 14 NONAME ; int CDevicelockAccessApi::IsKeylockEnabled(void) + ??1CKeyguardAccessApi@@UAE@XZ @ 15 NONAME ; CKeyguardAccessApi::~CKeyguardAccessApi(void) + ??1CDevicelockAccessApi@@UAE@XZ @ 16 NONAME ; CDevicelockAccessApi::~CDevicelockAccessApi(void) + ?OfferDevicelock@CDevicelockAccessApi@@QAEHXZ @ 17 NONAME ; int CDevicelockAccessApi::OfferDevicelock(void) + ?NewL@CKeyguardAccessApi@@SAPAV1@XZ @ 18 NONAME ; class CKeyguardAccessApi * CKeyguardAccessApi::NewL(void) + diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/lockclient/group/eabi/lockclientu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/lockclient/group/eabi/lockclientu.def Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,24 @@ +EXPORTS + _ZN18CKeyguardAccessApi12TestDestructEv @ 1 NONAME + _ZN18CKeyguardAccessApi12TestInternalEv @ 2 NONAME + _ZN18CKeyguardAccessApi13OfferKeyguardEv @ 3 NONAME + _ZN18CKeyguardAccessApi14EnableKeyguardEi @ 4 NONAME + _ZN18CKeyguardAccessApi15DisableKeyguardEi @ 5 NONAME + _ZN18CKeyguardAccessApi15TestPanicClientEv @ 6 NONAME + _ZN18CKeyguardAccessApi16IsKeylockEnabledEv @ 7 NONAME + _ZN18CKeyguardAccessApi17IsKeyguardEnabledEv @ 8 NONAME + _ZN18CKeyguardAccessApi18ShowKeysLockedNoteEv @ 9 NONAME + _ZN18CKeyguardAccessApi4NewLEv @ 10 NONAME + _ZN18CKeyguardAccessApiD0Ev @ 11 NONAME + _ZN18CKeyguardAccessApiD1Ev @ 12 NONAME + _ZN18CKeyguardAccessApiD2Ev @ 13 NONAME + _ZN20CDevicelockAccessApi15OfferDevicelockEv @ 14 NONAME + _ZN20CDevicelockAccessApi16EnableDevicelockE17TDevicelockReason @ 15 NONAME + _ZN20CDevicelockAccessApi16IsKeylockEnabledEv @ 16 NONAME + _ZN20CDevicelockAccessApi17DisableDevicelockEv @ 17 NONAME + _ZN20CDevicelockAccessApi19IsDevicelockEnabledEv @ 18 NONAME + _ZN20CDevicelockAccessApi4NewLEv @ 19 NONAME + _ZN20CDevicelockAccessApiD0Ev @ 20 NONAME + _ZN20CDevicelockAccessApiD1Ev @ 21 NONAME + _ZN20CDevicelockAccessApiD2Ev @ 22 NONAME + diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/lockclient/group/lockclient.pro --- a/securitydialogs/lockclient/group/lockclient.pro Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/lockclient/group/lockclient.pro Thu Jun 24 12:46:20 2010 +0300 @@ -45,3 +45,5 @@ TARGET.EPOCALLOWDLLDATA = 1 MMP_RULES -= "OPTION_REPLACE ARMCC --export_all_vtbl -D__QT_NOEFFECTMACRO_DONOTUSE" } + +BLD_INF_RULES.prj_exports += "../rom/lockclient.iby CORE_APP_LAYER_IBY_EXPORT_PATH(lockclient.iby)" diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/lockclient/rom/lockclient.iby --- a/securitydialogs/lockclient/rom/lockclient.iby Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/lockclient/rom/lockclient.iby Thu Jun 24 12:46:20 2010 +0300 @@ -20,6 +20,6 @@ #include //file=ABI_DIR\BUILD_DIR\lockclient.dll SHARED_LIB_DIR\lockclient.dll -file=ABI_DIR\UDEB\lockclient.dll SHARED_LIB_DIR\lockclient.dll +file=ABI_DIR\BUILD_DIR\lockclient.dll SHARED_LIB_DIR\lockclient.dll #endif // __LOCKCLIENT_IBY__ diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationcontentwidget.h --- a/securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationcontentwidget.h Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationcontentwidget.h Thu Jun 24 12:46:20 2010 +0300 @@ -21,7 +21,12 @@ #include // HbWidget #include // HbWidget +#include +#include +#include class HbLabel; +class HbCheckBox; +class HbListWidget; class SecUiNotificationContentWidget : public HbWidget @@ -50,6 +55,9 @@ public: HbLineEdit *codeTop; HbLineEdit *codeBottom; + HbCheckBox *checkbox; + HbLabel *DialogText; + HbListWidget *listWidget; int queryType; int lMinLength; int lMaxLength; diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdebug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdebug.h Thu Jun 24 12:46:20 2010 +0300 @@ -0,0 +1,28 @@ +/* +* 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: SecUi notification plugin dialog. +* +*/ + +#ifndef SECUINOTIFICATIONDEBUG_H +#define SECUINOTIFICATIONDEBUG_H + +#include +#ifdef _DEBUG +#define RDEBUG( x, y ) RDebug::Printf( "%s %s (%u) %s=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, x, y ); +#else +#define RDEBUG( x, y ) +#endif + +#endif // SECUINOTIFICATIONDEBUG_H diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdialog.h --- a/securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdialog.h Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdialog.h Thu Jun 24 12:46:20 2010 +0300 @@ -18,14 +18,14 @@ #ifndef SECUINOTIFICATIONDIALOG_H #define SECUINOTIFICATIONDIALOG_H -// #define RDEBUG( x, y ) RDebug::Printf( "%s %s (%u) %s=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, x, y ); -#define RDEBUG( x, y ) #include // HbDialog #include // HbDeviceDialogInterface #include // HbWidget #include // HbWidget #include +#include +#include #include @@ -81,14 +81,18 @@ private: Q_DISABLE_COPY(SecUiNotificationDialog) + int mMyId; int mLastError; bool mShowEventReceived; QVariantMap mResultMap; HbLineEdit *codeTop; HbLineEdit *codeBottom; + HbCheckBox *checkBox; + HbListWidget *listWidget; HbAction *okAction; HbAction *cancelAction; - HbLabel *title; + HbAction *okVKBAction; + HbLabel *titleWidget; int queryType; int lMinLength; int lMaxLength; diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdialogpluginkeys.h --- a/securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdialogpluginkeys.h Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/inc/secuinotificationdialogpluginkeys.h Thu Jun 24 12:46:20 2010 +0300 @@ -41,6 +41,8 @@ const QString KInvalidNewLockCode = "invalidNewLockCode"; const QString KDefaultCode = "DefaultCode"; +const QString KChecboxType = "ChecboxDialog"; +const QString KMultiChecboxType = "MultiChecboxDialog"; // Keys for the return values passed back to calling application const QString KResultAccepted = "accepted"; // int const QString KSelectedMemoryIndex = "memory"; // int diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/rom/secuinotificationdialogplugin.iby --- a/securitydialogs/secuinotifications/secuinotificationdialogplugin/rom/secuinotificationdialogplugin.iby Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/rom/secuinotificationdialogplugin.iby Thu Jun 24 12:46:20 2010 +0300 @@ -21,6 +21,7 @@ REM DLL file=ABI_DIR\UREL\secuinotificationdialogplugin.dll SHARED_LIB_DIR\secuinotificationdialogplugin.dll UNPAGED data=\epoc32\data\z\pluginstub\secuinotificationdialogplugin.qtplugin \resource\plugins\devicedialogs\secuinotificationdialogplugin.qtplugin +data=\epoc32\data\z\resource\qt\crml\secuinotificationdialogplugin.qcrml \resource\qt\crml\secuinotificationdialogplugin.qcrml /* This is for testing purposes file=ABI_DIR\UREL\SecUiTest.exe SHARED_LIB_DIR\SecUiTest.exe diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationcontentwidget.cpp --- a/securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationcontentwidget.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationcontentwidget.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -16,6 +16,7 @@ * */ +#include "secuinotificationdebug.h" #include "secuinotificationcontentwidget.h" #include "secuinotificationdialogpluginkeys.h" #include @@ -28,6 +29,10 @@ #include #include +#include // needed for a checkbox dialog +#include // needed for multicheckbox dialog +#include +#include #include #define ESecUiCancelSupported 0x1000000 @@ -60,7 +65,7 @@ SecUiNotificationContentWidget::SecUiNotificationContentWidget( QGraphicsItem *parent, Qt::WindowFlags flags) : HbWidget(parent, flags) { - qDebug() << "SecUiNotificationContentWidget::SecUiNotificationContentWidget"; + RDEBUG("0", 0); } // ---------------------------------------------------------------------------- @@ -77,7 +82,7 @@ // void SecUiNotificationContentWidget::constructFromParameters(const QVariantMap ¶meters) { - qDebug() << "SecUiNotificationContentWidget::constructFromParameters 1"; + RDEBUG("0", 0); qDebug() << parameters; QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical); @@ -85,17 +90,17 @@ lMaxLength = 8; // might be replaced later queryDual=0; isEmergency=0; + codeTop=0; // KApplicationSize if (parameters.contains(KQueryType)) { - qDebug() << "SecUiNotificationContentWidget::KQueryType"; + RDEBUG("0", 0); queryType = parameters.value(KQueryType).toUInt(); - qDebug() << queryType; + RDEBUG("queryType", queryType); if( (queryType & ESecUiTypeMaskLock) ) { - qDebug() << "SecUiNotificationContentWidget::KQueryType=ESecUiTypeLock"; + RDEBUG("KQueryType=ESecUiTypeMaskLock", queryType); // showing "Lock" icon. All other params are irrelevant. codeTop is not even created - HbLabel *iconLabel = new HbLabel("Locked"); HbIcon *icon = new HbIcon("qtg_large_device_lock"); @@ -180,8 +185,6 @@ qDebug() << lMaxLength; if(lMaxLength>2) codeTop->setMaxLength(lMaxLength); - // HbLineEdit *codeTop2 = new HbLineEdit; - qDebug() << "SecUiNotificationContentWidget::KCodeTop 2"; qDebug() << "SecUiNotificationContentWidget::KCodeTop queryType="; qDebug() << queryType; codeTop->setInputMethodHints(Qt::ImhDigitsOnly); // default @@ -218,6 +221,28 @@ } qDebug() << "SecUiNotificationContentWidget::KCodeTop 4"; + if (parameters.contains(KDialogTitle)) { + QString titleText = parameters.value(KDialogTitle).toString(); + QString titleAttempts = ""; + if(titleText.indexOf('|')>0) + { // if separator, take only first part + titleText = titleText.left(titleText.indexOf('|')); + } + if(titleText.indexOf('#')>0) + { // if separator, take only first part + titleAttempts = titleText.right(titleText.length()-titleText.indexOf('#')-1); + qDebug() << "SecUiNotificationDialog::titleAttempts=" << titleAttempts; + int nAttempts = titleAttempts.toInt(); + RDEBUG("nAttempts", nAttempts); + titleText = titleText.left(titleText.indexOf('#')); + if(nAttempts>0) + titleText = titleText + " attempts=" + QString::number(nAttempts); + } + HbLabel *titleTop = new HbLabel(titleText); + mainLayout->addItem(titleTop); + // in the dialog, it was setHeadingWidget(title); + } + mainLayout->addItem(codeTop); // double-query if (parameters.contains(KCodeBottom)) @@ -265,6 +290,53 @@ } + if (parameters.contains(KChecboxType)) { + qDebug() << "SecUiNotificationContentWidget::KChecboxType"; + if (parameters.contains(KDialogTitle)) { + //TODO position of the label is not centered + QString tmpText=parameters.value(KDialogTitle).toString(); + if (tmpText.endsWith("\n")) tmpText=tmpText.left(tmpText.length()-1); + DialogText= new HbLabel(tmpText); + DialogText->setTextWrapping(Hb::TextWordWrap); + DialogText->setAlignment(Qt::AlignVCenter); + mainLayout->addItem(DialogText); + } + + checkbox = new HbCheckBox("Caption"); + if (parameters.contains(KDefaultCode)) { + qDebug() << "SecUiNotificationContentWidget::KDefaultCode"; + QStringList list1 = parameters.value(KDefaultCode).toString().split("|"); + if (!list1.isEmpty() && list1.count()==2) { + if (!list1[0].isNull() && !list1[0].isEmpty()) checkbox->setText(list1[0]); + if (!list1[1].isNull() && !list1[1].isEmpty()) checkbox->setChecked(list1[1].toInt()); + } + + } + mainLayout->addItem(checkbox); + } + + if (parameters.contains(KMultiChecboxType) && parameters.contains(KDefaultCode)) + { + qDebug() << "SecUiNotificationContentWidget::KMultiChecboxType"; + QStringList list1 = parameters.value(KDefaultCode).toString().split("1\t"); + if (!list1.isEmpty()) { + listWidget = new HbListWidget(); + for (int i = 0; (i < list1.count()); i++) + if (!list1[i].isEmpty() && !list1[i].isNull()) { + HbListWidgetItem* modelItem = new HbListWidgetItem(); + modelItem->setData(QVariant(list1[i]), Qt::DisplayRole); + listWidget->addItem(modelItem); + } + listWidget->setCurrentRow(0); + listWidget->setSelectionMode(HbAbstractItemView::MultiSelection); + //listWidget->setClampingStyle(HbScrollArea::BounceBackClamping); + listWidget->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); + listWidget->setMaximumHeight(150); + mainLayout->addItem(listWidget); + // delete listWidget; + } + } + setLayout(mainLayout); } diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationdialog.cpp --- a/securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationdialog.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationdialog.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -15,6 +15,7 @@ * */ +#include "secuinotificationdebug.h" #include "secuinotificationdialog.h" #include "secuinotificationdialogpluginkeys.h" #include "secuinotificationcontentwidget.h" @@ -27,12 +28,17 @@ #include // for TARM error codes while validating new lock code #include #include +#include #include QTM_USE_NAMESPACE #include #include +#define ESecUiBasicTypeText 0x0000000 +#define ESecUiBasicTypeCheck 0x0010000 +#define ESecUiBasicTypeCheckMulti 0x0020000 +#define ESecUiBasicTypeMask 0x00F0000 #define ESecUiCancelSupported 0x1000000 #define ESecUiCancelNotSupported 0x0000000 @@ -59,6 +65,15 @@ const TUid KPSUidSecurityUIs = { 0x100059b5 }; const TUint32 KSecurityUIsDismissDialog = 0x00000309; +enum TSecurityUIsDismissDialogValues + { + ESecurityUIsDismissDialogUninitialized = 0, + ESecurityUIsDismissDialogOn, + ESecurityUIsDismissDialogProcessing, + ESecurityUIsDismissDialogDone, + ESecurityUIsDismissDialogLastValue + }; + // ---------------------------------------------------------------------------- // SecUiNotificationDialog::SecUiNotificationDialog() // ---------------------------------------------------------------------------- @@ -66,7 +81,10 @@ SecUiNotificationDialog::SecUiNotificationDialog( const QVariantMap ¶meters) : HbDialog(), mLastError(KNoError) { - qDebug() << "SecUiNotificationDialog::SecUiNotificationDialog"; + RDEBUG("0", 0); + TTime myTime; + myTime.HomeTime(); + mMyId = I64LOW( myTime.Int64() ); constructDialog(parameters); } @@ -76,6 +94,7 @@ // SecUiNotificationDialog::~SecUiNotificationDialog() { + RDEBUG("0", 0); } // ---------------------------------------------------------------------------- @@ -84,7 +103,7 @@ // bool SecUiNotificationDialog::setDeviceDialogParameters(const QVariantMap ¶meters) { - qDebug() << "SecUiNotificationDialog::setDeviceDialogParameters"; + RDEBUG("0", 0); return constructDialog(parameters); } @@ -94,8 +113,8 @@ // int SecUiNotificationDialog::deviceDialogError() const { - qDebug() << "SecUiNotificationDialog::deviceDialogError"; - qDebug() << mLastError; + RDEBUG("mLastError", mLastError); + RDEBUG("mMyId", mMyId); return mLastError; } @@ -106,15 +125,31 @@ void SecUiNotificationDialog::closeDeviceDialog(bool byClient) { Q_UNUSED(byClient); - qDebug() << "SecUiNotificationDialog::closeDeviceDialog 0"; + RDEBUG("mMyId", mMyId); + RDEBUG("calling close()", 0); close(); - qDebug() << "SecUiNotificationDialog::closeDeviceDialog 1"; + RDEBUG("mShowEventReceived", mShowEventReceived); // If show event has been received, close is signalled from hide event. // If not, hide event does not come and close is signalled from here. if (!mShowEventReceived) { + RDEBUG("emitting deviceDialogClosed", 0); emit deviceDialogClosed(); + if(1==0 && subscriberKSecurityUIsDismissDialog) + { + RDEBUG("disconnect subscriberKSecurityUIsDismissDialog", 0); + disconnect(subscriberKSecurityUIsDismissDialog, SIGNAL(contentsChanged()), this, SLOT(subscriberKSecurityUIsDismissDialogChanged())); + RDEBUG("disconnected subscriberKSecurityUIsDismissDialog", 1); + if(1==1) + { + RDEBUG("deleting subscriberKSecurityUIsDismissDialog", 0); + delete subscriberKSecurityUIsDismissDialog; + subscriberKSecurityUIsDismissDialog = NULL; + RDEBUG("deleted subscriberKSecurityUIsDismissDialog", 1); + } + } } + RDEBUG("0", 0); } // ---------------------------------------------------------------------------- @@ -132,9 +167,29 @@ // void SecUiNotificationDialog::hideEvent(QHideEvent *event) { - qDebug() << "SecUiNotificationDialog::hideEvent"; + RDEBUG("0", 0); HbDialog::hideEvent(event); - emit deviceDialogClosed(); + RDEBUG("mMyId", mMyId); + RDEBUG("calling close()", 0); + close(); + RDEBUG("emitting deviceDialogClosed", 0); + emit deviceDialogClosed(); + RDEBUG("deviceDialogClosed", 1); + if(1==0 && subscriberKSecurityUIsDismissDialog) + { + RDEBUG("disconnect subscriberKSecurityUIsDismissDialog", 0); + disconnect(subscriberKSecurityUIsDismissDialog, SIGNAL(contentsChanged()), this, SLOT(subscriberKSecurityUIsDismissDialogChanged())); + RDEBUG("disconnected subscriberKSecurityUIsDismissDialog", 1); + if(1==1) + { + RDEBUG("deleting subscriberKSecurityUIsDismissDialog", 0); + delete subscriberKSecurityUIsDismissDialog; + subscriberKSecurityUIsDismissDialog = NULL; + RDEBUG("deleted subscriberKSecurityUIsDismissDialog", 1); + } + } + // old method was emit deviceDialogClosed(); + RDEBUG("0", 0); } // ---------------------------------------------------------------------------- @@ -143,23 +198,32 @@ // void SecUiNotificationDialog::showEvent(QShowEvent *event) { - qDebug() << "SecUiNotificationDialog::showEvent"; + RDEBUG("0", 0); + RDEBUG("mMyId", mMyId); HbDialog::showEvent(event); if(!(queryType & ESecUiTypeMaskLock)) { // not for the "lock icon" - qDebug() << "SecUiNotificationDialog::showEvent check default"; - if(codeTop->text().length()>0) // there's a default value. Verify it and (might) enable OK - { - qDebug() << "SecUiNotificationDialog::showEvent checked default"; - handleCodeTopChanged(codeTop->text()); - } - // for automated testing, read a P&S and use this value as if the user typed it + RDEBUG("check default.1", 0); + if(codeTop!=NULL) + { + RDEBUG("check default.2", 0); + if(codeTop->text().length()>0) // there's a default value. Verify it and (might) enable OK + { + RDEBUG("check default.3", 0); + handleCodeTopChanged(codeTop->text()); + } + RDEBUG("setFocus", 0); + codeTop->setFocus(); // this should open the VKB . Doesn't seem to work when it's done on the widget, so it's done here. + + } // codeTop!=NULL + const TUint32 KSecurityUIsTestCode = 0x00000307; TInt value = 0; TInt err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsTestCode, value ); - qDebug() << "SecUiNotificationDialog::faking KSecurityUIsTestCode err=" << err; - qDebug() << "SecUiNotificationDialog::faking value=" << value; + RDEBUG("KSecurityUIsTestCode err", err); + RDEBUG("faking value", value); + RDEBUG("mShowEventReceived", mShowEventReceived); if(value>0 && mShowEventReceived==true) // show happens 2 times. Dialog can be closed only the second. { QString myString = ""; @@ -169,10 +233,11 @@ TInt err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsTestCode, 0 ); // clear after using it qDebug() << "SecUiNotificationDialog::calling handleAccepted=" << myString; emit handleAccepted(); - emit closeDeviceDialog(false); // false means "not by client", although it's not really used + // handleAccepted already emit closeDeviceDialog(false); // false means "not by client", although it's not really used } } mShowEventReceived = true; + RDEBUG("1", 1); } // ---------------------------------------------------------------------------- @@ -181,13 +246,31 @@ // bool SecUiNotificationDialog::constructDialog(const QVariantMap ¶meters) { - qDebug() << "SecUiNotificationDialog::constructDialog"; + RDEBUG("0", 0); + RDEBUG("mMyId", mMyId); setTimeout(HbPopup::NoTimeout); setDismissPolicy(HbPopup::NoDismiss); setModal(true); mShowEventReceived = false; + subscriberKSecurityUIsDismissDialog = NULL; + titleWidget = NULL; + RDEBUG("subscriberKSecurityUIsDismissDialog NULL", 0); + + subscriberKSecurityUIsDismissDialog = new QValueSpaceSubscriber("/KPSUidSecurityUIs/KSecurityUIsDismissDialog", this); + if(subscriberKSecurityUIsDismissDialog) + { + RDEBUG("subscriberKSecurityUIsDismissDialog created", 1); + } + else + { + RDEBUG("subscriberKSecurityUIsDismissDialog not created", 0); + } + connect(subscriberKSecurityUIsDismissDialog, SIGNAL(contentsChanged()), this, SLOT(subscriberKSecurityUIsDismissDialogChanged())); + RDEBUG("subscriberKSecurityUIsDismissDialog", 1); // Title + // this is also done later in the widget + // For now, it only says "Security" if (parameters.contains(KDialogTitle)) { QString titleText = parameters.value(KDialogTitle).toString(); QString titleAttempts = ""; @@ -200,22 +283,24 @@ titleAttempts = titleText.right(titleText.length()-titleText.indexOf('#')-1); qDebug() << "SecUiNotificationDialog::titleAttempts=" << titleAttempts; int nAttempts = titleAttempts.toInt(); - qDebug() << "SecUiNotificationDialog::nAttempts=" << nAttempts; + RDEBUG("nAttempts", nAttempts); titleText = titleText.left(titleText.indexOf('#')); if(nAttempts>0) titleText = titleText + " attempts=" + QString::number(nAttempts); } - title = new HbLabel(titleText); - setHeadingWidget(title); + titleText = "Security Query"; // this is the header, for any potential later error which needs to be displayed + // This is created only if needed (i.e. errors for NewLockCode) + // titleWidget = new HbLabel(titleText); + // setHeadingWidget(titleWidget); } if (parameters.contains(KEmergency)) { - qDebug() << "SecUiNotificationDialog::KEmergency"; + RDEBUG("KEmergency", 1); QString emergencyText = parameters.value(KEmergency).toString(); qDebug() << emergencyText; if(!emergencyText.compare("emergencyYes")) { - qDebug() << "SecUiNotificationDialog::KEmergency emergencyYes"; + RDEBUG("emergencyYes", 1); isEmergency = 1; okAction->setEnabled(true); okAction->setText("Call"); @@ -223,7 +308,7 @@ } if(!emergencyText.compare("emergencyNo")) { - qDebug() << "SecUiNotificationDialog::KEmergency emergencyNo"; + RDEBUG("emergencyNo", 1); isEmergency = 0; okAction->setEnabled(false); // 112 -> 1122 (=password) . This is handled by < lMinLength okAction->setText("Ok"); @@ -232,112 +317,121 @@ } // after TARM validation. if (parameters.contains(KInvalidNewLockCode)) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode"; + RDEBUG("KInvalidNewLockCode", 0); QString invalidText = parameters.value(KInvalidNewLockCode).toString(); qDebug() << invalidText; + QString newTitleText = "Lock Code"; // TODO take from the original one - title->setPlainText("Lock Code"); // TODO take from the original one QString invalidStr = invalidText.right(invalidText.length()-invalidText.indexOf('#')-1); int invalidNumber = invalidStr.toInt(); - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode invalidNumber" << invalidNumber; + RDEBUG("invalidNumber", invalidNumber); if(invalidNumber<0) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode ???"; + RDEBUG("invalidNumber<0", invalidNumber ); // nothing to do } - if(invalidNumber==EDeviceLockAutolockperiod) + if(invalidNumber==EDeviceLockAutolockperiod) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockAutolockperiod"; - title->setPlainText("EDeviceLockAutolockperiod"); + RDEBUG("EDeviceLockAutolockperiod", invalidNumber ); + newTitleText+="EDeviceLockAutolockperiod"; } if(invalidNumber==EDeviceLockMaxAutolockPeriod) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockMaxAutolockPeriod"; - title->setPlainText("EDeviceLockMaxAutolockPeriod"); + RDEBUG("EDeviceLockAutolockperiod", invalidNumber ); + newTitleText+="EDeviceLockMaxAutolockPeriod"; } if(invalidNumber==EDeviceLockMinlength) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockMinlength"; - title->setPlainText("EDeviceLockMinlength"); + RDEBUG("EDeviceLockMinlength", invalidNumber ); + newTitleText+="EDeviceLockMinlength"; } if(invalidNumber==EDeviceLockMaxlength) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockMaxlength"; - title->setPlainText("EDeviceLockMaxlength"); + RDEBUG("EDeviceLockMaxlength", invalidNumber ); + newTitleText+="EDeviceLockMaxlength"; } if(invalidNumber==EDeviceLockRequireUpperAndLower) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockRequireUpperAndLower"; - title->setPlainText("EDeviceLockRequireUpperAndLower"); + RDEBUG("EDeviceLockRequireUpperAndLower", invalidNumber ); + newTitleText+="EDeviceLockRequireUpperAndLower"; } if(invalidNumber==EDeviceLockRequireCharsAndNumbers) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockRequireCharsAndNumbers"; - title->setPlainText("EDeviceLockMaxlength"); + RDEBUG("EDeviceLockMaxlength", invalidNumber ); + newTitleText+="EDeviceLockMaxlength"; } if(invalidNumber==EDeviceLockAllowedMaxRepeatedChars) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockAllowedMaxRepeatedChars"; - title->setPlainText("EDeviceLockAllowedMaxRepeatedChars"); + RDEBUG("EDeviceLockAllowedMaxRepeatedChars", invalidNumber ); + newTitleText+="EDeviceLockAllowedMaxRepeatedChars"; } if(invalidNumber==EDeviceLockHistoryBuffer) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockHistoryBuffer"; - title->setPlainText("EDeviceLockHistoryBuffer"); + RDEBUG("EDeviceLockHistoryBuffer", invalidNumber ); + newTitleText+="EDeviceLockHistoryBuffer"; } if(invalidNumber==EDeviceLockPasscodeExpiration) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockPasscodeExpiration"; - title->setPlainText("EDeviceLockPasscodeExpiration"); + RDEBUG("EDeviceLockPasscodeExpiration", invalidNumber ); + newTitleText+="EDeviceLockPasscodeExpiration"; } if(invalidNumber==EDeviceLockMinChangeTolerance) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockMinChangeTolerance"; - title->setPlainText("EDeviceLockMinChangeTolerance"); + RDEBUG("EDeviceLockMinChangeTolerance", invalidNumber ); + newTitleText+="EDeviceLockMinChangeTolerance"; } if(invalidNumber==EDeviceLockMinChangeInterval) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockMinChangeInterval"; - title->setPlainText("EDeviceLockMinChangeInterval"); + RDEBUG("EDeviceLockMinChangeInterval", invalidNumber ); + newTitleText+="EDeviceLockMinChangeInterval"; } if(invalidNumber==EDeviceLockDisallowSpecificStrings) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockDisallowSpecificStrings"; - title->setPlainText("EDeviceLockDisallowSpecificStrings"); + RDEBUG("EDeviceLockDisallowSpecificStrings", invalidNumber ); + newTitleText+="EDeviceLockDisallowSpecificStrings"; } if(invalidNumber==EDeviceLockAllowedMaxAtempts) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockAllowedMaxAtempts"; - title->setPlainText("EDeviceLockAllowedMaxAtempts"); + RDEBUG("EDeviceLockAllowedMaxAtempts", invalidNumber ); + newTitleText+="EDeviceLockAllowedMaxAtempts"; } if(invalidNumber==EDeviceLockConsecutiveNumbers) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockConsecutiveNumbers"; - title->setPlainText("EDeviceLockConsecutiveNumbers"); + RDEBUG("EDeviceLockConsecutiveNumbers", invalidNumber ); + newTitleText+="EDeviceLockConsecutiveNumbers"; } if(invalidNumber==EDeviceLockMinSpecialCharacters) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockMinSpecialCharacters"; - title->setPlainText("EDeviceLockMinSpecialCharacters"); + RDEBUG("EDeviceLockMinSpecialCharacters", invalidNumber ); + newTitleText+="EDeviceLockMinSpecialCharacters"; } if(invalidNumber==EDeviceLockSingleCharRepeatNotAllowed) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDeviceLockSingleCharRepeatNotAllowed"; - title->setPlainText("EDeviceLockSingleCharRepeatNotAllowed"); + RDEBUG("EDeviceLockSingleCharRepeatNotAllowed", invalidNumber ); + newTitleText+="EDeviceLockSingleCharRepeatNotAllowed"; } if(invalidNumber==EDevicelockConsecutiveCharsNotAllowed) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDevicelockConsecutiveCharsNotAllowed"; - title->setPlainText("EDevicelockConsecutiveCharsNotAllowed"); + RDEBUG("EDevicelockConsecutiveCharsNotAllowed", invalidNumber ); + newTitleText+="EDevicelockConsecutiveCharsNotAllowed"; } if(invalidNumber>=EDevicelockTotalPolicies) { - qDebug() << "SecUiNotificationDialog::KInvalidNewLockCode EDevicelockTotalPolicies"; - title->setPlainText("EDevicelockTotalPolicies"); + RDEBUG("EDevicelockTotalPolicies", invalidNumber ); + newTitleText+="EDevicelockTotalPolicies"; } + if( !titleWidget ) + { + RDEBUG("creating titleWidget", 0 ); + titleWidget = new HbLabel("New lock code"); // it will be changed later + setHeadingWidget(titleWidget); + } + RDEBUG("setPlainText", 0 ); + titleWidget->setPlainText(newTitleText); + if(invalidNumber<0) // everything is ok { - okAction->setEnabled(true); // TODO check this : invalid -> valid. This allows verif ? + okAction->setEnabled(true); // this might fail in the scenario: check this : invalid -> valid. This allows verif ? okAction->setText("Ok"); codeBottom->setEnabled(true); } @@ -360,7 +454,10 @@ queryType = content->queryType; queryDual = content->queryDual; isEmergency = content->isEmergency; + codeTop=NULL; codeTop = content->codeTop; + checkBox = content->checkbox; + listWidget = content->listWidget; codeBottom = content->codeBottom; lMinLength = content->lMinLength; lMaxLength = content->lMaxLength; @@ -372,8 +469,7 @@ connect(content, SIGNAL(but1Changed()), this, SLOT(handlebut1Changed())); connect(content, SIGNAL(but2Changed()), this, SLOT(handlebut2Changed())); connect(content, SIGNAL(but3Changed()), this, SLOT(handlebut3Changed())); - qDebug() << "SecUiNotificationDialog::queryType="; - qDebug() << queryType; + RDEBUG("queryType", queryType); // Buttons if( (queryType & ESecUiTypeMaskLock)) { @@ -382,36 +478,54 @@ } okAction = new HbAction(tr("Ok")); + RDEBUG("created HbAction okAction", 1); okAction->setEnabled(false); // initially the OK is disabled because codeTop is empty + if((queryType & ESecUiBasicTypeMask) ==ESecUiBasicTypeCheck) { + okAction->setEnabled(true); + setHeadingWidget(0); // had to remove this no multiline + } + else if ((queryType & ESecUiBasicTypeMask) ==ESecUiBasicTypeCheckMulti){ + okAction->setEnabled(true); + } + // setAction(okAction, QDialogButtonBox::AcceptRole); // it's supposed to use this, when deprecated - setPrimaryAction(okAction); + // setPrimaryAction(okAction); + addAction(okAction); + disconnect(okAction, SIGNAL(triggered()), this, SLOT(close())); // the close will be done in handleAccepted connect(okAction, SIGNAL(triggered()), this, SLOT(handleAccepted())); cancelAction = new HbAction(tr("Cancel")); // qtTrId("txt_common_button_cancel") + addAction(cancelAction); + disconnect(cancelAction, SIGNAL(triggered()), this, SLOT(close())); // the close will be done in handleCancelled connect(cancelAction, SIGNAL(triggered()), this, SLOT(handleCancelled())); // setAction(cancelAction, QDialogButtonBox::RejectRole); // it's supposed to use this, when deprecated - setSecondaryAction(cancelAction); + // setSecondaryAction(cancelAction); // this should had been set by Autolock, but just to be sure TInt ret = RProperty::Define(KPSUidSecurityUIs, KSecurityUIsDismissDialog, RProperty::EInt, TSecurityPolicy(TSecurityPolicy::EAlwaysPass), TSecurityPolicy(TSecurityPolicy::EAlwaysPass)); RDEBUG("defined KSecurityUIsDismissDialog", ret); - subscriberKSecurityUIsDismissDialog = new QValueSpaceSubscriber( - "/KPSUidSecurityUIs/KSecurityUIsDismissDialog", this); - connect(subscriberKSecurityUIsDismissDialog, SIGNAL(contentsChanged()), this, - SLOT(subscriberKSecurityUIsDismissDialogChanged())); - qDebug() << "subscribed to KSecurityUIsDismissDialog"; + TInt aDismissDialog = -1; + ret = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsDismissDialog, aDismissDialog ); + RDEBUG("ret", ret); + RDEBUG("aDismissDialog", aDismissDialog); + if(aDismissDialog==ESecurityUIsDismissDialogOn || aDismissDialog==ESecurityUIsDismissDialogProcessing) + { + RDebug::Printf( "potential error: %s %s (%u) aDismissDialog=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, aDismissDialog ); + } - qDebug() << "SecUiNotificationDialog check Cancel"; + RDEBUG("check cancel", 0); if ((queryType & ESecUiCancelSupported)==ESecUiCancelSupported) { // nothing to do. Cancel is enabled by default } else { - qDebug() << "disable Cancel"; + RDEBUG("disable Cancel", 1); cancelAction->setEnabled(false); + cancelAction->setText(""); + cancelAction->setVisible(false); } return true; @@ -423,14 +537,20 @@ // void SecUiNotificationDialog::sendResult(int accepted) { - qDebug() << "SecUiNotificationDialog::sendResult 1.2"; + RDEBUG("0", 0); + RDEBUG("mMyId", mMyId); QVariant acceptedValue(accepted); - qDebug() << "SecUiNotificationDialog::sendResult 2"; + RDEBUG("0", 0); mResultMap.insert(KResultAccepted, acceptedValue); - qDebug() << "SecUiNotificationDialog::sendResult 3"; + RDEBUG("0", 0); qDebug() << mResultMap; - emit deviceDialogData(mResultMap); - qDebug() << "SecUiNotificationDialog::sendResult end"; + RDEBUG("queryType", queryType); + if(!(queryType & ESecUiTypeMaskLock)) + { // the lock-icon should not reply + RDEBUG("emit deviceDialogData", 0); + emit deviceDialogData(mResultMap); + } + RDEBUG("1", 1); } // ---------------------------------------------------------------------------- @@ -439,21 +559,42 @@ // void SecUiNotificationDialog::handleAccepted() { - qDebug() << "SecUiNotificationDialog::handleAccepted"; + RDEBUG("0", 0); // okAction - QString codeTopText; + RDEBUG("mMyId", mMyId); + QString codeTopText=""; if( (queryType & ESecUiTypeMaskLock)) { codeTopText = "Unlock-Request"; } - else + else if( (queryType & ESecUiBasicTypeMask)==ESecUiBasicTypeCheck) + { + codeTopText=(checkBox->isChecked() ? "1":"0"); + mResultMap.insert(KCodeTopIndex, codeTopText); + } + else if( (queryType & ESecUiBasicTypeMask)==ESecUiBasicTypeCheckMulti) { - codeTopText = codeTop->text(); + QItemSelectionModel *selectionModel = listWidget->selectionModel(); + QModelIndexList selectedItems = selectionModel->selectedIndexes(); + QModelIndex index; + codeTopText=""; + foreach(index, selectedItems) { + codeTopText+=QString::number(index.row()); + //could also use if(index.row()!=selectedItems.count()-1) codeTopText+= "|"; + codeTopText+= "|"; + } + mResultMap.insert(KCodeTopIndex, codeTopText); } - // TODO check last time for codeBottom + else + codeTopText = codeTop->text(); + // no need to check last time for codeBottom qDebug() << "codeTopText=" << codeTopText; sendResult(KErrNone); + RDEBUG("calling close()", 0); + close(); // this is needed because Cancel doesn't automatically closes the dialog + RDEBUG("emitting deviceDialogClosed", 0); + emit deviceDialogClosed(); } // ---------------------------------------------------------------------------- @@ -462,8 +603,13 @@ // void SecUiNotificationDialog::handleCancelled() { - qDebug() << "SecUiNotificationDialog::handleCancelled"; + RDEBUG("0", 0); + RDEBUG("mMyId", mMyId); sendResult(KErrCancel); + RDEBUG("callingclose()", 0); + close(); // this is needed because Cancel doesn't automatically closes the dialog + RDEBUG("emitting deviceDialogClosed", 0); + emit deviceDialogClosed(); } // ---------------------------------------------------------------------------- @@ -472,17 +618,17 @@ // void SecUiNotificationDialog::handleMemorySelectionChanged(const QString &text) { - qDebug() << "SecUiNotificationDialog::handleMemorySelectionChanged"; - qDebug() << text; + RDEBUG("0", 0); + RDEBUG("mMyId", mMyId); + qDebug() << text; QVariant memorySelection(text); mResultMap.insert(KSelectedMemoryIndex, memorySelection); - //TODO: do we need emit here, or would it be better to send all data at the end? - //emit deviceDialogData(mResultMap); } void SecUiNotificationDialog::handleCodeTopContentChanged() { - qDebug() << "SecUiNotificationDialog::handleCodeTopContentChanged"; + RDEBUG("0", 0); + RDEBUG("mMyId", mMyId); qDebug() << codeTop->text(); handleCodeTopChanged(codeTop->text()); } @@ -493,7 +639,7 @@ // void SecUiNotificationDialog::handleCodeTopChanged(const QString &text) { - qDebug() << "SecUiNotificationDialog::handleCodeTopChanged"; + RDEBUG("0", 0); qDebug() << "SecUiNotificationDialog::handleCodeTopChanged=" << text ; if(queryDual) { @@ -501,32 +647,32 @@ } if( queryType == 0x1000004 ) // new codeLock { // ChangeSecCodeParamsL change RMobilePhone::ESecurityCodePhonePassword - QVariant codeTop(text); - mResultMap.insert(KCodeTopIndex, codeTop); + QVariant codeTopVar(text); + mResultMap.insert(KCodeTopIndex, codeTopVar); sendResult(KErrCompletion); // send the current password back to the client for further TARM validation. This is done on any key-press, not in the OK } if(text.length() < lMinLength ) { qDebug() << "SecUiNotificationDialog::handleCodeTopChanged too short:" << text ; okAction->setEnabled(false); - + RDEBUG("lEmergencySupported", lEmergencySupported); if( lEmergencySupported && text.length() > 2 ) // emergency numbers need at least 3 digits { // check whether it's a emergency number - QVariant codeTop(text); - mResultMap.insert(KCodeTopIndex, codeTop); + QVariant codeTopVar(text); + mResultMap.insert(KCodeTopIndex, codeTopVar); sendResult(KErrAbort); // send the current password back to the client. Perhaps it's an emergency number and decides to Ok->Call } } else if (text.length() >= lMinLength) { - // TODO might use a flag to avoid re-setting + // might use a flag to avoid re-setting. But this complicates things if there's another initial verification qDebug() << "SecUiNotificationDialog::handleCodeTopChanged long enough:" << text ; okAction->setText("Ok"); if(queryDual==0) // only if Bottom is not used okAction->setEnabled(true); } - QVariant codeTop(text); - mResultMap.insert(KCodeTopIndex, codeTop); + QVariant codeTopVar(text); + mResultMap.insert(KCodeTopIndex, codeTopVar); } // ---------------------------------------------------------------------------- // SecUiNotificationDialog::handleCodeBottomChanged() @@ -534,10 +680,9 @@ // void SecUiNotificationDialog::handleCodeBottomChanged(const QString &text) { - qDebug() << "SecUiNotificationDialog::handleCodeBottomChanged"; + RDEBUG("0", 0); qDebug() << "SecUiNotificationDialog::handleCodeBottomChanged" << text ; qDebug() << "SecUiNotificationDialog::handleCodeBottomChanged. codeTop=" << codeTop->text() ; - // TODO compare if(text.length() < lMinLength ) { qDebug() << "SecUiNotificationDialog::handleCodeBottomChanged too short:" << text ; @@ -545,10 +690,11 @@ } else { - // TODO might use a flag to avoid re-setting + // might use a flag to avoid re-setting. But it just complicates things. qDebug() << "SecUiNotificationDialog::handleCodeBottomChanged long enough:" << text ; if(codeTop->text()==text) { + // unless both codes match, don't allow OK. Note that the first field doesn't allow exit until the validations (i.e. NewLockCode) as succesfull qDebug() << "SecUiNotificationDialog::handleCodeBottomChanged codes match:" << text ; okAction->setEnabled(true); } @@ -566,8 +712,8 @@ // void SecUiNotificationDialog::handlebut1Changed() { - qDebug() << "SecUiNotificationDialog::handlebut1Changed"; - codeTop->setText("1234"); + RDEBUG("0", 0); + codeTop->setText("1234"); } // ---------------------------------------------------------------------------- // SecUiNotificationDialog::handlebut2Changed() @@ -575,7 +721,7 @@ // void SecUiNotificationDialog::handlebut2Changed() { - qDebug() << "SecUiNotificationDialog::handlebut2Changed"; + RDEBUG("0", 0); QString codeTopText = codeTop->text(); qDebug() << "codeTopText"; qDebug() << codeTopText; @@ -583,6 +729,40 @@ qDebug() << "codeTopText+1"; qDebug() << codeTopText; codeTop->setText(codeTopText); + + RDEBUG("editorInterface", 0); + HbEditorInterface editorInterface(codeTop); + RDEBUG("actions", 0); + QList vkbList = editorInterface.actions(); + RDEBUG("count", 0); + int count = vkbList.count(); + RDEBUG("got count", count); + for (int i = 0; i < count; i++) + { + RDEBUG("i", i); + HbAction *action = static_cast(vkbList[i]); + RDEBUG("action", 0); + } + + RDEBUG("okVKBAction", 0); + okVKBAction = new HbAction(tr("Ok")); + RDEBUG("addAction", 0); + editorInterface.addAction(okVKBAction); + RDEBUG("addAction", 1); + connect(okVKBAction, SIGNAL(triggered()), this, SLOT(handleAccepted())); + RDEBUG("connect", 1); + + QList vkbList2 = editorInterface.actions(); + RDEBUG("count", 0); + int count2 = vkbList2.count(); + RDEBUG("got count2", count2); + for (int i = 0; i < count2; i++) + { + RDEBUG("i", i); + HbAction *action2 = static_cast(vkbList2[i]); + RDEBUG("action2", 0); + } + } // ---------------------------------------------------------------------------- // SecUiNotificationDialog::handlebut3Changed() @@ -613,35 +793,71 @@ // ---------------------------------------------------------------------------- // SecUiNotificationDialog::subscriberKSecurityUIsDismissDialogChanged() // A way for Autolock to dismiss any possible PIN dialog +// This doesn't dismiss the lockIcon because P&S is not connected +// Note: if this changes itself, then it becomes recursive // ---------------------------------------------------------------------------- // void SecUiNotificationDialog::subscriberKSecurityUIsDismissDialogChanged() { -enum TSecurityUIsDismissDialogValues - { - ESecurityUIsDismissDialogUninitialized = 0, - ESecurityUIsDismissDialogOn, - ESecurityUIsDismissDialogProcessing, - ESecurityUIsDismissDialogDone, - ESecurityUIsDismissDialogLastValue - }; RDEBUG("0", 0); + RDEBUG("mMyId", mMyId); TInt aDismissDialog = ESecurityUIsDismissDialogUninitialized; TInt err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsDismissDialog, aDismissDialog ); RDEBUG("err", err); - RDEBUG("aDismissDialog", aDismissDialog); + RDEBUG("aDismissDialog", aDismissDialog); if( aDismissDialog == ESecurityUIsDismissDialogOn ) { - err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsDismissDialog, ESecurityUIsDismissDialogProcessing ); - RDEBUG("err", err); - // TODO perhaps do this only if Cancel is allowed? - RDEBUG("sendResult(KErrDied)", 0); - sendResult(KErrDied); // similar to emit handleCancelled(); - RDEBUG("emit closeDeviceDialog", 0); - emit closeDeviceDialog(false); // false means "not by client", although it's not really used - RDEBUG("all emited", 0); - err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsDismissDialog, ESecurityUIsDismissDialogDone ); // clear after using it - RDEBUG("err", err); + if(subscriberKSecurityUIsDismissDialog) + { + RDEBUG("subscriberKSecurityUIsDismissDialog", 1); + } + else + { + RDEBUG("! subscriberKSecurityUIsDismissDialog", 0); + } + + if(this) + { + RDEBUG("this", 1); + } + else + { + RDEBUG("! this", 0); + } + + + RDEBUG("disconnect subscriberKSecurityUIsDismissDialog", 0); + disconnect(subscriberKSecurityUIsDismissDialog, SIGNAL(contentsChanged()), this, SLOT(subscriberKSecurityUIsDismissDialogChanged())); + // this doesn't really disconnect, because somehow the events are still queued. This is a QtMobility error + RDEBUG("disconnected subscriberKSecurityUIsDismissDialog", 1); + + RDEBUG("not set KSecurityUIsDismissDialog", ESecurityUIsDismissDialogProcessing); + // can't set it because it does recursion + // err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsDismissDialog, ESecurityUIsDismissDialogProcessing ); + RDEBUG("err", err); + // only if Cancel is allowed + if ((queryType & ESecUiCancelSupported)==ESecUiCancelSupported) + { + RDEBUG("sendResult(KErrCancel)", KErrCancel); // another option is KErrDied + sendResult(KErrCancel); // similar to emit handleCancelled(); + RDEBUG("calling close()", 0); + err = close(); + RDEBUG("err", err); + RDEBUG("emitting deviceDialogClosed", 0); + emit deviceDialogClosed(); + // RDEBUG("emit closeDeviceDialog", 0); + // this is old method emit closeDeviceDialog(false); // false means "not by client", although it's not really used + RDEBUG("all emited", 0); + } + RDEBUG("not set KSecurityUIsDismissDialog", ESecurityUIsDismissDialogDone); + // can't set it because it does recursion + // err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsDismissDialog, ESecurityUIsDismissDialogDone ); // clear after using it + RDEBUG("err", err); + + RDEBUG("reconnect subscriberKSecurityUIsDismissDialog", 0); + connect(subscriberKSecurityUIsDismissDialog, SIGNAL(contentsChanged()), this, SLOT(subscriberKSecurityUIsDismissDialogChanged())); + RDEBUG("reconnected subscriberKSecurityUIsDismissDialog", 1); } - } \ No newline at end of file + RDEBUG("1", 1); + } diff -r aad866c37519 -r cc1cea6aabaf securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationdialogplugin.cpp --- a/securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationdialogplugin.cpp Fri Jun 11 14:28:40 2010 +0300 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationdialogplugin.cpp Thu Jun 24 12:46:20 2010 +0300 @@ -15,10 +15,13 @@ * */ +#include "secuinotificationdebug.h" #include "secuinotificationdialogplugin.h" #include "secuinotificationdialog.h" #include "secuinotificationdialogpluginkeys.h" +#include + // This plugin implements one device dialog type static const struct { const char *mTypeString; @@ -50,12 +53,13 @@ bool SecUiNotificationDialogPlugin::accessAllowed(const QString &deviceDialogType, const QVariantMap ¶meters, const QVariantMap &securityInfo) const { + RDEBUG("0", 0); Q_UNUSED(deviceDialogType) Q_UNUSED(parameters) Q_UNUSED(securityInfo) // All clients are allowed to use. - // TODO: should access be limited to certain clients? + // should access be limited to certain clients or capabilities ? Not for now. return true; } @@ -67,6 +71,7 @@ const QString &deviceDialogType, const QVariantMap ¶meters) { // Create device dialog widget + RDEBUG("0", 0); Q_UNUSED(deviceDialogType) SecUiNotificationDialog *deviceDialog = new SecUiNotificationDialog(parameters); @@ -86,15 +91,39 @@ bool SecUiNotificationDialogPlugin::deviceDialogInfo( const QString &deviceDialogType, const QVariantMap ¶meters, DeviceDialogInfo *info) const { - // Return device dialog flags + // For some unknown reason, this function doesn't print the signature + RDEBUG("0", 0); + #ifdef _DEBUG + RDebug::Printf( "SecUiNotificationDialogPlugin::deviceDialogInfo=%x", 0 ); + #endif + Q_UNUSED(deviceDialogType); - Q_UNUSED(parameters); - //info->group = DeviceNotificationDialogGroup; // TODO this should be SecurityGroup , but it's still not available, Commented out by 10.1 Integration - info->group = SecurityGroup; // Added by 10.1 Integration... It's working better with this layer. + info->group = SecurityGroup; info->flags = NoDeviceDialogFlags; info->priority = DefaultPriority; + // The unlock-query must have higher priority, to get over Telephony. + if (parameters.contains(KQueryType)) { + #ifdef _DEBUG + RDebug::Printf( "SecUiNotificationDialogPlugin::deviceDialogInfo KQueryType=%x", 1 ); + #endif + int iqueryType = parameters.value(KQueryType).toUInt(); + RDEBUG("iqueryType", iqueryType); + #ifdef _DEBUG + RDebug::Printf( "SecUiNotificationDialogPlugin::deviceDialogInfo iqueryType=%x", iqueryType ); + #endif + if( (iqueryType & 0xFFFF) == RMobilePhone::ESecurityCodePhonePassword ) + { + RDEBUG("CriticalGroup", CriticalGroup); + #ifdef _DEBUG + RDebug::Printf( "SecUiNotificationDialogPlugin::deviceDialogInfo CriticalGroup=%x", CriticalGroup ); + #endif + info->group = CriticalGroup; + } + } + // Return device dialog flags + return true; } @@ -104,6 +133,7 @@ // QStringList SecUiNotificationDialogPlugin::deviceDialogTypes() const { + RDEBUG("0", 0); // Return device dialog types this plugin implements QStringList types; @@ -121,6 +151,7 @@ // HbDeviceDialogPlugin::PluginFlags SecUiNotificationDialogPlugin::pluginFlags() const { + RDEBUG("0", 0); // Return plugin flags return NoPluginFlags; } @@ -131,6 +162,7 @@ // int SecUiNotificationDialogPlugin::error() const { + RDEBUG("mError", mError); // Return last error return mError; }