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