forked from enlightenment/efl
Rename edbus->eldbus
git grep -l edbus2 | while read f; do sed -i 's/edbus2/eldbus/g' "$f"; done find . -name '*edbus2*' -exec rename edbus2 eldbus {} \; git grep -l "EDBUS" | while read f; do sed -i 's/EDBUS/ELDBUS/g' "$f"; done git grep -l "EDBus" | while read f; do sed -i 's/EDBus/Eldbus/g' "$f"; done git grep -l "edbus (v2)" | while read f; do sed -i 's/edbus (v2)/eldbus/g' "$f"; done git grep -l "Edbus" | while read f; do sed -i 's/Edbus/Eldbus/g' "$f"; done git grep -l "edbus" | while read f; do sed -i 's/edbus/eldbus/g' "$f"; done find . -name '*edbus*' -exec rename edbus eldbus {} \; find . -name '*EDBus*' -exec rename EDBus Eldbus {} \;
This commit is contained in:
parent
4cf68bf728
commit
4e3804041f
|
@ -72,7 +72,7 @@ tags
|
|||
/src/bin/evas/evas_cserve2_usage
|
||||
/src/lib/eina/eina_config.h
|
||||
/src/lib/ecore_x/ecore_x_version.h
|
||||
/src/bin/edbus/edbus-codegen
|
||||
/src/bin/eldbus/eldbus-codegen
|
||||
/src/bin/efreet/efreet_desktop_cache_create
|
||||
/src/bin/efreet/efreet_icon_cache_create
|
||||
/src/bin/efreet/efreetd
|
||||
|
@ -202,15 +202,15 @@ tags
|
|||
/src/examples/ecore/ecore_file_download_example
|
||||
/src/examples/ecore/ecore_imf_example
|
||||
/src/examples/ecore/ecore_pipe_gstreamer_example
|
||||
/src/examples/edbus/banshee
|
||||
/src/examples/edbus/client
|
||||
/src/examples/edbus/complex-types
|
||||
/src/examples/edbus/complex-types-client-eina-value
|
||||
/src/examples/edbus/complex-types-server
|
||||
/src/examples/edbus/connman-list-services
|
||||
/src/examples/edbus/ofono-dial
|
||||
/src/examples/edbus/server
|
||||
/src/examples/edbus/simple-signal-emit
|
||||
/src/examples/eldbus/banshee
|
||||
/src/examples/eldbus/client
|
||||
/src/examples/eldbus/complex-types
|
||||
/src/examples/eldbus/complex-types-client-eina-value
|
||||
/src/examples/eldbus/complex-types-server
|
||||
/src/examples/eldbus/connman-list-services
|
||||
/src/examples/eldbus/ofono-dial
|
||||
/src/examples/eldbus/server
|
||||
/src/examples/eldbus/simple-signal-emit
|
||||
/src/examples/edje/edje-multisense
|
||||
/src/examples/edje/edje_example
|
||||
/src/examples/eet/eet_basic
|
||||
|
@ -298,9 +298,9 @@ tags
|
|||
/src/tests/efreet/efreet_user_dir
|
||||
/src/tests/emotion/emotion_test
|
||||
/src/tests/ecore/ecore_suite
|
||||
/src/tests/edbus/edbus_suite
|
||||
/src/tests/edbus/edbus_suite.log
|
||||
/src/tests/edbus/edbus_suite.trs
|
||||
/src/tests/eldbus/eldbus_suite
|
||||
/src/tests/eldbus/eldbus_suite.log
|
||||
/src/tests/eldbus/eldbus_suite.trs
|
||||
/src/tests/edje/edje_suite
|
||||
/src/tests/eet/eet_suite
|
||||
/src/tests/eeze/eeze_suite
|
||||
|
@ -322,7 +322,7 @@ tags
|
|||
/src/tests/evas/evas_suite.trs
|
||||
/src/test-suite.log
|
||||
/src/tests/ecore/check-results.xml
|
||||
/src/tests/edbus/check-results.xml
|
||||
/src/tests/eldbus/check-results.xml
|
||||
/src/tests/edje/check-results.xml
|
||||
/src/tests/eet/check-results.xml
|
||||
/src/tests/eeze/check-results.xml
|
||||
|
|
2
AUTHORS
2
AUTHORS
|
@ -215,7 +215,7 @@ Daniel Willmann <d.willmann@samsung.com>
|
|||
Jérémy Zurcher <jeremy@asynk.ch>
|
||||
|
||||
|
||||
EDBus
|
||||
Eldbus
|
||||
-----
|
||||
|
||||
Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
|
||||
|
|
2
COPYING
2
COPYING
|
@ -20,7 +20,7 @@ evas: licenses/COPYING.BSD
|
|||
embryo: licenses/COPYING.SMALL
|
||||
ecore: licenses/COPYING.BSD
|
||||
eio: licenses/COPYING.LGPL
|
||||
edbus: licenses/COPYING.LGPL
|
||||
eldbus: licenses/COPYING.LGPL
|
||||
efreet: licenses/COPYING.BSD
|
||||
eeze: licenses/COPYING.BSD
|
||||
ephysics: licenses/COPYING.BSD
|
||||
|
|
|
@ -92,7 +92,7 @@ old/NEWS.ethumb \
|
|||
old/NEWS.evas \
|
||||
old/NEWS.evil \
|
||||
old/README.ecore \
|
||||
old/README.edbus \
|
||||
old/README.eldbus \
|
||||
old/README.edje \
|
||||
old/README.eet \
|
||||
old/README.eeze \
|
||||
|
@ -136,7 +136,7 @@ pc/ecore-imf-evas.pc \
|
|||
pc/ecore-evas.pc \
|
||||
pc/embryo.pc \
|
||||
pc/eio.pc \
|
||||
pc/edbus2.pc \
|
||||
pc/eldbus.pc \
|
||||
pc/efreet.pc \
|
||||
pc/efreet-mime.pc \
|
||||
pc/efreet-trash.pc \
|
||||
|
|
28
configure.ac
28
configure.ac
|
@ -3124,8 +3124,8 @@ if test "x${want_eo_id}" = "xyes" ; then
|
|||
AC_DEFINE([HAVE_EO_ID], [1], [Have eo id])
|
||||
fi
|
||||
|
||||
#### EDBus
|
||||
EFL_LIB_START([EDBus])
|
||||
#### Eldbus
|
||||
EFL_LIB_START([Eldbus])
|
||||
|
||||
### Additional options to configure
|
||||
|
||||
|
@ -3134,16 +3134,16 @@ EFL_LIB_START([EDBus])
|
|||
### Checks for programs
|
||||
|
||||
## Compatibility layers
|
||||
EFL_PLATFORM_DEPEND([EDBUS], [evil])
|
||||
EFL_PLATFORM_DEPEND([ELDBUS], [evil])
|
||||
|
||||
### Checks for libraries
|
||||
EFL_INTERNAL_DEPEND_PKG([EDBUS], [ecore])
|
||||
EFL_INTERNAL_DEPEND_PKG([EDBUS], [eo])
|
||||
EFL_INTERNAL_DEPEND_PKG([EDBUS], [eina])
|
||||
EFL_INTERNAL_DEPEND_PKG([ELDBUS], [ecore])
|
||||
EFL_INTERNAL_DEPEND_PKG([ELDBUS], [eo])
|
||||
EFL_INTERNAL_DEPEND_PKG([ELDBUS], [eina])
|
||||
|
||||
EFL_DEPEND_PKG([EDBUS], [DBUS], [dbus-1])
|
||||
EFL_DEPEND_PKG([ELDBUS], [DBUS], [dbus-1])
|
||||
|
||||
EFL_EVAL_PKGS([EDBUS])
|
||||
EFL_EVAL_PKGS([ELDBUS])
|
||||
|
||||
### Checks for header files
|
||||
|
||||
|
@ -3157,8 +3157,8 @@ EFL_EVAL_PKGS([EDBUS])
|
|||
|
||||
### Checks for library functions
|
||||
|
||||
EFL_LIB_END([EDBus])
|
||||
#### End of EDBus
|
||||
EFL_LIB_END([Eldbus])
|
||||
#### End of Eldbus
|
||||
|
||||
|
||||
#### Efreet
|
||||
|
@ -3179,7 +3179,7 @@ EFL_PLATFORM_DEPEND([EFREET], [evil])
|
|||
EFL_INTERNAL_DEPEND_PKG([EFREET], [eet])
|
||||
EFL_INTERNAL_DEPEND_PKG([EFREET], [ecore])
|
||||
EFL_INTERNAL_DEPEND_PKG([EFREET], [ecore-file])
|
||||
EFL_INTERNAL_DEPEND_PKG([EFREET], [edbus])
|
||||
EFL_INTERNAL_DEPEND_PKG([EFREET], [eldbus])
|
||||
EFL_INTERNAL_DEPEND_PKG([EFREET], [eo])
|
||||
EFL_INTERNAL_DEPEND_PKG([EFREET], [eina])
|
||||
|
||||
|
@ -3611,7 +3611,7 @@ EFL_PLATFORM_DEPEND([ETHUMB_CLIENT], [evil])
|
|||
EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [eina])
|
||||
EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [eo])
|
||||
EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [ecore])
|
||||
EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [edbus])
|
||||
EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [eldbus])
|
||||
EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [ethumb])
|
||||
|
||||
EFL_EVAL_PKGS([ETHUMB_CLIENT])
|
||||
|
@ -3662,7 +3662,7 @@ src/examples/eo/Makefile
|
|||
src/examples/evas/Makefile
|
||||
src/examples/ecore/Makefile
|
||||
src/examples/eio/Makefile
|
||||
src/examples/edbus/Makefile
|
||||
src/examples/eldbus/Makefile
|
||||
src/examples/ephysics/Makefile
|
||||
src/examples/edje/Makefile
|
||||
src/examples/emotion/Makefile
|
||||
|
@ -3709,7 +3709,7 @@ pc/ecore-imf-evas.pc
|
|||
pc/ecore-audio.pc
|
||||
pc/embryo.pc
|
||||
pc/eio.pc
|
||||
pc/edbus2.pc
|
||||
pc/eldbus.pc
|
||||
pc/efreet.pc
|
||||
pc/efreet-mime.pc
|
||||
pc/efreet-trash.pc
|
||||
|
|
|
@ -601,7 +601,7 @@ INPUT = @top_srcdir@/src/lib \
|
|||
@srcdir@/evas_examples.dox \
|
||||
@srcdir@/eo_tutorial.dox \
|
||||
@srcdir@/eio_examples.dox \
|
||||
@srcdir@/edbus_examples.dox \
|
||||
@srcdir@/eldbus_examples.dox \
|
||||
@srcdir@/ephysics_examples.dox \
|
||||
@srcdir@/edje_examples.dox \
|
||||
@top_srcdir@/src/bin/edje/edje_cc_handlers.c \
|
||||
|
@ -815,7 +815,7 @@ evas_ _evas_ Evas_ _Evas_ EVAS_ _EVAS_ \
|
|||
eet_ _eet_ Eet_ _Eet_ EET_ _EET_ \
|
||||
ecore_ _ecore_ Ecore_ _Ecore_ ECORE_ _ECORE_ \
|
||||
eio_ _eio_ Eio_ _Eio_ EIO_ _EIO_ \
|
||||
edbus_ _edbus_ EDBus_ _EDBus_ EDBUS_ _EDBUS_ \
|
||||
eldbus_ _eldbus_ Eldbus_ _Eldbus_ ELDBUS_ _ELDBUS_ \
|
||||
efreet_ _efreet_ Efreet_ _Efreet_ EFREET_ _EFREET_ \
|
||||
eeze_ _eeze_ Eeze_ _Eeze_ EEZE_ _EEZE_ \
|
||||
ephysics_ _ephysics_ EPhysics_ _EPhysics_ EPHYSICS_ _EPHYSICS_ \
|
||||
|
|
|
@ -38,7 +38,7 @@ e.css \
|
|||
head.html \
|
||||
foot.html \
|
||||
ecore_examples.dox \
|
||||
edbus_examples.dox \
|
||||
eldbus_examples.dox \
|
||||
edje_examples.dox \
|
||||
eet_examples.dox \
|
||||
eina_examples.dox \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @page edbus_examples EDBus Examples
|
||||
* @page eldbus_examples Eldbus Examples
|
||||
*
|
||||
* Examples:
|
||||
* @li @ref banshee.c
|
|
@ -16,7 +16,7 @@
|
|||
* @li @ref escape_main playstation3 portability layer.
|
||||
* @li @ref evil_main microsoft windows portability layer.
|
||||
* @li @ref eio_main asynchronous input/output
|
||||
* @li @ref edbus_main d-bus integration.
|
||||
* @li @ref eldbus_main d-bus integration.
|
||||
* @li @ref efreet_main freedesktop.org (xdg) menu and desktop integration.
|
||||
* @li @ref eeze_main hardware device manipulation and notification.
|
||||
* @li @ref ephysics_main physics simulation integration and visual effects.
|
||||
|
@ -205,7 +205,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @defgroup EDBus
|
||||
* @defgroup Eldbus
|
||||
*
|
||||
* @brief D-Bus integration with EFL (Ecore).
|
||||
*/
|
||||
|
|
10
m4/efl.m4
10
m4/efl.m4
|
@ -137,9 +137,9 @@ depname="$2"
|
|||
libdirname="m4_defn([DOWNOTHER])"
|
||||
libname="m4_defn([DOWNOTHER])"
|
||||
case "m4_defn([DOWNOTHER])" in
|
||||
edbus)
|
||||
depname="edbus2"
|
||||
libname="edbus2"
|
||||
eldbus)
|
||||
depname="eldbus"
|
||||
libname="eldbus"
|
||||
;;
|
||||
ethumb_client)
|
||||
depname="ethumb_client"
|
||||
|
@ -357,8 +357,8 @@ m4_pushdef([UP], m4_translit([$1], [-a-z], [_A-Z]))dnl
|
|||
libdirname="m4_defn([DOWN])"
|
||||
libname="m4_defn([DOWN])"
|
||||
case "m4_defn([DOWN])" in
|
||||
edbus)
|
||||
libname="edbus2"
|
||||
eldbus)
|
||||
libname="eldbus"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
2012-12-03 Gustavo Sverzut Barbieri (k-s)
|
||||
|
||||
* port to edbus (v2)
|
||||
* port to eldbus
|
||||
|
||||
2012-04-26 Carsten Haitzler (The Rasterman)
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ Changes since Ethumb 1.7.0:
|
|||
|
||||
Additions:
|
||||
|
||||
- Port to edbus (v2), added new dependency.
|
||||
- Port to eldbus, added new dependency.
|
||||
|
||||
Fixes:
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
ABOUT:
|
||||
-----
|
||||
|
||||
EDBus provides easy access to D-Bus from EFL applications.
|
||||
Eldbus provides easy access to D-Bus from EFL applications.
|
||||
|
||||
EDBus allows connecting to both system and session buses acting as
|
||||
Eldbus allows connecting to both system and session buses acting as
|
||||
both client and service roles.
|
||||
|
||||
Many official D-Bus specifications and interfaces are supported, namely:
|
||||
|
@ -14,8 +14,8 @@ Many official D-Bus specifications and interfaces are supported, namely:
|
|||
- org.freedesktop.DBus.ObjectManager: partial support (under dev).
|
||||
|
||||
One can create client-side objects using the low-level methods from
|
||||
EDBus_Connection and EDBus_Object, or go high level with
|
||||
EDBus_Proxy.
|
||||
Eldbus_Connection and Eldbus_Object, or go high level with
|
||||
Eldbus_Proxy.
|
||||
|
||||
|
||||
RELATION TO OLD E_DBUS:
|
|
@ -1,13 +0,0 @@
|
|||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: edbus
|
||||
Description: D-Bus access from Ecore
|
||||
Requires.private: @requirements_pc_edbus@
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -ledbus2
|
||||
Libs.private: @requirements_libs_edbus@
|
||||
Cflags: -I${includedir}/edbus-@VMAJ@
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: eldbus
|
||||
Description: D-Bus access from Ecore
|
||||
Requires.private: @requirements_pc_eldbus@
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -leldbus
|
||||
Libs.private: @requirements_libs_eldbus@
|
||||
Cflags: -I${includedir}/eldbus-@VMAJ@
|
||||
|
|
@ -42,7 +42,7 @@ include Makefile_Ecore_Evas.am
|
|||
include Makefile_Ecore_Audio.am
|
||||
include Makefile_Embryo.am
|
||||
include Makefile_Eio.am
|
||||
include Makefile_EDBus.am
|
||||
include Makefile_Eldbus.am
|
||||
include Makefile_Efreet.am
|
||||
include Makefile_Eeze.am
|
||||
include Makefile_EPhysics.am
|
||||
|
@ -71,7 +71,7 @@ examples/eet \
|
|||
examples/evas \
|
||||
examples/ecore \
|
||||
examples/eio \
|
||||
examples/edbus \
|
||||
examples/eldbus \
|
||||
examples/ephysics \
|
||||
examples/edje \
|
||||
examples/emotion \
|
||||
|
|
|
@ -1,85 +0,0 @@
|
|||
|
||||
### Library
|
||||
|
||||
lib_LTLIBRARIES += lib/edbus/libedbus2.la
|
||||
|
||||
installed_edbusmainheadersdir = $(includedir)/edbus-@VMAJ@
|
||||
dist_installed_edbusmainheaders_DATA = \
|
||||
lib/edbus/EDBus.h \
|
||||
lib/edbus/edbus_connection.h \
|
||||
lib/edbus/edbus_freedesktop.h \
|
||||
lib/edbus/edbus_message.h \
|
||||
lib/edbus/edbus_object.h \
|
||||
lib/edbus/edbus_pending.h \
|
||||
lib/edbus/edbus_proxy.h \
|
||||
lib/edbus/edbus_service.h \
|
||||
lib/edbus/edbus_signal_handler.h \
|
||||
lib/edbus/edbus_message_helper.h \
|
||||
lib/edbus/edbus_message_eina_value.h
|
||||
|
||||
lib_edbus_libedbus2_la_SOURCES = \
|
||||
lib/edbus/edbus_private.h \
|
||||
lib/edbus/edbus_private_types.h \
|
||||
lib/edbus/edbus_proxy.c \
|
||||
lib/edbus/edbus_core.c \
|
||||
lib/edbus/edbus_message.c \
|
||||
lib/edbus/edbus_object.c \
|
||||
lib/edbus/edbus_pending.c \
|
||||
lib/edbus/edbus_freedesktop.c \
|
||||
lib/edbus/edbus_service.c \
|
||||
lib/edbus/edbus_signal_handler.c \
|
||||
lib/edbus/edbus_message_helper.c \
|
||||
lib/edbus/edbus_message_to_eina_value.c \
|
||||
lib/edbus/edbus_message_from_eina_value.c
|
||||
|
||||
lib_edbus_libedbus2_la_CPPFLAGS = \
|
||||
-include $(top_builddir)/config.h \
|
||||
@EDBUS_CFLAGS@
|
||||
lib_edbus_libedbus2_la_LIBADD = @EDBUS_LIBS@
|
||||
lib_edbus_libedbus2_la_DEPENDENCIES = @EDBUS_INTERNAL_LIBS@
|
||||
lib_edbus_libedbus2_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
|
||||
|
||||
### Binary
|
||||
|
||||
bin_PROGRAMS += bin/edbus/edbus-codegen
|
||||
|
||||
bin_edbus_edbus_codegen_SOURCES = \
|
||||
bin/edbus/codegen.h \
|
||||
bin/edbus/utils.c \
|
||||
bin/edbus/parser.c \
|
||||
bin/edbus/dbus.c \
|
||||
bin/edbus/source_client.c \
|
||||
bin/edbus/client.c
|
||||
|
||||
bin_edbus_edbus_codegen_CPPFLAGS = \
|
||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
||||
-DPACKAGE_DATA_DIR=\"$(datadir)/edbus\" \
|
||||
@EDBUS_CFLAGS@
|
||||
|
||||
if HAVE_WIN32
|
||||
bin_edbus_edbus_codegen_LDADD = -L$(top_builddir)/src/lib/evil @USE_EDBUS_LIBS@
|
||||
else
|
||||
bin_edbus_edbus_codegen_LDADD = @USE_EDBUS_LIBS@
|
||||
endif
|
||||
bin_edbus_edbus_codegen_DEPENDENCIES = @USE_EDBUS_INTERNAL_LIBS@
|
||||
|
||||
### Unit tests
|
||||
|
||||
if EFL_ENABLE_TESTS
|
||||
|
||||
check_PROGRAMS += tests/edbus/edbus_suite
|
||||
TESTS += tests/edbus/edbus_suite
|
||||
|
||||
tests_edbus_edbus_suite_SOURCES = \
|
||||
tests/edbus/edbus_suite.c \
|
||||
tests/edbus/edbus_test_edbus_init.c \
|
||||
tests/edbus/edbus_suite.h
|
||||
|
||||
tests_edbus_edbus_suite_CPPFLAGS = @CHECK_CFLAGS@ @EDBUS_CFLAGS@ \
|
||||
-DTESTS_BUILD_DIR=\"$(top_builddir)/src/tests/edbus\"
|
||||
|
||||
tests_edbus_edbus_suite_LDADD = @CHECK_LIBS@ @USE_EDBUS_LIBS@
|
||||
tests_edbus_edbus_suite_DEPENDENCIES = @USE_EDBUS_INTERNAL_LIBS@
|
||||
|
||||
endif
|
|
@ -0,0 +1,85 @@
|
|||
|
||||
### Library
|
||||
|
||||
lib_LTLIBRARIES += lib/eldbus/libeldbus.la
|
||||
|
||||
installed_eldbusmainheadersdir = $(includedir)/eldbus-@VMAJ@
|
||||
dist_installed_eldbusmainheaders_DATA = \
|
||||
lib/eldbus/Eldbus.h \
|
||||
lib/eldbus/eldbus_connection.h \
|
||||
lib/eldbus/eldbus_freedesktop.h \
|
||||
lib/eldbus/eldbus_message.h \
|
||||
lib/eldbus/eldbus_object.h \
|
||||
lib/eldbus/eldbus_pending.h \
|
||||
lib/eldbus/eldbus_proxy.h \
|
||||
lib/eldbus/eldbus_service.h \
|
||||
lib/eldbus/eldbus_signal_handler.h \
|
||||
lib/eldbus/eldbus_message_helper.h \
|
||||
lib/eldbus/eldbus_message_eina_value.h
|
||||
|
||||
lib_eldbus_libeldbus_la_SOURCES = \
|
||||
lib/eldbus/eldbus_private.h \
|
||||
lib/eldbus/eldbus_private_types.h \
|
||||
lib/eldbus/eldbus_proxy.c \
|
||||
lib/eldbus/eldbus_core.c \
|
||||
lib/eldbus/eldbus_message.c \
|
||||
lib/eldbus/eldbus_object.c \
|
||||
lib/eldbus/eldbus_pending.c \
|
||||
lib/eldbus/eldbus_freedesktop.c \
|
||||
lib/eldbus/eldbus_service.c \
|
||||
lib/eldbus/eldbus_signal_handler.c \
|
||||
lib/eldbus/eldbus_message_helper.c \
|
||||
lib/eldbus/eldbus_message_to_eina_value.c \
|
||||
lib/eldbus/eldbus_message_from_eina_value.c
|
||||
|
||||
lib_eldbus_libeldbus_la_CPPFLAGS = \
|
||||
-include $(top_builddir)/config.h \
|
||||
@ELDBUS_CFLAGS@
|
||||
lib_eldbus_libeldbus_la_LIBADD = @ELDBUS_LIBS@
|
||||
lib_eldbus_libeldbus_la_DEPENDENCIES = @ELDBUS_INTERNAL_LIBS@
|
||||
lib_eldbus_libeldbus_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
|
||||
|
||||
### Binary
|
||||
|
||||
bin_PROGRAMS += bin/eldbus/eldbus-codegen
|
||||
|
||||
bin_eldbus_eldbus_codegen_SOURCES = \
|
||||
bin/eldbus/codegen.h \
|
||||
bin/eldbus/utils.c \
|
||||
bin/eldbus/parser.c \
|
||||
bin/eldbus/dbus.c \
|
||||
bin/eldbus/source_client.c \
|
||||
bin/eldbus/client.c
|
||||
|
||||
bin_eldbus_eldbus_codegen_CPPFLAGS = \
|
||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
||||
-DPACKAGE_DATA_DIR=\"$(datadir)/eldbus\" \
|
||||
@ELDBUS_CFLAGS@
|
||||
|
||||
if HAVE_WIN32
|
||||
bin_eldbus_eldbus_codegen_LDADD = -L$(top_builddir)/src/lib/evil @USE_ELDBUS_LIBS@
|
||||
else
|
||||
bin_eldbus_eldbus_codegen_LDADD = @USE_ELDBUS_LIBS@
|
||||
endif
|
||||
bin_eldbus_eldbus_codegen_DEPENDENCIES = @USE_ELDBUS_INTERNAL_LIBS@
|
||||
|
||||
### Unit tests
|
||||
|
||||
if EFL_ENABLE_TESTS
|
||||
|
||||
check_PROGRAMS += tests/eldbus/eldbus_suite
|
||||
TESTS += tests/eldbus/eldbus_suite
|
||||
|
||||
tests_eldbus_eldbus_suite_SOURCES = \
|
||||
tests/eldbus/eldbus_suite.c \
|
||||
tests/eldbus/eldbus_test_eldbus_init.c \
|
||||
tests/eldbus/eldbus_suite.h
|
||||
|
||||
tests_eldbus_eldbus_suite_CPPFLAGS = @CHECK_CFLAGS@ @ELDBUS_CFLAGS@ \
|
||||
-DTESTS_BUILD_DIR=\"$(top_builddir)/src/tests/eldbus\"
|
||||
|
||||
tests_eldbus_eldbus_suite_LDADD = @CHECK_LIBS@ @USE_ELDBUS_LIBS@
|
||||
tests_eldbus_eldbus_suite_DEPENDENCIES = @USE_ELDBUS_INTERNAL_LIBS@
|
||||
|
||||
endif
|
|
@ -3,7 +3,7 @@
|
|||
#endif
|
||||
|
||||
#include <Ecore.h>
|
||||
#include <EDBus.h>
|
||||
#include <Eldbus.h>
|
||||
|
||||
#include "efreetd.h"
|
||||
#include "efreetd_cache.h"
|
||||
|
@ -19,8 +19,8 @@ enum
|
|||
EFREET_SIGNAL_DESKTOP_CACHE_UPDATE
|
||||
};
|
||||
|
||||
static EDBus_Connection *conn;
|
||||
static EDBus_Service_Interface *iface;
|
||||
static Eldbus_Connection *conn;
|
||||
static Eldbus_Service_Interface *iface;
|
||||
|
||||
static Ecore_Timer *_shutdown = NULL;
|
||||
static int clients = 0;
|
||||
|
@ -33,7 +33,7 @@ do_shutdown(void *data EINA_UNUSED)
|
|||
}
|
||||
|
||||
static void
|
||||
disconnected(void *context EINA_UNUSED, EDBus_Connection *connection EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
disconnected(void *context EINA_UNUSED, Eldbus_Connection *connection EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
INF("disconnected");
|
||||
quit();
|
||||
|
@ -44,7 +44,7 @@ client_name_owner_changed_cb(void *data EINA_UNUSED, const char *bus, const char
|
|||
{
|
||||
if (new_id[0])
|
||||
return;
|
||||
edbus_name_owner_changed_callback_del(conn, bus,
|
||||
eldbus_name_owner_changed_callback_del(conn, bus,
|
||||
client_name_owner_changed_cb, NULL);
|
||||
clients--;
|
||||
if (clients <= 0)
|
||||
|
@ -55,13 +55,13 @@ client_name_owner_changed_cb(void *data EINA_UNUSED, const char *bus, const char
|
|||
}
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
do_register(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Message *message)
|
||||
static Eldbus_Message *
|
||||
do_register(const Eldbus_Service_Interface *ifc EINA_UNUSED, const Eldbus_Message *message)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
Eldbus_Message *reply;
|
||||
const char *lang;
|
||||
|
||||
if (!edbus_message_arguments_get(message, "s", &lang))
|
||||
if (!eldbus_message_arguments_get(message, "s", &lang))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
return NULL;
|
||||
|
@ -72,28 +72,28 @@ do_register(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Message
|
|||
if (_shutdown) ecore_timer_del(_shutdown);
|
||||
_shutdown = NULL;
|
||||
|
||||
edbus_name_owner_changed_callback_add(conn,
|
||||
edbus_message_sender_get(message),
|
||||
eldbus_name_owner_changed_callback_add(conn,
|
||||
eldbus_message_sender_get(message),
|
||||
client_name_owner_changed_cb, NULL,
|
||||
EINA_FALSE);
|
||||
reply = edbus_message_method_return_new(message);
|
||||
edbus_message_arguments_append(reply, "b", cache_desktop_exists());
|
||||
reply = eldbus_message_method_return_new(message);
|
||||
eldbus_message_arguments_append(reply, "b", cache_desktop_exists());
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
add_desktop_dirs(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Message *message)
|
||||
static Eldbus_Message *
|
||||
add_desktop_dirs(const Eldbus_Service_Interface *ifc EINA_UNUSED, const Eldbus_Message *message)
|
||||
{
|
||||
EDBus_Message_Iter *array = NULL;
|
||||
Eldbus_Message_Iter *array = NULL;
|
||||
const char *dir;
|
||||
|
||||
if (!edbus_message_arguments_get(message, "as", &array))
|
||||
if (!eldbus_message_arguments_get(message, "as", &array))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 's', &dir))
|
||||
while (eldbus_message_iter_get_and_next(array, 's', &dir))
|
||||
{
|
||||
cache_desktop_dir_add(dir);
|
||||
}
|
||||
|
@ -101,19 +101,19 @@ add_desktop_dirs(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Mes
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
add_icon_dirs(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Message *message)
|
||||
static Eldbus_Message *
|
||||
add_icon_dirs(const Eldbus_Service_Interface *ifc EINA_UNUSED, const Eldbus_Message *message)
|
||||
{
|
||||
EDBus_Message_Iter *array = NULL;
|
||||
Eldbus_Message_Iter *array = NULL;
|
||||
const char *dir;
|
||||
|
||||
if (!edbus_message_arguments_get(message, "as", &array))
|
||||
if (!eldbus_message_arguments_get(message, "as", &array))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 's', &dir))
|
||||
while (eldbus_message_iter_get_and_next(array, 's', &dir))
|
||||
{
|
||||
cache_icon_dir_add(dir);
|
||||
}
|
||||
|
@ -121,12 +121,12 @@ add_icon_dirs(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Messag
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
build_desktop_cache(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Message *message EINA_UNUSED)
|
||||
static Eldbus_Message *
|
||||
build_desktop_cache(const Eldbus_Service_Interface *ifc EINA_UNUSED, const Eldbus_Message *message EINA_UNUSED)
|
||||
{
|
||||
const char *lang;
|
||||
|
||||
if (!edbus_message_arguments_get(message, "s", &lang))
|
||||
if (!eldbus_message_arguments_get(message, "s", &lang))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
return NULL;
|
||||
|
@ -137,19 +137,19 @@ build_desktop_cache(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
add_icon_exts(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Message *message)
|
||||
static Eldbus_Message *
|
||||
add_icon_exts(const Eldbus_Service_Interface *ifc EINA_UNUSED, const Eldbus_Message *message)
|
||||
{
|
||||
EDBus_Message_Iter *array = NULL;
|
||||
Eldbus_Message_Iter *array = NULL;
|
||||
const char *ext;
|
||||
|
||||
if (!edbus_message_arguments_get(message, "as", &array))
|
||||
if (!eldbus_message_arguments_get(message, "as", &array))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 's', &ext))
|
||||
while (eldbus_message_iter_get_and_next(array, 's', &ext))
|
||||
{
|
||||
cache_icon_ext_add(ext);
|
||||
}
|
||||
|
@ -157,60 +157,60 @@ add_icon_exts(const EDBus_Service_Interface *ifc EINA_UNUSED, const EDBus_Messag
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static const EDBus_Signal signals[] = {
|
||||
[EFREET_SIGNAL_ICON_CACHE_UPDATE] = {"IconCacheUpdate", EDBUS_ARGS({ "b", "update" }), 0},
|
||||
[EFREET_SIGNAL_DESKTOP_CACHE_UPDATE] = {"DesktopCacheUpdate", EDBUS_ARGS({ "b", "update" }), 0},
|
||||
static const Eldbus_Signal signals[] = {
|
||||
[EFREET_SIGNAL_ICON_CACHE_UPDATE] = {"IconCacheUpdate", ELDBUS_ARGS({ "b", "update" }), 0},
|
||||
[EFREET_SIGNAL_DESKTOP_CACHE_UPDATE] = {"DesktopCacheUpdate", ELDBUS_ARGS({ "b", "update" }), 0},
|
||||
{ NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
static const EDBus_Method methods[] = {
|
||||
static const Eldbus_Method methods[] = {
|
||||
{
|
||||
"Register", EDBUS_ARGS({"s", "lang info"}), EDBUS_ARGS({"b", "cache exists"}),
|
||||
"Register", ELDBUS_ARGS({"s", "lang info"}), ELDBUS_ARGS({"b", "cache exists"}),
|
||||
do_register, 0
|
||||
},
|
||||
{
|
||||
"AddDesktopDirs", EDBUS_ARGS({"as", "dirs"}), NULL,
|
||||
add_desktop_dirs, EDBUS_METHOD_FLAG_NOREPLY
|
||||
"AddDesktopDirs", ELDBUS_ARGS({"as", "dirs"}), NULL,
|
||||
add_desktop_dirs, ELDBUS_METHOD_FLAG_NOREPLY
|
||||
},
|
||||
{
|
||||
"BuildDesktopCache", EDBUS_ARGS({"s", "lang info"}), NULL,
|
||||
build_desktop_cache, EDBUS_METHOD_FLAG_NOREPLY
|
||||
"BuildDesktopCache", ELDBUS_ARGS({"s", "lang info"}), NULL,
|
||||
build_desktop_cache, ELDBUS_METHOD_FLAG_NOREPLY
|
||||
},
|
||||
{
|
||||
"AddIconDirs", EDBUS_ARGS({"as", "dirs"}), NULL,
|
||||
add_icon_dirs, EDBUS_METHOD_FLAG_NOREPLY
|
||||
"AddIconDirs", ELDBUS_ARGS({"as", "dirs"}), NULL,
|
||||
add_icon_dirs, ELDBUS_METHOD_FLAG_NOREPLY
|
||||
},
|
||||
{
|
||||
"AddIconExts", EDBUS_ARGS({"as", "exts"}), NULL,
|
||||
add_icon_exts, EDBUS_METHOD_FLAG_NOREPLY
|
||||
"AddIconExts", ELDBUS_ARGS({"as", "exts"}), NULL,
|
||||
add_icon_exts, ELDBUS_METHOD_FLAG_NOREPLY
|
||||
},
|
||||
{ NULL, NULL, NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
static const EDBus_Service_Interface_Desc desc = {
|
||||
static const Eldbus_Service_Interface_Desc desc = {
|
||||
INTERFACE, methods, signals, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
static void
|
||||
on_name_request(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
on_name_request(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
unsigned int reply;
|
||||
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
ERR("error on on_name_request");
|
||||
quit();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "u", &reply))
|
||||
if (!eldbus_message_arguments_get(msg, "u", &reply))
|
||||
{
|
||||
ERR("error getting arguments on on_name_request");
|
||||
quit();
|
||||
return;
|
||||
}
|
||||
|
||||
if (reply != EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
|
||||
if (reply != ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
|
||||
{
|
||||
ERR("error name already in use");
|
||||
quit();
|
||||
|
@ -223,40 +223,40 @@ on_name_request(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
void
|
||||
send_signal_icon_cache_update(Eina_Bool update)
|
||||
{
|
||||
edbus_service_signal_emit(iface, EFREET_SIGNAL_ICON_CACHE_UPDATE, update);
|
||||
eldbus_service_signal_emit(iface, EFREET_SIGNAL_ICON_CACHE_UPDATE, update);
|
||||
}
|
||||
|
||||
void
|
||||
send_signal_desktop_cache_update(Eina_Bool update)
|
||||
{
|
||||
edbus_service_signal_emit(iface, EFREET_SIGNAL_DESKTOP_CACHE_UPDATE, update);
|
||||
eldbus_service_signal_emit(iface, EFREET_SIGNAL_DESKTOP_CACHE_UPDATE, update);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
dbus_init(void)
|
||||
{
|
||||
if (!edbus_init()) return EINA_FALSE;
|
||||
if (!eldbus_init()) return EINA_FALSE;
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
if (!conn) goto conn_error;
|
||||
|
||||
edbus_connection_event_callback_add(conn,
|
||||
EDBUS_CONNECTION_EVENT_DISCONNECTED, disconnected, NULL);
|
||||
iface = edbus_service_interface_register(conn, PATH, &desc);
|
||||
edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
|
||||
eldbus_connection_event_callback_add(conn,
|
||||
ELDBUS_CONNECTION_EVENT_DISCONNECTED, disconnected, NULL);
|
||||
iface = eldbus_service_interface_register(conn, PATH, &desc);
|
||||
eldbus_name_request(conn, BUS, ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
|
||||
on_name_request, NULL);
|
||||
|
||||
return EINA_TRUE;
|
||||
conn_error:
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
dbus_shutdown(void)
|
||||
{
|
||||
edbus_connection_unref(conn);
|
||||
edbus_shutdown();
|
||||
eldbus_connection_unref(conn);
|
||||
eldbus_shutdown();
|
||||
return EINA_TRUE;
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "codegen.h"
|
||||
|
||||
static const Ecore_Getopt optdesc = {
|
||||
"edbus_codegen",
|
||||
"eldbus_codegen",
|
||||
"%prog [options] <file.xml>",
|
||||
"1.0",
|
||||
"(C) 2012 - The Enlightenment Project",
|
|
@ -51,7 +51,7 @@ dbus_type2c_type2(const char *dbus_type, Eina_Bool with_const)
|
|||
case 'v'://variant
|
||||
case '{'://dict
|
||||
case '('://struct
|
||||
return "EDBus_Message_Iter *";
|
||||
return "Eldbus_Message_Iter *";
|
||||
default:
|
||||
{
|
||||
printf("Error type not handled: %c\n", dbus_type[0]);
|
||||
|
@ -81,39 +81,39 @@ source_client_complex_method_call_generate(const DBus_Method *method, Eina_Strbu
|
|||
|
||||
if (method->no_reply)
|
||||
{
|
||||
eina_strbuf_append_printf(h, "void %s_call(EDBus_Proxy *proxy, Eina_Value *args);\n", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(h, "void %s_call(Eldbus_Proxy *proxy, Eina_Value *args);\n", prefix_append(method->c_name));
|
||||
|
||||
eina_strbuf_append_printf(c_code, "\nvoid \n%s_call(EDBus_Proxy *proxy, Eina_Value *args)\n{\n", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, "\nvoid \n%s_call(Eldbus_Proxy *proxy, Eina_Value *args)\n{\n", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, " EINA_SAFETY_ON_NULL_RETURN(proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Message *msg = edbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_from_eina_value(\"%s\", msg, args))\n", eina_strbuf_string_get(full_signature));
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Message *msg = eldbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_from_eina_value(\"%s\", msg, args))\n", eina_strbuf_string_get(full_signature));
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " ERR(\"Error: Filling message from eina value.\");\n");
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_proxy_send(proxy, msg, %s, NULL, NULL, -1);\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " eldbus_proxy_send(proxy, msg, %s, NULL, NULL, -1);\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
eina_strbuf_append_printf(h, "EDBus_Pending *%s_call", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(h, "(EDBus_Proxy *proxy, %s cb, const void *data, Eina_Value *args);\n", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(h, "Eldbus_Pending *%s_call", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(h, "(Eldbus_Proxy *proxy, %s cb, const void *data, Eina_Value *args);\n", prefix_append(method->function_cb));
|
||||
|
||||
eina_strbuf_append_printf(c_code, "\nEDBus_Pending *\n%s_call(", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, "EDBus_Proxy *proxy, %s cb, const void *data, Eina_Value *args)\n{\n", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Message *msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, "\nEldbus_Pending *\n%s_call(", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, "Eldbus_Proxy *proxy, %s cb, const void *data, Eina_Value *args)\n{\n", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Message *msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, " EINA_SAFETY_ON_NULL_RETURN_VAL(proxy, NULL);\n");
|
||||
eina_strbuf_append_printf(c_code, " msg = edbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_from_eina_value(\"%s\", msg, args))\n", eina_strbuf_string_get(full_signature));
|
||||
eina_strbuf_append_printf(c_code, " msg = eldbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_from_eina_value(\"%s\", msg, args))\n", eina_strbuf_string_get(full_signature));
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " ERR(\"Error: Filling message from eina value.\");\n");
|
||||
eina_strbuf_append_printf(c_code, " return NULL;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
eina_strbuf_append_printf(c_code, " p = edbus_proxy_send(proxy, msg, %s, cb, -1);\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " p = eldbus_proxy_send(proxy, msg, %s, cb, -1);\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " if (data)\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " return p;\n");
|
||||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
|
||||
|
@ -128,8 +128,8 @@ source_client_simple_method_call_no_reply_generate(const DBus_Method *method, Ei
|
|||
Eina_Strbuf *full_signature = eina_strbuf_new();
|
||||
Eina_Strbuf *args_call = eina_strbuf_new();
|
||||
|
||||
eina_strbuf_append_printf(h, "void %s_call(EDBus_Proxy *proxy", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, "\nvoid\n%s_call(EDBus_Proxy *proxy", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(h, "void %s_call(Eldbus_Proxy *proxy", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, "\nvoid\n%s_call(Eldbus_Proxy *proxy", prefix_append(method->c_name));
|
||||
|
||||
EINA_INLIST_FOREACH(method->args, arg)
|
||||
{
|
||||
|
@ -143,15 +143,15 @@ source_client_simple_method_call_no_reply_generate(const DBus_Method *method, Ei
|
|||
eina_strbuf_append_printf(h, ");\n");
|
||||
eina_strbuf_append_printf(c_code, ")\n{\n");
|
||||
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Message *msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Message *msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " EINA_SAFETY_ON_NULL_RETURN(proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " msg = edbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_arguments_append(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(args_call));
|
||||
eina_strbuf_append_printf(c_code, " msg = eldbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_arguments_append(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(args_call));
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " ERR(\"Error: Filling message.\");\n");
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_proxy_send(proxy, msg, NULL, NULL, -1);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_proxy_send(proxy, msg, NULL, NULL, -1);\n");
|
||||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
|
||||
eina_strbuf_free(full_signature);
|
||||
|
@ -165,10 +165,10 @@ source_client_simple_method_call_generate(const DBus_Method *method, Eina_Strbuf
|
|||
Eina_Strbuf *full_signature = eina_strbuf_new();
|
||||
Eina_Strbuf *args_call = eina_strbuf_new();
|
||||
|
||||
eina_strbuf_append_printf(h, "EDBus_Pending *%s_call", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(h, "(EDBus_Proxy *proxy, %s cb, const void *data", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(c_code, "\nEDBus_Pending *\n%s_call", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, "(EDBus_Proxy *proxy, %s cb, const void *data", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(h, "Eldbus_Pending *%s_call", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(h, "(Eldbus_Proxy *proxy, %s cb, const void *data", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(c_code, "\nEldbus_Pending *\n%s_call", prefix_append(method->c_name));
|
||||
eina_strbuf_append_printf(c_code, "(Eldbus_Proxy *proxy, %s cb, const void *data", prefix_append(method->function_cb));
|
||||
|
||||
EINA_INLIST_FOREACH(method->args, arg)
|
||||
{
|
||||
|
@ -182,19 +182,19 @@ source_client_simple_method_call_generate(const DBus_Method *method, Eina_Strbuf
|
|||
eina_strbuf_append_printf(h, ");\n");
|
||||
eina_strbuf_append_printf(c_code,")\n{\n");
|
||||
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Message *msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Message *msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, " EINA_SAFETY_ON_NULL_RETURN_VAL(proxy, NULL);\n");
|
||||
eina_strbuf_append_printf(c_code, " msg = edbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_arguments_append(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(args_call));
|
||||
eina_strbuf_append_printf(c_code, " msg = eldbus_proxy_method_call_new(proxy, \"%s\");\n", method->name);
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_arguments_append(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(args_call));
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " ERR(\"Error: Filling message.\");\n");
|
||||
eina_strbuf_append_printf(c_code, " return NULL;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
eina_strbuf_append_printf(c_code, " p = edbus_proxy_send(proxy, msg, %s, cb, -1);\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " p = eldbus_proxy_send(proxy, msg, %s, cb, -1);\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " if (data)\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " return p;\n");
|
||||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
|
||||
|
@ -205,21 +205,21 @@ source_client_simple_method_call_generate(const DBus_Method *method, Eina_Strbuf
|
|||
static void
|
||||
source_client_complex_method_callback_generate(const DBus_Method *method, Eina_Strbuf *c_code, Eina_Strbuf *h)
|
||||
{
|
||||
eina_strbuf_append_printf(h, "typedef void (*%s)(EDBus_Proxy *proxy, void *data, EDBus_Pending *pending, EDBus_Error_Info *error, Eina_Value *args);\n", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(h, "typedef void (*%s)(Eldbus_Proxy *proxy, void *data, Eldbus_Pending *pending, Eldbus_Error_Info *error, Eina_Value *args);\n", prefix_append(method->function_cb));
|
||||
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const EDBus_Message *msg, EDBus_Pending *pending)\n{\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = edbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)\n{\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = eldbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, " %s cb = data;\n", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(c_code, " const char *error, *error_msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " Eina_Value *value;\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Proxy *proxy = edbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
eina_strbuf_append_printf(c_code, " if (edbus_message_error_get(msg, &error, &error_msg))\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
eina_strbuf_append_printf(c_code, " if (eldbus_message_error_get(msg, &error, &error_msg))\n");
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Error_Info error_info = {error, error_msg};\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Error_Info error_info = {error, error_msg};\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(proxy, user_data, pending, &error_info, NULL);\n");
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
eina_strbuf_append_printf(c_code, " value = edbus_message_to_eina_value(msg);\n");
|
||||
eina_strbuf_append_printf(c_code, " value = eldbus_message_to_eina_value(msg);\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(proxy, user_data, pending, NULL, value);\n");
|
||||
eina_strbuf_append_printf(c_code, " eina_value_free(value);\n");
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
|
@ -234,13 +234,13 @@ source_client_simple_method_callback_generate(const DBus_Method *method, Eina_St
|
|||
Eina_Strbuf *end_cb = eina_strbuf_new();
|
||||
Eina_Strbuf *arguments_get = eina_strbuf_new();
|
||||
|
||||
eina_strbuf_append_printf(h, "typedef void (*%s)(EDBus_Proxy *proxy, void *data, EDBus_Pending *pending, EDBus_Error_Info *error", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(h, "typedef void (*%s)(Eldbus_Proxy *proxy, void *data, Eldbus_Pending *pending, Eldbus_Error_Info *error", prefix_append(method->function_cb));
|
||||
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const EDBus_Message *msg, EDBus_Pending *pending)\n{\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = edbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)\n{\n", method->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = eldbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, " %s cb = data;\n", prefix_append(method->function_cb));
|
||||
eina_strbuf_append_printf(c_code, " const char *error, *error_msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Proxy *proxy = edbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
|
||||
EINA_INLIST_FOREACH(method->args, arg)
|
||||
{
|
||||
|
@ -254,16 +254,16 @@ source_client_simple_method_callback_generate(const DBus_Method *method, Eina_St
|
|||
}
|
||||
eina_strbuf_append_printf(h, ");\n");
|
||||
|
||||
eina_strbuf_append_printf(c_code, " if (edbus_message_error_get(msg, &error, &error_msg))\n");
|
||||
eina_strbuf_append_printf(c_code, " if (eldbus_message_error_get(msg, &error, &error_msg))\n");
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Error_Info error_info = {error, error_msg};\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Error_Info error_info = {error, error_msg};\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(proxy, user_data, pending, &error_info%s);\n", eina_strbuf_string_get(end_cb));
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_arguments_get(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(arguments_get));
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_arguments_get(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(arguments_get));
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Error_Info error_info = {\"\", \"\"};\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Error_Info error_info = {\"\", \"\"};\n");
|
||||
eina_strbuf_append_printf(c_code, " ERR(\"Error: Getting arguments from message.\");\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(proxy, user_data, pending, &error_info%s);\n", eina_strbuf_string_get(end_cb));
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
|
@ -308,7 +308,7 @@ source_client_signal_generate(const DBus_Signal *sig, Eina_Strbuf *c_code, Eina_
|
|||
Eina_Strbuf *string_copy = eina_strbuf_new();
|
||||
Eina_Strbuf *string_free = eina_strbuf_new();
|
||||
|
||||
eina_strbuf_append_printf(c_init_function, " edbus_proxy_signal_handler_add(proxy, \"%s\", %s, proxy);\n", sig->name, sig->cb_name);
|
||||
eina_strbuf_append_printf(c_init_function, " eldbus_proxy_signal_handler_add(proxy, \"%s\", %s, proxy);\n", sig->name, sig->cb_name);
|
||||
eina_strbuf_append_printf(c_header, "int %s;\n", sig->signal_event);
|
||||
eina_strbuf_append_printf(h, "extern int %s;\n", sig->signal_event);
|
||||
eina_strbuf_append_printf(c_init_function, " if (!%s)\n", sig->signal_event);
|
||||
|
@ -316,7 +316,7 @@ source_client_signal_generate(const DBus_Signal *sig, Eina_Strbuf *c_code, Eina_
|
|||
|
||||
eina_strbuf_append_printf(h, "typedef struct _%s\n", sig->struct_name);
|
||||
eina_strbuf_append_printf(h, "{\n");
|
||||
eina_strbuf_append_printf(h, " EDBus_Proxy *proxy;\n");
|
||||
eina_strbuf_append_printf(h, " Eldbus_Proxy *proxy;\n");
|
||||
|
||||
if (sig->complex)
|
||||
{
|
||||
|
@ -351,16 +351,16 @@ jump_simple_stuff:
|
|||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
|
||||
//cb function
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const EDBus_Message *msg)\n{\n", sig->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Proxy *proxy = data;\n");
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const Eldbus_Message *msg)\n{\n", sig->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Proxy *proxy = data;\n");
|
||||
eina_strbuf_append_printf(c_code, " %s *s_data = calloc(1, sizeof(%s));\n", sig->struct_name, sig->struct_name);
|
||||
eina_strbuf_append_printf(c_code, " s_data->proxy = proxy;\n");
|
||||
if (sig->complex)
|
||||
{
|
||||
eina_strbuf_append_printf(c_code, " s_data->value = edbus_message_to_eina_value(msg);\n");
|
||||
eina_strbuf_append_printf(c_code, " s_data->value = eldbus_message_to_eina_value(msg);\n");
|
||||
goto end_signal;
|
||||
}
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_arguments_get(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(parameters));
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_arguments_get(msg, \"%s\"%s))\n", eina_strbuf_string_get(full_signature), eina_strbuf_string_get(parameters));
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " ERR(\"Error: Getting arguments from message.\");\n");
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
|
@ -381,31 +381,31 @@ static const char *
|
|||
prop_cb_get(const DBus_Property *prop)
|
||||
{
|
||||
if (prop->complex)
|
||||
return "EDBus_Codegen_Property_Complex_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Complex_Get_Cb";
|
||||
switch (prop->type[0])
|
||||
{
|
||||
case 's':
|
||||
case 'o':
|
||||
return "EDBus_Codegen_Property_String_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_String_Get_Cb";
|
||||
case 'i':
|
||||
case 'h':
|
||||
return "EDBus_Codegen_Property_Int32_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Int32_Get_Cb";
|
||||
case 'y':
|
||||
return "EDBus_Codegen_Property_Byte_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Byte_Get_Cb";
|
||||
case 'b':
|
||||
return "EDBus_Codegen_Property_Bool_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Bool_Get_Cb";
|
||||
case 'n':
|
||||
return "EDBus_Codegen_Property_Int16_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Int16_Get_Cb";
|
||||
case 'q':
|
||||
return "EDBus_Codegen_Property_Uint16_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Uint16_Get_Cb";
|
||||
case 'u':
|
||||
return "EDBus_Codegen_Property_Uint32_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Uint32_Get_Cb";
|
||||
case 'd':
|
||||
return "EDBus_Codegen_Property_Double_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Double_Get_Cb";
|
||||
case 'x':
|
||||
return "EDBus_Codegen_Property_Int64_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Int64_Get_Cb";
|
||||
case 't':
|
||||
return "EDBus_Codegen_Property_Uint64_Get_Cb";
|
||||
return "Eldbus_Codegen_Property_Uint64_Get_Cb";
|
||||
default:
|
||||
return "Unexpected_type";
|
||||
}
|
||||
|
@ -423,33 +423,33 @@ static void
|
|||
source_client_property_generate_get(const DBus_Property *prop, Eina_Strbuf *c_code, Eina_Strbuf *h)
|
||||
{
|
||||
//callback
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const EDBus_Message *msg, EDBus_Pending *pending)\n{\n", prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = edbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)\n{\n", prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = eldbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, " const char *error, *error_msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " %s cb = data;\n", prop_cb_get(prop));
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Proxy *proxy = edbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Message_Iter *variant;\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Message_Iter *variant;\n");
|
||||
if (prop->complex)
|
||||
eina_strbuf_append_printf(c_code, " Eina_Value *v, stack_value;\n");
|
||||
else
|
||||
eina_strbuf_append_printf(c_code, " %sv;\n", dbus_type2c_type(prop->type));
|
||||
eina_strbuf_append_printf(c_code, " if (edbus_message_error_get(msg, &error, &error_msg))\n");
|
||||
eina_strbuf_append_printf(c_code, " if (eldbus_message_error_get(msg, &error, &error_msg))\n");
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Error_Info error_info = {error, error_msg};\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Error_Info error_info = {error, error_msg};\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(user_data, pending, \"%s\", proxy, &error_info, %s);\n", prop->name, null_or_zero(prop->type));
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_arguments_get(msg, \"v\", &variant))\n");
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_arguments_get(msg, \"v\", &variant))\n");
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Error_Info error_info = {\"\", \"\"};\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Error_Info error_info = {\"\", \"\"};\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(user_data, pending, \"%s\", proxy, &error_info, %s);\n", prop->name, null_or_zero(prop->type));
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
|
||||
if (prop->complex)
|
||||
{
|
||||
eina_strbuf_append_printf(c_code, " v = edbus_message_iter_struct_like_to_eina_value(variant);\n");
|
||||
eina_strbuf_append_printf(c_code, " v = eldbus_message_iter_struct_like_to_eina_value(variant);\n");
|
||||
eina_strbuf_append_printf(c_code, " eina_value_struct_value_get(v, \"arg0\", &stack_value);\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(user_data, pending, \"%s\", proxy, NULL, &stack_value);\n", prop->name);
|
||||
eina_strbuf_append_printf(c_code, " eina_value_flush(&stack_value);\n");
|
||||
|
@ -457,9 +457,9 @@ source_client_property_generate_get(const DBus_Property *prop, Eina_Strbuf *c_co
|
|||
}
|
||||
else
|
||||
{
|
||||
eina_strbuf_append_printf(c_code, " if (!edbus_message_iter_arguments_get(variant, \"%s\", &v))\n", prop->type);
|
||||
eina_strbuf_append_printf(c_code, " if (!eldbus_message_iter_arguments_get(variant, \"%s\", &v))\n", prop->type);
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Error_Info error_info = {\"\", \"\"};\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Error_Info error_info = {\"\", \"\"};\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(user_data, pending, \"%s\", proxy, &error_info, %s);\n", prop->name, null_or_zero(prop->type));
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
|
@ -468,15 +468,15 @@ source_client_property_generate_get(const DBus_Property *prop, Eina_Strbuf *c_co
|
|||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
|
||||
//call
|
||||
eina_strbuf_append_printf(h, "EDBus_Pending *%s_propget(EDBus_Proxy *proxy, %s cb, const void *data);\n", prefix_append(prop->c_name), prop_cb_get(prop));
|
||||
eina_strbuf_append_printf(h, "Eldbus_Pending *%s_propget(Eldbus_Proxy *proxy, %s cb, const void *data);\n", prefix_append(prop->c_name), prop_cb_get(prop));
|
||||
|
||||
eina_strbuf_append_printf(c_code, "\nEDBus_Pending *\n%s_propget(EDBus_Proxy *proxy, %s cb, const void *data)\n{\n", prefix_append(prop->c_name), prop_cb_get(prop));
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, "\nEldbus_Pending *\n%s_propget(Eldbus_Proxy *proxy, %s cb, const void *data)\n{\n", prefix_append(prop->c_name), prop_cb_get(prop));
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, " EINA_SAFETY_ON_NULL_RETURN_VAL(proxy, NULL);\n");
|
||||
eina_strbuf_append_printf(c_code, " p = edbus_proxy_property_get(proxy, \"%s\", %s, cb);\n", prop->name, prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " p = eldbus_proxy_property_get(proxy, \"%s\", %s, cb);\n", prop->name, prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " if (data)\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " return p;\n");
|
||||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
}
|
||||
|
@ -485,14 +485,14 @@ static void
|
|||
source_client_property_generate_set(const DBus_Property *prop, Eina_Strbuf *c_code, Eina_Strbuf *h)
|
||||
{
|
||||
//callback
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s_set(void *data, const EDBus_Message *msg, EDBus_Pending *pending)\n{\n", prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, "\nstatic void\n%s_set(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)\n{\n", prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " const char *error, *error_msg;\n");
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = edbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Proxy *proxy = edbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Codegen_Property_Set_Cb cb = data;\n");
|
||||
eina_strbuf_append_printf(c_code, " if (edbus_message_error_get(msg, &error, &error_msg))");
|
||||
eina_strbuf_append_printf(c_code, " void *user_data = eldbus_pending_data_del(pending, \"__user_data\");\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, \"__proxy\");\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Codegen_Property_Set_Cb cb = data;\n");
|
||||
eina_strbuf_append_printf(c_code, " if (eldbus_message_error_get(msg, &error, &error_msg))");
|
||||
eina_strbuf_append_printf(c_code, " {\n");
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Error_Info error_info = {error, error_msg};\n\n");
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Error_Info error_info = {error, error_msg};\n\n");
|
||||
eina_strbuf_append_printf(c_code, " cb(user_data, \"%s\", proxy, pending, &error_info);\n", prop->name);
|
||||
eina_strbuf_append_printf(c_code, " return;\n");
|
||||
eina_strbuf_append_printf(c_code, " }\n");
|
||||
|
@ -500,15 +500,15 @@ source_client_property_generate_set(const DBus_Property *prop, Eina_Strbuf *c_co
|
|||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
|
||||
//call
|
||||
eina_strbuf_append_printf(h, "EDBus_Pending *%s_propset(EDBus_Proxy *proxy, EDBus_Codegen_Property_Set_Cb cb, const void *data, const void *value);\n", prefix_append(prop->c_name));
|
||||
eina_strbuf_append_printf(h, "Eldbus_Pending *%s_propset(Eldbus_Proxy *proxy, Eldbus_Codegen_Property_Set_Cb cb, const void *data, const void *value);\n", prefix_append(prop->c_name));
|
||||
|
||||
eina_strbuf_append_printf(c_code, "\nEDBus_Pending *\n%s_propset(EDBus_Proxy *proxy, EDBus_Codegen_Property_Set_Cb cb, const void *data, const void *value)\n{\n", prop->c_name);
|
||||
eina_strbuf_append_printf(c_code, " EDBus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, "\nEldbus_Pending *\n%s_propset(Eldbus_Proxy *proxy, Eldbus_Codegen_Property_Set_Cb cb, const void *data, const void *value)\n{\n", prop->c_name);
|
||||
eina_strbuf_append_printf(c_code, " Eldbus_Pending *p;\n");
|
||||
eina_strbuf_append_printf(c_code, " EINA_SAFETY_ON_NULL_RETURN_VAL(proxy, NULL);\n");
|
||||
eina_strbuf_append_printf(c_code, " EINA_SAFETY_ON_NULL_RETURN_VAL(value, NULL);\n");
|
||||
eina_strbuf_append_printf(c_code, " p = edbus_proxy_property_set(proxy, \"%s\", \"%s\", value, %s_set, data);\n", prop->name, prop->type, prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " edbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " p = eldbus_proxy_property_set(proxy, \"%s\", \"%s\", value, %s_set, data);\n", prop->name, prop->type, prop->cb_name);
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__user_data\", data);\n");
|
||||
eina_strbuf_append_printf(c_code, " eldbus_pending_data_set(p, \"__proxy\", proxy);\n");
|
||||
eina_strbuf_append_printf(c_code, " return p;\n");
|
||||
eina_strbuf_append_printf(c_code, "}\n");
|
||||
}
|
||||
|
@ -545,7 +545,7 @@ source_client_generate(DBus_Object *path, const char *prefix, const char *interf
|
|||
c_header = eina_strbuf_new();
|
||||
c_code = eina_strbuf_new();
|
||||
|
||||
aux = string_build("EDBUS_%s_H", iface->c_name);
|
||||
aux = string_build("ELDBUS_%s_H", iface->c_name);
|
||||
for (i = 0; aux[i]; i++)
|
||||
aux[i] = toupper(aux[i]);
|
||||
eina_strbuf_append_printf(h, "#ifndef %s\n", aux);
|
||||
|
@ -554,16 +554,16 @@ source_client_generate(DBus_Object *path, const char *prefix, const char *interf
|
|||
|
||||
eina_strbuf_append_printf(h, "#include <Eina.h>\n");
|
||||
eina_strbuf_append_printf(h, "#include <Ecore.h>\n");
|
||||
eina_strbuf_append_printf(h, "#include <EDBus.h>\n");
|
||||
eina_strbuf_append_printf(h, "#include \"edbus_utils.h\"\n\n");
|
||||
eina_strbuf_append_printf(h, "EDBus_Proxy *%s_proxy_get(EDBus_Connection *conn, const char *bus, const char *path);\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(h, "void %s_proxy_unref(EDBus_Proxy *proxy);\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(h, "#include <Eldbus.h>\n");
|
||||
eina_strbuf_append_printf(h, "#include \"eldbus_utils.h\"\n\n");
|
||||
eina_strbuf_append_printf(h, "Eldbus_Proxy *%s_proxy_get(Eldbus_Connection *conn, const char *bus, const char *path);\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(h, "void %s_proxy_unref(Eldbus_Proxy *proxy);\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(h, "void %s_log_domain_set(int id);\n", prefix_append(iface->c_name));
|
||||
|
||||
if (interface_name && output_name)
|
||||
eina_strbuf_append_printf(c_header, "#include \"%s.h\"\n\n", output_name);
|
||||
else
|
||||
eina_strbuf_append_printf(c_header, "#include \"edbus_%s.h\"\n\n", iface->c_name);
|
||||
eina_strbuf_append_printf(c_header, "#include \"eldbus_%s.h\"\n\n", iface->c_name);
|
||||
|
||||
eina_strbuf_append_printf(c_header, "static int _log_main = -1;\n");
|
||||
eina_strbuf_append_printf(c_header, "#undef ERR\n");
|
||||
|
@ -573,20 +573,20 @@ source_client_generate(DBus_Object *path, const char *prefix, const char *interf
|
|||
eina_strbuf_append_printf(c_init_function, " _log_main = id;\n");
|
||||
eina_strbuf_append_printf(c_init_function, "}\n");
|
||||
|
||||
eina_strbuf_append_printf(c_init_function, "\nvoid\n%s_proxy_unref(EDBus_Proxy *proxy)\n{\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(c_init_function, " EDBus_Object *obj = edbus_proxy_object_get(proxy);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " edbus_proxy_unref(proxy);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " edbus_object_unref(obj);\n");
|
||||
eina_strbuf_append_printf(c_init_function, "\nvoid\n%s_proxy_unref(Eldbus_Proxy *proxy)\n{\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(c_init_function, " Eldbus_Object *obj = eldbus_proxy_object_get(proxy);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " eldbus_proxy_unref(proxy);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " eldbus_object_unref(obj);\n");
|
||||
eina_strbuf_append_printf(c_init_function, "}\n");
|
||||
|
||||
eina_strbuf_append_printf(c_init_function, "\nEDBus_Proxy *\n%s_proxy_get(EDBus_Connection *conn, const char *bus, const char *path)\n{\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(c_init_function, " EDBus_Object *obj;\n");
|
||||
eina_strbuf_append_printf(c_init_function, " EDBus_Proxy *proxy;\n");
|
||||
eina_strbuf_append_printf(c_init_function, "\nEldbus_Proxy *\n%s_proxy_get(Eldbus_Connection *conn, const char *bus, const char *path)\n{\n", prefix_append(iface->c_name));
|
||||
eina_strbuf_append_printf(c_init_function, " Eldbus_Object *obj;\n");
|
||||
eina_strbuf_append_printf(c_init_function, " Eldbus_Proxy *proxy;\n");
|
||||
eina_strbuf_append_printf(c_init_function, " EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " EINA_SAFETY_ON_NULL_RETURN_VAL(bus, NULL);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " if (!path) path = \"%s\";\n", path->name);
|
||||
eina_strbuf_append_printf(c_init_function, " obj = edbus_object_get(conn, bus, path);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " proxy = edbus_proxy_get(obj, \"%s\");\n", iface->name);
|
||||
eina_strbuf_append_printf(c_init_function, " obj = eldbus_object_get(conn, bus, path);\n");
|
||||
eina_strbuf_append_printf(c_init_function, " proxy = eldbus_proxy_get(obj, \"%s\");\n", iface->name);
|
||||
|
||||
EINA_INLIST_FOREACH(iface->methods, method)
|
||||
source_client_method_generate(method, c_code, h);
|
||||
|
@ -605,7 +605,7 @@ source_client_generate(DBus_Object *path, const char *prefix, const char *interf
|
|||
if (interface_name && output_name)
|
||||
file_name = string_build("%s.h", output_name);
|
||||
else
|
||||
file_name = string_build("edbus_%s.h", iface->c_name);
|
||||
file_name = string_build("eldbus_%s.h", iface->c_name);
|
||||
file_write(file_name, eina_strbuf_string_get(h));
|
||||
eina_strbuf_free(h);
|
||||
free(file_name);
|
||||
|
@ -618,7 +618,7 @@ source_client_generate(DBus_Object *path, const char *prefix, const char *interf
|
|||
if (interface_name && output_name)
|
||||
file_name = string_build("%s.c", output_name);
|
||||
else
|
||||
file_name = string_build("edbus_%s.c", iface->c_name);
|
||||
file_name = string_build("eldbus_%s.c", iface->c_name);
|
||||
file_write(file_name, eina_strbuf_string_get(c_header));
|
||||
eina_strbuf_free(c_header);
|
||||
free(file_name);
|
|
@ -132,28 +132,28 @@ string_build(const char *fmt, ...)
|
|||
}
|
||||
|
||||
#define UTIL_H "\
|
||||
#ifndef EDBUS_UTILS_H\n\
|
||||
#define EDBUS_UTILS_H 1\n\
|
||||
#ifndef ELDBUS_UTILS_H\n\
|
||||
#define ELDBUS_UTILS_H 1\n\
|
||||
\n\
|
||||
typedef struct _EDBus_Error_Info\n\
|
||||
typedef struct _Eldbus_Error_Info\n\
|
||||
{\n\
|
||||
const char *error;\n\
|
||||
const char *message;\n\
|
||||
} EDBus_Error_Info;\n\
|
||||
} Eldbus_Error_Info;\n\
|
||||
\n\
|
||||
typedef void (*EDBus_Codegen_Property_Set_Cb)(void *data, const char *propname, EDBus_Proxy *proxy, EDBus_Pending *p, EDBus_Error_Info *error_info);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Set_Cb)(void *data, const char *propname, Eldbus_Proxy *proxy, Eldbus_Pending *p, Eldbus_Error_Info *error_info);\n\
|
||||
\n\
|
||||
typedef void (*EDBus_Codegen_Property_String_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, const char *value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Int32_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, int value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Byte_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, unsigned char value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Bool_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, Eina_Bool value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Int16_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, short int value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Uint16_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, unsigned short int value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Uint32_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, unsigned int value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Double_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, double value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Int64_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, int64_t value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Uint64_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, uint64_t value);\n\
|
||||
typedef void (*EDBus_Codegen_Property_Complex_Get_Cb)(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, Eina_Value *value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_String_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, const char *value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Int32_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, int value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Byte_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, unsigned char value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Bool_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, Eina_Bool value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Int16_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, short int value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Uint16_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, unsigned short int value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Uint32_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, unsigned int value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Double_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, double value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Int64_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, int64_t value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Uint64_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, uint64_t value);\n\
|
||||
typedef void (*Eldbus_Codegen_Property_Complex_Get_Cb)(void *data, Eldbus_Pending *p, const char *propname, Eldbus_Proxy *proxy, Eldbus_Error_Info *error_info, Eina_Value *value);\n\
|
||||
\n\
|
||||
#endif\
|
||||
"
|
||||
|
@ -161,5 +161,5 @@ typedef void (*EDBus_Codegen_Property_Complex_Get_Cb)(void *data, EDBus_Pending
|
|||
Eina_Bool
|
||||
util_h_write(void)
|
||||
{
|
||||
return file_write("edbus_utils.h", UTIL_H);
|
||||
return file_write("eldbus_utils.h", UTIL_H);
|
||||
}
|
|
@ -33,7 +33,7 @@
|
|||
#include <Eina.h>
|
||||
#include <Ecore_Getopt.h>
|
||||
#include <Ecore.h>
|
||||
#include <EDBus.h>
|
||||
#include <Eldbus.h>
|
||||
#include <Ethumb.h>
|
||||
#include <Ethumb_Client.h>
|
||||
|
||||
|
@ -130,7 +130,7 @@ struct _Ethumbd_Object
|
|||
int id_count;
|
||||
int max_id;
|
||||
int min_id;
|
||||
EDBus_Service_Interface *iface;
|
||||
Eldbus_Service_Interface *iface;
|
||||
};
|
||||
|
||||
struct _Ethumbd_Queue
|
||||
|
@ -154,7 +154,7 @@ struct _Ethumbd_Slave
|
|||
|
||||
struct _Ethumbd
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
Eldbus_Connection *conn;
|
||||
Ecore_Idler *idler;
|
||||
Ethumbd_Request *processing;
|
||||
Ethumbd_Queue queue;
|
||||
|
@ -194,27 +194,27 @@ const Ecore_Getopt optdesc = {
|
|||
}
|
||||
};
|
||||
|
||||
static EDBus_Message *_ethumb_dbus_queue_add_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg);
|
||||
static EDBus_Message *_ethumb_dbus_queue_remove_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg);
|
||||
static EDBus_Message *_ethumb_dbus_queue_clear_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg);
|
||||
static EDBus_Message *_ethumb_dbus_ethumb_setup_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg);
|
||||
static EDBus_Message *_ethumb_dbus_delete_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg);
|
||||
static Eldbus_Message *_ethumb_dbus_queue_add_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_ethumb_dbus_queue_remove_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_ethumb_dbus_queue_clear_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_ethumb_dbus_ethumb_setup_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
static Eldbus_Message *_ethumb_dbus_delete_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
|
||||
|
||||
static const EDBus_Method _ethumb_dbus_objects_methods[] = {
|
||||
static const Eldbus_Method _ethumb_dbus_objects_methods[] = {
|
||||
{
|
||||
"queue_add",
|
||||
EDBUS_ARGS({"i", "id"}, {"ay", "file"}, {"ay", "key"}, {"ay", "thumb"}, {"ay", "thumb_key"}),
|
||||
EDBUS_ARGS({"i", "queue_id"}), _ethumb_dbus_queue_add_cb, 0
|
||||
ELDBUS_ARGS({"i", "id"}, {"ay", "file"}, {"ay", "key"}, {"ay", "thumb"}, {"ay", "thumb_key"}),
|
||||
ELDBUS_ARGS({"i", "queue_id"}), _ethumb_dbus_queue_add_cb, 0
|
||||
},
|
||||
{
|
||||
"queue_remove", EDBUS_ARGS({"i", "queue_id"}), EDBUS_ARGS({"b", "result"}),
|
||||
"queue_remove", ELDBUS_ARGS({"i", "queue_id"}), ELDBUS_ARGS({"b", "result"}),
|
||||
_ethumb_dbus_queue_remove_cb, 0
|
||||
},
|
||||
{
|
||||
"clear_queue", NULL, NULL, _ethumb_dbus_queue_clear_cb, 0
|
||||
},
|
||||
{
|
||||
"ethumb_setup", EDBUS_ARGS({"a{sv}", "array"}), EDBUS_ARGS({"b", "result"}),
|
||||
"ethumb_setup", ELDBUS_ARGS({"a{sv}", "array"}), ELDBUS_ARGS({"b", "result"}),
|
||||
_ethumb_dbus_ethumb_setup_cb, 0
|
||||
},
|
||||
{
|
||||
|
@ -228,9 +228,9 @@ enum
|
|||
ETHUMB_DBUS_OBJECTS_SIGNAL_GENERATED = 0,
|
||||
};
|
||||
|
||||
static const EDBus_Signal _ethumb_dbus_objects_signals[] = {
|
||||
static const Eldbus_Signal _ethumb_dbus_objects_signals[] = {
|
||||
[ETHUMB_DBUS_OBJECTS_SIGNAL_GENERATED] = { "generated",
|
||||
EDBUS_ARGS({ "i", "id" }, { "ay", "paths" }, { "ay", "keys" },
|
||||
ELDBUS_ARGS({ "i", "id" }, { "ay", "paths" }, { "ay", "keys" },
|
||||
{ "b", "success" }) },
|
||||
{ }
|
||||
};
|
||||
|
@ -851,13 +851,13 @@ _ethumb_table_del(Ethumbd *ed, int i)
|
|||
}
|
||||
q->nqueue -= q->table[i].nqueue;
|
||||
|
||||
odata = edbus_service_object_data_del(q->table[i].iface, ODATA);
|
||||
edbus_name_owner_changed_callback_del(ed->conn, ed->queue.table[i].client,
|
||||
odata = eldbus_service_object_data_del(q->table[i].iface, ODATA);
|
||||
eldbus_name_owner_changed_callback_del(ed->conn, ed->queue.table[i].client,
|
||||
_name_owner_changed_cb, odata);
|
||||
//this string was not been freed previously
|
||||
eina_stringshare_del(ed->queue.table[i].client);
|
||||
free(odata);
|
||||
edbus_service_object_unregister(q->table[i].iface);
|
||||
eldbus_service_object_unregister(q->table[i].iface);
|
||||
|
||||
memset(&(q->table[i]), 0, sizeof(Ethumbd_Object));
|
||||
for (j = 0; j < q->count; j++)
|
||||
|
@ -894,24 +894,24 @@ _name_owner_changed_cb(void *context, const char *bus, const char *old_id, const
|
|||
_ethumb_table_del(ed, odata->idx);
|
||||
}
|
||||
|
||||
static const EDBus_Service_Interface_Desc client_desc = {
|
||||
static const Eldbus_Service_Interface_Desc client_desc = {
|
||||
_ethumb_dbus_objects_interface, _ethumb_dbus_objects_methods,
|
||||
_ethumb_dbus_objects_signals
|
||||
};
|
||||
|
||||
static EDBus_Message *
|
||||
_ethumb_dbus_ethumb_new_cb(const EDBus_Service_Interface *interface, const EDBus_Message *msg)
|
||||
static Eldbus_Message *
|
||||
_ethumb_dbus_ethumb_new_cb(const Eldbus_Service_Interface *interface, const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
EDBus_Service_Interface *iface;
|
||||
Eldbus_Message *reply;
|
||||
Eldbus_Service_Interface *iface;
|
||||
Ethumbd_Object_Data *odata;
|
||||
int i;
|
||||
const char *return_path = "";
|
||||
const char *client;
|
||||
Ethumbd *ed;
|
||||
|
||||
ed = edbus_service_object_data_get(interface, DAEMON);
|
||||
client = edbus_message_sender_get(msg);
|
||||
ed = eldbus_service_object_data_get(interface, DAEMON);
|
||||
client = eldbus_message_sender_get(msg);
|
||||
if (!client)
|
||||
goto end_new;
|
||||
|
||||
|
@ -926,7 +926,7 @@ _ethumb_dbus_ethumb_new_cb(const EDBus_Service_Interface *interface, const EDBus
|
|||
ed->queue.table[i].client = eina_stringshare_add(client);
|
||||
return_path = ed->queue.table[i].path;
|
||||
|
||||
iface = edbus_service_interface_register(ed->conn, return_path, &client_desc);
|
||||
iface = eldbus_service_interface_register(ed->conn, return_path, &client_desc);
|
||||
if (!iface)
|
||||
{
|
||||
ERR("could not create dbus_object.");
|
||||
|
@ -934,38 +934,38 @@ _ethumb_dbus_ethumb_new_cb(const EDBus_Service_Interface *interface, const EDBus
|
|||
return_path = "";
|
||||
goto end_new;
|
||||
}
|
||||
edbus_service_object_data_set(iface, ODATA, odata);
|
||||
eldbus_service_object_data_set(iface, ODATA, odata);
|
||||
ed->queue.table[i].iface = iface;
|
||||
edbus_name_owner_changed_callback_add(ed->conn, client,
|
||||
eldbus_name_owner_changed_callback_add(ed->conn, client,
|
||||
_name_owner_changed_cb, odata,
|
||||
EINA_TRUE);
|
||||
_ethumbd_child_write_op_new(&ed->slave, i);
|
||||
_ethumbd_timeout_stop(ed);
|
||||
|
||||
end_new:
|
||||
reply = edbus_message_method_return_new(msg);
|
||||
edbus_message_arguments_append(reply, "o", return_path);
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
eldbus_message_arguments_append(reply, "o", return_path);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static const EDBus_Method _ethumb_dbus_methods[] = {
|
||||
static const Eldbus_Method _ethumb_dbus_methods[] = {
|
||||
{
|
||||
"new", NULL, EDBUS_ARGS({"o", "path"}), _ethumb_dbus_ethumb_new_cb, 0
|
||||
"new", NULL, ELDBUS_ARGS({"o", "path"}), _ethumb_dbus_ethumb_new_cb, 0
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const char *
|
||||
_ethumb_dbus_get_bytearray(EDBus_Message_Iter *iter)
|
||||
_ethumb_dbus_get_bytearray(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
int length;
|
||||
const char *result;
|
||||
|
||||
if (!edbus_message_iter_fixed_array_get(iter, 'y', &result,
|
||||
if (!eldbus_message_iter_fixed_array_get(iter, 'y', &result,
|
||||
&length))
|
||||
{
|
||||
ERR("not byte array element. Signature: %s",
|
||||
edbus_message_iter_signature_get(iter));
|
||||
eldbus_message_iter_signature_get(iter));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -976,7 +976,7 @@ _ethumb_dbus_get_bytearray(EDBus_Message_Iter *iter)
|
|||
}
|
||||
|
||||
static void
|
||||
_ethumb_dbus_append_bytearray(EDBus_Message_Iter *parent, EDBus_Message_Iter *array, const char *string)
|
||||
_ethumb_dbus_append_bytearray(Eldbus_Message_Iter *parent, Eldbus_Message_Iter *array, const char *string)
|
||||
{
|
||||
int i, size;
|
||||
|
||||
|
@ -985,23 +985,23 @@ _ethumb_dbus_append_bytearray(EDBus_Message_Iter *parent, EDBus_Message_Iter *ar
|
|||
|
||||
size = strlen(string) + 1;
|
||||
for (i = 0; i < size; i++)
|
||||
edbus_message_iter_basic_append(array, 'y', string[i]);
|
||||
edbus_message_iter_container_close(parent, array);
|
||||
eldbus_message_iter_basic_append(array, 'y', string[i]);
|
||||
eldbus_message_iter_container_close(parent, array);
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_ethumb_dbus_queue_add_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg)
|
||||
static Eldbus_Message *
|
||||
_ethumb_dbus_queue_add_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
Eldbus_Message *reply;
|
||||
const char *file, *key, *thumb, *thumb_key;
|
||||
Ethumbd_Object_Data *odata;
|
||||
Ethumbd_Object *eobject;
|
||||
Ethumbd *ed;
|
||||
Ethumbd_Request *request;
|
||||
int id = -1;
|
||||
EDBus_Message_Iter *file_iter, *key_iter, *thumb_iter, *thumb_key_iter;
|
||||
Eldbus_Message_Iter *file_iter, *key_iter, *thumb_iter, *thumb_key_iter;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "iayayayay", &id, &file_iter,
|
||||
if (!eldbus_message_arguments_get(msg, "iayayayay", &id, &file_iter,
|
||||
&key_iter, &thumb_iter, &thumb_key_iter))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
|
@ -1021,7 +1021,7 @@ _ethumb_dbus_queue_add_cb(const EDBus_Service_Interface *iface, const EDBus_Mess
|
|||
goto end;
|
||||
}
|
||||
|
||||
odata = edbus_service_object_data_get(iface, ODATA);
|
||||
odata = eldbus_service_object_data_get(iface, ODATA);
|
||||
if (!odata)
|
||||
{
|
||||
eina_stringshare_del(file);
|
||||
|
@ -1050,15 +1050,15 @@ _ethumb_dbus_queue_add_cb(const EDBus_Service_Interface *iface, const EDBus_Mess
|
|||
_process_queue_start(ed);
|
||||
|
||||
end:
|
||||
reply = edbus_message_method_return_new(msg);
|
||||
edbus_message_arguments_append(reply, "i", id);
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
eldbus_message_arguments_append(reply, "i", id);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_ethumb_dbus_queue_remove_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg)
|
||||
static Eldbus_Message *
|
||||
_ethumb_dbus_queue_remove_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
Eldbus_Message *reply;
|
||||
int id;
|
||||
Ethumbd_Object_Data *odata;
|
||||
Ethumbd_Object *eobject;
|
||||
|
@ -1067,12 +1067,12 @@ _ethumb_dbus_queue_remove_cb(const EDBus_Service_Interface *iface, const EDBus_M
|
|||
Eina_Bool r = EINA_FALSE;
|
||||
Eina_List *l;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "i", &id))
|
||||
if (!eldbus_message_arguments_get(msg, "i", &id))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
goto end;
|
||||
}
|
||||
odata = edbus_service_object_data_get(iface, ODATA);
|
||||
odata = eldbus_service_object_data_get(iface, ODATA);
|
||||
if (!odata)
|
||||
{
|
||||
ERR("could not get dbus_object data.");
|
||||
|
@ -1105,20 +1105,20 @@ _ethumb_dbus_queue_remove_cb(const EDBus_Service_Interface *iface, const EDBus_M
|
|||
}
|
||||
|
||||
end:
|
||||
reply = edbus_message_method_return_new(msg);
|
||||
edbus_message_arguments_append(reply, "b", r);
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
eldbus_message_arguments_append(reply, "b", r);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_ethumb_dbus_queue_clear_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg)
|
||||
static Eldbus_Message *
|
||||
_ethumb_dbus_queue_clear_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
|
||||
{
|
||||
Ethumbd_Object_Data *odata;
|
||||
Ethumbd_Object *eobject;
|
||||
Ethumbd *ed;
|
||||
Eina_List *l;
|
||||
|
||||
odata = edbus_service_object_data_get(iface, ODATA);
|
||||
odata = eldbus_service_object_data_get(iface, ODATA);
|
||||
if (!odata)
|
||||
{
|
||||
ERR("could not get dbus_object data.");
|
||||
|
@ -1142,19 +1142,19 @@ _ethumb_dbus_queue_clear_cb(const EDBus_Service_Interface *iface, const EDBus_Me
|
|||
eobject->nqueue = 0;
|
||||
|
||||
end:
|
||||
return edbus_message_method_return_new(msg);
|
||||
return eldbus_message_method_return_new(msg);
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_ethumb_dbus_delete_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg)
|
||||
static Eldbus_Message *
|
||||
_ethumb_dbus_delete_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
Eldbus_Message *reply;
|
||||
Ethumbd_Object_Data *odata;
|
||||
Ethumbd *ed;
|
||||
|
||||
reply = edbus_message_method_return_new(msg);
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
|
||||
odata = edbus_service_object_data_get(iface, ODATA);
|
||||
odata = eldbus_service_object_data_get(iface, ODATA);
|
||||
if (!odata)
|
||||
{
|
||||
ERR("could not get dbus_object data for del_cb.");
|
||||
|
@ -1168,11 +1168,11 @@ _ethumb_dbus_delete_cb(const EDBus_Service_Interface *iface, const EDBus_Message
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_fdo_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_fdo_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
int fdo;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "i", &fdo))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "i", &fdo))
|
||||
{
|
||||
ERR("invalid param for fdo_set.");
|
||||
return 0;
|
||||
|
@ -1186,18 +1186,18 @@ _ethumb_dbus_fdo_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *va
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_size_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_size_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
EDBus_Message_Iter *st;
|
||||
Eldbus_Message_Iter *st;
|
||||
int w, h;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "(ii)", &st))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "(ii)", &st))
|
||||
{
|
||||
ERR("invalid param for size_set.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
edbus_message_iter_arguments_get(st, "ii", &w, &h);
|
||||
eldbus_message_iter_arguments_get(st, "ii", &w, &h);
|
||||
DBG("setting size to: %dx%d", w, h);
|
||||
request->setup.flags.size = 1;
|
||||
request->setup.tw = w;
|
||||
|
@ -1207,11 +1207,11 @@ _ethumb_dbus_size_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *v
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_format_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_format_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
int format;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "i", &format))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "i", &format))
|
||||
{
|
||||
ERR("invalid param for format_set.");
|
||||
return 0;
|
||||
|
@ -1225,11 +1225,11 @@ _ethumb_dbus_format_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_aspect_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_aspect_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
int aspect;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "i", &aspect))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "i", &aspect))
|
||||
{
|
||||
ERR("invalid param for aspect_set.");
|
||||
return 0;
|
||||
|
@ -1243,11 +1243,11 @@ _ethumb_dbus_aspect_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_orientation_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_orientation_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
int orientation;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "i", &orientation))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "i", &orientation))
|
||||
{
|
||||
ERR("invalid param for orientation_set.");
|
||||
return 0;
|
||||
|
@ -1261,18 +1261,18 @@ _ethumb_dbus_orientation_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_crop_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_crop_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
EDBus_Message_Iter *st;
|
||||
Eldbus_Message_Iter *st;
|
||||
double x, y;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "(dd)", &st))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "(dd)", &st))
|
||||
{
|
||||
ERR("invalid param for crop_set.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
edbus_message_iter_arguments_get(st, "dd", &x, &y);
|
||||
eldbus_message_iter_arguments_get(st, "dd", &x, &y);
|
||||
DBG("setting crop to: %3.2f,%3.2f", x, y);
|
||||
request->setup.flags.crop = 1;
|
||||
request->setup.cx = x;
|
||||
|
@ -1282,11 +1282,11 @@ _ethumb_dbus_crop_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *v
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_quality_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_quality_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
int quality;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "i", &quality))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "i", &quality))
|
||||
{
|
||||
ERR("invalid param for quality_set.");
|
||||
return 0;
|
||||
|
@ -1301,11 +1301,11 @@ _ethumb_dbus_quality_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter
|
|||
|
||||
|
||||
static int
|
||||
_ethumb_dbus_compress_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_compress_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
int compress;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "i", &compress))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "i", &compress))
|
||||
{
|
||||
ERR("invalid param for compress_set.");
|
||||
return 0;
|
||||
|
@ -1319,18 +1319,18 @@ _ethumb_dbus_compress_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Ite
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_frame_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_frame_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
EDBus_Message_Iter *_struct, *file_iter, *group_iter, *swallow_iter;
|
||||
Eldbus_Message_Iter *_struct, *file_iter, *group_iter, *swallow_iter;
|
||||
const char *file, *group, *swallow;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "(ayayay)", &_struct))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "(ayayay)", &_struct))
|
||||
{
|
||||
ERR("invalid param for frame_set.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
edbus_message_iter_arguments_get(_struct, "ayayay", &file_iter, &group_iter, &swallow_iter);
|
||||
eldbus_message_iter_arguments_get(_struct, "ayayay", &file_iter, &group_iter, &swallow_iter);
|
||||
|
||||
file = _ethumb_dbus_get_bytearray(file_iter);
|
||||
group = _ethumb_dbus_get_bytearray(group_iter);
|
||||
|
@ -1345,12 +1345,12 @@ _ethumb_dbus_frame_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_directory_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_directory_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
const char *directory;
|
||||
EDBus_Message_Iter *array;
|
||||
Eldbus_Message_Iter *array;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "ay", &array))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "ay", &array))
|
||||
{
|
||||
ERR("invalid param for dir_path_set.");
|
||||
return 0;
|
||||
|
@ -1365,12 +1365,12 @@ _ethumb_dbus_directory_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_It
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_category_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_category_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
const char *category;
|
||||
EDBus_Message_Iter *array;
|
||||
Eldbus_Message_Iter *array;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "ay", &array))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "ay", &array))
|
||||
{
|
||||
ERR("invalid param for category.");
|
||||
return 0;
|
||||
|
@ -1385,11 +1385,11 @@ _ethumb_dbus_category_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Ite
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_video_time_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_video_time_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
double video_time;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "d", &video_time))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "d", &video_time))
|
||||
{
|
||||
ERR("invalid param for video_time_set.");
|
||||
return 0;
|
||||
|
@ -1403,11 +1403,11 @@ _ethumb_dbus_video_time_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_I
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_video_start_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_video_start_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
double video_start;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "d", &video_start))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "d", &video_start))
|
||||
{
|
||||
ERR("invalid param for video_start_set.");
|
||||
return 0;
|
||||
|
@ -1421,11 +1421,11 @@ _ethumb_dbus_video_start_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_video_interval_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_video_interval_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
double video_interval;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "d", &video_interval))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "d", &video_interval))
|
||||
{
|
||||
ERR("invalid param for video_interval_set.");
|
||||
return 0;
|
||||
|
@ -1438,11 +1438,11 @@ _ethumb_dbus_video_interval_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Messa
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_video_ntimes_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_video_ntimes_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
unsigned int video_ntimes;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "u", &video_ntimes))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "u", &video_ntimes))
|
||||
{
|
||||
ERR("invalid param for video_ntimes_set.");
|
||||
return 0;
|
||||
|
@ -1456,11 +1456,11 @@ _ethumb_dbus_video_ntimes_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_video_fps_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_video_fps_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
unsigned int video_fps;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "u", &video_fps))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "u", &video_fps))
|
||||
{
|
||||
ERR("invalid param for video_fps_set.");
|
||||
return 0;
|
||||
|
@ -1474,11 +1474,11 @@ _ethumb_dbus_video_fps_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_It
|
|||
}
|
||||
|
||||
static int
|
||||
_ethumb_dbus_document_page_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
_ethumb_dbus_document_page_set(Ethumbd_Object *eobject EINA_UNUSED, Eldbus_Message_Iter *variant, Ethumbd_Request *request)
|
||||
{
|
||||
unsigned int document_page;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(variant, "u", &document_page))
|
||||
if (!eldbus_message_iter_arguments_get(variant, "u", &document_page))
|
||||
{
|
||||
ERR("invalid param for document_page_set.");
|
||||
return 0;
|
||||
|
@ -1494,7 +1494,7 @@ _ethumb_dbus_document_page_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Messag
|
|||
static struct
|
||||
{
|
||||
const char *option;
|
||||
int (*setup_func)(Ethumbd_Object *eobject, EDBus_Message_Iter *variant, Ethumbd_Request *request);
|
||||
int (*setup_func)(Ethumbd_Object *eobject, Eldbus_Message_Iter *variant, Ethumbd_Request *request);
|
||||
} _option_cbs[] = {
|
||||
{"fdo", _ethumb_dbus_fdo_set},
|
||||
{"size", _ethumb_dbus_size_set},
|
||||
|
@ -1517,13 +1517,13 @@ static struct
|
|||
};
|
||||
|
||||
static int
|
||||
_ethumb_dbus_ethumb_setup_parse_element(Ethumbd_Object *eobject, EDBus_Message_Iter *data, Ethumbd_Request *request)
|
||||
_ethumb_dbus_ethumb_setup_parse_element(Ethumbd_Object *eobject, Eldbus_Message_Iter *data, Ethumbd_Request *request)
|
||||
{
|
||||
EDBus_Message_Iter *variant;
|
||||
Eldbus_Message_Iter *variant;
|
||||
const char *option;
|
||||
int i, r;
|
||||
|
||||
edbus_message_iter_arguments_get(data, "sv", &option, &variant);
|
||||
eldbus_message_iter_arguments_get(data, "sv", &option, &variant);
|
||||
|
||||
r = 0;
|
||||
for (i = 0; _option_cbs[i].option; i++)
|
||||
|
@ -1542,25 +1542,25 @@ _ethumb_dbus_ethumb_setup_parse_element(Ethumbd_Object *eobject, EDBus_Message_I
|
|||
return _option_cbs[i].setup_func(eobject, variant, request);
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_ethumb_dbus_ethumb_setup_cb(const EDBus_Service_Interface *iface, const EDBus_Message *msg)
|
||||
static Eldbus_Message *
|
||||
_ethumb_dbus_ethumb_setup_cb(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
Eldbus_Message *reply;
|
||||
Ethumbd_Object_Data *odata;
|
||||
Ethumbd *ed;
|
||||
Ethumbd_Object *eobject;
|
||||
Ethumbd_Request *request;
|
||||
Eina_Bool r = EINA_FALSE;
|
||||
EDBus_Message_Iter *array;
|
||||
EDBus_Message_Iter *data;
|
||||
Eldbus_Message_Iter *array;
|
||||
Eldbus_Message_Iter *data;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "a{sv}", &array))
|
||||
if (!eldbus_message_arguments_get(msg, "a{sv}", &array))
|
||||
{
|
||||
ERR("could not get dbus_object data for setup_cb.");
|
||||
goto end;
|
||||
}
|
||||
|
||||
odata = edbus_service_object_data_get(iface, ODATA);
|
||||
odata = eldbus_service_object_data_get(iface, ODATA);
|
||||
if (!odata)
|
||||
{
|
||||
ERR("could not get dbus_object data for setup_cb.");
|
||||
|
@ -1574,7 +1574,7 @@ _ethumb_dbus_ethumb_setup_cb(const EDBus_Service_Interface *iface, const EDBus_M
|
|||
request->id = -1;
|
||||
|
||||
r = EINA_TRUE;
|
||||
while (edbus_message_iter_get_and_next(array, 'r', &data) && r)
|
||||
while (eldbus_message_iter_get_and_next(array, 'r', &data) && r)
|
||||
{
|
||||
if (!_ethumb_dbus_ethumb_setup_parse_element(eobject, data, request))
|
||||
r = EINA_FALSE;
|
||||
|
@ -1585,57 +1585,57 @@ _ethumb_dbus_ethumb_setup_cb(const EDBus_Service_Interface *iface, const EDBus_M
|
|||
ed->queue.nqueue++;
|
||||
|
||||
end:
|
||||
reply = edbus_message_method_return_new(msg);
|
||||
edbus_message_arguments_append(reply, "b", r);
|
||||
reply = eldbus_message_method_return_new(msg);
|
||||
eldbus_message_arguments_append(reply, "b", r);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static void
|
||||
_ethumb_dbus_generated_signal(Ethumbd *ed, int *id, const char *thumb_path, const char *thumb_key, Eina_Bool success)
|
||||
{
|
||||
EDBus_Message *sig;
|
||||
EDBus_Service_Interface *iface;
|
||||
EDBus_Message_Iter *iter, *iter_path, *iter_key;
|
||||
Eldbus_Message *sig;
|
||||
Eldbus_Service_Interface *iface;
|
||||
Eldbus_Message_Iter *iter, *iter_path, *iter_key;
|
||||
int id32;
|
||||
|
||||
id32 = *id;
|
||||
|
||||
iface = ed->queue.table[ed->queue.current].iface;
|
||||
sig = edbus_service_signal_new(iface, ETHUMB_DBUS_OBJECTS_SIGNAL_GENERATED);
|
||||
sig = eldbus_service_signal_new(iface, ETHUMB_DBUS_OBJECTS_SIGNAL_GENERATED);
|
||||
|
||||
iter = edbus_message_iter_get(sig);
|
||||
edbus_message_iter_arguments_append(iter, "iay", id32, &iter_path);
|
||||
iter = eldbus_message_iter_get(sig);
|
||||
eldbus_message_iter_arguments_append(iter, "iay", id32, &iter_path);
|
||||
_ethumb_dbus_append_bytearray(iter, iter_path, thumb_path);
|
||||
edbus_message_iter_arguments_append(iter, "ay", &iter_key);
|
||||
eldbus_message_iter_arguments_append(iter, "ay", &iter_key);
|
||||
_ethumb_dbus_append_bytearray(iter, iter_key, thumb_key);
|
||||
edbus_message_iter_arguments_append(iter, "b", success);
|
||||
eldbus_message_iter_arguments_append(iter, "b", success);
|
||||
|
||||
edbus_service_signal_send(iface, sig);
|
||||
eldbus_service_signal_send(iface, sig);
|
||||
}
|
||||
|
||||
static const EDBus_Service_Interface_Desc server_desc = {
|
||||
static const Eldbus_Service_Interface_Desc server_desc = {
|
||||
_ethumb_dbus_interface, _ethumb_dbus_methods
|
||||
};
|
||||
|
||||
static void
|
||||
_ethumb_dbus_request_name_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_ethumb_dbus_request_name_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Service_Interface *iface;
|
||||
Eldbus_Service_Interface *iface;
|
||||
const char *errname, *errmsg;
|
||||
Ethumbd *ed = data;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("request name error: %s %s", errname, errmsg);
|
||||
edbus_connection_unref(ed->conn);
|
||||
eldbus_connection_unref(ed->conn);
|
||||
return;
|
||||
}
|
||||
|
||||
iface = edbus_service_interface_register(ed->conn, _ethumb_dbus_path,
|
||||
iface = eldbus_service_interface_register(ed->conn, _ethumb_dbus_path,
|
||||
&server_desc);
|
||||
EINA_SAFETY_ON_NULL_RETURN(iface);
|
||||
|
||||
edbus_service_object_data_set(iface, DAEMON, ed);
|
||||
eldbus_service_object_data_set(iface, DAEMON, ed);
|
||||
|
||||
_ethumbd_timeout_start(ed);
|
||||
}
|
||||
|
@ -1643,7 +1643,7 @@ _ethumb_dbus_request_name_cb(void *data, const EDBus_Message *msg, EDBus_Pending
|
|||
static int
|
||||
_ethumb_dbus_setup(Ethumbd *ed)
|
||||
{
|
||||
edbus_name_request(ed->conn, _ethumb_dbus_bus_name, 0,
|
||||
eldbus_name_request(ed->conn, _ethumb_dbus_bus_name, 0,
|
||||
_ethumb_dbus_request_name_cb, ed);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1653,7 +1653,7 @@ _ethumb_dbus_finish(Ethumbd *ed)
|
|||
{
|
||||
_process_queue_stop(ed);
|
||||
_ethumb_table_clear(ed);
|
||||
edbus_connection_unref(ed->conn);
|
||||
eldbus_connection_unref(ed->conn);
|
||||
free(ed->queue.table);
|
||||
free(ed->queue.list);
|
||||
}
|
||||
|
@ -1737,9 +1737,9 @@ main(int argc, char *argv[])
|
|||
goto finish;
|
||||
}
|
||||
|
||||
if (!edbus_init())
|
||||
if (!eldbus_init())
|
||||
{
|
||||
ERR("could not init edbus.");
|
||||
ERR("could not init eldbus.");
|
||||
exit_value = -1;
|
||||
goto finish;
|
||||
}
|
||||
|
@ -1764,35 +1764,35 @@ main(int argc, char *argv[])
|
|||
if (quit_option)
|
||||
goto finish;
|
||||
|
||||
ed.conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
ed.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
if (!ed.conn)
|
||||
{
|
||||
ERR("could not connect to session bus.");
|
||||
exit_value = -3;
|
||||
goto finish_edbus;
|
||||
goto finish_eldbus;
|
||||
}
|
||||
|
||||
ed.timeout = timeout;
|
||||
|
||||
if (!_ethumb_dbus_setup(&ed))
|
||||
{
|
||||
edbus_connection_unref(ed.conn);
|
||||
eldbus_connection_unref(ed.conn);
|
||||
ERR("could not setup dbus connection.");
|
||||
exit_value = -5;
|
||||
goto finish_edbus;
|
||||
goto finish_eldbus;
|
||||
}
|
||||
|
||||
ecore_main_loop_begin();
|
||||
_ethumb_dbus_finish(&ed);
|
||||
|
||||
finish_edbus:
|
||||
finish_eldbus:
|
||||
if (_log_domain >= 0)
|
||||
{
|
||||
eina_log_domain_unregister(_log_domain);
|
||||
_log_domain = -1;
|
||||
}
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
finish:
|
||||
if (ed.slave.exe)
|
||||
ecore_exe_quit(ed.slave.exe);
|
||||
|
|
|
@ -1,241 +0,0 @@
|
|||
//Compile with:
|
||||
// gcc -o banshee banshee.c `pkg-config --cflags --libs edbus2 ecore eina`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "org.bansheeproject.Banshee"
|
||||
#define ENGINE_PATH "/org/bansheeproject/Banshee/PlayerEngine"
|
||||
#define CONTROLLER_PATH "/org/bansheeproject/Banshee/PlaybackController"
|
||||
#define MPRIS_PATH "/org/mpris/MediaPlayer2"
|
||||
|
||||
#define ENGINE_IFACE "org.bansheeproject.Banshee.PlayerEngine"
|
||||
#define CONTROLLER_IFACE "org.bansheeproject.Banshee.PlaybackController"
|
||||
#define MPRIS_IFACE "org.mpris.MediaPlayer2.Playlists"
|
||||
|
||||
static EDBus_Signal_Handler *state_changed2;
|
||||
|
||||
static Eina_Bool
|
||||
_timeout_application(void *data EINA_UNUSED)
|
||||
{
|
||||
printf("\n## ecore_main_loop_quit()\n");
|
||||
ecore_main_loop_quit();
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_get_playlists(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Message_Iter *array, *struct_entry;
|
||||
const char *path, *name, *image;
|
||||
int i = 0;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "a(oss)", &array))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
printf("on_get_playlists() \n\n");
|
||||
while (edbus_message_iter_get_and_next(array, 'r', &struct_entry))
|
||||
{
|
||||
if (!edbus_message_iter_arguments_get(struct_entry, "oss", &path, &name, &image))
|
||||
{
|
||||
printf("error on edbus_massage_iterator_arguments_get()");
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
printf("%d - %s | %s | %s\n", i, path, name, image);
|
||||
}
|
||||
printf("end of on_get_playlists()\n\n");
|
||||
}
|
||||
|
||||
static void
|
||||
iterate_dict(void *data EINA_UNUSED, const void *key, EDBus_Message_Iter *var)
|
||||
{
|
||||
const char *skey = key;
|
||||
|
||||
if (!strcmp(skey, "PlaylistCount"))
|
||||
{
|
||||
unsigned count;
|
||||
if (!edbus_message_iter_arguments_get(var, "u", &count))
|
||||
printf("error2\n");
|
||||
printf("PlaylistCount=%u\n", count);
|
||||
}
|
||||
else if (!strcmp(skey, "Orderings"))
|
||||
{
|
||||
EDBus_Message_Iter *as;
|
||||
const char *txt;
|
||||
printf("- Orderings\n");
|
||||
if (!edbus_message_iter_arguments_get(var, "as", &as))
|
||||
printf("error1\n");
|
||||
while (edbus_message_iter_get_and_next(as, 's', &txt))
|
||||
printf("\t%s\n", txt);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
playlist_get_all_cb(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Message_Iter *array;
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (edbus_message_arguments_get(msg, "a{sv}", &array))
|
||||
edbus_message_iter_dict_iterate(array, "sv", iterate_dict, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
on_introspect(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *string;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "s", &string))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_introspect() data=\n%s\n\n", string);
|
||||
}
|
||||
|
||||
static void
|
||||
on_next_or_pause(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *status = data;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
printf("%s\n", status);
|
||||
}
|
||||
|
||||
static void
|
||||
on_state_changed(void *data EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
const char *status;
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "s", &status))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_state_changed = %s\n", status);
|
||||
}
|
||||
|
||||
static void
|
||||
on_state_changed2(void *data EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
const char *status;
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "s", &status))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_state_changed2 = %s\n", status);
|
||||
edbus_signal_handler_unref(state_changed2);
|
||||
state_changed2 = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
on_banshee_startup(void *data EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
const char *bus, *older_id, *new_id;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
if (!edbus_message_arguments_get(msg, "sss", &bus, &older_id, &new_id))
|
||||
{
|
||||
printf("Error getting arguments from NameOwnerChanged");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("banshee started on id=%s\n", new_id);
|
||||
}
|
||||
|
||||
static void
|
||||
on_name_owner_changed(void *data EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
const char *bus, *older_id, *new_id;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(edbus_message_error_get(msg, NULL, NULL));
|
||||
if (!edbus_message_arguments_get(msg, "sss", &bus, &older_id, &new_id))
|
||||
{
|
||||
printf("Error getting arguments from NameOwnerChanged");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("bus = %s older=%s new=%s\n\n", bus, older_id, new_id);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Object *engine_obj, *controller_obj, *mpris_obj;
|
||||
EDBus_Proxy *engine, *controler, *playlists;
|
||||
EDBus_Signal_Handler *sh;
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
engine_obj = edbus_object_get(conn, BUS, ENGINE_PATH);
|
||||
controller_obj = edbus_object_get(conn, BUS, CONTROLLER_PATH);
|
||||
mpris_obj = edbus_object_get(conn, BUS, MPRIS_PATH);
|
||||
|
||||
engine = edbus_proxy_get(engine_obj, ENGINE_IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(engine, end);
|
||||
controler = edbus_proxy_get(controller_obj, CONTROLLER_IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(controler, end);
|
||||
playlists = edbus_proxy_get(mpris_obj, MPRIS_IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(playlists, end);
|
||||
|
||||
edbus_object_introspect(engine_obj, on_introspect, NULL);
|
||||
|
||||
edbus_proxy_signal_handler_add(engine, "StateChanged", on_state_changed, NULL);
|
||||
edbus_proxy_call(engine, "Pause", on_next_or_pause, "Pause", -1, "");
|
||||
|
||||
edbus_proxy_call(controler, "Next", on_next_or_pause, "Next", -1, "b", EINA_TRUE);
|
||||
|
||||
edbus_proxy_property_get_all(playlists, playlist_get_all_cb, NULL);
|
||||
edbus_proxy_call(playlists, "GetPlaylists", on_get_playlists, NULL, -1,
|
||||
"uusb", (unsigned)0, (unsigned)30, "asc", EINA_FALSE);
|
||||
|
||||
edbus_signal_handler_add(conn, BUS, ENGINE_PATH, ENGINE_IFACE,
|
||||
"StateChanged", on_state_changed, NULL);
|
||||
state_changed2 = edbus_signal_handler_add(conn, BUS, ENGINE_PATH, ENGINE_IFACE,
|
||||
"StateChanged", on_state_changed2, NULL);
|
||||
|
||||
sh = edbus_signal_handler_add(conn, EDBUS_FDO_BUS, EDBUS_FDO_PATH,
|
||||
EDBUS_FDO_INTERFACE, "NameOwnerChanged",
|
||||
on_name_owner_changed, NULL);
|
||||
edbus_signal_handler_match_extra_set(sh, "arg0", BUS, NULL);
|
||||
|
||||
sh = edbus_signal_handler_add(conn, EDBUS_FDO_BUS, EDBUS_FDO_PATH,
|
||||
EDBUS_FDO_INTERFACE, "NameOwnerChanged",
|
||||
on_banshee_startup, NULL);
|
||||
edbus_signal_handler_match_extra_set(sh, "arg0", BUS, "arg1", "", NULL);
|
||||
|
||||
ecore_timer_add(50, _timeout_application, NULL);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
end:
|
||||
/**
|
||||
* It's not necessary unref all objecs, proxys and signal handlers
|
||||
* When a parent have ref = 0, it will unref all your childrens
|
||||
* before free it self.
|
||||
**/
|
||||
edbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -1,393 +0,0 @@
|
|||
//Compile with:
|
||||
// gcc -o complex-types-server complex-types-server.c `pkg-config --cflags --libs edbus2 ecore`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "com.profusion"
|
||||
#define PATH "/com/profusion/Test"
|
||||
#define IFACE "com.profusion.Test"
|
||||
|
||||
static char *resp2;
|
||||
/* dummy, incremented each time DBus.Properties.Get() is called */
|
||||
static int int32 = 35;
|
||||
static Ecore_Timer *timer;
|
||||
|
||||
static EDBus_Message *
|
||||
_receive_array(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
EDBus_Message_Iter *array;
|
||||
const char *txt;
|
||||
|
||||
printf("- receiveArray\n");
|
||||
if (!edbus_message_arguments_get(msg, "as", &array))
|
||||
{
|
||||
printf("Error on edbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 's', &txt))
|
||||
printf("%s\n", txt);
|
||||
printf("}\n\n");
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_receive_array_of_string_int_with_size(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
EDBus_Message_Iter *array, *struct_si;
|
||||
int size, i = 0;
|
||||
|
||||
printf("- receiveArrayOfStringIntWithSize\n{\n");
|
||||
if (!edbus_message_arguments_get(msg, "ia(si)", &size, &array))
|
||||
{
|
||||
printf("Error on edbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 'r', &struct_si))
|
||||
{
|
||||
const char *txt;
|
||||
int num;
|
||||
if (!edbus_message_iter_arguments_get(struct_si, "si", &txt, &num))
|
||||
{
|
||||
printf("Error on edbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
printf("%s | %d\n", txt, num);
|
||||
i++;
|
||||
}
|
||||
printf("size in msg %d | size read %d\n", size, i);
|
||||
printf("}\n\n");
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_receive_variant(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
EDBus_Message_Iter *var, *array, *main_iter;
|
||||
|
||||
main_iter = edbus_message_iter_get(reply);
|
||||
var = edbus_message_iter_container_new(main_iter, 'v', "as");
|
||||
edbus_message_iter_arguments_append(var, "as", &array);
|
||||
|
||||
edbus_message_iter_arguments_append(array, "s", "item1");
|
||||
edbus_message_iter_arguments_append(array, "s", "item2");
|
||||
edbus_message_iter_arguments_append(array, "s", "item3");
|
||||
|
||||
edbus_message_iter_container_close(var, array);
|
||||
edbus_message_iter_container_close(main_iter, var);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_variant(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
EDBus_Message_Iter *variant;
|
||||
char *type;
|
||||
|
||||
printf("- sendVariantData\n{\n");
|
||||
if (!edbus_message_arguments_get(msg, "v", &variant))
|
||||
{
|
||||
printf("Error on edbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
type = edbus_message_iter_signature_get(variant);
|
||||
if (type[1])
|
||||
{
|
||||
printf("It is a complex type, not handle yet.\n");
|
||||
free(type);
|
||||
return reply;
|
||||
}
|
||||
|
||||
switch (type[0])
|
||||
{
|
||||
case 's':
|
||||
case 'o':
|
||||
{
|
||||
char *txt;
|
||||
edbus_message_iter_arguments_get(variant, type, &txt);
|
||||
printf("type = %c value = %s\n", type[0], txt);
|
||||
break;
|
||||
}
|
||||
case 'i':
|
||||
{
|
||||
int num;
|
||||
edbus_message_iter_arguments_get(variant, type, &num);
|
||||
printf("type = %c value = %d\n", type[0], num);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("Unhandled type\n");
|
||||
}
|
||||
}
|
||||
|
||||
printf("}\n\n");
|
||||
|
||||
free(type);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_array_int(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
EDBus_Message_Iter *iter, *array;
|
||||
int i;
|
||||
|
||||
printf("- sendArrayInt\n\n");
|
||||
|
||||
iter = edbus_message_iter_get(reply);
|
||||
array = edbus_message_iter_container_new(iter, 'a', "i");
|
||||
for (i = 0; i < 5; i++)
|
||||
edbus_message_iter_arguments_append(array, "i", i);
|
||||
edbus_message_iter_container_close(iter, array);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_array(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
EDBus_Message_Iter *iter, *array;
|
||||
const char *array_string[5] = {"qqqq", "wwwww", "eeeeee", "rrrrr", "ttttt"};
|
||||
int i;
|
||||
|
||||
printf("sendArray\n\n");
|
||||
|
||||
iter = edbus_message_iter_get(reply);
|
||||
array = edbus_message_iter_container_new(iter, 'a', "s");
|
||||
for (i = 0; i < 5; i++)
|
||||
edbus_message_iter_arguments_append(array, "s", array_string[i]);
|
||||
edbus_message_iter_container_close(iter, array);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_plus_one(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
int num;
|
||||
|
||||
printf("- plusOne\n\n");
|
||||
if (!edbus_message_arguments_get(msg, "i", &num))
|
||||
{
|
||||
printf("Error on edbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
num++;
|
||||
edbus_message_arguments_append(reply, "i", num);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_double_container(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message_Iter *array1, *array2, *structure;
|
||||
int num1, num2;
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "a(ii)a(ii)", &array1, &array2))
|
||||
{
|
||||
printf("Error on edbus_message_arguments_get()\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
printf("DoubleCountainer\n{\nArray1:\n");
|
||||
while (edbus_message_iter_get_and_next(array1, 'r', &structure))
|
||||
{
|
||||
edbus_message_iter_arguments_get(structure, "ii", &num1, &num2);
|
||||
printf("1 %d - 2 %d\n", num1, num2);
|
||||
}
|
||||
|
||||
printf("Array2:\n");
|
||||
while (edbus_message_iter_get_and_next(array2, 'r', &structure))
|
||||
{
|
||||
edbus_message_iter_arguments_get(structure, "ii", &num1, &num2);
|
||||
printf("1 %d - 2 %d\n", num1, num2);
|
||||
}
|
||||
printf("}\n\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_properties_get(const EDBus_Service_Interface *iface EINA_UNUSED, const char *propname, EDBus_Message_Iter *iter, const EDBus_Message *request_msg EINA_UNUSED, EDBus_Message **error EINA_UNUSED)
|
||||
{
|
||||
printf("Properties_get - %s\n", propname);
|
||||
if (!strcmp(propname, "Resp2"))
|
||||
edbus_message_iter_basic_append(iter, 's', resp2);
|
||||
else if (!strcmp(propname, "text"))
|
||||
edbus_message_iter_basic_append(iter, 's', "lalalala");
|
||||
else if (!strcmp(propname, "int32"))
|
||||
{
|
||||
edbus_message_iter_arguments_append(iter, "i", int32);
|
||||
int32++;
|
||||
}
|
||||
else if (!strcmp(propname, "st"))
|
||||
{
|
||||
EDBus_Message_Iter *st;
|
||||
edbus_message_iter_arguments_append(iter, "(ss)", &st);
|
||||
edbus_message_iter_arguments_append(st, "ss", "string1", "string2");
|
||||
edbus_message_iter_container_close(iter, st);
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_properties_set(const EDBus_Service_Interface *iface EINA_UNUSED, const char *propname, EDBus_Message_Iter *iter, const EDBus_Message *msg)
|
||||
{
|
||||
char *type;
|
||||
|
||||
type = edbus_message_iter_signature_get(iter);
|
||||
|
||||
if (!strcmp(propname, "int32"))
|
||||
{
|
||||
int num;
|
||||
if (type[0] != 'i')
|
||||
goto invalid_signature;
|
||||
edbus_message_iter_arguments_get(iter, "i", &num);
|
||||
printf("int32 was set to: %d, previously was: %d\n", num, int32);
|
||||
int32 = num;
|
||||
}
|
||||
else if (!strcmp(propname, "Resp2"))
|
||||
{
|
||||
const char *txt;
|
||||
if (type[0] != 's')
|
||||
goto invalid_signature;
|
||||
edbus_message_iter_arguments_get(iter, "s", &txt);
|
||||
printf("Resp2 was set to: %s, previously was: %s\n", txt, resp2);
|
||||
free(resp2);
|
||||
resp2 = strdup(txt);
|
||||
}
|
||||
free(type);
|
||||
return edbus_message_method_return_new(msg);
|
||||
|
||||
invalid_signature:
|
||||
free(type);
|
||||
return edbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidSignature",
|
||||
"Invalid type.");
|
||||
}
|
||||
|
||||
static const EDBus_Method methods[] = {
|
||||
{
|
||||
"ReceiveArray", EDBUS_ARGS({"as", "array_of_strings"}),
|
||||
NULL, _receive_array
|
||||
},
|
||||
{
|
||||
"ReceiveArrayOfStringIntWithSize",
|
||||
EDBUS_ARGS({"i", "size_of_array"}, {"a(si)", "array"}),
|
||||
NULL, _receive_array_of_string_int_with_size, 0
|
||||
},
|
||||
{
|
||||
"SendVariantData", EDBUS_ARGS({"v", "variant_data"}),
|
||||
NULL, _send_variant
|
||||
},
|
||||
{
|
||||
"ReceiveVariantData", NULL, EDBUS_ARGS({"v", "variant_data"}),
|
||||
_receive_variant
|
||||
},
|
||||
{
|
||||
"SendArrayInt", NULL,
|
||||
EDBUS_ARGS({"ai", "array_of_int"}), _send_array_int, 0
|
||||
},
|
||||
{
|
||||
"SendArray", NULL, EDBUS_ARGS({"as", "array_string"}),
|
||||
_send_array
|
||||
},
|
||||
{
|
||||
"PlusOne", EDBUS_ARGS({"i", "integer"}),
|
||||
EDBUS_ARGS({"i", "integer_plus_one"}), _plus_one
|
||||
},
|
||||
{
|
||||
"DoubleContainner", EDBUS_ARGS({"a(ii)", "array1"}, {"a(ii)", "array2"}),
|
||||
NULL, _double_container
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const EDBus_Property properties[] = {
|
||||
{ "Resp2", "s", NULL, _properties_set },
|
||||
{ "text", "s" },
|
||||
{ "int32", "i", NULL, _properties_set },
|
||||
{ "st", "(ss)" },
|
||||
{ }
|
||||
};
|
||||
|
||||
static const EDBus_Service_Interface_Desc iface_desc = {
|
||||
IFACE, methods, NULL, properties, _properties_get
|
||||
};
|
||||
|
||||
static Eina_Bool _emit_changed(void *data)
|
||||
{
|
||||
EDBus_Service_Interface *iface = data;
|
||||
edbus_service_property_changed(iface, "int32");
|
||||
edbus_service_property_invalidate_set(iface, "Resp2", EINA_TRUE);
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static void
|
||||
on_name_request(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
unsigned int reply;
|
||||
EDBus_Service_Interface *iface = data;
|
||||
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("error on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "u", &reply))
|
||||
{
|
||||
printf("error geting arguments on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (reply != EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
|
||||
{
|
||||
printf("error name already in use\n");
|
||||
return;
|
||||
}
|
||||
|
||||
timer = ecore_timer_add(3, _emit_changed, iface);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Service_Interface *iface;
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
resp2 = malloc(sizeof(char) * 5);
|
||||
strcpy(resp2, "test");
|
||||
iface = edbus_service_interface_register(conn, PATH, &iface_desc);
|
||||
edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
|
||||
on_name_request, iface);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
free(resp2);
|
||||
ecore_timer_del(timer);
|
||||
edbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -1,284 +0,0 @@
|
|||
//Compile with:
|
||||
// gcc -o complex-types complex-types.c `pkg-config --cflags --libs edbus2 ecore`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "com.profusion"
|
||||
#define PATH "/com/profusion/Test"
|
||||
#define IFACE "com.profusion.Test"
|
||||
|
||||
EDBus_Connection *conn;
|
||||
|
||||
static Eina_Bool
|
||||
_timer1_cb(void *data EINA_UNUSED)
|
||||
{
|
||||
printf("\nFishing...\n");
|
||||
ecore_main_loop_quit();
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static void
|
||||
on_plus_one(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
int num2 = 0;
|
||||
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
if (!edbus_message_arguments_get(msg, "i", &num2))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_plus_one() %d\n", num2);
|
||||
}
|
||||
|
||||
static void
|
||||
set_property_resp2(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("set_property_resp2()\n");
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
printf("Message error %s - %s\n\n", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
get_property_resp2(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
EDBus_Message_Iter *variant = NULL;
|
||||
char *type;
|
||||
char *resp2;
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("get_property_resp2()\n");
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
printf("Message error %s - %s\n\n", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
if (!edbus_message_arguments_get(msg, "v", &variant))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
type = edbus_message_iter_signature_get(variant);
|
||||
if (type[1])
|
||||
{
|
||||
printf("It is a complex type, not handle yet.\n\n");
|
||||
return;
|
||||
}
|
||||
if (type[0] != 's')
|
||||
{
|
||||
printf("Expected type is string.\n\n");
|
||||
return;
|
||||
}
|
||||
if (!edbus_message_iter_arguments_get(variant, "s", &resp2))
|
||||
{
|
||||
printf("error in edbus_message_iter_arguments_get()\n\n");
|
||||
return;
|
||||
}
|
||||
printf("resp2=%s\n", resp2);
|
||||
free(type);
|
||||
|
||||
edbus_proxy_property_set(proxy, "Resp2", "s", &"lalala", set_property_resp2, NULL);
|
||||
edbus_proxy_property_set(proxy, "int32", "i", (void*)(intptr_t)99, set_property_resp2, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
on_send_array_int(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Message_Iter *array = NULL;
|
||||
int num;
|
||||
|
||||
printf("on_send_array_int()\n");
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
if (!edbus_message_arguments_get(msg, "ai", &array))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 'i', &num))
|
||||
{
|
||||
printf("%d\n", num);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_send_array(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Message_Iter *array = NULL;
|
||||
char *txt = NULL;
|
||||
char *string[10];
|
||||
int i = 0;
|
||||
int z;
|
||||
|
||||
printf("on_send_array()\n");
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
if (!edbus_message_arguments_get(msg, "as", &array))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 's', &txt))
|
||||
{
|
||||
string[i] = txt;
|
||||
i++;
|
||||
}
|
||||
|
||||
for (z = 0; z < i; z++)
|
||||
printf("string = %s\n", string[z]);
|
||||
}
|
||||
|
||||
static void
|
||||
on_receive_array_with_size(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("on_receive_array_with_size()\n");
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
fprintf(stderr, "Error: %s %s\n", errname, errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_send_variant(void *data EINA_UNUSED, const EDBus_Message *msg EINA_UNUSED, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
printf("on_send_variant()\n\n");
|
||||
}
|
||||
|
||||
static void
|
||||
on_receive_array(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("on_receive_array()\n");
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
fprintf(stderr, "Error: %s %s\n", errname, errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
EDBus_Object *test2_obj;
|
||||
EDBus_Proxy *test2_proxy;
|
||||
EDBus_Pending *pending;
|
||||
EDBus_Message_Iter *iter, *array_of_string, *variant;
|
||||
EDBus_Message_Iter *array_itr, *structure;
|
||||
EDBus_Message *msg;
|
||||
int size_of_array = 5;
|
||||
const char *array[5] = { "aaaa", "bbbb", "cccc", "dddd", "eeee" };
|
||||
int i;
|
||||
int plus_one = 24;
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
test2_obj = edbus_object_get(conn, BUS, PATH);
|
||||
test2_proxy = edbus_proxy_get(test2_obj, IFACE);
|
||||
|
||||
msg = edbus_proxy_method_call_new(test2_proxy, "ReceiveArray");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
array_of_string = edbus_message_iter_container_new(iter, 'a',"s");
|
||||
if (!array_of_string) printf("array_of_string == NULL\n\n");
|
||||
for (i = 0; i < 5; i++)
|
||||
edbus_message_iter_basic_append(array_of_string, 's', array[i]);
|
||||
edbus_message_iter_container_close(iter, array_of_string);
|
||||
pending = edbus_proxy_send(test2_proxy, msg, on_receive_array, NULL, -1);
|
||||
if (!pending) printf("Error in edbus_proxy_send()\n\n");
|
||||
|
||||
msg = edbus_proxy_method_call_new(test2_proxy, "ReceiveArrayOfStringIntWithSize");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
if (!edbus_message_iter_arguments_append(iter, "ia(si)", size_of_array, &array_of_string))
|
||||
printf("error on edbus_massage_iterator_arguments_set()\n\n");
|
||||
for (i = 0; i < size_of_array; i++)
|
||||
{
|
||||
EDBus_Message_Iter *struct_of_si;
|
||||
edbus_message_iter_arguments_append(array_of_string, "(si)", &struct_of_si);
|
||||
edbus_message_iter_arguments_append(struct_of_si, "si", array[i], i);
|
||||
edbus_message_iter_container_close(array_of_string, struct_of_si);
|
||||
}
|
||||
edbus_message_iter_container_close(iter, array_of_string);
|
||||
pending = edbus_proxy_send(test2_proxy, msg, on_receive_array_with_size, NULL, -1);
|
||||
|
||||
msg = edbus_proxy_method_call_new(test2_proxy, "SendVariantData");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
variant = edbus_message_iter_container_new(iter, 'v', "s");
|
||||
edbus_message_iter_basic_append(variant, 's', "test");
|
||||
edbus_message_iter_container_close(iter, variant);
|
||||
pending = edbus_proxy_send(test2_proxy, msg, on_send_variant, NULL, -1);
|
||||
|
||||
msg = edbus_proxy_method_call_new(test2_proxy, "DoubleContainner");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
/**
|
||||
* edbus_message_iterator_arguments_set(itr, "a(ii)a(ii)", &array_itr, &array_itr2);
|
||||
* this will cause a error, we could not open another container until
|
||||
* we close the first one
|
||||
*/
|
||||
edbus_message_iter_arguments_append(iter, "a(ii)", &array_itr);
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
edbus_message_iter_arguments_append(array_itr, "(ii)", &structure);
|
||||
edbus_message_iter_arguments_append(structure, "ii", i, i*i);
|
||||
edbus_message_iter_container_close(array_itr, structure);
|
||||
}
|
||||
edbus_message_iter_container_close(iter, array_itr);
|
||||
edbus_message_iter_arguments_append(iter, "a(ii)", &array_itr);
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
edbus_message_iter_arguments_append(array_itr, "(ii)", &structure);
|
||||
edbus_message_iter_arguments_append(structure, "ii", i, i*i*i);
|
||||
edbus_message_iter_container_close(array_itr, structure);
|
||||
}
|
||||
edbus_message_iter_container_close(iter, array_itr);
|
||||
edbus_proxy_send(test2_proxy, msg, NULL, NULL, -1);
|
||||
|
||||
pending = edbus_proxy_call(test2_proxy, "SendArrayInt", on_send_array_int, NULL,
|
||||
-1 , "");
|
||||
|
||||
pending = edbus_proxy_call(test2_proxy, "SendArray", on_send_array, NULL,
|
||||
-1 , "");
|
||||
|
||||
pending = edbus_proxy_call(test2_proxy, "PlusOne", on_plus_one, NULL,
|
||||
-1 , "i", plus_one);
|
||||
|
||||
pending = edbus_proxy_property_get(test2_proxy, "Resp2", get_property_resp2, test2_proxy);
|
||||
|
||||
ecore_timer_add(10, _timer1_cb, NULL);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
edbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -1,247 +0,0 @@
|
|||
//Compile with:
|
||||
// gcc -o server server.c `pkg-config --cflags --libs edbus2 ecore`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "org.Enlightenment"
|
||||
#define PATH "/org/enlightenment"
|
||||
#define PATH_TEST_SON "/org/enlightenment/son"
|
||||
#define INTERFACE "org.enlightenment.Test"
|
||||
|
||||
static EDBus_Connection *conn;
|
||||
|
||||
static EDBus_Message *
|
||||
_hello(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *message)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(message);
|
||||
edbus_message_arguments_append(reply, "s", "Hello World");
|
||||
printf("Hello\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_quit(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *message)
|
||||
{
|
||||
printf("Quit\n");
|
||||
ecore_main_loop_quit();
|
||||
return edbus_message_method_return_new(message);
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
TEST_SIGNAL_ALIVE = 0,
|
||||
TEST_SIGNAL_HELLO
|
||||
};
|
||||
|
||||
static Eina_Bool
|
||||
send_signal_alive(void *data)
|
||||
{
|
||||
EDBus_Service_Interface *iface = data;
|
||||
edbus_service_signal_emit(iface, TEST_SIGNAL_ALIVE);
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
send_signal_hello(void *data)
|
||||
{
|
||||
EDBus_Service_Interface *iface = data;
|
||||
edbus_service_signal_emit(iface, TEST_SIGNAL_HELLO, "Hello World");
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_bool(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
Eina_Bool bool;
|
||||
if (!edbus_message_arguments_get(msg, "b", &bool))
|
||||
printf("edbus_message_arguments_get() error\n");
|
||||
edbus_message_arguments_append(reply, "b", bool);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_byte(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
unsigned char byte;
|
||||
if (!edbus_message_arguments_get(msg, "y", &byte))
|
||||
printf("edbus_message_arguments_get() error\n");
|
||||
edbus_message_arguments_append(reply, "y", byte);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_uint32(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
unsigned int uint32;
|
||||
if (!edbus_message_arguments_get(msg, "u", &uint32))
|
||||
printf("edbus_message_arguments_get() error\n");
|
||||
edbus_message_arguments_append(reply, "u", uint32);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_int32(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
int int32;
|
||||
if (!edbus_message_arguments_get(msg, "i", &int32))
|
||||
printf("edbus_message_arguments_get() error\n");
|
||||
edbus_message_arguments_append(reply, "i", int32);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_int16(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
short int int16;
|
||||
if (!edbus_message_arguments_get(msg, "n", &int16))
|
||||
printf("edbus_message_arguments_get() error\n");
|
||||
edbus_message_arguments_append(reply, "n", int16);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_double(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
double d;
|
||||
if (!edbus_message_arguments_get(msg, "d", &d))
|
||||
printf("edbus_message_arguments_get() error\n");
|
||||
edbus_message_arguments_append(reply, "d", d);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_send_string(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
const char *txt;
|
||||
if (!edbus_message_arguments_get(msg, "s", &txt))
|
||||
printf("edbus_message_arguments_get() error\n");
|
||||
edbus_message_arguments_append(reply, "s", txt);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_resp_async(void *data)
|
||||
{
|
||||
EDBus_Message *msg = data;
|
||||
edbus_message_arguments_append(msg, "s", "Async test ok");
|
||||
edbus_connection_send(conn, msg, NULL, NULL, -1);
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static EDBus_Message *
|
||||
_async_test(const EDBus_Service_Interface *iface EINA_UNUSED, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply = edbus_message_method_return_new(msg);
|
||||
printf("Received a call to AsyncTest.\n");
|
||||
printf("Response will be send in 5 seconds.\n");
|
||||
ecore_timer_add(5, _resp_async, reply);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const EDBus_Signal signals[] = {
|
||||
[TEST_SIGNAL_ALIVE] = {"Alive", NULL, 0},
|
||||
[TEST_SIGNAL_HELLO] = {"Hello", EDBUS_ARGS({ "s", "message" }), 0},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const EDBus_Method methods[] = {
|
||||
{
|
||||
"Hello", NULL, EDBUS_ARGS({"s", "message"}),
|
||||
_hello
|
||||
},
|
||||
{
|
||||
"Quit", NULL, NULL,
|
||||
_quit, EDBUS_METHOD_FLAG_DEPRECATED
|
||||
},
|
||||
{ "SendBool", EDBUS_ARGS({"b", "bool"}), EDBUS_ARGS({"b", "bool"}),
|
||||
_send_bool
|
||||
},
|
||||
{ "SendByte", EDBUS_ARGS({"y", "byte"}), EDBUS_ARGS({"y", "byte"}),
|
||||
_send_byte
|
||||
},
|
||||
{ "SendUint32", EDBUS_ARGS({"u", "uint32"}), EDBUS_ARGS({"u", "uint32"}),
|
||||
_send_uint32
|
||||
},
|
||||
{ "SendInt32", EDBUS_ARGS({"i", "int32"}), EDBUS_ARGS({"i", "int32"}),
|
||||
_send_int32
|
||||
},
|
||||
{ "SendInt16", EDBUS_ARGS({"n", "int16"}), EDBUS_ARGS({"n", "int16"}),
|
||||
_send_int16
|
||||
},
|
||||
{ "SendDouble", EDBUS_ARGS({"d", "double"}), EDBUS_ARGS({"d", "double"}),
|
||||
_send_double
|
||||
},
|
||||
{ "SendString", EDBUS_ARGS({"s", "string"}), EDBUS_ARGS({"s", "string"}),
|
||||
_send_string
|
||||
},
|
||||
{ "AsyncTest", NULL, EDBUS_ARGS({"s", "text"}),
|
||||
_async_test
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const EDBus_Service_Interface_Desc iface_desc = {
|
||||
INTERFACE, methods, signals
|
||||
};
|
||||
|
||||
static void
|
||||
on_name_request(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Service_Interface *iface;
|
||||
unsigned int reply;
|
||||
|
||||
iface = data;
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("error on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "u", &reply))
|
||||
{
|
||||
printf("error geting arguments on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (reply != EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
|
||||
{
|
||||
printf("error name already in use\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ecore_timer_add(5, send_signal_alive, iface);
|
||||
ecore_timer_add(6, send_signal_hello, iface);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
EDBus_Service_Interface *iface;
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
iface = edbus_service_interface_register(conn, PATH, &iface_desc);
|
||||
edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
|
||||
on_name_request, iface);
|
||||
|
||||
edbus_service_interface_register(conn, PATH_TEST_SON, &iface_desc);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
edbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
//Compile with:
|
||||
// gcc -o simple-signal-emit simple-signal-emit.c `pkg-config --cflags --libs edbus2`
|
||||
|
||||
#include <EDBus.h>
|
||||
|
||||
enum {
|
||||
TEST_SIGNAL_ALIVE,
|
||||
TEST_SIGNAL_PROP,
|
||||
TEST_SIGNAL_NAME,
|
||||
};
|
||||
|
||||
static const EDBus_Signal test_signals[] = {
|
||||
[TEST_SIGNAL_ALIVE] = { "Alive" },
|
||||
[TEST_SIGNAL_PROP] = { "Properties", EDBUS_ARGS({ "a{ss}", "properties"}) },
|
||||
[TEST_SIGNAL_NAME] = { "Name", EDBUS_ARGS({ "s", "name"}) },
|
||||
{ }
|
||||
};
|
||||
|
||||
/* signal with complex arguments (a dict) */
|
||||
static void emit_properties(EDBus_Service_Interface *iface)
|
||||
{
|
||||
EDBus_Message *alive2;
|
||||
EDBus_Message_Iter *iter, *dict;
|
||||
struct keyval {
|
||||
const char *key;
|
||||
const char *val;
|
||||
} keyval[] = {
|
||||
{ "key1", "val1" },
|
||||
{ "key2", "val2" },
|
||||
{ }
|
||||
};
|
||||
struct keyval *k;
|
||||
|
||||
alive2 = edbus_service_signal_new(iface, TEST_SIGNAL_PROP);
|
||||
iter = edbus_message_iter_get(alive2);
|
||||
dict = edbus_message_iter_container_new(iter, 'a', "{ss}");
|
||||
|
||||
for (k = keyval; k && k->key; k++)
|
||||
{
|
||||
EDBus_Message_Iter *entry = edbus_message_iter_container_new(dict, 'e',
|
||||
NULL);
|
||||
edbus_message_iter_arguments_append(entry, "ss", k->key, k->val);
|
||||
edbus_message_iter_container_close(dict, entry);
|
||||
}
|
||||
|
||||
edbus_message_iter_container_close(iter, dict);
|
||||
edbus_service_signal_send(iface, alive2);
|
||||
}
|
||||
|
||||
/* signal with basic args */
|
||||
static void emit_name(EDBus_Service_Interface *iface)
|
||||
{
|
||||
edbus_service_signal_emit(iface, TEST_SIGNAL_NAME, "TEST");
|
||||
}
|
||||
|
||||
/* simple signal example */
|
||||
static void emit_alive(EDBus_Service_Interface *iface)
|
||||
{
|
||||
edbus_service_signal_emit(iface, TEST_SIGNAL_ALIVE);
|
||||
}
|
||||
|
||||
static const EDBus_Service_Interface_Desc iface_desc = {
|
||||
"org.enlightenment.Test", NULL, test_signals
|
||||
};
|
||||
|
||||
int main(void)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Service_Interface *iface;
|
||||
|
||||
edbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
iface = edbus_service_interface_register(conn, "/org/enlightenment",
|
||||
&iface_desc);
|
||||
|
||||
emit_alive(iface);
|
||||
emit_name(iface);
|
||||
emit_properties(iface);
|
||||
|
||||
edbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -4,19 +4,19 @@ AM_CPPFLAGS = \
|
|||
-I$(top_srcdir)/src/lib/eina \
|
||||
-I$(top_srcdir)/src/lib/eo \
|
||||
-I$(top_srcdir)/src/lib/ecore \
|
||||
-I$(top_srcdir)/src/lib/edbus \
|
||||
-I$(top_srcdir)/src/lib/eldbus \
|
||||
-I$(top_builddir)/src/lib/eina \
|
||||
-I$(top_builddir)/src/lib/eo \
|
||||
-I$(top_builddir)/src/lib/ecore \
|
||||
-I$(top_builddir)/src/lib/edbus \
|
||||
@EDBUS_CFLAGS@
|
||||
-I$(top_builddir)/src/lib/eldbus \
|
||||
@ELDBUS_CFLAGS@
|
||||
|
||||
EXAMPLES_LIBS = \
|
||||
$(top_builddir)/src/lib/eo/libeo.la \
|
||||
$(top_builddir)/src/lib/ecore/libecore.la \
|
||||
$(top_builddir)/src/lib/eina/libeina.la \
|
||||
$(top_builddir)/src/lib/edbus/libedbus2.la \
|
||||
@EDBUS_LDFLAGS@
|
||||
$(top_builddir)/src/lib/eldbus/libeldbus.la \
|
||||
@ELDBUS_LDFLAGS@
|
||||
|
||||
SRCS = \
|
||||
connman-list-services.c \
|
||||
|
@ -77,12 +77,12 @@ clean-local:
|
|||
rm -f $(EXTRA_PROGRAMS)
|
||||
|
||||
install-examples:
|
||||
mkdir -p $(datadir)/edbus/examples
|
||||
$(install_sh_DATA) -c $(SRCS) $(DATA_FILES) $(datadir)/edbus/examples
|
||||
mkdir -p $(datadir)/eldbus/examples
|
||||
$(install_sh_DATA) -c $(SRCS) $(DATA_FILES) $(datadir)/eldbus/examples
|
||||
|
||||
uninstall-local:
|
||||
for f in $(SRCS) $(DATA_FILES); do \
|
||||
rm -f $(datadir)/edbus/examples/$$f ; \
|
||||
rm -f $(datadir)/eldbus/examples/$$f ; \
|
||||
done
|
||||
|
||||
if ALWAYS_BUILD_EXAMPLES
|
|
@ -1,5 +1,5 @@
|
|||
CC=gcc
|
||||
COMMON_FLAGS=`pkg-config --libs --cflags eina,ecore,edbus2`
|
||||
COMMON_FLAGS=`pkg-config --libs --cflags eina,ecore,eldbus`
|
||||
|
||||
EXAMPLES= banshee client \
|
||||
complex-types \
|
|
@ -0,0 +1,241 @@
|
|||
//Compile with:
|
||||
// gcc -o banshee banshee.c `pkg-config --cflags --libs eldbus ecore eina`
|
||||
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "org.bansheeproject.Banshee"
|
||||
#define ENGINE_PATH "/org/bansheeproject/Banshee/PlayerEngine"
|
||||
#define CONTROLLER_PATH "/org/bansheeproject/Banshee/PlaybackController"
|
||||
#define MPRIS_PATH "/org/mpris/MediaPlayer2"
|
||||
|
||||
#define ENGINE_IFACE "org.bansheeproject.Banshee.PlayerEngine"
|
||||
#define CONTROLLER_IFACE "org.bansheeproject.Banshee.PlaybackController"
|
||||
#define MPRIS_IFACE "org.mpris.MediaPlayer2.Playlists"
|
||||
|
||||
static Eldbus_Signal_Handler *state_changed2;
|
||||
|
||||
static Eina_Bool
|
||||
_timeout_application(void *data EINA_UNUSED)
|
||||
{
|
||||
printf("\n## ecore_main_loop_quit()\n");
|
||||
ecore_main_loop_quit();
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_get_playlists(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eldbus_Message_Iter *array, *struct_entry;
|
||||
const char *path, *name, *image;
|
||||
int i = 0;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "a(oss)", &array))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
printf("on_get_playlists() \n\n");
|
||||
while (eldbus_message_iter_get_and_next(array, 'r', &struct_entry))
|
||||
{
|
||||
if (!eldbus_message_iter_arguments_get(struct_entry, "oss", &path, &name, &image))
|
||||
{
|
||||
printf("error on eldbus_massage_iterator_arguments_get()");
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
printf("%d - %s | %s | %s\n", i, path, name, image);
|
||||
}
|
||||
printf("end of on_get_playlists()\n\n");
|
||||
}
|
||||
|
||||
static void
|
||||
iterate_dict(void *data EINA_UNUSED, const void *key, Eldbus_Message_Iter *var)
|
||||
{
|
||||
const char *skey = key;
|
||||
|
||||
if (!strcmp(skey, "PlaylistCount"))
|
||||
{
|
||||
unsigned count;
|
||||
if (!eldbus_message_iter_arguments_get(var, "u", &count))
|
||||
printf("error2\n");
|
||||
printf("PlaylistCount=%u\n", count);
|
||||
}
|
||||
else if (!strcmp(skey, "Orderings"))
|
||||
{
|
||||
Eldbus_Message_Iter *as;
|
||||
const char *txt;
|
||||
printf("- Orderings\n");
|
||||
if (!eldbus_message_iter_arguments_get(var, "as", &as))
|
||||
printf("error1\n");
|
||||
while (eldbus_message_iter_get_and_next(as, 's', &txt))
|
||||
printf("\t%s\n", txt);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
playlist_get_all_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eldbus_Message_Iter *array;
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (eldbus_message_arguments_get(msg, "a{sv}", &array))
|
||||
eldbus_message_iter_dict_iterate(array, "sv", iterate_dict, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
on_introspect(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *string;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "s", &string))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_introspect() data=\n%s\n\n", string);
|
||||
}
|
||||
|
||||
static void
|
||||
on_next_or_pause(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *status = data;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
printf("%s\n", status);
|
||||
}
|
||||
|
||||
static void
|
||||
on_state_changed(void *data EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
const char *status;
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "s", &status))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_state_changed = %s\n", status);
|
||||
}
|
||||
|
||||
static void
|
||||
on_state_changed2(void *data EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
const char *status;
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "s", &status))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_state_changed2 = %s\n", status);
|
||||
eldbus_signal_handler_unref(state_changed2);
|
||||
state_changed2 = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
on_banshee_startup(void *data EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
const char *bus, *older_id, *new_id;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
if (!eldbus_message_arguments_get(msg, "sss", &bus, &older_id, &new_id))
|
||||
{
|
||||
printf("Error getting arguments from NameOwnerChanged");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("banshee started on id=%s\n", new_id);
|
||||
}
|
||||
|
||||
static void
|
||||
on_name_owner_changed(void *data EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
const char *bus, *older_id, *new_id;
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN(eldbus_message_error_get(msg, NULL, NULL));
|
||||
if (!eldbus_message_arguments_get(msg, "sss", &bus, &older_id, &new_id))
|
||||
{
|
||||
printf("Error getting arguments from NameOwnerChanged");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("bus = %s older=%s new=%s\n\n", bus, older_id, new_id);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *engine_obj, *controller_obj, *mpris_obj;
|
||||
Eldbus_Proxy *engine, *controler, *playlists;
|
||||
Eldbus_Signal_Handler *sh;
|
||||
|
||||
ecore_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
engine_obj = eldbus_object_get(conn, BUS, ENGINE_PATH);
|
||||
controller_obj = eldbus_object_get(conn, BUS, CONTROLLER_PATH);
|
||||
mpris_obj = eldbus_object_get(conn, BUS, MPRIS_PATH);
|
||||
|
||||
engine = eldbus_proxy_get(engine_obj, ENGINE_IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(engine, end);
|
||||
controler = eldbus_proxy_get(controller_obj, CONTROLLER_IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(controler, end);
|
||||
playlists = eldbus_proxy_get(mpris_obj, MPRIS_IFACE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(playlists, end);
|
||||
|
||||
eldbus_object_introspect(engine_obj, on_introspect, NULL);
|
||||
|
||||
eldbus_proxy_signal_handler_add(engine, "StateChanged", on_state_changed, NULL);
|
||||
eldbus_proxy_call(engine, "Pause", on_next_or_pause, "Pause", -1, "");
|
||||
|
||||
eldbus_proxy_call(controler, "Next", on_next_or_pause, "Next", -1, "b", EINA_TRUE);
|
||||
|
||||
eldbus_proxy_property_get_all(playlists, playlist_get_all_cb, NULL);
|
||||
eldbus_proxy_call(playlists, "GetPlaylists", on_get_playlists, NULL, -1,
|
||||
"uusb", (unsigned)0, (unsigned)30, "asc", EINA_FALSE);
|
||||
|
||||
eldbus_signal_handler_add(conn, BUS, ENGINE_PATH, ENGINE_IFACE,
|
||||
"StateChanged", on_state_changed, NULL);
|
||||
state_changed2 = eldbus_signal_handler_add(conn, BUS, ENGINE_PATH, ENGINE_IFACE,
|
||||
"StateChanged", on_state_changed2, NULL);
|
||||
|
||||
sh = eldbus_signal_handler_add(conn, ELDBUS_FDO_BUS, ELDBUS_FDO_PATH,
|
||||
ELDBUS_FDO_INTERFACE, "NameOwnerChanged",
|
||||
on_name_owner_changed, NULL);
|
||||
eldbus_signal_handler_match_extra_set(sh, "arg0", BUS, NULL);
|
||||
|
||||
sh = eldbus_signal_handler_add(conn, ELDBUS_FDO_BUS, ELDBUS_FDO_PATH,
|
||||
ELDBUS_FDO_INTERFACE, "NameOwnerChanged",
|
||||
on_banshee_startup, NULL);
|
||||
eldbus_signal_handler_match_extra_set(sh, "arg0", BUS, "arg1", "", NULL);
|
||||
|
||||
ecore_timer_add(50, _timeout_application, NULL);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
end:
|
||||
/**
|
||||
* It's not necessary unref all objecs, proxys and signal handlers
|
||||
* When a parent have ref = 0, it will unref all your childrens
|
||||
* before free it self.
|
||||
**/
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
//Compile with:
|
||||
// gcc -o client client.c `pkg-config --cflags --libs edbus2 ecore eina`
|
||||
// gcc -o client client.c `pkg-config --cflags --libs eldbus ecore eina`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "org.Enlightenment"
|
||||
|
@ -13,16 +13,16 @@ static int _client_log_dom = -1;
|
|||
#define ERR(...) EINA_LOG_DOM_ERR(_client_log_dom, __VA_ARGS__)
|
||||
|
||||
static void
|
||||
_on_alive(void *context EINA_UNUSED, const EDBus_Message *msg EINA_UNUSED)
|
||||
_on_alive(void *context EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED)
|
||||
{
|
||||
printf("Alive\n\n");
|
||||
}
|
||||
|
||||
static void
|
||||
_on_hello(void *context EINA_UNUSED, const EDBus_Message *msg)
|
||||
_on_hello(void *context EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
const char *txt;
|
||||
if (edbus_message_arguments_get(msg, "s", &txt))
|
||||
if (eldbus_message_arguments_get(msg, "s", &txt))
|
||||
printf("%s\n", txt);
|
||||
}
|
||||
|
||||
|
@ -59,18 +59,18 @@ test(void)
|
|||
}
|
||||
|
||||
static void
|
||||
_on_send_bool(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_send_bool(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
Eina_Bool b;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "b", &b))
|
||||
if (!eldbus_message_arguments_get(msg, "b", &b))
|
||||
{
|
||||
ERR("Could not get entry contents");
|
||||
return;
|
||||
|
@ -86,18 +86,18 @@ _on_send_bool(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *p
|
|||
}
|
||||
|
||||
static void
|
||||
_on_send_byte(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_send_byte(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
uint8_t y;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "y", &y))
|
||||
if (!eldbus_message_arguments_get(msg, "y", &y))
|
||||
{
|
||||
ERR("Could not get entry contents");
|
||||
return;
|
||||
|
@ -113,18 +113,18 @@ _on_send_byte(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *p
|
|||
}
|
||||
|
||||
static void
|
||||
_on_send_uint32(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_send_uint32(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
unsigned int u;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "u", &u))
|
||||
if (!eldbus_message_arguments_get(msg, "u", &u))
|
||||
{
|
||||
ERR("Could not get entry contents");
|
||||
return;
|
||||
|
@ -140,18 +140,18 @@ _on_send_uint32(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
}
|
||||
|
||||
static void
|
||||
_on_send_int32(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_send_int32(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
int32_t i;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "i", &i))
|
||||
if (!eldbus_message_arguments_get(msg, "i", &i))
|
||||
{
|
||||
ERR("Could not get entry contents");
|
||||
return;
|
||||
|
@ -167,18 +167,18 @@ _on_send_int32(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *
|
|||
}
|
||||
|
||||
static void
|
||||
_on_send_int16(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_send_int16(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
int16_t n;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "n", &n))
|
||||
if (!eldbus_message_arguments_get(msg, "n", &n))
|
||||
{
|
||||
ERR("Could not get entry contents");
|
||||
return;
|
||||
|
@ -194,18 +194,18 @@ _on_send_int16(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *
|
|||
}
|
||||
|
||||
static void
|
||||
_on_send_double(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_send_double(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
double d;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "d", &d))
|
||||
if (!eldbus_message_arguments_get(msg, "d", &d))
|
||||
{
|
||||
ERR("Could not get entry contents");
|
||||
return;
|
||||
|
@ -221,18 +221,18 @@ _on_send_double(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
}
|
||||
|
||||
static void
|
||||
_on_send_string(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_send_string(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
char *s;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "s", &s))
|
||||
if (!eldbus_message_arguments_get(msg, "s", &s))
|
||||
{
|
||||
ERR("Could not get entry contents");
|
||||
return;
|
||||
|
@ -248,11 +248,11 @@ _on_send_string(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
}
|
||||
|
||||
static void
|
||||
_on_async_test(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_on_async_test(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("%s %s", errname, errmsg);
|
||||
return;
|
||||
|
@ -277,9 +277,9 @@ finish(void *data EINA_UNUSED)
|
|||
int
|
||||
main(void)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Object *obj;
|
||||
EDBus_Proxy *proxy;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Proxy *proxy;
|
||||
|
||||
eina_init();
|
||||
_client_log_dom = eina_log_domain_register("client", EINA_COLOR_CYAN);
|
||||
|
@ -290,40 +290,40 @@ main(void)
|
|||
}
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
obj = edbus_object_get(conn, BUS, PATH);
|
||||
proxy = edbus_proxy_get(obj, INTERFACE);
|
||||
edbus_proxy_signal_handler_add(proxy, "Alive", _on_alive, NULL);
|
||||
edbus_proxy_signal_handler_add(proxy, "Hello", _on_hello, NULL);
|
||||
obj = eldbus_object_get(conn, BUS, PATH);
|
||||
proxy = eldbus_proxy_get(obj, INTERFACE);
|
||||
eldbus_proxy_signal_handler_add(proxy, "Alive", _on_alive, NULL);
|
||||
eldbus_proxy_signal_handler_add(proxy, "Hello", _on_hello, NULL);
|
||||
|
||||
edbus_proxy_call(proxy, "SendBool", _on_send_bool, NULL, -1, "b",
|
||||
eldbus_proxy_call(proxy, "SendBool", _on_send_bool, NULL, -1, "b",
|
||||
expected.b);
|
||||
edbus_proxy_call(proxy, "SendByte", _on_send_byte, NULL, -1, "y",
|
||||
eldbus_proxy_call(proxy, "SendByte", _on_send_byte, NULL, -1, "y",
|
||||
expected.y);
|
||||
edbus_proxy_call(proxy, "SendUint32", _on_send_uint32, NULL, -1, "u",
|
||||
eldbus_proxy_call(proxy, "SendUint32", _on_send_uint32, NULL, -1, "u",
|
||||
expected.u);
|
||||
edbus_proxy_call(proxy, "SendInt32", _on_send_int32, NULL, -1, "i",
|
||||
eldbus_proxy_call(proxy, "SendInt32", _on_send_int32, NULL, -1, "i",
|
||||
expected.i);
|
||||
edbus_proxy_call(proxy, "SendInt16", _on_send_int16, NULL, -1, "n",
|
||||
eldbus_proxy_call(proxy, "SendInt16", _on_send_int16, NULL, -1, "n",
|
||||
expected.n);
|
||||
edbus_proxy_call(proxy, "SendDouble", _on_send_double, NULL, -1, "d",
|
||||
eldbus_proxy_call(proxy, "SendDouble", _on_send_double, NULL, -1, "d",
|
||||
expected.d);
|
||||
edbus_proxy_call(proxy, "SendString", _on_send_string, NULL, -1, "s",
|
||||
eldbus_proxy_call(proxy, "SendString", _on_send_string, NULL, -1, "s",
|
||||
expected.s);
|
||||
edbus_proxy_call(proxy, "AsyncTest", _on_async_test, NULL, -1, "");
|
||||
eldbus_proxy_call(proxy, "AsyncTest", _on_async_test, NULL, -1, "");
|
||||
|
||||
edbus_name_owner_changed_callback_add(conn, BUS, on_name_owner_changed,
|
||||
eldbus_name_owner_changed_callback_add(conn, BUS, on_name_owner_changed,
|
||||
conn, EINA_TRUE);
|
||||
ecore_timer_add(30, finish, NULL);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
edbus_connection_unref(conn);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
|
||||
eina_log_domain_unregister(_client_log_dom);
|
|
@ -1,7 +1,7 @@
|
|||
//Compile with:
|
||||
// gcc -o complex-types-client-eina-value complex-types-client-eina-value.c `pkg-config --cflags --libs edbus2 ecore eina`
|
||||
// gcc -o complex-types-client-eina-value complex-types-client-eina-value.c `pkg-config --cflags --libs eldbus ecore eina`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "com.profusion"
|
||||
|
@ -36,7 +36,7 @@ _type_offset(unsigned base, unsigned size)
|
|||
}
|
||||
|
||||
static void
|
||||
_fill_receive_array_of_string_int_with_size(EDBus_Message *msg, int size, const char *array[])
|
||||
_fill_receive_array_of_string_int_with_size(Eldbus_Message *msg, int size, const char *array[])
|
||||
{
|
||||
Eina_Value *value_struct, *value_array;
|
||||
int i;
|
||||
|
@ -86,27 +86,27 @@ _fill_receive_array_of_string_int_with_size(EDBus_Message *msg, int size, const
|
|||
}
|
||||
eina_value_struct_value_set(value_struct, "array", value_array);
|
||||
|
||||
edbus_message_from_eina_value("ia(si)", msg, value_struct);
|
||||
eldbus_message_from_eina_value("ia(si)", msg, value_struct);
|
||||
|
||||
eina_value_free(value_struct);
|
||||
eina_value_free(value_array);
|
||||
}
|
||||
|
||||
static void
|
||||
on_send_array(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
on_send_array(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eina_Value *v, array;
|
||||
const char *txt;
|
||||
unsigned i;
|
||||
printf("2 - on_send_array()\n");
|
||||
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
|
||||
v = edbus_message_to_eina_value(msg);
|
||||
v = eldbus_message_to_eina_value(msg);
|
||||
eina_value_struct_value_get(v, "arg0", &array);
|
||||
for (i = 0; i < eina_value_array_count(&array); i++)
|
||||
{
|
||||
|
@ -119,31 +119,31 @@ on_send_array(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *p
|
|||
}
|
||||
|
||||
static void
|
||||
on_receive_array_with_size(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
on_receive_array_with_size(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("1 - on_receive_array_with_size()\n");
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
fprintf(stderr, "Error: %s %s\n", errname, errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_plus_one(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
on_plus_one(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eina_Value *v;
|
||||
int num2;
|
||||
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
|
||||
v = edbus_message_to_eina_value(msg);
|
||||
v = eldbus_message_to_eina_value(msg);
|
||||
eina_value_struct_get(v, "arg0", &num2);
|
||||
|
||||
printf("3 - on_plus_one() %d\n", num2);
|
||||
|
@ -151,19 +151,19 @@ on_plus_one(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pen
|
|||
}
|
||||
|
||||
static void
|
||||
receive_variant_cb(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
receive_variant_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eina_Value *v, variant, array;
|
||||
unsigned i;
|
||||
|
||||
printf("4 - receive a variant with an array of strings\n");
|
||||
if (edbus_message_error_get(msg, NULL, NULL))
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
|
||||
v = edbus_message_to_eina_value(msg);
|
||||
v = eldbus_message_to_eina_value(msg);
|
||||
|
||||
eina_value_struct_value_get(v, "arg0", &variant);
|
||||
eina_value_struct_value_get(&variant, "arg0", &array);
|
||||
|
@ -180,17 +180,17 @@ receive_variant_cb(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pendi
|
|||
}
|
||||
|
||||
static void
|
||||
_property_removed(void *data EINA_UNUSED, EDBus_Proxy *proxy EINA_UNUSED, void *event_info)
|
||||
_property_removed(void *data EINA_UNUSED, Eldbus_Proxy *proxy EINA_UNUSED, void *event_info)
|
||||
{
|
||||
EDBus_Proxy_Event_Property_Removed *event = event_info;
|
||||
Eldbus_Proxy_Event_Property_Removed *event = event_info;
|
||||
|
||||
printf("\nproperty removed: %s", event->name);
|
||||
}
|
||||
|
||||
static void
|
||||
_property_changed(void *data EINA_UNUSED, EDBus_Proxy *proxy EINA_UNUSED, void *event_info)
|
||||
_property_changed(void *data EINA_UNUSED, Eldbus_Proxy *proxy EINA_UNUSED, void *event_info)
|
||||
{
|
||||
EDBus_Proxy_Event_Property_Changed *event = event_info;
|
||||
Eldbus_Proxy_Event_Property_Changed *event = event_info;
|
||||
const char *name;
|
||||
const Eina_Value *value;
|
||||
printf("\nproperty changed\n");
|
||||
|
@ -223,26 +223,26 @@ _property_changed(void *data EINA_UNUSED, EDBus_Proxy *proxy EINA_UNUSED, void *
|
|||
static Eina_Bool
|
||||
_read_cache(void *data)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
Eldbus_Proxy *proxy = data;
|
||||
const char *txt;
|
||||
int num;
|
||||
Eina_Value *v;
|
||||
|
||||
v = edbus_proxy_property_local_get(proxy, "text");
|
||||
v = eldbus_proxy_property_local_get(proxy, "text");
|
||||
if (v)
|
||||
{
|
||||
eina_value_get(v, &txt);
|
||||
printf("Read cache: [txt] = %s\n", txt);
|
||||
}
|
||||
|
||||
v = edbus_proxy_property_local_get(proxy, "int32");
|
||||
v = eldbus_proxy_property_local_get(proxy, "int32");
|
||||
if (v)
|
||||
{
|
||||
eina_value_get(v, &num);
|
||||
printf("Read cache: [int32] = %d\n", num);
|
||||
}
|
||||
|
||||
v = edbus_proxy_property_local_get(proxy, "st");
|
||||
v = eldbus_proxy_property_local_get(proxy, "st");
|
||||
if (v)
|
||||
{
|
||||
eina_value_struct_get(v, "arg0", &txt);
|
||||
|
@ -255,7 +255,7 @@ _read_cache(void *data)
|
|||
}
|
||||
|
||||
static void
|
||||
_fill_plus_one(EDBus_Message *msg, int num)
|
||||
_fill_plus_one(Eldbus_Message *msg, int num)
|
||||
{
|
||||
Eina_Value *v;
|
||||
Eina_Value_Struct_Member main_members[] = {
|
||||
|
@ -271,7 +271,7 @@ _fill_plus_one(EDBus_Message *msg, int num)
|
|||
v = eina_value_struct_new(&desc_struct);
|
||||
eina_value_struct_set(v, "num", num);
|
||||
|
||||
edbus_message_from_eina_value("i", msg, v);
|
||||
eldbus_message_from_eina_value("i", msg, v);
|
||||
|
||||
eina_value_free(v);
|
||||
}
|
||||
|
@ -279,46 +279,46 @@ _fill_plus_one(EDBus_Message *msg, int num)
|
|||
int
|
||||
main(void)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Object *obj;
|
||||
EDBus_Proxy *proxy;
|
||||
EDBus_Message *msg;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Proxy *proxy;
|
||||
Eldbus_Message *msg;
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
obj = edbus_object_get(conn, BUS, PATH);
|
||||
proxy = edbus_proxy_get(obj, IFACE);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
obj = eldbus_object_get(conn, BUS, PATH);
|
||||
proxy = eldbus_proxy_get(obj, IFACE);
|
||||
|
||||
msg = edbus_proxy_method_call_new(proxy, "ReceiveArrayOfStringIntWithSize");
|
||||
msg = eldbus_proxy_method_call_new(proxy, "ReceiveArrayOfStringIntWithSize");
|
||||
_fill_receive_array_of_string_int_with_size(msg, size_of_array, array_string);
|
||||
edbus_proxy_send(proxy, msg, on_receive_array_with_size, NULL, -1);
|
||||
eldbus_proxy_send(proxy, msg, on_receive_array_with_size, NULL, -1);
|
||||
|
||||
edbus_proxy_call(proxy, "SendArray", on_send_array, NULL, -1 , "");
|
||||
eldbus_proxy_call(proxy, "SendArray", on_send_array, NULL, -1 , "");
|
||||
|
||||
msg = edbus_proxy_method_call_new(proxy, "PlusOne");
|
||||
msg = eldbus_proxy_method_call_new(proxy, "PlusOne");
|
||||
_fill_plus_one(msg, 14);
|
||||
edbus_proxy_send(proxy, msg, on_plus_one, NULL, -1);
|
||||
eldbus_proxy_send(proxy, msg, on_plus_one, NULL, -1);
|
||||
|
||||
edbus_proxy_event_callback_add(proxy,
|
||||
EDBUS_PROXY_EVENT_PROPERTY_CHANGED,
|
||||
eldbus_proxy_event_callback_add(proxy,
|
||||
ELDBUS_PROXY_EVENT_PROPERTY_CHANGED,
|
||||
_property_changed, NULL);
|
||||
edbus_proxy_event_callback_add(proxy, EDBUS_PROXY_EVENT_PROPERTY_REMOVED,
|
||||
eldbus_proxy_event_callback_add(proxy, ELDBUS_PROXY_EVENT_PROPERTY_REMOVED,
|
||||
_property_removed, NULL);
|
||||
|
||||
edbus_proxy_properties_monitor(proxy, EINA_TRUE);
|
||||
eldbus_proxy_properties_monitor(proxy, EINA_TRUE);
|
||||
ecore_timer_add(10, _read_cache, proxy);
|
||||
|
||||
edbus_proxy_call(proxy, "ReceiveVariantData", receive_variant_cb, NULL, -1, "");
|
||||
eldbus_proxy_call(proxy, "ReceiveVariantData", receive_variant_cb, NULL, -1, "");
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
edbus_proxy_event_callback_del(proxy, EDBUS_PROXY_EVENT_PROPERTY_CHANGED,
|
||||
eldbus_proxy_event_callback_del(proxy, ELDBUS_PROXY_EVENT_PROPERTY_CHANGED,
|
||||
_property_changed, NULL);
|
||||
edbus_connection_unref(conn);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,393 @@
|
|||
//Compile with:
|
||||
// gcc -o complex-types-server complex-types-server.c `pkg-config --cflags --libs eldbus ecore`
|
||||
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "com.profusion"
|
||||
#define PATH "/com/profusion/Test"
|
||||
#define IFACE "com.profusion.Test"
|
||||
|
||||
static char *resp2;
|
||||
/* dummy, incremented each time DBus.Properties.Get() is called */
|
||||
static int int32 = 35;
|
||||
static Ecore_Timer *timer;
|
||||
|
||||
static Eldbus_Message *
|
||||
_receive_array(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
Eldbus_Message_Iter *array;
|
||||
const char *txt;
|
||||
|
||||
printf("- receiveArray\n");
|
||||
if (!eldbus_message_arguments_get(msg, "as", &array))
|
||||
{
|
||||
printf("Error on eldbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
while (eldbus_message_iter_get_and_next(array, 's', &txt))
|
||||
printf("%s\n", txt);
|
||||
printf("}\n\n");
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_receive_array_of_string_int_with_size(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
Eldbus_Message_Iter *array, *struct_si;
|
||||
int size, i = 0;
|
||||
|
||||
printf("- receiveArrayOfStringIntWithSize\n{\n");
|
||||
if (!eldbus_message_arguments_get(msg, "ia(si)", &size, &array))
|
||||
{
|
||||
printf("Error on eldbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
while (eldbus_message_iter_get_and_next(array, 'r', &struct_si))
|
||||
{
|
||||
const char *txt;
|
||||
int num;
|
||||
if (!eldbus_message_iter_arguments_get(struct_si, "si", &txt, &num))
|
||||
{
|
||||
printf("Error on eldbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
printf("%s | %d\n", txt, num);
|
||||
i++;
|
||||
}
|
||||
printf("size in msg %d | size read %d\n", size, i);
|
||||
printf("}\n\n");
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_receive_variant(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
Eldbus_Message_Iter *var, *array, *main_iter;
|
||||
|
||||
main_iter = eldbus_message_iter_get(reply);
|
||||
var = eldbus_message_iter_container_new(main_iter, 'v', "as");
|
||||
eldbus_message_iter_arguments_append(var, "as", &array);
|
||||
|
||||
eldbus_message_iter_arguments_append(array, "s", "item1");
|
||||
eldbus_message_iter_arguments_append(array, "s", "item2");
|
||||
eldbus_message_iter_arguments_append(array, "s", "item3");
|
||||
|
||||
eldbus_message_iter_container_close(var, array);
|
||||
eldbus_message_iter_container_close(main_iter, var);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_variant(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
Eldbus_Message_Iter *variant;
|
||||
char *type;
|
||||
|
||||
printf("- sendVariantData\n{\n");
|
||||
if (!eldbus_message_arguments_get(msg, "v", &variant))
|
||||
{
|
||||
printf("Error on eldbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
type = eldbus_message_iter_signature_get(variant);
|
||||
if (type[1])
|
||||
{
|
||||
printf("It is a complex type, not handle yet.\n");
|
||||
free(type);
|
||||
return reply;
|
||||
}
|
||||
|
||||
switch (type[0])
|
||||
{
|
||||
case 's':
|
||||
case 'o':
|
||||
{
|
||||
char *txt;
|
||||
eldbus_message_iter_arguments_get(variant, type, &txt);
|
||||
printf("type = %c value = %s\n", type[0], txt);
|
||||
break;
|
||||
}
|
||||
case 'i':
|
||||
{
|
||||
int num;
|
||||
eldbus_message_iter_arguments_get(variant, type, &num);
|
||||
printf("type = %c value = %d\n", type[0], num);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("Unhandled type\n");
|
||||
}
|
||||
}
|
||||
|
||||
printf("}\n\n");
|
||||
|
||||
free(type);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_array_int(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
Eldbus_Message_Iter *iter, *array;
|
||||
int i;
|
||||
|
||||
printf("- sendArrayInt\n\n");
|
||||
|
||||
iter = eldbus_message_iter_get(reply);
|
||||
array = eldbus_message_iter_container_new(iter, 'a', "i");
|
||||
for (i = 0; i < 5; i++)
|
||||
eldbus_message_iter_arguments_append(array, "i", i);
|
||||
eldbus_message_iter_container_close(iter, array);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_array(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
Eldbus_Message_Iter *iter, *array;
|
||||
const char *array_string[5] = {"qqqq", "wwwww", "eeeeee", "rrrrr", "ttttt"};
|
||||
int i;
|
||||
|
||||
printf("sendArray\n\n");
|
||||
|
||||
iter = eldbus_message_iter_get(reply);
|
||||
array = eldbus_message_iter_container_new(iter, 'a', "s");
|
||||
for (i = 0; i < 5; i++)
|
||||
eldbus_message_iter_arguments_append(array, "s", array_string[i]);
|
||||
eldbus_message_iter_container_close(iter, array);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_plus_one(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
int num;
|
||||
|
||||
printf("- plusOne\n\n");
|
||||
if (!eldbus_message_arguments_get(msg, "i", &num))
|
||||
{
|
||||
printf("Error on eldbus_message_arguments_get()\n");
|
||||
return reply;
|
||||
}
|
||||
num++;
|
||||
eldbus_message_arguments_append(reply, "i", num);
|
||||
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_double_container(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message_Iter *array1, *array2, *structure;
|
||||
int num1, num2;
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "a(ii)a(ii)", &array1, &array2))
|
||||
{
|
||||
printf("Error on eldbus_message_arguments_get()\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
printf("DoubleCountainer\n{\nArray1:\n");
|
||||
while (eldbus_message_iter_get_and_next(array1, 'r', &structure))
|
||||
{
|
||||
eldbus_message_iter_arguments_get(structure, "ii", &num1, &num2);
|
||||
printf("1 %d - 2 %d\n", num1, num2);
|
||||
}
|
||||
|
||||
printf("Array2:\n");
|
||||
while (eldbus_message_iter_get_and_next(array2, 'r', &structure))
|
||||
{
|
||||
eldbus_message_iter_arguments_get(structure, "ii", &num1, &num2);
|
||||
printf("1 %d - 2 %d\n", num1, num2);
|
||||
}
|
||||
printf("}\n\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_properties_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const char *propname, Eldbus_Message_Iter *iter, const Eldbus_Message *request_msg EINA_UNUSED, Eldbus_Message **error EINA_UNUSED)
|
||||
{
|
||||
printf("Properties_get - %s\n", propname);
|
||||
if (!strcmp(propname, "Resp2"))
|
||||
eldbus_message_iter_basic_append(iter, 's', resp2);
|
||||
else if (!strcmp(propname, "text"))
|
||||
eldbus_message_iter_basic_append(iter, 's', "lalalala");
|
||||
else if (!strcmp(propname, "int32"))
|
||||
{
|
||||
eldbus_message_iter_arguments_append(iter, "i", int32);
|
||||
int32++;
|
||||
}
|
||||
else if (!strcmp(propname, "st"))
|
||||
{
|
||||
Eldbus_Message_Iter *st;
|
||||
eldbus_message_iter_arguments_append(iter, "(ss)", &st);
|
||||
eldbus_message_iter_arguments_append(st, "ss", "string1", "string2");
|
||||
eldbus_message_iter_container_close(iter, st);
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_properties_set(const Eldbus_Service_Interface *iface EINA_UNUSED, const char *propname, Eldbus_Message_Iter *iter, const Eldbus_Message *msg)
|
||||
{
|
||||
char *type;
|
||||
|
||||
type = eldbus_message_iter_signature_get(iter);
|
||||
|
||||
if (!strcmp(propname, "int32"))
|
||||
{
|
||||
int num;
|
||||
if (type[0] != 'i')
|
||||
goto invalid_signature;
|
||||
eldbus_message_iter_arguments_get(iter, "i", &num);
|
||||
printf("int32 was set to: %d, previously was: %d\n", num, int32);
|
||||
int32 = num;
|
||||
}
|
||||
else if (!strcmp(propname, "Resp2"))
|
||||
{
|
||||
const char *txt;
|
||||
if (type[0] != 's')
|
||||
goto invalid_signature;
|
||||
eldbus_message_iter_arguments_get(iter, "s", &txt);
|
||||
printf("Resp2 was set to: %s, previously was: %s\n", txt, resp2);
|
||||
free(resp2);
|
||||
resp2 = strdup(txt);
|
||||
}
|
||||
free(type);
|
||||
return eldbus_message_method_return_new(msg);
|
||||
|
||||
invalid_signature:
|
||||
free(type);
|
||||
return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidSignature",
|
||||
"Invalid type.");
|
||||
}
|
||||
|
||||
static const Eldbus_Method methods[] = {
|
||||
{
|
||||
"ReceiveArray", ELDBUS_ARGS({"as", "array_of_strings"}),
|
||||
NULL, _receive_array
|
||||
},
|
||||
{
|
||||
"ReceiveArrayOfStringIntWithSize",
|
||||
ELDBUS_ARGS({"i", "size_of_array"}, {"a(si)", "array"}),
|
||||
NULL, _receive_array_of_string_int_with_size, 0
|
||||
},
|
||||
{
|
||||
"SendVariantData", ELDBUS_ARGS({"v", "variant_data"}),
|
||||
NULL, _send_variant
|
||||
},
|
||||
{
|
||||
"ReceiveVariantData", NULL, ELDBUS_ARGS({"v", "variant_data"}),
|
||||
_receive_variant
|
||||
},
|
||||
{
|
||||
"SendArrayInt", NULL,
|
||||
ELDBUS_ARGS({"ai", "array_of_int"}), _send_array_int, 0
|
||||
},
|
||||
{
|
||||
"SendArray", NULL, ELDBUS_ARGS({"as", "array_string"}),
|
||||
_send_array
|
||||
},
|
||||
{
|
||||
"PlusOne", ELDBUS_ARGS({"i", "integer"}),
|
||||
ELDBUS_ARGS({"i", "integer_plus_one"}), _plus_one
|
||||
},
|
||||
{
|
||||
"DoubleContainner", ELDBUS_ARGS({"a(ii)", "array1"}, {"a(ii)", "array2"}),
|
||||
NULL, _double_container
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const Eldbus_Property properties[] = {
|
||||
{ "Resp2", "s", NULL, _properties_set },
|
||||
{ "text", "s" },
|
||||
{ "int32", "i", NULL, _properties_set },
|
||||
{ "st", "(ss)" },
|
||||
{ }
|
||||
};
|
||||
|
||||
static const Eldbus_Service_Interface_Desc iface_desc = {
|
||||
IFACE, methods, NULL, properties, _properties_get
|
||||
};
|
||||
|
||||
static Eina_Bool _emit_changed(void *data)
|
||||
{
|
||||
Eldbus_Service_Interface *iface = data;
|
||||
eldbus_service_property_changed(iface, "int32");
|
||||
eldbus_service_property_invalidate_set(iface, "Resp2", EINA_TRUE);
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static void
|
||||
on_name_request(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
unsigned int reply;
|
||||
Eldbus_Service_Interface *iface = data;
|
||||
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("error on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "u", &reply))
|
||||
{
|
||||
printf("error geting arguments on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (reply != ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
|
||||
{
|
||||
printf("error name already in use\n");
|
||||
return;
|
||||
}
|
||||
|
||||
timer = ecore_timer_add(3, _emit_changed, iface);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Service_Interface *iface;
|
||||
|
||||
ecore_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
resp2 = malloc(sizeof(char) * 5);
|
||||
strcpy(resp2, "test");
|
||||
iface = eldbus_service_interface_register(conn, PATH, &iface_desc);
|
||||
eldbus_name_request(conn, BUS, ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
|
||||
on_name_request, iface);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
free(resp2);
|
||||
ecore_timer_del(timer);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,284 @@
|
|||
//Compile with:
|
||||
// gcc -o complex-types complex-types.c `pkg-config --cflags --libs eldbus ecore`
|
||||
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "com.profusion"
|
||||
#define PATH "/com/profusion/Test"
|
||||
#define IFACE "com.profusion.Test"
|
||||
|
||||
Eldbus_Connection *conn;
|
||||
|
||||
static Eina_Bool
|
||||
_timer1_cb(void *data EINA_UNUSED)
|
||||
{
|
||||
printf("\nFishing...\n");
|
||||
ecore_main_loop_quit();
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static void
|
||||
on_plus_one(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
int num2 = 0;
|
||||
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
if (!eldbus_message_arguments_get(msg, "i", &num2))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("on_plus_one() %d\n", num2);
|
||||
}
|
||||
|
||||
static void
|
||||
set_property_resp2(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("set_property_resp2()\n");
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
printf("Message error %s - %s\n\n", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
get_property_resp2(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eldbus_Proxy *proxy = data;
|
||||
Eldbus_Message_Iter *variant = NULL;
|
||||
char *type;
|
||||
char *resp2;
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("get_property_resp2()\n");
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
printf("Message error %s - %s\n\n", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
if (!eldbus_message_arguments_get(msg, "v", &variant))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
type = eldbus_message_iter_signature_get(variant);
|
||||
if (type[1])
|
||||
{
|
||||
printf("It is a complex type, not handle yet.\n\n");
|
||||
return;
|
||||
}
|
||||
if (type[0] != 's')
|
||||
{
|
||||
printf("Expected type is string.\n\n");
|
||||
return;
|
||||
}
|
||||
if (!eldbus_message_iter_arguments_get(variant, "s", &resp2))
|
||||
{
|
||||
printf("error in eldbus_message_iter_arguments_get()\n\n");
|
||||
return;
|
||||
}
|
||||
printf("resp2=%s\n", resp2);
|
||||
free(type);
|
||||
|
||||
eldbus_proxy_property_set(proxy, "Resp2", "s", &"lalala", set_property_resp2, NULL);
|
||||
eldbus_proxy_property_set(proxy, "int32", "i", (void*)(intptr_t)99, set_property_resp2, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
on_send_array_int(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eldbus_Message_Iter *array = NULL;
|
||||
int num;
|
||||
|
||||
printf("on_send_array_int()\n");
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
if (!eldbus_message_arguments_get(msg, "ai", &array))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (eldbus_message_iter_get_and_next(array, 'i', &num))
|
||||
{
|
||||
printf("%d\n", num);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_send_array(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eldbus_Message_Iter *array = NULL;
|
||||
char *txt = NULL;
|
||||
char *string[10];
|
||||
int i = 0;
|
||||
int z;
|
||||
|
||||
printf("on_send_array()\n");
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("Message error\n\n");
|
||||
return;
|
||||
}
|
||||
if (!eldbus_message_arguments_get(msg, "as", &array))
|
||||
{
|
||||
printf("Error getting arguments.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (eldbus_message_iter_get_and_next(array, 's', &txt))
|
||||
{
|
||||
string[i] = txt;
|
||||
i++;
|
||||
}
|
||||
|
||||
for (z = 0; z < i; z++)
|
||||
printf("string = %s\n", string[z]);
|
||||
}
|
||||
|
||||
static void
|
||||
on_receive_array_with_size(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("on_receive_array_with_size()\n");
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
fprintf(stderr, "Error: %s %s\n", errname, errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_send_variant(void *data EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
printf("on_send_variant()\n\n");
|
||||
}
|
||||
|
||||
static void
|
||||
on_receive_array(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname;
|
||||
const char *errmsg;
|
||||
|
||||
printf("on_receive_array()\n");
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
fprintf(stderr, "Error: %s %s\n", errname, errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
Eldbus_Object *test2_obj;
|
||||
Eldbus_Proxy *test2_proxy;
|
||||
Eldbus_Pending *pending;
|
||||
Eldbus_Message_Iter *iter, *array_of_string, *variant;
|
||||
Eldbus_Message_Iter *array_itr, *structure;
|
||||
Eldbus_Message *msg;
|
||||
int size_of_array = 5;
|
||||
const char *array[5] = { "aaaa", "bbbb", "cccc", "dddd", "eeee" };
|
||||
int i;
|
||||
int plus_one = 24;
|
||||
|
||||
ecore_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
test2_obj = eldbus_object_get(conn, BUS, PATH);
|
||||
test2_proxy = eldbus_proxy_get(test2_obj, IFACE);
|
||||
|
||||
msg = eldbus_proxy_method_call_new(test2_proxy, "ReceiveArray");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
array_of_string = eldbus_message_iter_container_new(iter, 'a',"s");
|
||||
if (!array_of_string) printf("array_of_string == NULL\n\n");
|
||||
for (i = 0; i < 5; i++)
|
||||
eldbus_message_iter_basic_append(array_of_string, 's', array[i]);
|
||||
eldbus_message_iter_container_close(iter, array_of_string);
|
||||
pending = eldbus_proxy_send(test2_proxy, msg, on_receive_array, NULL, -1);
|
||||
if (!pending) printf("Error in eldbus_proxy_send()\n\n");
|
||||
|
||||
msg = eldbus_proxy_method_call_new(test2_proxy, "ReceiveArrayOfStringIntWithSize");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
if (!eldbus_message_iter_arguments_append(iter, "ia(si)", size_of_array, &array_of_string))
|
||||
printf("error on eldbus_massage_iterator_arguments_set()\n\n");
|
||||
for (i = 0; i < size_of_array; i++)
|
||||
{
|
||||
Eldbus_Message_Iter *struct_of_si;
|
||||
eldbus_message_iter_arguments_append(array_of_string, "(si)", &struct_of_si);
|
||||
eldbus_message_iter_arguments_append(struct_of_si, "si", array[i], i);
|
||||
eldbus_message_iter_container_close(array_of_string, struct_of_si);
|
||||
}
|
||||
eldbus_message_iter_container_close(iter, array_of_string);
|
||||
pending = eldbus_proxy_send(test2_proxy, msg, on_receive_array_with_size, NULL, -1);
|
||||
|
||||
msg = eldbus_proxy_method_call_new(test2_proxy, "SendVariantData");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
variant = eldbus_message_iter_container_new(iter, 'v', "s");
|
||||
eldbus_message_iter_basic_append(variant, 's', "test");
|
||||
eldbus_message_iter_container_close(iter, variant);
|
||||
pending = eldbus_proxy_send(test2_proxy, msg, on_send_variant, NULL, -1);
|
||||
|
||||
msg = eldbus_proxy_method_call_new(test2_proxy, "DoubleContainner");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
/**
|
||||
* eldbus_message_iterator_arguments_set(itr, "a(ii)a(ii)", &array_itr, &array_itr2);
|
||||
* this will cause a error, we could not open another container until
|
||||
* we close the first one
|
||||
*/
|
||||
eldbus_message_iter_arguments_append(iter, "a(ii)", &array_itr);
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
eldbus_message_iter_arguments_append(array_itr, "(ii)", &structure);
|
||||
eldbus_message_iter_arguments_append(structure, "ii", i, i*i);
|
||||
eldbus_message_iter_container_close(array_itr, structure);
|
||||
}
|
||||
eldbus_message_iter_container_close(iter, array_itr);
|
||||
eldbus_message_iter_arguments_append(iter, "a(ii)", &array_itr);
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
eldbus_message_iter_arguments_append(array_itr, "(ii)", &structure);
|
||||
eldbus_message_iter_arguments_append(structure, "ii", i, i*i*i);
|
||||
eldbus_message_iter_container_close(array_itr, structure);
|
||||
}
|
||||
eldbus_message_iter_container_close(iter, array_itr);
|
||||
eldbus_proxy_send(test2_proxy, msg, NULL, NULL, -1);
|
||||
|
||||
pending = eldbus_proxy_call(test2_proxy, "SendArrayInt", on_send_array_int, NULL,
|
||||
-1 , "");
|
||||
|
||||
pending = eldbus_proxy_call(test2_proxy, "SendArray", on_send_array, NULL,
|
||||
-1 , "");
|
||||
|
||||
pending = eldbus_proxy_call(test2_proxy, "PlusOne", on_plus_one, NULL,
|
||||
-1 , "i", plus_one);
|
||||
|
||||
pending = eldbus_proxy_property_get(test2_proxy, "Resp2", get_property_resp2, test2_proxy);
|
||||
|
||||
ecore_timer_add(10, _timer1_cb, NULL);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -1,33 +1,33 @@
|
|||
//Compile with:
|
||||
// gcc -o connman-list-services connman-list-services.c `pkg-config --cflags --libs edbus2 ecore`
|
||||
// gcc -o connman-list-services connman-list-services.c `pkg-config --cflags --libs eldbus ecore`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
static void
|
||||
on_services_get(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
on_services_get(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Message_Iter *array, *entry;
|
||||
Eldbus_Message_Iter *array, *entry;
|
||||
const char *errname, *errmsg;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
fprintf(stderr, "Error: %s %s\n", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "a(oa{sv})", &array))
|
||||
if (!eldbus_message_arguments_get(msg, "a(oa{sv})", &array))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get array\n");
|
||||
return;
|
||||
}
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 'r', &entry))
|
||||
while (eldbus_message_iter_get_and_next(array, 'r', &entry))
|
||||
{
|
||||
EDBus_Message_Iter *properties, *dict_entry;
|
||||
Eldbus_Message_Iter *properties, *dict_entry;
|
||||
const char *path;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(entry, "oa{sv}", &path, &properties))
|
||||
if (!eldbus_message_iter_arguments_get(entry, "oa{sv}", &path, &properties))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get entry contents\n");
|
||||
return;
|
||||
|
@ -35,12 +35,12 @@ on_services_get(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
|
||||
printf("service: %s\n", path);
|
||||
|
||||
while (edbus_message_iter_get_and_next(properties, 'e', &dict_entry))
|
||||
while (eldbus_message_iter_get_and_next(properties, 'e', &dict_entry))
|
||||
{
|
||||
EDBus_Message_Iter *variant;
|
||||
Eldbus_Message_Iter *variant;
|
||||
const char *key;
|
||||
|
||||
if (!edbus_message_iter_arguments_get(dict_entry, "sv", &key,
|
||||
if (!eldbus_message_iter_arguments_get(dict_entry, "sv", &key,
|
||||
&variant))
|
||||
{
|
||||
fprintf(stderr,
|
||||
|
@ -49,7 +49,7 @@ on_services_get(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
}
|
||||
|
||||
printf("\t%s: type %s\n", key,
|
||||
edbus_message_iter_signature_get(variant));
|
||||
eldbus_message_iter_signature_get(variant));
|
||||
|
||||
/* TODO: get the value from variant */
|
||||
}
|
||||
|
@ -59,36 +59,36 @@ on_services_get(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
int
|
||||
main(void)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Object *obj;
|
||||
EDBus_Proxy *manager;
|
||||
EDBus_Pending *pending;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Proxy *manager;
|
||||
Eldbus_Pending *pending;
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
if (!conn)
|
||||
{
|
||||
fprintf(stderr, "Error: could not get system bus\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
obj = edbus_object_get(conn, "net.connman", "/");
|
||||
obj = eldbus_object_get(conn, "net.connman", "/");
|
||||
if (!obj)
|
||||
{
|
||||
fprintf(stderr, "Error: could not get object\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
manager = edbus_proxy_get(obj, "net.connman.Manager");
|
||||
manager = eldbus_proxy_get(obj, "net.connman.Manager");
|
||||
if (!manager)
|
||||
{
|
||||
fprintf(stderr, "Error: could not get proxy\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
pending = edbus_proxy_call(manager, "GetServices", on_services_get, NULL,
|
||||
pending = eldbus_proxy_call(manager, "GetServices", on_services_get, NULL,
|
||||
-1, "");
|
||||
|
||||
if (!pending)
|
||||
|
@ -99,11 +99,11 @@ main(void)
|
|||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
edbus_proxy_unref(manager);
|
||||
edbus_object_unref(obj);
|
||||
edbus_connection_unref(conn);
|
||||
eldbus_proxy_unref(manager);
|
||||
eldbus_object_unref(obj);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -1,22 +1,22 @@
|
|||
//Compile with:
|
||||
// gcc -o ofono-dial ofono-dial.c `pkg-config --cflags --libs edbus2 ecore`
|
||||
// gcc -o ofono-dial ofono-dial.c `pkg-config --cflags --libs eldbus ecore`
|
||||
|
||||
#include "EDBus.h"
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
static void
|
||||
on_dial(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
on_dial(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
const char *call_path;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
fprintf(stderr, "Error: %s %s\n", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "o", &call_path))
|
||||
if (!eldbus_message_arguments_get(msg, "o", &call_path))
|
||||
{
|
||||
fprintf(stderr, "Error: could not get call path\n");
|
||||
return;
|
||||
|
@ -28,10 +28,10 @@ on_dial(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending
|
|||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Object *obj;
|
||||
EDBus_Proxy *manager;
|
||||
EDBus_Pending *pending;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
Eldbus_Proxy *manager;
|
||||
Eldbus_Pending *pending;
|
||||
const char *number, *hide_callerid;
|
||||
|
||||
if (argc < 2)
|
||||
|
@ -44,30 +44,30 @@ main(int argc, char *argv[])
|
|||
hide_callerid = (argc > 2) ? argv[2] : "";
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
if (!conn)
|
||||
{
|
||||
fprintf(stderr, "Error: could not get system bus\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
obj = edbus_object_get(conn, "org.ofono", "/");
|
||||
obj = eldbus_object_get(conn, "org.ofono", "/");
|
||||
if (!obj)
|
||||
{
|
||||
fprintf(stderr, "Error: could not get object\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
manager = edbus_proxy_get(obj, "org.ofono.Manager");
|
||||
manager = eldbus_proxy_get(obj, "org.ofono.Manager");
|
||||
if (!manager)
|
||||
{
|
||||
fprintf(stderr, "Error: could not get proxy\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
pending = edbus_proxy_call(manager, "Dial", on_dial, NULL,
|
||||
pending = eldbus_proxy_call(manager, "Dial", on_dial, NULL,
|
||||
-1, "ss", number, hide_callerid);
|
||||
if (!pending)
|
||||
{
|
||||
|
@ -77,11 +77,11 @@ main(int argc, char *argv[])
|
|||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
edbus_proxy_unref(manager);
|
||||
edbus_object_unref(obj);
|
||||
edbus_connection_unref(conn);
|
||||
eldbus_proxy_unref(manager);
|
||||
eldbus_object_unref(obj);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,247 @@
|
|||
//Compile with:
|
||||
// gcc -o server server.c `pkg-config --cflags --libs eldbus ecore`
|
||||
|
||||
#include "Eldbus.h"
|
||||
#include <Ecore.h>
|
||||
|
||||
#define BUS "org.Enlightenment"
|
||||
#define PATH "/org/enlightenment"
|
||||
#define PATH_TEST_SON "/org/enlightenment/son"
|
||||
#define INTERFACE "org.enlightenment.Test"
|
||||
|
||||
static Eldbus_Connection *conn;
|
||||
|
||||
static Eldbus_Message *
|
||||
_hello(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *message)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(message);
|
||||
eldbus_message_arguments_append(reply, "s", "Hello World");
|
||||
printf("Hello\n");
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_quit(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *message)
|
||||
{
|
||||
printf("Quit\n");
|
||||
ecore_main_loop_quit();
|
||||
return eldbus_message_method_return_new(message);
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
TEST_SIGNAL_ALIVE = 0,
|
||||
TEST_SIGNAL_HELLO
|
||||
};
|
||||
|
||||
static Eina_Bool
|
||||
send_signal_alive(void *data)
|
||||
{
|
||||
Eldbus_Service_Interface *iface = data;
|
||||
eldbus_service_signal_emit(iface, TEST_SIGNAL_ALIVE);
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
send_signal_hello(void *data)
|
||||
{
|
||||
Eldbus_Service_Interface *iface = data;
|
||||
eldbus_service_signal_emit(iface, TEST_SIGNAL_HELLO, "Hello World");
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_bool(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
Eina_Bool bool;
|
||||
if (!eldbus_message_arguments_get(msg, "b", &bool))
|
||||
printf("eldbus_message_arguments_get() error\n");
|
||||
eldbus_message_arguments_append(reply, "b", bool);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_byte(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
unsigned char byte;
|
||||
if (!eldbus_message_arguments_get(msg, "y", &byte))
|
||||
printf("eldbus_message_arguments_get() error\n");
|
||||
eldbus_message_arguments_append(reply, "y", byte);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_uint32(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
unsigned int uint32;
|
||||
if (!eldbus_message_arguments_get(msg, "u", &uint32))
|
||||
printf("eldbus_message_arguments_get() error\n");
|
||||
eldbus_message_arguments_append(reply, "u", uint32);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_int32(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
int int32;
|
||||
if (!eldbus_message_arguments_get(msg, "i", &int32))
|
||||
printf("eldbus_message_arguments_get() error\n");
|
||||
eldbus_message_arguments_append(reply, "i", int32);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_int16(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
short int int16;
|
||||
if (!eldbus_message_arguments_get(msg, "n", &int16))
|
||||
printf("eldbus_message_arguments_get() error\n");
|
||||
eldbus_message_arguments_append(reply, "n", int16);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_double(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
double d;
|
||||
if (!eldbus_message_arguments_get(msg, "d", &d))
|
||||
printf("eldbus_message_arguments_get() error\n");
|
||||
eldbus_message_arguments_append(reply, "d", d);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_send_string(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
const char *txt;
|
||||
if (!eldbus_message_arguments_get(msg, "s", &txt))
|
||||
printf("eldbus_message_arguments_get() error\n");
|
||||
eldbus_message_arguments_append(reply, "s", txt);
|
||||
return reply;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_resp_async(void *data)
|
||||
{
|
||||
Eldbus_Message *msg = data;
|
||||
eldbus_message_arguments_append(msg, "s", "Async test ok");
|
||||
eldbus_connection_send(conn, msg, NULL, NULL, -1);
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static Eldbus_Message *
|
||||
_async_test(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
|
||||
printf("Received a call to AsyncTest.\n");
|
||||
printf("Response will be send in 5 seconds.\n");
|
||||
ecore_timer_add(5, _resp_async, reply);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const Eldbus_Signal signals[] = {
|
||||
[TEST_SIGNAL_ALIVE] = {"Alive", NULL, 0},
|
||||
[TEST_SIGNAL_HELLO] = {"Hello", ELDBUS_ARGS({ "s", "message" }), 0},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const Eldbus_Method methods[] = {
|
||||
{
|
||||
"Hello", NULL, ELDBUS_ARGS({"s", "message"}),
|
||||
_hello
|
||||
},
|
||||
{
|
||||
"Quit", NULL, NULL,
|
||||
_quit, ELDBUS_METHOD_FLAG_DEPRECATED
|
||||
},
|
||||
{ "SendBool", ELDBUS_ARGS({"b", "bool"}), ELDBUS_ARGS({"b", "bool"}),
|
||||
_send_bool
|
||||
},
|
||||
{ "SendByte", ELDBUS_ARGS({"y", "byte"}), ELDBUS_ARGS({"y", "byte"}),
|
||||
_send_byte
|
||||
},
|
||||
{ "SendUint32", ELDBUS_ARGS({"u", "uint32"}), ELDBUS_ARGS({"u", "uint32"}),
|
||||
_send_uint32
|
||||
},
|
||||
{ "SendInt32", ELDBUS_ARGS({"i", "int32"}), ELDBUS_ARGS({"i", "int32"}),
|
||||
_send_int32
|
||||
},
|
||||
{ "SendInt16", ELDBUS_ARGS({"n", "int16"}), ELDBUS_ARGS({"n", "int16"}),
|
||||
_send_int16
|
||||
},
|
||||
{ "SendDouble", ELDBUS_ARGS({"d", "double"}), ELDBUS_ARGS({"d", "double"}),
|
||||
_send_double
|
||||
},
|
||||
{ "SendString", ELDBUS_ARGS({"s", "string"}), ELDBUS_ARGS({"s", "string"}),
|
||||
_send_string
|
||||
},
|
||||
{ "AsyncTest", NULL, ELDBUS_ARGS({"s", "text"}),
|
||||
_async_test
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const Eldbus_Service_Interface_Desc iface_desc = {
|
||||
INTERFACE, methods, signals
|
||||
};
|
||||
|
||||
static void
|
||||
on_name_request(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
Eldbus_Service_Interface *iface;
|
||||
unsigned int reply;
|
||||
|
||||
iface = data;
|
||||
if (eldbus_message_error_get(msg, NULL, NULL))
|
||||
{
|
||||
printf("error on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "u", &reply))
|
||||
{
|
||||
printf("error geting arguments on on_name_request\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (reply != ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
|
||||
{
|
||||
printf("error name already in use\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ecore_timer_add(5, send_signal_alive, iface);
|
||||
ecore_timer_add(6, send_signal_hello, iface);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
Eldbus_Service_Interface *iface;
|
||||
|
||||
ecore_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
|
||||
iface = eldbus_service_interface_register(conn, PATH, &iface_desc);
|
||||
eldbus_name_request(conn, BUS, ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
|
||||
on_name_request, iface);
|
||||
|
||||
eldbus_service_interface_register(conn, PATH_TEST_SON, &iface_desc);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
//Compile with:
|
||||
// gcc -o simple-signal-emit simple-signal-emit.c `pkg-config --cflags --libs eldbus`
|
||||
|
||||
#include <Eldbus.h>
|
||||
|
||||
enum {
|
||||
TEST_SIGNAL_ALIVE,
|
||||
TEST_SIGNAL_PROP,
|
||||
TEST_SIGNAL_NAME,
|
||||
};
|
||||
|
||||
static const Eldbus_Signal test_signals[] = {
|
||||
[TEST_SIGNAL_ALIVE] = { "Alive" },
|
||||
[TEST_SIGNAL_PROP] = { "Properties", ELDBUS_ARGS({ "a{ss}", "properties"}) },
|
||||
[TEST_SIGNAL_NAME] = { "Name", ELDBUS_ARGS({ "s", "name"}) },
|
||||
{ }
|
||||
};
|
||||
|
||||
/* signal with complex arguments (a dict) */
|
||||
static void emit_properties(Eldbus_Service_Interface *iface)
|
||||
{
|
||||
Eldbus_Message *alive2;
|
||||
Eldbus_Message_Iter *iter, *dict;
|
||||
struct keyval {
|
||||
const char *key;
|
||||
const char *val;
|
||||
} keyval[] = {
|
||||
{ "key1", "val1" },
|
||||
{ "key2", "val2" },
|
||||
{ }
|
||||
};
|
||||
struct keyval *k;
|
||||
|
||||
alive2 = eldbus_service_signal_new(iface, TEST_SIGNAL_PROP);
|
||||
iter = eldbus_message_iter_get(alive2);
|
||||
dict = eldbus_message_iter_container_new(iter, 'a', "{ss}");
|
||||
|
||||
for (k = keyval; k && k->key; k++)
|
||||
{
|
||||
Eldbus_Message_Iter *entry = eldbus_message_iter_container_new(dict, 'e',
|
||||
NULL);
|
||||
eldbus_message_iter_arguments_append(entry, "ss", k->key, k->val);
|
||||
eldbus_message_iter_container_close(dict, entry);
|
||||
}
|
||||
|
||||
eldbus_message_iter_container_close(iter, dict);
|
||||
eldbus_service_signal_send(iface, alive2);
|
||||
}
|
||||
|
||||
/* signal with basic args */
|
||||
static void emit_name(Eldbus_Service_Interface *iface)
|
||||
{
|
||||
eldbus_service_signal_emit(iface, TEST_SIGNAL_NAME, "TEST");
|
||||
}
|
||||
|
||||
/* simple signal example */
|
||||
static void emit_alive(Eldbus_Service_Interface *iface)
|
||||
{
|
||||
eldbus_service_signal_emit(iface, TEST_SIGNAL_ALIVE);
|
||||
}
|
||||
|
||||
static const Eldbus_Service_Interface_Desc iface_desc = {
|
||||
"org.enlightenment.Test", NULL, test_signals
|
||||
};
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Service_Interface *iface;
|
||||
|
||||
eldbus_init();
|
||||
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
iface = eldbus_service_interface_register(conn, "/org/enlightenment",
|
||||
&iface_desc);
|
||||
|
||||
emit_alive(iface);
|
||||
emit_name(iface);
|
||||
emit_properties(iface);
|
||||
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
eldbus_shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,222 +0,0 @@
|
|||
/**
|
||||
* @page edbus_main EDBus
|
||||
*
|
||||
* @date 2012 (created)
|
||||
*
|
||||
* @section toc Table of Contents
|
||||
*
|
||||
* @li @ref edbus_main_intro
|
||||
* @li @ref edbus_main_compiling
|
||||
* @li @ref edbus_main_next_steps
|
||||
* @li @ref edbus_main_intro_example
|
||||
*
|
||||
* @section edbus_main_intro Introduction
|
||||
*
|
||||
* EDBus is a wrapper around the
|
||||
* <a href="http://www.freedesktop.org/wiki/Software/dbus">dbus</a>
|
||||
* library, which is a message bus system. It also implements a set of
|
||||
* specifications using dbus as interprocess communication.
|
||||
*
|
||||
* @subsection edbus_modules_sec Modules
|
||||
*
|
||||
* <ul>
|
||||
* <li> @ref EDBus_Core
|
||||
* <li> @ref EDBus_Conneciton
|
||||
* <li> @ref EDBus_Object_Mapper
|
||||
* <li> @ref EDBus_Proxy
|
||||
* <li> @ref EDBus_Message
|
||||
* <ul>
|
||||
* <li>@ref EDBus_Message_Iter
|
||||
* <li>@ref EDBus_Message_Helpers
|
||||
* <li>@ref Eina_Value
|
||||
* </ul>
|
||||
* <li> @ref EDBus_Signal_Handler
|
||||
* <li> @ref EDBus_Pending
|
||||
* <li> @ref EDBus_Service
|
||||
* <li> @ref EDBus_Basic
|
||||
* </ul>
|
||||
*
|
||||
* @section edbus_main_compiling How to compile
|
||||
*
|
||||
* EDBus is a library your application links to. The procedure for this is
|
||||
* very simple. You simply have to compile your application with the
|
||||
* appropriate compiler flags that the @c pkg-config script outputs. For
|
||||
* example:
|
||||
*
|
||||
* Compiling C or C++ files into object files:
|
||||
*
|
||||
* @verbatim
|
||||
gcc -c -o main.o main.c `pkg-config --cflags edbus2`
|
||||
@endverbatim
|
||||
*
|
||||
* Linking object files into a binary executable:
|
||||
*
|
||||
* @verbatim
|
||||
gcc -o my_application main.o `pkg-config --libs edbus2`
|
||||
@endverbatim
|
||||
*
|
||||
* See @ref pkgconfig
|
||||
*
|
||||
* @section edbus_main_next_steps Next Steps
|
||||
*
|
||||
* After you understood what EDBus is and installed it in your system
|
||||
* you should proceed understanding the programming interface.
|
||||
*
|
||||
* Recommended reading:
|
||||
* @li @ref EDBus_Core for library init, shutdown and getting a connection.
|
||||
* @li @ref EDBus_Proxy to easily bind a client object to an interface.
|
||||
* @li @ref EDBus_Object_Mapper to monitor server objects and properties.
|
||||
*
|
||||
* @section edbus_main_intro_example Introductory Example
|
||||
*
|
||||
* @include ofono-dial.c
|
||||
*
|
||||
* More examples can be found at @ref edbus_examples.
|
||||
*/
|
||||
#ifndef EDBUS_H
|
||||
#define EDBUS_H
|
||||
|
||||
#include <Eina.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef EAPI
|
||||
# undef EAPI
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# ifdef EFL_EDBUS_BUILD
|
||||
# ifdef DLL_EXPORT
|
||||
# define EAPI __declspec(dllexport)
|
||||
# else
|
||||
# define EAPI
|
||||
# endif /* ! DLL_EXPORT */
|
||||
# else
|
||||
# define EAPI __declspec(dllimport)
|
||||
# endif /* ! EFL_EDBUS_BUILD */
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# if __GNUC__ >= 4
|
||||
# define EAPI __attribute__ ((visibility("default")))
|
||||
# else
|
||||
# define EAPI
|
||||
# endif
|
||||
# else
|
||||
# define EAPI
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Core Core
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define EDBUS_VERSION_MAJOR 1
|
||||
#define EDBUS_VERSION_MINOR 8
|
||||
|
||||
#define EDBUS_FDO_BUS "org.freedesktop.DBus"
|
||||
#define EDBUS_FDO_PATH "/org/freedesktop/DBus"
|
||||
#define EDBUS_FDO_INTERFACE EDBUS_FDO_BUS
|
||||
#define EDBUS_FDO_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties"
|
||||
#define EDBUS_FDO_INTERFACE_OBJECT_MANAGER "org.freedesktop.DBus.ObjectManager"
|
||||
#define EDBUS_FDO_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable"
|
||||
#define EDBUS_FDO_INTEFACE_PEER "org.freedesktop.DBus.Peer"
|
||||
#define EDBUS_ERROR_PENDING_CANCELED "org.enlightenment.DBus.Canceled"
|
||||
|
||||
typedef struct _EDBus_Version
|
||||
{
|
||||
int major;
|
||||
int minor;
|
||||
int micro;
|
||||
int revision;
|
||||
} EDBus_Version;
|
||||
|
||||
EAPI extern const EDBus_Version * edbus_version;
|
||||
|
||||
/**
|
||||
* @brief Initialize edbus.
|
||||
*
|
||||
* @return 1 or greater on success, 0 otherwise
|
||||
*/
|
||||
EAPI int edbus_init(void);
|
||||
/**
|
||||
* @brief Shutdown edbus.
|
||||
*
|
||||
* @return 0 if e_dbus shuts down, greater than 0 otherwise.
|
||||
*/
|
||||
EAPI int edbus_shutdown(void);
|
||||
|
||||
typedef void (*EDBus_Free_Cb)(void *data, const void *deadptr);
|
||||
|
||||
/**
|
||||
* @typedef EDBus_Connection
|
||||
*
|
||||
* Represents a connection of one the type of connection with the DBus daemon.
|
||||
*/
|
||||
typedef struct _EDBus_Connection EDBus_Connection;
|
||||
/**
|
||||
* @typedef EDBus_Object
|
||||
*
|
||||
* Represents an object path already attached with bus name or unique id.
|
||||
*/
|
||||
typedef struct _EDBus_Object EDBus_Object;
|
||||
/**
|
||||
* @typedef EDBus_Proxy
|
||||
*
|
||||
* Represents an interface of an object path.
|
||||
*/
|
||||
typedef struct _EDBus_Proxy EDBus_Proxy;
|
||||
/**
|
||||
* @typedef EDBus_Message
|
||||
*
|
||||
* Represents the way data is sent and received in DBus.
|
||||
*/
|
||||
typedef struct _EDBus_Message EDBus_Message;
|
||||
/**
|
||||
* @typedef EDBus_Message_Iter
|
||||
*
|
||||
* Represents an iterator over a complex message type (array, dict, struct,
|
||||
* or variant). Its life is bound to the message that contains
|
||||
* it. The same applies to the returned data.
|
||||
*/
|
||||
typedef struct _EDBus_Message_Iter EDBus_Message_Iter;
|
||||
/**
|
||||
* @typedef EDBus_Pending
|
||||
*
|
||||
* Represents a message that has been sent but has not yet reached its
|
||||
* destination.
|
||||
*/
|
||||
typedef struct _EDBus_Pending EDBus_Pending;
|
||||
|
||||
/**
|
||||
* @typedef EDBus_Signal_Handler
|
||||
*
|
||||
* Represents a listener that will listen for signals emitted by other
|
||||
* applications.
|
||||
*/
|
||||
typedef struct _EDBus_Signal_Handler EDBus_Signal_Handler;
|
||||
|
||||
typedef void (*EDBus_Message_Cb)(void *data, const EDBus_Message *msg, EDBus_Pending *pending);
|
||||
typedef void (*EDBus_Signal_Cb)(void *data, const EDBus_Message *msg);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "edbus_connection.h"
|
||||
#include "edbus_message.h"
|
||||
#include "edbus_signal_handler.h"
|
||||
#include "edbus_pending.h"
|
||||
#include "edbus_object.h"
|
||||
#include "edbus_proxy.h"
|
||||
#include "edbus_freedesktop.h"
|
||||
#include "edbus_service.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,139 +0,0 @@
|
|||
#ifndef EDBUS_CONNECTION_H
|
||||
#define EDBUS_CONNECTION_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Conneciton Connection
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
EDBUS_CONNECTION_TYPE_UNKNOWN = 0, /**< sentinel, not a real type */
|
||||
EDBUS_CONNECTION_TYPE_SESSION,
|
||||
EDBUS_CONNECTION_TYPE_SYSTEM,
|
||||
EDBUS_CONNECTION_TYPE_STARTER,
|
||||
EDBUS_CONNECTION_TYPE_LAST /**< sentinel, not a real type */
|
||||
} EDBus_Connection_Type;
|
||||
|
||||
#define EDBUS_TIMEOUT_INFINITE ((int) 0x7fffffff)
|
||||
|
||||
/**
|
||||
* Establish a connection to bus and integrate it with the ecore main
|
||||
* loop. If a connection of given type was already created before, its
|
||||
* reference counter is incremented and the connection is returned.
|
||||
*
|
||||
* @param type type of connection e.g EDBUS_CONNECTION_TYPE_SESSION,
|
||||
* EDBUS_CONNECTION_TYPE_SYSTEM or EDBUS_CONNECTION_TYPE_STARTER
|
||||
*
|
||||
* @return connection with bus
|
||||
*/
|
||||
EAPI EDBus_Connection *edbus_connection_get(EDBus_Connection_Type type);
|
||||
|
||||
/**
|
||||
* Always create and establish a new connection to bus and integrate it with
|
||||
* the ecore main loop. Differently from edbus_connection_get(), this function
|
||||
* guarantees to create a new connection to the D-Bus daemon and the connection
|
||||
* is not shared by any means.
|
||||
*
|
||||
* @param type type of connection e.g EDBUS_CONNECTION_TYPE_SESSION,
|
||||
* EDBUS_CONNECTION_TYPE_SYSTEM or EDBUS_CONNECTION_TYPE_STARTER
|
||||
*
|
||||
* @return connection with bus
|
||||
*/
|
||||
EAPI EDBus_Connection *edbus_private_connection_get(EDBus_Connection_Type type);
|
||||
|
||||
/**
|
||||
* @brief Increment connection reference count.
|
||||
*
|
||||
* @param conn The given EDBus_Connection object to reference
|
||||
*/
|
||||
EAPI EDBus_Connection *edbus_connection_ref(EDBus_Connection *conn) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrement connection reference count.
|
||||
*
|
||||
* If reference count reaches 0, the connection to bus will be dropped and all
|
||||
* its children will be invalidated.
|
||||
*/
|
||||
EAPI void edbus_connection_unref(EDBus_Connection *conn) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when connection is freed
|
||||
*
|
||||
* @param conn The connection object to add the callback to.
|
||||
* @param cb callback to be called
|
||||
* @param data data passed to callback
|
||||
*/
|
||||
EAPI void edbus_connection_free_cb_add(EDBus_Connection *conn, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_connection_free_cb_add().
|
||||
*/
|
||||
EAPI void edbus_connection_free_cb_del(EDBus_Connection *conn, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Set an attached data pointer to an object with a given string key.
|
||||
*
|
||||
* @param conn The connection object to store data to
|
||||
* @param key to identify data
|
||||
* @param data data that will be stored
|
||||
*/
|
||||
EAPI void edbus_connection_data_set(EDBus_Connection *conn, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Get data stored in connection.
|
||||
*
|
||||
* @param conn connection where data is stored
|
||||
* @param key key that identifies data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *edbus_connection_data_get(const EDBus_Connection *conn, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Del data stored in connection.
|
||||
*
|
||||
* @param conn connection where data is stored
|
||||
* @param key that identifies data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *edbus_connection_data_del(EDBus_Connection *conn, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
EDBUS_CONNECTION_EVENT_DEL,
|
||||
EDBUS_CONNECTION_EVENT_DISCONNECTED,
|
||||
EDBUS_CONNECTION_EVENT_LAST /**< sentinel, not a real event type */
|
||||
} EDBus_Connection_Event_Type;
|
||||
|
||||
typedef void (*EDBus_Connection_Event_Cb)(void *data, EDBus_Connection *conn, void *event_info);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when an event occurs of the
|
||||
* type passed.
|
||||
*/
|
||||
EAPI void edbus_connection_event_callback_add(EDBus_Connection *conn, EDBus_Connection_Event_Type type, EDBus_Connection_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_connection_event_callback_add().
|
||||
*/
|
||||
EAPI void edbus_connection_event_callback_del(EDBus_Connection *conn, EDBus_Connection_Event_Type type, EDBus_Connection_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Send a message.
|
||||
*
|
||||
* @param conn the connection where the message will be sent
|
||||
* @param msg message that will be sent
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* to be executed when a response arrives
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to use default internal value or
|
||||
* EDBUS_TIMEOUT_INFINITE for no timeout
|
||||
*/
|
||||
EAPI EDBus_Pending *edbus_connection_send(EDBus_Connection *conn, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,82 +0,0 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include <dbus/dbus.h>
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_name_request(EDBus_Connection *conn, const char *name, unsigned int flags, EDBus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return edbus_proxy_call(conn->fdo_proxy, "RequestName", cb,
|
||||
cb_data, -1, "su", name, flags);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_name_release(EDBus_Connection *conn, const char *name, EDBus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return edbus_proxy_call(conn->fdo_proxy, "ReleaseName", cb,
|
||||
cb_data, -1, "s", name);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_name_owner_get(EDBus_Connection *conn, const char *name, EDBus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return edbus_proxy_call(conn->fdo_proxy, "GetNameOwner", cb,
|
||||
cb_data, -1, "s", name);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_name_owner_has(EDBus_Connection *conn, const char *name, EDBus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return edbus_proxy_call(conn->fdo_proxy, "NameHasOwner", cb,
|
||||
cb_data, -1, "s", name);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_names_list(EDBus_Connection *conn, EDBus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
|
||||
return edbus_proxy_call(conn->fdo_proxy, "ListNames", cb,
|
||||
cb_data, -1, "");
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_names_activatable_list(EDBus_Connection *conn, EDBus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
|
||||
return edbus_proxy_call(conn->fdo_proxy, "ListActivatableNames", cb,
|
||||
cb_data, -1, "");
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_name_start(EDBus_Connection *conn, const char *name, unsigned int flags, EDBus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return edbus_proxy_call(conn->fdo_proxy, "StartServiceByName", cb,
|
||||
cb_data, -1, "su", name, flags);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_object_managed_objects_get(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Pending *p;
|
||||
msg = edbus_object_method_call_new(obj, EDBUS_FDO_INTERFACE_OBJECT_MANAGER,
|
||||
"GetManagedObjects");
|
||||
p = edbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
|
@ -1,143 +0,0 @@
|
|||
#ifndef EDBUS_FREEDESKTOP_H
|
||||
#define EDBUS_FREEDESKTOP_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Basic Basic FreeDesktop.Org Methods
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define EDBUS_NAME_REQUEST_FLAG_ALLOW_REPLACEMENT 0x1 /**< Allow another service to become the primary owner if requested */
|
||||
#define EDBUS_NAME_REQUEST_FLAG_REPLACE_EXISTING 0x2 /**< Request to replace the current primary owner */
|
||||
#define EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE 0x4 /**< If we can not become the primary owner do not place us in the queue */
|
||||
|
||||
/* Replies to request for a name */
|
||||
#define EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER 1 /**< Service has become the primary owner of the requested name */
|
||||
#define EDBUS_NAME_REQUEST_REPLY_IN_QUEUE 2 /**< Service could not become the primary owner and has been placed in the queue */
|
||||
#define EDBUS_NAME_REQUEST_REPLY_EXISTS 3 /**< Service is already in the queue */
|
||||
#define EDBUS_NAME_REQUEST_REPLY_ALREADY_OWNER 4 /**< Service is already the primary owner */
|
||||
|
||||
EAPI EDBus_Pending *edbus_name_request(EDBus_Connection *conn, const char *bus, unsigned int flags, EDBus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/* Replies to releasing a name */
|
||||
#define EDBUS_NAME_RELEASE_REPLY_RELEASED 1 /**< Service was released from the given name */
|
||||
#define EDBUS_NAME_RELEASE_REPLY_NON_EXISTENT 2 /**< The given name does not exist on the bus */
|
||||
#define EDBUS_NAME_RELEASE_REPLY_NOT_OWNER 3 /**< Service is not an owner of the given name */
|
||||
|
||||
EAPI EDBus_Pending *edbus_name_release(EDBus_Connection *conn, const char *bus, EDBus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI EDBus_Pending *edbus_name_owner_get(EDBus_Connection *conn, const char *bus, EDBus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI EDBus_Pending *edbus_name_owner_has(EDBus_Connection *conn, const char *bus, EDBus_Message_Cb cb, const void *cb_data);
|
||||
EAPI EDBus_Pending *edbus_names_list(EDBus_Connection *conn, EDBus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1);
|
||||
EAPI EDBus_Pending *edbus_names_activatable_list(EDBus_Connection *conn, EDBus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1);
|
||||
|
||||
/* Replies to service starts */
|
||||
#define EDBUS_NAME_START_REPLY_SUCCESS 1 /**< Service was auto started */
|
||||
#define EDBUS_NAME_START_REPLY_ALREADY_RUNNING 2 /**< Service was already running */
|
||||
|
||||
EAPI EDBus_Pending *edbus_name_start(EDBus_Connection *conn, const char *bus, unsigned int flags, EDBus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
typedef void (*EDBus_Name_Owner_Changed_Cb)(void *data, const char *bus, const char *old_id, const char *new_id);
|
||||
|
||||
/**
|
||||
* Add a callback to be called when unique id of a bus name changed.
|
||||
*
|
||||
* This function implicitly calls edbus_name_owner_get() in order to be able to
|
||||
* monitor the name. If the only interest is to receive notifications when the
|
||||
* name in fact changes, pass EINA_FALSE to @param allow_initial_call so your
|
||||
* callback will not be called on first retrieval of name owner. If the
|
||||
* initial state is important, pass EINA_TRUE to this parameter.
|
||||
*
|
||||
* @param conn connection
|
||||
* @param bus name of bus
|
||||
* @param cb callback
|
||||
* @param cb_data context data
|
||||
* @param allow_initial_call allow call callback with actual id of the bus
|
||||
*/
|
||||
EAPI void edbus_name_owner_changed_callback_add(EDBus_Connection *conn, const char *bus, EDBus_Name_Owner_Changed_Cb cb, const void *cb_data, Eina_Bool allow_initial_call) EINA_ARG_NONNULL(1, 2, 3);
|
||||
/**
|
||||
* Remove callback added with edbus_name_owner_changed_callback_add().
|
||||
*
|
||||
* @param conn connection
|
||||
* @param bus name of bus
|
||||
* @param cb callback
|
||||
* @param cb_data context data
|
||||
*/
|
||||
EAPI void edbus_name_owner_changed_callback_del(EDBus_Connection *conn, const char *bus, EDBus_Name_Owner_Changed_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_FDO_Peer org.freedesktop.DBus.Peer
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
EAPI EDBus_Pending *edbus_object_peer_ping(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI EDBus_Pending *edbus_object_peer_machine_id_get(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_FDO_Introspectable org.freedesktop.DBus.Introspectable
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
EAPI EDBus_Pending *edbus_object_introspect(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_FDO_Properties org.freedesktop.DBus.Properties
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Enable or disable local cache of properties.
|
||||
*
|
||||
* After enable you can call edbus_proxy_property_local_get() or
|
||||
* edbus_proxy_property_local_get_all() to get cached properties.
|
||||
*
|
||||
* @note After enable, it will asynchrony get the properties values.
|
||||
*/
|
||||
EAPI void edbus_proxy_properties_monitor(EDBus_Proxy *proxy, Eina_Bool enable) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI EDBus_Pending *edbus_proxy_property_get(EDBus_Proxy *proxy, const char *name, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI EDBus_Pending *edbus_proxy_property_set(EDBus_Proxy *proxy, const char *name, const char *sig, const void *value, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2, 3, 4);
|
||||
EAPI EDBus_Pending *edbus_proxy_property_get_all(EDBus_Proxy *proxy, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI EDBus_Signal_Handler *edbus_proxy_properties_changed_callback_add(EDBus_Proxy *proxy, EDBus_Signal_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* Return the cached value of property.
|
||||
* This only work if you have enable edbus_proxy_properties_monitor or
|
||||
* if you have call edbus_proxy_event_callback_add of type
|
||||
* EDBUS_PROXY_EVENT_PROPERTY_CHANGED and the property you want had changed.
|
||||
*/
|
||||
EAPI Eina_Value *edbus_proxy_property_local_get(EDBus_Proxy *proxy, const char *name) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* Return a Eina_Hash with all cached properties.
|
||||
* This only work if you have enable edbus_proxy_properties_monitor or
|
||||
* if you have call edbus_proxy_event_callback_add of type
|
||||
* EDBUS_PROXY_EVENT_PROPERTY_CHANGED.
|
||||
*/
|
||||
EAPI const Eina_Hash *edbus_proxy_property_local_get_all(EDBus_Proxy *proxy) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_FDO_ObjectManager org.freedesktop.DBus.ObjectManager *
|
||||
* @{
|
||||
*/
|
||||
|
||||
EAPI EDBus_Pending *edbus_object_managed_objects_get(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,36 +0,0 @@
|
|||
/**
|
||||
* @ingroup EDBus_Message
|
||||
* @defgroup Eina_Value Eina_Value to/from Message
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Convert EDBus_Message to Eina_Value
|
||||
*
|
||||
* @param msg Message
|
||||
* @return Eina_Value of type Eina_Value_Type_Struct
|
||||
*/
|
||||
EAPI Eina_Value *edbus_message_to_eina_value(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* Convert EDBus_Message_Iter of type variant, struct or dict entry to
|
||||
* Eina_Value.
|
||||
*
|
||||
* @param iter Message iterator
|
||||
* @return Eina_Value of type Eina_Value_Type_Struct
|
||||
*/
|
||||
EAPI Eina_Value *edbus_message_iter_struct_like_to_eina_value(const EDBus_Message_Iter *iter);
|
||||
|
||||
/**
|
||||
* Convert Eina_Value to EDBus_Message
|
||||
*
|
||||
* @param signature dbus signature
|
||||
* @param msg where data will be put
|
||||
* @param value source of data, must be of type Eina_Value_Type_Struct
|
||||
* @return success or not
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_from_eina_value(const char *signature, EDBus_Message *msg, const Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
|
@ -1,31 +0,0 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
|
||||
EAPI void
|
||||
edbus_message_iter_dict_iterate(EDBus_Message_Iter *array, const char *signature, EDBus_Dict_Cb_Get cb, const void *data)
|
||||
{
|
||||
EDBus_Message_Iter *entry;
|
||||
char *iter_sig;
|
||||
unsigned len;
|
||||
EINA_SAFETY_ON_FALSE_RETURN(array);
|
||||
EINA_SAFETY_ON_NULL_RETURN(signature);
|
||||
|
||||
iter_sig = edbus_message_iter_signature_get(array);
|
||||
len = strlen(iter_sig + 1);
|
||||
if (strncmp(signature, iter_sig + 1, len - 1))
|
||||
{
|
||||
ERR("Unexpected signature, expected is: %s", iter_sig);
|
||||
free(iter_sig);
|
||||
return;
|
||||
}
|
||||
free(iter_sig);
|
||||
|
||||
while (edbus_message_iter_get_and_next(array, 'e', &entry))
|
||||
{
|
||||
const void *key;
|
||||
EDBus_Message_Iter *var;
|
||||
if (!edbus_message_iter_arguments_get(entry, signature, &key, &var))
|
||||
continue;
|
||||
cb((void *)data, key, var);
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
/**
|
||||
* @ingroup EDBus_Message
|
||||
* @defgroup EDBus_Message_Helpers Message Helpers
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef void (*EDBus_Dict_Cb_Get)(void *data, const void *key, EDBus_Message_Iter *var);
|
||||
|
||||
/**
|
||||
* Iterate over a dictionary.
|
||||
*
|
||||
* @param dict iterator with array of entry
|
||||
* @param signature of entry, example: "sv"
|
||||
* @param cb callback that will be called in each entry
|
||||
* @param data context data
|
||||
*/
|
||||
EAPI void edbus_message_iter_dict_iterate(EDBus_Message_Iter *dict, const char *signature, EDBus_Dict_Cb_Get cb, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
|
@ -1,676 +0,0 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include <dbus/dbus.h>
|
||||
|
||||
/* TODO: mempool of EDBus_Object, Edbus_Object_Context_Event_Cb and
|
||||
* EDBus_Object_Context_Event
|
||||
*/
|
||||
|
||||
#define EDBUS_OBJECT_CHECK(obj) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj); \
|
||||
if (!EINA_MAGIC_CHECK(obj, EDBUS_OBJECT_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(obj, EDBUS_OBJECT_MAGIC); \
|
||||
return; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN(obj->refcount <= 0); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_OBJECT_CHECK_RETVAL(obj, retval) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, retval); \
|
||||
if (!EINA_MAGIC_CHECK(obj, EDBUS_OBJECT_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(obj, EDBUS_OBJECT_MAGIC); \
|
||||
return retval; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(obj->refcount <= 0, retval); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_OBJECT_CHECK_GOTO(obj, label) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_GOTO(obj, label); \
|
||||
if (!EINA_MAGIC_CHECK(obj, EDBUS_OBJECT_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(obj, EDBUS_OBJECT_MAGIC); \
|
||||
goto label; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_GOTO(obj->refcount <= 0, label); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
Eina_Bool
|
||||
edbus_object_init(void)
|
||||
{
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
edbus_object_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void _edbus_object_event_callback_call(EDBus_Object *obj, EDBus_Object_Event_Type type, const void *event_info);
|
||||
static void _edbus_object_context_event_cb_del(EDBus_Object_Context_Event *ce, EDBus_Object_Context_Event_Cb *ctx);
|
||||
static void _on_connection_free(void *data, const void *dead_pointer);
|
||||
static void _on_signal_handler_free(void *data, const void *dead_pointer);
|
||||
|
||||
static void
|
||||
_edbus_object_call_del(EDBus_Object *obj)
|
||||
{
|
||||
EDBus_Object_Context_Event *ce;
|
||||
|
||||
_edbus_object_event_callback_call(obj, EDBUS_OBJECT_EVENT_DEL, NULL);
|
||||
|
||||
/* clear all del callbacks so we don't call them twice at
|
||||
* _edbus_object_clear()
|
||||
*/
|
||||
ce = obj->event_handlers + EDBUS_OBJECT_EVENT_DEL;
|
||||
while (ce->list)
|
||||
{
|
||||
EDBus_Object_Context_Event_Cb *ctx;
|
||||
|
||||
ctx = EINA_INLIST_CONTAINER_GET(ce->list,
|
||||
EDBus_Object_Context_Event_Cb);
|
||||
_edbus_object_context_event_cb_del(ce, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_object_clear(EDBus_Object *obj)
|
||||
{
|
||||
EDBus_Signal_Handler *h;
|
||||
EDBus_Pending *p;
|
||||
Eina_List *iter, *iter_next;
|
||||
Eina_Inlist *in_l;
|
||||
DBG("obj=%p, refcount=%d, name=%s, path=%s",
|
||||
obj, obj->refcount, obj->name, obj->path);
|
||||
|
||||
obj->refcount = 1;
|
||||
_edbus_object_call_del(obj);
|
||||
edbus_connection_name_object_del(obj->conn, obj);
|
||||
|
||||
/* NOTE: obj->proxies is deleted from obj->cbs_free. */
|
||||
|
||||
EINA_LIST_FOREACH_SAFE(obj->signal_handlers, iter, iter_next, h)
|
||||
{
|
||||
DBG("obj=%p delete owned signal handler %p %s",
|
||||
obj, h, edbus_signal_handler_match_get(h));
|
||||
edbus_signal_handler_del(h);
|
||||
}
|
||||
EINA_INLIST_FOREACH_SAFE(obj->pendings, in_l, p)
|
||||
{
|
||||
DBG("obj=%p delete owned pending call=%p dest=%s path=%s %s.%s()",
|
||||
obj, p,
|
||||
edbus_pending_destination_get(p),
|
||||
edbus_pending_path_get(p),
|
||||
edbus_pending_interface_get(p),
|
||||
edbus_pending_method_get(p));
|
||||
edbus_pending_cancel(p);
|
||||
}
|
||||
|
||||
edbus_cbs_free_dispatch(&(obj->cbs_free), obj);
|
||||
obj->refcount = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_object_free(EDBus_Object *obj)
|
||||
{
|
||||
unsigned int i;
|
||||
EDBus_Signal_Handler *h;
|
||||
|
||||
if (obj->proxies)
|
||||
{
|
||||
Eina_Iterator *iterator = eina_hash_iterator_data_new(obj->proxies);
|
||||
EDBus_Proxy *proxy;
|
||||
EINA_ITERATOR_FOREACH(iterator, proxy)
|
||||
ERR("obj=%p alive proxy=%p %s", obj, proxy,
|
||||
edbus_proxy_interface_get(proxy));
|
||||
eina_iterator_free(iterator);
|
||||
eina_hash_free(obj->proxies);
|
||||
}
|
||||
|
||||
EINA_LIST_FREE(obj->signal_handlers, h)
|
||||
{
|
||||
if (h->dangling)
|
||||
edbus_signal_handler_free_cb_del(h, _on_signal_handler_free, obj);
|
||||
else
|
||||
ERR("obj=%p alive handler=%p %s", obj, h,
|
||||
edbus_signal_handler_match_get(h));
|
||||
}
|
||||
|
||||
if (obj->pendings)
|
||||
CRITICAL("Object %p released with live pending calls!", obj);
|
||||
|
||||
for (i = 0; i < EDBUS_OBJECT_EVENT_LAST; i++)
|
||||
{
|
||||
EDBus_Object_Context_Event *ce = obj->event_handlers + i;
|
||||
while (ce->list)
|
||||
{
|
||||
EDBus_Object_Context_Event_Cb *ctx;
|
||||
|
||||
ctx = EINA_INLIST_CONTAINER_GET(ce->list,
|
||||
EDBus_Object_Context_Event_Cb);
|
||||
_edbus_object_context_event_cb_del(ce, ctx);
|
||||
}
|
||||
eina_list_free(ce->to_delete);
|
||||
}
|
||||
|
||||
if (obj->interfaces_added)
|
||||
edbus_signal_handler_del(obj->interfaces_added);
|
||||
if (obj->interfaces_removed)
|
||||
edbus_signal_handler_del(obj->interfaces_removed);
|
||||
if (obj->properties_changed)
|
||||
edbus_signal_handler_del(obj->properties_changed);
|
||||
eina_stringshare_del(obj->name);
|
||||
eina_stringshare_del(obj->path);
|
||||
EINA_MAGIC_SET(obj, EINA_MAGIC_NONE);
|
||||
|
||||
free(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_connection_free(void *data, const void *dead_pointer EINA_UNUSED)
|
||||
{
|
||||
EDBus_Object *obj = data;
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
_edbus_object_clear(obj);
|
||||
_edbus_object_free(obj);
|
||||
}
|
||||
|
||||
EAPI EDBus_Object *
|
||||
edbus_object_get(EDBus_Connection *conn, const char *bus, const char *path)
|
||||
{
|
||||
EDBus_Object *obj;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(bus, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
|
||||
|
||||
obj = edbus_connection_name_object_get(conn, bus, path);
|
||||
if (obj)
|
||||
return edbus_object_ref(obj);
|
||||
|
||||
obj = calloc(1, sizeof(EDBus_Object));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
|
||||
|
||||
obj->conn = conn;
|
||||
obj->refcount = 1;
|
||||
obj->path = eina_stringshare_add(path);
|
||||
obj->name = eina_stringshare_add(bus);
|
||||
obj->proxies = eina_hash_string_small_new(NULL);
|
||||
EINA_SAFETY_ON_NULL_GOTO(obj->proxies, cleanup);
|
||||
EINA_MAGIC_SET(obj, EDBUS_OBJECT_MAGIC);
|
||||
|
||||
edbus_connection_name_object_set(conn, obj);
|
||||
edbus_connection_free_cb_add(obj->conn, _on_connection_free, obj);
|
||||
|
||||
obj->properties = edbus_proxy_get(obj, EDBUS_FDO_INTERFACE_PROPERTIES);
|
||||
|
||||
return obj;
|
||||
|
||||
cleanup:
|
||||
eina_stringshare_del(obj->path);
|
||||
eina_stringshare_del(obj->name);
|
||||
free(obj);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void _on_signal_handler_free(void *data, const void *dead_pointer);
|
||||
|
||||
static void
|
||||
_edbus_object_unref(EDBus_Object *obj)
|
||||
{
|
||||
obj->refcount--;
|
||||
if (obj->refcount > 0) return;
|
||||
|
||||
edbus_connection_free_cb_del(obj->conn, _on_connection_free, obj);
|
||||
_edbus_object_clear(obj);
|
||||
_edbus_object_free(obj);
|
||||
}
|
||||
|
||||
EAPI EDBus_Object *
|
||||
edbus_object_ref(EDBus_Object *obj)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
DBG("obj=%p, pre-refcount=%d, name=%s, path=%s",
|
||||
obj, obj->refcount, obj->name, obj->path);
|
||||
obj->refcount++;
|
||||
return obj;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_object_unref(EDBus_Object *obj)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
DBG("obj=%p, pre-refcount=%d, name=%s, path=%s",
|
||||
obj, obj->refcount, obj->name, obj->path);
|
||||
_edbus_object_unref(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_object_free_cb_add(EDBus_Object *obj, EDBus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
obj->cbs_free = edbus_cbs_free_add(obj->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_object_free_cb_del(EDBus_Object *obj, EDBus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
obj->cbs_free = edbus_cbs_free_del(obj->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_interfaces_added(void *data, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Object *obj = data;
|
||||
const char *obj_path;
|
||||
EDBus_Message_Iter *array_ifaces, *entry_iface;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "oa{sa{sv}}", &obj_path, &array_ifaces))
|
||||
return;
|
||||
|
||||
while (edbus_message_iter_get_and_next(array_ifaces, 'e', &entry_iface))
|
||||
{
|
||||
const char *iface_name;
|
||||
EDBus_Object_Event_Interface_Added event;
|
||||
|
||||
edbus_message_iter_basic_get(entry_iface, &iface_name);
|
||||
event.proxy = edbus_proxy_get(obj, iface_name);
|
||||
EINA_SAFETY_ON_NULL_RETURN(event.proxy);
|
||||
event.interface = iface_name;
|
||||
_edbus_object_event_callback_call(obj, EDBUS_OBJECT_EVENT_IFACE_ADDED,
|
||||
&event);
|
||||
edbus_proxy_unref(event.proxy);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_interfaces_removed(void *data, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Object *obj = data;
|
||||
const char *obj_path, *iface;
|
||||
EDBus_Message_Iter *array_ifaces;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "oas", &obj_path, &array_ifaces))
|
||||
return;
|
||||
|
||||
while (edbus_message_iter_get_and_next(array_ifaces, 's', &iface))
|
||||
{
|
||||
EDBus_Object_Event_Interface_Removed event;
|
||||
event.interface = iface;
|
||||
_edbus_object_event_callback_call(obj, EDBUS_OBJECT_EVENT_IFACE_REMOVED,
|
||||
&event);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_property_changed_iter(void *data, const void *key, EDBus_Message_Iter *var)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
const char *skey = key;
|
||||
Eina_Value *st_value, stack_value;
|
||||
EDBus_Object_Event_Property_Changed event;
|
||||
|
||||
st_value = _message_iter_struct_to_eina_value(var);
|
||||
eina_value_struct_value_get(st_value, "arg0", &stack_value);
|
||||
|
||||
event.interface = edbus_proxy_interface_get(proxy);
|
||||
event.proxy = proxy;
|
||||
event.name = skey;
|
||||
event.value = &stack_value;
|
||||
_edbus_object_event_callback_call(edbus_proxy_object_get(proxy),
|
||||
EDBUS_OBJECT_EVENT_PROPERTY_CHANGED,
|
||||
&event);
|
||||
eina_value_free(st_value);
|
||||
eina_value_flush(&stack_value);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_properties_changed(void *data, const EDBus_Message *msg)
|
||||
{
|
||||
EDBus_Object *obj = data;
|
||||
EDBus_Proxy *proxy;
|
||||
EDBus_Message_Iter *array, *invalidate;
|
||||
const char *iface;
|
||||
const char *invalidate_prop;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "sa{sv}as", &iface, &array, &invalidate))
|
||||
{
|
||||
ERR("Error getting data from properties changed signal.");
|
||||
return;
|
||||
}
|
||||
|
||||
proxy = edbus_proxy_get(obj, iface);
|
||||
EINA_SAFETY_ON_NULL_RETURN(proxy);
|
||||
|
||||
if (obj->event_handlers[EDBUS_OBJECT_EVENT_PROPERTY_CHANGED].list)
|
||||
edbus_message_iter_dict_iterate(array, "sv", _property_changed_iter,
|
||||
proxy);
|
||||
|
||||
if (!obj->event_handlers[EDBUS_OBJECT_EVENT_PROPERTY_REMOVED].list)
|
||||
goto end;
|
||||
|
||||
while (edbus_message_iter_get_and_next(invalidate, 's', &invalidate_prop))
|
||||
{
|
||||
EDBus_Object_Event_Property_Removed event;
|
||||
event.interface = iface;
|
||||
event.name = invalidate_prop;
|
||||
event.proxy = proxy;
|
||||
_edbus_object_event_callback_call(obj,
|
||||
EDBUS_OBJECT_EVENT_PROPERTY_REMOVED,
|
||||
&event);
|
||||
}
|
||||
end:
|
||||
edbus_proxy_unref(proxy);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_object_event_callback_add(EDBus_Object *obj, EDBus_Object_Event_Type type, EDBus_Object_Event_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Object_Context_Event *ce;
|
||||
EDBus_Object_Context_Event_Cb *ctx;
|
||||
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= EDBUS_OBJECT_EVENT_LAST);
|
||||
|
||||
ce = obj->event_handlers + type;
|
||||
|
||||
ctx = calloc(1, sizeof(EDBus_Object_Context_Event_Cb));
|
||||
EINA_SAFETY_ON_NULL_RETURN(ctx);
|
||||
|
||||
ctx->cb = cb;
|
||||
ctx->cb_data = cb_data;
|
||||
|
||||
ce->list = eina_inlist_append(ce->list, EINA_INLIST_GET(ctx));
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case EDBUS_OBJECT_EVENT_IFACE_ADDED:
|
||||
{
|
||||
if (obj->interfaces_added)
|
||||
break;
|
||||
obj->interfaces_added =
|
||||
_edbus_signal_handler_add(obj->conn, obj->name, NULL,
|
||||
EDBUS_FDO_INTERFACE_OBJECT_MANAGER,
|
||||
"InterfacesAdded",
|
||||
_cb_interfaces_added, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj->interfaces_added);
|
||||
edbus_signal_handler_match_extra_set(obj->interfaces_added, "arg0",
|
||||
obj->path, NULL);
|
||||
break;
|
||||
}
|
||||
case EDBUS_OBJECT_EVENT_IFACE_REMOVED:
|
||||
{
|
||||
if (obj->interfaces_removed)
|
||||
break;
|
||||
obj->interfaces_removed =
|
||||
_edbus_signal_handler_add(obj->conn, obj->name, NULL,
|
||||
EDBUS_FDO_INTERFACE_OBJECT_MANAGER,
|
||||
"InterfacesRemoved",
|
||||
_cb_interfaces_removed, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj->interfaces_added);
|
||||
edbus_signal_handler_match_extra_set(obj->interfaces_removed,
|
||||
"arg0", obj->path, NULL);
|
||||
break;
|
||||
}
|
||||
case EDBUS_OBJECT_EVENT_PROPERTY_CHANGED:
|
||||
case EDBUS_OBJECT_EVENT_PROPERTY_REMOVED:
|
||||
{
|
||||
if (obj->properties_changed)
|
||||
break;
|
||||
obj->properties_changed =
|
||||
edbus_object_signal_handler_add(obj,
|
||||
EDBUS_FDO_INTERFACE_PROPERTIES,
|
||||
"PropertiesChanged",
|
||||
_cb_properties_changed, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj->properties_changed);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_object_context_event_cb_del(EDBus_Object_Context_Event *ce, EDBus_Object_Context_Event_Cb *ctx)
|
||||
{
|
||||
ce->list = eina_inlist_remove(ce->list, EINA_INLIST_GET(ctx));
|
||||
free(ctx);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_object_event_callback_del(EDBus_Object *obj, EDBus_Object_Event_Type type, EDBus_Object_Event_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Object_Context_Event *ce;
|
||||
EDBus_Object_Context_Event_Cb *iter, *found = NULL;
|
||||
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= EDBUS_OBJECT_EVENT_LAST);
|
||||
|
||||
ce = obj->event_handlers + type;
|
||||
|
||||
EINA_INLIST_FOREACH(ce->list, iter)
|
||||
{
|
||||
if (cb != iter->cb) continue;
|
||||
if ((cb_data) && (cb_data != iter->cb_data)) continue;
|
||||
|
||||
found = iter;
|
||||
break;
|
||||
}
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(found);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(found->deleted);
|
||||
|
||||
if (ce->walking)
|
||||
{
|
||||
found->deleted = EINA_TRUE;
|
||||
ce->to_delete = eina_list_append(ce->to_delete, found);
|
||||
return;
|
||||
}
|
||||
|
||||
_edbus_object_context_event_cb_del(ce, found);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case EDBUS_OBJECT_EVENT_IFACE_ADDED:
|
||||
{
|
||||
if (obj->event_handlers[EDBUS_OBJECT_EVENT_IFACE_ADDED].list)
|
||||
break;
|
||||
edbus_signal_handler_del(obj->interfaces_added);
|
||||
obj->interfaces_added = NULL;
|
||||
break;
|
||||
}
|
||||
case EDBUS_OBJECT_EVENT_IFACE_REMOVED:
|
||||
{
|
||||
if (obj->event_handlers[EDBUS_OBJECT_EVENT_IFACE_REMOVED].list)
|
||||
break;
|
||||
edbus_signal_handler_del(obj->interfaces_removed);
|
||||
obj->interfaces_removed = NULL;
|
||||
break;
|
||||
}
|
||||
case EDBUS_OBJECT_EVENT_PROPERTY_CHANGED:
|
||||
case EDBUS_OBJECT_EVENT_PROPERTY_REMOVED:
|
||||
{
|
||||
if (obj->event_handlers[EDBUS_OBJECT_EVENT_PROPERTY_CHANGED].list ||
|
||||
obj->event_handlers[EDBUS_OBJECT_EVENT_PROPERTY_REMOVED].list)
|
||||
break;
|
||||
edbus_signal_handler_del(obj->properties_changed);
|
||||
obj->properties_changed = NULL;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_object_event_callback_call(EDBus_Object *obj, EDBus_Object_Event_Type type, const void *event_info)
|
||||
{
|
||||
EDBus_Object_Context_Event *ce;
|
||||
EDBus_Object_Context_Event_Cb *iter;
|
||||
|
||||
ce = obj->event_handlers + type;
|
||||
|
||||
ce->walking++;
|
||||
EINA_INLIST_FOREACH(ce->list, iter)
|
||||
{
|
||||
if (iter->deleted) continue;
|
||||
iter->cb((void *)iter->cb_data, obj, (void *)event_info);
|
||||
}
|
||||
ce->walking--;
|
||||
if (ce->walking > 0) return;
|
||||
|
||||
EINA_LIST_FREE(ce->to_delete, iter)
|
||||
_edbus_object_context_event_cb_del(ce, iter);
|
||||
}
|
||||
|
||||
EAPI EDBus_Connection *
|
||||
edbus_object_connection_get(const EDBus_Object *obj)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
return obj->conn;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_object_bus_name_get(const EDBus_Object *obj)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
return obj->name;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_object_path_get(const EDBus_Object *obj)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
return obj->path;
|
||||
}
|
||||
|
||||
static void
|
||||
_on_pending_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
EDBus_Object *obj = data;
|
||||
EDBus_Pending *pending = (EDBus_Pending*) dead_pointer;
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
obj->pendings = eina_inlist_remove(obj->pendings, EINA_INLIST_GET(pending));
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_object_send(EDBus_Object *obj, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
{
|
||||
EDBus_Pending *pending;
|
||||
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
|
||||
|
||||
pending = _edbus_connection_send(obj->conn, msg, cb, cb_data, timeout);
|
||||
if (!cb) return NULL;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pending, NULL);
|
||||
|
||||
edbus_pending_free_cb_add(pending, _on_pending_free, obj);
|
||||
obj->pendings = eina_inlist_append(obj->pendings, EINA_INLIST_GET(pending));
|
||||
|
||||
return pending;
|
||||
}
|
||||
|
||||
static void
|
||||
_on_signal_handler_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
EDBus_Object *obj = data;
|
||||
EDBUS_OBJECT_CHECK(obj);
|
||||
obj->signal_handlers = eina_list_remove(obj->signal_handlers, dead_pointer);
|
||||
}
|
||||
|
||||
EAPI EDBus_Signal_Handler *
|
||||
edbus_object_signal_handler_add(EDBus_Object *obj, const char *interface, const char *member, EDBus_Signal_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Signal_Handler *handler;
|
||||
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(cb, NULL);
|
||||
|
||||
handler = _edbus_signal_handler_add(obj->conn, obj->name, obj->path,
|
||||
interface, member, cb, cb_data);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(handler, NULL);
|
||||
|
||||
edbus_signal_handler_free_cb_add(handler, _on_signal_handler_free, obj);
|
||||
obj->signal_handlers = eina_list_append(obj->signal_handlers, handler);
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
EAPI EDBus_Message *
|
||||
edbus_object_method_call_new(EDBus_Object *obj, const char *interface, const char *member)
|
||||
{
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(interface, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(member, NULL);
|
||||
|
||||
return edbus_message_method_call_new(obj->name, obj->path, interface, member);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
edbus_object_proxy_add(EDBus_Object *obj, EDBus_Proxy *proxy)
|
||||
{
|
||||
return eina_hash_add(obj->proxies, edbus_proxy_interface_get(proxy), proxy);
|
||||
}
|
||||
|
||||
EDBus_Proxy *
|
||||
edbus_object_proxy_get(EDBus_Object *obj, const char *interface)
|
||||
{
|
||||
return eina_hash_find(obj->proxies, interface);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
edbus_object_proxy_del(EDBus_Object *obj, EDBus_Proxy *proxy, const char *interface)
|
||||
{
|
||||
return eina_hash_del(obj->proxies, interface, proxy);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_object_peer_ping(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Pending *p;
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
msg = edbus_object_method_call_new(obj, EDBUS_FDO_INTEFACE_PEER, "Ping");
|
||||
p = edbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_object_peer_machine_id_get(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Pending *p;
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
msg = edbus_object_method_call_new(obj, EDBUS_FDO_INTEFACE_PEER,
|
||||
"GetMachineId");
|
||||
p = edbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_object_introspect(EDBus_Object *obj, EDBus_Message_Cb cb, const void *data)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Pending *p;
|
||||
EDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
msg = edbus_object_method_call_new(obj, EDBUS_FDO_INTERFACE_INTROSPECTABLE,
|
||||
"Introspect");
|
||||
p = edbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
|
@ -1,127 +0,0 @@
|
|||
#ifndef EDBUS_OBJECT_H
|
||||
#define EDBUS_OBJECT_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Object_Mapper Object Mapper
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get an object of the given bus and path.
|
||||
*
|
||||
* @param conn connection where object belongs
|
||||
* @param bus name of bus or unique-id of who listens for calls of this object
|
||||
* @param path object path of this object
|
||||
*/
|
||||
EAPI EDBus_Object *edbus_object_get(EDBus_Connection *conn, const char *bus, const char *path) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Increase object reference.
|
||||
*/
|
||||
EAPI EDBus_Object *edbus_object_ref(EDBus_Object *obj) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease object reference.
|
||||
* If reference == 0 object will be freed and all its children.
|
||||
*/
|
||||
EAPI void edbus_object_unref(EDBus_Object *obj) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when object will be freed.
|
||||
*
|
||||
* @param obj object that you want to monitor
|
||||
* @param cb callback that will be executed
|
||||
* @param data passed to callback
|
||||
*/
|
||||
EAPI void edbus_object_free_cb_add(EDBus_Object *obj, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_object_free_cb_add().
|
||||
*/
|
||||
EAPI void edbus_object_free_cb_del(EDBus_Object *obj, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
EDBUS_OBJECT_EVENT_IFACE_ADDED = 0, /**< a parent path must have a ObjectManager interface */
|
||||
EDBUS_OBJECT_EVENT_IFACE_REMOVED, /**< a parent path must have a ObjectManager interface */
|
||||
EDBUS_OBJECT_EVENT_PROPERTY_CHANGED,
|
||||
EDBUS_OBJECT_EVENT_PROPERTY_REMOVED,
|
||||
EDBUS_OBJECT_EVENT_DEL,
|
||||
EDBUS_OBJECT_EVENT_LAST /**< sentinel, not a real event type */
|
||||
} EDBus_Object_Event_Type;
|
||||
|
||||
typedef struct _EDBus_Object_Event_Interface_Added
|
||||
{
|
||||
const char *interface;
|
||||
EDBus_Proxy *proxy;
|
||||
} EDBus_Object_Event_Interface_Added;
|
||||
|
||||
typedef struct _EDBus_Object_Event_Interface_Removed
|
||||
{
|
||||
const char *interface;
|
||||
} EDBus_Object_Event_Interface_Removed;
|
||||
|
||||
typedef struct _EDBus_Object_Event_Property_Changed
|
||||
{
|
||||
const char *interface;
|
||||
EDBus_Proxy *proxy;
|
||||
const char *name;
|
||||
const Eina_Value *value;
|
||||
} EDBus_Object_Event_Property_Changed;
|
||||
|
||||
typedef struct _EDBus_Object_Event_Property_Removed
|
||||
{
|
||||
const char *interface;
|
||||
EDBus_Proxy *proxy;
|
||||
const char *name;
|
||||
} EDBus_Object_Event_Property_Removed;
|
||||
|
||||
typedef void (*EDBus_Object_Event_Cb)(void *data, EDBus_Object *obj, void *event_info);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when an event of the specified
|
||||
* type occurs.
|
||||
*/
|
||||
EAPI void edbus_object_event_callback_add(EDBus_Object *obj, EDBus_Object_Event_Type type, EDBus_Object_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_object_event_callback_add().
|
||||
*/
|
||||
EAPI void edbus_object_event_callback_del(EDBus_Object *obj, EDBus_Object_Event_Type type, EDBus_Object_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
EAPI EDBus_Connection *edbus_object_connection_get(const EDBus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_object_bus_name_get(const EDBus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_object_path_get(const EDBus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Send a message.
|
||||
*
|
||||
* @param obj the msg will be sent in connection to this object
|
||||
* @param msg message that will be sent
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* to be executed when a response arrives
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* EDBUS_TIMEOUT_INFINITE for no timeout
|
||||
*/
|
||||
EAPI EDBus_Pending *edbus_object_send(EDBus_Object *obj, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Add a signal handler.
|
||||
*
|
||||
* @param obj where the signal is emitted
|
||||
* @param interface of the signal
|
||||
* @param member name of the signal
|
||||
* @param cb callback that will be called when this signal is received
|
||||
* @param cb_data data that will be passed to callback
|
||||
*/
|
||||
EAPI EDBus_Signal_Handler *edbus_object_signal_handler_add(EDBus_Object *obj, const char *interface, const char *member, EDBus_Signal_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 4);
|
||||
|
||||
EAPI EDBus_Message *edbus_object_method_call_new(EDBus_Object *obj, const char *interface, const char *member) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,34 +0,0 @@
|
|||
#ifndef EDBUS_PENDING_H
|
||||
#define EDBUS_PENDING_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Pending Pending
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
EAPI void edbus_pending_data_set(EDBus_Pending *pending, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI void *edbus_pending_data_get(const EDBus_Pending *pending, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void *edbus_pending_data_del(EDBus_Pending *pending, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void edbus_pending_cancel(EDBus_Pending *pending) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI const char *edbus_pending_destination_get(const EDBus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_pending_path_get(const EDBus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_pending_interface_get(const EDBus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_pending_method_get(const EDBus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when pending will be freed.
|
||||
*/
|
||||
EAPI void edbus_pending_free_cb_add(EDBus_Pending *pending, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_pending_free_cb_add().
|
||||
*/
|
||||
EAPI void edbus_pending_free_cb_del(EDBus_Pending *pending, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,87 +0,0 @@
|
|||
#ifndef EDBUS_PRIVATE_H
|
||||
#define EDBUS_PRIVATE_H
|
||||
|
||||
#include <dbus/dbus.h>
|
||||
#include <Eina.h>
|
||||
#include "eina_safety_checks.h"
|
||||
#include <Ecore.h>
|
||||
#include "EDBus.h"
|
||||
#include "edbus_private_types.h"
|
||||
|
||||
extern int _edbus_log_dom;
|
||||
#define DBG(...) EINA_LOG_DOM_DBG(_edbus_log_dom, __VA_ARGS__)
|
||||
#define INF(...) EINA_LOG_DOM_INFO(_edbus_log_dom, __VA_ARGS__)
|
||||
#define WRN(...) EINA_LOG_DOM_WARN(_edbus_log_dom, __VA_ARGS__)
|
||||
#define ERR(...) EINA_LOG_DOM_ERR(_edbus_log_dom, __VA_ARGS__)
|
||||
#define CRITICAL(...) EINA_LOG_DOM_CRIT(_edbus_log_dom, __VA_ARGS__)
|
||||
|
||||
#define EDBUS_CONNECTION_MAGIC (0xdb050001)
|
||||
#define EDBUS_MESSAGE_MAGIC (0xdb050002)
|
||||
#define EDBUS_SIGNAL_HANDLER_MAGIC (0xdb050003)
|
||||
#define EDBUS_PENDING_MAGIC (0xdb050004)
|
||||
#define EDBUS_OBJECT_MAGIC (0xdb050005)
|
||||
#define EDBUS_PROXY_MAGIC (0xdb050006)
|
||||
#define EDBUS_MESSAGE_ITERATOR_MAGIC (0xdb050007)
|
||||
#define EDBUS_SERVICE_INTERFACE_MAGIC (0xdb050008)
|
||||
|
||||
void edbus_cbs_free_dispatch(Eina_Inlist **p_lst, const void *dead_pointer);
|
||||
Eina_Inlist *edbus_cbs_free_add(Eina_Inlist *lst, EDBus_Free_Cb cb, const void *data);
|
||||
Eina_Inlist *edbus_cbs_free_del(Eina_Inlist *lst, EDBus_Free_Cb cb, const void *data);
|
||||
|
||||
void edbus_data_set(Eina_Inlist **p_lst, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
void *edbus_data_get(Eina_Inlist **p_lst, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
void *edbus_data_del(Eina_Inlist **p_lst, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
void edbus_data_del_all(Eina_Inlist **p_list) EINA_ARG_NONNULL(1);
|
||||
|
||||
Eina_Bool edbus_message_init(void);
|
||||
void edbus_message_shutdown(void);
|
||||
EDBus_Message *edbus_message_new(Eina_Bool writable);
|
||||
|
||||
Eina_Bool edbus_signal_handler_init(void);
|
||||
void edbus_signal_handler_shutdown(void);
|
||||
|
||||
Eina_Bool edbus_pending_init(void);
|
||||
void edbus_pending_shutdown(void);
|
||||
|
||||
Eina_Bool edbus_object_init(void);
|
||||
void edbus_object_shutdown(void);
|
||||
|
||||
Eina_Bool edbus_proxy_init(void);
|
||||
void edbus_proxy_shutdown(void);
|
||||
|
||||
Eina_Bool edbus_service_init(void);
|
||||
void edbus_service_shutdown(void);
|
||||
|
||||
void edbus_connection_event_callback_call(EDBus_Connection *conn, EDBus_Connection_Event_Type type, const void *event_info) EINA_ARG_NONNULL(1);
|
||||
|
||||
Eina_Bool edbus_object_proxy_del(EDBus_Object *obj, EDBus_Proxy *proxy, const char *interface) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
void edbus_connection_signal_handler_add(EDBus_Connection *conn, EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1, 2);
|
||||
void edbus_connection_pending_add(EDBus_Connection *conn, EDBus_Pending *pending) EINA_ARG_NONNULL(1, 2);
|
||||
void edbus_connection_signal_handler_del(EDBus_Connection *conn, EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1, 2);
|
||||
void edbus_connection_signal_handler_del(EDBus_Connection *conn, EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1, 2);
|
||||
void edbus_connection_pending_del(EDBus_Connection *conn, EDBus_Pending *pending) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
EDBus_Object *edbus_connection_name_object_get(EDBus_Connection *conn, const char *name, const char *path);
|
||||
void edbus_connection_name_object_set(EDBus_Connection *conn, EDBus_Object *obj);
|
||||
|
||||
Eina_Bool edbus_object_proxy_add(EDBus_Object *obj, EDBus_Proxy *proxy) EINA_ARG_NONNULL(1, 2);
|
||||
EDBus_Proxy *edbus_object_proxy_get(EDBus_Object *obj, const char *interface);
|
||||
|
||||
void edbus_connection_name_object_del(EDBus_Connection *conn, const EDBus_Object *obj);
|
||||
EDBus_Connection_Name *edbus_connection_name_get(EDBus_Connection *conn, const char *name);
|
||||
void edbus_connection_name_owner_monitor(EDBus_Connection *conn, EDBus_Connection_Name *cn, Eina_Bool enable);
|
||||
|
||||
EDBus_Pending *_edbus_connection_send(EDBus_Connection *conn, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout);
|
||||
|
||||
EDBus_Message_Iter *edbus_message_iter_sub_iter_get(EDBus_Message_Iter *iter);
|
||||
Eina_Value *_message_iter_struct_to_eina_value(EDBus_Message_Iter *iter);
|
||||
Eina_Bool _message_iter_from_eina_value_struct(const char *signature, EDBus_Message_Iter *iter, const Eina_Value *value);
|
||||
|
||||
void edbus_connection_name_ref(EDBus_Connection_Name *cn);
|
||||
void edbus_connection_name_unref(EDBus_Connection *conn, EDBus_Connection_Name *cn);
|
||||
EDBus_Signal_Handler *_edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, EDBus_Signal_Cb cb, const void *cb_data);
|
||||
|
||||
EDBus_Message *edbus_message_signal_new(const char *path, const char *interface, const char *name) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
#endif
|
|
@ -1,147 +0,0 @@
|
|||
#ifndef EDBUS_PROXY_H
|
||||
#define EDBUS_PROXY_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Proxy Proxy
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get a proxy of the following interface name in a EDBus_Object.
|
||||
*/
|
||||
EAPI EDBus_Proxy *edbus_proxy_get(EDBus_Object *obj, const char *interface) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Increase proxy reference.
|
||||
*/
|
||||
EAPI EDBus_Proxy *edbus_proxy_ref(EDBus_Proxy *proxy) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease proxy reference.
|
||||
* If reference == 0 proxy will be freed and all your children.
|
||||
*/
|
||||
EAPI void edbus_proxy_unref(EDBus_Proxy *proxy) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI EDBus_Object *edbus_proxy_object_get(const EDBus_Proxy *proxy) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_proxy_interface_get(const EDBus_Proxy *proxy) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
EAPI void edbus_proxy_data_set(EDBus_Proxy *proxy, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI void *edbus_proxy_data_get(const EDBus_Proxy *proxy, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void *edbus_proxy_data_del(EDBus_Proxy *proxy, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when occurs a event of the
|
||||
* type passed.
|
||||
*/
|
||||
EAPI void edbus_proxy_free_cb_add(EDBus_Proxy *proxy, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_proxy_free_cb_add().
|
||||
*/
|
||||
EAPI void edbus_proxy_free_cb_del(EDBus_Proxy *proxy, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Constructs a new message to invoke a method on a remote interface.
|
||||
*/
|
||||
EAPI EDBus_Message *edbus_proxy_method_call_new(EDBus_Proxy *proxy, const char *member) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Send a message.
|
||||
*
|
||||
* @param proxy the msg will be send in connection that proxy belongs
|
||||
* @param msg message that will be send
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* EDBUS_TIMEOUT_INFINITE for no timeout
|
||||
*/
|
||||
EAPI EDBus_Pending *edbus_proxy_send(EDBus_Proxy *proxy, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Call a method in proxy.
|
||||
* Send a method call to interface that proxy belong with data.
|
||||
*
|
||||
* @param proxy
|
||||
* @param member method name
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* to be execute when response arrive
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* EDBUS_TIMEOUT_INFINITE for no timeout
|
||||
* @param signature of data that will be send
|
||||
* @param ... data value
|
||||
*
|
||||
* @note This function only support basic type to complex types use
|
||||
* edbus_message_iter_* functions.
|
||||
*/
|
||||
EAPI EDBus_Pending *edbus_proxy_call(EDBus_Proxy *proxy, const char *member, EDBus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, ...) EINA_ARG_NONNULL(1, 2, 6);
|
||||
|
||||
/**
|
||||
* @brief Call a method in proxy.
|
||||
* Send a method call to interface that proxy belong with data.
|
||||
*
|
||||
* @param proxy
|
||||
* @param member method name
|
||||
* @param cb callback that will be called when response arrive.
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* EDBUS_TIMEOUT_INFINITE for no timeout
|
||||
* @param signature of data that will be send
|
||||
* @param ap va_list of data value
|
||||
*
|
||||
* @note This function only support basic type to complex types use
|
||||
* edbus_message_iter_* functions.
|
||||
*/
|
||||
EAPI EDBus_Pending *edbus_proxy_vcall(EDBus_Proxy *proxy, const char *member, EDBus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2, 6);
|
||||
|
||||
/**
|
||||
* @brief Add a signal handler.
|
||||
*
|
||||
* @param proxy interface where the signal is emitted
|
||||
* @param member name of the signal
|
||||
* @param cb callback that will be called when this signal is received
|
||||
* @param cb_data data that will be passed to callback
|
||||
*/
|
||||
EAPI EDBus_Signal_Handler *edbus_proxy_signal_handler_add(EDBus_Proxy *proxy, const char *member, EDBus_Signal_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
EDBUS_PROXY_EVENT_PROPERTY_CHANGED = 0,
|
||||
EDBUS_PROXY_EVENT_PROPERTY_REMOVED,
|
||||
EDBUS_PROXY_EVENT_DEL,
|
||||
EDBUS_PROXY_EVENT_LAST /**< sentinel, not a real event type */
|
||||
} EDBus_Proxy_Event_Type;
|
||||
|
||||
typedef struct _EDBus_Proxy_Event_Property_Changed
|
||||
{
|
||||
const char *name;
|
||||
const EDBus_Proxy *proxy;
|
||||
const Eina_Value *value;
|
||||
} EDBus_Proxy_Event_Property_Changed;
|
||||
|
||||
typedef struct _EDBus_Proxy_Event_Property_Removed
|
||||
{
|
||||
const char *interface;
|
||||
const EDBus_Proxy *proxy;
|
||||
const char *name;
|
||||
} EDBus_Proxy_Event_Property_Removed;
|
||||
|
||||
typedef void (*EDBus_Proxy_Event_Cb)(void *data, EDBus_Proxy *proxy, void *event_info);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when occurs a event of the
|
||||
* type passed.
|
||||
*/
|
||||
EAPI void edbus_proxy_event_callback_add(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, EDBus_Proxy_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_proxy_event_callback_add().
|
||||
*/
|
||||
EAPI void edbus_proxy_event_callback_del(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, EDBus_Proxy_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,219 +0,0 @@
|
|||
#ifndef EDBUS_SERVICE_H
|
||||
#define EDBUS_SERVICE_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Service Service
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define EDBUS_METHOD_FLAG_DEPRECATED 1
|
||||
#define EDBUS_METHOD_FLAG_NOREPLY (1 << 1)
|
||||
|
||||
#define EDBUS_SIGNAL_FLAG_DEPRECATED 1
|
||||
|
||||
#define EDBUS_PROPERTY_FLAG_DEPRECATED 1
|
||||
|
||||
typedef struct _EDBus_Arg_Info
|
||||
{
|
||||
const char *signature;
|
||||
const char *name;
|
||||
} EDBus_Arg_Info;
|
||||
|
||||
/**
|
||||
* @brief Used to insert complete types to signature of methods or signals.
|
||||
*
|
||||
* Example: EDBUS_ARGS({"s", "interface"}, {"s", "property"})
|
||||
* The signature will be "ss" and each string will have a tag name on
|
||||
* introspect XML with the respective name.
|
||||
*/
|
||||
#define EDBUS_ARGS(args...) (const EDBus_Arg_Info[]){ args, { NULL, NULL } }
|
||||
|
||||
typedef struct _EDBus_Service_Interface EDBus_Service_Interface;
|
||||
typedef EDBus_Message * (*EDBus_Method_Cb)(const EDBus_Service_Interface *iface, const EDBus_Message *message);
|
||||
|
||||
/**
|
||||
* Callback function to append property value to message.
|
||||
*
|
||||
* @param iface interface of property
|
||||
* @param propname name of property
|
||||
* @param iter variant iterator in which value must be appended
|
||||
* @param request_msg message that request property
|
||||
* @param error if a error happen you must set a message error to be send caller
|
||||
*
|
||||
* @return EINA_TRUE if success
|
||||
*
|
||||
* @note request_msg and error arguments are only different from NULL when a
|
||||
* client request a property with Properties.Get or Properties.GetAll. Upon
|
||||
* calls to edbus_service_property_changed(), this callback will also be called.
|
||||
* It's a mistake to return an error in this case because if a property changed,
|
||||
* it must have a new value set and it should be able to be read.
|
||||
*/
|
||||
typedef Eina_Bool (*EDBus_Property_Get_Cb)(const EDBus_Service_Interface *iface, const char *propname, EDBus_Message_Iter *iter, const EDBus_Message *request_msg, EDBus_Message **error);
|
||||
|
||||
/**
|
||||
* Callback function to set property value from message.
|
||||
*
|
||||
* @param iface interface of property
|
||||
* @param propname name of property
|
||||
* @param input_msg message call where you have to get value
|
||||
*
|
||||
* @return Message of response, could be a simple method_return, error or NULL to send response later.
|
||||
*/
|
||||
typedef EDBus_Message *(*EDBus_Property_Set_Cb)(const EDBus_Service_Interface *iface, const char *propname, EDBus_Message_Iter *iter, const EDBus_Message *input_msg);
|
||||
|
||||
typedef struct _EDBus_Method
|
||||
{
|
||||
const char *member;
|
||||
const EDBus_Arg_Info *in;
|
||||
const EDBus_Arg_Info *out;
|
||||
EDBus_Method_Cb cb;
|
||||
unsigned int flags;
|
||||
} EDBus_Method;
|
||||
|
||||
typedef struct _EDBus_Signal
|
||||
{
|
||||
const char *name;
|
||||
const EDBus_Arg_Info *args;
|
||||
unsigned int flags;
|
||||
} EDBus_Signal;
|
||||
|
||||
typedef struct _EDBus_Property
|
||||
{
|
||||
const char *name;
|
||||
const char *type;
|
||||
EDBus_Property_Get_Cb get_func;
|
||||
EDBus_Property_Set_Cb set_func;
|
||||
unsigned int flags;
|
||||
} EDBus_Property;
|
||||
|
||||
typedef struct _EDBus_Service_Interface_Desc
|
||||
{
|
||||
const char *interface; /**< interface name */
|
||||
const EDBus_Method *methods; /**< array of the methods that should be registered in this interface, the last item of array should be filled with NULL */
|
||||
const EDBus_Signal *signals; /**< array of signal that this interface send, the last item of array should be filled with NULL */
|
||||
const EDBus_Property *properties; /**< array of property that this interface have, the last item of array should be filled with NULL */
|
||||
const EDBus_Property_Get_Cb default_get; /**< default get function, if a property don't have a get function this will be used */
|
||||
const EDBus_Property_Set_Cb default_set; /**< default set function, if a property don't have a set function this will be used */
|
||||
} EDBus_Service_Interface_Desc;
|
||||
|
||||
/**
|
||||
* @brief Register an interface in the given path and connection.
|
||||
*
|
||||
* @param conn where the interface should listen
|
||||
* @param path object path
|
||||
* @param desc description of interface
|
||||
*
|
||||
* @return Interface
|
||||
*/
|
||||
EAPI EDBus_Service_Interface *edbus_service_interface_register(EDBus_Connection *conn, const char *path, const EDBus_Service_Interface_Desc *desc) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Unregister a interface.
|
||||
* If this is the last interface of the object path, the object path will be
|
||||
* removed too.
|
||||
*/
|
||||
EAPI void edbus_service_interface_unregister(EDBus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Unregister all interfaces of the object path that this interface belongs
|
||||
* and the object path.
|
||||
*/
|
||||
EAPI void edbus_service_object_unregister(EDBus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
EAPI EDBus_Connection *edbus_service_connection_get(const EDBus_Service_Interface *iface) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_service_object_path_get(const EDBus_Service_Interface *iface) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Emit a signal handler of the interface with non-complex types.
|
||||
* Each signal handler have a internal id, the first signal handler of
|
||||
* interface is = 0 the second = 1 and go on.
|
||||
*
|
||||
* @param iface interface of the signal
|
||||
* @param signal_id id of signal
|
||||
* @param ... values that will be send on signal
|
||||
*/
|
||||
EAPI Eina_Bool edbus_service_signal_emit(const EDBus_Service_Interface *iface, unsigned int signal_id, ...) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Create signal message.
|
||||
* Each signal handler have a internal id, the first signal handler of
|
||||
* interface is = 0 the second = 1 and go on.
|
||||
* This function is used when the signal has complex types.
|
||||
*
|
||||
* @param iface interface of the signal
|
||||
* @param signal_id id of signal
|
||||
*/
|
||||
EAPI EDBus_Message *edbus_service_signal_new(const EDBus_Service_Interface *iface, unsigned int signal_id) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Send a signal message.
|
||||
*
|
||||
* On success this will call edbus_message_unref() on the @param signal_msg,
|
||||
* which is the intended behavior in 99% of the cases. Remember to increment
|
||||
* the refcount if you want to keep it alive.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_service_signal_send(const EDBus_Service_Interface *iface, EDBus_Message *signal_msg) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Store data at object path, this data can be obtained from all interfaces
|
||||
* of the same object.
|
||||
*
|
||||
* @param iface interface that belong to the object path where data will
|
||||
* be stored
|
||||
* @param key to identify data
|
||||
* @param data
|
||||
*/
|
||||
EAPI void edbus_service_object_data_set(EDBus_Service_Interface *iface, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Get data stored in object path.
|
||||
*
|
||||
* @param iface interface that belongs to the object path where data are stored
|
||||
* @param key that identify data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *edbus_service_object_data_get(const EDBus_Service_Interface *iface, const char *key) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Del data stored in object path.
|
||||
*
|
||||
* @param iface interface that belongs to the object path where data are stored
|
||||
* @param key that identify data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *edbus_service_object_data_del(EDBus_Service_Interface *iface, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Add property to list of changed properties
|
||||
* A DBus.PropertiesChanged signal will be sent in an idler with all properties
|
||||
* that have changed.
|
||||
*
|
||||
* @param iface Interface containing the changed property
|
||||
* @param name Property name
|
||||
*/
|
||||
EAPI Eina_Bool edbus_service_property_changed(const EDBus_Service_Interface *iface, const char *name) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
EAPI Eina_Bool edbus_service_property_invalidate_set(const EDBus_Service_Interface *iface, const char *name, Eina_Bool is_invalidate) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* Attach ObjectManager interface.
|
||||
*
|
||||
* @param iface ObjectManager will be attach in object path of this interface.
|
||||
* @return EINA_TRUE if success
|
||||
*/
|
||||
EAPI Eina_Bool edbus_service_object_manager_attach(EDBus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* Detach ObjectManager interface.
|
||||
*
|
||||
* @param iface ObjectManager of object path of this interface will be detach.
|
||||
* @return EINA_TRUE if success
|
||||
*/
|
||||
EAPI Eina_Bool edbus_service_object_manager_detach(EDBus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,99 +0,0 @@
|
|||
#ifndef EDBUS_SIGNAL_HANDLER_H
|
||||
#define EDBUS_SIGNAL_HANDLER_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Signal_Handler Signal Handler
|
||||
* @ingroup EDBus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Add a signal handler.
|
||||
*
|
||||
* @param conn connection where the signal is emitted
|
||||
* @param sender bus name or unique id of where the signal is emitted
|
||||
* @param path path of remote object
|
||||
* @param interface that signal belongs
|
||||
* @param member name of the signal
|
||||
* @param cb callback that will be called when this signal is received
|
||||
* @param cb_data data that will be passed to callback
|
||||
*/
|
||||
EAPI EDBus_Signal_Handler *edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, EDBus_Signal_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 6);
|
||||
|
||||
/**
|
||||
* @brief Increase signal handler reference.
|
||||
*/
|
||||
EAPI EDBus_Signal_Handler *edbus_signal_handler_ref(EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease signal handler reference.
|
||||
* If reference == 0 signal handler will be freed.
|
||||
*/
|
||||
EAPI void edbus_signal_handler_unref(EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease signal handler reference like edbus_signal_handler_unref()
|
||||
* but if reference > 0 this signal handler will stop listening to signals. In other
|
||||
* words it will be canceled but memory will not be freed.
|
||||
*/
|
||||
EAPI void edbus_signal_handler_del(EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add extra argument in match of signal handler to obtain specifics signals.
|
||||
*
|
||||
* Example:
|
||||
* edbus_signal_handler_match_extra_set(sh, "arg0", "org.bansheeproject.Banshee", "arg1", "", NULL);
|
||||
* With this extra arguments this signal handler callback only will be called
|
||||
* when Banshee is started.
|
||||
*
|
||||
* @note For now only argX is supported.
|
||||
*
|
||||
* @param sh signal handler
|
||||
* @param ... variadic of key and value and must be ended with a NULL
|
||||
*
|
||||
* @note For more information:
|
||||
* http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules
|
||||
*/
|
||||
EAPI Eina_Bool edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...) EINA_ARG_NONNULL(1) EINA_SENTINEL;
|
||||
|
||||
/**
|
||||
* @brief Add extra argument in match of signal handler to obtain specifics signals.
|
||||
*
|
||||
* Example:
|
||||
* edbus_signal_handler_match_extra_set(sh, "arg0", "org.bansheeproject.Banshee", "arg1", "", NULL);
|
||||
* With this extra arguments this signal handler callback only will be called
|
||||
* when Banshee is started.
|
||||
*
|
||||
* @note For now is only supported argX.
|
||||
*
|
||||
* @param sh signal handler
|
||||
* @param ap va_list with the keys and values, must be ended with a NULL
|
||||
*
|
||||
* @note To information:
|
||||
* http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules
|
||||
*/
|
||||
EAPI Eina_Bool edbus_signal_handler_match_extra_vset(EDBus_Signal_Handler *sh, va_list ap) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when signal handler will be freed.
|
||||
*/
|
||||
EAPI void edbus_signal_handler_free_cb_add(EDBus_Signal_Handler *handler, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in edbus_signal_handler_free_cb_add().
|
||||
*/
|
||||
EAPI void edbus_signal_handler_free_cb_del(EDBus_Signal_Handler *handler, EDBus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
EAPI const char *edbus_signal_handler_sender_get(const EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_signal_handler_path_get(const EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_signal_handler_interface_get(const EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_signal_handler_member_get(const EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_signal_handler_match_get(const EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
EAPI EDBus_Connection *edbus_signal_handler_connection_get(const EDBus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -15,7 +15,7 @@
|
|||
#include <Eet.h>
|
||||
#include <Ecore.h>
|
||||
#include <Ecore_File.h>
|
||||
#include <EDBus.h>
|
||||
#include <Eldbus.h>
|
||||
|
||||
/* define macros and variable for using the eina logging system */
|
||||
#define EFREET_MODULE_LOG_DOM _efreet_cache_log_dom
|
||||
|
@ -40,8 +40,8 @@ struct _Efreet_Old_Cache
|
|||
#define PATH "/org/enlightenment/Efreet"
|
||||
#define INTERFACE "org.enlightenment.Efreet"
|
||||
|
||||
static EDBus_Connection *conn = NULL;
|
||||
static EDBus_Proxy *proxy = NULL;
|
||||
static Eldbus_Connection *conn = NULL;
|
||||
static Eldbus_Proxy *proxy = NULL;
|
||||
/**
|
||||
* Data for cache files
|
||||
*/
|
||||
|
@ -93,9 +93,9 @@ static void efreet_cache_icon_theme_free(Efreet_Icon_Theme *theme);
|
|||
static Eina_Bool efreet_cache_check(Eet_File **ef, const char *path, int major);
|
||||
static void *efreet_cache_close(Eet_File *ef);
|
||||
|
||||
static void on_send_register(void *data, const EDBus_Message *msg, EDBus_Pending *pending);
|
||||
static void desktop_cache_update(void *context, const EDBus_Message *msg);
|
||||
static void icon_cache_update(void *context, const EDBus_Message *msg);
|
||||
static void on_send_register(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending);
|
||||
static void desktop_cache_update(void *context, const Eldbus_Message *msg);
|
||||
static void icon_cache_update(void *context, const Eldbus_Message *msg);
|
||||
|
||||
static void icon_cache_update_free(void *data, void *ev);
|
||||
|
||||
|
@ -121,24 +121,24 @@ efreet_cache_init(void)
|
|||
fallbacks = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_fallback_free));
|
||||
desktops = eina_hash_string_superfast_new(NULL);
|
||||
|
||||
edbus_init();
|
||||
eldbus_init();
|
||||
if (efreet_cache_update)
|
||||
{
|
||||
EDBus_Object *obj;
|
||||
Eldbus_Object *obj;
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
if (!conn) goto error;
|
||||
|
||||
obj = edbus_object_get(conn, BUS, PATH);
|
||||
proxy = edbus_proxy_get(obj, INTERFACE);
|
||||
edbus_proxy_signal_handler_add(proxy, "IconCacheUpdate", icon_cache_update, NULL);
|
||||
edbus_proxy_signal_handler_add(proxy, "DesktopCacheUpdate", desktop_cache_update, NULL);
|
||||
obj = eldbus_object_get(conn, BUS, PATH);
|
||||
proxy = eldbus_proxy_get(obj, INTERFACE);
|
||||
eldbus_proxy_signal_handler_add(proxy, "IconCacheUpdate", icon_cache_update, NULL);
|
||||
eldbus_proxy_signal_handler_add(proxy, "DesktopCacheUpdate", desktop_cache_update, NULL);
|
||||
|
||||
edbus_proxy_call(proxy, "Register", on_send_register, NULL, -1, "s", efreet_language_get());
|
||||
eldbus_proxy_call(proxy, "Register", on_send_register, NULL, -1, "s", efreet_language_get());
|
||||
|
||||
/*
|
||||
* TODO: Needed?
|
||||
edbus_name_owner_changed_callback_add(conn, BUS, on_name_owner_changed,
|
||||
eldbus_name_owner_changed_callback_add(conn, BUS, on_name_owner_changed,
|
||||
conn, EINA_TRUE);
|
||||
*/
|
||||
}
|
||||
|
@ -205,17 +205,17 @@ efreet_cache_shutdown(void)
|
|||
|
||||
/*
|
||||
* TODO: Needed??
|
||||
edbus_name_owner_changed_callback_del(conn, BUS, on_name_owner_changed, conn);
|
||||
eldbus_name_owner_changed_callback_del(conn, BUS, on_name_owner_changed, conn);
|
||||
*/
|
||||
if (conn)
|
||||
{
|
||||
EDBus_Object *obj = edbus_proxy_object_get(proxy);
|
||||
edbus_proxy_unref(proxy);
|
||||
edbus_object_unref(obj);
|
||||
edbus_connection_unref(conn);
|
||||
Eldbus_Object *obj = eldbus_proxy_object_get(proxy);
|
||||
eldbus_proxy_unref(proxy);
|
||||
eldbus_object_unref(obj);
|
||||
eldbus_connection_unref(conn);
|
||||
}
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
|
||||
eina_log_domain_unregister(_efreet_cache_log_dom);
|
||||
_efreet_cache_log_dom = -1;
|
||||
|
@ -865,56 +865,56 @@ efreet_cache_desktop_free(Efreet_Desktop *desktop)
|
|||
void
|
||||
efreet_cache_desktop_add(Efreet_Desktop *desktop)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Message_Iter *iter, *array_of_string;
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Message_Iter *iter, *array_of_string;
|
||||
char *path;
|
||||
|
||||
if (!efreet_cache_update) return;
|
||||
/* TODO: Chunk updates */
|
||||
path = ecore_file_dir_get(desktop->orig_path);
|
||||
msg = edbus_proxy_method_call_new(proxy, "AddDesktopDirs");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
array_of_string = edbus_message_iter_container_new(iter, 'a',"s");
|
||||
edbus_message_iter_basic_append(array_of_string, 's', path);
|
||||
edbus_message_iter_container_close(iter, array_of_string);
|
||||
edbus_proxy_send(proxy, msg, NULL, NULL, -1);
|
||||
msg = eldbus_proxy_method_call_new(proxy, "AddDesktopDirs");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
array_of_string = eldbus_message_iter_container_new(iter, 'a',"s");
|
||||
eldbus_message_iter_basic_append(array_of_string, 's', path);
|
||||
eldbus_message_iter_container_close(iter, array_of_string);
|
||||
eldbus_proxy_send(proxy, msg, NULL, NULL, -1);
|
||||
free(path);
|
||||
}
|
||||
|
||||
void
|
||||
efreet_cache_icon_exts_add(Eina_List *exts)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Message_Iter *iter, *array_of_string;
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Message_Iter *iter, *array_of_string;
|
||||
Eina_List *l;
|
||||
const char *ext;
|
||||
|
||||
if (!efreet_cache_update) return;
|
||||
msg = edbus_proxy_method_call_new(proxy, "AddIconExts");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
array_of_string = edbus_message_iter_container_new(iter, 'a',"s");
|
||||
msg = eldbus_proxy_method_call_new(proxy, "AddIconExts");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
array_of_string = eldbus_message_iter_container_new(iter, 'a',"s");
|
||||
EINA_LIST_FOREACH(exts, l, ext)
|
||||
edbus_message_iter_basic_append(array_of_string, 's', ext);
|
||||
edbus_message_iter_container_close(iter, array_of_string);
|
||||
edbus_proxy_send(proxy, msg, NULL, NULL, -1);
|
||||
eldbus_message_iter_basic_append(array_of_string, 's', ext);
|
||||
eldbus_message_iter_container_close(iter, array_of_string);
|
||||
eldbus_proxy_send(proxy, msg, NULL, NULL, -1);
|
||||
}
|
||||
|
||||
void
|
||||
efreet_cache_icon_dirs_add(Eina_List *dirs)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Message_Iter *iter, *array_of_string;
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Message_Iter *iter, *array_of_string;
|
||||
Eina_List *l;
|
||||
const char *dir;
|
||||
|
||||
if (!efreet_cache_update) return;
|
||||
msg = edbus_proxy_method_call_new(proxy, "AddIconDirs");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
array_of_string = edbus_message_iter_container_new(iter, 'a',"s");
|
||||
msg = eldbus_proxy_method_call_new(proxy, "AddIconDirs");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
array_of_string = eldbus_message_iter_container_new(iter, 'a',"s");
|
||||
EINA_LIST_FOREACH(dirs, l, dir)
|
||||
edbus_message_iter_basic_append(array_of_string, 's', dir);
|
||||
edbus_message_iter_container_close(iter, array_of_string);
|
||||
edbus_proxy_send(proxy, msg, NULL, NULL, -1);
|
||||
eldbus_message_iter_basic_append(array_of_string, 's', dir);
|
||||
eldbus_message_iter_container_close(iter, array_of_string);
|
||||
eldbus_proxy_send(proxy, msg, NULL, NULL, -1);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -958,7 +958,7 @@ efreet_cache_desktop_build(void)
|
|||
{
|
||||
if (!efreet_cache_update) return;
|
||||
if (proxy)
|
||||
edbus_proxy_call(proxy, "BuildDesktopCache", NULL, NULL, -1, "s", efreet_language_get());
|
||||
eldbus_proxy_call(proxy, "BuildDesktopCache", NULL, NULL, -1, "s", efreet_language_get());
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -1053,12 +1053,12 @@ efreet_cache_util_names(const char *key)
|
|||
}
|
||||
|
||||
static void
|
||||
on_send_register(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
on_send_register(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
Eina_Bool exists;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
Efreet_Event_Cache_Update *ev = NULL;
|
||||
|
||||
|
@ -1071,16 +1071,16 @@ on_send_register(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending
|
|||
ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_BUILD, ev, NULL, NULL);
|
||||
}
|
||||
}
|
||||
else if (edbus_message_arguments_get(msg, "b", &exists) && exists)
|
||||
else if (eldbus_message_arguments_get(msg, "b", &exists) && exists)
|
||||
ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_BUILD, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
desktop_cache_update(void *context EINA_UNUSED, const EDBus_Message *msg)
|
||||
desktop_cache_update(void *context EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Eina_Bool update;
|
||||
|
||||
if (edbus_message_arguments_get(msg, "b", &update))
|
||||
if (eldbus_message_arguments_get(msg, "b", &update))
|
||||
{
|
||||
if (update)
|
||||
{
|
||||
|
@ -1097,14 +1097,14 @@ desktop_cache_update(void *context EINA_UNUSED, const EDBus_Message *msg)
|
|||
}
|
||||
|
||||
static void
|
||||
icon_cache_update(void *context EINA_UNUSED, const EDBus_Message *msg)
|
||||
icon_cache_update(void *context EINA_UNUSED, const Eldbus_Message *msg)
|
||||
{
|
||||
Efreet_Event_Cache_Update *ev = NULL;
|
||||
Efreet_Old_Cache *d = NULL;
|
||||
Eina_List *l = NULL;
|
||||
Eina_Bool update;
|
||||
|
||||
if (edbus_message_arguments_get(msg, "b", &update) && update)
|
||||
if (eldbus_message_arguments_get(msg, "b", &update) && update)
|
||||
{
|
||||
ev = NEW(Efreet_Event_Cache_Update, 1);
|
||||
if (!ev) goto error;
|
||||
|
|
|
@ -0,0 +1,222 @@
|
|||
/**
|
||||
* @page eldbus_main Eldbus
|
||||
*
|
||||
* @date 2012 (created)
|
||||
*
|
||||
* @section toc Table of Contents
|
||||
*
|
||||
* @li @ref eldbus_main_intro
|
||||
* @li @ref eldbus_main_compiling
|
||||
* @li @ref eldbus_main_next_steps
|
||||
* @li @ref eldbus_main_intro_example
|
||||
*
|
||||
* @section eldbus_main_intro Introduction
|
||||
*
|
||||
* Eldbus is a wrapper around the
|
||||
* <a href="http://www.freedesktop.org/wiki/Software/dbus">dbus</a>
|
||||
* library, which is a message bus system. It also implements a set of
|
||||
* specifications using dbus as interprocess communication.
|
||||
*
|
||||
* @subsection eldbus_modules_sec Modules
|
||||
*
|
||||
* <ul>
|
||||
* <li> @ref Eldbus_Core
|
||||
* <li> @ref Eldbus_Conneciton
|
||||
* <li> @ref Eldbus_Object_Mapper
|
||||
* <li> @ref Eldbus_Proxy
|
||||
* <li> @ref Eldbus_Message
|
||||
* <ul>
|
||||
* <li>@ref Eldbus_Message_Iter
|
||||
* <li>@ref Eldbus_Message_Helpers
|
||||
* <li>@ref Eina_Value
|
||||
* </ul>
|
||||
* <li> @ref Eldbus_Signal_Handler
|
||||
* <li> @ref Eldbus_Pending
|
||||
* <li> @ref Eldbus_Service
|
||||
* <li> @ref Eldbus_Basic
|
||||
* </ul>
|
||||
*
|
||||
* @section eldbus_main_compiling How to compile
|
||||
*
|
||||
* Eldbus is a library your application links to. The procedure for this is
|
||||
* very simple. You simply have to compile your application with the
|
||||
* appropriate compiler flags that the @c pkg-config script outputs. For
|
||||
* example:
|
||||
*
|
||||
* Compiling C or C++ files into object files:
|
||||
*
|
||||
* @verbatim
|
||||
gcc -c -o main.o main.c `pkg-config --cflags eldbus`
|
||||
@endverbatim
|
||||
*
|
||||
* Linking object files into a binary executable:
|
||||
*
|
||||
* @verbatim
|
||||
gcc -o my_application main.o `pkg-config --libs eldbus`
|
||||
@endverbatim
|
||||
*
|
||||
* See @ref pkgconfig
|
||||
*
|
||||
* @section eldbus_main_next_steps Next Steps
|
||||
*
|
||||
* After you understood what Eldbus is and installed it in your system
|
||||
* you should proceed understanding the programming interface.
|
||||
*
|
||||
* Recommended reading:
|
||||
* @li @ref Eldbus_Core for library init, shutdown and getting a connection.
|
||||
* @li @ref Eldbus_Proxy to easily bind a client object to an interface.
|
||||
* @li @ref Eldbus_Object_Mapper to monitor server objects and properties.
|
||||
*
|
||||
* @section eldbus_main_intro_example Introductory Example
|
||||
*
|
||||
* @include ofono-dial.c
|
||||
*
|
||||
* More examples can be found at @ref eldbus_examples.
|
||||
*/
|
||||
#ifndef ELDBUS_H
|
||||
#define ELDBUS_H
|
||||
|
||||
#include <Eina.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef EAPI
|
||||
# undef EAPI
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# ifdef EFL_ELDBUS_BUILD
|
||||
# ifdef DLL_EXPORT
|
||||
# define EAPI __declspec(dllexport)
|
||||
# else
|
||||
# define EAPI
|
||||
# endif /* ! DLL_EXPORT */
|
||||
# else
|
||||
# define EAPI __declspec(dllimport)
|
||||
# endif /* ! EFL_ELDBUS_BUILD */
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# if __GNUC__ >= 4
|
||||
# define EAPI __attribute__ ((visibility("default")))
|
||||
# else
|
||||
# define EAPI
|
||||
# endif
|
||||
# else
|
||||
# define EAPI
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Core Core
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define ELDBUS_VERSION_MAJOR 1
|
||||
#define ELDBUS_VERSION_MINOR 8
|
||||
|
||||
#define ELDBUS_FDO_BUS "org.freedesktop.DBus"
|
||||
#define ELDBUS_FDO_PATH "/org/freedesktop/DBus"
|
||||
#define ELDBUS_FDO_INTERFACE ELDBUS_FDO_BUS
|
||||
#define ELDBUS_FDO_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties"
|
||||
#define ELDBUS_FDO_INTERFACE_OBJECT_MANAGER "org.freedesktop.DBus.ObjectManager"
|
||||
#define ELDBUS_FDO_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable"
|
||||
#define ELDBUS_FDO_INTEFACE_PEER "org.freedesktop.DBus.Peer"
|
||||
#define ELDBUS_ERROR_PENDING_CANCELED "org.enlightenment.DBus.Canceled"
|
||||
|
||||
typedef struct _Eldbus_Version
|
||||
{
|
||||
int major;
|
||||
int minor;
|
||||
int micro;
|
||||
int revision;
|
||||
} Eldbus_Version;
|
||||
|
||||
EAPI extern const Eldbus_Version * eldbus_version;
|
||||
|
||||
/**
|
||||
* @brief Initialize eldbus.
|
||||
*
|
||||
* @return 1 or greater on success, 0 otherwise
|
||||
*/
|
||||
EAPI int eldbus_init(void);
|
||||
/**
|
||||
* @brief Shutdown eldbus.
|
||||
*
|
||||
* @return 0 if e_dbus shuts down, greater than 0 otherwise.
|
||||
*/
|
||||
EAPI int eldbus_shutdown(void);
|
||||
|
||||
typedef void (*Eldbus_Free_Cb)(void *data, const void *deadptr);
|
||||
|
||||
/**
|
||||
* @typedef Eldbus_Connection
|
||||
*
|
||||
* Represents a connection of one the type of connection with the DBus daemon.
|
||||
*/
|
||||
typedef struct _Eldbus_Connection Eldbus_Connection;
|
||||
/**
|
||||
* @typedef Eldbus_Object
|
||||
*
|
||||
* Represents an object path already attached with bus name or unique id.
|
||||
*/
|
||||
typedef struct _Eldbus_Object Eldbus_Object;
|
||||
/**
|
||||
* @typedef Eldbus_Proxy
|
||||
*
|
||||
* Represents an interface of an object path.
|
||||
*/
|
||||
typedef struct _Eldbus_Proxy Eldbus_Proxy;
|
||||
/**
|
||||
* @typedef Eldbus_Message
|
||||
*
|
||||
* Represents the way data is sent and received in DBus.
|
||||
*/
|
||||
typedef struct _Eldbus_Message Eldbus_Message;
|
||||
/**
|
||||
* @typedef Eldbus_Message_Iter
|
||||
*
|
||||
* Represents an iterator over a complex message type (array, dict, struct,
|
||||
* or variant). Its life is bound to the message that contains
|
||||
* it. The same applies to the returned data.
|
||||
*/
|
||||
typedef struct _Eldbus_Message_Iter Eldbus_Message_Iter;
|
||||
/**
|
||||
* @typedef Eldbus_Pending
|
||||
*
|
||||
* Represents a message that has been sent but has not yet reached its
|
||||
* destination.
|
||||
*/
|
||||
typedef struct _Eldbus_Pending Eldbus_Pending;
|
||||
|
||||
/**
|
||||
* @typedef Eldbus_Signal_Handler
|
||||
*
|
||||
* Represents a listener that will listen for signals emitted by other
|
||||
* applications.
|
||||
*/
|
||||
typedef struct _Eldbus_Signal_Handler Eldbus_Signal_Handler;
|
||||
|
||||
typedef void (*Eldbus_Message_Cb)(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending);
|
||||
typedef void (*Eldbus_Signal_Cb)(void *data, const Eldbus_Message *msg);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "eldbus_connection.h"
|
||||
#include "eldbus_message.h"
|
||||
#include "eldbus_signal_handler.h"
|
||||
#include "eldbus_pending.h"
|
||||
#include "eldbus_object.h"
|
||||
#include "eldbus_proxy.h"
|
||||
#include "eldbus_freedesktop.h"
|
||||
#include "eldbus_service.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,139 @@
|
|||
#ifndef ELDBUS_CONNECTION_H
|
||||
#define ELDBUS_CONNECTION_H 1
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Conneciton Connection
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
ELDBUS_CONNECTION_TYPE_UNKNOWN = 0, /**< sentinel, not a real type */
|
||||
ELDBUS_CONNECTION_TYPE_SESSION,
|
||||
ELDBUS_CONNECTION_TYPE_SYSTEM,
|
||||
ELDBUS_CONNECTION_TYPE_STARTER,
|
||||
ELDBUS_CONNECTION_TYPE_LAST /**< sentinel, not a real type */
|
||||
} Eldbus_Connection_Type;
|
||||
|
||||
#define ELDBUS_TIMEOUT_INFINITE ((int) 0x7fffffff)
|
||||
|
||||
/**
|
||||
* Establish a connection to bus and integrate it with the ecore main
|
||||
* loop. If a connection of given type was already created before, its
|
||||
* reference counter is incremented and the connection is returned.
|
||||
*
|
||||
* @param type type of connection e.g ELDBUS_CONNECTION_TYPE_SESSION,
|
||||
* ELDBUS_CONNECTION_TYPE_SYSTEM or ELDBUS_CONNECTION_TYPE_STARTER
|
||||
*
|
||||
* @return connection with bus
|
||||
*/
|
||||
EAPI Eldbus_Connection *eldbus_connection_get(Eldbus_Connection_Type type);
|
||||
|
||||
/**
|
||||
* Always create and establish a new connection to bus and integrate it with
|
||||
* the ecore main loop. Differently from eldbus_connection_get(), this function
|
||||
* guarantees to create a new connection to the D-Bus daemon and the connection
|
||||
* is not shared by any means.
|
||||
*
|
||||
* @param type type of connection e.g ELDBUS_CONNECTION_TYPE_SESSION,
|
||||
* ELDBUS_CONNECTION_TYPE_SYSTEM or ELDBUS_CONNECTION_TYPE_STARTER
|
||||
*
|
||||
* @return connection with bus
|
||||
*/
|
||||
EAPI Eldbus_Connection *eldbus_private_connection_get(Eldbus_Connection_Type type);
|
||||
|
||||
/**
|
||||
* @brief Increment connection reference count.
|
||||
*
|
||||
* @param conn The given Eldbus_Connection object to reference
|
||||
*/
|
||||
EAPI Eldbus_Connection *eldbus_connection_ref(Eldbus_Connection *conn) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrement connection reference count.
|
||||
*
|
||||
* If reference count reaches 0, the connection to bus will be dropped and all
|
||||
* its children will be invalidated.
|
||||
*/
|
||||
EAPI void eldbus_connection_unref(Eldbus_Connection *conn) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when connection is freed
|
||||
*
|
||||
* @param conn The connection object to add the callback to.
|
||||
* @param cb callback to be called
|
||||
* @param data data passed to callback
|
||||
*/
|
||||
EAPI void eldbus_connection_free_cb_add(Eldbus_Connection *conn, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_connection_free_cb_add().
|
||||
*/
|
||||
EAPI void eldbus_connection_free_cb_del(Eldbus_Connection *conn, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Set an attached data pointer to an object with a given string key.
|
||||
*
|
||||
* @param conn The connection object to store data to
|
||||
* @param key to identify data
|
||||
* @param data data that will be stored
|
||||
*/
|
||||
EAPI void eldbus_connection_data_set(Eldbus_Connection *conn, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Get data stored in connection.
|
||||
*
|
||||
* @param conn connection where data is stored
|
||||
* @param key key that identifies data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *eldbus_connection_data_get(const Eldbus_Connection *conn, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Del data stored in connection.
|
||||
*
|
||||
* @param conn connection where data is stored
|
||||
* @param key that identifies data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *eldbus_connection_data_del(Eldbus_Connection *conn, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ELDBUS_CONNECTION_EVENT_DEL,
|
||||
ELDBUS_CONNECTION_EVENT_DISCONNECTED,
|
||||
ELDBUS_CONNECTION_EVENT_LAST /**< sentinel, not a real event type */
|
||||
} Eldbus_Connection_Event_Type;
|
||||
|
||||
typedef void (*Eldbus_Connection_Event_Cb)(void *data, Eldbus_Connection *conn, void *event_info);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when an event occurs of the
|
||||
* type passed.
|
||||
*/
|
||||
EAPI void eldbus_connection_event_callback_add(Eldbus_Connection *conn, Eldbus_Connection_Event_Type type, Eldbus_Connection_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_connection_event_callback_add().
|
||||
*/
|
||||
EAPI void eldbus_connection_event_callback_del(Eldbus_Connection *conn, Eldbus_Connection_Event_Type type, Eldbus_Connection_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Send a message.
|
||||
*
|
||||
* @param conn the connection where the message will be sent
|
||||
* @param msg message that will be sent
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* to be executed when a response arrives
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to use default internal value or
|
||||
* ELDBUS_TIMEOUT_INFINITE for no timeout
|
||||
*/
|
||||
EAPI Eldbus_Pending *eldbus_connection_send(Eldbus_Connection *conn, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,82 @@
|
|||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
#include <dbus/dbus.h>
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_name_request(Eldbus_Connection *conn, const char *name, unsigned int flags, Eldbus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return eldbus_proxy_call(conn->fdo_proxy, "RequestName", cb,
|
||||
cb_data, -1, "su", name, flags);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_name_release(Eldbus_Connection *conn, const char *name, Eldbus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return eldbus_proxy_call(conn->fdo_proxy, "ReleaseName", cb,
|
||||
cb_data, -1, "s", name);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_name_owner_get(Eldbus_Connection *conn, const char *name, Eldbus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return eldbus_proxy_call(conn->fdo_proxy, "GetNameOwner", cb,
|
||||
cb_data, -1, "s", name);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_name_owner_has(Eldbus_Connection *conn, const char *name, Eldbus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return eldbus_proxy_call(conn->fdo_proxy, "NameHasOwner", cb,
|
||||
cb_data, -1, "s", name);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_names_list(Eldbus_Connection *conn, Eldbus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
|
||||
return eldbus_proxy_call(conn->fdo_proxy, "ListNames", cb,
|
||||
cb_data, -1, "");
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_names_activatable_list(Eldbus_Connection *conn, Eldbus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
|
||||
return eldbus_proxy_call(conn->fdo_proxy, "ListActivatableNames", cb,
|
||||
cb_data, -1, "");
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_name_start(Eldbus_Connection *conn, const char *name, unsigned int flags, Eldbus_Message_Cb cb, const void *cb_data)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
|
||||
return eldbus_proxy_call(conn->fdo_proxy, "StartServiceByName", cb,
|
||||
cb_data, -1, "su", name, flags);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_object_managed_objects_get(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data)
|
||||
{
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Pending *p;
|
||||
msg = eldbus_object_method_call_new(obj, ELDBUS_FDO_INTERFACE_OBJECT_MANAGER,
|
||||
"GetManagedObjects");
|
||||
p = eldbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
|
@ -0,0 +1,143 @@
|
|||
#ifndef ELDBUS_FREEDESKTOP_H
|
||||
#define ELDBUS_FREEDESKTOP_H 1
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Basic Basic FreeDesktop.Org Methods
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define ELDBUS_NAME_REQUEST_FLAG_ALLOW_REPLACEMENT 0x1 /**< Allow another service to become the primary owner if requested */
|
||||
#define ELDBUS_NAME_REQUEST_FLAG_REPLACE_EXISTING 0x2 /**< Request to replace the current primary owner */
|
||||
#define ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE 0x4 /**< If we can not become the primary owner do not place us in the queue */
|
||||
|
||||
/* Replies to request for a name */
|
||||
#define ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER 1 /**< Service has become the primary owner of the requested name */
|
||||
#define ELDBUS_NAME_REQUEST_REPLY_IN_QUEUE 2 /**< Service could not become the primary owner and has been placed in the queue */
|
||||
#define ELDBUS_NAME_REQUEST_REPLY_EXISTS 3 /**< Service is already in the queue */
|
||||
#define ELDBUS_NAME_REQUEST_REPLY_ALREADY_OWNER 4 /**< Service is already the primary owner */
|
||||
|
||||
EAPI Eldbus_Pending *eldbus_name_request(Eldbus_Connection *conn, const char *bus, unsigned int flags, Eldbus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/* Replies to releasing a name */
|
||||
#define ELDBUS_NAME_RELEASE_REPLY_RELEASED 1 /**< Service was released from the given name */
|
||||
#define ELDBUS_NAME_RELEASE_REPLY_NON_EXISTENT 2 /**< The given name does not exist on the bus */
|
||||
#define ELDBUS_NAME_RELEASE_REPLY_NOT_OWNER 3 /**< Service is not an owner of the given name */
|
||||
|
||||
EAPI Eldbus_Pending *eldbus_name_release(Eldbus_Connection *conn, const char *bus, Eldbus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eldbus_Pending *eldbus_name_owner_get(Eldbus_Connection *conn, const char *bus, Eldbus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eldbus_Pending *eldbus_name_owner_has(Eldbus_Connection *conn, const char *bus, Eldbus_Message_Cb cb, const void *cb_data);
|
||||
EAPI Eldbus_Pending *eldbus_names_list(Eldbus_Connection *conn, Eldbus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1);
|
||||
EAPI Eldbus_Pending *eldbus_names_activatable_list(Eldbus_Connection *conn, Eldbus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1);
|
||||
|
||||
/* Replies to service starts */
|
||||
#define ELDBUS_NAME_START_REPLY_SUCCESS 1 /**< Service was auto started */
|
||||
#define ELDBUS_NAME_START_REPLY_ALREADY_RUNNING 2 /**< Service was already running */
|
||||
|
||||
EAPI Eldbus_Pending *eldbus_name_start(Eldbus_Connection *conn, const char *bus, unsigned int flags, Eldbus_Message_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
typedef void (*Eldbus_Name_Owner_Changed_Cb)(void *data, const char *bus, const char *old_id, const char *new_id);
|
||||
|
||||
/**
|
||||
* Add a callback to be called when unique id of a bus name changed.
|
||||
*
|
||||
* This function implicitly calls eldbus_name_owner_get() in order to be able to
|
||||
* monitor the name. If the only interest is to receive notifications when the
|
||||
* name in fact changes, pass EINA_FALSE to @param allow_initial_call so your
|
||||
* callback will not be called on first retrieval of name owner. If the
|
||||
* initial state is important, pass EINA_TRUE to this parameter.
|
||||
*
|
||||
* @param conn connection
|
||||
* @param bus name of bus
|
||||
* @param cb callback
|
||||
* @param cb_data context data
|
||||
* @param allow_initial_call allow call callback with actual id of the bus
|
||||
*/
|
||||
EAPI void eldbus_name_owner_changed_callback_add(Eldbus_Connection *conn, const char *bus, Eldbus_Name_Owner_Changed_Cb cb, const void *cb_data, Eina_Bool allow_initial_call) EINA_ARG_NONNULL(1, 2, 3);
|
||||
/**
|
||||
* Remove callback added with eldbus_name_owner_changed_callback_add().
|
||||
*
|
||||
* @param conn connection
|
||||
* @param bus name of bus
|
||||
* @param cb callback
|
||||
* @param cb_data context data
|
||||
*/
|
||||
EAPI void eldbus_name_owner_changed_callback_del(Eldbus_Connection *conn, const char *bus, Eldbus_Name_Owner_Changed_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_FDO_Peer org.freedesktop.DBus.Peer
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
EAPI Eldbus_Pending *eldbus_object_peer_ping(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eldbus_Pending *eldbus_object_peer_machine_id_get(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_FDO_Introspectable org.freedesktop.DBus.Introspectable
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
EAPI Eldbus_Pending *eldbus_object_introspect(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_FDO_Properties org.freedesktop.DBus.Properties
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Enable or disable local cache of properties.
|
||||
*
|
||||
* After enable you can call eldbus_proxy_property_local_get() or
|
||||
* eldbus_proxy_property_local_get_all() to get cached properties.
|
||||
*
|
||||
* @note After enable, it will asynchrony get the properties values.
|
||||
*/
|
||||
EAPI void eldbus_proxy_properties_monitor(Eldbus_Proxy *proxy, Eina_Bool enable) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI Eldbus_Pending *eldbus_proxy_property_get(Eldbus_Proxy *proxy, const char *name, Eldbus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI Eldbus_Pending *eldbus_proxy_property_set(Eldbus_Proxy *proxy, const char *name, const char *sig, const void *value, Eldbus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2, 3, 4);
|
||||
EAPI Eldbus_Pending *eldbus_proxy_property_get_all(Eldbus_Proxy *proxy, Eldbus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eldbus_Signal_Handler *eldbus_proxy_properties_changed_callback_add(Eldbus_Proxy *proxy, Eldbus_Signal_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* Return the cached value of property.
|
||||
* This only work if you have enable eldbus_proxy_properties_monitor or
|
||||
* if you have call eldbus_proxy_event_callback_add of type
|
||||
* ELDBUS_PROXY_EVENT_PROPERTY_CHANGED and the property you want had changed.
|
||||
*/
|
||||
EAPI Eina_Value *eldbus_proxy_property_local_get(Eldbus_Proxy *proxy, const char *name) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* Return a Eina_Hash with all cached properties.
|
||||
* This only work if you have enable eldbus_proxy_properties_monitor or
|
||||
* if you have call eldbus_proxy_event_callback_add of type
|
||||
* ELDBUS_PROXY_EVENT_PROPERTY_CHANGED.
|
||||
*/
|
||||
EAPI const Eina_Hash *eldbus_proxy_property_local_get_all(Eldbus_Proxy *proxy) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_FDO_ObjectManager org.freedesktop.DBus.ObjectManager *
|
||||
* @{
|
||||
*/
|
||||
|
||||
EAPI Eldbus_Pending *eldbus_object_managed_objects_get(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,55 +1,55 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
#include <dbus/dbus.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/* TODO: mempool of EDBus_Message and EDBus_Message_Iter */
|
||||
/* TODO: mempool of Eldbus_Message and Eldbus_Message_Iter */
|
||||
|
||||
#define EDBUS_MESSAGE_CHECK(msg) \
|
||||
#define ELDBUS_MESSAGE_CHECK(msg) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN(msg); \
|
||||
if (!EINA_MAGIC_CHECK(msg, EDBUS_MESSAGE_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(msg, ELDBUS_MESSAGE_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(msg, EDBUS_MESSAGE_MAGIC); \
|
||||
EINA_MAGIC_FAIL(msg, ELDBUS_MESSAGE_MAGIC); \
|
||||
return; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN(msg->refcount <= 0); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_MESSAGE_CHECK_RETVAL(msg, retval) \
|
||||
#define ELDBUS_MESSAGE_CHECK_RETVAL(msg, retval) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, retval); \
|
||||
if (!EINA_MAGIC_CHECK(msg, EDBUS_MESSAGE_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(msg, ELDBUS_MESSAGE_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(msg, EDBUS_MESSAGE_MAGIC); \
|
||||
EINA_MAGIC_FAIL(msg, ELDBUS_MESSAGE_MAGIC); \
|
||||
return retval; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(msg->refcount <= 0, retval); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_MESSAGE_ITERATOR_CHECK(iter) \
|
||||
#define ELDBUS_MESSAGE_ITERATOR_CHECK(iter) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN(iter); \
|
||||
if (!EINA_MAGIC_CHECK(iter, EDBUS_MESSAGE_ITERATOR_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(iter, EDBUS_MESSAGE_ITERATOR_MAGIC); \
|
||||
EINA_MAGIC_FAIL(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC); \
|
||||
return; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, retval) \
|
||||
#define ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, retval) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, retval); \
|
||||
if (!EINA_MAGIC_CHECK(iter, EDBUS_MESSAGE_ITERATOR_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(iter, EDBUS_MESSAGE_ITERATOR_MAGIC); \
|
||||
EINA_MAGIC_FAIL(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC); \
|
||||
return retval; \
|
||||
} \
|
||||
} \
|
||||
|
@ -58,34 +58,34 @@
|
|||
static Eina_Bool append_basic(char type, va_list *vl, DBusMessageIter *iter);
|
||||
|
||||
Eina_Bool
|
||||
edbus_message_init(void)
|
||||
eldbus_message_init(void)
|
||||
{
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
edbus_message_shutdown(void)
|
||||
eldbus_message_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
static EDBus_Message_Iter *
|
||||
static Eldbus_Message_Iter *
|
||||
_message_iterator_new(Eina_Bool writable)
|
||||
{
|
||||
EDBus_Message_Iter *iter;
|
||||
Eldbus_Message_Iter *iter;
|
||||
|
||||
iter = calloc(1, sizeof(EDBus_Message_Iter));
|
||||
iter = calloc(1, sizeof(Eldbus_Message_Iter));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, NULL);
|
||||
EINA_MAGIC_SET(iter, EDBUS_MESSAGE_ITERATOR_MAGIC);
|
||||
EINA_MAGIC_SET(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC);
|
||||
iter->writable = writable;
|
||||
|
||||
return iter;
|
||||
}
|
||||
|
||||
EDBus_Message *edbus_message_new(Eina_Bool writable)
|
||||
Eldbus_Message *eldbus_message_new(Eina_Bool writable)
|
||||
{
|
||||
EDBus_Message *msg = calloc(1, sizeof(EDBus_Message));
|
||||
Eldbus_Message *msg = calloc(1, sizeof(Eldbus_Message));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
|
||||
EINA_MAGIC_SET(msg, EDBUS_MESSAGE_MAGIC);
|
||||
EINA_MAGIC_SET(msg, ELDBUS_MESSAGE_MAGIC);
|
||||
msg->refcount = 1;
|
||||
|
||||
msg->iterator = _message_iterator_new(writable);
|
||||
|
@ -94,21 +94,21 @@ EDBus_Message *edbus_message_new(Eina_Bool writable)
|
|||
return msg;
|
||||
|
||||
fail:
|
||||
edbus_message_unref(msg);
|
||||
eldbus_message_unref(msg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EAPI EDBus_Message *
|
||||
edbus_message_method_call_new(const char *dest, const char *path, const char *iface, const char *method)
|
||||
EAPI Eldbus_Message *
|
||||
eldbus_message_method_call_new(const char *dest, const char *path, const char *iface, const char *method)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
Eldbus_Message *msg;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(dest, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(iface, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(method, NULL);
|
||||
|
||||
msg = edbus_message_new(EINA_TRUE);
|
||||
msg = eldbus_message_new(EINA_TRUE);
|
||||
EINA_SAFETY_ON_NULL_GOTO(msg, fail);
|
||||
|
||||
msg->dbus_msg = dbus_message_new_method_call(dest, path, iface, method);
|
||||
|
@ -117,31 +117,31 @@ edbus_message_method_call_new(const char *dest, const char *path, const char *if
|
|||
return msg;
|
||||
|
||||
fail:
|
||||
edbus_message_unref(msg);
|
||||
eldbus_message_unref(msg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EAPI EDBus_Message *
|
||||
edbus_message_ref(EDBus_Message *msg)
|
||||
EAPI Eldbus_Message *
|
||||
eldbus_message_ref(Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
DBG("msg=%p, pre-refcount=%d", msg, msg->refcount);
|
||||
msg->refcount++;
|
||||
return msg;
|
||||
}
|
||||
|
||||
static void
|
||||
_message_iterator_free(EDBus_Message_Iter *iter)
|
||||
_message_iterator_free(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
Eina_Inlist *lst, *next;
|
||||
EDBus_Message_Iter *sub;
|
||||
Eldbus_Message_Iter *sub;
|
||||
if (!iter) return;
|
||||
|
||||
lst = iter->iterators;
|
||||
while (lst)
|
||||
{
|
||||
next = lst->next;
|
||||
sub = EINA_INLIST_CONTAINER_GET(lst, EDBus_Message_Iter);
|
||||
sub = EINA_INLIST_CONTAINER_GET(lst, Eldbus_Message_Iter);
|
||||
_message_iterator_free(sub);
|
||||
lst = next;
|
||||
}
|
||||
|
@ -149,9 +149,9 @@ _message_iterator_free(EDBus_Message_Iter *iter)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
edbus_message_unref(EDBus_Message *msg)
|
||||
eldbus_message_unref(Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK(msg);
|
||||
ELDBUS_MESSAGE_CHECK(msg);
|
||||
DBG("msg=%p, pre-refcount=%d", msg, msg->refcount);
|
||||
msg->refcount--;
|
||||
if (msg->refcount > 0) return;
|
||||
|
@ -168,54 +168,54 @@ edbus_message_unref(EDBus_Message *msg)
|
|||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_message_path_get(const EDBus_Message *msg)
|
||||
eldbus_message_path_get(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
return dbus_message_get_path(msg->dbus_msg);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_message_interface_get(const EDBus_Message *msg)
|
||||
eldbus_message_interface_get(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
return dbus_message_get_interface(msg->dbus_msg);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_message_member_get(const EDBus_Message *msg)
|
||||
eldbus_message_member_get(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
return dbus_message_get_member(msg->dbus_msg);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_message_destination_get(const EDBus_Message *msg)
|
||||
eldbus_message_destination_get(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
return dbus_message_get_destination(msg->dbus_msg);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_message_sender_get(const EDBus_Message *msg)
|
||||
eldbus_message_sender_get(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
return dbus_message_get_sender(msg->dbus_msg);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_message_signature_get(const EDBus_Message *msg)
|
||||
eldbus_message_signature_get(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
return dbus_message_get_signature(msg->dbus_msg);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_error_get(const EDBus_Message *msg, const char **name, const char **text)
|
||||
eldbus_message_error_get(const Eldbus_Message *msg, const char **name, const char **text)
|
||||
{
|
||||
if (name) *name = NULL;
|
||||
if (text) *text = NULL;
|
||||
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
|
||||
if (dbus_message_get_type(msg->dbus_msg) != DBUS_MESSAGE_TYPE_ERROR)
|
||||
return EINA_FALSE;
|
||||
|
@ -231,19 +231,19 @@ edbus_message_error_get(const EDBus_Message *msg, const char **name, const char
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_edbus_message_arguments_vget(EDBus_Message *msg, const char *signature, va_list ap)
|
||||
_eldbus_message_arguments_vget(Eldbus_Message *msg, const char *signature, va_list ap)
|
||||
{
|
||||
EDBus_Message_Iter *iter;
|
||||
iter = edbus_message_iter_get(msg);
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
Eldbus_Message_Iter *iter;
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
|
||||
return edbus_message_iter_arguments_vget(iter, signature, ap);
|
||||
return eldbus_message_iter_arguments_vget(iter, signature, ap);
|
||||
}
|
||||
|
||||
EAPI EDBus_Message_Iter *
|
||||
edbus_message_iter_get(const EDBus_Message *msg)
|
||||
EAPI Eldbus_Message_Iter *
|
||||
eldbus_message_iter_get(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
/* Something went wrong, msg->iterator should not be NULL */
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg->iterator, NULL);
|
||||
|
||||
|
@ -251,36 +251,36 @@ edbus_message_iter_get(const EDBus_Message *msg)
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_arguments_get(const EDBus_Message *msg, const char *signature, ...)
|
||||
eldbus_message_arguments_get(const Eldbus_Message *msg, const char *signature, ...)
|
||||
{
|
||||
Eina_Bool ret;
|
||||
va_list ap;
|
||||
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
|
||||
va_start(ap, signature);
|
||||
ret = _edbus_message_arguments_vget((EDBus_Message *)msg, signature, ap);
|
||||
ret = _eldbus_message_arguments_vget((Eldbus_Message *)msg, signature, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_arguments_vget(const EDBus_Message *msg, const char *signature, va_list ap)
|
||||
eldbus_message_arguments_vget(const Eldbus_Message *msg, const char *signature, va_list ap)
|
||||
{
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
return _edbus_message_arguments_vget((EDBus_Message *)msg, signature, ap);
|
||||
return _eldbus_message_arguments_vget((Eldbus_Message *)msg, signature, ap);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_edbus_message_iter_arguments_vappend(EDBus_Message_Iter *iter, const char *signature, va_list *aq)
|
||||
_eldbus_message_iter_arguments_vappend(Eldbus_Message_Iter *iter, const char *signature, va_list *aq)
|
||||
{
|
||||
DBusSignatureIter signature_iter;
|
||||
Eina_Bool r = EINA_TRUE;
|
||||
char *type;
|
||||
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
|
||||
|
@ -291,10 +291,10 @@ _edbus_message_iter_arguments_vappend(EDBus_Message_Iter *iter, const char *sign
|
|||
r = append_basic(type[0], aq, &iter->dbus_iterator);
|
||||
else
|
||||
{
|
||||
EDBus_Message_Iter **user_itr;
|
||||
EDBus_Message_Iter *sub;
|
||||
Eldbus_Message_Iter **user_itr;
|
||||
Eldbus_Message_Iter *sub;
|
||||
|
||||
user_itr = va_arg(*aq, EDBus_Message_Iter **);
|
||||
user_itr = va_arg(*aq, Eldbus_Message_Iter **);
|
||||
sub = _message_iterator_new(EINA_TRUE);
|
||||
if (!sub)
|
||||
{
|
||||
|
@ -313,8 +313,8 @@ _edbus_message_iter_arguments_vappend(EDBus_Message_Iter *iter, const char *sign
|
|||
else if (type[1] == DBUS_TYPE_VARIANT)
|
||||
{
|
||||
ERR("variant not supported by \
|
||||
edbus_message_iter_arguments_append(), \
|
||||
try edbus_message_iter_container_new()");
|
||||
eldbus_message_iter_arguments_append(), \
|
||||
try eldbus_message_iter_container_new()");
|
||||
r = EINA_FALSE;
|
||||
goto next;
|
||||
}
|
||||
|
@ -343,28 +343,28 @@ next:
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_arguments_vappend(EDBus_Message_Iter *iter, const char *signature, va_list ap)
|
||||
eldbus_message_iter_arguments_vappend(Eldbus_Message_Iter *iter, const char *signature, va_list ap)
|
||||
{
|
||||
va_list aq;
|
||||
Eina_Bool ret;
|
||||
|
||||
va_copy(aq, ap);
|
||||
ret = _edbus_message_iter_arguments_vappend(iter, signature, &aq);
|
||||
ret = _eldbus_message_iter_arguments_vappend(iter, signature, &aq);
|
||||
va_end(aq);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_arguments_append(EDBus_Message_Iter *iter, const char *signature, ...)
|
||||
eldbus_message_iter_arguments_append(Eldbus_Message_Iter *iter, const char *signature, ...)
|
||||
{
|
||||
Eina_Bool r;
|
||||
va_list ap;
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
|
||||
va_start(ap, signature);
|
||||
r = edbus_message_iter_arguments_vappend(iter, signature, ap);
|
||||
r = eldbus_message_iter_arguments_vappend(iter, signature, ap);
|
||||
va_end(ap);
|
||||
return r;
|
||||
}
|
||||
|
@ -435,10 +435,10 @@ append_basic(char type, va_list *vl, DBusMessageIter *iter)
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_edbus_message_arguments_vappend(EDBus_Message *msg, const char *signature, va_list *aq)
|
||||
_eldbus_message_arguments_vappend(Eldbus_Message *msg, const char *signature, va_list *aq)
|
||||
{
|
||||
DBusSignatureIter signature_iter;
|
||||
EDBus_Message_Iter *iter;
|
||||
Eldbus_Message_Iter *iter;
|
||||
int type;
|
||||
Eina_Bool r = EINA_TRUE;
|
||||
|
||||
|
@ -446,7 +446,7 @@ _edbus_message_arguments_vappend(EDBus_Message *msg, const char *signature, va_l
|
|||
EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_signature_validate(signature, NULL),
|
||||
EINA_FALSE);
|
||||
|
||||
iter = edbus_message_iter_get(msg);
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
|
||||
dbus_signature_iter_init(&signature_iter, signature);
|
||||
|
@ -456,9 +456,9 @@ _edbus_message_arguments_vappend(EDBus_Message *msg, const char *signature, va_l
|
|||
r = append_basic(type, aq, &iter->dbus_iterator);
|
||||
else
|
||||
{
|
||||
ERR("sig = %s | edbus_message_arguments_append() and \
|
||||
edbus_message_arguments_vappend() only support basic types, \
|
||||
to complex types use edbus_message_iter_* functions",
|
||||
ERR("sig = %s | eldbus_message_arguments_append() and \
|
||||
eldbus_message_arguments_vappend() only support basic types, \
|
||||
to complex types use eldbus_message_iter_* functions",
|
||||
signature);
|
||||
r = EINA_FALSE;
|
||||
}
|
||||
|
@ -471,42 +471,42 @@ _edbus_message_arguments_vappend(EDBus_Message *msg, const char *signature, va_l
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_arguments_append(EDBus_Message *msg, const char *signature, ...)
|
||||
eldbus_message_arguments_append(Eldbus_Message *msg, const char *signature, ...)
|
||||
{
|
||||
Eina_Bool ret;
|
||||
va_list ap;
|
||||
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
|
||||
va_start(ap, signature);
|
||||
ret = _edbus_message_arguments_vappend(msg, signature, &ap);
|
||||
ret = _eldbus_message_arguments_vappend(msg, signature, &ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_arguments_vappend(EDBus_Message *msg, const char *signature, va_list ap)
|
||||
eldbus_message_arguments_vappend(Eldbus_Message *msg, const char *signature, va_list ap)
|
||||
{
|
||||
va_list aq;
|
||||
Eina_Bool ret;
|
||||
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
|
||||
va_copy(aq, ap);
|
||||
ret = _edbus_message_arguments_vappend(msg, signature, &aq);
|
||||
ret = _eldbus_message_arguments_vappend(msg, signature, &aq);
|
||||
va_end(aq);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI EDBus_Message_Iter *
|
||||
edbus_message_iter_container_new(EDBus_Message_Iter *iter, int type, const char* contained_signature)
|
||||
EAPI Eldbus_Message_Iter *
|
||||
eldbus_message_iter_container_new(Eldbus_Message_Iter *iter, int type, const char* contained_signature)
|
||||
{
|
||||
EDBus_Message_Iter *sub;
|
||||
Eldbus_Message_Iter *sub;
|
||||
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
|
||||
sub = _message_iterator_new(EINA_TRUE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(sub, NULL);
|
||||
|
||||
|
@ -524,21 +524,21 @@ cleanup:
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_container_close(EDBus_Message_Iter *iter, EDBus_Message_Iter *sub)
|
||||
eldbus_message_iter_container_close(Eldbus_Message_Iter *iter, Eldbus_Message_Iter *sub)
|
||||
{
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(sub, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(sub, EINA_FALSE);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
return dbus_message_iter_close_container(&iter->dbus_iterator,
|
||||
&sub->dbus_iterator);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_basic_append(EDBus_Message_Iter *iter, int type, ...)
|
||||
eldbus_message_iter_basic_append(Eldbus_Message_Iter *iter, int type, ...)
|
||||
{
|
||||
Eina_Bool r;
|
||||
va_list vl;
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
|
||||
va_start(vl, type);
|
||||
|
@ -549,18 +549,18 @@ edbus_message_iter_basic_append(EDBus_Message_Iter *iter, int type, ...)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
edbus_message_iter_basic_get(EDBus_Message_Iter *iter, void *value)
|
||||
eldbus_message_iter_basic_get(Eldbus_Message_Iter *iter, void *value)
|
||||
{
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK(iter);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK(iter);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(iter->writable);
|
||||
dbus_message_iter_get_basic(&iter->dbus_iterator, value);
|
||||
}
|
||||
|
||||
EDBus_Message_Iter *
|
||||
edbus_message_iter_sub_iter_get(EDBus_Message_Iter *iter)
|
||||
Eldbus_Message_Iter *
|
||||
eldbus_message_iter_sub_iter_get(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
EDBus_Message_Iter *sub;
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
|
||||
Eldbus_Message_Iter *sub;
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, NULL);
|
||||
|
||||
sub = _message_iterator_new(EINA_FALSE);
|
||||
|
@ -571,16 +571,16 @@ edbus_message_iter_sub_iter_get(EDBus_Message_Iter *iter)
|
|||
}
|
||||
|
||||
EAPI char *
|
||||
edbus_message_iter_signature_get(EDBus_Message_Iter *iter)
|
||||
eldbus_message_iter_signature_get(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
|
||||
return dbus_message_iter_get_signature(&iter->dbus_iterator);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_next(EDBus_Message_Iter *iter)
|
||||
eldbus_message_iter_next(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
return dbus_message_iter_next(&iter->dbus_iterator);
|
||||
}
|
||||
|
@ -665,9 +665,9 @@ get_basic(char type, DBusMessageIter *iter, va_list *vl)
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_fixed_array_get(EDBus_Message_Iter *iter, int signature, void *value, int *n_elements)
|
||||
eldbus_message_iter_fixed_array_get(Eldbus_Message_Iter *iter, int signature, void *value, int *n_elements)
|
||||
{
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(
|
||||
|
@ -681,12 +681,12 @@ edbus_message_iter_fixed_array_get(EDBus_Message_Iter *iter, int signature, void
|
|||
* Useful when iterating over arrays
|
||||
*/
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_get_and_next(EDBus_Message_Iter *iter, char signature, ...)
|
||||
eldbus_message_iter_get_and_next(Eldbus_Message_Iter *iter, char signature, ...)
|
||||
{
|
||||
char type;
|
||||
va_list vl;
|
||||
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
va_start(vl, signature);
|
||||
|
||||
|
@ -703,8 +703,8 @@ edbus_message_iter_get_and_next(EDBus_Message_Iter *iter, char signature, ...)
|
|||
get_basic(type, &iter->dbus_iterator, &vl);
|
||||
else
|
||||
{
|
||||
EDBus_Message_Iter *sub;
|
||||
EDBus_Message_Iter **iter_var = va_arg(vl, EDBus_Message_Iter**);
|
||||
Eldbus_Message_Iter *sub;
|
||||
Eldbus_Message_Iter **iter_var = va_arg(vl, Eldbus_Message_Iter**);
|
||||
|
||||
sub = _message_iterator_new(EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(sub, EINA_FALSE);
|
||||
|
@ -722,12 +722,12 @@ edbus_message_iter_get_and_next(EDBus_Message_Iter *iter, char signature, ...)
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signature, va_list *aq)
|
||||
_eldbus_message_iter_arguments_vget(Eldbus_Message_Iter *iter, const char *signature, va_list *aq)
|
||||
{
|
||||
int iter_type;
|
||||
DBusSignatureIter sig_iter;
|
||||
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_signature_validate(signature, NULL), EINA_FALSE);
|
||||
|
@ -749,8 +749,8 @@ _edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signatu
|
|||
get_basic(iter_type, &iter->dbus_iterator, aq);
|
||||
else
|
||||
{
|
||||
EDBus_Message_Iter **user_itr = va_arg(*aq, EDBus_Message_Iter **);
|
||||
EDBus_Message_Iter *sub_itr;
|
||||
Eldbus_Message_Iter **user_itr = va_arg(*aq, Eldbus_Message_Iter **);
|
||||
Eldbus_Message_Iter *sub_itr;
|
||||
|
||||
sub_itr = _message_iterator_new(EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(sub_itr, EINA_FALSE);
|
||||
|
@ -771,48 +771,48 @@ _edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signatu
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_arguments_get(EDBus_Message_Iter *iter, const char *signature, ...)
|
||||
eldbus_message_iter_arguments_get(Eldbus_Message_Iter *iter, const char *signature, ...)
|
||||
{
|
||||
va_list ap;
|
||||
Eina_Bool ret;
|
||||
|
||||
va_start(ap, signature);
|
||||
ret = _edbus_message_iter_arguments_vget(iter, signature, &ap);
|
||||
ret = _eldbus_message_iter_arguments_vget(iter, signature, &ap);
|
||||
va_end(ap);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signature, va_list ap)
|
||||
eldbus_message_iter_arguments_vget(Eldbus_Message_Iter *iter, const char *signature, va_list ap)
|
||||
{
|
||||
va_list aq;
|
||||
Eina_Bool ret;
|
||||
|
||||
va_copy(aq, ap);
|
||||
ret = _edbus_message_iter_arguments_vget(iter, signature, &aq);
|
||||
ret = _eldbus_message_iter_arguments_vget(iter, signature, &aq);
|
||||
va_end(aq);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_message_iter_del(EDBus_Message_Iter *iter)
|
||||
eldbus_message_iter_del(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
EDBUS_MESSAGE_ITERATOR_CHECK(iter);
|
||||
ELDBUS_MESSAGE_ITERATOR_CHECK(iter);
|
||||
_message_iterator_free(iter);
|
||||
}
|
||||
|
||||
EAPI EDBus_Message *
|
||||
edbus_message_error_new(const EDBus_Message *msg, const char *error_name, const char *error_msg)
|
||||
EAPI Eldbus_Message *
|
||||
eldbus_message_error_new(const Eldbus_Message *msg, const char *error_name, const char *error_msg)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
Eldbus_Message *reply;
|
||||
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(error_name, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(error_msg, NULL);
|
||||
|
||||
reply = edbus_message_new(EINA_FALSE);
|
||||
reply = eldbus_message_new(EINA_FALSE);
|
||||
reply->dbus_msg = dbus_message_new_error(msg->dbus_msg,
|
||||
error_name, error_msg);
|
||||
|
||||
|
@ -826,13 +826,13 @@ edbus_message_error_new(const EDBus_Message *msg, const char *error_name, const
|
|||
return reply;
|
||||
}
|
||||
|
||||
EAPI EDBus_Message *
|
||||
edbus_message_method_return_new(const EDBus_Message *msg)
|
||||
EAPI Eldbus_Message *
|
||||
eldbus_message_method_return_new(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Message *reply;
|
||||
EDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
Eldbus_Message *reply;
|
||||
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
|
||||
|
||||
reply = edbus_message_new(EINA_TRUE);
|
||||
reply = eldbus_message_new(EINA_TRUE);
|
||||
reply->dbus_msg = dbus_message_new_method_return(msg->dbus_msg);
|
||||
|
||||
dbus_message_iter_init_append(reply->dbus_msg,
|
||||
|
@ -841,16 +841,16 @@ edbus_message_method_return_new(const EDBus_Message *msg)
|
|||
return reply;
|
||||
}
|
||||
|
||||
EAPI EDBus_Message *
|
||||
edbus_message_signal_new(const char *path, const char *interface, const char *name)
|
||||
EAPI Eldbus_Message *
|
||||
eldbus_message_signal_new(const char *path, const char *interface, const char *name)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
Eldbus_Message *msg;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(interface, NULL);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(name, NULL);
|
||||
|
||||
msg = edbus_message_new(EINA_TRUE);
|
||||
msg = eldbus_message_new(EINA_TRUE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
|
||||
|
||||
msg->dbus_msg = dbus_message_new_signal(path, interface, name);
|
|
@ -1,9 +1,9 @@
|
|||
#ifndef EDBUS_MESSAGE_H
|
||||
#define EDBUS_MESSAGE_H 1
|
||||
#ifndef ELDBUS_MESSAGE_H
|
||||
#define ELDBUS_MESSAGE_H 1
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Message Message
|
||||
* @ingroup EDBus
|
||||
* @defgroup Eldbus_Message Message
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
@ -11,7 +11,7 @@
|
|||
/**
|
||||
* @brief Increase message reference.
|
||||
*/
|
||||
EAPI EDBus_Message *edbus_message_ref(EDBus_Message *msg) EINA_ARG_NONNULL(1);
|
||||
EAPI Eldbus_Message *eldbus_message_ref(Eldbus_Message *msg) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease message reference.
|
||||
|
@ -19,14 +19,14 @@ EAPI EDBus_Message *edbus_message_ref(EDBus_Message *msg) EINA_ARG_NONNUL
|
|||
* When refcount reaches zero the message and all its resources will be
|
||||
* freed.
|
||||
*/
|
||||
EAPI void edbus_message_unref(EDBus_Message *msg) EINA_ARG_NONNULL(1);
|
||||
EAPI void eldbus_message_unref(Eldbus_Message *msg) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI const char *edbus_message_path_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_message_interface_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_message_member_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_message_destination_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_message_sender_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *edbus_message_signature_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_message_path_get(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_message_interface_get(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_message_member_get(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_message_destination_get(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_message_sender_get(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_message_signature_get(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Create a new message to invoke a method on a remote object.
|
||||
|
@ -36,9 +36,9 @@ EAPI const char *edbus_message_signature_get(const EDBus_Message *msg)
|
|||
* @param iface interface name
|
||||
* @param method name of the method to be called
|
||||
*
|
||||
* @return a new EDBus_Message, free with edbus_message_unref()
|
||||
* @return a new Eldbus_Message, free with eldbus_message_unref()
|
||||
*/
|
||||
EAPI EDBus_Message *edbus_message_method_call_new(const char *dest, const char *path, const char *iface, const char *method) EINA_ARG_NONNULL(1, 2, 3, 4) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
|
||||
EAPI Eldbus_Message *eldbus_message_method_call_new(const char *dest, const char *path, const char *iface, const char *method) EINA_ARG_NONNULL(1, 2, 3, 4) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
|
||||
|
||||
/**
|
||||
* @brief Create a new message that is an error reply to another message.
|
||||
|
@ -47,22 +47,22 @@ EAPI EDBus_Message *edbus_message_method_call_new(const char *dest, const
|
|||
* @param error_name the error name
|
||||
* @param error_msg the error message string
|
||||
*
|
||||
* @return a new EDBus_Message, free with edbus_message_unref()
|
||||
* @return a new Eldbus_Message, free with eldbus_message_unref()
|
||||
*/
|
||||
EAPI EDBus_Message *edbus_message_error_new(const EDBus_Message *msg, const char *error_name, const char *error_msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI Eldbus_Message *eldbus_message_error_new(const Eldbus_Message *msg, const char *error_name, const char *error_msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Create a message that is a reply to a method call.
|
||||
*
|
||||
* @param msg the message we're replying to
|
||||
*
|
||||
* @return new EDBus_Message, free with edbus_message_unref()
|
||||
* @return new Eldbus_Message, free with eldbus_message_unref()
|
||||
*/
|
||||
EAPI EDBus_Message *edbus_message_method_return_new(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI Eldbus_Message *eldbus_message_method_return_new(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the error text and name from a EDBus_Message.
|
||||
* @brief Get the error text and name from a Eldbus_Message.
|
||||
*
|
||||
* If @param msg is an error message return EINA_TRUE and fill in the name and
|
||||
* text of the error.
|
||||
|
@ -73,16 +73,16 @@ EAPI EDBus_Message *edbus_message_method_return_new(const EDBus_Message *
|
|||
* @param text Variable in which to store the error text or @c NULL if it's not
|
||||
* desired.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_error_get(const EDBus_Message *msg, const char **name, const char **text) EINA_ARG_NONNULL(1);
|
||||
EAPI Eina_Bool eldbus_message_error_get(const Eldbus_Message *msg, const char **name, const char **text) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Get the arguments from an EDBus_Message
|
||||
* @brief Get the arguments from an Eldbus_Message
|
||||
*
|
||||
* Get the arguments of an EDBus_Message storing them in the locations pointed
|
||||
* Get the arguments of an Eldbus_Message storing them in the locations pointed
|
||||
* to by the pointer arguments that follow @param signature. Each pointer
|
||||
* argument must be of a type that is appropriate for the correspondent complete
|
||||
* type in @param signature. For complex types such as arrays, structs,
|
||||
* dictionaries or variants, a pointer to EDBus_Message_Iter* must be provided.
|
||||
* dictionaries or variants, a pointer to Eldbus_Message_Iter* must be provided.
|
||||
*
|
||||
* @param msg The message to get the arguments from.
|
||||
* @param signature The signature of the arguments user is expecting to read
|
||||
|
@ -92,31 +92,31 @@ EAPI Eina_Bool edbus_message_error_get(const EDBus_Message *msg, con
|
|||
* @return EINA_TRUE if the arguments were read succesfully and stored in the
|
||||
* respective pointer arguments.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_arguments_get(const EDBus_Message *msg, const char *signature, ...) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI Eina_Bool eldbus_message_arguments_get(const Eldbus_Message *msg, const char *signature, ...) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Get the arguments from an EDBus_Message using a va_list.
|
||||
* @brief Get the arguments from an Eldbus_Message using a va_list.
|
||||
*
|
||||
* @param msg The message to get the arguments from.
|
||||
* @param signature The signature user is expecting to read from @param msg.
|
||||
* @param ap The va_list containing the pointer arguments.
|
||||
*
|
||||
* @see edbus_message_arguments_get()
|
||||
* @see eldbus_message_arguments_get()
|
||||
*
|
||||
* @return EINA_TRUE if the arguments were read succesfully and stored in the
|
||||
* respective pointer arguments.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_arguments_vget(const EDBus_Message *msg, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI Eina_Bool eldbus_message_arguments_vget(const Eldbus_Message *msg, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Append arguments into an EDBus_Message
|
||||
* @brief Append arguments into an Eldbus_Message
|
||||
*
|
||||
* Append arguments into an EDBus_Message according to the @param signature
|
||||
* Append arguments into an Eldbus_Message according to the @param signature
|
||||
* provided. For each complete type in @param signature, a value of the
|
||||
* corresponding type must be provided.
|
||||
*
|
||||
* This function supports only basic types. For complex types use
|
||||
* edbus_message_iter_* family of functions.
|
||||
* eldbus_message_iter_* family of functions.
|
||||
*
|
||||
* @param msg The message in which arguments are being appended.
|
||||
* @param signature Signature of the arguments that are being appended.
|
||||
|
@ -124,23 +124,23 @@ EAPI Eina_Bool edbus_message_arguments_vget(const EDBus_Message *msg
|
|||
*
|
||||
* @return EINA_TRUE on success, EINA_FALSE otherwise.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_arguments_append(EDBus_Message *msg, const char *signature, ...) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eina_Bool eldbus_message_arguments_append(Eldbus_Message *msg, const char *signature, ...) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Append arguments into an EDBus_Message using a va_list.
|
||||
* @brief Append arguments into an Eldbus_Message using a va_list.
|
||||
*
|
||||
* @param msg The message in which arguments are being appended.
|
||||
* @param signature Signature of the arguments that are being appended.
|
||||
* @param ap The va_list containing the arguments to append.
|
||||
*
|
||||
* @see edbus_message_arguments_append().
|
||||
* @see eldbus_message_arguments_append().
|
||||
*
|
||||
* @return EINA_TRUE on success, EINA_FALSE otherwise.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_arguments_vappend(EDBus_Message *msg, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eina_Bool eldbus_message_arguments_vappend(Eldbus_Message *msg, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @defgroup EDBus_Message_Iter Iterator
|
||||
* @defgroup Eldbus_Message_Iter Iterator
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
@ -148,7 +148,7 @@ EAPI Eina_Bool edbus_message_arguments_vappend(EDBus_Message *msg, c
|
|||
* @brief Create and append a typed iterator to another iterator.
|
||||
*
|
||||
* After append data to returned iterator it must be closed calling
|
||||
* edbus_message_iter_container_close().
|
||||
* eldbus_message_iter_container_close().
|
||||
*
|
||||
* Container types are for example struct, variant, and array.
|
||||
* For variants, the contained_signature should be the type of the single
|
||||
|
@ -162,56 +162,56 @@ EAPI Eina_Bool edbus_message_arguments_vappend(EDBus_Message *msg, c
|
|||
*
|
||||
* @return the new iterator
|
||||
*/
|
||||
EAPI EDBus_Message_Iter *edbus_message_iter_container_new(EDBus_Message_Iter *iter, int type, const char* contained_signature) EINA_ARG_NONNULL(1, 3) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI Eldbus_Message_Iter *eldbus_message_iter_container_new(Eldbus_Message_Iter *iter, int type, const char* contained_signature) EINA_ARG_NONNULL(1, 3) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Append a basic type into an EDBus_Iterator.
|
||||
* @brief Append a basic type into an Eldbus_Iterator.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_basic_append(EDBus_Message_Iter *iter, int type, ...) EINA_ARG_NONNULL(1, 3);
|
||||
EAPI Eina_Bool eldbus_message_iter_basic_append(Eldbus_Message_Iter *iter, int type, ...) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Append an argument into an EDBus_Message_Iter. For each complete type
|
||||
* @brief Append an argument into an Eldbus_Message_Iter. For each complete type
|
||||
* you need to provide the correspondent value. In case of complex types you
|
||||
* need to provide an EDBus_Message_Iter** to be allocated and then filled in.
|
||||
* need to provide an Eldbus_Message_Iter** to be allocated and then filled in.
|
||||
*
|
||||
* It's not possible to open two iterators at same iterator with this function.
|
||||
* For example, to create a message with signature="aiai" you need to create the
|
||||
* first container with edbus_message_iter_container_new(), fill the array,
|
||||
* close it with edbus_message_iter_container_close() and then do the same for
|
||||
* first container with eldbus_message_iter_container_new(), fill the array,
|
||||
* close it with eldbus_message_iter_container_close() and then do the same for
|
||||
* the second array.
|
||||
*
|
||||
* @param iter iterator in which data will be appended
|
||||
* @param signature signature of the contained data
|
||||
* @param ... values for each complete type
|
||||
*
|
||||
* @see edbus_message_iter_container_new()
|
||||
* @see edbus_message_iter_container_close()
|
||||
* @see eldbus_message_iter_container_new()
|
||||
* @see eldbus_message_iter_container_close()
|
||||
*
|
||||
* @note This function doesn't support variant, use
|
||||
* edbus_message_iter_container_new() instead to create the variant, fill
|
||||
* eldbus_message_iter_container_new() instead to create the variant, fill
|
||||
* with data and close it.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_arguments_append(EDBus_Message_Iter *iter, const char *signature, ...) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eina_Bool eldbus_message_iter_arguments_append(Eldbus_Message_Iter *iter, const char *signature, ...) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Set data to EDBus_Message_Iter. For each complete in signature
|
||||
* @brief Set data to Eldbus_Message_Iter. For each complete in signature
|
||||
* you need pass the value, in case of complex type a pointer to be allocated a
|
||||
* EDBus_Message_Iter that you need fill and close.
|
||||
* Eldbus_Message_Iter that you need fill and close.
|
||||
*
|
||||
* It's not possible open two iterators at same Iterator. Example:
|
||||
* "aiai", to set this you need create and put the first array with
|
||||
* edbus_message_iter_container_new() fill array with data and close then
|
||||
* you could open the second array with edbus_message_iter_container_new().
|
||||
* eldbus_message_iter_container_new() fill array with data and close then
|
||||
* you could open the second array with eldbus_message_iter_container_new().
|
||||
*
|
||||
* @param iter iterator
|
||||
* @param signature of data
|
||||
* @param ap va_list with the values
|
||||
*
|
||||
* @note This function don't support variant, use instead
|
||||
* edbus_message_iter_container_new() to create the variant fill
|
||||
* eldbus_message_iter_container_new() to create the variant fill
|
||||
* data and close it.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_arguments_vappend(EDBus_Message_Iter *iter, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI Eina_Bool eldbus_message_iter_arguments_vappend(Eldbus_Message_Iter *iter, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Closes a container-typed value appended to the message.
|
||||
|
@ -221,24 +221,24 @@ EAPI Eina_Bool edbus_message_iter_arguments_vappend(EDBus_Message_
|
|||
*
|
||||
* @return EINA_FALSE if iterator was already close or if not enough memory
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_container_close(EDBus_Message_Iter *iter, EDBus_Message_Iter *sub) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eina_Bool eldbus_message_iter_container_close(Eldbus_Message_Iter *iter, Eldbus_Message_Iter *sub) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Get the main EDBus_Message_Iter from the EDBus_Message.
|
||||
* @brief Get the main Eldbus_Message_Iter from the Eldbus_Message.
|
||||
*/
|
||||
EAPI EDBus_Message_Iter *edbus_message_iter_get(const EDBus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI Eldbus_Message_Iter *eldbus_message_iter_get(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Get a basic type from EDBus_Iterator.
|
||||
* @brief Get a basic type from Eldbus_Iterator.
|
||||
*/
|
||||
EAPI void edbus_message_iter_basic_get(EDBus_Message_Iter *iter, void *value) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void eldbus_message_iter_basic_get(Eldbus_Message_Iter *iter, void *value) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Returns the current signature of a message iterator.
|
||||
*
|
||||
* @note The returned string must be freed.
|
||||
*/
|
||||
EAPI char *edbus_message_iter_signature_get(EDBus_Message_Iter *iter) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI char *eldbus_message_iter_signature_get(Eldbus_Message_Iter *iter) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Moves the iterator to the next field, if any.
|
||||
|
@ -246,10 +246,10 @@ EAPI char *edbus_message_iter_signature_get(EDBus_Message_Iter
|
|||
*
|
||||
* @return if iterator was reach to end return EINA_FALSE
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_next(EDBus_Message_Iter *iter) EINA_ARG_NONNULL(1);
|
||||
EAPI Eina_Bool eldbus_message_iter_next(Eldbus_Message_Iter *iter) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Get a complete type from EDBus_Message_Iter if is not at the end
|
||||
* @brief Get a complete type from Eldbus_Message_Iter if is not at the end
|
||||
* of iterator and move to next field.
|
||||
* Useful to iterate over arrays.
|
||||
*
|
||||
|
@ -261,7 +261,7 @@ EAPI Eina_Bool edbus_message_iter_next(EDBus_Message_Iter *iter) E
|
|||
* iterator points return EINA_FALSE
|
||||
*
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_get_and_next(EDBus_Message_Iter *iter, char type, ...) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI Eina_Bool eldbus_message_iter_get_and_next(Eldbus_Message_Iter *iter, char type, ...) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Reads a block of fixed-length values from the message iterator.
|
||||
|
@ -270,7 +270,7 @@ EAPI Eina_Bool edbus_message_iter_get_and_next(EDBus_Message_Iter
|
|||
* such as integers, bool, double. The returned block will be from the
|
||||
* current position in the array until the end of the array.
|
||||
*
|
||||
* There is one exception here: although EDBUS_TYPE_UNIX_FD is considered a
|
||||
* There is one exception here: although ELDBUS_TYPE_UNIX_FD is considered a
|
||||
* 'fixed' type arrays of this type may not be read with this function.
|
||||
*
|
||||
* The value argument should be the address of a location to store the returned
|
||||
|
@ -280,12 +280,12 @@ EAPI Eina_Bool edbus_message_iter_get_and_next(EDBus_Message_Iter
|
|||
* Because the array is not copied, this function runs in constant time and is
|
||||
* fast; it's much preferred over walking the entire array with an iterator.
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_fixed_array_get(EDBus_Message_Iter *iter, int signature, void *value, int *n_elements) EINA_ARG_NONNULL(1, 3, 4);
|
||||
EAPI Eina_Bool eldbus_message_iter_fixed_array_get(Eldbus_Message_Iter *iter, int signature, void *value, int *n_elements) EINA_ARG_NONNULL(1, 3, 4);
|
||||
|
||||
/**
|
||||
* @brief Get data from EDBus_Message_Iter, for each complete type must have
|
||||
* @brief Get data from Eldbus_Message_Iter, for each complete type must have
|
||||
* a pointer to store his value, in case of complex type a
|
||||
* EDBus_Message_Iter will be need.
|
||||
* Eldbus_Message_Iter will be need.
|
||||
*
|
||||
* @param iter iterator
|
||||
* @param signature of the complete data types on interator
|
||||
|
@ -293,12 +293,12 @@ EAPI Eina_Bool edbus_message_iter_fixed_array_get(EDBus_Message_Iter *iter, int
|
|||
*
|
||||
* @return EINA_FALSE if signature different from signature in iterator
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_arguments_get(EDBus_Message_Iter *iter, const char *signature, ...) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eina_Bool eldbus_message_iter_arguments_get(Eldbus_Message_Iter *iter, const char *signature, ...) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Get data from EDBus_Message_Iter, for each complete type must have
|
||||
* @brief Get data from Eldbus_Message_Iter, for each complete type must have
|
||||
* a pointer to store his value, in case of complex type a
|
||||
* EDBus_Message_Iter will be need.
|
||||
* Eldbus_Message_Iter will be need.
|
||||
*
|
||||
* @param iter iterator
|
||||
* @param signature of the complete data types on interator
|
||||
|
@ -306,12 +306,12 @@ EAPI Eina_Bool edbus_message_iter_arguments_get(EDBus_Message_Iter
|
|||
*
|
||||
* @return EINA_FALSE if signature different from signature in iterator
|
||||
*/
|
||||
EAPI Eina_Bool edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI Eina_Bool eldbus_message_iter_arguments_vget(Eldbus_Message_Iter *iter, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Manually delete the iterator.
|
||||
*
|
||||
* Iterators are usually bound to the life of @ref EDBus_Message
|
||||
* Iterators are usually bound to the life of @ref Eldbus_Message
|
||||
* they were created from, being deleted automatically once the
|
||||
* message is deleted.
|
||||
*
|
||||
|
@ -322,14 +322,14 @@ EAPI Eina_Bool edbus_message_iter_arguments_vget(EDBus_Message_Ite
|
|||
*
|
||||
* @param iter the iterator to be deleted.
|
||||
*/
|
||||
EAPI void edbus_message_iter_del(EDBus_Message_Iter *iter) EINA_ARG_NONNULL(1);
|
||||
EAPI void eldbus_message_iter_del(Eldbus_Message_Iter *iter) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "edbus_message_helper.h"
|
||||
#include "edbus_message_eina_value.h"
|
||||
#include "eldbus_message_helper.h"
|
||||
#include "eldbus_message_eina_value.h"
|
||||
|
||||
/**
|
||||
* @}
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* @ingroup Eldbus_Message
|
||||
* @defgroup Eina_Value Eina_Value to/from Message
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Convert Eldbus_Message to Eina_Value
|
||||
*
|
||||
* @param msg Message
|
||||
* @return Eina_Value of type Eina_Value_Type_Struct
|
||||
*/
|
||||
EAPI Eina_Value *eldbus_message_to_eina_value(const Eldbus_Message *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* Convert Eldbus_Message_Iter of type variant, struct or dict entry to
|
||||
* Eina_Value.
|
||||
*
|
||||
* @param iter Message iterator
|
||||
* @return Eina_Value of type Eina_Value_Type_Struct
|
||||
*/
|
||||
EAPI Eina_Value *eldbus_message_iter_struct_like_to_eina_value(const Eldbus_Message_Iter *iter);
|
||||
|
||||
/**
|
||||
* Convert Eina_Value to Eldbus_Message
|
||||
*
|
||||
* @param signature dbus signature
|
||||
* @param msg where data will be put
|
||||
* @param value source of data, must be of type Eina_Value_Type_Struct
|
||||
* @return success or not
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_message_from_eina_value(const char *signature, Eldbus_Message *msg, const Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
|
@ -1,5 +1,5 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
|
||||
static Eina_Bool
|
||||
_compatible_type(int dbus_type, const Eina_Value_Type *value_type)
|
||||
|
@ -42,12 +42,12 @@ _compatible_type(int dbus_type, const Eina_Value_Type *value_type)
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Iter *iter)
|
||||
_array_append(const char *type, const Eina_Value *value_array, Eldbus_Message_Iter *iter)
|
||||
{
|
||||
EDBus_Message_Iter *array;
|
||||
Eldbus_Message_Iter *array;
|
||||
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(
|
||||
edbus_message_iter_arguments_append(iter, type, &array), EINA_FALSE);
|
||||
eldbus_message_iter_arguments_append(iter, type, &array), EINA_FALSE);
|
||||
DBG("array of type %c", type[1]);
|
||||
switch (type[1])
|
||||
{
|
||||
|
@ -62,11 +62,11 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
Eina_Value st;
|
||||
EDBus_Message_Iter *entry;
|
||||
Eldbus_Message_Iter *entry;
|
||||
eina_value_array_value_get(value_array, i, &st);
|
||||
edbus_message_iter_arguments_append(array, type+1, &entry);
|
||||
eldbus_message_iter_arguments_append(array, type+1, &entry);
|
||||
_message_iter_from_eina_value_struct(entry_sig, entry, &st);
|
||||
edbus_message_iter_container_close(array, entry);
|
||||
eldbus_message_iter_container_close(array, entry);
|
||||
eina_value_flush(&st);
|
||||
}
|
||||
free(entry_sig);
|
||||
|
@ -78,11 +78,11 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
Eina_Value inner_array;
|
||||
EDBus_Message_Iter *sub_array;
|
||||
Eldbus_Message_Iter *sub_array;
|
||||
eina_value_array_value_get(value_array, i, &inner_array);
|
||||
edbus_message_iter_arguments_append(array, type+1, &sub_array);
|
||||
eldbus_message_iter_arguments_append(array, type+1, &sub_array);
|
||||
_array_append(type+1, &inner_array, sub_array);
|
||||
edbus_message_iter_container_close(array, sub_array);
|
||||
eldbus_message_iter_container_close(array, sub_array);
|
||||
eina_value_flush(&inner_array);
|
||||
}
|
||||
break;
|
||||
|
@ -100,7 +100,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &txt);
|
||||
edbus_message_iter_basic_append(array, type[1], txt);
|
||||
eldbus_message_iter_basic_append(array, type[1], txt);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -158,7 +158,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -180,7 +180,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
for (i = 0; i < eina_value_array_count(value_array); i++)
|
||||
{
|
||||
eina_value_array_get(value_array, i, &z);
|
||||
edbus_message_iter_basic_append(array, type[1], z);
|
||||
eldbus_message_iter_basic_append(array, type[1], z);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -201,12 +201,12 @@ _array_append(const char *type, const Eina_Value *value_array, EDBus_Message_Ite
|
|||
return EINA_FALSE;
|
||||
}
|
||||
}
|
||||
edbus_message_iter_container_close(iter, array);
|
||||
eldbus_message_iter_container_close(iter, array);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *desc, unsigned idx, EDBus_Message_Iter *iter)
|
||||
_basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *desc, unsigned idx, Eldbus_Message_Iter *iter)
|
||||
{
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(
|
||||
_compatible_type(type, desc->members[idx].type), EINA_FALSE);
|
||||
|
@ -217,7 +217,7 @@ _basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *
|
|||
{
|
||||
int32_t i;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &i);
|
||||
edbus_message_iter_basic_append(iter, type, i);
|
||||
eldbus_message_iter_basic_append(iter, type, i);
|
||||
break;
|
||||
}
|
||||
case 's':
|
||||
|
@ -226,7 +226,7 @@ _basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *
|
|||
{
|
||||
const char *txt;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &txt);
|
||||
edbus_message_iter_basic_append(iter, type, txt);
|
||||
eldbus_message_iter_basic_append(iter, type, txt);
|
||||
break;
|
||||
}
|
||||
case 'b'://boolean
|
||||
|
@ -234,49 +234,49 @@ _basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *
|
|||
{
|
||||
unsigned char byte;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &byte);
|
||||
edbus_message_iter_basic_append(iter, type, byte);
|
||||
eldbus_message_iter_basic_append(iter, type, byte);
|
||||
break;
|
||||
}
|
||||
case 'n'://int16
|
||||
{
|
||||
int16_t i;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &i);
|
||||
edbus_message_iter_basic_append(iter, type, i);
|
||||
eldbus_message_iter_basic_append(iter, type, i);
|
||||
break;
|
||||
}
|
||||
case 'q'://uint16
|
||||
{
|
||||
uint16_t i;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &i);
|
||||
edbus_message_iter_basic_append(iter, type, i);
|
||||
eldbus_message_iter_basic_append(iter, type, i);
|
||||
break;
|
||||
}
|
||||
case 'u'://uint32
|
||||
{
|
||||
uint32_t i;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &i);
|
||||
edbus_message_iter_basic_append(iter, type, i);
|
||||
eldbus_message_iter_basic_append(iter, type, i);
|
||||
break;
|
||||
}
|
||||
case 'x'://int64
|
||||
{
|
||||
int64_t i;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &i);
|
||||
edbus_message_iter_basic_append(iter, type, i);
|
||||
eldbus_message_iter_basic_append(iter, type, i);
|
||||
break;
|
||||
}
|
||||
case 't'://uint64
|
||||
{
|
||||
uint64_t i;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &i);
|
||||
edbus_message_iter_basic_append(iter, type, i);
|
||||
eldbus_message_iter_basic_append(iter, type, i);
|
||||
break;
|
||||
}
|
||||
case 'd'://double
|
||||
{
|
||||
double d;
|
||||
eina_value_struct_get(value, desc->members[idx].name, &d);
|
||||
edbus_message_iter_basic_append(iter, type, d);
|
||||
eldbus_message_iter_basic_append(iter, type, d);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -287,7 +287,7 @@ _basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *
|
|||
}
|
||||
|
||||
Eina_Bool
|
||||
_message_iter_from_eina_value_struct(const char *signature, EDBus_Message_Iter *iter, const Eina_Value *value)
|
||||
_message_iter_from_eina_value_struct(const char *signature, Eldbus_Message_Iter *iter, const Eina_Value *value)
|
||||
{
|
||||
unsigned i;
|
||||
DBusSignatureIter signature_iter;
|
||||
|
@ -321,7 +321,7 @@ _message_iter_from_eina_value_struct(const char *signature, EDBus_Message_Iter *
|
|||
else if (type[0] == '(')
|
||||
{
|
||||
Eina_Value inner_st;
|
||||
EDBus_Message_Iter *sub_iter;
|
||||
Eldbus_Message_Iter *sub_iter;
|
||||
char *sub_sig;
|
||||
unsigned len = strlen(type+1) -1;
|
||||
sub_sig = malloc(sizeof(char) * len);
|
||||
|
@ -331,10 +331,10 @@ _message_iter_from_eina_value_struct(const char *signature, EDBus_Message_Iter *
|
|||
_compatible_type(type[0], st.desc->members[i].type),
|
||||
EINA_FALSE);
|
||||
eina_value_struct_value_get(value, st.desc->members[i].name, &inner_st);
|
||||
edbus_message_iter_arguments_append(iter, type, &sub_iter);
|
||||
eldbus_message_iter_arguments_append(iter, type, &sub_iter);
|
||||
r = _message_iter_from_eina_value_struct(sub_sig, sub_iter,
|
||||
&inner_st);
|
||||
edbus_message_iter_container_close(iter, sub_iter);
|
||||
eldbus_message_iter_container_close(iter, sub_iter);
|
||||
free(sub_sig);
|
||||
}
|
||||
else if (type[0] == 'v')
|
||||
|
@ -355,14 +355,14 @@ _message_iter_from_eina_value_struct(const char *signature, EDBus_Message_Iter *
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_message_from_eina_value(const char *signature, EDBus_Message *msg, const Eina_Value *value)
|
||||
eldbus_message_from_eina_value(const char *signature, Eldbus_Message *msg, const Eina_Value *value)
|
||||
{
|
||||
EDBus_Message_Iter *iter;
|
||||
Eldbus_Message_Iter *iter;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
|
||||
|
||||
iter = edbus_message_iter_get(msg);
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, EINA_FALSE);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
|
||||
EAPI void
|
||||
eldbus_message_iter_dict_iterate(Eldbus_Message_Iter *array, const char *signature, Eldbus_Dict_Cb_Get cb, const void *data)
|
||||
{
|
||||
Eldbus_Message_Iter *entry;
|
||||
char *iter_sig;
|
||||
unsigned len;
|
||||
EINA_SAFETY_ON_FALSE_RETURN(array);
|
||||
EINA_SAFETY_ON_NULL_RETURN(signature);
|
||||
|
||||
iter_sig = eldbus_message_iter_signature_get(array);
|
||||
len = strlen(iter_sig + 1);
|
||||
if (strncmp(signature, iter_sig + 1, len - 1))
|
||||
{
|
||||
ERR("Unexpected signature, expected is: %s", iter_sig);
|
||||
free(iter_sig);
|
||||
return;
|
||||
}
|
||||
free(iter_sig);
|
||||
|
||||
while (eldbus_message_iter_get_and_next(array, 'e', &entry))
|
||||
{
|
||||
const void *key;
|
||||
Eldbus_Message_Iter *var;
|
||||
if (!eldbus_message_iter_arguments_get(entry, signature, &key, &var))
|
||||
continue;
|
||||
cb((void *)data, key, var);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
/**
|
||||
* @ingroup Eldbus_Message
|
||||
* @defgroup Eldbus_Message_Helpers Message Helpers
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef void (*Eldbus_Dict_Cb_Get)(void *data, const void *key, Eldbus_Message_Iter *var);
|
||||
|
||||
/**
|
||||
* Iterate over a dictionary.
|
||||
*
|
||||
* @param dict iterator with array of entry
|
||||
* @param signature of entry, example: "sv"
|
||||
* @param cb callback that will be called in each entry
|
||||
* @param data context data
|
||||
*/
|
||||
EAPI void eldbus_message_iter_dict_iterate(Eldbus_Message_Iter *dict, const char *signature, Eldbus_Dict_Cb_Get cb, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
|
@ -1,7 +1,7 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
|
||||
static void _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, EDBus_Message_Iter *iter);
|
||||
static void _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, Eldbus_Message_Iter *iter);
|
||||
|
||||
static const Eina_Value_Type *
|
||||
_dbus_type_to_eina_value_type(char type)
|
||||
|
@ -94,24 +94,24 @@ _type_offset(char type, unsigned base)
|
|||
}
|
||||
|
||||
static Eina_Value *
|
||||
_message_iter_array_to_eina_value(EDBus_Message_Iter *iter)
|
||||
_message_iter_array_to_eina_value(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
Eina_Value *array_value;
|
||||
char *sig;
|
||||
|
||||
sig = edbus_message_iter_signature_get(iter);
|
||||
sig = eldbus_message_iter_signature_get(iter);
|
||||
DBG("array of %s", sig);
|
||||
array_value = eina_value_array_new(_dbus_type_to_eina_value_type(sig[0]), 0);
|
||||
if (sig[0] == '(' || sig[0] == '{' || sig[0] == 'v')
|
||||
{
|
||||
EDBus_Message_Iter *entry;
|
||||
Eldbus_Message_Iter *entry;
|
||||
|
||||
if (sig[0] == '{')
|
||||
sig[0] = 'e';
|
||||
else if (sig[0] == '(')
|
||||
sig[0] = 'r';
|
||||
|
||||
while (edbus_message_iter_get_and_next(iter, sig[0], &entry))
|
||||
while (eldbus_message_iter_get_and_next(iter, sig[0], &entry))
|
||||
{
|
||||
Eina_Value *data = _message_iter_struct_to_eina_value(entry);
|
||||
Eina_Value_Struct st;
|
||||
|
@ -121,8 +121,8 @@ _message_iter_array_to_eina_value(EDBus_Message_Iter *iter)
|
|||
}
|
||||
else if (sig[0] == 'a')
|
||||
{
|
||||
EDBus_Message_Iter *entry;
|
||||
while (edbus_message_iter_get_and_next(iter, sig[0], &entry))
|
||||
Eldbus_Message_Iter *entry;
|
||||
while (eldbus_message_iter_get_and_next(iter, sig[0], &entry))
|
||||
{
|
||||
Eina_Value *data = _message_iter_array_to_eina_value(entry);
|
||||
Eina_Value_Array inner_array;
|
||||
|
@ -139,7 +139,7 @@ _message_iter_array_to_eina_value(EDBus_Message_Iter *iter)
|
|||
}
|
||||
|
||||
static void
|
||||
_message_iter_basic_array_to_eina_value(char type, Eina_Value *value, EDBus_Message_Iter *iter)
|
||||
_message_iter_basic_array_to_eina_value(char type, Eina_Value *value, Eldbus_Message_Iter *iter)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
|
@ -147,7 +147,7 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, EDBus_Mess
|
|||
case 'h'://fd
|
||||
{
|
||||
int32_t i;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &i))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &i))
|
||||
eina_value_array_append(value, i);
|
||||
break;
|
||||
}
|
||||
|
@ -156,7 +156,7 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, EDBus_Mess
|
|||
case 'g'://signature
|
||||
{
|
||||
const char *txt;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &txt))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &txt))
|
||||
eina_value_array_append(value, txt);
|
||||
break;
|
||||
}
|
||||
|
@ -164,49 +164,49 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, EDBus_Mess
|
|||
case 'y'://byte
|
||||
{
|
||||
unsigned char byte;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &byte))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &byte))
|
||||
eina_value_array_append(value, byte);
|
||||
break;
|
||||
}
|
||||
case 'n'://int16
|
||||
{
|
||||
int16_t i;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &i))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &i))
|
||||
eina_value_array_append(value, i);
|
||||
break;
|
||||
}
|
||||
case 'q'://uint16
|
||||
{
|
||||
uint16_t i;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &i))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &i))
|
||||
eina_value_array_append(value, i);
|
||||
break;
|
||||
}
|
||||
case 'u'://uint32
|
||||
{
|
||||
uint32_t i;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &i))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &i))
|
||||
eina_value_array_append(value, i);
|
||||
break;
|
||||
}
|
||||
case 'x'://int64
|
||||
{
|
||||
int64_t i;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &i))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &i))
|
||||
eina_value_array_append(value, i);
|
||||
break;
|
||||
}
|
||||
case 't'://uint64
|
||||
{
|
||||
uint64_t i;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &i))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &i))
|
||||
eina_value_array_append(value, i);
|
||||
break;
|
||||
}
|
||||
case 'd'://double
|
||||
{
|
||||
double d;
|
||||
while (edbus_message_iter_get_and_next(iter, type, &d))
|
||||
while (eldbus_message_iter_get_and_next(iter, type, &d))
|
||||
eina_value_array_append(value, d);
|
||||
break;
|
||||
}
|
||||
|
@ -215,16 +215,16 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, EDBus_Mess
|
|||
|
||||
#define ARG "arg%u"
|
||||
|
||||
typedef struct _EDBus_Struct_Desc
|
||||
typedef struct _Eldbus_Struct_Desc
|
||||
{
|
||||
Eina_Value_Struct_Desc base;
|
||||
int refcount;
|
||||
} EDBus_Struct_Desc;
|
||||
} Eldbus_Struct_Desc;
|
||||
|
||||
static void *
|
||||
_ops_malloc(const Eina_Value_Struct_Operations *ops EINA_UNUSED, const Eina_Value_Struct_Desc *desc)
|
||||
{
|
||||
EDBus_Struct_Desc *edesc = (EDBus_Struct_Desc*)desc;
|
||||
Eldbus_Struct_Desc *edesc = (Eldbus_Struct_Desc*)desc;
|
||||
edesc->refcount++;
|
||||
DBG("%p refcount=%d", edesc, edesc->refcount);
|
||||
return malloc(desc->size);
|
||||
|
@ -233,7 +233,7 @@ _ops_malloc(const Eina_Value_Struct_Operations *ops EINA_UNUSED, const Eina_Valu
|
|||
static void
|
||||
_ops_free(const Eina_Value_Struct_Operations *ops EINA_UNUSED, const Eina_Value_Struct_Desc *desc, void *memory)
|
||||
{
|
||||
EDBus_Struct_Desc *edesc = (EDBus_Struct_Desc*) desc;
|
||||
Eldbus_Struct_Desc *edesc = (Eldbus_Struct_Desc*) desc;
|
||||
edesc->refcount--;
|
||||
free(memory);
|
||||
DBG("%p refcount=%d", edesc, edesc->refcount);
|
||||
|
@ -258,7 +258,7 @@ static Eina_Value_Struct_Operations operations =
|
|||
};
|
||||
|
||||
Eina_Value *
|
||||
_message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
||||
_message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter)
|
||||
{
|
||||
int type;
|
||||
Eina_Value *value_st = NULL;
|
||||
|
@ -266,11 +266,11 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
unsigned int offset = 0, z;
|
||||
char name[7];//arg000 + \0
|
||||
Eina_Value_Struct_Member *members;
|
||||
EDBus_Struct_Desc *st_desc;
|
||||
Eldbus_Struct_Desc *st_desc;
|
||||
Eina_Array *st_values = eina_array_new(1);
|
||||
|
||||
DBG("begin struct");
|
||||
st_desc = calloc(1, sizeof(EDBus_Struct_Desc));
|
||||
st_desc = calloc(1, sizeof(Eldbus_Struct_Desc));
|
||||
st_desc->base.version = EINA_VALUE_STRUCT_DESC_VERSION;
|
||||
st_desc->base.ops = &operations;
|
||||
|
||||
|
@ -298,7 +298,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
int32_t i;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_INT);
|
||||
edbus_message_iter_basic_get(iter, &i);
|
||||
eldbus_message_iter_basic_get(iter, &i);
|
||||
eina_value_set(v, i);
|
||||
break;
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
const char *txt;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_STRING);
|
||||
edbus_message_iter_basic_get(iter, &txt);
|
||||
eldbus_message_iter_basic_get(iter, &txt);
|
||||
eina_value_set(v, txt);
|
||||
break;
|
||||
}
|
||||
|
@ -317,7 +317,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
unsigned char byte;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_UCHAR);
|
||||
edbus_message_iter_basic_get(iter, &byte);
|
||||
eldbus_message_iter_basic_get(iter, &byte);
|
||||
eina_value_set(v, byte);
|
||||
break;
|
||||
}
|
||||
|
@ -325,7 +325,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
int16_t i;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_SHORT);
|
||||
edbus_message_iter_basic_get(iter, &i);
|
||||
eldbus_message_iter_basic_get(iter, &i);
|
||||
eina_value_set(v, i);
|
||||
break;
|
||||
}
|
||||
|
@ -333,7 +333,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
uint16_t i;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_USHORT);
|
||||
edbus_message_iter_basic_get(iter, &i);
|
||||
eldbus_message_iter_basic_get(iter, &i);
|
||||
eina_value_set(v, i);
|
||||
break;
|
||||
}
|
||||
|
@ -341,7 +341,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
uint32_t i;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_UINT);
|
||||
edbus_message_iter_basic_get(iter, &i);
|
||||
eldbus_message_iter_basic_get(iter, &i);
|
||||
eina_value_set(v, i);
|
||||
break;
|
||||
}
|
||||
|
@ -349,7 +349,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
int64_t i;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_INT64);
|
||||
edbus_message_iter_basic_get(iter, &i);
|
||||
eldbus_message_iter_basic_get(iter, &i);
|
||||
eina_value_set(v, i);
|
||||
break;
|
||||
}
|
||||
|
@ -357,7 +357,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
uint64_t i;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_UINT64);
|
||||
edbus_message_iter_basic_get(iter, &i);
|
||||
eldbus_message_iter_basic_get(iter, &i);
|
||||
eina_value_set(v, i);
|
||||
break;
|
||||
}
|
||||
|
@ -365,14 +365,14 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
{
|
||||
double d;
|
||||
v = eina_value_new(EINA_VALUE_TYPE_DOUBLE);
|
||||
edbus_message_iter_basic_get(iter, &d);
|
||||
eldbus_message_iter_basic_get(iter, &d);
|
||||
eina_value_set(v, d);
|
||||
break;
|
||||
}
|
||||
case 'a'://array
|
||||
{
|
||||
EDBus_Message_Iter *dbus_array;
|
||||
dbus_array = edbus_message_iter_sub_iter_get(iter);
|
||||
Eldbus_Message_Iter *dbus_array;
|
||||
dbus_array = eldbus_message_iter_sub_iter_get(iter);
|
||||
v = _message_iter_array_to_eina_value(dbus_array);
|
||||
break;
|
||||
}
|
||||
|
@ -380,8 +380,8 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
case 'r'://struct
|
||||
case 'v'://variant
|
||||
{
|
||||
EDBus_Message_Iter *dbus_st;
|
||||
dbus_st = edbus_message_iter_sub_iter_get(iter);
|
||||
Eldbus_Message_Iter *dbus_st;
|
||||
dbus_st = eldbus_message_iter_sub_iter_get(iter);
|
||||
v = _message_iter_struct_to_eina_value(dbus_st);
|
||||
break;
|
||||
}
|
||||
|
@ -390,7 +390,7 @@ _message_iter_struct_to_eina_value(EDBus_Message_Iter *iter)
|
|||
v = NULL;
|
||||
}
|
||||
eina_array_push(st_values, v);
|
||||
edbus_message_iter_next(iter);
|
||||
eldbus_message_iter_next(iter);
|
||||
z++;
|
||||
}
|
||||
|
||||
|
@ -433,18 +433,18 @@ end:
|
|||
}
|
||||
|
||||
EAPI Eina_Value *
|
||||
edbus_message_to_eina_value(const EDBus_Message *msg)
|
||||
eldbus_message_to_eina_value(const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Message_Iter *iter;
|
||||
Eldbus_Message_Iter *iter;
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(msg, NULL);
|
||||
iter = edbus_message_iter_get(msg);
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, NULL);
|
||||
return _message_iter_struct_to_eina_value(iter);
|
||||
}
|
||||
|
||||
EAPI Eina_Value *
|
||||
edbus_message_iter_struct_like_to_eina_value(const EDBus_Message_Iter *iter)
|
||||
eldbus_message_iter_struct_like_to_eina_value(const Eldbus_Message_Iter *iter)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, NULL);
|
||||
return _message_iter_struct_to_eina_value((EDBus_Message_Iter *)iter);
|
||||
return _message_iter_struct_to_eina_value((Eldbus_Message_Iter *)iter);
|
||||
}
|
|
@ -0,0 +1,676 @@
|
|||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
#include <dbus/dbus.h>
|
||||
|
||||
/* TODO: mempool of Eldbus_Object, Eldbus_Object_Context_Event_Cb and
|
||||
* Eldbus_Object_Context_Event
|
||||
*/
|
||||
|
||||
#define ELDBUS_OBJECT_CHECK(obj) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj); \
|
||||
if (!EINA_MAGIC_CHECK(obj, ELDBUS_OBJECT_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(obj, ELDBUS_OBJECT_MAGIC); \
|
||||
return; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN(obj->refcount <= 0); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define ELDBUS_OBJECT_CHECK_RETVAL(obj, retval) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, retval); \
|
||||
if (!EINA_MAGIC_CHECK(obj, ELDBUS_OBJECT_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(obj, ELDBUS_OBJECT_MAGIC); \
|
||||
return retval; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(obj->refcount <= 0, retval); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define ELDBUS_OBJECT_CHECK_GOTO(obj, label) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_GOTO(obj, label); \
|
||||
if (!EINA_MAGIC_CHECK(obj, ELDBUS_OBJECT_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(obj, ELDBUS_OBJECT_MAGIC); \
|
||||
goto label; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_GOTO(obj->refcount <= 0, label); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
Eina_Bool
|
||||
eldbus_object_init(void)
|
||||
{
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
eldbus_object_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void _eldbus_object_event_callback_call(Eldbus_Object *obj, Eldbus_Object_Event_Type type, const void *event_info);
|
||||
static void _eldbus_object_context_event_cb_del(Eldbus_Object_Context_Event *ce, Eldbus_Object_Context_Event_Cb *ctx);
|
||||
static void _on_connection_free(void *data, const void *dead_pointer);
|
||||
static void _on_signal_handler_free(void *data, const void *dead_pointer);
|
||||
|
||||
static void
|
||||
_eldbus_object_call_del(Eldbus_Object *obj)
|
||||
{
|
||||
Eldbus_Object_Context_Event *ce;
|
||||
|
||||
_eldbus_object_event_callback_call(obj, ELDBUS_OBJECT_EVENT_DEL, NULL);
|
||||
|
||||
/* clear all del callbacks so we don't call them twice at
|
||||
* _eldbus_object_clear()
|
||||
*/
|
||||
ce = obj->event_handlers + ELDBUS_OBJECT_EVENT_DEL;
|
||||
while (ce->list)
|
||||
{
|
||||
Eldbus_Object_Context_Event_Cb *ctx;
|
||||
|
||||
ctx = EINA_INLIST_CONTAINER_GET(ce->list,
|
||||
Eldbus_Object_Context_Event_Cb);
|
||||
_eldbus_object_context_event_cb_del(ce, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_eldbus_object_clear(Eldbus_Object *obj)
|
||||
{
|
||||
Eldbus_Signal_Handler *h;
|
||||
Eldbus_Pending *p;
|
||||
Eina_List *iter, *iter_next;
|
||||
Eina_Inlist *in_l;
|
||||
DBG("obj=%p, refcount=%d, name=%s, path=%s",
|
||||
obj, obj->refcount, obj->name, obj->path);
|
||||
|
||||
obj->refcount = 1;
|
||||
_eldbus_object_call_del(obj);
|
||||
eldbus_connection_name_object_del(obj->conn, obj);
|
||||
|
||||
/* NOTE: obj->proxies is deleted from obj->cbs_free. */
|
||||
|
||||
EINA_LIST_FOREACH_SAFE(obj->signal_handlers, iter, iter_next, h)
|
||||
{
|
||||
DBG("obj=%p delete owned signal handler %p %s",
|
||||
obj, h, eldbus_signal_handler_match_get(h));
|
||||
eldbus_signal_handler_del(h);
|
||||
}
|
||||
EINA_INLIST_FOREACH_SAFE(obj->pendings, in_l, p)
|
||||
{
|
||||
DBG("obj=%p delete owned pending call=%p dest=%s path=%s %s.%s()",
|
||||
obj, p,
|
||||
eldbus_pending_destination_get(p),
|
||||
eldbus_pending_path_get(p),
|
||||
eldbus_pending_interface_get(p),
|
||||
eldbus_pending_method_get(p));
|
||||
eldbus_pending_cancel(p);
|
||||
}
|
||||
|
||||
eldbus_cbs_free_dispatch(&(obj->cbs_free), obj);
|
||||
obj->refcount = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_eldbus_object_free(Eldbus_Object *obj)
|
||||
{
|
||||
unsigned int i;
|
||||
Eldbus_Signal_Handler *h;
|
||||
|
||||
if (obj->proxies)
|
||||
{
|
||||
Eina_Iterator *iterator = eina_hash_iterator_data_new(obj->proxies);
|
||||
Eldbus_Proxy *proxy;
|
||||
EINA_ITERATOR_FOREACH(iterator, proxy)
|
||||
ERR("obj=%p alive proxy=%p %s", obj, proxy,
|
||||
eldbus_proxy_interface_get(proxy));
|
||||
eina_iterator_free(iterator);
|
||||
eina_hash_free(obj->proxies);
|
||||
}
|
||||
|
||||
EINA_LIST_FREE(obj->signal_handlers, h)
|
||||
{
|
||||
if (h->dangling)
|
||||
eldbus_signal_handler_free_cb_del(h, _on_signal_handler_free, obj);
|
||||
else
|
||||
ERR("obj=%p alive handler=%p %s", obj, h,
|
||||
eldbus_signal_handler_match_get(h));
|
||||
}
|
||||
|
||||
if (obj->pendings)
|
||||
CRITICAL("Object %p released with live pending calls!", obj);
|
||||
|
||||
for (i = 0; i < ELDBUS_OBJECT_EVENT_LAST; i++)
|
||||
{
|
||||
Eldbus_Object_Context_Event *ce = obj->event_handlers + i;
|
||||
while (ce->list)
|
||||
{
|
||||
Eldbus_Object_Context_Event_Cb *ctx;
|
||||
|
||||
ctx = EINA_INLIST_CONTAINER_GET(ce->list,
|
||||
Eldbus_Object_Context_Event_Cb);
|
||||
_eldbus_object_context_event_cb_del(ce, ctx);
|
||||
}
|
||||
eina_list_free(ce->to_delete);
|
||||
}
|
||||
|
||||
if (obj->interfaces_added)
|
||||
eldbus_signal_handler_del(obj->interfaces_added);
|
||||
if (obj->interfaces_removed)
|
||||
eldbus_signal_handler_del(obj->interfaces_removed);
|
||||
if (obj->properties_changed)
|
||||
eldbus_signal_handler_del(obj->properties_changed);
|
||||
eina_stringshare_del(obj->name);
|
||||
eina_stringshare_del(obj->path);
|
||||
EINA_MAGIC_SET(obj, EINA_MAGIC_NONE);
|
||||
|
||||
free(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_connection_free(void *data, const void *dead_pointer EINA_UNUSED)
|
||||
{
|
||||
Eldbus_Object *obj = data;
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
_eldbus_object_clear(obj);
|
||||
_eldbus_object_free(obj);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Object *
|
||||
eldbus_object_get(Eldbus_Connection *conn, const char *bus, const char *path)
|
||||
{
|
||||
Eldbus_Object *obj;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(bus, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
|
||||
|
||||
obj = eldbus_connection_name_object_get(conn, bus, path);
|
||||
if (obj)
|
||||
return eldbus_object_ref(obj);
|
||||
|
||||
obj = calloc(1, sizeof(Eldbus_Object));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
|
||||
|
||||
obj->conn = conn;
|
||||
obj->refcount = 1;
|
||||
obj->path = eina_stringshare_add(path);
|
||||
obj->name = eina_stringshare_add(bus);
|
||||
obj->proxies = eina_hash_string_small_new(NULL);
|
||||
EINA_SAFETY_ON_NULL_GOTO(obj->proxies, cleanup);
|
||||
EINA_MAGIC_SET(obj, ELDBUS_OBJECT_MAGIC);
|
||||
|
||||
eldbus_connection_name_object_set(conn, obj);
|
||||
eldbus_connection_free_cb_add(obj->conn, _on_connection_free, obj);
|
||||
|
||||
obj->properties = eldbus_proxy_get(obj, ELDBUS_FDO_INTERFACE_PROPERTIES);
|
||||
|
||||
return obj;
|
||||
|
||||
cleanup:
|
||||
eina_stringshare_del(obj->path);
|
||||
eina_stringshare_del(obj->name);
|
||||
free(obj);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void _on_signal_handler_free(void *data, const void *dead_pointer);
|
||||
|
||||
static void
|
||||
_eldbus_object_unref(Eldbus_Object *obj)
|
||||
{
|
||||
obj->refcount--;
|
||||
if (obj->refcount > 0) return;
|
||||
|
||||
eldbus_connection_free_cb_del(obj->conn, _on_connection_free, obj);
|
||||
_eldbus_object_clear(obj);
|
||||
_eldbus_object_free(obj);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Object *
|
||||
eldbus_object_ref(Eldbus_Object *obj)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
DBG("obj=%p, pre-refcount=%d, name=%s, path=%s",
|
||||
obj, obj->refcount, obj->name, obj->path);
|
||||
obj->refcount++;
|
||||
return obj;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
eldbus_object_unref(Eldbus_Object *obj)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
DBG("obj=%p, pre-refcount=%d, name=%s, path=%s",
|
||||
obj, obj->refcount, obj->name, obj->path);
|
||||
_eldbus_object_unref(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
eldbus_object_free_cb_add(Eldbus_Object *obj, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
obj->cbs_free = eldbus_cbs_free_add(obj->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
eldbus_object_free_cb_del(Eldbus_Object *obj, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
obj->cbs_free = eldbus_cbs_free_del(obj->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_interfaces_added(void *data, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Object *obj = data;
|
||||
const char *obj_path;
|
||||
Eldbus_Message_Iter *array_ifaces, *entry_iface;
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "oa{sa{sv}}", &obj_path, &array_ifaces))
|
||||
return;
|
||||
|
||||
while (eldbus_message_iter_get_and_next(array_ifaces, 'e', &entry_iface))
|
||||
{
|
||||
const char *iface_name;
|
||||
Eldbus_Object_Event_Interface_Added event;
|
||||
|
||||
eldbus_message_iter_basic_get(entry_iface, &iface_name);
|
||||
event.proxy = eldbus_proxy_get(obj, iface_name);
|
||||
EINA_SAFETY_ON_NULL_RETURN(event.proxy);
|
||||
event.interface = iface_name;
|
||||
_eldbus_object_event_callback_call(obj, ELDBUS_OBJECT_EVENT_IFACE_ADDED,
|
||||
&event);
|
||||
eldbus_proxy_unref(event.proxy);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_interfaces_removed(void *data, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Object *obj = data;
|
||||
const char *obj_path, *iface;
|
||||
Eldbus_Message_Iter *array_ifaces;
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "oas", &obj_path, &array_ifaces))
|
||||
return;
|
||||
|
||||
while (eldbus_message_iter_get_and_next(array_ifaces, 's', &iface))
|
||||
{
|
||||
Eldbus_Object_Event_Interface_Removed event;
|
||||
event.interface = iface;
|
||||
_eldbus_object_event_callback_call(obj, ELDBUS_OBJECT_EVENT_IFACE_REMOVED,
|
||||
&event);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_property_changed_iter(void *data, const void *key, Eldbus_Message_Iter *var)
|
||||
{
|
||||
Eldbus_Proxy *proxy = data;
|
||||
const char *skey = key;
|
||||
Eina_Value *st_value, stack_value;
|
||||
Eldbus_Object_Event_Property_Changed event;
|
||||
|
||||
st_value = _message_iter_struct_to_eina_value(var);
|
||||
eina_value_struct_value_get(st_value, "arg0", &stack_value);
|
||||
|
||||
event.interface = eldbus_proxy_interface_get(proxy);
|
||||
event.proxy = proxy;
|
||||
event.name = skey;
|
||||
event.value = &stack_value;
|
||||
_eldbus_object_event_callback_call(eldbus_proxy_object_get(proxy),
|
||||
ELDBUS_OBJECT_EVENT_PROPERTY_CHANGED,
|
||||
&event);
|
||||
eina_value_free(st_value);
|
||||
eina_value_flush(&stack_value);
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_properties_changed(void *data, const Eldbus_Message *msg)
|
||||
{
|
||||
Eldbus_Object *obj = data;
|
||||
Eldbus_Proxy *proxy;
|
||||
Eldbus_Message_Iter *array, *invalidate;
|
||||
const char *iface;
|
||||
const char *invalidate_prop;
|
||||
|
||||
if (!eldbus_message_arguments_get(msg, "sa{sv}as", &iface, &array, &invalidate))
|
||||
{
|
||||
ERR("Error getting data from properties changed signal.");
|
||||
return;
|
||||
}
|
||||
|
||||
proxy = eldbus_proxy_get(obj, iface);
|
||||
EINA_SAFETY_ON_NULL_RETURN(proxy);
|
||||
|
||||
if (obj->event_handlers[ELDBUS_OBJECT_EVENT_PROPERTY_CHANGED].list)
|
||||
eldbus_message_iter_dict_iterate(array, "sv", _property_changed_iter,
|
||||
proxy);
|
||||
|
||||
if (!obj->event_handlers[ELDBUS_OBJECT_EVENT_PROPERTY_REMOVED].list)
|
||||
goto end;
|
||||
|
||||
while (eldbus_message_iter_get_and_next(invalidate, 's', &invalidate_prop))
|
||||
{
|
||||
Eldbus_Object_Event_Property_Removed event;
|
||||
event.interface = iface;
|
||||
event.name = invalidate_prop;
|
||||
event.proxy = proxy;
|
||||
_eldbus_object_event_callback_call(obj,
|
||||
ELDBUS_OBJECT_EVENT_PROPERTY_REMOVED,
|
||||
&event);
|
||||
}
|
||||
end:
|
||||
eldbus_proxy_unref(proxy);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
eldbus_object_event_callback_add(Eldbus_Object *obj, Eldbus_Object_Event_Type type, Eldbus_Object_Event_Cb cb, const void *cb_data)
|
||||
{
|
||||
Eldbus_Object_Context_Event *ce;
|
||||
Eldbus_Object_Context_Event_Cb *ctx;
|
||||
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= ELDBUS_OBJECT_EVENT_LAST);
|
||||
|
||||
ce = obj->event_handlers + type;
|
||||
|
||||
ctx = calloc(1, sizeof(Eldbus_Object_Context_Event_Cb));
|
||||
EINA_SAFETY_ON_NULL_RETURN(ctx);
|
||||
|
||||
ctx->cb = cb;
|
||||
ctx->cb_data = cb_data;
|
||||
|
||||
ce->list = eina_inlist_append(ce->list, EINA_INLIST_GET(ctx));
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ELDBUS_OBJECT_EVENT_IFACE_ADDED:
|
||||
{
|
||||
if (obj->interfaces_added)
|
||||
break;
|
||||
obj->interfaces_added =
|
||||
_eldbus_signal_handler_add(obj->conn, obj->name, NULL,
|
||||
ELDBUS_FDO_INTERFACE_OBJECT_MANAGER,
|
||||
"InterfacesAdded",
|
||||
_cb_interfaces_added, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj->interfaces_added);
|
||||
eldbus_signal_handler_match_extra_set(obj->interfaces_added, "arg0",
|
||||
obj->path, NULL);
|
||||
break;
|
||||
}
|
||||
case ELDBUS_OBJECT_EVENT_IFACE_REMOVED:
|
||||
{
|
||||
if (obj->interfaces_removed)
|
||||
break;
|
||||
obj->interfaces_removed =
|
||||
_eldbus_signal_handler_add(obj->conn, obj->name, NULL,
|
||||
ELDBUS_FDO_INTERFACE_OBJECT_MANAGER,
|
||||
"InterfacesRemoved",
|
||||
_cb_interfaces_removed, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj->interfaces_added);
|
||||
eldbus_signal_handler_match_extra_set(obj->interfaces_removed,
|
||||
"arg0", obj->path, NULL);
|
||||
break;
|
||||
}
|
||||
case ELDBUS_OBJECT_EVENT_PROPERTY_CHANGED:
|
||||
case ELDBUS_OBJECT_EVENT_PROPERTY_REMOVED:
|
||||
{
|
||||
if (obj->properties_changed)
|
||||
break;
|
||||
obj->properties_changed =
|
||||
eldbus_object_signal_handler_add(obj,
|
||||
ELDBUS_FDO_INTERFACE_PROPERTIES,
|
||||
"PropertiesChanged",
|
||||
_cb_properties_changed, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj->properties_changed);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_eldbus_object_context_event_cb_del(Eldbus_Object_Context_Event *ce, Eldbus_Object_Context_Event_Cb *ctx)
|
||||
{
|
||||
ce->list = eina_inlist_remove(ce->list, EINA_INLIST_GET(ctx));
|
||||
free(ctx);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
eldbus_object_event_callback_del(Eldbus_Object *obj, Eldbus_Object_Event_Type type, Eldbus_Object_Event_Cb cb, const void *cb_data)
|
||||
{
|
||||
Eldbus_Object_Context_Event *ce;
|
||||
Eldbus_Object_Context_Event_Cb *iter, *found = NULL;
|
||||
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= ELDBUS_OBJECT_EVENT_LAST);
|
||||
|
||||
ce = obj->event_handlers + type;
|
||||
|
||||
EINA_INLIST_FOREACH(ce->list, iter)
|
||||
{
|
||||
if (cb != iter->cb) continue;
|
||||
if ((cb_data) && (cb_data != iter->cb_data)) continue;
|
||||
|
||||
found = iter;
|
||||
break;
|
||||
}
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(found);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(found->deleted);
|
||||
|
||||
if (ce->walking)
|
||||
{
|
||||
found->deleted = EINA_TRUE;
|
||||
ce->to_delete = eina_list_append(ce->to_delete, found);
|
||||
return;
|
||||
}
|
||||
|
||||
_eldbus_object_context_event_cb_del(ce, found);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ELDBUS_OBJECT_EVENT_IFACE_ADDED:
|
||||
{
|
||||
if (obj->event_handlers[ELDBUS_OBJECT_EVENT_IFACE_ADDED].list)
|
||||
break;
|
||||
eldbus_signal_handler_del(obj->interfaces_added);
|
||||
obj->interfaces_added = NULL;
|
||||
break;
|
||||
}
|
||||
case ELDBUS_OBJECT_EVENT_IFACE_REMOVED:
|
||||
{
|
||||
if (obj->event_handlers[ELDBUS_OBJECT_EVENT_IFACE_REMOVED].list)
|
||||
break;
|
||||
eldbus_signal_handler_del(obj->interfaces_removed);
|
||||
obj->interfaces_removed = NULL;
|
||||
break;
|
||||
}
|
||||
case ELDBUS_OBJECT_EVENT_PROPERTY_CHANGED:
|
||||
case ELDBUS_OBJECT_EVENT_PROPERTY_REMOVED:
|
||||
{
|
||||
if (obj->event_handlers[ELDBUS_OBJECT_EVENT_PROPERTY_CHANGED].list ||
|
||||
obj->event_handlers[ELDBUS_OBJECT_EVENT_PROPERTY_REMOVED].list)
|
||||
break;
|
||||
eldbus_signal_handler_del(obj->properties_changed);
|
||||
obj->properties_changed = NULL;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_eldbus_object_event_callback_call(Eldbus_Object *obj, Eldbus_Object_Event_Type type, const void *event_info)
|
||||
{
|
||||
Eldbus_Object_Context_Event *ce;
|
||||
Eldbus_Object_Context_Event_Cb *iter;
|
||||
|
||||
ce = obj->event_handlers + type;
|
||||
|
||||
ce->walking++;
|
||||
EINA_INLIST_FOREACH(ce->list, iter)
|
||||
{
|
||||
if (iter->deleted) continue;
|
||||
iter->cb((void *)iter->cb_data, obj, (void *)event_info);
|
||||
}
|
||||
ce->walking--;
|
||||
if (ce->walking > 0) return;
|
||||
|
||||
EINA_LIST_FREE(ce->to_delete, iter)
|
||||
_eldbus_object_context_event_cb_del(ce, iter);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Connection *
|
||||
eldbus_object_connection_get(const Eldbus_Object *obj)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
return obj->conn;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
eldbus_object_bus_name_get(const Eldbus_Object *obj)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
return obj->name;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
eldbus_object_path_get(const Eldbus_Object *obj)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
return obj->path;
|
||||
}
|
||||
|
||||
static void
|
||||
_on_pending_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
Eldbus_Object *obj = data;
|
||||
Eldbus_Pending *pending = (Eldbus_Pending*) dead_pointer;
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
obj->pendings = eina_inlist_remove(obj->pendings, EINA_INLIST_GET(pending));
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_object_send(Eldbus_Object *obj, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
{
|
||||
Eldbus_Pending *pending;
|
||||
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
|
||||
|
||||
pending = _eldbus_connection_send(obj->conn, msg, cb, cb_data, timeout);
|
||||
if (!cb) return NULL;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pending, NULL);
|
||||
|
||||
eldbus_pending_free_cb_add(pending, _on_pending_free, obj);
|
||||
obj->pendings = eina_inlist_append(obj->pendings, EINA_INLIST_GET(pending));
|
||||
|
||||
return pending;
|
||||
}
|
||||
|
||||
static void
|
||||
_on_signal_handler_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
Eldbus_Object *obj = data;
|
||||
ELDBUS_OBJECT_CHECK(obj);
|
||||
obj->signal_handlers = eina_list_remove(obj->signal_handlers, dead_pointer);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Signal_Handler *
|
||||
eldbus_object_signal_handler_add(Eldbus_Object *obj, const char *interface, const char *member, Eldbus_Signal_Cb cb, const void *cb_data)
|
||||
{
|
||||
Eldbus_Signal_Handler *handler;
|
||||
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(cb, NULL);
|
||||
|
||||
handler = _eldbus_signal_handler_add(obj->conn, obj->name, obj->path,
|
||||
interface, member, cb, cb_data);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(handler, NULL);
|
||||
|
||||
eldbus_signal_handler_free_cb_add(handler, _on_signal_handler_free, obj);
|
||||
obj->signal_handlers = eina_list_append(obj->signal_handlers, handler);
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
EAPI Eldbus_Message *
|
||||
eldbus_object_method_call_new(Eldbus_Object *obj, const char *interface, const char *member)
|
||||
{
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(interface, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(member, NULL);
|
||||
|
||||
return eldbus_message_method_call_new(obj->name, obj->path, interface, member);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
eldbus_object_proxy_add(Eldbus_Object *obj, Eldbus_Proxy *proxy)
|
||||
{
|
||||
return eina_hash_add(obj->proxies, eldbus_proxy_interface_get(proxy), proxy);
|
||||
}
|
||||
|
||||
Eldbus_Proxy *
|
||||
eldbus_object_proxy_get(Eldbus_Object *obj, const char *interface)
|
||||
{
|
||||
return eina_hash_find(obj->proxies, interface);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
eldbus_object_proxy_del(Eldbus_Object *obj, Eldbus_Proxy *proxy, const char *interface)
|
||||
{
|
||||
return eina_hash_del(obj->proxies, interface, proxy);
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_object_peer_ping(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data)
|
||||
{
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Pending *p;
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
msg = eldbus_object_method_call_new(obj, ELDBUS_FDO_INTEFACE_PEER, "Ping");
|
||||
p = eldbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_object_peer_machine_id_get(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data)
|
||||
{
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Pending *p;
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
msg = eldbus_object_method_call_new(obj, ELDBUS_FDO_INTEFACE_PEER,
|
||||
"GetMachineId");
|
||||
p = eldbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
||||
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_object_introspect(Eldbus_Object *obj, Eldbus_Message_Cb cb, const void *data)
|
||||
{
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Pending *p;
|
||||
ELDBUS_OBJECT_CHECK_RETVAL(obj, NULL);
|
||||
msg = eldbus_object_method_call_new(obj, ELDBUS_FDO_INTERFACE_INTROSPECTABLE,
|
||||
"Introspect");
|
||||
p = eldbus_object_send(obj, msg, cb, data, -1);
|
||||
return p;
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
#ifndef ELDBUS_OBJECT_H
|
||||
#define ELDBUS_OBJECT_H 1
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Object_Mapper Object Mapper
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get an object of the given bus and path.
|
||||
*
|
||||
* @param conn connection where object belongs
|
||||
* @param bus name of bus or unique-id of who listens for calls of this object
|
||||
* @param path object path of this object
|
||||
*/
|
||||
EAPI Eldbus_Object *eldbus_object_get(Eldbus_Connection *conn, const char *bus, const char *path) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Increase object reference.
|
||||
*/
|
||||
EAPI Eldbus_Object *eldbus_object_ref(Eldbus_Object *obj) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease object reference.
|
||||
* If reference == 0 object will be freed and all its children.
|
||||
*/
|
||||
EAPI void eldbus_object_unref(Eldbus_Object *obj) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when object will be freed.
|
||||
*
|
||||
* @param obj object that you want to monitor
|
||||
* @param cb callback that will be executed
|
||||
* @param data passed to callback
|
||||
*/
|
||||
EAPI void eldbus_object_free_cb_add(Eldbus_Object *obj, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_object_free_cb_add().
|
||||
*/
|
||||
EAPI void eldbus_object_free_cb_del(Eldbus_Object *obj, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ELDBUS_OBJECT_EVENT_IFACE_ADDED = 0, /**< a parent path must have a ObjectManager interface */
|
||||
ELDBUS_OBJECT_EVENT_IFACE_REMOVED, /**< a parent path must have a ObjectManager interface */
|
||||
ELDBUS_OBJECT_EVENT_PROPERTY_CHANGED,
|
||||
ELDBUS_OBJECT_EVENT_PROPERTY_REMOVED,
|
||||
ELDBUS_OBJECT_EVENT_DEL,
|
||||
ELDBUS_OBJECT_EVENT_LAST /**< sentinel, not a real event type */
|
||||
} Eldbus_Object_Event_Type;
|
||||
|
||||
typedef struct _Eldbus_Object_Event_Interface_Added
|
||||
{
|
||||
const char *interface;
|
||||
Eldbus_Proxy *proxy;
|
||||
} Eldbus_Object_Event_Interface_Added;
|
||||
|
||||
typedef struct _Eldbus_Object_Event_Interface_Removed
|
||||
{
|
||||
const char *interface;
|
||||
} Eldbus_Object_Event_Interface_Removed;
|
||||
|
||||
typedef struct _Eldbus_Object_Event_Property_Changed
|
||||
{
|
||||
const char *interface;
|
||||
Eldbus_Proxy *proxy;
|
||||
const char *name;
|
||||
const Eina_Value *value;
|
||||
} Eldbus_Object_Event_Property_Changed;
|
||||
|
||||
typedef struct _Eldbus_Object_Event_Property_Removed
|
||||
{
|
||||
const char *interface;
|
||||
Eldbus_Proxy *proxy;
|
||||
const char *name;
|
||||
} Eldbus_Object_Event_Property_Removed;
|
||||
|
||||
typedef void (*Eldbus_Object_Event_Cb)(void *data, Eldbus_Object *obj, void *event_info);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when an event of the specified
|
||||
* type occurs.
|
||||
*/
|
||||
EAPI void eldbus_object_event_callback_add(Eldbus_Object *obj, Eldbus_Object_Event_Type type, Eldbus_Object_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_object_event_callback_add().
|
||||
*/
|
||||
EAPI void eldbus_object_event_callback_del(Eldbus_Object *obj, Eldbus_Object_Event_Type type, Eldbus_Object_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
EAPI Eldbus_Connection *eldbus_object_connection_get(const Eldbus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_object_bus_name_get(const Eldbus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_object_path_get(const Eldbus_Object *obj) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Send a message.
|
||||
*
|
||||
* @param obj the msg will be sent in connection to this object
|
||||
* @param msg message that will be sent
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* to be executed when a response arrives
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* ELDBUS_TIMEOUT_INFINITE for no timeout
|
||||
*/
|
||||
EAPI Eldbus_Pending *eldbus_object_send(Eldbus_Object *obj, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Add a signal handler.
|
||||
*
|
||||
* @param obj where the signal is emitted
|
||||
* @param interface of the signal
|
||||
* @param member name of the signal
|
||||
* @param cb callback that will be called when this signal is received
|
||||
* @param cb_data data that will be passed to callback
|
||||
*/
|
||||
EAPI Eldbus_Signal_Handler *eldbus_object_signal_handler_add(Eldbus_Object *obj, const char *interface, const char *member, Eldbus_Signal_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 4);
|
||||
|
||||
EAPI Eldbus_Message *eldbus_object_method_call_new(Eldbus_Object *obj, const char *interface, const char *member) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,63 +1,63 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
#include <dbus/dbus.h>
|
||||
|
||||
/* TODO: mempool of EDBus_Pending */
|
||||
#define EDBUS_PENDING_CHECK(pending) \
|
||||
/* TODO: mempool of Eldbus_Pending */
|
||||
#define ELDBUS_PENDING_CHECK(pending) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN(pending); \
|
||||
if (!EINA_MAGIC_CHECK(pending, EDBUS_PENDING_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(pending, ELDBUS_PENDING_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(pending, EDBUS_PENDING_MAGIC); \
|
||||
EINA_MAGIC_FAIL(pending, ELDBUS_PENDING_MAGIC); \
|
||||
return; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_PENDING_CHECK_RETVAL(pending, retval) \
|
||||
#define ELDBUS_PENDING_CHECK_RETVAL(pending, retval) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pending, retval); \
|
||||
if (!EINA_MAGIC_CHECK(pending, EDBUS_PENDING_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(pending, ELDBUS_PENDING_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(pending, EDBUS_PENDING_MAGIC); \
|
||||
EINA_MAGIC_FAIL(pending, ELDBUS_PENDING_MAGIC); \
|
||||
return retval; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
static void edbus_pending_dispatch(EDBus_Pending *pending, EDBus_Message *msg);
|
||||
static void eldbus_pending_dispatch(Eldbus_Pending *pending, Eldbus_Message *msg);
|
||||
|
||||
Eina_Bool
|
||||
edbus_pending_init(void)
|
||||
eldbus_pending_init(void)
|
||||
{
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
edbus_pending_shutdown(void)
|
||||
eldbus_pending_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
cb_pending(DBusPendingCall *dbus_pending, void *user_data)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Pending *pending = user_data;
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Pending *pending = user_data;
|
||||
|
||||
if (!dbus_pending_call_get_completed(dbus_pending))
|
||||
{
|
||||
INF("timeout to pending %p", pending);
|
||||
dbus_pending_call_cancel(dbus_pending);
|
||||
msg = edbus_message_error_new(pending->msg_sent,
|
||||
msg = eldbus_message_error_new(pending->msg_sent,
|
||||
"org.enlightenment.DBus.Timeout",
|
||||
"This call was not completed.");
|
||||
edbus_pending_dispatch(pending, msg);
|
||||
eldbus_pending_dispatch(pending, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
msg = edbus_message_new(EINA_FALSE);
|
||||
msg = eldbus_message_new(EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN(msg);
|
||||
msg->dbus_msg = dbus_pending_call_steal_reply(dbus_pending);
|
||||
if (!msg->dbus_msg)
|
||||
|
@ -71,58 +71,58 @@ cb_pending(DBusPendingCall *dbus_pending, void *user_data)
|
|||
}
|
||||
|
||||
dbus_message_iter_init(msg->dbus_msg, &msg->iterator->dbus_iterator);
|
||||
edbus_pending_dispatch(pending, msg);
|
||||
eldbus_pending_dispatch(pending, msg);
|
||||
|
||||
return;
|
||||
|
||||
cleanup:
|
||||
edbus_message_unref(msg);
|
||||
eldbus_message_unref(msg);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_pending_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
EDBus_Connection *conn = data;
|
||||
edbus_connection_pending_del(conn, (void *)dead_pointer);
|
||||
Eldbus_Connection *conn = data;
|
||||
eldbus_connection_pending_del(conn, (void *)dead_pointer);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_connection_send(EDBus_Connection *conn, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_connection_send(Eldbus_Connection *conn, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
{
|
||||
EDBus_Pending *pending;
|
||||
Eldbus_Pending *pending;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(conn, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
|
||||
|
||||
pending = _edbus_connection_send(conn, msg, cb, cb_data, timeout);
|
||||
pending = _eldbus_connection_send(conn, msg, cb, cb_data, timeout);
|
||||
if (!cb) return NULL;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pending, NULL);
|
||||
|
||||
edbus_connection_pending_add(conn, pending);
|
||||
edbus_pending_free_cb_add(pending, _on_pending_free, conn);
|
||||
eldbus_connection_pending_add(conn, pending);
|
||||
eldbus_pending_free_cb_add(pending, _on_pending_free, conn);
|
||||
return pending;
|
||||
}
|
||||
|
||||
/*
|
||||
* On success @param msg is unref'd or its ref is stolen by the returned
|
||||
* EDBus_Pending.
|
||||
* Eldbus_Pending.
|
||||
*/
|
||||
EDBus_Pending *
|
||||
_edbus_connection_send(EDBus_Connection *conn, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
Eldbus_Pending *
|
||||
_eldbus_connection_send(Eldbus_Connection *conn, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
{
|
||||
EDBus_Pending *pending;
|
||||
EDBus_Message *error_msg;
|
||||
Eldbus_Pending *pending;
|
||||
Eldbus_Message *error_msg;
|
||||
DBG("conn=%p, msg=%p, cb=%p, cb_data=%p, timeout=%f",
|
||||
conn, msg, cb, cb_data, timeout);
|
||||
|
||||
if (!cb)
|
||||
{
|
||||
dbus_connection_send(conn->dbus_conn, msg->dbus_msg, NULL);
|
||||
edbus_message_unref(msg);
|
||||
eldbus_message_unref(msg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pending = calloc(1, sizeof(EDBus_Pending));
|
||||
pending = calloc(1, sizeof(Eldbus_Pending));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pending, NULL);
|
||||
|
||||
pending->cb = cb;
|
||||
|
@ -136,65 +136,65 @@ _edbus_connection_send(EDBus_Connection *conn, EDBus_Message *msg, EDBus_Message
|
|||
/* Steal the reference */
|
||||
pending->msg_sent = msg;
|
||||
|
||||
EINA_MAGIC_SET(pending, EDBUS_PENDING_MAGIC);
|
||||
EINA_MAGIC_SET(pending, ELDBUS_PENDING_MAGIC);
|
||||
|
||||
if (!dbus_connection_send_with_reply(conn->dbus_conn,
|
||||
msg->dbus_msg,
|
||||
&pending->dbus_pending, timeout))
|
||||
{
|
||||
error_msg = edbus_message_error_new(msg, "org.enlightenment.DBus.NoConnection",
|
||||
"EDBus_Connection was closed.");
|
||||
edbus_pending_dispatch(pending, error_msg);
|
||||
error_msg = eldbus_message_error_new(msg, "org.enlightenment.DBus.NoConnection",
|
||||
"Eldbus_Connection was closed.");
|
||||
eldbus_pending_dispatch(pending, error_msg);
|
||||
return NULL;
|
||||
}
|
||||
if (dbus_pending_call_set_notify(pending->dbus_pending, cb_pending, pending, NULL))
|
||||
return pending;
|
||||
|
||||
dbus_pending_call_cancel(pending->dbus_pending);
|
||||
error_msg = edbus_message_error_new(pending->msg_sent,
|
||||
error_msg = eldbus_message_error_new(pending->msg_sent,
|
||||
"org.enlightenment.DBus.Error",
|
||||
"Error when try set callback to message.");
|
||||
edbus_pending_dispatch(pending, error_msg);
|
||||
eldbus_pending_dispatch(pending, error_msg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_pending_data_set(EDBus_Pending *pending, const char *key, const void *data)
|
||||
eldbus_pending_data_set(Eldbus_Pending *pending, const char *key, const void *data)
|
||||
{
|
||||
EDBUS_PENDING_CHECK(pending);
|
||||
ELDBUS_PENDING_CHECK(pending);
|
||||
EINA_SAFETY_ON_NULL_RETURN(key);
|
||||
EINA_SAFETY_ON_NULL_RETURN(data);
|
||||
edbus_data_set(&(pending->data), key, data);
|
||||
eldbus_data_set(&(pending->data), key, data);
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
edbus_pending_data_get(const EDBus_Pending *pending, const char *key)
|
||||
eldbus_pending_data_get(const Eldbus_Pending *pending, const char *key)
|
||||
{
|
||||
EDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
ELDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
|
||||
return edbus_data_get(&(((EDBus_Pending *)pending)->data), key);
|
||||
return eldbus_data_get(&(((Eldbus_Pending *)pending)->data), key);
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
edbus_pending_data_del(EDBus_Pending *pending, const char *key)
|
||||
eldbus_pending_data_del(Eldbus_Pending *pending, const char *key)
|
||||
{
|
||||
EDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
ELDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
|
||||
return edbus_data_del(&(((EDBus_Pending *)pending)->data), key);
|
||||
return eldbus_data_del(&(((Eldbus_Pending *)pending)->data), key);
|
||||
}
|
||||
|
||||
static void
|
||||
edbus_pending_dispatch(EDBus_Pending *pending, EDBus_Message *msg)
|
||||
eldbus_pending_dispatch(Eldbus_Pending *pending, Eldbus_Message *msg)
|
||||
{
|
||||
DBG("pending=%p msg=%p", pending, msg);
|
||||
if (pending->cb)
|
||||
pending->cb((void *)pending->cb_data, msg, pending);
|
||||
|
||||
edbus_cbs_free_dispatch(&(pending->cbs_free), pending);
|
||||
edbus_data_del_all(&(pending->data));
|
||||
eldbus_cbs_free_dispatch(&(pending->cbs_free), pending);
|
||||
eldbus_data_del_all(&(pending->data));
|
||||
|
||||
if (msg) edbus_message_unref(msg);
|
||||
edbus_message_unref(pending->msg_sent);
|
||||
if (msg) eldbus_message_unref(msg);
|
||||
eldbus_message_unref(pending->msg_sent);
|
||||
dbus_pending_call_unref(pending->dbus_pending);
|
||||
|
||||
pending->cb = NULL;
|
||||
|
@ -208,61 +208,61 @@ edbus_pending_dispatch(EDBus_Pending *pending, EDBus_Message *msg)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
edbus_pending_cancel(EDBus_Pending *pending)
|
||||
eldbus_pending_cancel(Eldbus_Pending *pending)
|
||||
{
|
||||
EDBus_Message *error_message;
|
||||
EDBUS_PENDING_CHECK(pending);
|
||||
Eldbus_Message *error_message;
|
||||
ELDBUS_PENDING_CHECK(pending);
|
||||
EINA_SAFETY_ON_NULL_RETURN(pending->dbus_pending);
|
||||
|
||||
DBG("pending=%p", pending);
|
||||
dbus_pending_call_cancel(pending->dbus_pending);
|
||||
|
||||
error_message = edbus_message_error_new(pending->msg_sent,
|
||||
EDBUS_ERROR_PENDING_CANCELED,
|
||||
error_message = eldbus_message_error_new(pending->msg_sent,
|
||||
ELDBUS_ERROR_PENDING_CANCELED,
|
||||
"Canceled by user.");
|
||||
edbus_pending_dispatch(pending, error_message);
|
||||
eldbus_pending_dispatch(pending, error_message);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_pending_free_cb_add(EDBus_Pending *pending, EDBus_Free_Cb cb, const void *data)
|
||||
eldbus_pending_free_cb_add(Eldbus_Pending *pending, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_PENDING_CHECK(pending);
|
||||
ELDBUS_PENDING_CHECK(pending);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
pending->cbs_free = edbus_cbs_free_add(pending->cbs_free, cb, data);
|
||||
pending->cbs_free = eldbus_cbs_free_add(pending->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_pending_free_cb_del(EDBus_Pending *pending, EDBus_Free_Cb cb, const void *data)
|
||||
eldbus_pending_free_cb_del(Eldbus_Pending *pending, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_PENDING_CHECK(pending);
|
||||
ELDBUS_PENDING_CHECK(pending);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
pending->cbs_free = edbus_cbs_free_del(pending->cbs_free, cb, data);
|
||||
pending->cbs_free = eldbus_cbs_free_del(pending->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_pending_destination_get(const EDBus_Pending *pending)
|
||||
eldbus_pending_destination_get(const Eldbus_Pending *pending)
|
||||
{
|
||||
EDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
ELDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
return pending->dest;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_pending_path_get(const EDBus_Pending *pending)
|
||||
eldbus_pending_path_get(const Eldbus_Pending *pending)
|
||||
{
|
||||
EDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
ELDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
return pending->path;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_pending_interface_get(const EDBus_Pending *pending)
|
||||
eldbus_pending_interface_get(const Eldbus_Pending *pending)
|
||||
{
|
||||
EDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
ELDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
return pending->interface;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_pending_method_get(const EDBus_Pending *pending)
|
||||
eldbus_pending_method_get(const Eldbus_Pending *pending)
|
||||
{
|
||||
EDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
ELDBUS_PENDING_CHECK_RETVAL(pending, NULL);
|
||||
return pending->method;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
#ifndef ELDBUS_PENDING_H
|
||||
#define ELDBUS_PENDING_H 1
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Pending Pending
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
EAPI void eldbus_pending_data_set(Eldbus_Pending *pending, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI void *eldbus_pending_data_get(const Eldbus_Pending *pending, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void *eldbus_pending_data_del(Eldbus_Pending *pending, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void eldbus_pending_cancel(Eldbus_Pending *pending) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI const char *eldbus_pending_destination_get(const Eldbus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_pending_path_get(const Eldbus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_pending_interface_get(const Eldbus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_pending_method_get(const Eldbus_Pending *pending) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when pending will be freed.
|
||||
*/
|
||||
EAPI void eldbus_pending_free_cb_add(Eldbus_Pending *pending, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_pending_free_cb_add().
|
||||
*/
|
||||
EAPI void eldbus_pending_free_cb_del(Eldbus_Pending *pending, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -0,0 +1,87 @@
|
|||
#ifndef ELDBUS_PRIVATE_H
|
||||
#define ELDBUS_PRIVATE_H
|
||||
|
||||
#include <dbus/dbus.h>
|
||||
#include <Eina.h>
|
||||
#include "eina_safety_checks.h"
|
||||
#include <Ecore.h>
|
||||
#include "Eldbus.h"
|
||||
#include "eldbus_private_types.h"
|
||||
|
||||
extern int _eldbus_log_dom;
|
||||
#define DBG(...) EINA_LOG_DOM_DBG(_eldbus_log_dom, __VA_ARGS__)
|
||||
#define INF(...) EINA_LOG_DOM_INFO(_eldbus_log_dom, __VA_ARGS__)
|
||||
#define WRN(...) EINA_LOG_DOM_WARN(_eldbus_log_dom, __VA_ARGS__)
|
||||
#define ERR(...) EINA_LOG_DOM_ERR(_eldbus_log_dom, __VA_ARGS__)
|
||||
#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eldbus_log_dom, __VA_ARGS__)
|
||||
|
||||
#define ELDBUS_CONNECTION_MAGIC (0xdb050001)
|
||||
#define ELDBUS_MESSAGE_MAGIC (0xdb050002)
|
||||
#define ELDBUS_SIGNAL_HANDLER_MAGIC (0xdb050003)
|
||||
#define ELDBUS_PENDING_MAGIC (0xdb050004)
|
||||
#define ELDBUS_OBJECT_MAGIC (0xdb050005)
|
||||
#define ELDBUS_PROXY_MAGIC (0xdb050006)
|
||||
#define ELDBUS_MESSAGE_ITERATOR_MAGIC (0xdb050007)
|
||||
#define ELDBUS_SERVICE_INTERFACE_MAGIC (0xdb050008)
|
||||
|
||||
void eldbus_cbs_free_dispatch(Eina_Inlist **p_lst, const void *dead_pointer);
|
||||
Eina_Inlist *eldbus_cbs_free_add(Eina_Inlist *lst, Eldbus_Free_Cb cb, const void *data);
|
||||
Eina_Inlist *eldbus_cbs_free_del(Eina_Inlist *lst, Eldbus_Free_Cb cb, const void *data);
|
||||
|
||||
void eldbus_data_set(Eina_Inlist **p_lst, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
void *eldbus_data_get(Eina_Inlist **p_lst, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
void *eldbus_data_del(Eina_Inlist **p_lst, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
void eldbus_data_del_all(Eina_Inlist **p_list) EINA_ARG_NONNULL(1);
|
||||
|
||||
Eina_Bool eldbus_message_init(void);
|
||||
void eldbus_message_shutdown(void);
|
||||
Eldbus_Message *eldbus_message_new(Eina_Bool writable);
|
||||
|
||||
Eina_Bool eldbus_signal_handler_init(void);
|
||||
void eldbus_signal_handler_shutdown(void);
|
||||
|
||||
Eina_Bool eldbus_pending_init(void);
|
||||
void eldbus_pending_shutdown(void);
|
||||
|
||||
Eina_Bool eldbus_object_init(void);
|
||||
void eldbus_object_shutdown(void);
|
||||
|
||||
Eina_Bool eldbus_proxy_init(void);
|
||||
void eldbus_proxy_shutdown(void);
|
||||
|
||||
Eina_Bool eldbus_service_init(void);
|
||||
void eldbus_service_shutdown(void);
|
||||
|
||||
void eldbus_connection_event_callback_call(Eldbus_Connection *conn, Eldbus_Connection_Event_Type type, const void *event_info) EINA_ARG_NONNULL(1);
|
||||
|
||||
Eina_Bool eldbus_object_proxy_del(Eldbus_Object *obj, Eldbus_Proxy *proxy, const char *interface) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
void eldbus_connection_signal_handler_add(Eldbus_Connection *conn, Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1, 2);
|
||||
void eldbus_connection_pending_add(Eldbus_Connection *conn, Eldbus_Pending *pending) EINA_ARG_NONNULL(1, 2);
|
||||
void eldbus_connection_signal_handler_del(Eldbus_Connection *conn, Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1, 2);
|
||||
void eldbus_connection_signal_handler_del(Eldbus_Connection *conn, Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1, 2);
|
||||
void eldbus_connection_pending_del(Eldbus_Connection *conn, Eldbus_Pending *pending) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
Eldbus_Object *eldbus_connection_name_object_get(Eldbus_Connection *conn, const char *name, const char *path);
|
||||
void eldbus_connection_name_object_set(Eldbus_Connection *conn, Eldbus_Object *obj);
|
||||
|
||||
Eina_Bool eldbus_object_proxy_add(Eldbus_Object *obj, Eldbus_Proxy *proxy) EINA_ARG_NONNULL(1, 2);
|
||||
Eldbus_Proxy *eldbus_object_proxy_get(Eldbus_Object *obj, const char *interface);
|
||||
|
||||
void eldbus_connection_name_object_del(Eldbus_Connection *conn, const Eldbus_Object *obj);
|
||||
Eldbus_Connection_Name *eldbus_connection_name_get(Eldbus_Connection *conn, const char *name);
|
||||
void eldbus_connection_name_owner_monitor(Eldbus_Connection *conn, Eldbus_Connection_Name *cn, Eina_Bool enable);
|
||||
|
||||
Eldbus_Pending *_eldbus_connection_send(Eldbus_Connection *conn, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout);
|
||||
|
||||
Eldbus_Message_Iter *eldbus_message_iter_sub_iter_get(Eldbus_Message_Iter *iter);
|
||||
Eina_Value *_message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter);
|
||||
Eina_Bool _message_iter_from_eina_value_struct(const char *signature, Eldbus_Message_Iter *iter, const Eina_Value *value);
|
||||
|
||||
void eldbus_connection_name_ref(Eldbus_Connection_Name *cn);
|
||||
void eldbus_connection_name_unref(Eldbus_Connection *conn, Eldbus_Connection_Name *cn);
|
||||
Eldbus_Signal_Handler *_eldbus_signal_handler_add(Eldbus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, Eldbus_Signal_Cb cb, const void *cb_data);
|
||||
|
||||
Eldbus_Message *eldbus_message_signal_new(const char *path, const char *interface, const char *name) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
#endif
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef EDBUS_PRIVATE_TYPES_H
|
||||
#define EDBUS_PRIVATE_TYPES_H 1
|
||||
#ifndef ELDBUS_PRIVATE_TYPES_H
|
||||
#define ELDBUS_PRIVATE_TYPES_H 1
|
||||
|
||||
typedef struct _EDBus_Connection_Name
|
||||
typedef struct _Eldbus_Connection_Name
|
||||
{
|
||||
const char *name;
|
||||
const char *unique_id;
|
||||
|
@ -9,45 +9,45 @@ typedef struct _EDBus_Connection_Name
|
|||
int refcount;
|
||||
struct
|
||||
{
|
||||
Eina_Inlist *list; //EDBus_Connection_Context_NOC_Cb
|
||||
Eina_Inlist *list; //Eldbus_Connection_Context_NOC_Cb
|
||||
int walking;
|
||||
Eina_List *to_delete;
|
||||
} event_handlers;
|
||||
EDBus_Signal_Handler *name_owner_changed;
|
||||
EDBus_Pending *name_owner_get;
|
||||
} EDBus_Connection_Name;
|
||||
Eldbus_Signal_Handler *name_owner_changed;
|
||||
Eldbus_Pending *name_owner_get;
|
||||
} Eldbus_Connection_Name;
|
||||
|
||||
typedef struct _EDBus_Object_Context_Event_Cb
|
||||
typedef struct _Eldbus_Object_Context_Event_Cb
|
||||
{
|
||||
EINA_INLIST;
|
||||
EDBus_Object_Event_Cb cb;
|
||||
Eldbus_Object_Event_Cb cb;
|
||||
const void *cb_data;
|
||||
Eina_Bool deleted : 1;
|
||||
} EDBus_Object_Context_Event_Cb;
|
||||
} Eldbus_Object_Context_Event_Cb;
|
||||
|
||||
typedef struct _EDBus_Object_Context_Event
|
||||
typedef struct _Eldbus_Object_Context_Event
|
||||
{
|
||||
Eina_Inlist *list;
|
||||
int walking;
|
||||
Eina_List *to_delete;
|
||||
} EDBus_Object_Context_Event;
|
||||
} Eldbus_Object_Context_Event;
|
||||
|
||||
|
||||
typedef struct _EDBus_Connection_Context_Event
|
||||
typedef struct _Eldbus_Connection_Context_Event
|
||||
{
|
||||
Eina_Inlist *list;
|
||||
int walking;
|
||||
Eina_List *to_delete;
|
||||
} EDBus_Connection_Context_Event;
|
||||
} Eldbus_Connection_Context_Event;
|
||||
|
||||
struct _EDBus_Connection
|
||||
struct _Eldbus_Connection
|
||||
{
|
||||
EINA_MAGIC;
|
||||
EINA_INLIST;
|
||||
int refcount;
|
||||
EDBus_Connection_Type type;
|
||||
Eldbus_Connection_Type type;
|
||||
DBusConnection *dbus_conn;
|
||||
Eina_Hash *names; //EDBus_Connection_Name
|
||||
Eina_Hash *names; //Eldbus_Connection_Name
|
||||
Eina_Inlist *data;
|
||||
Eina_Inlist *cbs_free;
|
||||
Eina_Inlist *signal_handlers;
|
||||
|
@ -55,31 +55,31 @@ struct _EDBus_Connection
|
|||
Eina_Inlist *fd_handlers;
|
||||
Eina_Inlist *timeouts;
|
||||
Ecore_Idler *idler;
|
||||
EDBus_Connection_Context_Event event_handlers[EDBUS_CONNECTION_EVENT_LAST];
|
||||
Eldbus_Connection_Context_Event event_handlers[ELDBUS_CONNECTION_EVENT_LAST];
|
||||
Eina_Inlist *root_objs;//service_object
|
||||
EDBus_Proxy *fdo_proxy;
|
||||
Eldbus_Proxy *fdo_proxy;
|
||||
};
|
||||
|
||||
struct _EDBus_Object
|
||||
struct _Eldbus_Object
|
||||
{
|
||||
EINA_MAGIC;
|
||||
EINA_INLIST;
|
||||
int refcount;
|
||||
EDBus_Connection *conn;
|
||||
Eldbus_Connection *conn;
|
||||
const char *name;
|
||||
const char *path;
|
||||
Eina_Hash *proxies;
|
||||
Eina_Inlist *pendings;
|
||||
Eina_List *signal_handlers;
|
||||
Eina_Inlist *cbs_free;
|
||||
EDBus_Object_Context_Event event_handlers[EDBUS_OBJECT_EVENT_LAST];
|
||||
EDBus_Signal_Handler *interfaces_added;
|
||||
EDBus_Signal_Handler *interfaces_removed;
|
||||
EDBus_Signal_Handler *properties_changed;
|
||||
EDBus_Proxy *properties;
|
||||
Eldbus_Object_Context_Event event_handlers[ELDBUS_OBJECT_EVENT_LAST];
|
||||
Eldbus_Signal_Handler *interfaces_added;
|
||||
Eldbus_Signal_Handler *interfaces_removed;
|
||||
Eldbus_Signal_Handler *properties_changed;
|
||||
Eldbus_Proxy *properties;
|
||||
};
|
||||
|
||||
struct _EDBus_Signal_Handler
|
||||
struct _Eldbus_Signal_Handler
|
||||
{
|
||||
EINA_MAGIC;
|
||||
EINA_INLIST;
|
||||
|
@ -91,32 +91,32 @@ struct _EDBus_Signal_Handler
|
|||
Eina_Strbuf *match;
|
||||
Eina_Inlist *args;
|
||||
Eina_Inlist_Sorted_State *state_args;
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Signal_Cb cb;
|
||||
EDBus_Connection_Name *bus;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Signal_Cb cb;
|
||||
Eldbus_Connection_Name *bus;
|
||||
const void *cb_data;
|
||||
Eina_Inlist *cbs_free;
|
||||
Eina_Bool dangling;
|
||||
};
|
||||
|
||||
struct _EDBus_Pending
|
||||
struct _Eldbus_Pending
|
||||
{
|
||||
EINA_MAGIC;
|
||||
EINA_INLIST;
|
||||
EDBus_Message_Cb cb;
|
||||
Eldbus_Message_Cb cb;
|
||||
const void *cb_data;
|
||||
DBusPendingCall *dbus_pending;
|
||||
EDBus_Connection *conn;
|
||||
Eldbus_Connection *conn;
|
||||
const char *dest;
|
||||
const char *path;
|
||||
const char *interface;
|
||||
const char *method;
|
||||
Eina_Inlist *data;
|
||||
Eina_Inlist *cbs_free;
|
||||
EDBus_Message *msg_sent;
|
||||
Eldbus_Message *msg_sent;
|
||||
};
|
||||
|
||||
struct _EDBus_Message_Iter
|
||||
struct _Eldbus_Message_Iter
|
||||
{
|
||||
EINA_MAGIC;
|
||||
EINA_INLIST;
|
||||
|
@ -125,45 +125,45 @@ struct _EDBus_Message_Iter
|
|||
Eina_Bool writable;
|
||||
};
|
||||
|
||||
struct _EDBus_Message
|
||||
struct _Eldbus_Message
|
||||
{
|
||||
EINA_MAGIC;
|
||||
int refcount;
|
||||
DBusMessage *dbus_msg;
|
||||
EDBus_Message_Iter *iterator;
|
||||
Eldbus_Message_Iter *iterator;
|
||||
};
|
||||
|
||||
typedef struct _EDBus_Service_Object EDBus_Service_Object;
|
||||
struct _EDBus_Service_Object
|
||||
typedef struct _Eldbus_Service_Object Eldbus_Service_Object;
|
||||
struct _Eldbus_Service_Object
|
||||
{
|
||||
EINA_INLIST;
|
||||
EDBus_Connection *conn;
|
||||
Eldbus_Connection *conn;
|
||||
const char *path;
|
||||
Eina_Hash *interfaces;
|
||||
Eina_Strbuf *introspection_data;
|
||||
Eina_Bool introspection_dirty;
|
||||
Eina_Inlist *data;
|
||||
EDBus_Service_Object *parent;
|
||||
Eldbus_Service_Object *parent;
|
||||
Eina_Inlist *children;
|
||||
|
||||
//ObjectManager data
|
||||
EDBus_Service_Interface *objmanager;
|
||||
Eldbus_Service_Interface *objmanager;
|
||||
Eina_List *iface_added;
|
||||
Eina_List *iface_removed;
|
||||
Ecore_Idler *idler_iface_changed;
|
||||
};
|
||||
|
||||
struct _EDBus_Service_Interface
|
||||
struct _Eldbus_Service_Interface
|
||||
{
|
||||
EINA_MAGIC;
|
||||
const char *name;
|
||||
Eina_Hash *methods;
|
||||
const EDBus_Signal *signals;
|
||||
const Eldbus_Signal *signals;
|
||||
Eina_Array *sign_of_signals;
|
||||
EDBus_Service_Object *obj;
|
||||
Eldbus_Service_Object *obj;
|
||||
Eina_Hash *properties;
|
||||
EDBus_Property_Set_Cb set_func;
|
||||
EDBus_Property_Get_Cb get_func;
|
||||
Eldbus_Property_Set_Cb set_func;
|
||||
Eldbus_Property_Get_Cb get_func;
|
||||
Ecore_Idler *idler_propschanged;
|
||||
Eina_Array *props_changed;
|
||||
Eina_Array *prop_invalidated;
|
|
@ -2,77 +2,77 @@
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
|
||||
/* TODO: mempool of EDBus_Proxy, Edbus_Proxy_Context_Event_Cb and
|
||||
* EDBus_Proxy_Context_Event
|
||||
/* TODO: mempool of Eldbus_Proxy, Eldbus_Proxy_Context_Event_Cb and
|
||||
* Eldbus_Proxy_Context_Event
|
||||
*/
|
||||
|
||||
typedef struct _EDBus_Proxy_Context_Event_Cb
|
||||
typedef struct _Eldbus_Proxy_Context_Event_Cb
|
||||
{
|
||||
EINA_INLIST;
|
||||
EDBus_Proxy_Event_Cb cb;
|
||||
Eldbus_Proxy_Event_Cb cb;
|
||||
const void *cb_data;
|
||||
Eina_Bool deleted : 1;
|
||||
} EDBus_Proxy_Context_Event_Cb;
|
||||
} Eldbus_Proxy_Context_Event_Cb;
|
||||
|
||||
typedef struct _EDBus_Proxy_Context_Event
|
||||
typedef struct _Eldbus_Proxy_Context_Event
|
||||
{
|
||||
Eina_Inlist *list;
|
||||
int walking;
|
||||
Eina_List *to_delete;
|
||||
} EDBus_Proxy_Context_Event;
|
||||
} Eldbus_Proxy_Context_Event;
|
||||
|
||||
struct _EDBus_Proxy
|
||||
struct _Eldbus_Proxy
|
||||
{
|
||||
EINA_MAGIC;
|
||||
int refcount;
|
||||
EDBus_Object *obj;
|
||||
Eldbus_Object *obj;
|
||||
const char *interface;
|
||||
Eina_Inlist *pendings;
|
||||
Eina_List *handlers;
|
||||
Eina_Inlist *cbs_free;
|
||||
Eina_Inlist *data;
|
||||
EDBus_Proxy_Context_Event event_handlers[EDBUS_PROXY_EVENT_LAST];
|
||||
Eldbus_Proxy_Context_Event event_handlers[ELDBUS_PROXY_EVENT_LAST];
|
||||
Eina_Hash *props;
|
||||
EDBus_Signal_Handler *properties_changed;
|
||||
Eldbus_Signal_Handler *properties_changed;
|
||||
Eina_Bool monitor_enabled:1;
|
||||
};
|
||||
|
||||
#define EDBUS_PROXY_CHECK(proxy) \
|
||||
#define ELDBUS_PROXY_CHECK(proxy) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN(proxy); \
|
||||
if (!EINA_MAGIC_CHECK(proxy, EDBUS_PROXY_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(proxy, ELDBUS_PROXY_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(proxy, EDBUS_PROXY_MAGIC); \
|
||||
EINA_MAGIC_FAIL(proxy, ELDBUS_PROXY_MAGIC); \
|
||||
return; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN(proxy->refcount <= 0); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_PROXY_CHECK_RETVAL(proxy, retval) \
|
||||
#define ELDBUS_PROXY_CHECK_RETVAL(proxy, retval) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(proxy, retval); \
|
||||
if (!EINA_MAGIC_CHECK(proxy, EDBUS_PROXY_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(proxy, ELDBUS_PROXY_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(proxy, EDBUS_PROXY_MAGIC); \
|
||||
EINA_MAGIC_FAIL(proxy, ELDBUS_PROXY_MAGIC); \
|
||||
return retval; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(proxy->refcount <= 0, retval); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_PROXY_CHECK_GOTO(proxy, label) \
|
||||
#define ELDBUS_PROXY_CHECK_GOTO(proxy, label) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_GOTO(proxy, label); \
|
||||
if (!EINA_MAGIC_CHECK(proxy, EDBUS_PROXY_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(proxy, ELDBUS_PROXY_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(proxy, EDBUS_PROXY_MAGIC); \
|
||||
EINA_MAGIC_FAIL(proxy, ELDBUS_PROXY_MAGIC); \
|
||||
goto label; \
|
||||
} \
|
||||
EINA_SAFETY_ON_TRUE_GOTO(proxy->refcount <= 0, label); \
|
||||
|
@ -80,105 +80,105 @@ struct _EDBus_Proxy
|
|||
while (0)
|
||||
|
||||
Eina_Bool
|
||||
edbus_proxy_init(void)
|
||||
eldbus_proxy_init(void)
|
||||
{
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
edbus_proxy_shutdown(void)
|
||||
eldbus_proxy_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void _edbus_proxy_event_callback_call(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, const void *event_info);
|
||||
static void _edbus_proxy_context_event_cb_del(EDBus_Proxy_Context_Event *ce, EDBus_Proxy_Context_Event_Cb *ctx);
|
||||
static void _eldbus_proxy_event_callback_call(Eldbus_Proxy *proxy, Eldbus_Proxy_Event_Type type, const void *event_info);
|
||||
static void _eldbus_proxy_context_event_cb_del(Eldbus_Proxy_Context_Event *ce, Eldbus_Proxy_Context_Event_Cb *ctx);
|
||||
static void _on_signal_handler_free(void *data, const void *dead_pointer);
|
||||
|
||||
static void
|
||||
_edbus_proxy_call_del(EDBus_Proxy *proxy)
|
||||
_eldbus_proxy_call_del(Eldbus_Proxy *proxy)
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce;
|
||||
Eldbus_Proxy_Context_Event *ce;
|
||||
|
||||
_edbus_proxy_event_callback_call(proxy, EDBUS_PROXY_EVENT_DEL, NULL);
|
||||
_eldbus_proxy_event_callback_call(proxy, ELDBUS_PROXY_EVENT_DEL, NULL);
|
||||
|
||||
/* clear all del callbacks so we don't call them twice at
|
||||
* _edbus_proxy_clear()
|
||||
* _eldbus_proxy_clear()
|
||||
*/
|
||||
ce = proxy->event_handlers + EDBUS_PROXY_EVENT_DEL;
|
||||
ce = proxy->event_handlers + ELDBUS_PROXY_EVENT_DEL;
|
||||
while (ce->list)
|
||||
{
|
||||
EDBus_Proxy_Context_Event_Cb *ctx;
|
||||
Eldbus_Proxy_Context_Event_Cb *ctx;
|
||||
|
||||
ctx = EINA_INLIST_CONTAINER_GET(ce->list,
|
||||
EDBus_Proxy_Context_Event_Cb);
|
||||
_edbus_proxy_context_event_cb_del(ce, ctx);
|
||||
Eldbus_Proxy_Context_Event_Cb);
|
||||
_eldbus_proxy_context_event_cb_del(ce, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_proxy_clear(EDBus_Proxy *proxy)
|
||||
_eldbus_proxy_clear(Eldbus_Proxy *proxy)
|
||||
{
|
||||
EDBus_Signal_Handler *h;
|
||||
EDBus_Pending *p;
|
||||
Eldbus_Signal_Handler *h;
|
||||
Eldbus_Pending *p;
|
||||
Eina_List *iter, *iter_next;
|
||||
Eina_Inlist *in_l;
|
||||
DBG("proxy=%p, refcount=%d, interface=%s, obj=%p",
|
||||
proxy, proxy->refcount, proxy->interface, proxy->obj);
|
||||
proxy->refcount = 1;
|
||||
edbus_object_proxy_del(proxy->obj, proxy, proxy->interface);
|
||||
_edbus_proxy_call_del(proxy);
|
||||
eldbus_object_proxy_del(proxy->obj, proxy, proxy->interface);
|
||||
_eldbus_proxy_call_del(proxy);
|
||||
|
||||
EINA_LIST_FOREACH_SAFE(proxy->handlers, iter, iter_next, h)
|
||||
{
|
||||
DBG("proxy=%p delete owned signal handler %p %s",
|
||||
proxy, h, edbus_signal_handler_match_get(h));
|
||||
edbus_signal_handler_del(h);
|
||||
proxy, h, eldbus_signal_handler_match_get(h));
|
||||
eldbus_signal_handler_del(h);
|
||||
}
|
||||
|
||||
EINA_INLIST_FOREACH_SAFE(proxy->pendings, in_l, p)
|
||||
{
|
||||
DBG("proxy=%p delete owned pending call=%p dest=%s path=%s %s.%s()",
|
||||
proxy, p,
|
||||
edbus_pending_destination_get(p),
|
||||
edbus_pending_path_get(p),
|
||||
edbus_pending_interface_get(p),
|
||||
edbus_pending_method_get(p));
|
||||
edbus_pending_cancel(p);
|
||||
eldbus_pending_destination_get(p),
|
||||
eldbus_pending_path_get(p),
|
||||
eldbus_pending_interface_get(p),
|
||||
eldbus_pending_method_get(p));
|
||||
eldbus_pending_cancel(p);
|
||||
}
|
||||
|
||||
edbus_cbs_free_dispatch(&(proxy->cbs_free), proxy);
|
||||
eldbus_cbs_free_dispatch(&(proxy->cbs_free), proxy);
|
||||
if (proxy->props)
|
||||
eina_hash_free(proxy->props);
|
||||
proxy->refcount = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_proxy_free(EDBus_Proxy *proxy)
|
||||
_eldbus_proxy_free(Eldbus_Proxy *proxy)
|
||||
{
|
||||
unsigned int i;
|
||||
EDBus_Signal_Handler *h;
|
||||
Eldbus_Signal_Handler *h;
|
||||
|
||||
EINA_LIST_FREE(proxy->handlers, h)
|
||||
{
|
||||
if (h->dangling)
|
||||
edbus_signal_handler_free_cb_del(h, _on_signal_handler_free, proxy);
|
||||
eldbus_signal_handler_free_cb_del(h, _on_signal_handler_free, proxy);
|
||||
else
|
||||
ERR("proxy=%p alive handler=%p %s", proxy, h,
|
||||
edbus_signal_handler_match_get(h));
|
||||
eldbus_signal_handler_match_get(h));
|
||||
}
|
||||
|
||||
if (proxy->pendings)
|
||||
CRITICAL("Proxy %p released with live pending calls!", proxy);
|
||||
|
||||
for (i = 0; i < EDBUS_PROXY_EVENT_LAST; i++)
|
||||
for (i = 0; i < ELDBUS_PROXY_EVENT_LAST; i++)
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce = proxy->event_handlers + i;
|
||||
Eldbus_Proxy_Context_Event *ce = proxy->event_handlers + i;
|
||||
while (ce->list)
|
||||
{
|
||||
EDBus_Proxy_Context_Event_Cb *ctx;
|
||||
Eldbus_Proxy_Context_Event_Cb *ctx;
|
||||
ctx = EINA_INLIST_CONTAINER_GET(ce->list,
|
||||
EDBus_Proxy_Context_Event_Cb);
|
||||
_edbus_proxy_context_event_cb_del(ce, ctx);
|
||||
Eldbus_Proxy_Context_Event_Cb);
|
||||
_eldbus_proxy_context_event_cb_del(ce, ctx);
|
||||
}
|
||||
eina_list_free(ce->to_delete);
|
||||
}
|
||||
|
@ -191,37 +191,37 @@ _edbus_proxy_free(EDBus_Proxy *proxy)
|
|||
static void
|
||||
_on_object_free(void *data, const void *dead_pointer EINA_UNUSED)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
Eldbus_Proxy *proxy = data;
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
DBG("proxy=%p, refcount=%d, interface=%s, obj=%p",
|
||||
proxy, proxy->refcount, proxy->interface, proxy->obj);
|
||||
edbus_data_del_all(&(proxy->data));
|
||||
_edbus_proxy_clear(proxy);
|
||||
_edbus_proxy_free(proxy);
|
||||
eldbus_data_del_all(&(proxy->data));
|
||||
_eldbus_proxy_clear(proxy);
|
||||
_eldbus_proxy_free(proxy);
|
||||
}
|
||||
|
||||
EAPI EDBus_Proxy *
|
||||
edbus_proxy_get(EDBus_Object *obj, const char *interface)
|
||||
EAPI Eldbus_Proxy *
|
||||
eldbus_proxy_get(Eldbus_Object *obj, const char *interface)
|
||||
{
|
||||
EDBus_Proxy *proxy;
|
||||
Eldbus_Proxy *proxy;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(interface, NULL);
|
||||
|
||||
proxy = edbus_object_proxy_get(obj, interface);
|
||||
proxy = eldbus_object_proxy_get(obj, interface);
|
||||
if (proxy)
|
||||
return edbus_proxy_ref(proxy);
|
||||
return eldbus_proxy_ref(proxy);
|
||||
|
||||
proxy = calloc(1, sizeof(EDBus_Proxy));
|
||||
proxy = calloc(1, sizeof(Eldbus_Proxy));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(proxy, NULL);
|
||||
|
||||
proxy->refcount = 1;
|
||||
proxy->obj = obj;
|
||||
proxy->interface = eina_stringshare_add(interface);
|
||||
EINA_MAGIC_SET(proxy, EDBUS_PROXY_MAGIC);
|
||||
if (!edbus_object_proxy_add(obj, proxy))
|
||||
EINA_MAGIC_SET(proxy, ELDBUS_PROXY_MAGIC);
|
||||
if (!eldbus_object_proxy_add(obj, proxy))
|
||||
goto cleanup;
|
||||
edbus_object_free_cb_add(obj, _on_object_free, proxy);
|
||||
eldbus_object_free_cb_add(obj, _on_object_free, proxy);
|
||||
|
||||
return proxy;
|
||||
|
||||
|
@ -234,21 +234,21 @@ cleanup:
|
|||
static void _on_signal_handler_free(void *data, const void *dead_pointer);
|
||||
|
||||
static void
|
||||
_edbus_proxy_unref(EDBus_Proxy *proxy)
|
||||
_eldbus_proxy_unref(Eldbus_Proxy *proxy)
|
||||
{
|
||||
proxy->refcount--;
|
||||
if (proxy->refcount > 0) return;
|
||||
|
||||
edbus_object_free_cb_del(proxy->obj, _on_object_free, proxy);
|
||||
edbus_data_del_all(&(proxy->data));
|
||||
_edbus_proxy_clear(proxy);
|
||||
_edbus_proxy_free(proxy);
|
||||
eldbus_object_free_cb_del(proxy->obj, _on_object_free, proxy);
|
||||
eldbus_data_del_all(&(proxy->data));
|
||||
_eldbus_proxy_clear(proxy);
|
||||
_eldbus_proxy_free(proxy);
|
||||
}
|
||||
|
||||
EAPI EDBus_Proxy *
|
||||
edbus_proxy_ref(EDBus_Proxy *proxy)
|
||||
EAPI Eldbus_Proxy *
|
||||
eldbus_proxy_ref(Eldbus_Proxy *proxy)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
DBG("proxy=%p, pre-refcount=%d, interface=%s, obj=%p",
|
||||
proxy, proxy->refcount, proxy->interface, proxy->obj);
|
||||
proxy->refcount++;
|
||||
|
@ -256,62 +256,62 @@ edbus_proxy_ref(EDBus_Proxy *proxy)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
edbus_proxy_unref(EDBus_Proxy *proxy)
|
||||
eldbus_proxy_unref(Eldbus_Proxy *proxy)
|
||||
{
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
DBG("proxy=%p, pre-refcount=%d, interface=%s, obj=%p",
|
||||
proxy, proxy->refcount, proxy->interface, proxy->obj);
|
||||
_edbus_proxy_unref(proxy);
|
||||
_eldbus_proxy_unref(proxy);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_proxy_free_cb_add(EDBus_Proxy *proxy, EDBus_Free_Cb cb, const void *data)
|
||||
eldbus_proxy_free_cb_add(Eldbus_Proxy *proxy, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
proxy->cbs_free = edbus_cbs_free_add(proxy->cbs_free, cb, data);
|
||||
proxy->cbs_free = eldbus_cbs_free_add(proxy->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_proxy_free_cb_del(EDBus_Proxy *proxy, EDBus_Free_Cb cb, const void *data)
|
||||
eldbus_proxy_free_cb_del(Eldbus_Proxy *proxy, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
proxy->cbs_free = edbus_cbs_free_del(proxy->cbs_free, cb, data);
|
||||
proxy->cbs_free = eldbus_cbs_free_del(proxy->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_proxy_data_set(EDBus_Proxy *proxy, const char *key, const void *data)
|
||||
eldbus_proxy_data_set(Eldbus_Proxy *proxy, const char *key, const void *data)
|
||||
{
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
EINA_SAFETY_ON_NULL_RETURN(key);
|
||||
EINA_SAFETY_ON_NULL_RETURN(data);
|
||||
edbus_data_set(&(proxy->data), key, data);
|
||||
eldbus_data_set(&(proxy->data), key, data);
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
edbus_proxy_data_get(const EDBus_Proxy *proxy, const char *key)
|
||||
eldbus_proxy_data_get(const Eldbus_Proxy *proxy, const char *key)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
|
||||
return edbus_data_get(&(((EDBus_Proxy *)proxy)->data), key);
|
||||
return eldbus_data_get(&(((Eldbus_Proxy *)proxy)->data), key);
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
edbus_proxy_data_del(EDBus_Proxy *proxy, const char *key)
|
||||
eldbus_proxy_data_del(Eldbus_Proxy *proxy, const char *key)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
|
||||
return edbus_data_del(&(((EDBus_Proxy *)proxy)->data), key);
|
||||
return eldbus_data_del(&(((Eldbus_Proxy *)proxy)->data), key);
|
||||
}
|
||||
|
||||
static void
|
||||
_property_changed_iter(void *data, const void *key, EDBus_Message_Iter *var)
|
||||
_property_changed_iter(void *data, const void *key, Eldbus_Message_Iter *var)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
Eldbus_Proxy *proxy = data;
|
||||
const char *skey = key;
|
||||
Eina_Value *st_value, stack_value, *value;
|
||||
EDBus_Proxy_Event_Property_Changed event;
|
||||
Eldbus_Proxy_Event_Property_Changed event;
|
||||
|
||||
st_value = _message_iter_struct_to_eina_value(var);
|
||||
eina_value_struct_value_get(st_value, "arg0", &stack_value);
|
||||
|
@ -332,38 +332,38 @@ _property_changed_iter(void *data, const void *key, EDBus_Message_Iter *var)
|
|||
event.name = skey;
|
||||
event.value = value;
|
||||
event.proxy = proxy;
|
||||
_edbus_proxy_event_callback_call(proxy, EDBUS_PROXY_EVENT_PROPERTY_CHANGED,
|
||||
_eldbus_proxy_event_callback_call(proxy, ELDBUS_PROXY_EVENT_PROPERTY_CHANGED,
|
||||
&event);
|
||||
eina_value_free(st_value);
|
||||
eina_value_flush(&stack_value);
|
||||
}
|
||||
|
||||
static void
|
||||
_properties_changed(void *data, const EDBus_Message *msg)
|
||||
_properties_changed(void *data, const Eldbus_Message *msg)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
EDBus_Message_Iter *array, *invalidate;
|
||||
Eldbus_Proxy *proxy = data;
|
||||
Eldbus_Message_Iter *array, *invalidate;
|
||||
const char *iface;
|
||||
const char *invalidate_prop;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "sa{sv}as", &iface, &array, &invalidate))
|
||||
if (!eldbus_message_arguments_get(msg, "sa{sv}as", &iface, &array, &invalidate))
|
||||
{
|
||||
ERR("Error getting data from properties changed signal.");
|
||||
return;
|
||||
}
|
||||
if (proxy->props)
|
||||
edbus_message_iter_dict_iterate(array, "sv", _property_changed_iter,
|
||||
eldbus_message_iter_dict_iterate(array, "sv", _property_changed_iter,
|
||||
proxy);
|
||||
|
||||
while (edbus_message_iter_get_and_next(invalidate, 's', &invalidate_prop))
|
||||
while (eldbus_message_iter_get_and_next(invalidate, 's', &invalidate_prop))
|
||||
{
|
||||
EDBus_Proxy_Event_Property_Removed event;
|
||||
Eldbus_Proxy_Event_Property_Removed event;
|
||||
event.interface = proxy->interface;
|
||||
event.name = invalidate_prop;
|
||||
event.proxy = proxy;
|
||||
if (proxy->props)
|
||||
eina_hash_del(proxy->props, event.name, NULL);
|
||||
_edbus_proxy_event_callback_call(proxy, EDBUS_PROXY_EVENT_PROPERTY_REMOVED,
|
||||
_eldbus_proxy_event_callback_call(proxy, ELDBUS_PROXY_EVENT_PROPERTY_REMOVED,
|
||||
&event);
|
||||
}
|
||||
}
|
||||
|
@ -376,60 +376,60 @@ _props_cache_free(void *data)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
edbus_proxy_event_callback_add(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, EDBus_Proxy_Event_Cb cb, const void *cb_data)
|
||||
eldbus_proxy_event_callback_add(Eldbus_Proxy *proxy, Eldbus_Proxy_Event_Type type, Eldbus_Proxy_Event_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce;
|
||||
EDBus_Proxy_Context_Event_Cb *ctx;
|
||||
Eldbus_Proxy_Context_Event *ce;
|
||||
Eldbus_Proxy_Context_Event_Cb *ctx;
|
||||
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= EDBUS_PROXY_EVENT_LAST);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= ELDBUS_PROXY_EVENT_LAST);
|
||||
|
||||
ce = proxy->event_handlers + type;
|
||||
|
||||
ctx = calloc(1, sizeof(EDBus_Proxy_Context_Event_Cb));
|
||||
ctx = calloc(1, sizeof(Eldbus_Proxy_Context_Event_Cb));
|
||||
EINA_SAFETY_ON_NULL_RETURN(ctx);
|
||||
ctx->cb = cb;
|
||||
ctx->cb_data = cb_data;
|
||||
|
||||
ce->list = eina_inlist_append(ce->list, EINA_INLIST_GET(ctx));
|
||||
|
||||
if (type == EDBUS_PROXY_EVENT_PROPERTY_CHANGED)
|
||||
if (type == ELDBUS_PROXY_EVENT_PROPERTY_CHANGED)
|
||||
{
|
||||
if (proxy->properties_changed) return;
|
||||
if (!proxy->props)
|
||||
proxy->props = eina_hash_string_superfast_new(_props_cache_free);
|
||||
proxy->properties_changed =
|
||||
edbus_proxy_properties_changed_callback_add(proxy,
|
||||
eldbus_proxy_properties_changed_callback_add(proxy,
|
||||
_properties_changed,
|
||||
proxy);
|
||||
}
|
||||
else if (type == EDBUS_PROXY_EVENT_PROPERTY_REMOVED)
|
||||
else if (type == ELDBUS_PROXY_EVENT_PROPERTY_REMOVED)
|
||||
{
|
||||
if (proxy->properties_changed) return;
|
||||
proxy->properties_changed =
|
||||
edbus_proxy_properties_changed_callback_add(proxy,
|
||||
eldbus_proxy_properties_changed_callback_add(proxy,
|
||||
_properties_changed,
|
||||
proxy);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_proxy_context_event_cb_del(EDBus_Proxy_Context_Event *ce, EDBus_Proxy_Context_Event_Cb *ctx)
|
||||
_eldbus_proxy_context_event_cb_del(Eldbus_Proxy_Context_Event *ce, Eldbus_Proxy_Context_Event_Cb *ctx)
|
||||
{
|
||||
ce->list = eina_inlist_remove(ce->list, EINA_INLIST_GET(ctx));
|
||||
free(ctx);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_proxy_event_callback_del(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, EDBus_Proxy_Event_Cb cb, const void *cb_data)
|
||||
eldbus_proxy_event_callback_del(Eldbus_Proxy *proxy, Eldbus_Proxy_Event_Type type, Eldbus_Proxy_Event_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce;
|
||||
EDBus_Proxy_Context_Event_Cb *iter, *found = NULL;
|
||||
Eldbus_Proxy_Context_Event *ce;
|
||||
Eldbus_Proxy_Context_Event_Cb *iter, *found = NULL;
|
||||
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= EDBUS_PROXY_EVENT_LAST);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(type >= ELDBUS_PROXY_EVENT_LAST);
|
||||
|
||||
ce = proxy->event_handlers + type;
|
||||
|
||||
|
@ -452,13 +452,13 @@ edbus_proxy_event_callback_del(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type,
|
|||
return;
|
||||
}
|
||||
|
||||
_edbus_proxy_context_event_cb_del(ce, found);
|
||||
_eldbus_proxy_context_event_cb_del(ce, found);
|
||||
|
||||
if (type == EDBUS_PROXY_EVENT_PROPERTY_CHANGED)
|
||||
if (type == ELDBUS_PROXY_EVENT_PROPERTY_CHANGED)
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce_prop_remove;
|
||||
Eldbus_Proxy_Context_Event *ce_prop_remove;
|
||||
ce_prop_remove = proxy->event_handlers +
|
||||
EDBUS_PROXY_EVENT_PROPERTY_REMOVED;
|
||||
ELDBUS_PROXY_EVENT_PROPERTY_REMOVED;
|
||||
if (!ce->list && !proxy->monitor_enabled)
|
||||
{
|
||||
eina_hash_free(proxy->props);
|
||||
|
@ -467,29 +467,29 @@ edbus_proxy_event_callback_del(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type,
|
|||
|
||||
if (!ce_prop_remove->list && !ce->list && !proxy->monitor_enabled)
|
||||
{
|
||||
edbus_signal_handler_unref(proxy->properties_changed);
|
||||
eldbus_signal_handler_unref(proxy->properties_changed);
|
||||
proxy->properties_changed = NULL;
|
||||
}
|
||||
}
|
||||
else if (type == EDBUS_PROXY_EVENT_PROPERTY_REMOVED)
|
||||
else if (type == ELDBUS_PROXY_EVENT_PROPERTY_REMOVED)
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce_prop_changed;
|
||||
Eldbus_Proxy_Context_Event *ce_prop_changed;
|
||||
ce_prop_changed = proxy->event_handlers +
|
||||
EDBUS_PROXY_EVENT_PROPERTY_CHANGED;
|
||||
ELDBUS_PROXY_EVENT_PROPERTY_CHANGED;
|
||||
|
||||
if (!ce_prop_changed->list && !ce->list && !proxy->monitor_enabled)
|
||||
{
|
||||
edbus_signal_handler_unref(proxy->properties_changed);
|
||||
eldbus_signal_handler_unref(proxy->properties_changed);
|
||||
proxy->properties_changed = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_edbus_proxy_event_callback_call(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type, const void *event_info)
|
||||
_eldbus_proxy_event_callback_call(Eldbus_Proxy *proxy, Eldbus_Proxy_Event_Type type, const void *event_info)
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce;
|
||||
EDBus_Proxy_Context_Event_Cb *iter;
|
||||
Eldbus_Proxy_Context_Event *ce;
|
||||
Eldbus_Proxy_Context_Event_Cb *iter;
|
||||
|
||||
ce = proxy->event_handlers + type;
|
||||
|
||||
|
@ -503,211 +503,211 @@ _edbus_proxy_event_callback_call(EDBus_Proxy *proxy, EDBus_Proxy_Event_Type type
|
|||
if (ce->walking > 0) return;
|
||||
|
||||
EINA_LIST_FREE(ce->to_delete, iter)
|
||||
_edbus_proxy_context_event_cb_del(ce, iter);
|
||||
_eldbus_proxy_context_event_cb_del(ce, iter);
|
||||
}
|
||||
|
||||
EAPI EDBus_Object *
|
||||
edbus_proxy_object_get(const EDBus_Proxy *proxy)
|
||||
EAPI Eldbus_Object *
|
||||
eldbus_proxy_object_get(const Eldbus_Proxy *proxy)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
return proxy->obj;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_proxy_interface_get(const EDBus_Proxy *proxy)
|
||||
eldbus_proxy_interface_get(const Eldbus_Proxy *proxy)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
return proxy->interface;
|
||||
}
|
||||
|
||||
static void
|
||||
_on_pending_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
EDBus_Pending *pending = (EDBus_Pending *)dead_pointer;
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
Eldbus_Proxy *proxy = data;
|
||||
Eldbus_Pending *pending = (Eldbus_Pending *)dead_pointer;
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
proxy->pendings = eina_inlist_remove(proxy->pendings,
|
||||
EINA_INLIST_GET(pending));
|
||||
}
|
||||
|
||||
static EDBus_Pending *
|
||||
_edbus_proxy_send(EDBus_Proxy *proxy, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
static Eldbus_Pending *
|
||||
_eldbus_proxy_send(Eldbus_Proxy *proxy, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
{
|
||||
EDBus_Pending *pending;
|
||||
Eldbus_Pending *pending;
|
||||
|
||||
pending = _edbus_connection_send(proxy->obj->conn, msg, cb, cb_data, timeout);
|
||||
pending = _eldbus_connection_send(proxy->obj->conn, msg, cb, cb_data, timeout);
|
||||
if (!cb) return NULL;
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pending, NULL);
|
||||
|
||||
edbus_pending_free_cb_add(pending, _on_pending_free, proxy);
|
||||
eldbus_pending_free_cb_add(pending, _on_pending_free, proxy);
|
||||
proxy->pendings = eina_inlist_append(proxy->pendings,
|
||||
EINA_INLIST_GET(pending));
|
||||
|
||||
return pending;
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_proxy_send(EDBus_Proxy *proxy, EDBus_Message *msg, EDBus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_proxy_send(Eldbus_Proxy *proxy, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
|
||||
|
||||
return _edbus_proxy_send(proxy, msg, cb, cb_data, timeout);
|
||||
return _eldbus_proxy_send(proxy, msg, cb, cb_data, timeout);
|
||||
}
|
||||
|
||||
EAPI EDBus_Message *
|
||||
edbus_proxy_method_call_new(EDBus_Proxy *proxy, const char *member)
|
||||
EAPI Eldbus_Message *
|
||||
eldbus_proxy_method_call_new(Eldbus_Proxy *proxy, const char *member)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
Eldbus_Message *msg;
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
|
||||
msg = edbus_message_method_call_new(
|
||||
edbus_object_bus_name_get(proxy->obj),
|
||||
edbus_object_path_get(proxy->obj),
|
||||
msg = eldbus_message_method_call_new(
|
||||
eldbus_object_bus_name_get(proxy->obj),
|
||||
eldbus_object_path_get(proxy->obj),
|
||||
proxy->interface, member);
|
||||
return msg;
|
||||
}
|
||||
|
||||
static EDBus_Pending *
|
||||
_edbus_proxy_vcall(EDBus_Proxy *proxy, const char *member, EDBus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, va_list ap)
|
||||
static Eldbus_Pending *
|
||||
_eldbus_proxy_vcall(Eldbus_Proxy *proxy, const char *member, Eldbus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, va_list ap)
|
||||
{
|
||||
EDBus_Message *msg = edbus_proxy_method_call_new(proxy, member);
|
||||
Eldbus_Message *msg = eldbus_proxy_method_call_new(proxy, member);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
|
||||
|
||||
if (!edbus_message_arguments_vappend(msg, signature, ap))
|
||||
if (!eldbus_message_arguments_vappend(msg, signature, ap))
|
||||
{
|
||||
edbus_message_unref(msg);
|
||||
eldbus_message_unref(msg);
|
||||
ERR("Error setting arguments");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return _edbus_proxy_send(proxy, msg, cb, cb_data, timeout);
|
||||
return _eldbus_proxy_send(proxy, msg, cb, cb_data, timeout);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_proxy_call(EDBus_Proxy *proxy, const char *member, EDBus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, ...)
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_proxy_call(Eldbus_Proxy *proxy, const char *member, Eldbus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, ...)
|
||||
{
|
||||
EDBus_Pending *pending;
|
||||
Eldbus_Pending *pending;
|
||||
va_list ap;
|
||||
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(member, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, NULL);
|
||||
|
||||
va_start(ap, signature);
|
||||
pending = _edbus_proxy_vcall(proxy, member, cb, cb_data, timeout,
|
||||
pending = _eldbus_proxy_vcall(proxy, member, cb, cb_data, timeout,
|
||||
signature, ap);
|
||||
va_end(ap);
|
||||
|
||||
return pending;
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_proxy_vcall(EDBus_Proxy *proxy, const char *member, EDBus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, va_list ap)
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_proxy_vcall(Eldbus_Proxy *proxy, const char *member, Eldbus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, va_list ap)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(member, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, NULL);
|
||||
|
||||
return _edbus_proxy_vcall(proxy, member, cb, cb_data, timeout,
|
||||
return _eldbus_proxy_vcall(proxy, member, cb, cb_data, timeout,
|
||||
signature, ap);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_signal_handler_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
Eldbus_Proxy *proxy = data;
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
proxy->handlers = eina_list_remove(proxy->handlers, dead_pointer);
|
||||
}
|
||||
|
||||
EAPI EDBus_Signal_Handler *
|
||||
edbus_proxy_signal_handler_add(EDBus_Proxy *proxy, const char *member, EDBus_Signal_Cb cb, const void *cb_data)
|
||||
EAPI Eldbus_Signal_Handler *
|
||||
eldbus_proxy_signal_handler_add(Eldbus_Proxy *proxy, const char *member, Eldbus_Signal_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Signal_Handler *handler;
|
||||
Eldbus_Signal_Handler *handler;
|
||||
const char *name, *path;
|
||||
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(cb, NULL);
|
||||
|
||||
name = edbus_object_bus_name_get(proxy->obj);
|
||||
path = edbus_object_path_get(proxy->obj);
|
||||
name = eldbus_object_bus_name_get(proxy->obj);
|
||||
path = eldbus_object_path_get(proxy->obj);
|
||||
|
||||
handler = _edbus_signal_handler_add(proxy->obj->conn, name, path,
|
||||
handler = _eldbus_signal_handler_add(proxy->obj->conn, name, path,
|
||||
proxy->interface, member, cb, cb_data);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(handler, NULL);
|
||||
|
||||
edbus_signal_handler_free_cb_add(handler, _on_signal_handler_free, proxy);
|
||||
eldbus_signal_handler_free_cb_add(handler, _on_signal_handler_free, proxy);
|
||||
proxy->handlers = eina_list_append(proxy->handlers, handler);
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_proxy_property_get(EDBus_Proxy *proxy, const char *name, EDBus_Message_Cb cb, const void *data)
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_proxy_property_get(Eldbus_Proxy *proxy, const char *name, Eldbus_Message_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
return edbus_proxy_call(proxy->obj->properties, "Get", cb, data, -1,
|
||||
return eldbus_proxy_call(proxy->obj->properties, "Get", cb, data, -1,
|
||||
"ss", proxy->interface, name);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_proxy_property_set(EDBus_Proxy *proxy, const char *name, const char *sig, const void *value, EDBus_Message_Cb cb, const void *data)
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_proxy_property_set(Eldbus_Proxy *proxy, const char *name, const char *sig, const void *value, Eldbus_Message_Cb cb, const void *data)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Message_Iter *iter, *variant;
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Message_Iter *iter, *variant;
|
||||
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(sig, NULL);
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_signature_validate_single(sig, NULL), NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(value, NULL);
|
||||
|
||||
msg = edbus_proxy_method_call_new(proxy->obj->properties, "Set");
|
||||
iter = edbus_message_iter_get(msg);
|
||||
edbus_message_iter_basic_append(iter, 's', proxy->interface);
|
||||
edbus_message_iter_basic_append(iter, 's', name);
|
||||
variant = edbus_message_iter_container_new(iter, 'v', sig);
|
||||
msg = eldbus_proxy_method_call_new(proxy->obj->properties, "Set");
|
||||
iter = eldbus_message_iter_get(msg);
|
||||
eldbus_message_iter_basic_append(iter, 's', proxy->interface);
|
||||
eldbus_message_iter_basic_append(iter, 's', name);
|
||||
variant = eldbus_message_iter_container_new(iter, 'v', sig);
|
||||
if (dbus_type_is_basic(sig[0]))
|
||||
dbus_message_iter_append_basic(&variant->dbus_iterator, sig[0], &value);
|
||||
else
|
||||
{
|
||||
if (!_message_iter_from_eina_value_struct(sig, variant, value))
|
||||
{
|
||||
edbus_message_unref(msg);
|
||||
eldbus_message_unref(msg);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
edbus_message_iter_container_close(iter, variant);
|
||||
eldbus_message_iter_container_close(iter, variant);
|
||||
|
||||
return edbus_proxy_send(proxy->obj->properties, msg, cb, data, -1);
|
||||
return eldbus_proxy_send(proxy->obj->properties, msg, cb, data, -1);
|
||||
}
|
||||
|
||||
EAPI EDBus_Pending *
|
||||
edbus_proxy_property_get_all(EDBus_Proxy *proxy, EDBus_Message_Cb cb, const void *data)
|
||||
EAPI Eldbus_Pending *
|
||||
eldbus_proxy_property_get_all(Eldbus_Proxy *proxy, Eldbus_Message_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
return edbus_proxy_call(proxy->obj->properties, "GetAll", cb, data, -1,
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
return eldbus_proxy_call(proxy->obj->properties, "GetAll", cb, data, -1,
|
||||
"s", proxy->interface);
|
||||
}
|
||||
|
||||
EAPI EDBus_Signal_Handler *
|
||||
edbus_proxy_properties_changed_callback_add(EDBus_Proxy *proxy, EDBus_Signal_Cb cb, const void *data)
|
||||
EAPI Eldbus_Signal_Handler *
|
||||
eldbus_proxy_properties_changed_callback_add(Eldbus_Proxy *proxy, Eldbus_Signal_Cb cb, const void *data)
|
||||
{
|
||||
EDBus_Signal_Handler *sh;
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
sh = edbus_proxy_signal_handler_add(proxy->obj->properties,
|
||||
Eldbus_Signal_Handler *sh;
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
sh = eldbus_proxy_signal_handler_add(proxy->obj->properties,
|
||||
"PropertiesChanged", cb, data);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(sh, NULL);
|
||||
edbus_signal_handler_match_extra_set(sh, "arg0", proxy->interface, NULL);
|
||||
eldbus_signal_handler_match_extra_set(sh, "arg0", proxy->interface, NULL);
|
||||
return sh;
|
||||
}
|
||||
|
||||
static void
|
||||
_property_iter(void *data, const void *key, EDBus_Message_Iter *var)
|
||||
_property_iter(void *data, const void *key, Eldbus_Message_Iter *var)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
Eldbus_Proxy *proxy = data;
|
||||
const char *skey = key;
|
||||
Eina_Value *st_value, stack_value, *value;
|
||||
|
||||
|
@ -728,23 +728,23 @@ _property_iter(void *data, const void *key, EDBus_Message_Iter *var)
|
|||
}
|
||||
|
||||
static void
|
||||
_props_get_all(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_props_get_all(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
EDBus_Proxy *proxy = data;
|
||||
EDBus_Message_Iter *dict;
|
||||
Eldbus_Proxy *proxy = data;
|
||||
Eldbus_Message_Iter *dict;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "a{sv}", &dict))
|
||||
if (!eldbus_message_arguments_get(msg, "a{sv}", &dict))
|
||||
{
|
||||
ERR("Error getting data from properties getAll.");
|
||||
return;
|
||||
}
|
||||
edbus_message_iter_dict_iterate(dict, "sv", _property_iter, proxy);
|
||||
eldbus_message_iter_dict_iterate(dict, "sv", _property_iter, proxy);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_proxy_properties_monitor(EDBus_Proxy *proxy, Eina_Bool enable)
|
||||
eldbus_proxy_properties_monitor(Eldbus_Proxy *proxy, Eina_Bool enable)
|
||||
{
|
||||
EDBUS_PROXY_CHECK(proxy);
|
||||
ELDBUS_PROXY_CHECK(proxy);
|
||||
if (proxy->monitor_enabled == enable)
|
||||
return;
|
||||
|
||||
|
@ -753,20 +753,20 @@ edbus_proxy_properties_monitor(EDBus_Proxy *proxy, Eina_Bool enable)
|
|||
{
|
||||
if (!proxy->props)
|
||||
proxy->props = eina_hash_string_superfast_new(_props_cache_free);
|
||||
edbus_proxy_property_get_all(proxy, _props_get_all, proxy);
|
||||
eldbus_proxy_property_get_all(proxy, _props_get_all, proxy);
|
||||
|
||||
if (proxy->properties_changed)
|
||||
return;
|
||||
proxy->properties_changed =
|
||||
edbus_proxy_properties_changed_callback_add(proxy,
|
||||
eldbus_proxy_properties_changed_callback_add(proxy,
|
||||
_properties_changed,
|
||||
proxy);
|
||||
}
|
||||
else
|
||||
{
|
||||
EDBus_Proxy_Context_Event *ce_prop_changed, *ce_prop_removed;
|
||||
ce_prop_changed = proxy->event_handlers + EDBUS_PROXY_EVENT_PROPERTY_CHANGED;
|
||||
ce_prop_removed = proxy->event_handlers + EDBUS_PROXY_EVENT_PROPERTY_REMOVED;
|
||||
Eldbus_Proxy_Context_Event *ce_prop_changed, *ce_prop_removed;
|
||||
ce_prop_changed = proxy->event_handlers + ELDBUS_PROXY_EVENT_PROPERTY_CHANGED;
|
||||
ce_prop_removed = proxy->event_handlers + ELDBUS_PROXY_EVENT_PROPERTY_REMOVED;
|
||||
|
||||
if (!ce_prop_changed->list)
|
||||
{
|
||||
|
@ -775,25 +775,25 @@ edbus_proxy_properties_monitor(EDBus_Proxy *proxy, Eina_Bool enable)
|
|||
}
|
||||
if (!ce_prop_changed->list && !ce_prop_removed->list)
|
||||
{
|
||||
edbus_signal_handler_unref(proxy->properties_changed);
|
||||
eldbus_signal_handler_unref(proxy->properties_changed);
|
||||
proxy->properties_changed = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EAPI Eina_Value *
|
||||
edbus_proxy_property_local_get(EDBus_Proxy *proxy, const char *name)
|
||||
eldbus_proxy_property_local_get(Eldbus_Proxy *proxy, const char *name)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(proxy->props, NULL);
|
||||
return eina_hash_find(proxy->props, name);
|
||||
}
|
||||
|
||||
EAPI const Eina_Hash *
|
||||
edbus_proxy_property_local_get_all(EDBus_Proxy *proxy)
|
||||
eldbus_proxy_property_local_get_all(Eldbus_Proxy *proxy)
|
||||
{
|
||||
EDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
ELDBUS_PROXY_CHECK_RETVAL(proxy, NULL);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(proxy->props, NULL);
|
||||
return proxy->props;
|
||||
}
|
|
@ -0,0 +1,147 @@
|
|||
#ifndef ELDBUS_PROXY_H
|
||||
#define ELDBUS_PROXY_H 1
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Proxy Proxy
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get a proxy of the following interface name in a Eldbus_Object.
|
||||
*/
|
||||
EAPI Eldbus_Proxy *eldbus_proxy_get(Eldbus_Object *obj, const char *interface) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Increase proxy reference.
|
||||
*/
|
||||
EAPI Eldbus_Proxy *eldbus_proxy_ref(Eldbus_Proxy *proxy) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease proxy reference.
|
||||
* If reference == 0 proxy will be freed and all your children.
|
||||
*/
|
||||
EAPI void eldbus_proxy_unref(Eldbus_Proxy *proxy) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI Eldbus_Object *eldbus_proxy_object_get(const Eldbus_Proxy *proxy) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_proxy_interface_get(const Eldbus_Proxy *proxy) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
EAPI void eldbus_proxy_data_set(Eldbus_Proxy *proxy, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
EAPI void *eldbus_proxy_data_get(const Eldbus_Proxy *proxy, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
EAPI void *eldbus_proxy_data_del(Eldbus_Proxy *proxy, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when occurs a event of the
|
||||
* type passed.
|
||||
*/
|
||||
EAPI void eldbus_proxy_free_cb_add(Eldbus_Proxy *proxy, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_proxy_free_cb_add().
|
||||
*/
|
||||
EAPI void eldbus_proxy_free_cb_del(Eldbus_Proxy *proxy, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Constructs a new message to invoke a method on a remote interface.
|
||||
*/
|
||||
EAPI Eldbus_Message *eldbus_proxy_method_call_new(Eldbus_Proxy *proxy, const char *member) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Send a message.
|
||||
*
|
||||
* @param proxy the msg will be send in connection that proxy belongs
|
||||
* @param msg message that will be send
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* ELDBUS_TIMEOUT_INFINITE for no timeout
|
||||
*/
|
||||
EAPI Eldbus_Pending *eldbus_proxy_send(Eldbus_Proxy *proxy, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Call a method in proxy.
|
||||
* Send a method call to interface that proxy belong with data.
|
||||
*
|
||||
* @param proxy
|
||||
* @param member method name
|
||||
* @param cb if msg is a method call a callback should be passed
|
||||
* to be execute when response arrive
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* ELDBUS_TIMEOUT_INFINITE for no timeout
|
||||
* @param signature of data that will be send
|
||||
* @param ... data value
|
||||
*
|
||||
* @note This function only support basic type to complex types use
|
||||
* eldbus_message_iter_* functions.
|
||||
*/
|
||||
EAPI Eldbus_Pending *eldbus_proxy_call(Eldbus_Proxy *proxy, const char *member, Eldbus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, ...) EINA_ARG_NONNULL(1, 2, 6);
|
||||
|
||||
/**
|
||||
* @brief Call a method in proxy.
|
||||
* Send a method call to interface that proxy belong with data.
|
||||
*
|
||||
* @param proxy
|
||||
* @param member method name
|
||||
* @param cb callback that will be called when response arrive.
|
||||
* @param cb_data data passed to callback
|
||||
* @param timeout timeout in milliseconds, -1 to default internal value or
|
||||
* ELDBUS_TIMEOUT_INFINITE for no timeout
|
||||
* @param signature of data that will be send
|
||||
* @param ap va_list of data value
|
||||
*
|
||||
* @note This function only support basic type to complex types use
|
||||
* eldbus_message_iter_* functions.
|
||||
*/
|
||||
EAPI Eldbus_Pending *eldbus_proxy_vcall(Eldbus_Proxy *proxy, const char *member, Eldbus_Message_Cb cb, const void *cb_data, double timeout, const char *signature, va_list ap) EINA_ARG_NONNULL(1, 2, 6);
|
||||
|
||||
/**
|
||||
* @brief Add a signal handler.
|
||||
*
|
||||
* @param proxy interface where the signal is emitted
|
||||
* @param member name of the signal
|
||||
* @param cb callback that will be called when this signal is received
|
||||
* @param cb_data data that will be passed to callback
|
||||
*/
|
||||
EAPI Eldbus_Signal_Handler *eldbus_proxy_signal_handler_add(Eldbus_Proxy *proxy, const char *member, Eldbus_Signal_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ELDBUS_PROXY_EVENT_PROPERTY_CHANGED = 0,
|
||||
ELDBUS_PROXY_EVENT_PROPERTY_REMOVED,
|
||||
ELDBUS_PROXY_EVENT_DEL,
|
||||
ELDBUS_PROXY_EVENT_LAST /**< sentinel, not a real event type */
|
||||
} Eldbus_Proxy_Event_Type;
|
||||
|
||||
typedef struct _Eldbus_Proxy_Event_Property_Changed
|
||||
{
|
||||
const char *name;
|
||||
const Eldbus_Proxy *proxy;
|
||||
const Eina_Value *value;
|
||||
} Eldbus_Proxy_Event_Property_Changed;
|
||||
|
||||
typedef struct _Eldbus_Proxy_Event_Property_Removed
|
||||
{
|
||||
const char *interface;
|
||||
const Eldbus_Proxy *proxy;
|
||||
const char *name;
|
||||
} Eldbus_Proxy_Event_Property_Removed;
|
||||
|
||||
typedef void (*Eldbus_Proxy_Event_Cb)(void *data, Eldbus_Proxy *proxy, void *event_info);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when occurs a event of the
|
||||
* type passed.
|
||||
*/
|
||||
EAPI void eldbus_proxy_event_callback_add(Eldbus_Proxy *proxy, Eldbus_Proxy_Event_Type type, Eldbus_Proxy_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_proxy_event_callback_add().
|
||||
*/
|
||||
EAPI void eldbus_proxy_event_callback_del(Eldbus_Proxy *proxy, Eldbus_Proxy_Event_Type type, Eldbus_Proxy_Event_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 3);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,219 @@
|
|||
#ifndef ELDBUS_SERVICE_H
|
||||
#define ELDBUS_SERVICE_H 1
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Service Service
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define ELDBUS_METHOD_FLAG_DEPRECATED 1
|
||||
#define ELDBUS_METHOD_FLAG_NOREPLY (1 << 1)
|
||||
|
||||
#define ELDBUS_SIGNAL_FLAG_DEPRECATED 1
|
||||
|
||||
#define ELDBUS_PROPERTY_FLAG_DEPRECATED 1
|
||||
|
||||
typedef struct _Eldbus_Arg_Info
|
||||
{
|
||||
const char *signature;
|
||||
const char *name;
|
||||
} Eldbus_Arg_Info;
|
||||
|
||||
/**
|
||||
* @brief Used to insert complete types to signature of methods or signals.
|
||||
*
|
||||
* Example: ELDBUS_ARGS({"s", "interface"}, {"s", "property"})
|
||||
* The signature will be "ss" and each string will have a tag name on
|
||||
* introspect XML with the respective name.
|
||||
*/
|
||||
#define ELDBUS_ARGS(args...) (const Eldbus_Arg_Info[]){ args, { NULL, NULL } }
|
||||
|
||||
typedef struct _Eldbus_Service_Interface Eldbus_Service_Interface;
|
||||
typedef Eldbus_Message * (*Eldbus_Method_Cb)(const Eldbus_Service_Interface *iface, const Eldbus_Message *message);
|
||||
|
||||
/**
|
||||
* Callback function to append property value to message.
|
||||
*
|
||||
* @param iface interface of property
|
||||
* @param propname name of property
|
||||
* @param iter variant iterator in which value must be appended
|
||||
* @param request_msg message that request property
|
||||
* @param error if a error happen you must set a message error to be send caller
|
||||
*
|
||||
* @return EINA_TRUE if success
|
||||
*
|
||||
* @note request_msg and error arguments are only different from NULL when a
|
||||
* client request a property with Properties.Get or Properties.GetAll. Upon
|
||||
* calls to eldbus_service_property_changed(), this callback will also be called.
|
||||
* It's a mistake to return an error in this case because if a property changed,
|
||||
* it must have a new value set and it should be able to be read.
|
||||
*/
|
||||
typedef Eina_Bool (*Eldbus_Property_Get_Cb)(const Eldbus_Service_Interface *iface, const char *propname, Eldbus_Message_Iter *iter, const Eldbus_Message *request_msg, Eldbus_Message **error);
|
||||
|
||||
/**
|
||||
* Callback function to set property value from message.
|
||||
*
|
||||
* @param iface interface of property
|
||||
* @param propname name of property
|
||||
* @param input_msg message call where you have to get value
|
||||
*
|
||||
* @return Message of response, could be a simple method_return, error or NULL to send response later.
|
||||
*/
|
||||
typedef Eldbus_Message *(*Eldbus_Property_Set_Cb)(const Eldbus_Service_Interface *iface, const char *propname, Eldbus_Message_Iter *iter, const Eldbus_Message *input_msg);
|
||||
|
||||
typedef struct _Eldbus_Method
|
||||
{
|
||||
const char *member;
|
||||
const Eldbus_Arg_Info *in;
|
||||
const Eldbus_Arg_Info *out;
|
||||
Eldbus_Method_Cb cb;
|
||||
unsigned int flags;
|
||||
} Eldbus_Method;
|
||||
|
||||
typedef struct _Eldbus_Signal
|
||||
{
|
||||
const char *name;
|
||||
const Eldbus_Arg_Info *args;
|
||||
unsigned int flags;
|
||||
} Eldbus_Signal;
|
||||
|
||||
typedef struct _Eldbus_Property
|
||||
{
|
||||
const char *name;
|
||||
const char *type;
|
||||
Eldbus_Property_Get_Cb get_func;
|
||||
Eldbus_Property_Set_Cb set_func;
|
||||
unsigned int flags;
|
||||
} Eldbus_Property;
|
||||
|
||||
typedef struct _Eldbus_Service_Interface_Desc
|
||||
{
|
||||
const char *interface; /**< interface name */
|
||||
const Eldbus_Method *methods; /**< array of the methods that should be registered in this interface, the last item of array should be filled with NULL */
|
||||
const Eldbus_Signal *signals; /**< array of signal that this interface send, the last item of array should be filled with NULL */
|
||||
const Eldbus_Property *properties; /**< array of property that this interface have, the last item of array should be filled with NULL */
|
||||
const Eldbus_Property_Get_Cb default_get; /**< default get function, if a property don't have a get function this will be used */
|
||||
const Eldbus_Property_Set_Cb default_set; /**< default set function, if a property don't have a set function this will be used */
|
||||
} Eldbus_Service_Interface_Desc;
|
||||
|
||||
/**
|
||||
* @brief Register an interface in the given path and connection.
|
||||
*
|
||||
* @param conn where the interface should listen
|
||||
* @param path object path
|
||||
* @param desc description of interface
|
||||
*
|
||||
* @return Interface
|
||||
*/
|
||||
EAPI Eldbus_Service_Interface *eldbus_service_interface_register(Eldbus_Connection *conn, const char *path, const Eldbus_Service_Interface_Desc *desc) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Unregister a interface.
|
||||
* If this is the last interface of the object path, the object path will be
|
||||
* removed too.
|
||||
*/
|
||||
EAPI void eldbus_service_interface_unregister(Eldbus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Unregister all interfaces of the object path that this interface belongs
|
||||
* and the object path.
|
||||
*/
|
||||
EAPI void eldbus_service_object_unregister(Eldbus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
EAPI Eldbus_Connection *eldbus_service_connection_get(const Eldbus_Service_Interface *iface) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_service_object_path_get(const Eldbus_Service_Interface *iface) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Emit a signal handler of the interface with non-complex types.
|
||||
* Each signal handler have a internal id, the first signal handler of
|
||||
* interface is = 0 the second = 1 and go on.
|
||||
*
|
||||
* @param iface interface of the signal
|
||||
* @param signal_id id of signal
|
||||
* @param ... values that will be send on signal
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_service_signal_emit(const Eldbus_Service_Interface *iface, unsigned int signal_id, ...) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Create signal message.
|
||||
* Each signal handler have a internal id, the first signal handler of
|
||||
* interface is = 0 the second = 1 and go on.
|
||||
* This function is used when the signal has complex types.
|
||||
*
|
||||
* @param iface interface of the signal
|
||||
* @param signal_id id of signal
|
||||
*/
|
||||
EAPI Eldbus_Message *eldbus_service_signal_new(const Eldbus_Service_Interface *iface, unsigned int signal_id) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Send a signal message.
|
||||
*
|
||||
* On success this will call eldbus_message_unref() on the @param signal_msg,
|
||||
* which is the intended behavior in 99% of the cases. Remember to increment
|
||||
* the refcount if you want to keep it alive.
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_service_signal_send(const Eldbus_Service_Interface *iface, Eldbus_Message *signal_msg) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Store data at object path, this data can be obtained from all interfaces
|
||||
* of the same object.
|
||||
*
|
||||
* @param iface interface that belong to the object path where data will
|
||||
* be stored
|
||||
* @param key to identify data
|
||||
* @param data
|
||||
*/
|
||||
EAPI void eldbus_service_object_data_set(Eldbus_Service_Interface *iface, const char *key, const void *data) EINA_ARG_NONNULL(1, 2, 3);
|
||||
|
||||
/**
|
||||
* @brief Get data stored in object path.
|
||||
*
|
||||
* @param iface interface that belongs to the object path where data are stored
|
||||
* @param key that identify data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *eldbus_service_object_data_get(const Eldbus_Service_Interface *iface, const char *key) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Del data stored in object path.
|
||||
*
|
||||
* @param iface interface that belongs to the object path where data are stored
|
||||
* @param key that identify data
|
||||
*
|
||||
* @return pointer to data if found otherwise NULL
|
||||
*/
|
||||
EAPI void *eldbus_service_object_data_del(Eldbus_Service_Interface *iface, const char *key) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Add property to list of changed properties
|
||||
* A DBus.PropertiesChanged signal will be sent in an idler with all properties
|
||||
* that have changed.
|
||||
*
|
||||
* @param iface Interface containing the changed property
|
||||
* @param name Property name
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_service_property_changed(const Eldbus_Service_Interface *iface, const char *name) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
EAPI Eina_Bool eldbus_service_property_invalidate_set(const Eldbus_Service_Interface *iface, const char *name, Eina_Bool is_invalidate) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* Attach ObjectManager interface.
|
||||
*
|
||||
* @param iface ObjectManager will be attach in object path of this interface.
|
||||
* @return EINA_TRUE if success
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_service_object_manager_attach(Eldbus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* Detach ObjectManager interface.
|
||||
*
|
||||
* @param iface ObjectManager of object path of this interface will be detach.
|
||||
* @return EINA_TRUE if success
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_service_object_manager_detach(Eldbus_Service_Interface *iface) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,44 +1,44 @@
|
|||
#include "edbus_private.h"
|
||||
#include "edbus_private_types.h"
|
||||
#include "eldbus_private.h"
|
||||
#include "eldbus_private_types.h"
|
||||
#include <dbus/dbus.h>
|
||||
|
||||
/* TODO: mempool of EDBus_Signal_Handler */
|
||||
/* TODO: mempool of Eldbus_Signal_Handler */
|
||||
|
||||
#define EDBUS_SIGNAL_HANDLER_CHECK(handler) \
|
||||
#define ELDBUS_SIGNAL_HANDLER_CHECK(handler) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN(handler); \
|
||||
if (!EINA_MAGIC_CHECK(handler, EDBUS_SIGNAL_HANDLER_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(handler, ELDBUS_SIGNAL_HANDLER_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(handler, EDBUS_SIGNAL_HANDLER_MAGIC); \
|
||||
EINA_MAGIC_FAIL(handler, ELDBUS_SIGNAL_HANDLER_MAGIC); \
|
||||
return; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, retval) \
|
||||
#define ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, retval) \
|
||||
do \
|
||||
{ \
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(handler, retval); \
|
||||
if (!EINA_MAGIC_CHECK(handler, EDBUS_SIGNAL_HANDLER_MAGIC)) \
|
||||
if (!EINA_MAGIC_CHECK(handler, ELDBUS_SIGNAL_HANDLER_MAGIC)) \
|
||||
{ \
|
||||
EINA_MAGIC_FAIL(handler, EDBUS_SIGNAL_HANDLER_MAGIC); \
|
||||
EINA_MAGIC_FAIL(handler, ELDBUS_SIGNAL_HANDLER_MAGIC); \
|
||||
return retval; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
static void _edbus_signal_handler_del(EDBus_Signal_Handler *handler);
|
||||
static void _edbus_signal_handler_clean(EDBus_Signal_Handler *handler);
|
||||
static void _eldbus_signal_handler_del(Eldbus_Signal_Handler *handler);
|
||||
static void _eldbus_signal_handler_clean(Eldbus_Signal_Handler *handler);
|
||||
|
||||
Eina_Bool
|
||||
edbus_signal_handler_init(void)
|
||||
eldbus_signal_handler_init(void)
|
||||
{
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
edbus_signal_handler_shutdown(void)
|
||||
eldbus_signal_handler_shutdown(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -69,12 +69,12 @@ _sort_arg(const void *d1, const void *d2)
|
|||
|
||||
#define ARGX "arg"
|
||||
EAPI Eina_Bool
|
||||
edbus_signal_handler_match_extra_vset(EDBus_Signal_Handler *sh, va_list ap)
|
||||
eldbus_signal_handler_match_extra_vset(Eldbus_Signal_Handler *sh, va_list ap)
|
||||
{
|
||||
const char *key = NULL, *read;
|
||||
DBusError err;
|
||||
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(sh, EINA_FALSE);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(sh, EINA_FALSE);
|
||||
|
||||
dbus_error_init(&err);
|
||||
dbus_bus_remove_match(sh->conn->dbus_conn,
|
||||
|
@ -130,13 +130,13 @@ error:
|
|||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
edbus_signal_handler_match_extra_set(EDBus_Signal_Handler *sh, ...)
|
||||
eldbus_signal_handler_match_extra_set(Eldbus_Signal_Handler *sh, ...)
|
||||
{
|
||||
Eina_Bool ret;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, sh);
|
||||
ret = edbus_signal_handler_match_extra_vset(sh, ap);
|
||||
ret = eldbus_signal_handler_match_extra_vset(sh, ap);
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
|
@ -146,33 +146,33 @@ static void _on_handler_of_conn_free(void *data, const void *dead_pointer);
|
|||
static void
|
||||
_on_connection_free(void *data, const void *dead_pointer EINA_UNUSED)
|
||||
{
|
||||
EDBus_Signal_Handler *sh = data;
|
||||
edbus_signal_handler_free_cb_del(sh, _on_handler_of_conn_free, sh->conn);
|
||||
edbus_signal_handler_del(sh);
|
||||
Eldbus_Signal_Handler *sh = data;
|
||||
eldbus_signal_handler_free_cb_del(sh, _on_handler_of_conn_free, sh->conn);
|
||||
eldbus_signal_handler_del(sh);
|
||||
}
|
||||
|
||||
static void
|
||||
_on_handler_of_conn_free(void *data, const void *dead_pointer)
|
||||
{
|
||||
EDBus_Connection *conn = data;
|
||||
edbus_connection_free_cb_del(conn, _on_connection_free, dead_pointer);
|
||||
Eldbus_Connection *conn = data;
|
||||
eldbus_connection_free_cb_del(conn, _on_connection_free, dead_pointer);
|
||||
}
|
||||
|
||||
EAPI EDBus_Signal_Handler *
|
||||
edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, EDBus_Signal_Cb cb, const void *cb_data)
|
||||
EAPI Eldbus_Signal_Handler *
|
||||
eldbus_signal_handler_add(Eldbus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, Eldbus_Signal_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Signal_Handler *sh;
|
||||
sh = _edbus_signal_handler_add(conn, sender, path, interface, member, cb, cb_data);
|
||||
Eldbus_Signal_Handler *sh;
|
||||
sh = _eldbus_signal_handler_add(conn, sender, path, interface, member, cb, cb_data);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(sh, NULL);
|
||||
edbus_connection_free_cb_add(conn, _on_connection_free, sh);
|
||||
edbus_signal_handler_free_cb_add(sh, _on_handler_of_conn_free, conn);
|
||||
eldbus_connection_free_cb_add(conn, _on_connection_free, sh);
|
||||
eldbus_signal_handler_free_cb_add(sh, _on_handler_of_conn_free, conn);
|
||||
return sh;
|
||||
}
|
||||
|
||||
EDBus_Signal_Handler *
|
||||
_edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, EDBus_Signal_Cb cb, const void *cb_data)
|
||||
Eldbus_Signal_Handler *
|
||||
_eldbus_signal_handler_add(Eldbus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, Eldbus_Signal_Cb cb, const void *cb_data)
|
||||
{
|
||||
EDBus_Signal_Handler *sh;
|
||||
Eldbus_Signal_Handler *sh;
|
||||
Eina_Strbuf *match;
|
||||
DBusError err;
|
||||
|
||||
|
@ -181,7 +181,7 @@ _edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char
|
|||
DBG("conn=%p, sender=%s, path=%s, interface=%s, member=%s, cb=%p %p",
|
||||
conn, sender, path, interface, member, cb, cb_data);
|
||||
|
||||
sh = calloc(1, sizeof(EDBus_Signal_Handler));
|
||||
sh = calloc(1, sizeof(Eldbus_Signal_Handler));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(sh, NULL);
|
||||
|
||||
match = eina_strbuf_new();
|
||||
|
@ -198,9 +198,9 @@ _edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char
|
|||
|
||||
if (sender)
|
||||
{
|
||||
sh->bus = edbus_connection_name_get(conn, sender);
|
||||
sh->bus = eldbus_connection_name_get(conn, sender);
|
||||
if (!sh->bus) goto cleanup;
|
||||
edbus_connection_name_ref(sh->bus);
|
||||
eldbus_connection_name_ref(sh->bus);
|
||||
}
|
||||
|
||||
sh->cb = cb;
|
||||
|
@ -214,9 +214,9 @@ _edbus_signal_handler_add(EDBus_Connection *conn, const char *sender, const char
|
|||
sh->refcount = 1;
|
||||
sh->dangling = EINA_FALSE;
|
||||
sh->state_args = eina_inlist_sorted_state_new();
|
||||
EINA_MAGIC_SET(sh, EDBUS_SIGNAL_HANDLER_MAGIC);
|
||||
EINA_MAGIC_SET(sh, ELDBUS_SIGNAL_HANDLER_MAGIC);
|
||||
|
||||
edbus_connection_signal_handler_add(conn, sh);
|
||||
eldbus_connection_signal_handler_add(conn, sh);
|
||||
return sh;
|
||||
|
||||
cleanup:
|
||||
|
@ -228,7 +228,7 @@ cleanup_create_strbuf:
|
|||
}
|
||||
|
||||
static void
|
||||
_edbus_signal_handler_clean(EDBus_Signal_Handler *handler)
|
||||
_eldbus_signal_handler_clean(Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
DBusError err;
|
||||
|
||||
|
@ -241,14 +241,14 @@ _edbus_signal_handler_clean(EDBus_Signal_Handler *handler)
|
|||
}
|
||||
|
||||
static void
|
||||
_edbus_signal_handler_del(EDBus_Signal_Handler *handler)
|
||||
_eldbus_signal_handler_del(Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
Eina_Inlist *list;
|
||||
Signal_Argument *arg;
|
||||
DBG("handler %p, refcount=%d, conn=%p %s",
|
||||
handler, handler->refcount, handler->conn, handler->sender);
|
||||
edbus_cbs_free_dispatch(&(handler->cbs_free), handler);
|
||||
edbus_connection_signal_handler_del(handler->conn, handler);
|
||||
eldbus_cbs_free_dispatch(&(handler->cbs_free), handler);
|
||||
eldbus_connection_signal_handler_del(handler->conn, handler);
|
||||
EINA_MAGIC_SET(handler, EINA_MAGIC_NONE);
|
||||
|
||||
/* after cbs_free dispatch these shouldn't exit, error if they do */
|
||||
|
@ -266,14 +266,14 @@ _edbus_signal_handler_del(EDBus_Signal_Handler *handler)
|
|||
eina_inlist_sorted_state_free(handler->state_args);
|
||||
|
||||
if (handler->bus)
|
||||
edbus_connection_name_unref(handler->conn, handler->bus);
|
||||
eldbus_connection_name_unref(handler->conn, handler->bus);
|
||||
free(handler);
|
||||
}
|
||||
|
||||
EAPI EDBus_Signal_Handler *
|
||||
edbus_signal_handler_ref(EDBus_Signal_Handler *handler)
|
||||
EAPI Eldbus_Signal_Handler *
|
||||
eldbus_signal_handler_ref(Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
DBG("handler=%p, pre-refcount=%d, match=%s",
|
||||
handler, handler->refcount, eina_strbuf_string_get(handler->match));
|
||||
handler->refcount++;
|
||||
|
@ -281,81 +281,81 @@ edbus_signal_handler_ref(EDBus_Signal_Handler *handler)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
edbus_signal_handler_unref(EDBus_Signal_Handler *handler)
|
||||
eldbus_signal_handler_unref(Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
DBG("handler=%p, pre-refcount=%d, match=%s",
|
||||
handler, handler->refcount, eina_strbuf_string_get(handler->match));
|
||||
handler->refcount--;
|
||||
if (handler->refcount > 0) return;
|
||||
|
||||
_edbus_signal_handler_clean(handler);
|
||||
_edbus_signal_handler_del(handler);
|
||||
_eldbus_signal_handler_clean(handler);
|
||||
_eldbus_signal_handler_del(handler);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_signal_handler_del(EDBus_Signal_Handler *handler)
|
||||
eldbus_signal_handler_del(Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
_edbus_signal_handler_clean(handler);
|
||||
edbus_signal_handler_unref(handler);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
_eldbus_signal_handler_clean(handler);
|
||||
eldbus_signal_handler_unref(handler);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_signal_handler_free_cb_add(EDBus_Signal_Handler *handler, EDBus_Free_Cb cb, const void *data)
|
||||
eldbus_signal_handler_free_cb_add(Eldbus_Signal_Handler *handler, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
handler->cbs_free = edbus_cbs_free_add(handler->cbs_free, cb, data);
|
||||
handler->cbs_free = eldbus_cbs_free_add(handler->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
edbus_signal_handler_free_cb_del(EDBus_Signal_Handler *handler, EDBus_Free_Cb cb, const void *data)
|
||||
eldbus_signal_handler_free_cb_del(Eldbus_Signal_Handler *handler, Eldbus_Free_Cb cb, const void *data)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK(handler);
|
||||
EINA_SAFETY_ON_NULL_RETURN(cb);
|
||||
handler->cbs_free = edbus_cbs_free_del(handler->cbs_free, cb, data);
|
||||
handler->cbs_free = eldbus_cbs_free_del(handler->cbs_free, cb, data);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_signal_handler_sender_get(const EDBus_Signal_Handler *handler)
|
||||
eldbus_signal_handler_sender_get(const Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
return handler->sender;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_signal_handler_path_get(const EDBus_Signal_Handler *handler)
|
||||
eldbus_signal_handler_path_get(const Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
return handler->path;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_signal_handler_interface_get(const EDBus_Signal_Handler *handler)
|
||||
eldbus_signal_handler_interface_get(const Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
return handler->interface;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_signal_handler_member_get(const EDBus_Signal_Handler *handler)
|
||||
eldbus_signal_handler_member_get(const Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
return handler->member;
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
edbus_signal_handler_match_get(const EDBus_Signal_Handler *handler)
|
||||
eldbus_signal_handler_match_get(const Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
return eina_strbuf_string_get(handler->match);
|
||||
}
|
||||
|
||||
EAPI EDBus_Connection *
|
||||
edbus_signal_handler_connection_get(const EDBus_Signal_Handler *handler)
|
||||
EAPI Eldbus_Connection *
|
||||
eldbus_signal_handler_connection_get(const Eldbus_Signal_Handler *handler)
|
||||
{
|
||||
EDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
ELDBUS_SIGNAL_HANDLER_CHECK_RETVAL(handler, NULL);
|
||||
return handler->conn;
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
#ifndef ELDBUS_SIGNAL_HANDLER_H
|
||||
#define ELDBUS_SIGNAL_HANDLER_H 1
|
||||
|
||||
/**
|
||||
* @defgroup Eldbus_Signal_Handler Signal Handler
|
||||
* @ingroup Eldbus
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Add a signal handler.
|
||||
*
|
||||
* @param conn connection where the signal is emitted
|
||||
* @param sender bus name or unique id of where the signal is emitted
|
||||
* @param path path of remote object
|
||||
* @param interface that signal belongs
|
||||
* @param member name of the signal
|
||||
* @param cb callback that will be called when this signal is received
|
||||
* @param cb_data data that will be passed to callback
|
||||
*/
|
||||
EAPI Eldbus_Signal_Handler *eldbus_signal_handler_add(Eldbus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, Eldbus_Signal_Cb cb, const void *cb_data) EINA_ARG_NONNULL(1, 6);
|
||||
|
||||
/**
|
||||
* @brief Increase signal handler reference.
|
||||
*/
|
||||
EAPI Eldbus_Signal_Handler *eldbus_signal_handler_ref(Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease signal handler reference.
|
||||
* If reference == 0 signal handler will be freed.
|
||||
*/
|
||||
EAPI void eldbus_signal_handler_unref(Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Decrease signal handler reference like eldbus_signal_handler_unref()
|
||||
* but if reference > 0 this signal handler will stop listening to signals. In other
|
||||
* words it will be canceled but memory will not be freed.
|
||||
*/
|
||||
EAPI void eldbus_signal_handler_del(Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add extra argument in match of signal handler to obtain specifics signals.
|
||||
*
|
||||
* Example:
|
||||
* eldbus_signal_handler_match_extra_set(sh, "arg0", "org.bansheeproject.Banshee", "arg1", "", NULL);
|
||||
* With this extra arguments this signal handler callback only will be called
|
||||
* when Banshee is started.
|
||||
*
|
||||
* @note For now only argX is supported.
|
||||
*
|
||||
* @param sh signal handler
|
||||
* @param ... variadic of key and value and must be ended with a NULL
|
||||
*
|
||||
* @note For more information:
|
||||
* http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_signal_handler_match_extra_set(Eldbus_Signal_Handler *sh, ...) EINA_ARG_NONNULL(1) EINA_SENTINEL;
|
||||
|
||||
/**
|
||||
* @brief Add extra argument in match of signal handler to obtain specifics signals.
|
||||
*
|
||||
* Example:
|
||||
* eldbus_signal_handler_match_extra_set(sh, "arg0", "org.bansheeproject.Banshee", "arg1", "", NULL);
|
||||
* With this extra arguments this signal handler callback only will be called
|
||||
* when Banshee is started.
|
||||
*
|
||||
* @note For now is only supported argX.
|
||||
*
|
||||
* @param sh signal handler
|
||||
* @param ap va_list with the keys and values, must be ended with a NULL
|
||||
*
|
||||
* @note To information:
|
||||
* http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules
|
||||
*/
|
||||
EAPI Eina_Bool eldbus_signal_handler_match_extra_vset(Eldbus_Signal_Handler *sh, va_list ap) EINA_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Add a callback function to be called when signal handler will be freed.
|
||||
*/
|
||||
EAPI void eldbus_signal_handler_free_cb_add(Eldbus_Signal_Handler *handler, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
/**
|
||||
* @brief Remove callback registered in eldbus_signal_handler_free_cb_add().
|
||||
*/
|
||||
EAPI void eldbus_signal_handler_free_cb_del(Eldbus_Signal_Handler *handler, Eldbus_Free_Cb cb, const void *data) EINA_ARG_NONNULL(1, 2);
|
||||
|
||||
EAPI const char *eldbus_signal_handler_sender_get(const Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_signal_handler_path_get(const Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_signal_handler_interface_get(const Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_signal_handler_member_get(const Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
EAPI const char *eldbus_signal_handler_match_get(const Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
EAPI Eldbus_Connection *eldbus_signal_handler_connection_get(const Eldbus_Signal_Handler *handler) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -76,7 +76,7 @@
|
|||
|
||||
#include <Eina.h>
|
||||
#include <eina_safety_checks.h>
|
||||
#include <EDBus.h>
|
||||
#include <Eldbus.h>
|
||||
#include <Ethumb.h>
|
||||
#include <Ecore.h>
|
||||
|
||||
|
@ -100,7 +100,7 @@ struct _Ethumb_Client
|
|||
Ethumb *ethumb;
|
||||
int id_count;
|
||||
Ethumb *old_ethumb_conf;
|
||||
EDBus_Connection *conn;
|
||||
Eldbus_Connection *conn;
|
||||
struct
|
||||
{
|
||||
Ethumb_Client_Connect_Cb cb;
|
||||
|
@ -116,7 +116,7 @@ struct _Ethumb_Client
|
|||
void *data;
|
||||
Eina_Free_Cb free_data;
|
||||
} die;
|
||||
EDBus_Proxy *proxy;
|
||||
Eldbus_Proxy *proxy;
|
||||
EINA_REFCOUNT;
|
||||
Eina_Bool connected : 1;
|
||||
Eina_Bool server_started : 1;
|
||||
|
@ -132,7 +132,7 @@ struct _ethumb_pending_add
|
|||
Ethumb_Client_Generate_Cb generated_cb;
|
||||
void *data;
|
||||
Eina_Free_Cb free_data;
|
||||
EDBus_Pending *pending_call;
|
||||
Eldbus_Pending *pending_call;
|
||||
Ethumb_Client *client;
|
||||
};
|
||||
|
||||
|
@ -187,7 +187,7 @@ static const char _ethumb_dbus_path[] = "/org/enlightenment/Ethumb";
|
|||
static int _initcount = 0;
|
||||
static Eina_Hash *_exists_request = NULL;
|
||||
|
||||
static void _ethumb_client_generated_cb(void *data, const EDBus_Message *msg);
|
||||
static void _ethumb_client_generated_cb(void *data, const Eldbus_Message *msg);
|
||||
static void _ethumb_client_call_new(Ethumb_Client *client);
|
||||
static void _ethumb_client_name_owner_changed(void *context, const char *bus, const char *old_id, const char *new_id);
|
||||
|
||||
|
@ -195,7 +195,7 @@ static void
|
|||
_ethumb_client_free(Ethumb_Client *client)
|
||||
{
|
||||
void *data;
|
||||
EDBus_Object *obj;
|
||||
Eldbus_Object *obj;
|
||||
|
||||
if (!client->connected)
|
||||
goto end_connection;
|
||||
|
@ -203,7 +203,7 @@ _ethumb_client_free(Ethumb_Client *client)
|
|||
EINA_LIST_FREE(client->pending_add, data)
|
||||
{
|
||||
struct _ethumb_pending_add *pending = data;
|
||||
edbus_pending_cancel(pending->pending_call);
|
||||
eldbus_pending_cancel(pending->pending_call);
|
||||
}
|
||||
|
||||
EINA_LIST_FREE(client->pending_gen, data)
|
||||
|
@ -232,13 +232,13 @@ end_connection:
|
|||
|
||||
ethumb_free(client->ethumb);
|
||||
|
||||
edbus_name_owner_changed_callback_del(client->conn, _ethumb_dbus_bus_name,
|
||||
eldbus_name_owner_changed_callback_del(client->conn, _ethumb_dbus_bus_name,
|
||||
_ethumb_client_name_owner_changed,
|
||||
client);
|
||||
obj = edbus_proxy_object_get(client->proxy);
|
||||
edbus_proxy_unref(client->proxy);
|
||||
edbus_object_unref(obj);
|
||||
edbus_connection_unref(client->conn);
|
||||
obj = eldbus_proxy_object_get(client->proxy);
|
||||
eldbus_proxy_unref(client->proxy);
|
||||
eldbus_object_unref(obj);
|
||||
eldbus_connection_unref(client->conn);
|
||||
|
||||
if (client->connect.free_data)
|
||||
client->connect.free_data(client->connect.data);
|
||||
|
@ -317,30 +317,30 @@ _ethumb_client_report_connect(Ethumb_Client *client, Eina_Bool success)
|
|||
}
|
||||
|
||||
static void
|
||||
_ethumb_client_new_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_ethumb_client_new_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
const char *opath;
|
||||
Ethumb_Client *client = data;
|
||||
EDBus_Object *obj;
|
||||
Eldbus_Object *obj;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("Error: %s %s", errname, errmsg);
|
||||
_ethumb_client_report_connect(client, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "o", &opath))
|
||||
if (!eldbus_message_arguments_get(msg, "o", &opath))
|
||||
{
|
||||
ERR("Error: could not get entry contents");
|
||||
_ethumb_client_report_connect(client, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
obj = edbus_object_get(client->conn, _ethumb_dbus_bus_name, opath);
|
||||
client->proxy = edbus_proxy_get(obj, _ethumb_dbus_objects_interface);
|
||||
edbus_proxy_signal_handler_add(client->proxy, "generated",
|
||||
obj = eldbus_object_get(client->conn, _ethumb_dbus_bus_name, opath);
|
||||
client->proxy = eldbus_proxy_get(obj, _ethumb_dbus_objects_interface);
|
||||
eldbus_proxy_signal_handler_add(client->proxy, "generated",
|
||||
_ethumb_client_generated_cb, client);
|
||||
_ethumb_client_report_connect(client, 1);
|
||||
}
|
||||
|
@ -348,11 +348,11 @@ _ethumb_client_new_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pendi
|
|||
static void
|
||||
_ethumb_client_call_new(Ethumb_Client *client)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
msg = edbus_message_method_call_new(_ethumb_dbus_bus_name,
|
||||
Eldbus_Message *msg;
|
||||
msg = eldbus_message_method_call_new(_ethumb_dbus_bus_name,
|
||||
_ethumb_dbus_path,
|
||||
_ethumb_dbus_interface, "new");
|
||||
edbus_connection_send(client->conn, msg, _ethumb_client_new_cb, client, -1);
|
||||
eldbus_connection_send(client->conn, msg, _ethumb_client_new_cb, client, -1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -434,7 +434,7 @@ ethumb_client_init(void)
|
|||
}
|
||||
|
||||
ethumb_init();
|
||||
edbus_init();
|
||||
eldbus_init();
|
||||
|
||||
_exists_request = eina_hash_stringshared_new(_ethumb_async_delete);
|
||||
|
||||
|
@ -468,7 +468,7 @@ ethumb_client_shutdown(void)
|
|||
eina_hash_free(_exists_request);
|
||||
_exists_request = NULL;
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
ethumb_shutdown();
|
||||
eina_log_domain_unregister(_log_dom);
|
||||
_log_dom = -1;
|
||||
|
@ -540,15 +540,15 @@ ethumb_client_connect(Ethumb_Client_Connect_Cb connect_cb, const void *data, Ein
|
|||
goto ethumb_new_err;
|
||||
}
|
||||
|
||||
eclient->conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||
eclient->conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
|
||||
if (!eclient->conn)
|
||||
{
|
||||
ERR("could not connect to session bus.");
|
||||
goto connection_err;
|
||||
}
|
||||
|
||||
edbus_name_start(eclient->conn, _ethumb_dbus_bus_name, 0, NULL, NULL);
|
||||
edbus_name_owner_changed_callback_add(eclient->conn, _ethumb_dbus_bus_name,
|
||||
eldbus_name_start(eclient->conn, _ethumb_dbus_bus_name, 0, NULL, NULL);
|
||||
eldbus_name_owner_changed_callback_add(eclient->conn, _ethumb_dbus_bus_name,
|
||||
_ethumb_client_name_owner_changed,
|
||||
eclient, EINA_TRUE);
|
||||
EINA_REFCOUNT_INIT(eclient);
|
||||
|
@ -623,18 +623,18 @@ ethumb_client_on_server_die_callback_set(Ethumb_Client *client, Ethumb_Client_Di
|
|||
*/
|
||||
|
||||
static void
|
||||
_ethumb_client_ethumb_setup_cb(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED)
|
||||
_ethumb_client_ethumb_setup_cb(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
Eina_Bool result = 0;
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("Error: %s %s", errname, errmsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "b", &result))
|
||||
if (!eldbus_message_arguments_get(msg, "b", &result))
|
||||
{
|
||||
ERR("Error getting arguments");
|
||||
return;
|
||||
|
@ -643,58 +643,58 @@ _ethumb_client_ethumb_setup_cb(void *data EINA_UNUSED, const EDBus_Message *msg,
|
|||
}
|
||||
|
||||
static const char *
|
||||
_ethumb_client_dbus_get_bytearray(EDBus_Message_Iter *array)
|
||||
_ethumb_client_dbus_get_bytearray(Eldbus_Message_Iter *array)
|
||||
{
|
||||
int length;
|
||||
const char *result;
|
||||
|
||||
if (edbus_message_iter_fixed_array_get(array, 'y', &result, &length))
|
||||
if (eldbus_message_iter_fixed_array_get(array, 'y', &result, &length))
|
||||
return eina_stringshare_add_length(result, length);
|
||||
else
|
||||
{
|
||||
ERR("Not byte array. Signature: %s",
|
||||
edbus_message_iter_signature_get(array));
|
||||
eldbus_message_iter_signature_get(array));
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_ethumb_client_dbus_append_bytearray(EDBus_Message_Iter *parent, const char *string)
|
||||
_ethumb_client_dbus_append_bytearray(Eldbus_Message_Iter *parent, const char *string)
|
||||
{
|
||||
int i, size;
|
||||
EDBus_Message_Iter *array;
|
||||
Eldbus_Message_Iter *array;
|
||||
|
||||
if (!string)
|
||||
string = "";
|
||||
|
||||
array = edbus_message_iter_container_new(parent, 'a', "y");
|
||||
array = eldbus_message_iter_container_new(parent, 'a', "y");
|
||||
size = strlen(string) + 1;
|
||||
for (i = 0; i < size; i++)
|
||||
edbus_message_iter_basic_append(array, 'y', string[i]);
|
||||
edbus_message_iter_container_close(parent, array);
|
||||
eldbus_message_iter_basic_append(array, 'y', string[i]);
|
||||
eldbus_message_iter_container_close(parent, array);
|
||||
}
|
||||
|
||||
/**
|
||||
* @endcond
|
||||
*/
|
||||
|
||||
static EDBus_Message_Iter *
|
||||
_setup_iterator_open(EDBus_Message_Iter *array, EDBus_Message_Iter **entry, const char *key, const char *type)
|
||||
static Eldbus_Message_Iter *
|
||||
_setup_iterator_open(Eldbus_Message_Iter *array, Eldbus_Message_Iter **entry, const char *key, const char *type)
|
||||
{
|
||||
EDBus_Message_Iter *variant, *_struct;
|
||||
edbus_message_iter_arguments_append(array, "{sv}", &_struct);
|
||||
edbus_message_iter_basic_append(_struct, 's', key);
|
||||
variant = edbus_message_iter_container_new(_struct, 'v', type);
|
||||
Eldbus_Message_Iter *variant, *_struct;
|
||||
eldbus_message_iter_arguments_append(array, "{sv}", &_struct);
|
||||
eldbus_message_iter_basic_append(_struct, 's', key);
|
||||
variant = eldbus_message_iter_container_new(_struct, 'v', type);
|
||||
|
||||
*entry = _struct;
|
||||
return variant;
|
||||
}
|
||||
|
||||
static void
|
||||
_setup_iterator_close(EDBus_Message_Iter *array, EDBus_Message_Iter *entry, EDBus_Message_Iter *variant)
|
||||
_setup_iterator_close(Eldbus_Message_Iter *array, Eldbus_Message_Iter *entry, Eldbus_Message_Iter *variant)
|
||||
{
|
||||
edbus_message_iter_container_close(entry, variant);
|
||||
edbus_message_iter_container_close(array, entry);
|
||||
eldbus_message_iter_container_close(entry, variant);
|
||||
eldbus_message_iter_container_close(array, entry);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -709,10 +709,10 @@ _setup_iterator_close(EDBus_Message_Iter *array, EDBus_Message_Iter *entry, EDBu
|
|||
EAPI void
|
||||
ethumb_client_ethumb_setup(Ethumb_Client *client)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Message_Iter *array, *main_iter;
|
||||
EDBus_Message_Iter *entry, *variant;
|
||||
EDBus_Message_Iter *sub_struct;
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Message_Iter *array, *main_iter;
|
||||
Eldbus_Message_Iter *entry, *variant;
|
||||
Eldbus_Message_Iter *sub_struct;
|
||||
Ethumb *e = client->ethumb;
|
||||
int tw, th, format, aspect, orientation, quality, compress;
|
||||
float cx, cy;
|
||||
|
@ -724,57 +724,57 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
|
|||
EINA_SAFETY_ON_NULL_RETURN(client);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(client->connected);
|
||||
|
||||
msg = edbus_proxy_method_call_new(client->proxy, "ethumb_setup");
|
||||
main_iter = edbus_message_iter_get(msg);
|
||||
edbus_message_iter_arguments_append(main_iter, "a{sv}", &array);
|
||||
msg = eldbus_proxy_method_call_new(client->proxy, "ethumb_setup");
|
||||
main_iter = eldbus_message_iter_get(msg);
|
||||
eldbus_message_iter_arguments_append(main_iter, "a{sv}", &array);
|
||||
|
||||
/* starting array elements */
|
||||
variant = _setup_iterator_open(array, &entry, "size", "(ii)");
|
||||
edbus_message_iter_arguments_append(variant, "(ii)", &sub_struct);
|
||||
eldbus_message_iter_arguments_append(variant, "(ii)", &sub_struct);
|
||||
ethumb_thumb_size_get(e, &tw, &th);
|
||||
edbus_message_iter_arguments_append(sub_struct, "ii", tw, th);
|
||||
edbus_message_iter_container_close(variant, sub_struct);
|
||||
eldbus_message_iter_arguments_append(sub_struct, "ii", tw, th);
|
||||
eldbus_message_iter_container_close(variant, sub_struct);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "format", "i");
|
||||
format = ethumb_thumb_format_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "i", format);
|
||||
eldbus_message_iter_arguments_append(variant, "i", format);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "aspect", "i");
|
||||
aspect = ethumb_thumb_aspect_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "i", aspect);
|
||||
eldbus_message_iter_arguments_append(variant, "i", aspect);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "orientation", "i");
|
||||
orientation = ethumb_thumb_orientation_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "i", orientation);
|
||||
eldbus_message_iter_arguments_append(variant, "i", orientation);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "crop", "(dd)");
|
||||
edbus_message_iter_arguments_append(variant, "(dd)", &sub_struct);
|
||||
eldbus_message_iter_arguments_append(variant, "(dd)", &sub_struct);
|
||||
ethumb_thumb_crop_align_get(e, &cx, &cy);
|
||||
edbus_message_iter_arguments_append(sub_struct, "dd", (double)cx, (double)cy);
|
||||
edbus_message_iter_container_close(variant, sub_struct);
|
||||
eldbus_message_iter_arguments_append(sub_struct, "dd", (double)cx, (double)cy);
|
||||
eldbus_message_iter_container_close(variant, sub_struct);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "quality", "i");
|
||||
quality = ethumb_thumb_quality_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "i", quality);
|
||||
eldbus_message_iter_arguments_append(variant, "i", quality);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "compress", "i");
|
||||
compress = ethumb_thumb_quality_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "i", compress);
|
||||
eldbus_message_iter_arguments_append(variant, "i", compress);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "frame", "(ayayay)");
|
||||
edbus_message_iter_arguments_append(variant, "(ayayay)", &sub_struct);
|
||||
eldbus_message_iter_arguments_append(variant, "(ayayay)", &sub_struct);
|
||||
ethumb_frame_get(e, &theme_file, &group, &swallow);
|
||||
_ethumb_client_dbus_append_bytearray(sub_struct, theme_file);
|
||||
_ethumb_client_dbus_append_bytearray(sub_struct, group);
|
||||
_ethumb_client_dbus_append_bytearray(sub_struct, swallow);
|
||||
edbus_message_iter_container_close(variant, sub_struct);
|
||||
eldbus_message_iter_container_close(variant, sub_struct);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "directory", "ay");
|
||||
|
@ -789,37 +789,37 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
|
|||
|
||||
variant = _setup_iterator_open(array, &entry, "video_time", "d");
|
||||
video_time = ethumb_video_time_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "d", video_time);
|
||||
eldbus_message_iter_arguments_append(variant, "d", video_time);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "video_start", "d");
|
||||
video_start = ethumb_video_start_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "d", video_start);
|
||||
eldbus_message_iter_arguments_append(variant, "d", video_start);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "video_interval", "d");
|
||||
video_interval = ethumb_video_interval_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "d", video_interval);
|
||||
eldbus_message_iter_arguments_append(variant, "d", video_interval);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "video_ntimes", "u");
|
||||
video_ntimes = ethumb_video_ntimes_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "u", video_ntimes);
|
||||
eldbus_message_iter_arguments_append(variant, "u", video_ntimes);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "video_fps", "u");
|
||||
video_fps = ethumb_video_fps_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "u", video_fps);
|
||||
eldbus_message_iter_arguments_append(variant, "u", video_fps);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
variant = _setup_iterator_open(array, &entry, "document_page", "u");
|
||||
document_page = ethumb_document_page_get(e);
|
||||
edbus_message_iter_arguments_append(variant, "u", document_page);
|
||||
eldbus_message_iter_arguments_append(variant, "u", document_page);
|
||||
_setup_iterator_close(array, entry, variant);
|
||||
|
||||
edbus_message_iter_container_close(main_iter, array);
|
||||
eldbus_message_iter_container_close(main_iter, array);
|
||||
|
||||
edbus_proxy_send(client->proxy, msg, _ethumb_client_ethumb_setup_cb,
|
||||
eldbus_proxy_send(client->proxy, msg, _ethumb_client_ethumb_setup_cb,
|
||||
client, -1);
|
||||
}
|
||||
|
||||
|
@ -827,18 +827,18 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
|
|||
* @cond LOCAL
|
||||
*/
|
||||
static void
|
||||
_ethumb_client_generated_cb(void *data, const EDBus_Message *msg)
|
||||
_ethumb_client_generated_cb(void *data, const Eldbus_Message *msg)
|
||||
{
|
||||
int id = -1;
|
||||
Ethumb_Client *client = data;
|
||||
EDBus_Message_Iter *thumb_iter;
|
||||
EDBus_Message_Iter *thumb_key_iter;
|
||||
Eldbus_Message_Iter *thumb_iter;
|
||||
Eldbus_Message_Iter *thumb_key_iter;
|
||||
Eina_Bool success;
|
||||
int found;
|
||||
struct _ethumb_pending_gen *pending;
|
||||
Eina_List *l;
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "iayayb", &id, &thumb_iter,
|
||||
if (!eldbus_message_arguments_get(msg, "iayayb", &id, &thumb_iter,
|
||||
&thumb_key_iter, &success))
|
||||
{
|
||||
ERR("Error getting data from signal.");
|
||||
|
@ -882,7 +882,7 @@ _ethumb_client_generated_cb(void *data, const EDBus_Message *msg)
|
|||
}
|
||||
|
||||
static void
|
||||
_ethumb_client_queue_add_cb(void *data, const EDBus_Message *msg, EDBus_Pending *edbus_pending EINA_UNUSED)
|
||||
_ethumb_client_queue_add_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *eldbus_pending EINA_UNUSED)
|
||||
{
|
||||
const char *errname, *errmsg;
|
||||
int32_t id;
|
||||
|
@ -892,13 +892,13 @@ _ethumb_client_queue_add_cb(void *data, const EDBus_Message *msg, EDBus_Pending
|
|||
|
||||
client->pending_add = eina_list_remove(client->pending_add, pending);
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("Error: %s %s", errname, errmsg);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!edbus_message_arguments_get(msg, "i", &id))
|
||||
if (!eldbus_message_arguments_get(msg, "i", &id))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
goto end;
|
||||
|
@ -931,8 +931,8 @@ end:
|
|||
static int
|
||||
_ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *key, const char *thumb, const char *thumb_key, Ethumb_Client_Generate_Cb generated_cb, const void *data, Eina_Free_Cb free_data)
|
||||
{
|
||||
EDBus_Message *msg;
|
||||
EDBus_Message_Iter *main_itr;
|
||||
Eldbus_Message *msg;
|
||||
Eldbus_Message_Iter *main_itr;
|
||||
struct _ethumb_pending_add *pending;
|
||||
|
||||
pending = calloc(1, sizeof(*pending));
|
||||
|
@ -948,15 +948,15 @@ _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *ke
|
|||
|
||||
client->id_count = (client->id_count + 1) % MAX_ID;
|
||||
|
||||
msg = edbus_proxy_method_call_new(client->proxy, "queue_add");
|
||||
main_itr = edbus_message_iter_get(msg);
|
||||
edbus_message_iter_basic_append(main_itr, 'i', pending->id);
|
||||
msg = eldbus_proxy_method_call_new(client->proxy, "queue_add");
|
||||
main_itr = eldbus_message_iter_get(msg);
|
||||
eldbus_message_iter_basic_append(main_itr, 'i', pending->id);
|
||||
_ethumb_client_dbus_append_bytearray(main_itr, file);
|
||||
_ethumb_client_dbus_append_bytearray(main_itr, key);
|
||||
_ethumb_client_dbus_append_bytearray(main_itr, thumb);
|
||||
_ethumb_client_dbus_append_bytearray(main_itr, thumb_key);
|
||||
|
||||
pending->pending_call = edbus_proxy_send(client->proxy, msg,
|
||||
pending->pending_call = eldbus_proxy_send(client->proxy, msg,
|
||||
_ethumb_client_queue_add_cb,
|
||||
pending, -1);
|
||||
client->pending_add = eina_list_append(client->pending_add, pending);
|
||||
|
@ -965,7 +965,7 @@ _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *ke
|
|||
}
|
||||
|
||||
static void
|
||||
_ethumb_client_queue_remove_cb(void *data, const EDBus_Message *msg, EDBus_Pending *edbus_pending EINA_UNUSED)
|
||||
_ethumb_client_queue_remove_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *eldbus_pending EINA_UNUSED)
|
||||
{
|
||||
Eina_Bool success = EINA_FALSE;
|
||||
struct _ethumb_pending_remove *pending = data;
|
||||
|
@ -974,13 +974,13 @@ _ethumb_client_queue_remove_cb(void *data, const EDBus_Message *msg, EDBus_Pendi
|
|||
|
||||
client->pending_remove = eina_list_remove(client->pending_remove, pending);
|
||||
|
||||
if (edbus_message_error_get(msg, &errname, &errmsg))
|
||||
if (eldbus_message_error_get(msg, &errname, &errmsg))
|
||||
{
|
||||
ERR("Error: %s %s", errname, errmsg);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (edbus_message_arguments_get(msg, "b", &success))
|
||||
if (eldbus_message_arguments_get(msg, "b", &success))
|
||||
{
|
||||
ERR("Error getting arguments.");
|
||||
goto end;
|
||||
|
@ -1030,7 +1030,7 @@ ethumb_client_generate_cancel(Ethumb_Client *client, int id, Ethumb_Client_Gener
|
|||
pending->free_data = free_data;
|
||||
pending->client = client;
|
||||
|
||||
edbus_proxy_call(client->proxy, "queue_remove",
|
||||
eldbus_proxy_call(client->proxy, "queue_remove",
|
||||
_ethumb_client_queue_remove_cb, pending, -1, "i", pending->id);
|
||||
client->pending_remove = eina_list_append(client->pending_remove, pending);
|
||||
|
||||
|
@ -1049,7 +1049,7 @@ ethumb_client_generate_cancel(Ethumb_Client *client, int id, Ethumb_Client_Gener
|
|||
l = l->next;
|
||||
continue;
|
||||
}
|
||||
edbus_pending_cancel(pending_add->pending_call);
|
||||
eldbus_pending_cancel(pending_add->pending_call);
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
|
@ -1096,7 +1096,7 @@ ethumb_client_generate_cancel_all(Ethumb_Client *client)
|
|||
EINA_LIST_FREE(client->pending_add, data)
|
||||
{
|
||||
struct _ethumb_pending_add *pending = data;
|
||||
edbus_pending_cancel(pending->pending_call);
|
||||
eldbus_pending_cancel(pending->pending_call);
|
||||
}
|
||||
|
||||
EINA_LIST_FREE(client->pending_gen, data)
|
||||
|
@ -1111,7 +1111,7 @@ ethumb_client_generate_cancel_all(Ethumb_Client *client)
|
|||
free(pending);
|
||||
}
|
||||
|
||||
edbus_proxy_call(client->proxy, "queue_clear", NULL, NULL, -1, "");
|
||||
eldbus_proxy_call(client->proxy, "queue_clear", NULL, NULL, -1, "");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#ifndef _EDBUS_SUITE_H
|
||||
#define _EDBUS_SUITE_H
|
||||
|
||||
#include <check.h>
|
||||
|
||||
void edbus_test_edbus_init(TCase *tc);
|
||||
|
||||
#endif
|
|
@ -5,27 +5,27 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <EDBus.h>
|
||||
#include <Eldbus.h>
|
||||
|
||||
#include "edbus_suite.h"
|
||||
#include "eldbus_suite.h"
|
||||
|
||||
typedef struct _EDBus_Test_Case Edbus_Test_Case;
|
||||
typedef struct _Eldbus_Test_Case Eldbus_Test_Case;
|
||||
|
||||
struct _EDBus_Test_Case
|
||||
struct _Eldbus_Test_Case
|
||||
{
|
||||
const char *test_case;
|
||||
void (*build)(TCase *tc);
|
||||
};
|
||||
|
||||
static const Edbus_Test_Case etc[] = {
|
||||
{ "edbus_init", edbus_test_edbus_init },
|
||||
static const Eldbus_Test_Case etc[] = {
|
||||
{ "eldbus_init", eldbus_test_eldbus_init },
|
||||
{ }
|
||||
};
|
||||
|
||||
static void
|
||||
_list_tests(void)
|
||||
{
|
||||
const Edbus_Test_Case *itr;
|
||||
const Eldbus_Test_Case *itr;
|
||||
|
||||
itr = etc;
|
||||
fputs("Available Test Cases:\n", stderr);
|
||||
|
@ -48,13 +48,13 @@ _use_test(int argc, const char **argv, const char *test_case)
|
|||
}
|
||||
|
||||
static Suite *
|
||||
edbus_suite_build(int argc, const char **argv)
|
||||
eldbus_suite_build(int argc, const char **argv)
|
||||
{
|
||||
TCase *tc;
|
||||
Suite *s;
|
||||
int i;
|
||||
|
||||
s = suite_create("Edbus");
|
||||
s = suite_create("Eldbus");
|
||||
|
||||
for (i = 0; etc[i].test_case; ++i)
|
||||
{
|
||||
|
@ -95,7 +95,7 @@ main(int argc, char **argv)
|
|||
|
||||
putenv("EFL_RUN_IN_TREE=1");
|
||||
|
||||
s = edbus_suite_build(argc - 1, (const char **)argv + 1);
|
||||
s = eldbus_suite_build(argc - 1, (const char **)argv + 1);
|
||||
sr = srunner_create(s);
|
||||
|
||||
srunner_set_xml(sr, TESTS_BUILD_DIR "/check-results.xml");
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef _ELDBUS_SUITE_H
|
||||
#define _ELDBUS_SUITE_H
|
||||
|
||||
#include <check.h>
|
||||
|
||||
void eldbus_test_eldbus_init(TCase *tc);
|
||||
|
||||
#endif
|
|
@ -7,9 +7,9 @@
|
|||
|
||||
#include <Eina.h>
|
||||
#include <Ecore.h>
|
||||
#include <EDBus.h>
|
||||
#include <Eldbus.h>
|
||||
|
||||
#include "edbus_suite.h"
|
||||
#include "eldbus_suite.h"
|
||||
|
||||
static Eina_Bool
|
||||
_quit_cb(void *data EINA_UNUSED)
|
||||
|
@ -18,25 +18,25 @@ _quit_cb(void *data EINA_UNUSED)
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
START_TEST(edbus_test_edbus)
|
||||
START_TEST(eldbus_test_eldbus)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = edbus_init();
|
||||
ret = eldbus_init();
|
||||
fail_if(ret != 1);
|
||||
|
||||
ret = edbus_shutdown();
|
||||
ret = eldbus_shutdown();
|
||||
fail_if(ret != 0);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(edbus_test_edbus_main_loop)
|
||||
START_TEST(eldbus_test_eldbus_main_loop)
|
||||
{
|
||||
Ecore_Timer *timer;
|
||||
int ret;
|
||||
|
||||
ecore_init();
|
||||
ret = edbus_init();
|
||||
ret = eldbus_init();
|
||||
fail_if(ret != 1);
|
||||
|
||||
timer = ecore_timer_add(0.1, _quit_cb, NULL);
|
||||
|
@ -44,7 +44,7 @@ START_TEST(edbus_test_edbus_main_loop)
|
|||
|
||||
ecore_main_loop_begin();
|
||||
|
||||
ret = edbus_shutdown();
|
||||
ret = eldbus_shutdown();
|
||||
fail_if(ret != 0);
|
||||
|
||||
ecore_shutdown();
|
||||
|
@ -59,14 +59,14 @@ END_TEST
|
|||
* afterwards.
|
||||
*/
|
||||
|
||||
START_TEST(edbus_test_edbus_conn)
|
||||
START_TEST(eldbus_test_eldbus_conn)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
Eldbus_Connection *conn;
|
||||
int ret;
|
||||
|
||||
ecore_init();
|
||||
|
||||
ret = edbus_init();
|
||||
ret = eldbus_init();
|
||||
fail_if(ret != 1);
|
||||
|
||||
/*
|
||||
|
@ -74,12 +74,12 @@ START_TEST(edbus_test_edbus_conn)
|
|||
* however security rules may apply differently depending on the
|
||||
* machine/user
|
||||
*/
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
fail_if(conn == NULL);
|
||||
|
||||
edbus_connection_unref(conn);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
ret = edbus_shutdown();
|
||||
ret = eldbus_shutdown();
|
||||
fail_if(ret != 0);
|
||||
|
||||
ecore_shutdown();
|
||||
|
@ -87,15 +87,15 @@ START_TEST(edbus_test_edbus_conn)
|
|||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(edbus_test_edbus_conn_object)
|
||||
START_TEST(eldbus_test_eldbus_conn_object)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
EDBus_Object *obj;
|
||||
Eldbus_Connection *conn;
|
||||
Eldbus_Object *obj;
|
||||
int ret;
|
||||
|
||||
ecore_init();
|
||||
|
||||
ret = edbus_init();
|
||||
ret = eldbus_init();
|
||||
fail_if(ret != 1);
|
||||
|
||||
/*
|
||||
|
@ -103,17 +103,17 @@ START_TEST(edbus_test_edbus_conn_object)
|
|||
* However security rules may apply differently depending on the
|
||||
* machine/user
|
||||
*/
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
fail_if(conn == NULL);
|
||||
|
||||
obj = edbus_object_get(conn, "org.buu", "/org/buu");
|
||||
obj = eldbus_object_get(conn, "org.buu", "/org/buu");
|
||||
fail_if(obj == NULL);
|
||||
|
||||
edbus_object_unref(obj);
|
||||
eldbus_object_unref(obj);
|
||||
|
||||
edbus_connection_unref(conn);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
ret = edbus_shutdown();
|
||||
ret = eldbus_shutdown();
|
||||
fail_if(ret != 0);
|
||||
|
||||
ecore_shutdown();
|
||||
|
@ -127,18 +127,18 @@ void name_owner_changed_cb(void *data, const char *bus EINA_UNUSED, const char *
|
|||
*id = new_id;
|
||||
}
|
||||
|
||||
START_TEST(edbus_test_edbus_name_owner_changed)
|
||||
START_TEST(eldbus_test_eldbus_name_owner_changed)
|
||||
{
|
||||
EDBus_Connection *conn;
|
||||
Eldbus_Connection *conn;
|
||||
const char *id = NULL;
|
||||
|
||||
ecore_init();
|
||||
edbus_init();
|
||||
eldbus_init();
|
||||
|
||||
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
|
||||
fail_if(conn == NULL);
|
||||
|
||||
edbus_name_owner_changed_callback_add(conn, "org.bus.that.not.exist",
|
||||
eldbus_name_owner_changed_callback_add(conn, "org.bus.that.not.exist",
|
||||
name_owner_changed_cb, &id, EINA_TRUE);
|
||||
ecore_timer_add(0.5, _quit_cb, NULL);
|
||||
|
||||
|
@ -146,21 +146,21 @@ START_TEST(edbus_test_edbus_name_owner_changed)
|
|||
|
||||
fail_if(id == NULL);
|
||||
|
||||
edbus_connection_unref(conn);
|
||||
eldbus_connection_unref(conn);
|
||||
|
||||
edbus_shutdown();
|
||||
eldbus_shutdown();
|
||||
ecore_shutdown();
|
||||
}
|
||||
END_TEST
|
||||
#endif
|
||||
|
||||
void edbus_test_edbus_init(TCase *tc)
|
||||
void eldbus_test_eldbus_init(TCase *tc)
|
||||
{
|
||||
tcase_add_test(tc, edbus_test_edbus);
|
||||
tcase_add_test(tc, edbus_test_edbus_main_loop);
|
||||
tcase_add_test(tc, eldbus_test_eldbus);
|
||||
tcase_add_test(tc, eldbus_test_eldbus_main_loop);
|
||||
#if 0
|
||||
tcase_add_test(tc, edbus_test_edbus_conn);
|
||||
tcase_add_test(tc, edbus_test_edbus_conn_object);
|
||||
tcase_add_test(tc, edbus_test_edbus_name_owner_changed);
|
||||
tcase_add_test(tc, eldbus_test_eldbus_conn);
|
||||
tcase_add_test(tc, eldbus_test_eldbus_conn_object);
|
||||
tcase_add_test(tc, eldbus_test_eldbus_name_owner_changed);
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue