diff options
Diffstat (limited to 'src/plugins/dm-private/lawmo/src/plugin_interface.c')
-rwxr-xr-x | src/plugins/dm-private/lawmo/src/plugin_interface.c | 687 |
1 files changed, 687 insertions, 0 deletions
diff --git a/src/plugins/dm-private/lawmo/src/plugin_interface.c b/src/plugins/dm-private/lawmo/src/plugin_interface.c new file mode 100755 index 0000000..cbf5215 --- /dev/null +++ b/src/plugins/dm-private/lawmo/src/plugin_interface.c @@ -0,0 +1,687 @@ +/* + * oma-dm-agent + * Copyright (c) 2012 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <unistd.h> +#include <glib.h> +#include <glib/gprintf.h> +#include <vconf.h> + +/*sync-agent*/ +#include <sync_agent.h> + +#include "plugin_devexe_error.h" + +#ifndef EXPORT_API +#define EXPORT_API __attribute__ ((visibility("default"))) +#endif + +#ifndef OMADM_AGENT_LOG +#undef LOG_TAG +#define LOG_TAG "PLUGIN_LAWMO" +#endif + +#define SERVER_NUM 1 + +#define ROOT "./Ext/OSPS" + +typedef enum { + FULLY_LOCK, + PARTAILLY_LOCK, + UNLOCK, + FACTORY_RESET, + WIPE, + + RING_START, + RING_STOP, + + MT_LOCATION, + MT_STOP, + MT_TRACKING, + + FW_DIVERTREQUEST, + + MK_LOCK +} lawmo_ext_name_e; + +typedef int (*Execute_Device) (int plugin_name, ...); +typedef struct { + lawmo_ext_name_e ext_name; + char *main_path; /* path except to root path */ + Execute_Device func_execute_device; +} ext_function_s; + +static sync_agent_dev_return_e _fully_lock(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _partially_lock(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _unlock(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _factory_reset(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _remote_wipe(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _ring_my_phone_start(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _ring_my_phone_stop(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _mobile_tracking_get_location(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _mobile_tracking_operation_stop(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _mobile_tracking_operation(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _forwarding_diver_request(int platform, int *err_num, int check_operation); +static sync_agent_dev_return_e _master_key_lock_release(int platform, int *err_num, int check_operation); + +static ext_function_s ext_functions[] = { + + /* Lock & Wipe */ + {FULLY_LOCK, "LAWMO/OSP/Operations/FullyLock", (Execute_Device) _fully_lock}, + {PARTAILLY_LOCK, "LAWMO/OSP/Operations/PartiallyLock", (Execute_Device) _partially_lock}, + {UNLOCK, "LAWMO/OSP/Operations/UnLock", (Execute_Device) _unlock}, + {FACTORY_RESET, "LAWMO/OSP/Operations/FactoryReset", (Execute_Device) _factory_reset}, + {WIPE, "LAWMO/OSP/Operations/Wipe", (Execute_Device) _remote_wipe}, + /* TODO : should add the lock&wipe interface */ + + /* Ring My Phone */ + /* TODO */ + {RING_START, "LAWMO/OSP/Ext/RingMyPhone/Operations/Start", (Execute_Device) _ring_my_phone_start}, + {RING_STOP, "LAWMO/OSP/Ext/RingMyPhone/Operations/Stop", (Execute_Device) _ring_my_phone_stop}, + + /* Location */ + /* TODO */ + {MT_LOCATION, "MobileTraking/Operation/Get/Location", (Execute_Device) _mobile_tracking_get_location}, + {MT_STOP, "MobileTracking/Operations/Stop", (Execute_Device) _mobile_tracking_operation_stop}, + {MT_TRACKING, "MobileTracking/Operations/Tracking", (Execute_Device) _mobile_tracking_operation}, + + /* Forwarding */ + /* TODO */ + {FW_DIVERTREQUEST, "Forwarding/Operations/DivertRequest", (Execute_Device) _forwarding_diver_request}, + + /* MasterKey */ + /* TODO */ + {MK_LOCK, "MasterKey/Operations/LockRelease", (Execute_Device) _master_key_lock_release}, + + {0, 0} /* end array */ +}; + +static sync_agent_get_devinfo_cb func_get_dev_Info = 0; + +/* static function */ +static char *_get_main_path(const char *mo_path); + +//static int _get_index(const char *name); +//static char *_get_mo_value_str(const char *vconf_key, int n_index); + +EXPORT_API char **sync_agent_plugin_get_server_id_list(int *server_id_list_cnt) +{ + _EXTERN_FUNC_ENTER; +/* + *server_id_list_cnt = 0; + char **temp_id_list = (char **)calloc(SERVER_NUM, sizeof(char *)); + if (temp_id_list == NULL) { + _EXTERN_FUNC_EXIT; + return 0; + } + + char *sever_name = 0; + int server_idx = 0; + char *server_id = 0; + + int i; + for (i = 0; i < SERVER_NUM; i++) { + + switch (i) { + case 0: + sever_name = ALTER_SYNCMLDM_ACCNAME_1; + break; + case 1: + sever_name = ALTER_SYNCMLDM_ACCNAME_2; + break; + } + + server_idx = _get_index(sever_name); + server_id = _get_mo_value_str(CSC_VCONF_KEY_SYNCMLDM_SERVID, server_idx); + if (server_id == NULL) { + switch(i){ + case 0: + server_id = strdup(ALTER_SYNCMLDM_SERVID_1); + break; + case 1: + server_id = strdup(ALTER_SYNCMLDM_SERVID_2); + break; + } + } + _DEBUG_INFO("Temp_id_list[%d] = %s\n", i, server_id); + temp_id_list[i] = server_id; + (*server_id_list_cnt)++; + } + _DEBUG_INFO("server_id_list_cnt = %d\n", *server_id_list_cnt); + + _EXTERN_FUNC_EXIT; + return temp_id_list; +*/ + *server_id_list_cnt = 1; + char **temp_id_list = (char **)calloc(SERVER_NUM, sizeof(char *)); + if (temp_id_list == NULL) { + _EXTERN_FUNC_EXIT; + return NULL; + } + char *server_id = NULL; + server_id = strdup("*"); + *temp_id_list = server_id; + + _DEBUG_INFO("lawmo server_id = %s\n", server_id); + _DEBUG_INFO("lawmo server_id_list_cnt = %d\n", *server_id_list_cnt); + + _EXTERN_FUNC_EXIT; + return temp_id_list; +} + +EXPORT_API int sync_agent_plugin_get_mo_value(const char *mo_pull_path, const char *mo_name, char **mo_value) +{ + _EXTERN_FUNC_ENTER; + + _DEBUG_INFO("mo_name : %s", mo_name); + *mo_value = 0; + + if (mo_pull_path == NULL || mo_name == NULL) { + return -1; + } + + _DEBUG_INFO("mo_value : %s", *mo_value); + + _EXTERN_FUNC_EXIT; + return 0; +} + +EXPORT_API void sync_agent_plugin_set_function_get_devinfo(sync_agent_get_devinfo_cb func) +{ + _EXTERN_FUNC_ENTER; + + func_get_dev_Info = func; + + _EXTERN_FUNC_EXIT; +} + +EXPORT_API int sync_agent_plugin_initialize() +{ + _EXTERN_FUNC_ENTER; + + int result = 0; + result = 0; //req_fmm_server_reg(NULL); + /* + if (result != 0) { + goto error; + } + */ + _EXTERN_FUNC_EXIT; + return 1; +/* + error: + _EXTERN_FUNC_EXIT; + return -1; // Fail +*/ +} + +EXPORT_API int sync_agent_plugin_execute_ext(const char *mo_path, int *err_num, int check_operation) +{ + _EXTERN_FUNC_ENTER; + + if (mo_path == NULL) { + _DEBUG_INFO("mo_path is NULL\n"); + _EXTERN_FUNC_EXIT; + return 0; + } + _DEBUG_INFO("mo_path = %s\n", mo_path); + + char *main_path = _get_main_path(mo_path); + if (main_path == NULL) { + _DEBUG_INFO("main_path is NULL\n"); + _EXTERN_FUNC_EXIT; + return 0; + } + _DEBUG_INFO("main_path = %s\n", main_path); + + int ret = 1; + int slp_exe_ret = 1; + + int i = 0; + while (ext_functions[i].main_path != 0 && ext_functions[i].func_execute_device != 0) { + _DEBUG_INFO("oper 1 %s", main_path); + _DEBUG_INFO("oper 2 %s", ext_functions[i].main_path); + if (strcmp(main_path, ext_functions[i].main_path) == 0) { + _DEBUG_INFO("%s Part", main_path); + + slp_exe_ret = ext_functions[i].func_execute_device(1, err_num, check_operation); + _DEBUG_INFO("execute return : %d", slp_exe_ret); + + if (slp_exe_ret != SYNC_AGENT_DEV_RETURN_SUCCESS) { + ret = 0; + _DEBUG_INFO("--------------------------------------lawmo operation fail : %d---------------------------------\n", (*err_num)); + } else { + //*err_num = __convert_errcode(ext_functions[i].ext_name, slp_exe_ret); + _DEBUG_INFO("--------------------------------------lawmo result value : %d---------------------------------\n", (*err_num)); + } + break; + } else { + _DEBUG_INFO("--------------------------------------not search lawmo operation---------------------------------\n"); + } + i++; + } + + if (main_path != NULL) + free(main_path); + + _EXTERN_FUNC_EXIT; + return ret; +} + +static char *_get_main_path(const char *mo_path) +{ + _INNER_FUNC_ENTER; + + int root_length = strlen(ROOT); + int mo_path_length = strlen(mo_path); + + char *main_path = 0; + + char *ptr = strstr(mo_path, ROOT); + if (ptr != NULL && root_length < mo_path_length) { + _DEBUG_TRACE("%s Search Success !!\n", ROOT); + main_path = g_strdup_printf("%s", mo_path + (root_length + 1)); + } + + _INNER_FUNC_EXIT; + + return main_path; +} + +/* +static int _get_index(const char *name) +{ + _INNER_FUNC_ENTER; + + if (name == NULL) { + return -1; + } + + int n_acc_count = 0; + if (vconf_get_int(CSC_VCONF_KEY_SYNCMLDM_NBFIELD, &n_acc_count)) { + _DEBUG_TRACE("vconf_get_int FAIL"); + //return -1; + n_acc_count =ALTER_SYNCMLDM_NBFIELD; + } + + _DEBUG_TRACE("nAccCount : %d", n_acc_count); + + int i = 0; + for (; i < n_acc_count; i++) { + char *compare_name = _get_mo_value_str(CSC_VCONF_KEY_SYNCMLDM_ACCNAME, i + 1); + if (compare_name == NULL) { + switch(i) { + case 0: + compare_name = ALTER_SYNCMLDM_ACCNAME_1; + break; + case 1: + compare_name = ALTER_SYNCMLDM_ACCNAME_2; + break; + default : + continue; + break; + } + } + _DEBUG_TRACE("[%d] compare_name : %s [%d], name : %s [%d]", i, compare_name, strlen(compare_name), name, strlen(name)); + if (!strcmp(name, compare_name)) { + _DEBUG_TRACE("nIndex : %d", i + 1); + _INNER_FUNC_EXIT; + return i + 1; + } + } + + _INNER_FUNC_EXIT; + return -1; +} + +static char *_get_mo_value_str(const char *vconf_key, int n_index) +{ + _INNER_FUNC_ENTER; + + if (n_index == -1) { + _INNER_FUNC_EXIT; + return 0; + } + + char input_vconf_path[200] = { 0, }; + char rec_idx[8]; + + memset(rec_idx, 0x0, sizeof(rec_idx)); + snprintf(rec_idx, sizeof(rec_idx), "%d", n_index); + snprintf(input_vconf_path, strlen(vconf_key) + strlen(rec_idx) + 1, vconf_key, n_index); + + char *value = vconf_get_str(input_vconf_path); + if (value == NULL) { + _DEBUG_TRACE("vconf_get_str FAIL"); + } + + _INNER_FUNC_EXIT; + + return value; +} +*/ + +static sync_agent_dev_return_e _fully_lock(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + + /* AMT OFF */ + _DEBUG_TRACE("====================Fully_Lock==================== \n"); + _DEBUG_TRACE("check_operarion [%d]\n", check_operation); + + int return_value; + + if (check_operation == 1) { + _DEBUG_TRACE("checked : 1 =======return 202 =======\n"); + *err_num = 202; + } else { + + return_value = EXE_SUCCESS; //exec_fully_lock(); + _DEBUG_TRACE("checked : 0 =======return :%d =======\n", return_value); + /* + if (return_value == EXE_SUCCESS) { + *err_num = OPERATION_SUCCEEDED; + } else { + *err_num = CLIENT_ERROR; + } + */ + } + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; + +} + +static sync_agent_dev_return_e _partially_lock(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + + /* AMT OFF */ + _DEBUG_TRACE("====================Partially_Lock==================== \n"); + sleep(3); + int return_value = OPERATION_SUCCEEDED; + /* + return PARTIALLY_LOCK_DEVICE_FAILED; + sync_agent_execute_dev_function(2, "partial_lock", 0); + vconf_get_bool(VCONFKEY_SETAPPL_FIND_MY_MOBILE_REMOTE_CONTROL_BOOL, &rc_status)); + if(true) + return_value = 1200; + else + return_value = 1452; + */ + *err_num = return_value; + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _unlock(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + + /* AMT OFF */ + _DEBUG_TRACE("====================UnLock==================== \n"); + _DEBUG_TRACE("check_operarion [%d]\n", check_operation); + + int return_value = OPERATION_SUCCEEDED; + + *err_num = return_value; + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _factory_reset(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + + /* AMT OFF */ + _DEBUG_TRACE("====================Factory_Reset==================== \n"); + int return_value = OPERATION_SUCCEEDED; + sleep(3); + /* + vconf_get_bool(VCONFKEY_SETAPPL_FIND_MY_MOBILE_REMOTE_CONTROL_BOOL, &rc_status)); + if(true) + return_value = 1200; + else + return_value = 1452; + */ + *err_num = return_value; + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _remote_wipe(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + /* AMT OFF */ + _DEBUG_TRACE("====================Remote_Wipe==================== \n"); + + int return_value = 202; + if (check_operation == 1) { + /* + vconf_get_bool(VCONFKEY_SETAPPL_FIND_MY_MOBILE_REMOTE_CONTROL_BOOL, &rc_status)); + if(true) + return_value = 202; + else + return_value = 1452; + */ + *err_num = return_value; + } else { + return_value = OPERATION_SUCCEEDED; //exec_wipe_out(); + g_printf("checked : 0 =======return :%d =======\n", return_value); + *err_num = return_value; + } + /* + sync_agent_execute_dev_function(2, "factory_reset", 0); + return WIPE_OPERATION_NOT_PERFORMED; + return WIPE_DEVICES_DATA_FAILED; + return EXTERNAL_AND_SIM_MEMORY_WIPE_FAILED; + return EXTERNAL_MEMORY_WIPE_FAILED; + return SIM_MEMORY_WIPE_FAILED; + */ + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _ring_my_phone_start(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_EXIT; + + /* AMT OFF */ + _DEBUG_TRACE("====================Ring my phone start==================== \n"); + _DEBUG_TRACE("check_operarion [%d]\n", check_operation); + + int return_value; + + if (check_operation == 1) { + /* + vconf_get_bool(VCONFKEY_SETAPPL_FIND_MY_MOBILE_REMOTE_CONTROL_BOOL, &rc_status)); + if(true) + return_value = 1200; + else + return_value = 1452; + */ + *err_num = OPERATION_SUCCEEDED; + + } else { + return_value = EXE_SUCCESS; // exec_ring_start(); + _DEBUG_TRACE("checked : 0 =======return :%d =======\n", return_value); + /* + if (return_value == EXE_SUCCESS) { + *err_num = OPERATION_SUCCEEDED; + } else { + *err_num = AMT_STATUS_OFF; + } + */ + } + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _ring_my_phone_stop(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + /* AMT OFF */ + _DEBUG_TRACE("====================Ring my phone stop====================\n"); + _DEBUG_TRACE("check_operarion [%d]\n", check_operation); + + int return_value = 202; + sleep(3); + + if (check_operation == 1) { + *err_num = return_value; + } else { + + return_value = EXE_SUCCESS; //exec_ring_stop(); + /* + if (return_value == EXE_SUCCESS) { + *err_num = OPERATION_SUCCEEDED; + } else { + *err_num = OPERATION_SUCCEEDED; + } + */ + } + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _mobile_tracking_get_location(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + + /* AMT OFF */ + _DEBUG_TRACE("====================MobileTracking_Get_Location====================\n"); + sleep(3); + int return_value = 202; + if (check_operation == 1) { + /* + vconf_get_bool(VCONFKEY_SETAPPL_FIND_MY_MOBILE_REMOTE_CONTROL_BOOL, &rc_status)); + if(true) + return_value = 202; + else + return_value = 1452; + */ + _DEBUG_TRACE("checked : 1 =======return 202 =======\n"); + *err_num = return_value; + } else { + return_value = OPERATION_SUCCEEDED; // exec_location(); + _DEBUG_TRACE("checked : 0 =======return :%d =======\n", return_value); + *err_num = return_value; + } + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _mobile_tracking_operation_stop(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + + /* AMT OFF */ + _DEBUG_TRACE("====================MobileTracking_Operation_Stop====================\n"); + sleep(3); + + *err_num = OPERATION_SUCCEEDED; + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} + +static sync_agent_dev_return_e _mobile_tracking_operation(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + /* AMT OFF */ + _DEBUG_TRACE("====================MobileTracking_Operation====================\n"); + sleep(3); + int return_value = 202; + if (check_operation == 1) { + *err_num = return_value; + } else { + *err_num = OPERATION_SUCCEEDED; + } + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; + +} + +static sync_agent_dev_return_e _forwarding_diver_request(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + + /* AMT OFF */ + _DEBUG_TRACE("====================Forwarding_DiverRequest====================\n"); + int return_value = 202; + if (check_operation == 1) { + /* + vconf_get_bool(VCONFKEY_SETAPPL_FIND_MY_MOBILE_REMOTE_CONTROL_BOOL, &rc_status)); + if(true) + return_value = 202; + else + return_value = 1452; + */ + //return return_value; + *err_num = return_value; + } else { + return_value = OPERATION_SUCCEEDED; // exec_call_forwarding(); + _DEBUG_TRACE("checked : 0 =======return :%d =======\n", return_value); + *err_num = return_value; + } + /* + return CALL_AND_SMS_FORWARDING_FAILED; + return CALL_FORWARDING_FAILED; + return SMS_FORWARDING_FAILED; + */ + //return return_value; + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; + +} + +static sync_agent_dev_return_e _master_key_lock_release(int platform, int *err_num, int check_operation) +{ + _INNER_FUNC_ENTER; + /* AMT OFF */ + _DEBUG_TRACE("====================MasterKey_LockRelease====================\n"); + _DEBUG_TRACE("check_operarion [%d]\n", check_operation); + int return_value = 202; + /* for test */ + + if (check_operation == 1) { + *err_num = return_value; + } else { + + return_value = EXE_SUCCESS; //exec_unlock_lock(); + /* + if (return_value == EXE_SUCCESS) { + *err_num = OPERATION_SUCCEEDED; + } else { + *err_num = OPERATION_SUCCEEDED; + } + */ + } + + _INNER_FUNC_EXIT; + return SYNC_AGENT_DEV_RETURN_SUCCESS; +} |