summaryrefslogtreecommitdiffstats
path: root/gdbus
AgeCommit message (Collapse)AuthorFilesLines
2012-11-26gdbus: Remove not needed NULL pointer checksSzymon Janc1-2/+2
g_strdup returns NULL if argument passed is NULL and there is no need to double check that.
2012-11-26gdbus: Replace leading spaces with tabsSyam Sidhardhan1-4/+4
Trivial formatting fix.
2012-11-26gdbus: Fix compilation error due to missing #definesSyam Sidhardhan1-0/+8
Since these are simple #define strings, we are defining it here instead of upgrading to D-Bus 1.5 or later. Log: CC gdbus/object.o gdbus/object.c: In function ‘properties_set’: gdbus/object.c:876:7: error: ‘DBUS_ERROR_UNKNOWN_PROPERTY’ undeclared (first use in this function) gdbus/object.c:876:7: note: each undeclared identifier is reported only once for each function it appears in gdbus/object.c:881:6: error: ‘DBUS_ERROR_PROPERTY_READ_ONLY’ undeclared (first use in this function) make[1]: *** [gdbus/object.o] Error 1 make: *** [all] Error 2
2012-11-26gdbus: Remove connection from pending_property functionsLucas De Marchi2-20/+17
The reply to a DBus.Properties.Set() method call should go through the same D-Bus connection. Thus remove the DBusConnection parameter from the following functions: - g_dbus_pending_property_success() - g_dbus_pending_property_error_valist() - g_dbus_pending_property_error()
2012-11-26gdbus: Fix invalid memory access during interface removalJohan Hedberg1-6/+6
If an interface is removed from the root path during the same mainloop iteration that it was added we need to check for data->added before doing the check for data->parent == NULL in the remove_interface() function. Otherwise the added interface doesn't get removed from the data->added list and will result in accessing freed memory: ==337== Invalid read of size 8 ==337== at 0x4F65AFA: dbus_message_iter_append_basic (in /usr/lib64/libdbus-1.so.3.7.1) ==337== by 0x1247B5: append_interface (object.c:556) ==337== by 0x4C8DC5C: g_slist_foreach (gslist.c:840) ==337== by 0x1261F7: process_changes (object.c:594) ==337== by 0x126372: generic_unregister (object.c:997) ==337== by 0x4F69669: ??? (in /usr/lib64/libdbus-1.so.3.7.1) ==337== by 0x4F5CE51: dbus_connection_unregister_object_path (in /usr/lib64/libdbus-1.so.3.7.1) ==337== by 0x125E81: object_path_unref (object.c:1236) ==337== by 0x126136: g_dbus_unregister_interface (object.c:1361) ==337== by 0x14CDF0: service_exit (service.c:581) ==337== by 0x177556: plugin_cleanup (plugin.c:242) ==337== by 0x12221F: main (main.c:559) ==337== Address 0x5bc1550 is 0 bytes inside a block of size 56 free'd ==337== at 0x4A079AE: free (vg_replace_malloc.c:427) ==337== by 0x4C7850E: g_free (gmem.c:252) ==337== by 0x125DB0: remove_interface (object.c:671) ==337== by 0x125E3B: object_path_unref (object.c:1230) ==337== by 0x126136: g_dbus_unregister_interface (object.c:1361) ==337== by 0x14CDF0: service_exit (service.c:581) ==337== by 0x177556: plugin_cleanup (plugin.c:242) ==337== by 0x12221F: main (main.c:559)
2012-11-26gdbus: Add g_dbus_get_properties functionJohan Hedberg2-0/+21
This function can be used to construct custom D-Bus messages containing the properties for a specific interface on a given path.
2012-11-26gdbus: Add support for invalidated propertiesJohan Hedberg1-1/+14
If there's a pending property but its exists() callback returns false the property should be considered invalidated and included in the relevant list of the PropertiesChanged signal.
2012-11-26gdbus: Fix processing pending properties in remove_interface()Johan Hedberg1-0/+2
2012-11-26gdbus: Fix up Properties.Set() code pathLucas De Marchi1-3/+7
Minor fixes to make setter actually work: - Add propdata in pending_property_set - Break loop when we are removing propdata from list and we found it - in_args and out_args were swapped - interface and method name arguments were swapped
2012-11-26gdbus: Fix invalid memory access while unregisteringLucas De Marchi1-0/+11
If an interface is added and removed on the same mailoop iteration, ObjectManager would try to send InterfacesAdded signal while running the idler because the interface was added to data->added list. This is easily reproduced by forcing an error path in a plugin registration, like on sap_server_register(), resulting in the following error: ==11795== Invalid read of size 4 ==11795== at 0x496F592: dbus_message_iter_append_basic (dbus-message.c:2598) ==11795== by 0x117B39: append_interface (object.c:554) ==11795== by 0x48955E7: g_slist_foreach (gslist.c:840) ==11795== by 0x11923B: process_changes (object.c:592) ==11795== by 0x11956D: generic_unregister (object.c:980) ==11795== by 0x4973BAC: _dbus_object_tree_unregister_and_unlock (dbus-object-tree.c:516) ==11795== by 0x4965240: dbus_connection_unregister_object_path (dbus-connection.c:5776) ==11795== by 0x1178A5: object_path_unref (object.c:1219) ==11795== by 0x118517: g_dbus_unregister_interface (object.c:1344) ==11795== by 0x19AF5B: sap_exit (sap.c:385) ==11795== by 0x13E9E2: sap_server_register (server.c:1428) ==11795== by 0x13C092: sap_server_probe (manager.c:44) With this patch we don't send the InterfacesAdded signal, removing it from data->added while unregistering.
2012-11-26gdbus: Implement PropertiesChanged signalLucas De Marchi2-2/+109
2012-11-26gdbus: Simplify code for appending propertiesLuiz Augusto von Dentz1-32/+2
This reuse append_properties for GetAll and GetManagedObjects
2012-11-26gdbus: Integrates ObjectManager with Properties interfaceLuiz Augusto von Dentz1-1/+27
This appends the properties and its values when using ObjectManager.
2012-11-26gdbus: Only export ObjectManager interface on root pathLuiz Augusto von Dentz1-2/+15
ObjectManager should be exported only in the root path and list all the children paths.
2012-11-26gdbus: Group interface changes to reduce the amount of signals emittedLuiz Augusto von Dentz1-154/+208
InterfacesAdded and InterfacesRemoved can group all the interfaces changes together in one message.
2012-11-26gdbus: Add support for org.freedesktop.DBus.ObjectManager interfaceLuiz Augusto von Dentz1-10/+237
This implements initial support for ObjectManager, it automatically adds objects to its parents so no action is needed by daemons to get their objects managed by this interface. ObjectManager is part of D-Bus spec since revision 0.17: http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager
2012-11-26gdbus: Add properties into Introspectable interfaceLucas De Marchi1-0/+19
2012-11-26gdbus: Implement DBus.Properties.Set methodLucas De Marchi2-1/+157
Contrary to Get() and GetAll(), Set() is asynchronous so we pass an id to the setter so later it can declare the Set() as successful or otherwise.
2012-11-26gdbus: Implement DBus.Properties.GetAll methodLucas De Marchi1-1/+55
2012-11-26gdbus: Implement DBus.Properties.Get methodLucas De Marchi2-1/+69
2012-11-26gdbus: Add skeleton of DBus.Properties interfaceLucas De Marchi1-0/+46
This interface is responsible for handling properties of all objects in a given path. Right now it only registers itself, doing nothing useful. A conversion to this new layout will be done by subsequent patches. org.freedesktop.org.DBus.Properties spec can be found at http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties
2012-11-26gdbus: Use macros to add annotationsLucas De Marchi1-12/+28
Besides being more readable this way it avoids going over 80 chars.
2012-11-26gdbus: Move typedefs upLucas De Marchi1-18/+29
Move the typedefs up so they can be used by functions and callbacks.
2012-10-31gdbus: Fix not freeing list node by using g_slist_delete_linkLuiz Augusto von Dentz1-1/+1
g_slist_remove_link does not free the node which can cause leaks so replace that with g_slist_delete_link which does free memory properly.
2012-10-31gdbus: Refactor filter_data_find()Lucas De Marchi1-38/+5
Now this function is only used for searching the listeners of a connection and the other parameters are not needed anymore.
2012-10-31gdbus: Fix wrong signal handler matchLucas De Marchi1-21/+94
When we add a signal handler with g_dbus_add_signal_watch(), this function tries to multiplex the matches added in libdbus by checking if there's a previous filter_data with the same fields. However, if the field is NULL it accepts as being the same. The result is that the following watches will use the same filter data: watch1 = g_dbus_add_signal_watch(conn, BUS_NAME, NULL, iface, member, cb1, data1, NULL); watch2 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path2", iface, member, cb2, data2, NULL); watch3 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path3", iface, member, cb3, data3, NULL); The result is that when a signal arrives with path == "/path2", all 3 callbacks above will be called, with the same signal delivered to all of them. Another problem is that, if we invert the calls like below, only signals to cb1 will never be trigerred, nonetheless it used path == NULL. watch2 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path2", iface, member, cb2, data2, NULL); watch1 = g_dbus_add_signal_watch(conn, BUS_NAME, NULL, iface, member, cb1, data1, NULL); watch3 = g_dbus_add_signal_watch(conn, BUS_NAME, "/path3", iface, member, cb3, data3, NULL); This is fixed by not multiplexing the matchs with filter data if any of the fields are different, including being NULL. When a signal arrives, if a field is NULL we accept it as a match, but not when adding the signal handler.
2012-10-31gdbus: Fix crash when getting disconnected from the busJohan Hedberg1-4/+5
When getting disconnected from the bus sometimes (maybe always?) dbus_watch_handle() can cause the "info" context to be free'd meaning that we should not try to access it after the call. The only member we need access to is the connection pointer and as the code already has a ref() call for it it's only natural to solve the issue by adding a local variable not dependent on "info". The backtrace of the crash fixed looks as follows: Invalid read of size 8 at 0x121085: watch_func (mainloop.c:105) by 0x4C72694: g_main_context_dispatch (gmain.c:2539) by 0x4C729C7: g_main_context_iterate.isra.23 (gmain.c:3146) by 0x4C72DC1: g_main_loop_run (gmain.c:3340) by 0x120541: main (main.c:551) Address 0x5bbcd90 is 16 bytes inside a block of size 24 free'd at 0x4A079AE: free (vg_replace_malloc.c:427) by 0x4C7837E: g_free (gmem.c:252) by 0x4F708BF: dbus_watch_set_data (dbus-watch.c:614) by 0x4F70938: _dbus_watch_unref (dbus-watch.c:132) by 0x4F6E9A7: _dbus_transport_handle_watch (dbus-transport.c:884) by 0x4F59AFB: _dbus_connection_handle_watch (dbus-connection.c:1497) by 0x4F70AF9: dbus_watch_handle (dbus-watch.c:683) by 0x121084: watch_func (mainloop.c:103) by 0x4C72694: g_main_context_dispatch (gmain.c:2539) by 0x4C729C7: g_main_context_iterate.isra.23 (gmain.c:3146) by 0x4C72DC1: g_main_loop_run (gmain.c:3340) by 0x120541: main (main.c:551)
2012-08-27gdbus: Fix compilation error if macro "error" is definedJaganath Kanakkassery1-2/+2
The variable "signature" used in error is not defined and "args" is now a struct instead of a string.
2012-06-30gdbus: Fix removal of filter after last filter_dataLucas De Marchi1-9/+8
If there's a signal watch that's also watching for name (data->name_watch) currently we are trying to remove the message_filter twice since we may have the following call chain: filter_data_remove_callback() filter_data_free() g_dbus_remove_watch() filter_data_remove_callback() filter_data_free() dbus_connection_remove_filter() dbus_connection_remove_filter() Because of this we can't currently watch for signals passing the bus name. After this patch we don't have this issue anymore. We fix it by removing the filter before calling filter_data_free() if we are the last filter_data and thus avoid calling dbus_connection_remove_filter() twice.
2012-05-22gdbus: Fix incorrectly discarded signalsMikel Astiz1-7/+3
Signals with no arguments were incorrectly filtered out due to the NULL inequality check.
2012-05-20gdbus: do not check signature twiceLucas De Marchi1-5/+0
Message signature is already checked in generic_message(), so there's no need to check again in the callback.
2012-05-20gdbus: add Method.NoReply annotation in introspectionLucas De Marchi1-1/+6
2012-05-20gdbus: add Deprecated annotation in introspectionLucas De Marchi1-2/+17
2012-05-20gdbus: remove signature and reply from tablesLucas De Marchi2-61/+1
2012-05-20gdbus: loop over args to check message signatureLucas De Marchi1-7/+27
2012-05-20gdbus: use GDBusArgInfo to generate introspectionLucas De Marchi1-61/+14
By using GDBusArgInfo in methods and signals, the introspection generation is much simpler and we can add each argument name.
2012-05-20gdbus: add and use helpers for table declarationsLucas De Marchi2-1/+104
2012-05-20gdbus: add argument info to methods and signalsLucas De Marchi1-0/+8
2012-05-17gdbus: Constify introspection method tableMarcel Holtmann1-1/+1
2012-05-17gdbus: do not call memset for terminating NULLucas De Marchi1-1/+2
2012-05-17gdbus: return if method signature is malformedLucas De Marchi1-0/+4
2012-04-16gdbus: Remove unneeded NEED_DBUS_WATCH_GET_UNIX_FD checkMarcel Holtmann1-4/+0
2012-04-05gdbus: Use destroy callback for service watchAnderson Lizardo1-1/+1
Even though service watches accepted a "destroy" callback, they were being ignored. This fix properly pass them along so they are called when the watch is removed.
2012-04-05gdbus: Fix white space coding style issueSyam Sidhardhan1-1/+1
- corrected the space before '{'
2011-05-27gdbus: Remove unused result variable from g_dbus_pending_successSzymon Janc1-2/+1
2011-03-09gdbus: Unconditionally remove D-Bus timeoutsGrant Erickson1-3/+0
Address an issue in which the daemon incorrectly handles D-Bus main loop timeouts by only removing timeouts that are not enabled when D-Bus requests a timeout removal.
2011-01-19gdbus: Remove root node 'name' attribute in introspectionDaniel Wagner1-1/+1
generate_introspection_xml generates the root <node> tags with a 'name' attribute. This seems to be a valid attribute but it is not consistent with the way the D-Bus daemon generates empty nodes. For example if we register "/foo/bar", D-Bus daemon will generate for "/foo" a introspection which looks like this: <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> <node> <node name="bar"/> </node> and generate_introspection_xml generates for "/foo/bar": <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> <node name="/foo/bar"> </node> Just don't add the 'name' attribute to the root node. The GLib binding for D-Bus does it the same way.
2011-01-19gdbus: invaldate_parent_data: walk the whole path downDaniel Wagner1-3/+4
Assume there is only one object registerd at "/". If we add a new object at "/foo/bar" the introspection of "/" has to be updated. A new node has to be added at "/". invalidate_parent_data stops invaldating the whole path because the boolean return value of dbus_connection_get_object_path_data is used wrong. If we get a TRUE just go on down in the path, if FALSE is return dbus_connection_get_object_path_data has run out of memory.
2011-01-01gdbus: Update copyright informationMarcel Holtmann5-5/+5
2010-12-10gdbus: fix accessing freed callback dataJohan Hedberg1-5/+5
cb->disc_func or cb->conn_func could remove the callback so this needs to be checked for before continuing processing.