GDBus: Only rewrite serial number if g_dbus_message_get_serial() returns 0

While this a dangerous thing to allow (collissions, reply_serial not
matching up etc.), the added flexibility makes this a good trade-off -
for example, with this feature, it's now a lot easier to build message
routers.

Signed-off-by: David Zeuthen <davidz@redhat.com>
This commit is contained in:
David Zeuthen
2010-07-07 11:02:08 -04:00
parent 746721293b
commit acc9bb2403
2 changed files with 23 additions and 7 deletions

View File

@@ -1026,7 +1026,11 @@ g_dbus_connection_send_message_unlocked (GDBusConnection *connection,
if (blob == NULL)
goto out;
serial_to_use = ++connection->priv->last_serial; /* TODO: handle overflow */
serial_to_use = g_dbus_message_get_serial (message);
if (serial_to_use == 0)
{
serial_to_use = ++connection->priv->last_serial; /* TODO: handle overflow */
}
switch (blob[0])
{
@@ -1079,8 +1083,11 @@ g_dbus_connection_send_message_unlocked (GDBusConnection *connection,
*
* Asynchronously sends @message to the peer represented by @connection.
*
* If @out_serial is not %NULL, then the serial number assigned to
* @message by @connection will be written to this location prior to
* If g_dbus_message_get_serial() returns non-zero for @message, then
* that value is used for the message serial number. Otherwise a
* serial number will be assigned by @connection and set on @message
* via g_dbus_message_set_serial(). If @out_serial is not %NULL, then
* the serial number used will be written to this location prior to
* submitting the message to the underlying transport.
*
* If @connection is closed then the operation will fail with
@@ -1392,8 +1399,11 @@ g_dbus_connection_send_message_with_reply_unlocked (GDBusConnection *connect
*
* Asynchronously sends @message to the peer represented by @connection.
*
* If @out_serial is not %NULL, then the serial number assigned to
* @message by @connection will be written to this location prior to
* If g_dbus_message_get_serial() returns non-zero for @message, then
* that value is used for the message serial number. Otherwise a
* serial number will be assigned by @connection and set on @message
* via g_dbus_message_set_serial(). If @out_serial is not %NULL, then
* the serial number used will be written to this location prior to
* submitting the message to the underlying transport.
*
* If @connection is closed then the operation will fail with
@@ -1525,8 +1535,11 @@ send_message_with_reply_sync_cb (GDBusConnection *connection,
* timeout is reached. See g_dbus_connection_send_message_with_reply()
* for the asynchronous version of this method.
*
* If @out_serial is not %NULL, then the serial number assigned to
* @message by @connection will be written to this location prior to
* If g_dbus_message_get_serial() returns non-zero for @message, then
* that value is used for the message serial number. Otherwise a
* serial number will be assigned by @connection and set on @message
* via g_dbus_message_set_serial(). If @out_serial is not %NULL, then
* the serial number used will be written to this location prior to
* submitting the message to the underlying transport.
*
* If @connection is closed then the operation will fail with