+++ /dev/null
-#include "../common/common.h"
-#include "fota-manager.h"
-
-#define SYSTEM_INFO_BUILD_STRING "tizen.org/system/build.date"
-
-static char *build_string = NULL;
-
-char *fota_info_get_build_string()
-{
- return build_string;
-}
-
-int fota_info_checker_init()
-{
- int ret = 0;
-
- _FLOGI("Start process to get fota information");
- ret = system_info_get_platform_string(SYSTEM_INFO_BUILD_STRING, &build_string);
- if (ret != SYSTEM_INFO_ERROR_NONE) {
- _FLOGE("system_info_get_platform_string failed : %d", ret);
- return -1;
- }
-
- _FLOGI("Success to get fota information, build_string : %s", build_string);
- return 0;
-}
-
-int fota_info_checker_fini()
-{
- if (build_string)
- free(build_string);
-
- return 0;
-}
{
int ret = 0, status = 0, exec_status = 0;
char buf[MAX_BUFFER_SIZE] = {0, };
- char *appid = NULL, *old_build_string = NULL;
+ char *appid = NULL;
gchar *client_delta_path = NULL;
pid_t pid;
_FLOGI("Delta found: %s", client_delta_path);
/* 3. Check client have appropriate delta */
- ret = util_file_untar(client_delta_path, FOTA_DELTA_BUILD_STRING_DIR, FOTA_DELTA_BUILD_STRING_FILENAME);
+ ret = util_file_untar(client_delta_path, FOTA_DELTA_UPDATE_INFO_DIR, FOTA_DELTA_UPDATE_INFO_FILENAME);
if (ret < 0) {
status = -1;
goto execute_destroy;
}
-
- ret = util_file_read_single_line(FOTA_DELTA_BUILD_STRING_PATH, buf);
+ snprintf(buf, MAX_BUFFER_SIZE, "%s %s %s", DELTA_VERIFIER_BIN, DELTA_VERIFIER_BIN_LONG_ARG, FOTA_DELTA_UPDATE_INFO_PATH);
+ ret = system(buf);
if (ret < 0) {
+ _FLOGE("Delta verification failed due to an error [return code: %d].", ret);
status = -1;
goto execute_destroy;
- }
-
- old_build_string = fota_info_get_build_string();
- if(old_build_string == NULL) {
- _FLOGE("Failed to get current image build string");
- status = -1;
- goto execute_destroy;
- }
-
- if (!g_str_has_prefix(buf, FOTA_DELTA_BUILD_STRING_FULL_DELTA_PREFIX) &&
- !g_str_has_prefix(buf, old_build_string)) {
- _FLOGI("The caller doesn't have appropriate delta(%s), delta build string(%s)",
- old_build_string, buf);
+ } else if (ret > 0) {
+ _FLOGI("The delta of the caller is not compatible with this device [return code: %d].", ret);
status = -3;
goto execute_destroy;
}
}
execute_destroy:
- util_file_remove(FOTA_DELTA_BUILD_STRING_PATH);
-
if (client_delta_path)
free(client_delta_path);
#define FOTA_DELTA_FILENAME "delta.tar"
#define FOTA_DELTA_COMPRESSED_FILENAME "delta.tar.gz"
-#define FOTA_DELTA_BUILD_STRING_DIR "/tmp"
-#define FOTA_DELTA_BUILD_STRING_FILENAME "build_string.txt"
-#define FOTA_DELTA_BUILD_STRING_PATH FOTA_DELTA_BUILD_STRING_DIR "/" FOTA_DELTA_BUILD_STRING_FILENAME
-#define FOTA_DELTA_BUILD_STRING_FULL_DELTA_PREFIX "0.0@"
-
#define FOTA_STATUS_DIR "/opt/data/update"
#define FOTA_STATUS_FLAG_PATH FOTA_STATUS_DIR "/is-first-boot-after-fota"
+#define FOTA_DELTA_UPDATE_INFO_DIR "/tmp"
+#define FOTA_DELTA_UPDATE_INFO_FILENAME "update-info.ini"
+#define FOTA_DELTA_UPDATE_INFO_PATH FOTA_DELTA_UPDATE_INFO_DIR "/" FOTA_DELTA_UPDATE_INFO_FILENAME
+#define DELTA_VERIFIER_BIN "/usr/bin/delta-verifier"
+#define DELTA_VERIFIER_BIN_LONG_ARG "--update_info_path"
+
#define FOTA_EVENT_SIZE 3
/* Enum */
int fota_client_info_checker_fini(void);
char *fota_client_info_get_appid(void);
-int fota_info_checker_init(void);
-int fota_info_checker_fini(void);
-char *fota_info_get_build_string(void);
-
int fota_installer_execute(pid_t pid);
void fota_storage_checker_plug(int, const char *);
int ret = 0;
bool is_appropriate = false;
char buf[MAX_BUFFER_SIZE] = {0, };
- char *old_build_string = NULL;
gchar *storage_delta_path = NULL;
- /* 1. Check storage support current image */
- old_build_string = fota_info_get_build_string();
- if (old_build_string == NULL) {
- _FLOGE("Failed to get current image build string");
- goto verify_destroy;
- }
-
- if (g_str_has_prefix(folder_name, old_build_string) != TRUE) {
- _FLOGI("Storage doesn't support current image(%s), folder name(%s)",
- old_build_string, folder_name);
- goto verify_destroy;
- }
-
- /* 2. Check storage have delta.tar */
+ /* 1. Check storage have delta.tar */
storage_delta_path = g_strjoin("/", mount_path, folder_name, FOTA_DELTA_FILENAME, NULL);
if (!g_file_test(storage_delta_path, G_FILE_TEST_EXISTS)) {
gchar *tmp_storage_delta_path = storage_delta_path;
}
}
- /* 3. Check storage have appropriate delta */
- ret = util_file_untar(storage_delta_path, FOTA_DELTA_BUILD_STRING_DIR, FOTA_DELTA_BUILD_STRING_FILENAME);
- if (ret < 0)
+ /* 2. Check storage have appropriate delta */
+ ret = util_file_untar(storage_delta_path, FOTA_DELTA_UPDATE_INFO_DIR, FOTA_DELTA_UPDATE_INFO_FILENAME);
+ if (ret < 0) {
goto verify_destroy;
+ }
- ret = util_file_read_single_line(FOTA_DELTA_BUILD_STRING_PATH, buf);
- if (ret < 0)
- goto verify_destroy;
+ snprintf(buf, MAX_BUFFER_SIZE, "%s %s %s", DELTA_VERIFIER_BIN, DELTA_VERIFIER_BIN_LONG_ARG, FOTA_DELTA_UPDATE_INFO_PATH);
+ ret = system(buf);
- if (g_str_equal(folder_name, buf) != TRUE) {
- _FLOGI("Storage doesn't have appropriate delta(%s), delta build string(%s)",
- folder_name, buf);
+ if (ret < 0) {
+ _FLOGE("Delta verification failed due to an error [return code: %d].", ret);
+ goto verify_destroy;
+ } else if (ret > 0) {
+ _FLOGI("The delta at [%s] is not compatible with this device [return code: %d].", storage_delta_path, ret);
goto verify_destroy;
}
is_appropriate = true;
verify_destroy:
- util_file_remove(FOTA_DELTA_BUILD_STRING_PATH);
-
if (!is_appropriate && storage_delta_path) {
free(storage_delta_path);
storage_delta_path = NULL;
goto main_destroy;
}
- ret = fota_info_checker_init();
- if (ret < 0) {
- _CLOGE("Failed to initialize fota info checker : %d", ret);
- goto main_destroy;
- }
-
/* Dbus */
ret = dbus_manager_init();
if (ret < 0) {
if (ret < 0)
_CLOGW("Failed to finalize fota client info checker : %d", ret);
- ret = fota_info_checker_fini();
- if (ret < 0)
- _CLOGW("Failed to finalize fota info checker : %d", ret);
-
/* Dbus */
ret = dbus_manager_fini();
if (ret < 0)