[Telepathy-commits] [telepathy-qt4/master] ReadinessHelper: Make becomeReady fail if requestedFeatures contains an invalid feature.
Andre Moreira Magalhaes (andrunko)
andre.magalhaes at collabora.co.uk
Thu Feb 19 06:39:02 PST 2009
---
TelepathyQt4/Client/readiness-helper.cpp | 25 +++++++++++++++++++++----
1 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/TelepathyQt4/Client/readiness-helper.cpp b/TelepathyQt4/Client/readiness-helper.cpp
index bd25689..a7ca9ae 100644
--- a/TelepathyQt4/Client/readiness-helper.cpp
+++ b/TelepathyQt4/Client/readiness-helper.cpp
@@ -56,6 +56,7 @@ struct ReadinessHelper::Private
QStringList interfaces;
QMap<uint, Introspectable> introspectables;
QSet<uint> supportedStatuses;
+ QSet<uint> supportedFeatures;
QSet<uint> satisfiedFeatures;
QSet<uint> requestedFeatures;
QSet<uint> missingFeatures;
@@ -82,11 +83,19 @@ ReadinessHelper::Private::Private(
// we must have an introspectable for core
Q_ASSERT(introspectables.contains(0));
- foreach (const ReadinessHelper::Introspectable &introspectable, introspectables) {
+ QMap<uint, Introspectable>::const_iterator i = introspectables.constBegin();
+ while (i != introspectables.constEnd()) {
+ uint feature = i.key();
+ Introspectable introspectable = i.value();
Q_ASSERT(introspectable.introspectFunc != 0);
supportedStatuses += introspectable.makesSenseForStatuses;
+ supportedFeatures += feature;
+ ++i;
}
+ debug() << "ReadinessHelper: supportedStatuses =" << supportedStatuses;
+ debug() << "ReadinessHelper: supportedFeatures =" << supportedFeatures;
+
if (supportedStatuses.contains(currentStatus)) {
introspectCore();
}
@@ -192,7 +201,6 @@ void ReadinessHelper::Private::iterateIntrospection()
// satisfiedFeatures + missingFeatures has
foreach (PendingReady *operation, pendingOperations) {
if ((operation->requestedFeatures() - (satisfiedFeatures + missingFeatures)).isEmpty()) {
- // TODO should we finish with error if requestedFeatures is on missingFeatures?
operation->setFinished();
pendingOperations.removeOne(operation);
}
@@ -337,12 +345,21 @@ bool ReadinessHelper::isReady(QSet<uint> features) const
PendingReady *ReadinessHelper::becomeReady(QSet<uint> requestedFeatures)
{
- // TODO check if requestedFeatures does not contain any invalid feature
-
if (requestedFeatures.isEmpty()) {
requestedFeatures << 0; // it is empty, consider core
}
+ QSet<uint> supportedFeatures = mPriv->supportedFeatures;
+ if (supportedFeatures.intersect(requestedFeatures) != requestedFeatures) {
+ debug() << "ReadinessHelper::becomeReady called with invalid features: requestedFeatures =" <<
+ requestedFeatures << "- supportedFeatures =" << mPriv->supportedFeatures;
+ PendingReady *operation =
+ new PendingReady(requestedFeatures, this);
+ operation->setFinishedWithError(TELEPATHY_ERROR_INVALID_ARGUMENT,
+ "Requested features contains invalid feature");
+ return operation;
+ }
+
if (!mPriv->proxy->isValid()) {
PendingReady *operation =
new PendingReady(requestedFeatures, this);
--
1.5.6.5
More information about the telepathy-commits
mailing list