Merged revisions 982309 via svnmerge from

svn+ssh://tmcguire@svn.kde.org/home/kde/branches/kdepim/enterprise4/kdepim

................
  r982309 | winterz | 2009-06-15 15:37:29 +0200 (Mon, 15 Jun 2009) | 9 lines
  
  Merged revisions 982278 via svnmerge from 
  https://svn.kde.org/home/kde/branches/kdepim/enterprise/kdepim
  
  ........
    r982278 | mutz | 2009-06-15 08:42:59 -0400 (Mon, 15 Jun 2009) | 1 line
    
    Try to minimise the number of unnecessary key lookups. When there is no explicit request to encrypt, and opportunistic encryption is switched off, and no encryption preferences are found that would indicate encryption, then do not look up recipient's keys at all. kolab/issue3578
  ........
................

svn path=/trunk/KDE/kdepim/; revision=982996
wilder-work
Thomas McGuire 17 years ago
parent c1fd5ce4be
commit d94b058cf4
  1. 22
      keyresolver.cpp

@ -409,6 +409,11 @@ public:
}
void operator()( Item & item );
template <typename Container>
void process( Container & c ) {
*this = std::for_each( c.begin(), c.end(), *this );
}
#define make_int_accessor(x) unsigned int num##x() const { return m##x; }
make_int_accessor(NoKey)
make_int_accessor(NeverEncrypt)
@ -421,6 +426,7 @@ public:
#undef make_int_accessor
private:
EncryptionPreference mDefaultPreference;
bool mNoOps;
unsigned int mTotal;
unsigned int mNoKey;
unsigned int mNeverEncrypt, mUnknownPreference, mAlwaysEncrypt,
@ -428,12 +434,14 @@ private:
};
void Kleo::KeyResolver::EncryptionPreferenceCounter::operator()( Item & item ) {
if ( _this ) {
if ( item.needKeys )
item.keys = _this->getEncryptionKeys( item.address, true );
if ( item.keys.empty() ) {
++mNoKey;
return;
}
}
switch ( !item.pref ? mDefaultPreference : item.pref ) {
#define CASE(x) case Kleo::x: ++m##x; break
CASE(NeverEncrypt);
@ -980,6 +988,20 @@ Kleo::Action Kleo::KeyResolver::checkEncryptionPreferences( bool encryptionReque
d->mOpenPGPEncryptToSelfKeys.empty() && d->mSMIMEEncryptToSelfKeys.empty() )
return Impossible;
if ( !encryptionRequested && !mOpportunisticEncyption ) {
// try to minimize crypto ops (including key lookups) by only
// looking up keys when at least one the the encryption
// preferences needs it:
EncryptionPreferenceCounter count( 0, UnknownPreference );
count.process( d->mPrimaryEncryptionKeys );
count.process( d->mSecondaryEncryptionKeys );
if ( !count.numAlwaysEncrypt() &&
!count.numAlwaysAskForEncryption() && // this guy might not need a lookup, when declined, but it's too complex to implement that here
!count.numAlwaysEncryptIfPossible() &&
!count.numAskWheneverPossible() )
return DontDoIt;
}
EncryptionPreferenceCounter count( this, mOpportunisticEncyption ? AskWheneverPossible : UnknownPreference );
count = std::for_each( d->mPrimaryEncryptionKeys.begin(), d->mPrimaryEncryptionKeys.end(),
count );

Loading…
Cancel
Save