[Telepathy-commits] [telepathy-qt4/master] Connection: invalidate with a vaguely appropriate error when disconnected

Simon McVittie simon.mcvittie at collabora.co.uk
Wed Jan 14 04:55:03 PST 2009


In a near-future telepathy-spec we should define better errors, but these
will do for now.
---
 TelepathyQt4/Client/connection.cpp |   44 ++++++++++++++++++++++++++++++++++-
 1 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/TelepathyQt4/Client/connection.cpp b/TelepathyQt4/Client/connection.cpp
index 73f91c6..1f09acd 100644
--- a/TelepathyQt4/Client/connection.cpp
+++ b/TelepathyQt4/Client/connection.cpp
@@ -351,10 +351,50 @@ void Connection::onStatusChanged(uint status, uint reason)
             break;
 
         case ConnectionStatusDisconnected:
-            if (mPriv->readiness != ReadinessDead)
+            if (mPriv->readiness != ReadinessDead) {
+                const char *errorName;
+
+                // This is the best we can do right now: in an imminent
+                // spec version we should define a different D-Bus error name
+                // for each ConnectionStatusReason
+
+                switch (reason) {
+                    case ConnectionStatusReasonNoneSpecified:
+                    case ConnectionStatusReasonRequested:
+                        errorName = TELEPATHY_ERROR_DISCONNECTED;
+                        break;
+
+                    case ConnectionStatusReasonNetworkError:
+                    case ConnectionStatusReasonAuthenticationFailed:
+                    case ConnectionStatusReasonEncryptionError:
+                        errorName = TELEPATHY_ERROR_NETWORK_ERROR;
+                        break;
+
+                    case ConnectionStatusReasonNameInUse:
+                        errorName = TELEPATHY_ERROR_NOT_YOURS;
+                        break;
+
+                    case ConnectionStatusReasonCertNotProvided:
+                    case ConnectionStatusReasonCertUntrusted:
+                    case ConnectionStatusReasonCertExpired:
+                    case ConnectionStatusReasonCertNotActivated:
+                    case ConnectionStatusReasonCertHostnameMismatch:
+                    case ConnectionStatusReasonCertFingerprintMismatch:
+                    case ConnectionStatusReasonCertSelfSigned:
+                    case ConnectionStatusReasonCertOtherError:
+                        errorName = TELEPATHY_ERROR_NETWORK_ERROR;
+
+                    default:
+                        errorName = TELEPATHY_ERROR_DISCONNECTED;
+                }
+
+                invalidate(QLatin1String(errorName),
+                        QString("ConnectionStatusReason = %1").arg(uint(reason)));
+
                 mPriv->changeReadiness(ReadinessDead);
-            else
+            } else {
                 warning() << " Got unexpected status change to Disconnected";
+            }
             break;
 
         default:
-- 
1.5.6.5




More information about the Telepathy-commits mailing list