[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdesupport/qt-dbus
From:       Thiago Macieira <thiago () kde ! org>
Date:       2006-06-14 17:09:05
Message-ID: 1150304945.534137.22726.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 551460 by thiago:

When we're disconnected, make the QDBusConnection::send*
methods return/set a valid error message.


 M  +26 -0     selftests/qdbusconnection/tst_qdbusconnection.cpp  
 M  +22 -4     src/qdbusconnection.cpp  
 M  +3 -0      src/qdbuserror.cpp  
 M  +4 -6      src/qdbusmessage.cpp  
 M  +1 -0      src/qdbusmessage.h  


--- trunk/kdesupport/qt-dbus/selftests/qdbusconnection/tst_qdbusconnection.cpp #551459:551460
@@ -23,6 +23,7 @@
     Q_OBJECT
 
 private slots:
+    void noConnection();
     void addConnection();
     void connect();
     void send();
@@ -47,6 +48,31 @@
     int serial;
 };
 
+void tst_QDBusConnection::noConnection()
+{
+    QDBusConnection con = QDBusConnection::addConnection("unix:path=/dev/null", "testconnection");
+    QVERIFY(!con.isConnected());
+
+    // try sending a message. This should fail
+    QDBusMessage msg = QDBusMessage::methodCall("org.kde.selftest", "/org/kde/selftest",
+                                                "org.kde.selftest", "Ping");
+    msg << QLatin1String("ping");
+
+    QVERIFY(!con.send(msg));
+
+    QDBusSpy spy;
+    QVERIFY(con.sendWithReplyAsync(msg, &spy, SLOT(asyncReply)) == 0);
+
+    QDBusMessage reply = con.sendWithReply(msg);
+    QVERIFY(reply.type() == QDBusMessage::ErrorMessage);
+
+    QDBusReply<void> voidreply(reply);
+    QVERIFY(voidreply.isError());
+    QVERIFY(!voidreply.isSuccess());
+
+    QDBusConnection::closeConnection("testconnection");
+}
+
 void tst_QDBusConnection::sendSignal()
 {
     QDBusConnection &con = QDBus::sessionBus();
--- trunk/kdesupport/qt-dbus/src/qdbusconnection.cpp #551459:551460
@@ -360,8 +360,14 @@
 */
 bool QDBusConnection::send(const QDBusMessage &message) const
 {
-    if (!d || !d->connection)
+    if (!d || !d->connection) {
+        QDBusError err = QDBusError(QDBusError::Disconnected,
+                                    QLatin1String("Not connected to D-BUS server"));
+        if (d)
+            d->lastError = err;
+
         return false;
+    }
     return d->send(message) != 0;
 }
 
@@ -378,8 +384,14 @@
 int QDBusConnection::sendWithReplyAsync(const QDBusMessage &message, QObject *receiver,
         const char *method) const
 {
-    if (!d || !d->connection)
+    if (!d || !d->connection) {
+        QDBusError err = QDBusError(QDBusError::Disconnected,
+                                    QLatin1String("Not connected to D-BUS server"));
+        if (d)
+            d->lastError = err;
+
         return 0;
+    }
 
     return d->sendWithReplyAsync(message, receiver, method);
 }
@@ -398,8 +410,14 @@
 */
 QDBusMessage QDBusConnection::sendWithReply(const QDBusMessage &message, WaitMode mode) const
 {
-    if (!d || !d->connection)
-        return QDBusMessage();
+    if (!d || !d->connection) {
+        QDBusError err = QDBusError(QDBusError::Disconnected,
+                                    QLatin1String("Not connected to D-BUS server"));
+        if (d)
+            d->lastError = err;
+
+        return QDBusMessage::error(message, err);
+    }
     return d->sendWithReply(message, mode);
 }
 
--- trunk/kdesupport/qt-dbus/src/qdbuserror.cpp #551459:551460
@@ -29,6 +29,7 @@
 
 #include <dbus/dbus.h>
 #include "qdbusmessage.h"
+#include "qdbusmessage_p.h"
 
 struct ErrorMessageMapping
 {
@@ -187,6 +188,8 @@
     nm = qdmsg.name();
     if (qdmsg.count())
         msg = qdmsg[0].toString();
+    else
+        msg = qdmsg.d_ptr->message;
     code = errorMessages()->get(nm.toUtf8().constData());
 }
 
--- trunk/kdesupport/qt-dbus/src/qdbusmessage.cpp #551459:551460
@@ -157,15 +157,14 @@
 QDBusMessage QDBusMessage::error(const QDBusMessage &other, const QString &name,
                                  const QString &msg)
 {
-    Q_ASSERT(other.d_ptr->msg);
-
     QDBusMessage message;
     message.d_ptr->connection = other.d_ptr->connection;
     message.d_ptr->type = DBUS_MESSAGE_TYPE_ERROR;
     message.d_ptr->name = name;
     message.d_ptr->message = msg;
-    message.d_ptr->reply = dbus_message_ref(other.d_ptr->msg);
     other.d_ptr->repliedTo = true;
+    if (other.d_ptr->msg)
+        message.d_ptr->reply = dbus_message_ref(other.d_ptr->msg);
 
     return message;
 }
@@ -177,15 +176,14 @@
 */
 QDBusMessage QDBusMessage::error(const QDBusMessage &other, const QDBusError &error)
 {
-    Q_ASSERT(other.d_ptr->msg);
-
     QDBusMessage message;
     message.d_ptr->connection = other.d_ptr->connection;
     message.d_ptr->type = DBUS_MESSAGE_TYPE_ERROR;
     message.d_ptr->name = error.name();
     message.d_ptr->message = error.message();
-    message.d_ptr->reply = dbus_message_ref(other.d_ptr->msg);
     other.d_ptr->repliedTo = true;
+    if (other.d_ptr->msg)
+        message.d_ptr->reply = dbus_message_ref(other.d_ptr->msg);
 
     return message;
 }
--- trunk/kdesupport/qt-dbus/src/qdbusmessage.h #551459:551460
@@ -85,6 +85,7 @@
     bool wasRepliedTo() const;
 
 private:
+    friend class QDBusError;
     DBusMessage *toDBusMessage() const;
     static QDBusMessage fromDBusMessage(DBusMessage *dmsg, const QDBusConnection &connection);
     static QDBusMessage fromError(const QDBusError& error);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic