[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