3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Apache License, Version 2.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
21 #include "utility/sync_util.h"
22 #include "plugin/data_connector_plugin.h"
24 #ifndef SYNC_AGENT_LOG
26 #define LOG_TAG "AF_PlugIn"
29 static int current_plugin_count_data_connector = 0;
31 static plugin_data_connector_s plugin_repository[PLUGIN_MAX_DATA_CONNECTOR];
33 static int _find_data_connector_plugin(int plugin_id);
35 plugin_data_connector_func_set_s plugin_get_data_connector_func_set(void *plugin_handle, plugin_error_e * error_code)
39 *error_code = PLUGIN_SUCCESS;
41 plugin_data_connector_func_set_s func_set;
43 func_set.func_open_service = dlsym(plugin_handle, "sync_agent_plugin_open_service");
44 func_set.func_close_service = dlsym(plugin_handle, "sync_agent_plugin_close_service");
45 func_set.func_begin_transaction = dlsym(plugin_handle, "sync_agent_plugin_begin_transaction");
46 func_set.func_end_transaction = dlsym(plugin_handle, "sync_agent_plugin_end_transaction");
47 func_set.func_add_item = dlsym(plugin_handle, "sync_agent_plugin_add_item");
48 func_set.func_add_bulk_item = dlsym(plugin_handle, "sync_agent_plugin_add_bulk_item");
49 func_set.func_update_item = dlsym(plugin_handle, "sync_agent_plugin_update_item");
50 func_set.func_update_bulk_item = dlsym(plugin_handle, "sync_agent_plugin_update_bulk_item");
51 func_set.func_delete_item = dlsym(plugin_handle, "sync_agent_plugin_delete_item");
52 func_set.func_delete_bulk_item = dlsym(plugin_handle, "sync_agent_plugin_delete_bulk_item");
53 func_set.func_delete_all_items = dlsym(plugin_handle, "sync_agent_plugin_delete_all_items");
54 func_set.func_get_item = dlsym(plugin_handle, "sync_agent_plugin_get_item");
55 func_set.func_add_folder = dlsym(plugin_handle, "sync_agent_plugin_add_folder");
56 func_set.func_delete_folder = dlsym(plugin_handle, "sync_agent_plugin_delete_folder");
57 func_set.func_get_folder = dlsym(plugin_handle, "sync_agent_plugin_get_folder");
58 func_set.func_execute = dlsym(plugin_handle, "sync_agent_plugin_execute");
59 func_set.func_get_used_item_cnt = dlsym(plugin_handle, "sync_agent_plugin_get_used_item_count");
60 func_set.func_get_deleted_exdate_item_cnt = dlsym(plugin_handle, "sync_agent_plugin_get_deleted_exdate_item_count");
61 func_set.func_is_exist_exdate_item = dlsym(plugin_handle, "sync_agent_plugin_is_exist_exdate_item");
62 func_set.func_construct_exdate_parent_item = dlsym(plugin_handle, "sync_agent_plugin_construct_exdate_parent_item");
63 func_set.func_get_used_cnt_for_folder = dlsym(plugin_handle, "sync_agent_plugin_get_used_item_count_for_folder");
64 func_set.func_get_folder_id_list = dlsym(plugin_handle, "sync_agent_plugin_get_folder_id_list");
65 func_set.func_get_account_id_list = dlsym(plugin_handle, "sync_agent_plugin_get_account_id_list");
66 func_set.func_backup_service_items_to_file = dlsym(plugin_handle, "sync_agent_plugin_backup_service_items_to_file");
67 func_set.func_restore_service_items_from_file = dlsym(plugin_handle, "sync_agent_plugin_restore_service_items_from_file");
68 func_set.func_get_chaned_item_for_folder_add = dlsym(plugin_handle, "sync_agent_plugin_get_changed_item_for_folder_add");
69 func_set.func_get_chaned_item_for_folder_delete = dlsym(plugin_handle, "sync_agent_plugin_get_changed_item_for_folder_delete");
70 func_set.func_get_chaned_item_for_folder_update = dlsym(plugin_handle, "sync_agent_plugin_get_changed_item_for_folder_update");
71 func_set.func_get_last_change_point = dlsym(plugin_handle, "sync_agent_plugin_get_last_change_point");
72 func_set.func_start_listening_change_noti = dlsym(plugin_handle, "sync_agent_plugin_start_listening_change_noti");
73 func_set.func_set_callback_add_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_add_item");
74 func_set.func_set_callback_delete_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_delete_item");
75 func_set.func_set_callback_delete_child_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_delete_child_item");
76 func_set.func_set_callback_update_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_update_item");
77 func_set.func_set_callback_get_account_id_list = dlsym(plugin_handle, "sync_agent_plugin_set_callback_get_account_id_list");
78 func_set.func_get_max_item_count = dlsym(plugin_handle, "sync_agent_plugin_get_max_item_count");
79 func_set.func_get_max_field_length = dlsym(plugin_handle, "sync_agent_plugin_get_max_field_length");
80 func_set.func_get_max_field_count = dlsym(plugin_handle, "sync_agent_plugin_get_max_field_count");
81 func_set.func_get_field_value = dlsym(plugin_handle, "sync_agent_plugin_get_field_value");
82 func_set.func_get_is_support_feature = dlsym(plugin_handle, "sync_agent_plugin_get_is_support_feature");
83 func_set.func_get_info_sim_contact_max_name_length = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_max_name_length");
84 func_set.func_get_info_sim_contact_max_number_length = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_max_number_length");
85 func_set.func_get_info_sim_contact_max_email_length = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_max_email_length");
86 func_set.func_get_info_sim_contact_empty_count = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_empty_count");
87 func_set.func_get_info_sim_contact_empty_number_count = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_empty_number_count");
88 func_set.func_get_info_sim_contact_empty_email_count = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_empty_email_count");
89 func_set.func_get_info_sim_contact_addressbook_id = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_addressbook_id");
90 func_set.func_get_info_sim_contact_item_id = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_item_id");
91 func_set.func_get_info_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_item");
92 func_set.func_add_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_add_sim_contact_item");
93 func_set.func_write_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_write_sim_contact_item");
94 func_set.func_delete_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_delete_sim_contact_item");
100 plugin_error_e plugin_register_plugin_data_connector(plugin_data_connector_s plugin)
104 if (current_plugin_count_data_connector >= PLUGIN_MAX_DATA_CONNECTOR) {
105 return PLUGIN_FULL_CAPACITY;
108 plugin_repository[current_plugin_count_data_connector] = plugin;
110 current_plugin_count_data_connector++;
114 return PLUGIN_SUCCESS;
117 void plugin_clear_plugin_data_connector()
122 for (i = 0; i < current_plugin_count_data_connector; i++) {
123 memset(&(plugin_repository[i].plugin_info), 0x00, sizeof(plugin_info_s));
124 memset(&(plugin_repository[i].func_set), 0x00, sizeof(plugin_data_connector_func_set_s));
125 memset(&(plugin_repository[i]), 0x00, sizeof(plugin_data_connector_s));
131 const plugin_data_connector_s *plugin_get_data_connector_plugin_repository(int *count)
135 *count = current_plugin_count_data_connector;
139 return plugin_repository;
142 int plugin_get_data_converter_plugin_id(int dc_plugin_id)
146 int index = _find_data_connector_plugin(dc_plugin_id);
153 return plugin_repository[index].data_converter_id;
156 int *plugin_get_data_connector_plugin_id_list(int *count)
160 int *dc_plugin_id_list = NULL;
163 if (current_plugin_count_data_connector > 0) {
164 *count = current_plugin_count_data_connector;
165 dc_plugin_id_list = (int *)calloc(current_plugin_count_data_connector, sizeof(int));
166 if (dc_plugin_id_list == NULL) {
167 _DEBUG_ERROR("CALLOC failed !!!");
171 for (; i < current_plugin_count_data_connector; i++) {
172 dc_plugin_id_list[i] = plugin_repository[i].plugin_info.plugin_id;
178 return dc_plugin_id_list;
181 plugin_open_service_cb plugin_get_function_open_service(int plugin_id)
185 int index = _find_data_connector_plugin(plugin_id);
192 return plugin_repository[index].func_set.func_open_service;
195 plugin_close_service_cb plugin_get_function_close_service(int plugin_id)
199 int index = _find_data_connector_plugin(plugin_id);
206 return plugin_repository[index].func_set.func_close_service;
209 plugin_begin_transaction_cb plugin_get_function_begin_transaction(int plugin_id)
213 int index = _find_data_connector_plugin(plugin_id);
220 return plugin_repository[index].func_set.func_begin_transaction;
223 plugin_end_transaction_cb plugin_get_function_end_transaction(int plugin_id)
227 int index = _find_data_connector_plugin(plugin_id);
234 return plugin_repository[index].func_set.func_end_transaction;
237 plugin_add_item_cb plugin_get_function_add_item(int plugin_id)
241 int index = _find_data_connector_plugin(plugin_id);
248 return plugin_repository[index].func_set.func_add_item;
251 plugin_add_bulk_item_cb plugin_get_function_add_bulk_item(int plugin_id)
255 int index = _find_data_connector_plugin(plugin_id);
262 return plugin_repository[index].func_set.func_add_bulk_item;
265 plugin_update_item_cb plugin_get_function_update_item(int plugin_id)
269 int index = _find_data_connector_plugin(plugin_id);
276 return plugin_repository[index].func_set.func_update_item;
279 plugin_update_bulk_item_cb plugin_get_function_update_bulk_item(int plugin_id)
283 int index = _find_data_connector_plugin(plugin_id);
290 return plugin_repository[index].func_set.func_update_bulk_item;
293 plugin_delete_item_cb plugin_get_function_del_item(int plugin_id)
297 int index = _find_data_connector_plugin(plugin_id);
304 return plugin_repository[index].func_set.func_delete_item;
307 plugin_delete_bulk_item_cb plugin_get_function_del_bulk_item(int plugin_id)
311 int index = _find_data_connector_plugin(plugin_id);
318 return plugin_repository[index].func_set.func_delete_bulk_item;
322 plugin_delete_all_items_cb plugin_get_function_del_all_items(int plugin_id)
326 int index = _find_data_connector_plugin(plugin_id);
333 return plugin_repository[index].func_set.func_delete_all_items;
336 plugin_get_item_cb plugin_get_function_get_item(int plugin_id)
340 int index = _find_data_connector_plugin(plugin_id);
347 return plugin_repository[index].func_set.func_get_item;
350 plugin_add_folder_cb plugin_get_function_add_folder(int plugin_id)
354 int index = _find_data_connector_plugin(plugin_id);
361 return plugin_repository[index].func_set.func_add_folder;
364 plugin_delete_folder_cb plugin_get_function_delete_folder(int plugin_id)
368 int index = _find_data_connector_plugin(plugin_id);
375 return plugin_repository[index].func_set.func_delete_folder;
378 plugin_get_folder_cb plugin_get_function_get_folder(int plugin_id)
382 int index = _find_data_connector_plugin(plugin_id);
389 return plugin_repository[index].func_set.func_get_folder;
392 plugin_execute_cb plugin_get_function_execute(int plugin_id)
396 int index = _find_data_connector_plugin(plugin_id);
403 return plugin_repository[index].func_set.func_execute;
406 plugin_get_used_item_count_cb plugin_get_function_get_used_item_count(int plugin_id)
410 int index = _find_data_connector_plugin(plugin_id);
417 return plugin_repository[index].func_set.func_get_used_item_cnt;
421 plugin_get_deleted_exdate_item_count plugin_get_function_get_deleted_exdate_item_count(int plugin_id)
425 int index = _find_data_connector_plugin(plugin_id);
431 return plugin_repository[index].func_set.func_get_deleted_exdate_item_cnt;
434 plugin_is_exist_exdate_item plugin_function_is_exist_exdate_item(int plugin_id)
438 int index = _find_data_connector_plugin(plugin_id);
445 return plugin_repository[index].func_set.func_is_exist_exdate_item;
448 plugin_construct_exdate_parent_item plugin_function_construct_exdate_parent_item(int plugin_id)
452 int index = _find_data_connector_plugin(plugin_id);
459 return plugin_repository[index].func_set.func_construct_exdate_parent_item;
462 plugin_get_used_count_for_folder_cb plugin_get_function_get_used_count_for_folder(int plugin_id)
466 int index = _find_data_connector_plugin(plugin_id);
473 return plugin_repository[index].func_set.func_get_used_cnt_for_folder;
477 plugin_get_folder_id_list_cb plugin_get_function_get_folder_id_list(int plugin_id)
481 int index = _find_data_connector_plugin(plugin_id);
488 return plugin_repository[index].func_set.func_get_folder_id_list;
491 plugin_get_account_id_list_cb plugin_get_function_get_account_id_list(int plugin_id)
495 int index = _find_data_connector_plugin(plugin_id);
502 return plugin_repository[index].func_set.func_get_account_id_list;
505 plugin_backup_service_items_to_file_cb plugin_get_function_backup_service_items_to_file(int plugin_id)
509 int index = _find_data_connector_plugin(plugin_id);
516 return plugin_repository[index].func_set.func_backup_service_items_to_file;
519 plugin_restore_service_items_from_file_cb plugin_get_function_restore_service_items_from_file(int plugin_id)
523 int index = _find_data_connector_plugin(plugin_id);
530 return plugin_repository[index].func_set.func_restore_service_items_from_file;
533 plugin_get_changed_item_for_folder_add_cb plugin_get_function_get_changed_item_for_folder_add(int plugin_id)
537 int index = _find_data_connector_plugin(plugin_id);
544 return plugin_repository[index].func_set.func_get_chaned_item_for_folder_add;
547 plugin_get_changed_item_for_folder_delete_cb plugin_get_function_get_changed_item_for_folder_delete(int plugin_id)
551 int index = _find_data_connector_plugin(plugin_id);
558 return plugin_repository[index].func_set.func_get_chaned_item_for_folder_delete;
561 plugin_get_changed_item_for_folder_update_cb plugin_get_function_get_changed_item_for_folder_update(int plugin_id)
565 int index = _find_data_connector_plugin(plugin_id);
572 return plugin_repository[index].func_set.func_get_chaned_item_for_folder_update;
575 plugin_get_last_change_point_cb plugin_get_function_get_last_change_point(int plugin_id)
579 int index = _find_data_connector_plugin(plugin_id);
586 return plugin_repository[index].func_set.func_get_last_change_point;
589 plugin_start_listening_change_noti_cb plugin_get_function_start_listening_change_noti(int plugin_id)
593 int index = _find_data_connector_plugin(plugin_id);
600 return plugin_repository[index].func_set.func_start_listening_change_noti;
603 plugin_set_callback_add_item_cb plugin_get_function_set_callback_add_item(int plugin_id)
607 int index = _find_data_connector_plugin(plugin_id);
614 return plugin_repository[index].func_set.func_set_callback_add_item;
617 plugin_set_callback_delete_item_cb plugin_get_function_set_callback_delete_item(int plugin_id)
621 int index = _find_data_connector_plugin(plugin_id);
628 return plugin_repository[index].func_set.func_set_callback_delete_item;
631 plugin_set_callback_update_item_cb plugin_get_function_data_connector_set_callback_update_item(int plugin_id)
635 int index = _find_data_connector_plugin(plugin_id);
642 return plugin_repository[index].func_set.func_set_callback_update_item;
645 plugin_set_callback_get_account_id_list_cb plugin_get_function_set_callback_get_account_id_list(int plugin_id)
649 int index = _find_data_connector_plugin(plugin_id);
656 return plugin_repository[index].func_set.func_set_callback_get_account_id_list;
659 plugin_set_callback_delete_child_item_cb plugin_get_function_set_callback_delete_child_item(int plugin_id)
663 int index = _find_data_connector_plugin(plugin_id);
670 return plugin_repository[index].func_set.func_set_callback_delete_child_item;
673 plugin_get_max_item_count_cb plugin_get_function_get_max_item_count(int plugin_id)
677 int index = _find_data_connector_plugin(plugin_id);
684 return plugin_repository[index].func_set.func_get_max_item_count;
687 plugin_get_max_field_length_cb plugin_get_function_get_max_field_length(int plugin_id)
691 int index = _find_data_connector_plugin(plugin_id);
698 return plugin_repository[index].func_set.func_get_max_field_length;
701 plugin_get_max_field_count_cb plugin_get_function_get_max_field_count(int plugin_id)
705 int index = _find_data_connector_plugin(plugin_id);
712 return plugin_repository[index].func_set.func_get_max_field_count;
715 plugin_get_field_value_cb plugin_get_function_get_field_value(int plugin_id)
719 int index = _find_data_connector_plugin(plugin_id);
726 return plugin_repository[index].func_set.func_get_field_value;
729 plugin_get_is_support_feature_cb plugin_get_function_get_is_support_feature(int plugin_id)
733 int index = _find_data_connector_plugin(plugin_id);
740 return plugin_repository[index].func_set.func_get_is_support_feature;
743 plugin_get_info_sim_contact_max_name_length_cb plugin_get_function_get_info_sim_contact_max_name_length(int plugin_id)
747 int index = _find_data_connector_plugin(plugin_id);
754 return plugin_repository[index].func_set.func_get_info_sim_contact_max_name_length;
757 plugin_get_info_sim_contact_max_number_length_cb plugin_get_function_get_info_sim_contact_max_number_length(int plugin_id)
761 int index = _find_data_connector_plugin(plugin_id);
768 return plugin_repository[index].func_set.func_get_info_sim_contact_max_number_length;
771 plugin_get_info_sim_contact_max_email_length_cb plugin_get_function_get_info_sim_contact_max_email_length(int plugin_id)
775 int index = _find_data_connector_plugin(plugin_id);
782 return plugin_repository[index].func_set.func_get_info_sim_contact_max_email_length;
785 plugin_get_info_sim_contact_empty_count_cb plugin_get_function_get_info_sim_contact_empty_count(int plugin_id)
789 int index = _find_data_connector_plugin(plugin_id);
796 return plugin_repository[index].func_set.func_get_info_sim_contact_empty_count;
799 plugin_get_info_sim_contact_empty_number_count_cb plugin_get_function_get_info_sim_contact_empty_number_count(int plugin_id)
803 int index = _find_data_connector_plugin(plugin_id);
810 return plugin_repository[index].func_set.func_get_info_sim_contact_empty_number_count;
813 plugin_get_info_sim_contact_empty_email_count_cb plugin_get_function_get_info_sim_contact_empty_email_count(int plugin_id)
817 int index = _find_data_connector_plugin(plugin_id);
824 return plugin_repository[index].func_set.func_get_info_sim_contact_empty_email_count;
827 plugin_get_info_sim_contact_addressbook_id_cb plugin_get_function_get_info_sim_contact_addressbook_id(int plugin_id)
831 int index = _find_data_connector_plugin(plugin_id);
838 return plugin_repository[index].func_set.func_get_info_sim_contact_addressbook_id;
841 plugin_get_info_sim_contact_item_id_cb plugin_get_function_get_info_sim_contact_item_id(int plugin_id)
845 int index = _find_data_connector_plugin(plugin_id);
852 return plugin_repository[index].func_set.func_get_info_sim_contact_item_id;
855 plugin_get_info_sim_contact_item_cb plugin_get_function_get_info_sim_contact_item(int plugin_id)
859 int index = _find_data_connector_plugin(plugin_id);
866 return plugin_repository[index].func_set.func_get_info_sim_contact_item;
869 plugin_add_sim_contact_item_cb plugin_get_function_add_sim_contact_item(int plugin_id)
873 int index = _find_data_connector_plugin(plugin_id);
880 return plugin_repository[index].func_set.func_add_sim_contact_item;
883 plugin_write_sim_contact_item_cb plugin_get_function_write_sim_contact_item(int plugin_id)
887 int index = _find_data_connector_plugin(plugin_id);
894 return plugin_repository[index].func_set.func_write_sim_contact_item;
897 plugin_delete_sim_contact_item_cb plugin_get_function_delete_sim_contact_item(int plugin_id)
901 int index = _find_data_connector_plugin(plugin_id);
908 return plugin_repository[index].func_set.func_delete_sim_contact_item;
911 static int _find_data_connector_plugin(int plugin_id)
916 for (; i < current_plugin_count_data_connector; i++) {
917 if (plugin_repository[i].plugin_info.plugin_id == plugin_id) {