4 * Copyright (c) 2010 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 #include "ctsvc_internal.h"
22 #include "ctsvc_inotify.h"
23 #include "ctsvc_client_handle.h"
24 #include "ctsvc_client_ipc.h"
26 static int _client_noti_check_read_permission(const char *view_uri)
31 if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ADDRESSBOOK, strlen(CTSVC_VIEW_URI_ADDRESSBOOK))
32 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PERSON, strlen(CTSVC_VIEW_URI_PERSON))
33 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_CONTACT, strlen(CTSVC_VIEW_URI_CONTACT))
34 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SIMPLE_CONTACT, strlen(CTSVC_VIEW_URI_SIMPLE_CONTACT))
35 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_GROUP, strlen(CTSVC_VIEW_URI_GROUP))
36 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_MY_PROFILE, strlen(CTSVC_VIEW_URI_MY_PROFILE))
37 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NAME, strlen(CTSVC_VIEW_URI_NAME))
38 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NUMBER, strlen(CTSVC_VIEW_URI_NUMBER))
39 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EMAIL, strlen(CTSVC_VIEW_URI_EMAIL))
40 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ADDRESS, strlen(CTSVC_VIEW_URI_ADDRESS))
41 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NOTE, strlen(CTSVC_VIEW_URI_NOTE))
42 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_URL, strlen(CTSVC_VIEW_URI_URL))
43 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EVENT, strlen(CTSVC_VIEW_URI_EVENT))
44 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_IMAGE, strlen(CTSVC_VIEW_URI_IMAGE))
45 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_COMPANY, strlen(CTSVC_VIEW_URI_COMPANY))
46 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_NICKNAME, strlen(CTSVC_VIEW_URI_NICKNAME))
47 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_MESSENGER, strlen(CTSVC_VIEW_URI_MESSENGER))
48 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_EXTENSION, strlen(CTSVC_VIEW_URI_EXTENSION))
49 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PROFILE, strlen(CTSVC_VIEW_URI_PROFILE))
50 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_RELATIONSHIP, strlen(CTSVC_VIEW_URI_RELATIONSHIP))
51 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ACTIVITY, strlen(CTSVC_VIEW_URI_ACTIVITY))
52 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_ACTIVITY_PHOTO, strlen(CTSVC_VIEW_URI_ACTIVITY_PHOTO))
53 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SPEEDDIAL, strlen(CTSVC_VIEW_URI_SPEEDDIAL))
54 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SDN, strlen(CTSVC_VIEW_URI_SDN))
55 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_GROUP_RELATION, strlen(CTSVC_VIEW_URI_GROUP_RELATION))
56 || STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_SIP, strlen(CTSVC_VIEW_URI_SIP))) {
57 ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_CONTACT_READ, &result);
58 if (CONTACTS_ERROR_NONE != ret) {
60 ERR("ctsvc_ipc_client_check_permission() Fail(%d)", ret);
65 RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED,
66 "Permission denied(contact read)");
67 } else if (STRING_EQUAL == strncmp(view_uri, CTSVC_VIEW_URI_PHONELOG, strlen(CTSVC_VIEW_URI_PHONELOG))) {
68 ret = ctsvc_ipc_client_check_permission(CTSVC_PERMISSION_PHONELOG_READ, &result);
69 if (CONTACTS_ERROR_NONE != ret) {
71 ERR("ctsvc_ipc_client_check_permission() Fail(%d)", ret);
76 RETVM_IF(result == false, CONTACTS_ERROR_PERMISSION_DENIED,
77 "Permission denied(phonelog read)");
80 return CONTACTS_ERROR_NONE;
83 EXPORT_API int contacts_db_add_changed_cb(const char *view_uri, contacts_db_changed_cb cb,
86 CHECK_CONTACT_SUPPORTED(CONTACT_FEATURE);
89 RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
90 RETV_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER);
92 ret = _client_noti_check_read_permission(view_uri);
93 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret,
94 "_client_noti_check_read_permission() Fail(%d)", ret);
96 ret = ctsvc_inotify_subscribe(view_uri, cb, user_data);
97 if (CONTACTS_ERROR_NONE != ret) {
99 ERR("ctsvc_inotify_subscribe(%s) Fail(%d)", view_uri, ret);
104 return CONTACTS_ERROR_NONE;
107 EXPORT_API int contacts_db_remove_changed_cb(const char *view_uri, contacts_db_changed_cb cb,
110 CHECK_CONTACT_SUPPORTED(CONTACT_FEATURE);
113 RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
114 RETV_IF(NULL == cb, CONTACTS_ERROR_INVALID_PARAMETER);
116 ret = ctsvc_inotify_unsubscribe(view_uri, cb, user_data);
117 if (CONTACTS_ERROR_NONE != ret) {
118 /* LCOV_EXCL_START */
119 ERR("ctsvc_inotify_unsubscribe(%s) Fail(%d)", view_uri, ret);
124 return CONTACTS_ERROR_NONE;