Add dbus conf file & Fix daemon crash issue
[platform/core/telephony/tel-plugin-packetservice.git] / include / ps_common.h
1 /*
2  * tel-plugin-packetservice
3  *
4  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: DongHoo Park <donghoo.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #ifndef __PS_COMMON_H__
22 #define __PS_COMMON_H__
23
24 #define PS_DBUS_SERVICE "com.tcore.ps"
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <glib.h>
30 #include <gio/gio.h>
31 #include <alarm.h>
32
33 #include <tcore.h>
34 #include <plugin.h>
35 #include <storage.h>
36 #include <server.h>
37 #include <core_object.h>
38 #include <hal.h>
39
40 #include <cynara-client.h>
41
42 #include "generated-code.h"
43 #include "ps_log.h"
44
45 #define FAIL_RESPONSE(ivc,msg) g_dbus_method_invocation_return_error(ivc, \
46                 G_DBUS_ERROR, G_DBUS_ERROR_FAILED, msg);
47
48
49 #define PS_NO_PENDING_REQUEST 0x00
50
51 #define PS_NETWORK_SEARCH_PENDING 0x01
52 #define PS_RESET_NETWORK_SEARCH_FLAG 0x0E
53
54 #define PS_NETWORK_SELECTION_PENDING 0x02
55 #define PS_NETWORK_RESET_SELECTION_FLAG 0x0D
56
57 #define PS_NETWORK_SELECT_MODE 0x04
58 #define PS_NETWORK_RESET_SELECT_MODE_FLAG 0x0B
59
60 #define PS_NETWORK_GET_MODE 0x08
61 #define PS_NETWORK_RESET_GET_MODE_FLAG 0x07
62
63 #define PS_NETWORK_SET_FLIGHT_MODE 0x10
64 #define PS_NETWORK_RESET_SET_FLIGHT_MODE_FLAG 0xEF
65
66 #define PS_NETWORK_SET_POWER_OFF 0x20
67 #define PS_NETWORK_RESET_SET_POWER_OFF_FLAG 0xDF
68
69 #define PS_NETWORK_SET_POWER_LOW 0x40
70 #define PS_NETWORK_RESET_SET_POWER_LOW_FLAG 0xBF
71
72 #define PS_NETWORK_SET_DEFAULT_DATA_SUBS 0x80
73 #define PS_NETWORK_RESET_SET_DEFAULT_DATA_SUBS 0x7F
74
75 #define PS_SIM_SET_POWER_STATE 0x08
76 #define PS_SIM_SET_POWER_STATE_FLAG 0x07
77
78
79 /*Storage Key value*/
80 #define KEY_3G_ENABLE                           STORAGE_KEY_3G_ENABLE
81 #define KEY_DATA_ROAMING_SETTING        STORAGE_KEY_SETAPPL_STATE_DATA_ROAMING_BOOL
82 #define KEY_POWER_SAVING_MODE           STORAGE_KEY_POWER_SAVING_MODE
83 #define KEY_PM_STATE                            STORAGE_KEY_PM_STATE
84 #define KEY_NETWORK_RESTRICT_MODE   STORAGE_KEY_SETAPPL_NETWORK_RESTRICT_MODE
85 #ifdef POWER_SAVING_FEATURE_WEARABLE
86 #define KEY_WECONN_ALL_CONNECTED        STORAGE_KEY_WECONN_ALL_CONNECTED
87 #endif
88 #define KEY_SAP_CONNECTION_TYPE         STORAGE_KEY_SAP_CONNECTION_TYPE
89 #define KEY_WIFI_STATE STORAGE_KEY_WIFI_STATE_INT
90
91 #define PS_ERR_INTERNAL "Internal Error"
92 #define PS_ERR_NO_SERVICE "NO service"
93 #define PS_ERR_TRASPORT "No Transport"
94 #define PS_ERR_NO_PROFILE "No Profile"
95 #define PS_ERR_WRONG_PROFILE "Wrong Profile"
96 #define PS_ERR_MAX "Unknown Error"
97
98 #define AC_PS_PUBLIC                    "telephony_framework::api_ps_public"
99 #define AC_PS_PRIVATE                   "telephony_framework::api_ps_private"
100 #define AC_PS_PROFILE                   "telephony_framework::api_ps_profile"
101
102 #define BOOL2STRING(a)  ((a == TRUE) ? ("TRUE") : ("FALSE"))
103 #define CHAR2STRING(a)  g_strdup_printf("%c", a)
104 #define INT2STRING(a)   g_strdup_printf("%d", a)
105
106 /* Tizen Power saving mode */
107 #define POWER_SAVING_MODE_NORMAL   0x00
108 #define POWER_SAVING_MODE_POWERFUL 0x01
109 #define POWER_SAVING_MODE_EMERGENCY 0x02
110 #define POWER_SAVING_MODE_WEARABLE 0x03
111 #define POWER_SAVING_MODE_FMM 0x10
112
113 /*Tizen CDMA dummy Profile Index*/
114 #define PS_CDMA_DUMMY_PROFILE_IDX 0
115 #define PS_CDMA_DUMMY_PROFILE_PLMN "00000"
116
117 /*
118  * PS plugin Private information
119  */
120 typedef struct {
121         GDBusConnection *conn; /* DBUS connection */
122         guint bus_id; /* Packet service BUS ID */
123
124         /* Parent plug-in */
125         TcorePlugin *p;
126
127         /* List of masters */
128         GSList *master;
129         cynara *p_cynara;
130 } PsPrivInfo;
131
132 typedef enum {
133         PS_SUBS_PRIMARY,
134         PS_SUBS_SECONDARY,
135         PS_SUBS_TERTIARY,
136         PS_SUBS_MAX = 0xFF
137 } ps_subs_type;
138
139 enum ps_modem_state {
140         PS_MODEM_STATE_UNKNOWN = -1,
141         PS_MODEM_STATE_OFFLINE = 0x00,
142         PS_MODEM_STATE_ONLINE = 0x01,
143         PS_MODEM_STATE_LOW = 0x02,
144 };
145
146 enum ps_pdp_permanet_reject {
147         /*3GPP spec defined Call End reasons*/
148         PS_PDP_PERMANENT_REJECT_OPERATOR_DETERMINED_BARRING                            = 8,
149         PS_PDP_PERMANENT_REJECT_LLC_SNDCP_FAILURE                                      = 25,
150         PS_PDP_PERMANENT_REJECT_INSUFFICIENT_RESOURCES                                 = 26,
151         PS_PDP_PERMANENT_REJECT_UNKNOWN_APN                                            = 27,
152         PS_PDP_PERMANENT_REJECT_UNKNOWN_PDP                                            = 28,
153         PS_PDP_PERMANENT_REJECT_AUTH_FAILED                                            = 29,
154         PS_PDP_PERMANENT_REJECT_GGSN_REJECT                                            = 30,
155         PS_PDP_PERMANENT_REJECT_ACTIVATION_REJECT                                      = 31,
156         PS_PDP_PERMANENT_REJECT_OPTION_NOT_SUPPORTED                                   = 32,
157         PS_PDP_PERMANENT_REJECT_OPTION_UNSUBSCRIBED                                    = 33,
158         PS_PDP_PERMANENT_REJECT_OPTION_TEMP_OOO                                        = 34,
159         PS_PDP_PERMANENT_REJECT_NSAPI_ALREADY_USED                                     = 35,
160         PS_PDP_PERMANENT_REJECT_IP_V4_ONLY_ALLOWED                                     = 50,
161         PS_PDP_PERMANENT_REJECT_IP_V6_ONLY_ALLOWED                                     = 51,
162         PS_PDP_PERMANENT_REJECT_SINGLE_ADDR_BEARER_ONLY                                = 52,
163         PS_PDP_PERMANENT_REJECT_MESSAGE_INCORRECT_SEMANTIC                             = 95,
164         PS_PDP_PERMANENT_REJECT_INVALID_MANDATORY_INFO                                 = 96,
165         PS_PDP_PERMANENT_REJECT_MESSAGE_TYPE_UNSUPPORTED                               = 97,
166         PS_PDP_PERMANENT_REJECT_MSG_TYPE_NONCOMPATIBLE_STATE                           = 98,
167         PS_PDP_PERMANENT_REJECT_UNKNOWN_INFO_ELEMENT                                   = 99,
168         PS_PDP_PERMANENT_REJECT_CONDITIONAL_IE_ERROR                                   = 100,
169         PS_PDP_PERMANENT_REJECT_MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE                    = 101,
170         PS_PDP_PERMANENT_REJECT_PROTOCOL_ERROR                                         = 111,
171         PS_PDP_PERMANENT_REJECT_APN_TYPE_CONFLICT                                      = 112,
172 };
173
174
175 enum ps_wifi_state {
176         PS_WIFI_STATE_OFF = 0,
177         PS_WIFI_STATE_DICONNECTED = 1,
178         PS_WIFI_STATE_CONNECTED = 2
179 };
180
181 typedef struct packet_service_master {
182         gchar *path;
183         TcorePlugin *plg;
184         GDBusConnection *conn;
185         PacketServiceMaster *if_obj;
186         GHashTable *modems;
187 } ps_master_t;
188
189 typedef struct packet_service_modem {
190         gchar* path;
191         gpointer p_master;
192         TcorePlugin *plg;
193         CoreObject *co_modem;
194         GDBusConnection *conn;
195         PacketServiceModem *if_obj;
196
197         /* Temp DBus value */
198         GDBusMethodInvocation *invocation;
199         gint type;
200
201         /* Value from modem */
202         gchar* operator;
203         int powered;
204         gboolean sim_init;
205         gboolean reset_profile;
206         gboolean flight_mode;
207         gboolean flight_mode_ups; /*CP state right before UPS*/
208
209         gboolean roaming_allowed;
210         gboolean roaming;
211         gboolean roaming_apn_support;
212
213         gboolean data_allowed;
214         gint ps_mode;
215         unsigned char hook_flag;
216         gboolean mode_pref_changed;
217         GQueue *work_queue;
218         gchar *cp_name;
219         GHashTable *services;
220         GSList *contexts;
221         GSource *reset_profile_gsource;
222 } ps_modem_t;
223
224 typedef struct packet_service_service {
225         gchar *path;
226         TcorePlugin *plg;
227         GDBusConnection *conn;
228         PacketServiceService *if_obj;
229
230         gpointer p_modem;
231         CoreObject *co_network;
232         CoreObject *co_ps;
233
234         gboolean ps_attached;
235         gboolean roaming;
236         gboolean restricted;
237         gboolean initial_pdp_conn; // If FALSE, PDP never been connected.
238         gboolean wifi_connected_checked; // If TRUE, We already checked wifi-connected state.
239         gboolean attach_apn_complete; // set TRUE, initial define is complete for attach APN.
240         enum telephony_network_access_technology act;
241         /*PDP retry timer*/
242         alarm_id_t timer_src;
243         guint connection_timeout;
244
245         GSList *contexts;
246 } ps_service_t;
247
248 typedef struct packet_service_context {
249         gchar* path;
250         gchar* mccmnc;
251         GDBusConnection *conn;
252         PacketServiceContext *if_obj;
253         TcorePlugin *plg;
254
255         gboolean alwayson;
256 #ifdef PREPAID_SIM_APN_SUPPORT
257         gboolean prepaid_alwayson;
258 #endif
259         gboolean is_default;
260         gboolean hidden;
261         gboolean editable;
262         gboolean profile_enable;
263
264         gboolean ps_defined;
265         gboolean b_active;
266         gboolean b_notify; // for exception handling in UPS mode.
267         gboolean b_routing_only; // for Ultra Power Saving mode.
268         gpointer p_service;
269         int profile_id;
270         CoreObject *co_context;
271
272         gpointer async_context;
273         gpointer user_data;
274         gboolean deact_required;
275 } ps_context_t;
276
277
278 /*MASTER*/
279 void            __remove_master(gpointer master, gpointer user_data);
280 gpointer    _ps_master_create_master(GDBusConnection *conn, TcorePlugin *p);
281 gboolean    _ps_master_create_modems(gpointer master,TcorePlugin *p);
282 gboolean    _ps_master_destroy_modem(gpointer object, TcorePlugin *plugin);
283 gboolean    _ps_master_get_storage_value_bool(gpointer master, enum tcore_storage_key key);
284 gboolean    _ps_master_get_storage_value_int(gpointer master, enum tcore_storage_key key);
285 gboolean    _ps_master_set_storage_value_bool(gpointer master, enum tcore_storage_key key, gboolean value);
286 gboolean    _ps_master_set_storage_value_int(gpointer master, enum tcore_storage_key key, gint value);
287
288 /*MODEM*/
289 void            __remove_modem_handler(gpointer modem);
290 gpointer    _ps_modem_create_modem(GDBusConnection *conn, TcorePlugin *p, gpointer master,
291                                 gchar* modem_name, gpointer co_modem, gchar *cp_name);
292 void        _ps_modem_destroy_modem(GDBusConnection *conn, gpointer object);
293 gboolean        _ps_modem_send_filght_mode_request(gpointer value, void *data);
294 gboolean    _ps_modem_processing_flight_mode(gpointer object, gboolean enable);
295 gboolean    _ps_modem_processing_power_enable(gpointer modem, int enable);
296 gboolean    _ps_modem_processing_sim_complete(gpointer modem, gboolean complete, gchar *operator);
297 gboolean        _ps_modem_set_reset_profile(gpointer object, gboolean value);
298 gboolean        _ps_modem_get_reset_profile(gpointer object);
299 GSource * _ps_modem_get_profile_reset_gsource(gpointer object);
300 gboolean _ps_modem_set_profile_reset_gsource(gpointer object, GSource * source);
301 gboolean  _ps_modem_remove_profile_reset_gsource(gpointer object);
302 gboolean    _ps_modem_set_sim_enabled(gpointer object, gboolean value);
303 gboolean    _ps_modem_set_data_allowed(gpointer modem, gboolean value);
304 gboolean    _ps_modem_get_data_allowed(gpointer modem);
305 gboolean    _ps_modem_set_data_roaming_allowed(gpointer modem, gboolean value);
306 gboolean    _ps_modem_get_data_roaming_allowed(gpointer modem);
307 gboolean    _ps_modem_get_roaming(gpointer object);
308 void        _ps_modem_set_roaming(gpointer object, gboolean value);
309 gboolean    _ps_modem_set_psmode(gpointer modem, gint value);
310 gint            _ps_modem_get_psmode(gpointer modem);
311 gint            _ps_modem_get_roaming_apn_support(gpointer object);
312 void            _ps_modem_set_roaming_apn_support(gpointer object, gboolean value);
313 guchar          _ps_modem_get_hook_flag(gpointer modem);
314 gboolean    _ps_modem_get_flght_mode(gpointer object);
315 void            _ps_modem_set_flght_mode_ups(gpointer object, gboolean value);
316 gboolean    _ps_modem_get_flght_mode_ups(gpointer object);
317 gboolean    _ps_modem_get_sim_init(gpointer object);
318 int    _ps_modem_get_power(gpointer object);
319 gchar*      _ps_modem_ref_operator(gpointer object);
320 gboolean        _ps_modem_get_properties_handler(gpointer object, GVariantBuilder * properties);
321 GVariant*       _ps_modem_get_properties(gpointer object, GVariantBuilder *properties);
322 GHashTable* _ps_modem_ref_services(gpointer modem);
323 gchar*      _ps_modem_ref_path(gpointer modem);
324 gpointer    _ps_modem_ref_plugin(gpointer modem);
325 gpointer    _ps_modem_ref_dbusconn(gpointer modem);
326 gpointer    _ps_modem_ref_co_modem(gpointer modem);
327 gpointer        _ps_modem_ref_work_queue(gpointer modem);
328 gchar*          _ps_modem_ref_cp_name(gpointer modem);
329 gpointer        _ps_modem_ref_contexts(gpointer modem);
330 ps_subs_type _ps_modem_get_subs_type(gpointer modem);
331 gboolean _ps_modem_initiate_reset_profile(gpointer modem);
332
333 /*SERVICE*/
334 void            __remove_service_handler(gpointer service);
335 gpointer    _ps_service_create_service(GDBusConnection *conn, TcorePlugin *p,
336                                 gpointer modem, CoreObject *co_network, CoreObject *co_ps, gchar* path);
337 gboolean    _ps_service_ref_context(gpointer object, gpointer context);
338 gboolean    _ps_service_ref_contexts(gpointer service, GSList *contexts, gchar *operator);
339 gboolean        _ps_service_unref_context(gpointer object, gpointer context);
340 gboolean        _ps_service_get_properties_handler(gpointer object, GVariantBuilder *properties);
341 GVariant*       _ps_service_get_properties(gpointer object, GVariantBuilder *properties);
342 gchar*      _ps_service_ref_path(gpointer service);
343 gpointer    _ps_service_ref_plugin(gpointer service);
344 gpointer    _ps_service_ref_co_network(gpointer service);
345 gpointer    _ps_service_ref_co_ps(gpointer service);
346 gpointer    _ps_service_ref_modem(gpointer object);
347 gboolean    _ps_service_set_context_devinfo(gpointer service, struct tnoti_ps_pdp_ipconfiguration *devinfo);
348 gboolean        _ps_service_set_context_bearerinfo(gpointer object, struct tnoti_ps_dedicated_bearer_info *bearer_info);
349 int             _ps_service_define_context(gpointer object, gpointer context);
350 int         _ps_service_activate_context(gpointer service, gpointer context);
351 gboolean    _ps_service_deactivate_context(gpointer service, gpointer context);
352 void        _ps_service_set_retry_timeout_value(gpointer service, int value);
353 void        _ps_service_connection_timer(gpointer service, gpointer context);
354 void        _ps_service_reset_connection_timer(gpointer context);
355 int         _ps_service_connect_default_context(gpointer service);
356 #ifdef PREPAID_SIM_APN_SUPPORT
357 gboolean    _ps_service_connect_last_connected_context(gpointer object);
358 int         _ps_service_connect_default_prepaid_context(gpointer object);
359 gboolean    _ps_service_connect_last_connected_context_ex(gpointer service, gpointer object, gboolean *defined, gchar *operator);
360 gpointer    _ps_service_return_context_by_cid(gpointer object, int context_id);
361 #endif
362 void        _ps_service_remove_contexts(gpointer object);
363 void        _ps_service_disconnect_contexts(gpointer service);
364 void    _ps_service_disconnect_internet_mms_contexts(gpointer object);
365 gboolean    _ps_service_processing_network_event(gpointer service, gboolean ps_attached, gboolean roaming);
366 gpointer    _ps_service_return_default_context(gpointer object, int svc_cat_id);
367 gboolean    _ps_service_set_connected(gpointer service, gpointer cstatus, gboolean enabled);
368 void            _ps_service_set_ps_defined(gpointer *object, gboolean value, int cid);
369 gboolean    _ps_service_set_ps_attached(gpointer service, gboolean value);
370 gboolean    _ps_service_set_number_of_pdn_cnt(gpointer object, gchar *operator);
371 gboolean    _ps_service_set_roaming(gpointer service, gboolean value);
372 gboolean    _ps_service_get_roaming(gpointer object);
373 gboolean    _ps_service_set_restricted(gpointer object, gboolean value);
374 gboolean    _ps_service_get_restricted(gpointer object);
375 gboolean    _ps_service_set_access_technology(gpointer service,
376                                 enum telephony_network_access_technology value);
377 enum telephony_ps_state
378                         _ps_service_check_cellular_state(gpointer object);
379 int             _ps_service_update_roaming_apn(gpointer object);
380 void            _ps_service_set_attach_apn(ps_service_t *service);
381
382 /*CONTEXT*/
383 void            __remove_context_handler(gpointer context);
384 gboolean    _ps_context_initialize(gpointer plugin);
385 gboolean    _ps_context_reset_profile_table(gchar *cp_name);
386 gboolean    _ps_context_fill_profile_table_from_ini_file(gchar *cp_name);
387 gboolean    _ps_context_reset_hashtable(gpointer modem);
388 GSList*         _ps_context_create_hashtable(gpointer modem, gboolean roaming);
389 gboolean    _ps_context_add_context(gpointer modem, gchar *operator, GHashTable *property);
390 gboolean        _ps_context_get_properties_handler(gpointer context, GVariantBuilder *properties);
391 GVariant*       _ps_context_get_properties(gpointer context, GVariantBuilder *properties);
392 gboolean    _ps_context_set_service(gpointer context, gpointer service);
393 gpointer    _ps_context_ref_service(gpointer object);
394 gboolean    _ps_context_get_alwayson_enable(gpointer object);
395 #ifdef PREPAID_SIM_APN_SUPPORT
396 gboolean    _ps_context_get_prepaid_alwayson_enable(gpointer object);
397 int         _ps_context_get_profile_id(gpointer object);
398 #endif
399 gchar*      _ps_context_ref_path(gpointer context);
400 gpointer    _ps_context_ref_co_context(gpointer context);
401 gboolean    _ps_context_set_connected(gpointer context, gboolean enabled);
402 gboolean        _ps_context_set_profile_enable(gpointer object, gboolean value);
403 gboolean        _ps_context_get_profile_enable(gpointer object);
404 gboolean        _ps_context_set_ps_defined(gpointer object, gboolean value);
405 gboolean        _ps_context_get_ps_defined(gpointer object);
406 gboolean    _ps_context_set_alwayson_enable(gpointer object, gboolean enabled);
407 gboolean    _ps_context_get_default_context(gpointer object, int svc_cat_id);
408 gboolean    _ps_context_remove_context(gpointer context);
409 gboolean    _ps_context_reset_user_data(gpointer object);
410 gboolean _ps_context_create_cdma_profile(gchar* mccmnc, gchar* cp_name);
411 gpointer    _ps_context_get_user_data(gpointer object);
412 TReturn     _ps_connection_hdlr(gpointer object);
413 void        _ps_default_connection_hdlr(gpointer object);
414 gint        _ps_context_get_number_of_pdn(gchar *operator, gchar *cp_name);
415 gboolean        _ps_context_handle_ifaceup(gpointer user_data);
416 gboolean        _ps_context_handle_ifacedown(gpointer user_data);
417 gboolean        _ps_context_set_bearer_info(gpointer object, struct tnoti_ps_dedicated_bearer_info *bearer_info);
418 gboolean        _ps_context_check_is_roaming_apn_support(gchar* mccmnc, gchar* cp_name);
419
420 /*PLUGIN INTERFACE*/
421 void        _ps_get_network_mode(gpointer data);
422 gboolean    _ps_hook_co_modem_event(gpointer modem);
423 gboolean    _ps_free_co_modem_event(gpointer modem);
424 gboolean    _ps_get_co_modem_values(gpointer modem);
425 gboolean    _ps_hook_co_network_event(gpointer service);
426 gboolean    _ps_free_co_network_event(gpointer service);
427 gboolean    _ps_get_co_network_values(gpointer service);
428 gboolean    _ps_hook_co_ps_event(gpointer service);
429 gboolean        _ps_free_modem_event(gpointer modem);
430 gboolean    _ps_free_co_ps_event(gpointer service);
431 gboolean _ps_free_co_modem_event(gpointer modem);
432 gboolean    _ps_update_cellular_state_key(gpointer service);
433
434 /* Utilities */
435 void __ps_hook_response_cb(UserRequest *ur, enum tcore_response_command command, unsigned int data_len, const void *data, void *user_data);
436 void __ps_modem_cp_reset_send_pending_request_response(gpointer data);
437 enum tcore_hook_return ps_handle_dds(Server *s, UserRequest *ur, void *user_data);
438 enum tcore_hook_return ps_handle_hook(Server *s, UserRequest *ur, void *user_data);
439 void __ps_send_pending_user_request(gpointer data);
440 #ifdef POWER_SAVING_FEATURE_WEARABLE
441 typedef enum {
442         ON_REQUEST,
443         ON_NON_CALL_NOTI_HOOK,
444         ON_CALL_NOTI_HOOK,
445 }__ps_call_flow_type;
446
447 void __ps_check_handle_modem_off_request(gpointer data, __ps_call_flow_type type,enum tcore_notification_command command);
448
449 #endif /* #ifdef POWER_SAVING_FEATURE_WEARABLE */
450
451 enum tcore_hook_return __on_hook_modem_added(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data);
452 enum tcore_hook_return __on_hook_modem_removed(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data);
453
454 /* util.c */
455 gboolean ps_util_check_access_control (cynara *p_cynara, GDBusMethodInvocation *invoc, const char *label, const char *perm);
456 GSource * ps_util_gsource_dispatch(GMainContext *main_context, gint priority, GSourceFunc cb, gpointer data);
457 gboolean ps_util_thread_dispatch(GMainContext *main_context, gint priority, GSourceFunc cb, gpointer data);
458 int  ps_util_system_command(char * command);
459 void ps_util_load_xml_file(const char *docname, const char *groupname, void **i_doc, void **i_root_node);
460 void ps_util_unload_xml_file(void **i_doc, void **i_root_node);
461
462 #endif /* __PS_COMMON_H__ */