5f2bc5054056d7ff7764aeecbba9044202a0b32d
[platform/core/system/sync-agent.git] / src / framework / plugin / data_connector_plugin.c
1 /*
2  * sync-agent
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
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
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17
18 #include <dlfcn.h>
19 #include <string.h>
20
21 #include "utility/sync_util.h"
22 #include "plugin/data_connector_plugin.h"
23
24 #ifndef SYNC_AGENT_LOG
25 #undef LOG_TAG
26 #define LOG_TAG "AF_PlugIn"
27 #endif
28
29 static int current_plugin_count_data_connector = 0;
30
31 static plugin_data_connector_s plugin_repository[PLUGIN_MAX_DATA_CONNECTOR];
32
33 static int _find_data_connector_plugin(int plugin_id);
34
35 plugin_data_connector_func_set_s plugin_get_data_connector_func_set(void *plugin_handle, plugin_error_e * error_code)
36 {
37         _EXTERN_FUNC_ENTER;
38
39         *error_code = PLUGIN_SUCCESS;
40
41         plugin_data_connector_func_set_s func_set;
42
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");
95         func_set.func_add_async_item = dlsym(plugin_handle, "sync_agent_plugin_add_async_item");
96
97         _EXTERN_FUNC_EXIT;
98         return func_set;
99 }
100
101 plugin_error_e plugin_register_plugin_data_connector(plugin_data_connector_s plugin)
102 {
103         _EXTERN_FUNC_ENTER;
104
105         if (current_plugin_count_data_connector >= PLUGIN_MAX_DATA_CONNECTOR) {
106                 return PLUGIN_FULL_CAPACITY;
107         }
108
109         plugin_repository[current_plugin_count_data_connector] = plugin;
110
111         current_plugin_count_data_connector++;
112
113         _EXTERN_FUNC_EXIT;
114
115         return PLUGIN_SUCCESS;
116 }
117
118 void plugin_clear_plugin_data_connector()
119 {
120         _EXTERN_FUNC_ENTER;
121
122         int i;
123         for (i = 0; i < current_plugin_count_data_connector; i++) {
124                 memset(&(plugin_repository[i].plugin_info), 0x00, sizeof(plugin_info_s));
125                 memset(&(plugin_repository[i].func_set), 0x00, sizeof(plugin_data_connector_func_set_s));
126                 memset(&(plugin_repository[i]), 0x00, sizeof(plugin_data_connector_s));
127         }
128
129         _EXTERN_FUNC_EXIT;
130 }
131
132 const plugin_data_connector_s *plugin_get_data_connector_plugin_repository(int *count)
133 {
134         _EXTERN_FUNC_ENTER;
135
136         *count = current_plugin_count_data_connector;
137
138         _EXTERN_FUNC_EXIT;
139
140         return plugin_repository;
141 }
142
143 int plugin_get_data_converter_plugin_id(int dc_plugin_id)
144 {
145         _EXTERN_FUNC_ENTER;
146
147         int index = _find_data_connector_plugin(dc_plugin_id);
148         if (index == -1) {
149                 return -1;
150         }
151
152         _EXTERN_FUNC_EXIT;
153
154         return plugin_repository[index].data_converter_id;
155 }
156
157 int *plugin_get_data_connector_plugin_id_list(int *count)
158 {
159         _EXTERN_FUNC_ENTER;
160
161         int *dc_plugin_id_list = NULL;
162         *count = 0;
163
164         if (current_plugin_count_data_connector > 0) {
165                 *count = current_plugin_count_data_connector;
166                 dc_plugin_id_list = (int *)calloc(current_plugin_count_data_connector, sizeof(int));
167                 if (dc_plugin_id_list == NULL) {
168                         _DEBUG_ERROR("CALLOC failed !!!");
169                         return NULL;
170                 }
171                 int i = 0;
172                 for (; i < current_plugin_count_data_connector; i++) {
173                         dc_plugin_id_list[i] = plugin_repository[i].plugin_info.plugin_id;
174                 }
175         }
176
177         _EXTERN_FUNC_EXIT;
178
179         return dc_plugin_id_list;
180 }
181
182 plugin_open_service_cb plugin_get_function_open_service(int plugin_id)
183 {
184         _EXTERN_FUNC_ENTER;
185
186         int index = _find_data_connector_plugin(plugin_id);
187         if (index == -1) {
188                 return NULL;
189         }
190
191         _EXTERN_FUNC_EXIT;
192
193         return plugin_repository[index].func_set.func_open_service;
194 }
195
196 plugin_close_service_cb plugin_get_function_close_service(int plugin_id)
197 {
198         _EXTERN_FUNC_ENTER;
199
200         int index = _find_data_connector_plugin(plugin_id);
201         if (index == -1) {
202                 return NULL;
203         }
204
205         _EXTERN_FUNC_EXIT;
206
207         return plugin_repository[index].func_set.func_close_service;
208 }
209
210 plugin_begin_transaction_cb plugin_get_function_begin_transaction(int plugin_id)
211 {
212         _EXTERN_FUNC_ENTER;
213
214         int index = _find_data_connector_plugin(plugin_id);
215         if (index == -1) {
216                 return NULL;
217         }
218
219         _EXTERN_FUNC_EXIT;
220
221         return plugin_repository[index].func_set.func_begin_transaction;
222 }
223
224 plugin_end_transaction_cb plugin_get_function_end_transaction(int plugin_id)
225 {
226         _EXTERN_FUNC_ENTER;
227
228         int index = _find_data_connector_plugin(plugin_id);
229         if (index == -1) {
230                 return NULL;
231         }
232
233         _EXTERN_FUNC_EXIT;
234
235         return plugin_repository[index].func_set.func_end_transaction;
236 }
237
238 plugin_add_item_cb plugin_get_function_add_item(int plugin_id)
239 {
240         _EXTERN_FUNC_ENTER;
241
242         int index = _find_data_connector_plugin(plugin_id);
243         if (index == -1) {
244                 return NULL;
245         }
246
247         _EXTERN_FUNC_EXIT;
248
249         return plugin_repository[index].func_set.func_add_item;
250 }
251
252 plugin_add_bulk_item_cb plugin_get_function_add_bulk_item(int plugin_id)
253 {
254         _EXTERN_FUNC_ENTER;
255
256         int index = _find_data_connector_plugin(plugin_id);
257         if (index == -1) {
258                 return NULL;
259         }
260
261         _EXTERN_FUNC_EXIT;
262
263         return plugin_repository[index].func_set.func_add_bulk_item;
264 }
265
266 plugin_update_item_cb plugin_get_function_update_item(int plugin_id)
267 {
268         _EXTERN_FUNC_ENTER;
269
270         int index = _find_data_connector_plugin(plugin_id);
271         if (index == -1) {
272                 return NULL;
273         }
274
275         _EXTERN_FUNC_EXIT;
276
277         return plugin_repository[index].func_set.func_update_item;
278 }
279
280 plugin_update_bulk_item_cb plugin_get_function_update_bulk_item(int plugin_id)
281 {
282         _EXTERN_FUNC_ENTER;
283
284         int index = _find_data_connector_plugin(plugin_id);
285         if (index == -1) {
286                 return NULL;
287         }
288
289         _EXTERN_FUNC_EXIT;
290
291         return plugin_repository[index].func_set.func_update_bulk_item;
292 }
293
294 plugin_delete_item_cb plugin_get_function_del_item(int plugin_id)
295 {
296         _EXTERN_FUNC_ENTER;
297
298         int index = _find_data_connector_plugin(plugin_id);
299         if (index == -1) {
300                 return NULL;
301         }
302
303         _EXTERN_FUNC_EXIT;
304
305         return plugin_repository[index].func_set.func_delete_item;
306 }
307
308 plugin_delete_bulk_item_cb plugin_get_function_del_bulk_item(int plugin_id)
309 {
310         _EXTERN_FUNC_ENTER;
311
312         int index = _find_data_connector_plugin(plugin_id);
313         if (index == -1) {
314                 return NULL;
315         }
316
317         _EXTERN_FUNC_EXIT;
318
319         return plugin_repository[index].func_set.func_delete_bulk_item;
320 }
321
322
323 plugin_delete_all_items_cb plugin_get_function_del_all_items(int plugin_id)
324 {
325         _EXTERN_FUNC_ENTER;
326
327         int index = _find_data_connector_plugin(plugin_id);
328         if (index == -1) {
329                 return NULL;
330         }
331
332         _EXTERN_FUNC_EXIT;
333
334         return plugin_repository[index].func_set.func_delete_all_items;
335 }
336
337 plugin_get_item_cb plugin_get_function_get_item(int plugin_id)
338 {
339         _EXTERN_FUNC_ENTER;
340
341         int index = _find_data_connector_plugin(plugin_id);
342         if (index == -1) {
343                 return NULL;
344         }
345
346         _EXTERN_FUNC_EXIT;
347
348         return plugin_repository[index].func_set.func_get_item;
349 }
350
351 plugin_add_folder_cb plugin_get_function_add_folder(int plugin_id)
352 {
353         _EXTERN_FUNC_ENTER;
354
355         int index = _find_data_connector_plugin(plugin_id);
356         if (index == -1) {
357                 return NULL;
358         }
359
360         _EXTERN_FUNC_EXIT;
361
362         return plugin_repository[index].func_set.func_add_folder;
363 }
364
365 plugin_delete_folder_cb plugin_get_function_delete_folder(int plugin_id)
366 {
367         _EXTERN_FUNC_ENTER;
368
369         int index = _find_data_connector_plugin(plugin_id);
370         if (index == -1) {
371                 return NULL;
372         }
373
374         _EXTERN_FUNC_EXIT;
375
376         return plugin_repository[index].func_set.func_delete_folder;
377 }
378
379 plugin_get_folder_cb plugin_get_function_get_folder(int plugin_id)
380 {
381         _EXTERN_FUNC_ENTER;
382
383         int index = _find_data_connector_plugin(plugin_id);
384         if (index == -1) {
385                 return NULL;
386         }
387
388         _EXTERN_FUNC_EXIT;
389
390         return plugin_repository[index].func_set.func_get_folder;
391 }
392
393 plugin_execute_cb plugin_get_function_execute(int plugin_id)
394 {
395         _EXTERN_FUNC_ENTER;
396
397         int index = _find_data_connector_plugin(plugin_id);
398         if (index == -1) {
399                 return NULL;
400         }
401
402         _EXTERN_FUNC_EXIT;
403
404         return plugin_repository[index].func_set.func_execute;
405 }
406
407 plugin_get_used_item_count_cb plugin_get_function_get_used_item_count(int plugin_id)
408 {
409         _EXTERN_FUNC_ENTER;
410
411         int index = _find_data_connector_plugin(plugin_id);
412         if (index == -1) {
413                 return NULL;
414         }
415
416         _EXTERN_FUNC_EXIT;
417
418         return plugin_repository[index].func_set.func_get_used_item_cnt;
419
420 }
421
422 plugin_get_deleted_exdate_item_count plugin_get_function_get_deleted_exdate_item_count(int plugin_id)
423 {
424         _EXTERN_FUNC_ENTER;
425
426         int index = _find_data_connector_plugin(plugin_id);
427         if (index == -1) {
428                 return NULL;
429         }
430
431         _EXTERN_FUNC_EXIT;
432         return plugin_repository[index].func_set.func_get_deleted_exdate_item_cnt;
433 }
434
435 plugin_is_exist_exdate_item plugin_function_is_exist_exdate_item(int plugin_id)
436 {
437         _EXTERN_FUNC_ENTER;
438
439         int index = _find_data_connector_plugin(plugin_id);
440         if (index == -1) {
441                 return NULL;
442         }
443
444         _EXTERN_FUNC_EXIT;
445
446         return plugin_repository[index].func_set.func_is_exist_exdate_item;
447 }
448
449 plugin_construct_exdate_parent_item plugin_function_construct_exdate_parent_item(int plugin_id)
450 {
451         _EXTERN_FUNC_ENTER;
452
453         int index = _find_data_connector_plugin(plugin_id);
454         if (index == -1) {
455                 return NULL;
456         }
457
458         _EXTERN_FUNC_EXIT;
459
460         return plugin_repository[index].func_set.func_construct_exdate_parent_item;
461 }
462
463 plugin_get_used_count_for_folder_cb plugin_get_function_get_used_count_for_folder(int plugin_id)
464 {
465         _EXTERN_FUNC_ENTER;
466
467         int index = _find_data_connector_plugin(plugin_id);
468         if (index == -1) {
469                 return NULL;
470         }
471
472         _EXTERN_FUNC_EXIT;
473
474         return plugin_repository[index].func_set.func_get_used_cnt_for_folder;
475
476 }
477
478 plugin_get_folder_id_list_cb plugin_get_function_get_folder_id_list(int plugin_id)
479 {
480         _EXTERN_FUNC_ENTER;
481
482         int index = _find_data_connector_plugin(plugin_id);
483         if (index == -1) {
484                 return NULL;
485         }
486
487         _EXTERN_FUNC_EXIT;
488
489         return plugin_repository[index].func_set.func_get_folder_id_list;
490 }
491
492 plugin_get_account_id_list_cb plugin_get_function_get_account_id_list(int plugin_id)
493 {
494         _EXTERN_FUNC_ENTER;
495
496         int index = _find_data_connector_plugin(plugin_id);
497         if (index == -1) {
498                 return NULL;
499         }
500
501         _EXTERN_FUNC_EXIT;
502
503         return plugin_repository[index].func_set.func_get_account_id_list;
504 }
505
506 plugin_backup_service_items_to_file_cb plugin_get_function_backup_service_items_to_file(int plugin_id)
507 {
508         _EXTERN_FUNC_ENTER;
509
510         int index = _find_data_connector_plugin(plugin_id);
511         if (index == -1) {
512                 return NULL;
513         }
514
515         _EXTERN_FUNC_EXIT;
516
517         return plugin_repository[index].func_set.func_backup_service_items_to_file;
518 }
519
520 plugin_restore_service_items_from_file_cb plugin_get_function_restore_service_items_from_file(int plugin_id)
521 {
522         _EXTERN_FUNC_ENTER;
523
524         int index = _find_data_connector_plugin(plugin_id);
525         if (index == -1) {
526                 return NULL;
527         }
528
529         _EXTERN_FUNC_EXIT;
530
531         return plugin_repository[index].func_set.func_restore_service_items_from_file;
532 }
533
534 plugin_get_changed_item_for_folder_add_cb plugin_get_function_get_changed_item_for_folder_add(int plugin_id)
535 {
536         _EXTERN_FUNC_ENTER;
537
538         int index = _find_data_connector_plugin(plugin_id);
539         if (index == -1) {
540                 return NULL;
541         }
542
543         _EXTERN_FUNC_EXIT;
544
545         return plugin_repository[index].func_set.func_get_chaned_item_for_folder_add;
546 }
547
548 plugin_get_changed_item_for_folder_delete_cb plugin_get_function_get_changed_item_for_folder_delete(int plugin_id)
549 {
550         _EXTERN_FUNC_ENTER;
551
552         int index = _find_data_connector_plugin(plugin_id);
553         if (index == -1) {
554                 return NULL;
555         }
556
557         _EXTERN_FUNC_EXIT;
558
559         return plugin_repository[index].func_set.func_get_chaned_item_for_folder_delete;
560 }
561
562 plugin_get_changed_item_for_folder_update_cb plugin_get_function_get_changed_item_for_folder_update(int plugin_id)
563 {
564         _EXTERN_FUNC_ENTER;
565
566         int index = _find_data_connector_plugin(plugin_id);
567         if (index == -1) {
568                 return NULL;
569         }
570
571         _EXTERN_FUNC_EXIT;
572
573         return plugin_repository[index].func_set.func_get_chaned_item_for_folder_update;
574 }
575
576 plugin_get_last_change_point_cb plugin_get_function_get_last_change_point(int plugin_id)
577 {
578         _EXTERN_FUNC_ENTER;
579
580         int index = _find_data_connector_plugin(plugin_id);
581         if (index == -1) {
582                 return NULL;
583         }
584
585         _EXTERN_FUNC_EXIT;
586
587         return plugin_repository[index].func_set.func_get_last_change_point;
588 }
589
590 plugin_start_listening_change_noti_cb plugin_get_function_start_listening_change_noti(int plugin_id)
591 {
592         _EXTERN_FUNC_ENTER;
593
594         int index = _find_data_connector_plugin(plugin_id);
595         if (index == -1) {
596                 return NULL;
597         }
598
599         _EXTERN_FUNC_EXIT;
600
601         return plugin_repository[index].func_set.func_start_listening_change_noti;
602 }
603
604 plugin_set_callback_add_item_cb plugin_get_function_set_callback_add_item(int plugin_id)
605 {
606         _EXTERN_FUNC_ENTER;
607
608         int index = _find_data_connector_plugin(plugin_id);
609         if (index == -1) {
610                 return NULL;
611         }
612
613         _EXTERN_FUNC_EXIT;
614
615         return plugin_repository[index].func_set.func_set_callback_add_item;
616 }
617
618 plugin_set_callback_delete_item_cb plugin_get_function_set_callback_delete_item(int plugin_id)
619 {
620         _EXTERN_FUNC_ENTER;
621
622         int index = _find_data_connector_plugin(plugin_id);
623         if (index == -1) {
624                 return NULL;
625         }
626
627         _EXTERN_FUNC_EXIT;
628
629         return plugin_repository[index].func_set.func_set_callback_delete_item;
630 }
631
632 plugin_set_callback_update_item_cb plugin_get_function_data_connector_set_callback_update_item(int plugin_id)
633 {
634         _EXTERN_FUNC_ENTER;
635
636         int index = _find_data_connector_plugin(plugin_id);
637         if (index == -1) {
638                 return NULL;
639         }
640
641         _EXTERN_FUNC_EXIT;
642
643         return plugin_repository[index].func_set.func_set_callback_update_item;
644 }
645
646 plugin_set_callback_get_account_id_list_cb plugin_get_function_set_callback_get_account_id_list(int plugin_id)
647 {
648         _EXTERN_FUNC_ENTER;
649
650         int index = _find_data_connector_plugin(plugin_id);
651         if (index == -1) {
652                 return NULL;
653         }
654
655         _EXTERN_FUNC_EXIT;
656
657         return plugin_repository[index].func_set.func_set_callback_get_account_id_list;
658 }
659
660 plugin_set_callback_delete_child_item_cb plugin_get_function_set_callback_delete_child_item(int plugin_id)
661 {
662         _EXTERN_FUNC_ENTER;
663
664         int index = _find_data_connector_plugin(plugin_id);
665         if (index == -1) {
666                 return NULL;
667         }
668
669         _EXTERN_FUNC_EXIT;
670
671         return plugin_repository[index].func_set.func_set_callback_delete_child_item;
672 }
673
674 plugin_get_max_item_count_cb plugin_get_function_get_max_item_count(int plugin_id)
675 {
676         _EXTERN_FUNC_ENTER;
677
678         int index = _find_data_connector_plugin(plugin_id);
679         if (index == -1) {
680                 return NULL;
681         }
682
683         _EXTERN_FUNC_EXIT;
684
685         return plugin_repository[index].func_set.func_get_max_item_count;
686 }
687
688 plugin_get_max_field_length_cb plugin_get_function_get_max_field_length(int plugin_id)
689 {
690         _EXTERN_FUNC_ENTER;
691
692         int index = _find_data_connector_plugin(plugin_id);
693         if (index == -1) {
694                 return NULL;
695         }
696
697         _EXTERN_FUNC_EXIT;
698
699         return plugin_repository[index].func_set.func_get_max_field_length;
700 }
701
702 plugin_get_max_field_count_cb plugin_get_function_get_max_field_count(int plugin_id)
703 {
704         _EXTERN_FUNC_ENTER;
705
706         int index = _find_data_connector_plugin(plugin_id);
707         if (index == -1) {
708                 return NULL;
709         }
710
711         _EXTERN_FUNC_EXIT;
712
713         return plugin_repository[index].func_set.func_get_max_field_count;
714 }
715
716 plugin_get_field_value_cb plugin_get_function_get_field_value(int plugin_id)
717 {
718         _EXTERN_FUNC_ENTER;
719
720         int index = _find_data_connector_plugin(plugin_id);
721         if (index == -1) {
722                 return NULL;
723         }
724
725         _EXTERN_FUNC_EXIT;
726
727         return plugin_repository[index].func_set.func_get_field_value;
728 }
729
730 plugin_get_is_support_feature_cb plugin_get_function_get_is_support_feature(int plugin_id)
731 {
732         _EXTERN_FUNC_ENTER;
733
734         int index = _find_data_connector_plugin(plugin_id);
735         if (index == -1) {
736                 return NULL;
737         }
738
739         _EXTERN_FUNC_EXIT;
740
741         return plugin_repository[index].func_set.func_get_is_support_feature;
742 }
743
744 plugin_get_info_sim_contact_max_name_length_cb plugin_get_function_get_info_sim_contact_max_name_length(int plugin_id)
745 {
746         _EXTERN_FUNC_ENTER;
747
748         int index = _find_data_connector_plugin(plugin_id);
749         if (index == -1) {
750                 return NULL;
751         }
752
753         _EXTERN_FUNC_EXIT;
754
755         return plugin_repository[index].func_set.func_get_info_sim_contact_max_name_length;
756 }
757
758 plugin_get_info_sim_contact_max_number_length_cb plugin_get_function_get_info_sim_contact_max_number_length(int plugin_id)
759 {
760         _EXTERN_FUNC_ENTER;
761
762         int index = _find_data_connector_plugin(plugin_id);
763         if (index == -1) {
764                 return NULL;
765         }
766
767         _EXTERN_FUNC_EXIT;
768
769         return plugin_repository[index].func_set.func_get_info_sim_contact_max_number_length;
770 }
771
772 plugin_get_info_sim_contact_max_email_length_cb plugin_get_function_get_info_sim_contact_max_email_length(int plugin_id)
773 {
774         _EXTERN_FUNC_ENTER;
775
776         int index = _find_data_connector_plugin(plugin_id);
777         if (index == -1) {
778                 return NULL;
779         }
780
781         _EXTERN_FUNC_EXIT;
782
783         return plugin_repository[index].func_set.func_get_info_sim_contact_max_email_length;
784 }
785
786 plugin_get_info_sim_contact_empty_count_cb plugin_get_function_get_info_sim_contact_empty_count(int plugin_id)
787 {
788         _EXTERN_FUNC_ENTER;
789
790         int index = _find_data_connector_plugin(plugin_id);
791         if (index == -1) {
792                 return NULL;
793         }
794
795         _EXTERN_FUNC_EXIT;
796
797         return plugin_repository[index].func_set.func_get_info_sim_contact_empty_count;
798 }
799
800 plugin_get_info_sim_contact_empty_number_count_cb plugin_get_function_get_info_sim_contact_empty_number_count(int plugin_id)
801 {
802         _EXTERN_FUNC_ENTER;
803
804         int index = _find_data_connector_plugin(plugin_id);
805         if (index == -1) {
806                 return NULL;
807         }
808
809         _EXTERN_FUNC_EXIT;
810
811         return plugin_repository[index].func_set.func_get_info_sim_contact_empty_number_count;
812 }
813
814 plugin_get_info_sim_contact_empty_email_count_cb plugin_get_function_get_info_sim_contact_empty_email_count(int plugin_id)
815 {
816         _EXTERN_FUNC_ENTER;
817
818         int index = _find_data_connector_plugin(plugin_id);
819         if (index == -1) {
820                 return NULL;
821         }
822
823         _EXTERN_FUNC_EXIT;
824
825         return plugin_repository[index].func_set.func_get_info_sim_contact_empty_email_count;
826 }
827
828 plugin_get_info_sim_contact_addressbook_id_cb plugin_get_function_get_info_sim_contact_addressbook_id(int plugin_id)
829 {
830         _EXTERN_FUNC_ENTER;
831
832         int index = _find_data_connector_plugin(plugin_id);
833         if (index == -1) {
834                 return NULL;
835         }
836
837         _EXTERN_FUNC_EXIT;
838
839         return plugin_repository[index].func_set.func_get_info_sim_contact_addressbook_id;
840 }
841
842 plugin_get_info_sim_contact_item_id_cb plugin_get_function_get_info_sim_contact_item_id(int plugin_id)
843 {
844         _EXTERN_FUNC_ENTER;
845
846         int index = _find_data_connector_plugin(plugin_id);
847         if (index == -1) {
848                 return NULL;
849         }
850
851         _EXTERN_FUNC_EXIT;
852
853         return plugin_repository[index].func_set.func_get_info_sim_contact_item_id;
854 }
855
856 plugin_get_info_sim_contact_item_cb plugin_get_function_get_info_sim_contact_item(int plugin_id)
857 {
858         _EXTERN_FUNC_ENTER;
859
860         int index = _find_data_connector_plugin(plugin_id);
861         if (index == -1) {
862                 return NULL;
863         }
864
865         _EXTERN_FUNC_EXIT;
866
867         return plugin_repository[index].func_set.func_get_info_sim_contact_item;
868 }
869
870 plugin_add_sim_contact_item_cb plugin_get_function_add_sim_contact_item(int plugin_id)
871 {
872         _EXTERN_FUNC_ENTER;
873
874         int index = _find_data_connector_plugin(plugin_id);
875         if (index == -1) {
876                 return NULL;
877         }
878
879         _EXTERN_FUNC_EXIT;
880
881         return plugin_repository[index].func_set.func_add_sim_contact_item;
882 }
883
884 plugin_write_sim_contact_item_cb plugin_get_function_write_sim_contact_item(int plugin_id)
885 {
886         _EXTERN_FUNC_ENTER;
887
888         int index = _find_data_connector_plugin(plugin_id);
889         if (index == -1) {
890                 return NULL;
891         }
892
893         _EXTERN_FUNC_EXIT;
894
895         return plugin_repository[index].func_set.func_write_sim_contact_item;
896 }
897
898 plugin_delete_sim_contact_item_cb plugin_get_function_delete_sim_contact_item(int plugin_id)
899 {
900         _EXTERN_FUNC_ENTER;
901
902         int index = _find_data_connector_plugin(plugin_id);
903         if (index == -1) {
904                 return NULL;
905         }
906
907         _EXTERN_FUNC_EXIT;
908
909         return plugin_repository[index].func_set.func_delete_sim_contact_item;
910 }
911
912 plugin_add_async_item_cb plugin_get_function_add_async_item(int plugin_id)
913 {
914         _EXTERN_FUNC_ENTER;
915
916         int index = _find_data_connector_plugin(plugin_id);
917         if (index == -1) {
918                 return NULL;
919         }
920
921         _EXTERN_FUNC_EXIT;
922
923         return plugin_repository[index].func_set.func_add_async_item;
924 }
925
926 static int _find_data_connector_plugin(int plugin_id)
927 {
928         _INNER_FUNC_ENTER;
929
930         int i = 0;
931         for (; i < current_plugin_count_data_connector; i++) {
932                 if (plugin_repository[i].plugin_info.plugin_id == plugin_id) {
933                         _INNER_FUNC_EXIT;
934                         return i;
935                 }
936         }
937
938         return -1;
939 }