Initialize Tizen 2.3
[framework/system/oma-dm-agent.git] / src / plugins / dm-private / slp-sysnoti-telephony / src / plugin_interface.c
1 /*
2  * oma-dm-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 <glib.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <glib-object.h>
22 #include <glib/gprintf.h>
23 #include <vconf-keys.h>
24 #include <vconf.h>
25
26 #include <tapi_common.h>
27
28 /*sync-agent*/
29 #include <sync_agent.h>
30
31 #ifndef EXPORT_API
32 #define EXPORT_API __attribute__ ((visibility("default")))
33 #endif
34
35 #ifndef OMADM_AGENT_LOG
36 #undef LOG_TAG
37 #define LOG_TAG "PLUGIN_PM_SYSNOTI_TELEPHONY"
38 #endif
39
40 static TapiHandle *tel_handler = NULL;
41
42 static int (*registered_telephony_incoming_cb) (int data_id, void *user_data);
43 static int (*registered_telephony_end_cb) (int data_id, void *user_data);
44
45 int _register_telephony_noti_event();
46 int _unregister_telephony_noti_event();
47 static void __tel_alert_status_noti_cb(TapiHandle * handle, const char *noti_id, void *data, void *user_data);
48
49 EXPORT_API void sync_agent_plugin_init_service_noti(void *data)
50 {
51         _EXTERN_FUNC_ENTER;
52
53         retm_if((data) == NULL, "data is NULL!!");
54
55         sync_agent_pm_register_data_s *reg_data = (sync_agent_pm_register_data_s *) data;
56         if (reg_data == NULL) {
57                 _DEBUG_INFO("data is NULL !!");
58                 goto free_part;
59         }
60
61         g_type_init();
62
63         tel_handler = tel_init(NULL);
64         if (tel_handler == NULL) {
65                 _DEBUG_INFO("tel_init() failed !!");
66                 goto free_part;
67         }
68
69         int ret = _register_telephony_noti_event();
70         if (ret != 1) {
71                 _DEBUG_INFO("register_notiNetworkEvent() failed !!");
72         } else {
73                 _DEBUG_INFO("register_notiNetworkEvent() success !!");
74         }
75
76  free_part:
77         if (reg_data != NULL) {
78                 if (reg_data->pkg_name != NULL)
79                         free(reg_data->pkg_name);
80
81                 if (reg_data->additional_data != NULL)
82                         free(reg_data->additional_data);
83
84                 free(reg_data);
85
86                 _DEBUG_INFO("free sync_agent_pm_register_data_s !!");
87         }
88
89         _EXTERN_FUNC_EXIT;
90 }
91
92 EXPORT_API sync_agent_pm_return_e sync_agent_plugin_unregister_service_noti(void)
93 {
94         _EXTERN_FUNC_ENTER;
95
96         sync_agent_pm_return_e ret = SYNC_AGENT_PM_SUCCESS;
97
98         int err = _unregister_telephony_noti_event();
99         if (err != 1) {
100                 _DEBUG_INFO("__unregister_telephony_noti_event() failed !!");
101                 return SYNC_AGENT_PM_FAIL;
102         } else {
103                 _DEBUG_INFO("__unregister_telephony_noti_event() success !!");
104         }
105
106         _EXTERN_FUNC_EXIT;
107
108         return ret;
109 }
110
111 EXPORT_API sync_agent_pm_return_e sync_agent_plugin_add_service_data(void *add_data, int *added_data_id)
112 {
113         _EXTERN_FUNC_ENTER;
114
115         sync_agent_pm_return_e ret = SYNC_AGENT_PM_SUCCESS;
116
117         _DEBUG_INFO("not support this feature !!");
118
119         _EXTERN_FUNC_EXIT;
120
121         return ret;
122 }
123
124 EXPORT_API sync_agent_pm_return_e sync_agent_plugin_remove_service_data(int remove_data_id)
125 {
126         _EXTERN_FUNC_ENTER;
127
128         sync_agent_pm_return_e ret = SYNC_AGENT_PM_SUCCESS;
129
130         _DEBUG_INFO("not support this feature !!");
131
132         _EXTERN_FUNC_EXIT;
133
134         return ret;
135 }
136
137 EXPORT_API sync_agent_pm_return_e sync_agent_plugin_get_service_data(int get_data_id, void **service_data)
138 {
139         _EXTERN_FUNC_ENTER;
140
141         sync_agent_pm_return_e ret = SYNC_AGENT_PM_SUCCESS;
142
143         _DEBUG_INFO("not support this feature !!");
144
145         _EXTERN_FUNC_EXIT;
146
147         return ret;
148 }
149
150 //void set_user_callback(int callback_counts, ...)
151 EXPORT_API void sync_agent_plugin_set_user_callback(int callback_counts, va_list list)
152 {
153         _EXTERN_FUNC_ENTER;
154         int i = 0;
155
156         //      va_list list;
157         //      va_start(list, callback_counts);
158
159         _DEBUG_INFO("callback_counts : %d", callback_counts);
160         for (; i < callback_counts; i++) {
161                 switch (i) {
162                 case 0:
163                         registered_telephony_incoming_cb = va_arg(list, sync_agent_user_callback_cb_plugin);
164                         _DEBUG_INFO("set user callback ( for Telephony Incoming ) !!");
165                         break;
166                 case 1:
167                         registered_telephony_end_cb = va_arg(list, sync_agent_user_callback_cb_plugin);
168                         _DEBUG_INFO("set user callback ( for Telephony End ) !!");
169                         break;
170                 default:
171                         break;
172                 }
173         }
174
175         //      va_end(list);
176
177         _EXTERN_FUNC_EXIT;
178 }
179
180 int _register_telephony_noti_event()
181 {
182         _EXTERN_FUNC_ENTER;
183
184         int ret_val = 1;
185         int api_err = 0;
186
187         api_err = tel_register_noti_event(tel_handler, TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE, __tel_alert_status_noti_cb, NULL);   /* Tapi BS patch */
188         if (api_err != 0) {
189                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE ) failed ( err_code : %d ) !!", api_err);
190                 ret_val = -1;
191         } else {
192                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE ) success !!");
193         }
194
195         api_err = tel_register_noti_event(tel_handler, TAPI_NOTI_VOICE_CALL_STATUS_IDLE, __tel_alert_status_noti_cb, NULL);     /* Tapi BS patch */
196         if (api_err != 0) {
197                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_IDLE ) failed ( err_code : %d ) !!", api_err);
198                 ret_val = -1;
199         } else {
200                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_IDLE ) success !!");
201         }
202
203         api_err = tel_register_noti_event(tel_handler, TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE, __tel_alert_status_noti_cb, NULL);   /* Tapi BS patch */
204         if (api_err != 0) {
205                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE ) failed ( err_code : %d ) !!", api_err);
206                 ret_val = -1;
207         } else {
208                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE ) success !!");
209         }
210
211         api_err = tel_register_noti_event(tel_handler, TAPI_NOTI_VIDEO_CALL_STATUS_IDLE, __tel_alert_status_noti_cb, NULL);     /* Tapi BS patch */
212         if (api_err != 0) {
213                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE ) failed ( err_code : %d ) !!", api_err);
214                 ret_val = -1;
215         } else {
216                 _DEBUG_TRACE("tel_register_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE ) success !!");
217         }
218
219         _EXTERN_FUNC_EXIT;
220
221         return ret_val;
222 }
223
224 int _unregister_telephony_noti_event()
225 {
226         _EXTERN_FUNC_ENTER;
227
228         int err = 0;
229         int res = 1;
230
231         err = tel_deregister_noti_event(tel_handler, TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE);
232         if (err != 0) {
233                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE ) failed ( err_code : %d ) !!", err);
234                 res = -1;
235         } else {
236                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE ) success !!");
237         }
238
239         err = tel_deregister_noti_event(tel_handler, TAPI_NOTI_VOICE_CALL_STATUS_IDLE);
240         if (err != 0) {
241                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_IDLE ) failed ( err_code : %d ) !!", err);
242                 res = -1;
243         } else {
244                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VOICE_CALL_STATUS_IDLE ) success !!");
245         }
246
247         err = tel_deregister_noti_event(tel_handler, TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE);
248         if (err != 0) {
249                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE ) failed ( err_code : %d ) !!", err);
250                 res = -1;
251         } else {
252                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE ) success !!");
253         }
254
255         err = tel_deregister_noti_event(tel_handler, TAPI_NOTI_VIDEO_CALL_STATUS_IDLE);
256         if (err != 0) {
257                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_IDLE ) failed ( err_code : %d ) !!", err);
258                 res = -1;
259         } else {
260                 _DEBUG_TRACE("tel_deregister_noti_event( TAPI_NOTI_VIDEO_CALL_STATUS_IDLE ) success !!");
261         }
262
263         _EXTERN_FUNC_EXIT;
264
265         return res;
266 }
267
268 static void __tel_alert_status_noti_cb(TapiHandle * handle, const char *noti_id, void *data, void *user_data)
269 {
270         _INNER_FUNC_ENTER;
271
272         retm_if((noti_id) == NULL, "noti_id is NULL!!");
273
274         _DEBUG_VERBOSE("NOTI_ID : %s", noti_id);
275
276         if (!strcmp(TAPI_NOTI_VOICE_CALL_STATUS_IDLE, noti_id) || !strcmp(TAPI_NOTI_VIDEO_CALL_STATUS_IDLE, noti_id)) {
277                 if (registered_telephony_end_cb != NULL) {
278                         registered_telephony_end_cb(0, (void *)user_data);
279                 } else {
280                         _DEBUG_VERBOSE("not registered registered_telephony_end_cb !!");
281                 }
282                 _INNER_FUNC_EXIT;
283                 return;
284         }
285
286         if (!strcmp(TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE, noti_id) || !strcmp(TAPI_NOTI_VIDEO_CALL_STATUS_ACTIVE, noti_id)) {
287                 if (registered_telephony_incoming_cb != NULL) {
288                         registered_telephony_incoming_cb(0, (void *)user_data);
289                 } else {
290                         _DEBUG_VERBOSE("not registered registered_telephony_incoming_cb !!");
291                 }
292                 _INNER_FUNC_EXIT;
293                 return;
294         }
295
296         _INNER_FUNC_EXIT;
297         return;
298 }