library - g_dbus method test api implementation 41/153641/1
authorSang-Hun Chung <sanghun.chung@samsung.com>
Fri, 29 Sep 2017 04:25:38 +0000 (13:25 +0900)
committerSang-Hun Chung <sanghun.chung@samsung.com>
Fri, 29 Sep 2017 04:25:38 +0000 (13:25 +0900)
Change-Id: I177d40d3fe63e88e2e76b48250894d965ef5549c

.cproject
.tproject
inc/static_internal.h [new file with mode: 0755]
inc/staticlibrary.h
src/tizen-service-enabler-common.c [new file with mode: 0755]
src/tizen-service-enabler-lib.c

index 51bb893a6466eb6f6db8bfc1b2577eba5314f15a..8f1dcc73ce098df6558fd1e450a7e0f27d71fdc3 100644 (file)
--- a/.cproject
+++ b/.cproject
                                                                <option defaultValue="gnu.cpp.compiler.debugging.level.max" id="sbi.gnu.cpp.compiler.option.debugging.level.core.1325773523" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
                                                                <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.2136297964" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
                                                                <option id="sbi.gnu.cpp.compiler.option.456295861" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-3.0-device.core_llvm37.armel.core.staticLib"/>
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-device.core_llvm40.armel"/>
                                                                </option>
                                                                <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1847717959" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
                                                                <option defaultValue="gnu.c.debugging.level.max" id="sbi.gnu.c.compiler.option.debugging.level.core.1791860215" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
                                                                <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.1838685288" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
                                                                <option id="sbi.gnu.c.compiler.option.38604689" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-3.0-device.core_llvm37.armel.core.staticLib"/>
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-device.core_llvm40.armel"/>
                                                                </option>
                                                                <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.951430616" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
                                                                </option>
                                                        </tool>
-                                                       <tool command="arm-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.2077134318" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                       <tool command="#{PLATFORM_DEFAULT_GCC_PREFIX}as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.2077134318" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
                                                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.309089173" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
                                                        </tool>
                                                        <tool id="org.tizen.nativecore.tool.fnmapgen.49758331" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
                                                <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.lib.release.1355058034" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.lib.release">
                                                        <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.67270535" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
                                                        <builder buildPath="${workspace_loc:/tizen-service-enabler-lib}/Release" id="org.tizen.nativecore.target.sbi.gnu.builder.578292414" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1024277500" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="i586-linux-gnueabi-ar" id="org.tizen.nativecore.tool.sbi.gnu.archiver.1024277500" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
                                                        <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1890593159" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
                                                                <option id="gnu.cpp.compiler.option.optimization.level.1721826137" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
                                                                <option defaultValue="gnu.cpp.compiler.debugging.level.none" id="sbi.gnu.cpp.compiler.option.debugging.level.core.1675293347" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level.core" valueType="enumerated"/>
                                                                <option defaultValue="false" id="sbi.gnu.cpp.compiler.option.misc.pic.core.519760806" name="-fPIC option" superClass="sbi.gnu.cpp.compiler.option.misc.pic.core" valueType="boolean"/>
                                                                <option id="sbi.gnu.cpp.compiler.option.1016578643" name="Tizen-Target" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-3.0-emulator.core_llvm37.i386.core.app"/>
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-emulator.core_llvm40.i386"/>
                                                                </option>
                                                                <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1998759441" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
                                                                <option defaultValue="gnu.c.debugging.level.none" id="sbi.gnu.c.compiler.option.debugging.level.core.844782492" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level.core" valueType="enumerated"/>
                                                                <option defaultValue="false" id="sbi.gnu.c.compiler.option.misc.pic.core.1924273047" name="-fPIC option" superClass="sbi.gnu.c.compiler.option.misc.pic.core" valueType="boolean"/>
                                                                <option id="sbi.gnu.c.compiler.option.1909906144" name="Tizen-Target" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-3.0-emulator.core_llvm37.i386.core.app"/>
+                                                                       <listOptionValue builtIn="false" value="mobile-4.0-emulator.core_llvm40.i386"/>
                                                                </option>
                                                                <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1163877447" name="Tizen-Frameworks-Include-Path" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/asp/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/nsd/&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/privacy-privilege-manager/&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/SDL2&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/service-adaptor&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
                                                                        <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
                                                                </option>
                                                        </tool>
-                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.236641292" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                       <tool command="#{PLATFORM_DEFAULT_GCC_PREFIX}as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.236641292" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
                                                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1387123853" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
                                                        </tool>
                                                        <tool id="org.tizen.nativecore.tool.fnmapgen.1596873326" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
index 56660b2fd003072244ba4be2385f2e3c27f8a780..468a8344f3f958decf4dac574e37f96713cc9e93 100644 (file)
--- a/.tproject
+++ b/.tproject
@@ -2,7 +2,7 @@
 <tproject xmlns="http://www.tizen.org/tproject">
     <platforms>
         <platform>
-            <name>mobile-3.0</name>
+            <name>mobile-4.0</name>
         </platform>
     </platforms>
     <package>
diff --git a/inc/static_internal.h b/inc/static_internal.h
new file mode 100755 (executable)
index 0000000..3ffb5ac
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _STATIC_INTERNAL_H_
+#define _STATIC_INTERNAL_H_
+
+/**
+ * This header file is included to define _EXPORT_.
+ */
+#include <stdbool.h>
+#include <gio/gio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int proxy_send_command(const char *bus_name, const char *bus_obj, const char *bus_if,
+                               int cmd_type, GVariant *cmd_param, GVariant **cmd_ret);
+
+
+typedef void (*proxy_cb)(int error, GVariant* ret, void* user_data);
+
+int proxy_send_command_async(const char *bus_name, const char *bus_obj, const char *bus_if,
+                               int cmd_type, GVariant *data, proxy_cb user_cb, void *user_data);
+
+
+int dbus_init();
+
+int register_dbus_interface(const char *bus_name, const char *bus_obj, const char *bus_if);
+
+#ifdef __cplusplus
+}
+#endif
+#endif // _STATIC_INTERNAL_H_
+
index ea21d8cc47b694e82d9d90ff7bbf9caf61e6fd28..acc33b4c22a1074cf645c7dabfadcbdff2d7c4ba 100755 (executable)
@@ -11,9 +11,14 @@ extern "C" {
 #endif
 
 // This method is exported from staticlibrary.a
-extern int test_sum(int a, int b);
-typedef void (*hello_cb)(int result, char* echo, void* user_data);
-extern int hello(hello_cb user_cb, void* user_data);
+int test_sum(int a, int b);
+
+int hello(char *hi, char **echo);
+
+typedef void (*bye_cb)(int error, char *echo, void* user_data);
+
+int bye(char* str, bye_cb user_cb, void* user_data);
+
 extern int get_name_by_id(int id, char** name);
 
 typedef enum {
diff --git a/src/tizen-service-enabler-common.c b/src/tizen-service-enabler-common.c
new file mode 100755 (executable)
index 0000000..d7f2820
--- /dev/null
@@ -0,0 +1,319 @@
+#include <dlog.h>
+#include <glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include "static_internal.h"
+
+#ifdef  LOG_TAG
+#undef  LOG_TAG
+#endif
+#define LOG_TAG "FMW_LIB"
+#define DEBUG_LOG(fmt, ...) do { \
+               dlog_print(DLOG_INFO, LOG_TAG, "%s : %s(%d) > "fmt, rindex(__FILE__, '/')+1, __FUNCTION__, __LINE__,##__VA_ARGS__);\
+       } while (0)
+
+
+#define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
+#define DBUS_PATH_DBUS "/org/freedesktop/DBus"
+#define DBUS_INTERFACE_DBUS "org.freedesktop.DBus"
+
+static GDBusConnection *__gdbus_conn = NULL;
+
+
+int default_handler(int cmd_type, GVariant *input, GVariant **cmd_ret)
+{
+       char *hi;
+       int err = 0;
+
+       if (!cmd_ret) {
+               return -1; // error code required
+       }
+
+       g_variant_get(input, "s", &hi);
+       DEBUG_LOG("cmd_type[%d], param[%s]", cmd_type, hi);
+
+       char *tmp = g_strdup_printf("you said [%s]", hi);
+       *cmd_ret = g_variant_new("s", tmp);
+
+       return err;
+}
+
+GVariant* stub_send_command(GVariant *parameters)
+{
+       DEBUG_LOG("");
+
+       gint cmd_type;
+       GVariant *val;
+       GVariant *ret = NULL;
+       GVariant *cmd_ret = NULL;
+       int cmd_error = 0;
+
+//     sleep(1);
+
+       g_variant_get(parameters, "(iv)", &cmd_type, &val);
+
+       switch (cmd_type) {
+               case 20: {
+                       cmd_error = default_handler(cmd_type, val, &cmd_ret);
+               }
+
+       }
+
+       if (cmd_error != 0) {
+               cmd_ret = g_variant_new("s", " ");
+       }
+       ret = g_variant_new("(iv)", cmd_error, cmd_ret );
+
+       return ret;
+}
+
+
+int proxy_send_command(const char *bus_name, const char *bus_obj, const char *bus_if,
+                               int cmd_type, GVariant *cmd_param, GVariant **cmd_ret)
+{
+       DEBUG_LOG("2");
+       int ret = 0;
+
+       GError *gerror = NULL;
+       GCancellable *proxy_cancel = g_cancellable_new();
+       DEBUG_LOG("cmd[%d]", cmd_type);
+       GVariant *params = g_variant_new("(iv)", cmd_type, cmd_param);
+
+
+       GVariant *result = g_dbus_connection_call_sync(
+                       __gdbus_conn,
+                       bus_name,
+                       bus_obj,
+                       bus_if,
+                       "send_command",
+                       params,
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE,
+                       -1,
+                       proxy_cancel,
+                       &gerror);
+
+       if (!result) {
+               DEBUG_LOG("g_dbus_proxy_call_sync 'send_command' error [%s]",
+                                 (gerror ? gerror->message : "null"));
+               ret = -1; // error code required
+               goto EXIT;
+       }
+
+       g_variant_get(result, "(iv)", &ret, cmd_ret);
+       DEBUG_LOG("error[%d]", ret);
+
+EXIT:
+       return ret;
+}
+
+
+typedef struct {
+       proxy_cb _cb;
+       void* _data;
+} proxy_data_t;
+
+
+void _proxy_wrapper_cb (GObject *gobj, GAsyncResult *res, gpointer user_data)
+{
+       DEBUG_LOG ("");
+
+       GError *gerror;
+       GVariant *result, *val;
+       int error = 0; // error enum required
+
+       gerror = NULL;
+       result = g_dbus_connection_call_finish (__gdbus_conn, res, &gerror);
+       if (!result) {
+               error = -1; // error enum required
+               val = g_variant_new("()");
+               DEBUG_LOG("g_dbus_connection_call_finish error [%s]",
+                                               (gerror ? gerror->message : "null"));
+       }
+       else {
+               g_variant_get (result, "(iv)", &error, &val); // error type passing required
+       }
+       proxy_data_t *_wrapper = (proxy_data_t*) user_data;
+       _wrapper->_cb(error, val, _wrapper->_data);
+}
+
+
+int proxy_send_command_async(const char *bus_name, const char *bus_obj, const char *bus_if,
+                               int cmd_type, GVariant *data, proxy_cb user_cb, void* user_data)
+{
+       DEBUG_LOG("async begin");
+       int ret = 0;
+
+       GCancellable *proxy_cancel = g_cancellable_new();
+       DEBUG_LOG("cmd[%d]", cmd_type);
+       GVariant *params = g_variant_new("(iv)", cmd_type, data);
+
+       proxy_data_t *_wrapper = (void*) malloc(sizeof(proxy_data_t));
+       if (!_wrapper) {
+               DEBUG_LOG("malloc error");
+               return -1; // error enum required
+       }
+       _wrapper->_cb = user_cb;
+       _wrapper->_data = user_data;
+
+
+       g_dbus_connection_call(
+                       __gdbus_conn,
+                       bus_name,
+                       bus_obj,
+                       bus_if,
+                       "send_command",
+                       params,
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE,
+                       -1,
+                       proxy_cancel,
+                       _proxy_wrapper_cb,
+                       _wrapper);
+
+
+       return ret;
+}
+
+
+static void __dbus_method_call_handler(GDBusConnection *conn,
+                               const gchar *sender, const gchar *object_path,
+                               const gchar *iface_name, const gchar *method_name,
+                               GVariant *parameters, GDBusMethodInvocation *invocation,
+                               gpointer user_data)
+{
+       DEBUG_LOG("method_name: %s", method_name);
+/*      gpointer sender_pid = g_hash_table_lookup(__sender_appid_hash, sender);
+       if (sender_pid == NULL) {
+               if (!__check_sender_validation(parameters, sender, conn))
+                       goto out;
+       }
+*/
+       GVariant *ret = NULL;
+       if (g_strcmp0(method_name, "send_command") == 0)
+               ret = stub_send_command(parameters);
+
+       g_dbus_method_invocation_return_value(invocation, ret);
+}
+
+
+static const GDBusInterfaceVTable interface_vtable = {
+       __dbus_method_call_handler,
+       NULL,
+       NULL
+};
+
+
+int dbus_init()
+{
+       DEBUG_LOG("");
+       int ret = -1;
+       GError *error = NULL;
+
+       __gdbus_conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
+       if (__gdbus_conn == NULL) {
+               if (error != NULL) {
+                       DEBUG_LOG("g_bus_get_sync error [%s]", error->message);
+                       g_error_free(error);
+               }
+               goto out;
+       }
+
+       ret = 0;
+
+out:
+       if (!__gdbus_conn)
+               g_object_unref(__gdbus_conn);
+
+       return ret;
+
+}
+
+
+int register_dbus_interface(const char *bus_name, const char *bus_obj, const char *bus_if)
+{
+       /* check param */
+       DEBUG_LOG("%s %s %s", bus_name, bus_obj, bus_if);
+       GDBusNodeInfo *introspection_data = NULL;
+       int registration_id = 0;
+
+
+       static gchar introspection_prefix[] =
+               "<node>"
+               "  <interface name='";
+
+       static gchar introspection_postfix[] =
+               "'>"
+               "        <method name='send_command'>"
+               "          <arg type='i' name='cmd' direction='in'/>"
+               "          <arg type='v' name='data' direction='in'/>"
+               "          <arg type='i' name='error' direction='out'/>"
+               "          <arg type='v' name='ret' direction='out'/>"
+               "        </method>"
+               "  </interface>"
+               "</node>";
+
+       char *introspection_xml = g_strdup_printf("%s%s%s",
+                                               introspection_prefix, bus_if, introspection_postfix);
+       int owner_id = 0;
+       GError *error = NULL;
+       GVariant *result = NULL;
+
+       DEBUG_LOG("xml[%s]", introspection_xml);
+
+
+       result = g_dbus_connection_call_sync(
+                       __gdbus_conn,
+                       DBUS_SERVICE_DBUS,
+                       DBUS_PATH_DBUS,
+                       DBUS_INTERFACE_DBUS,
+                       "RequestName",
+                       g_variant_new("(su)", bus_name, G_BUS_NAME_OWNER_FLAGS_NONE),
+                       G_VARIANT_TYPE("(u)"),
+                       G_DBUS_CALL_FLAGS_NONE,
+                       -1,
+                       NULL,
+                       &error);
+       if (error) {
+               DEBUG_LOG("RequestName fail : %s", error->message);
+               goto out;
+       }
+       if (result == NULL) {
+               DEBUG_LOG("fail to get name NULL");
+               goto out;
+       }
+       g_variant_get(result, "(u)", &owner_id);
+       if (owner_id == 0) {
+               DEBUG_LOG("Acquiring the own name is failed");
+               goto out;
+       }
+
+       DEBUG_LOG("Acquiring the own name : %d", owner_id);
+
+       introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, NULL);
+       if (!introspection_data) {
+               DEBUG_LOG("g_dbus_node_info_new_for_xml() is failed.");
+               goto out;
+       }
+
+       registration_id = g_dbus_connection_register_object(__gdbus_conn,
+                                               bus_obj, introspection_data->interfaces[0],
+                                               &interface_vtable, NULL, NULL, NULL);
+
+       DEBUG_LOG("registration_id %d", registration_id);
+
+       if (registration_id == 0) {
+               DEBUG_LOG("Failed to g_dbus_connection_register_object");
+               goto out;
+       }
+
+out:
+       if (introspection_data)
+               g_dbus_node_info_unref(introspection_data);
+       if (result)
+               g_variant_unref(result);
+
+       return registration_id;
+}
+
+
index 229103242406fcfbfd15c72b42db3679e11f51bf..c07fb8bb0ef0a75e6af957358203d513ca284c60 100755 (executable)
@@ -1,5 +1,3 @@
-#define USE_G_DBUS
-
 /**
  * This file contains the exported symbol.
  */
 #include <glib.h>
 #include <sqlite3.h>
 
-#ifdef USE_G_DBUS
+#include "staticlibrary.h"
+#include "static_internal.h"
 
 #include <gio/gio.h>
 
-#define SERVICE_ENABLER_NAME "org.example.tizen-service-enabler"
+#define SERVICE_ENABLER_NAME "org.example.TizenServiceEnabler"
 #define SERVICE_ENABLER_PATH "/org/example/TizenServiceEnabler"
 #define SERVICE_ENABLER_INTERFACE "org.example.TizenServiceEnabler"
 
 
-#endif
-
 
 #ifdef  LOG_TAG
 #undef  LOG_TAG
@@ -33,7 +30,7 @@
        } while (0)
 
 typedef struct {
-       hello_cb _cb;
+       bye_cb _cb;
        void* _data;
 } result_t;
 
@@ -45,107 +42,67 @@ test_sum(int a, int b)
        return a+b;
 }
 
-static void
-_wrapper_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
+int
+hello(char *hi, char **echo)
 {
-       DEBUG_LOG("");
-       result_t *_ud = (result_t*) user_data;
-       hello_cb func = _ud->_cb;
+       DEBUG_LOG("hello called");
+       int ret = 0;
 
-       int result_param = (result == APP_CONTROL_ERROR_NONE)? 0 : result;
-       DEBUG_LOG("result %d", result);
+       dbus_init();
+       int cmd_type = 20;
+       GVariant *param = g_variant_new("s", hi);
+       GVariant *cmd_ret = NULL;
+       ret = proxy_send_command(SERVICE_ENABLER_NAME, SERVICE_ENABLER_PATH, SERVICE_ENABLER_INTERFACE,
+               cmd_type, param, &cmd_ret);
 
-       char *_echo = NULL;
-       int ret = app_control_get_extra_data(reply, "echo", &_echo);
-       if (ret != APP_CONTROL_ERROR_NONE) {
-               DEBUG_LOG("ret %d", ret);
-       }
+       g_variant_get(cmd_ret, "s", echo);
 
-       func(result_param, _echo, _ud->_data);
-       g_free(_echo);
+       return ret;
 }
 
+typedef struct {
+       bye_cb _cb;
+       void* _data;
+} bye_wrapper_t;
+
+ // proxy_cb type
+void _bye_wrapper_cb(int error, GVariant* ret, void* user_data)
+{
+       bye_wrapper_t *_wrapper = (bye_wrapper_t *) user_data;
+       char *echo = NULL;
+
+       if (error == 0) {
+               g_variant_get(ret, "s", &echo);
+       }
+       _wrapper->_cb(error, echo, _wrapper->_data);
+}
 
 
 int
-hello(hello_cb user_cb, void* user_data)
+bye(char *str, bye_cb user_cb, void* user_data)
 {
        DEBUG_LOG("hello called");
        int ret = 0;
 
-#ifdef USE_G_DBUS
-
-       GError *gerror = NULL;
-       GCancellable *proxy_cancel = g_cancellable_new();
-       GDBusProxy* bproxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION,
-                                   G_DBUS_PROXY_FLAGS_NONE,
-                                   NULL,
-                                   SERVICE_ENABLER_NAME,
-                                   SERVICE_ENABLER_PATH,
-                                   SERVICE_ENABLER_INTERFACE,
-                                   proxy_cancel,
-                                   &gerror);
-
-       if (!bproxy) {
-               DEBUG_LOG("g_dbus_proxy_new_for_bus_sync error [%s]",
-                                 (gerror ? gerror->message : "null"));
-               ret = -1;
-               goto EXIT;
-       }
-
-       GVariant *result = g_dbus_proxy_call_sync(bproxy,
-                        "Hello",
-                        g_variant_new("(i)", getpid()),
-                        G_DBUS_CALL_FLAGS_NONE,
-                        5000,  /* msec, 5s*/
-                        NULL,
-                        &gerror);
+       dbus_init();
+       int cmd_type = 30;
+       GVariant *param = g_variant_new("s", str);
 
-
-       if (!result) {
-               DEBUG_LOG("g_dbus_proxy_call_sync 'Hello' error [%s]",
-                                 (gerror ? gerror->message : "null"));
-               ret = -1;
-               goto EXIT;
+       bye_wrapper_t *_wrapper = (bye_wrapper_t *) malloc(sizeof(bye_wrapper_t));
+       if (!_wrapper) {
+               DEBUG_LOG("malloc error");
+               return -1; // error code required
        }
+       _wrapper->_cb = user_cb;
+       _wrapper->_data = user_data;
 
-       g_variant_get(result, "(i)", &ret);
-
-EXIT:
-       if (bproxy)
-               g_object_unref(bproxy);
-
-       if (proxy_cancel)
-               g_object_unref(proxy_cancel);
-
-       if (gerror)
-               g_error_free(gerror);
+       proxy_send_command_async(SERVICE_ENABLER_NAME, SERVICE_ENABLER_PATH, SERVICE_ENABLER_INTERFACE,
+                       cmd_type, param, _bye_wrapper_cb, (void*) _wrapper);
 
        return ret;
 
-#else
-
-       result_t *_result = (void*) malloc(sizeof(result_t));
-       _result->_cb = user_cb;
-       _result->_data = user_data;
-
-       app_control_h request;
-       app_control_create(&request);
-       app_control_set_app_id(request, "org.example.tizen-service-enabler");
-       app_control_set_operation(request, "http://tizen.org/appcontrol/operation/cloud-service/hi");
-
-       ret = app_control_send_launch_request(request, _wrapper_cb, (void*)_result);
-       if (ret != APP_CONTROL_ERROR_NONE) {
-               DEBUG_LOG("app_control_send_launch_request error %d", ret);
-               return ret;
-       }
-       return ret;
-#endif
-
-
 }
 
-
 //access other module's DB
 int get_name_by_id(int id, char** name)
 {