add fota interface using dbus 58/160758/1
authorhhk86.heo <hhk86.heo@samsung.com>
Mon, 20 Nov 2017 04:40:47 +0000 (13:40 +0900)
committerhhk86.heo <hhk86.heo@samsung.com>
Mon, 20 Nov 2017 04:40:47 +0000 (13:40 +0900)
Change-Id: I355d1d586ff16e529d8fc6941201babbf11a151c

CMakeLists.txt
inc/fmwup_resource_internal.h
src/fmwup_resource_dbus.c [new file with mode: 0644]
src/fmwup_resource_internal.c
test/fmwup_test.c

index 7052ba515ee0ffda78f41f7b236f077659a319c0..8794f627686eb2a8c7d2bf78ba58f07dfaaf743d 100644 (file)
@@ -8,6 +8,7 @@ SET(FMWUP_SRCS
     ${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource.c
     ${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource_internal.c
     ${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource_http.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource_dbus.c
 )
 
 INCLUDE_DIRECTORIES(
@@ -22,7 +23,7 @@ INSTALL(FILES ${API-HEADERS} DESTINATION include/fmwup-resource)
 CONFIGURE_FILE(fmwup-resource.pc.in fmwup-resource.pc @ONLY)
 INSTALL(FILES ${CMAKE_BINARY_DIR}/fmwup-resource.pc DESTINATION ${LIBDIR}/pkgconfig)
 
-ADD_DEFINITIONS(-D_USE_WWST_)
+#ADD_DEFINITIONS(-D_USE_WWST_)
 
 INCLUDE(FindPkgConfig)
 PKG_CHECK_MODULES(fmwup_pkgs REQUIRED
index df0b21419696e3a515286a6f5771835cda8a0557..d06a09498829a7ce06321d175ed6140f3d9fcdab 100644 (file)
 #include "fmwup_resource.h"
 
 #define OC_RSRVD_FIRMWARE_URI          "/firmware"
-#ifdef _USE_WWST_
+//#ifdef _USE_WWST_
 #define OC_RSRVD_FIRMWARE_RES_TYPE                     "oic.r.firmware"
-#else
-#define OC_RSRVD_FIRMWARE_RES_TYPE                     "x.samsung.firmware"
-#endif
+//#else
+//#define OC_RSRVD_FIRMWARE_RES_TYPE                   "x.samsung.firmware"
+//#endif
 
 #define OC_RSRVD_FIRMWARE_STATE                                "state"
 #define OC_RSRVD_FIRMWARE_RESULT                       "result"
@@ -121,6 +121,8 @@ OCEntityHandlerResult fmwup_handle_firmware_entity(OCEntityHandlerFlag flag,
                                                                                OCEntityHandlerRequest *entityHandlerRequest,
                                                                                void *callbackParam);
 
+int fmwup_dbus_exec_update(const char *path);
+
 void fmwup_get_firmware_info(fmwup_s *firmware_info);
 
 int fmwup_update_command(int64_t update_type);
diff --git a/src/fmwup_resource_dbus.c b/src/fmwup_resource_dbus.c
new file mode 100644 (file)
index 0000000..0ec0ea1
--- /dev/null
@@ -0,0 +1,122 @@
+#include <fmwup_resource_internal.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#define FOTA_DBUS_NAME "org.tizen.system.tota"
+#define FOTA_DBUS_PATH "/Org/Tizen/System/Tota"
+#define FOTA_DBUS_INTERFACE "org.tizen.system.tota"
+#define FOTA_DBUS_METHOD "update"
+
+//type: system
+//Bus: org.tizen.system.tota
+//Object path: /Org/Tizen/System/Tota
+//Interface: org.tizen.system.tota
+//method: update
+//parameter: (s) (delta.tar full path)
+//$ dbus-send --print-reply --reply-timeout=120000 --system --type=method_call --dest=org.tizen.system.tota /Org/Tizen/System/Tota org.tizen.system.tota.update string:/tmp/delta.tar
+
+
+static GDBusConnection *__gdbus_conn = NULL;
+
+
+int dbus_init()
+{
+       FWR_ENTER
+       int ret = 0;
+       GError *error = NULL;
+
+       if (!__gdbus_conn) {
+               __gdbus_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+               if (__gdbus_conn == NULL) {
+                       if (error != NULL) {
+                               FWR_LOGE("g_bus_get_sync error [%s]", error->message);
+                               g_error_free(error);
+                       }
+                       ret = -1;
+               }
+       }
+
+       FWR_EXIT
+       return ret;
+}
+
+int proxy_send_command(const char *bus_name, const char *bus_obj, const char *bus_if, const char *method_name,
+                               int cmd_type, GVariant *cmd_param, GVariant **cmd_ret)
+{
+       FWR_ENTER
+       int ret = 0;
+
+       FWR_LOGI("bus_name[%s] bus_obj[%s] bus_if[%s] method_name[%s]", bus_name, bus_obj, bus_if, method_name);
+
+       ret = dbus_init();
+       if (0 != ret) {
+               FWR_LOGE("dbus_init failed");
+               goto EXIT;
+       }
+
+
+       GError *gerror = NULL;
+       GCancellable *proxy_cancel = g_cancellable_new();
+
+
+       GVariant *reply = g_dbus_connection_call_sync(
+               __gdbus_conn,
+               bus_name,
+               bus_obj,
+               bus_if,
+               method_name,
+               cmd_param,
+               NULL,
+               G_DBUS_CALL_FLAGS_NONE,
+               -1,
+               proxy_cancel,
+               &gerror);
+
+       if (!reply) {
+               FWR_LOGE("g_dbus_proxy_call_sync error [%s]",
+                       (gerror ? gerror->message : "null"));
+               ret = -1; // error code required
+               goto EXIT;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       FWR_LOGD("reply[%d]", ret);
+
+       EXIT:
+       FWR_EXIT
+       return ret;
+}
+
+
+
+int fmwup_dbus_exec_update(const char *path)
+{
+       FWR_ENTER
+
+       if (!path) {
+               FWR_LOGE("path is NULL");
+               return -1;
+       }
+
+       FWR_LOGI("path [%s]", path);
+
+       int ret = 0;
+
+       GVariant *param = g_variant_new("(s)", path);
+       GVariant *cmd_ret = NULL;
+       int cmd_type = 20;
+
+       ret = proxy_send_command(FOTA_DBUS_NAME, FOTA_DBUS_PATH, FOTA_DBUS_INTERFACE, FOTA_DBUS_METHOD,
+                       cmd_type, param, &cmd_ret);
+       if (0 != ret) {
+               FWR_LOGE("proxy_send_command failed");
+               goto _END_OF_FUNC_;
+       }
+
+_END_OF_FUNC_:
+
+       FWR_EXIT
+       return ret;
+}
index e8895181a6af2751eaa800054d0e312c782de1ae..6dc9f486b2408ce168642c241b9d458752b8d4c0 100644 (file)
@@ -87,17 +87,6 @@ OCEntityHandlerResult _check_request_payload(OCEntityHandlerRequest *ehRequest)
 }
 
 
-static void _exec_update()
-{
-       FILE* fp = fopen(UPDATE_FILE, "w");
-       if(!fp) {
-               FWR_LOGE("fopen error: %d", errno);
-               return;
-       }
-       fclose(fp);
-}
-
-
 void fmwup_propagate_firmware_resource(void)
 {
        if(OC_STACK_NO_OBSERVERS == OCNotifyAllObservers(g_firmware_resource->resource_handle, OC_HIGH_QOS)) {
@@ -136,6 +125,7 @@ void fmwup_propagate_firmware_status_resource(fmwup_update_property_e state, fmw
 
 void _handle_update_command(int64_t update_type)
 {
+       FWR_ENTER
        int result = FMWUP_RESULT_INITIAL;
 #ifdef _USE_WWST_
        char *res_header = NULL;
@@ -209,8 +199,13 @@ void _handle_update_command(int64_t update_type)
                        (update_type == FMWUP_EXEC_UPGRADE || update_type == FMWUP_EXEC_DOWNLOAD_AND_UPGRADE)) {
                fmwup_propagate_firmware_status_resource(FMWUP_STATE_UPDATING, FMWUP_RESULT_INITIAL, true);
 
-               //TODO: To upgrade using interface of fota-client
-               _exec_update();
+               /* request to update by dbus (fota client) */
+               if (fmwup_dbus_exec_update(g_download_path) != 0) {
+                       FWR_LOGE("Fota client update failed");
+                       result = FMWUP_RESULT_UPDATE_FAILED;
+                       goto _END_OF_FUNC_;
+               }
+
        }
 
 _END_OF_FUNC_:
@@ -226,6 +221,7 @@ _END_OF_FUNC_:
        g_free(request_uri);
 #endif
 
+       FWR_EXIT
        return;
 }
 
@@ -243,6 +239,7 @@ OCRepPayload* _construct_response_of_firmware()
        OCRepPayloadAddInterface(payload, OC_RSRVD_INTERFACE_DEFAULT);
        OCRepPayloadAddResourceType(payload, OC_RSRVD_FIRMWARE_RES_TYPE);
 
+
        OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_STATE, (int64_t)g_firmware_resource->state);
        OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_RESULT, (int64_t)g_firmware_resource->result);
        OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_UPDATE, (int64_t)g_firmware_resource->update);
@@ -261,6 +258,25 @@ OCRepPayload* _construct_response_of_firmware()
 
        OCRepPayloadSetPropBool(payload, OC_RSRVD_FIRMWARE_ACTIVE_CHECK, g_firmware_resource->active_check);
 
+       if (g_firmware_resource->state)
+       FWR_LOGD("firmware_update_state=[%d]", g_firmware_resource->state);
+       if (g_firmware_resource->result)
+       FWR_LOGD("firmware_update_result=[%d]", g_firmware_resource->result);
+       if (g_firmware_resource->current_version)
+       FWR_LOGD("firmware_ver=[%s]", g_firmware_resource->current_version);
+       if (g_firmware_resource->new_version)
+       FWR_LOGD("firmware_new_ver=[%s]", g_firmware_resource->new_version);
+       if (g_firmware_resource->package_uri)
+       FWR_LOGD("firmware_package_url=[%s]", g_firmware_resource->package_uri);
+       if (g_firmware_resource->package_md5)
+       FWR_LOGD("firmware_md5=[%s]", g_firmware_resource->package_md5);
+       FWR_LOGD("firmware_package_size=[%lld]", g_firmware_resource->package_size);
+
+       if (g_firmware_resource->manufacturer)
+       FWR_LOGD("manufacturer=[%s]", g_firmware_resource->manufacturer);
+       if (g_firmware_resource->model_name)
+       FWR_LOGD("model_name=[%s]", g_firmware_resource->model_name);
+
        FWR_EXIT
        return payload;
 }
@@ -482,6 +498,7 @@ OCEntityHandlerResult fmwup_handle_firmware_entity(OCEntityHandlerFlag flag,
                }
        }
 
+       OCPayloadDestroy(response.payload);
        return ehRet;
 }
 
index 2c0a1839eb4aed7eb4670df9ad682f70c5800fd3..5eb659ea7e4b7bf694d0a8f3face9e17eb910db8 100644 (file)
@@ -1027,7 +1027,7 @@ int _publish_fw_res_to_rd()
                return -1;
        }
 
-       ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), &res_handle[0], 1, &cb_data, OC_LOW_QOS);
+       ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), &res_handle[0], 1,  &cb_data, OC_LOW_QOS);
        if (ocResult != OC_STACK_OK) {
                printf("Publish Resource failed [%d]", ocResult);
                return -1;
@@ -1041,7 +1041,7 @@ int _publish_fw_res_to_rd()
 
 
 #else
-       if (OCRDPublish(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
+       if (OCRDPublish(NULL, uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
                        NULL, 0,
                        &cb_data, OC_LOW_QOS) != OC_STACK_OK) {
                printf("OCRDPublish() failed\n");
@@ -1050,7 +1050,7 @@ int _publish_fw_res_to_rd()
 
 //     _lock_and_wait();
 
-       if (OCRDPublish(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
+       if (OCRDPublish(NULL, uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
                        res_handle, 2,
                        &cb_data, OC_LOW_QOS) != OC_STACK_OK) {
                printf("OCRDPublish() failed\n");
@@ -1083,7 +1083,7 @@ int _delete_fw_res_from_rd()
                return -1;
        }
 #else
-       if (OCRDDelete(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
+       if (OCRDDelete(NULL, uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
                        res_handle, 2,
                        &cb_data, OC_LOW_QOS) != OC_STACK_OK) {
                printf("OCRDDelete() failed\n");