2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
\r
4 * Licensed under the Apache License, Version 2.0 (the License);
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an AS IS BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 #include <sys/stat.h>
\r
28 #include <msg_transport.h>
\r
29 #include <msg_storage.h>
\r
33 #include <messages.h>
\r
34 #include <messages_types.h>
\r
35 #include <messages_private.h>
\r
40 #define LOG_TAG "CAPI_MESSAGING"
\r
43 void _messages_push_incoming_mediator_cb(msg_handle_t handle, const char *push_header, const char *push_body, int push_body_len, void *user_param)
\r
45 messages_push_incoming_callback_s *_cb = (messages_push_incoming_callback_s *)user_param;
\r
47 if (_cb && _cb->callback)
\r
49 ((messages_push_incoming_cb)_cb->callback)(push_header, push_body, push_body_len, _cb->user_data);
\r
55 int messages_push_add_incoming_cb(messages_service_h service, const char *app_id,
\r
56 messages_push_incoming_cb callback, void *user_data)
\r
58 CHECK_MESSAGES_SUPPORTED(MESSAGES_TELEPHONY_FEATURE);
\r
61 messages_push_incoming_callback_s *_cb;
\r
63 messages_service_s *_svc = (messages_service_s *)service;
\r
66 CHECK_NULL(_svc->service_h);
\r
68 CHECK_NULL(callback);
\r
70 _cb = (messages_push_incoming_callback_s *)malloc(sizeof(messages_push_incoming_callback_s));
\r
73 LOGE("[%s] OUT_OF_MEMORY(0x%08x) fail to create a '_cb'."
\r
74 , __FUNCTION__, MESSAGES_ERROR_OUT_OF_MEMORY);
\r
75 return MESSAGES_ERROR_OUT_OF_MEMORY;
\r
78 _cb->app_id = strdup(app_id);
\r
79 _cb->callback = callback;
\r
80 _cb->user_data = user_data;
\r
82 ret = msg_reg_push_message_callback(_svc->service_h, _messages_push_incoming_mediator_cb, app_id, (void*)_cb);
\r
83 if (MSG_SUCCESS != ret)
\r
89 return ERROR_CONVERT(ret);
\r
92 _svc->push_incoming_cb_list = g_slist_append(_svc->push_incoming_cb_list, _cb);
\r
94 return MESSAGES_ERROR_NONE;
\r
97 int messages_push_remove_incoming_cb(messages_service_h service, const char *app_id)
\r
99 CHECK_MESSAGES_SUPPORTED(MESSAGES_TELEPHONY_FEATURE);
\r
102 messages_push_incoming_callback_s *_cb;
\r
104 messages_service_s *_svc = (messages_service_s *)service;
\r
107 CHECK_NULL(_svc->service_h);
\r
108 CHECK_NULL(app_id);
\r
110 for (i=0; i < g_slist_length(_svc->push_incoming_cb_list); i++)
\r
112 _cb = (messages_push_incoming_callback_s *)g_slist_nth_data(_svc->push_incoming_cb_list, i);
\r
113 if (NULL != _cb && NULL != _cb->app_id)
\r
115 if (!strcmp(_cb->app_id, app_id)) {
\r
116 _cb->callback = NULL;
\r
121 return MESSAGES_ERROR_NONE;
\r
125 int messages_push_register(messages_service_h service, const char *content_type, const char *app_id)
\r
127 CHECK_MESSAGES_SUPPORTED(MESSAGES_TELEPHONY_FEATURE);
\r
131 msg_struct_t push_info;
\r
134 messages_service_s *_svc = (messages_service_s *)service;
\r
137 CHECK_NULL(_svc->service_h);
\r
138 CHECK_NULL(content_type);
\r
139 CHECK_NULL(app_id);
\r
141 ret = app_get_id(&pkg_name);
\r
142 if (APP_ERROR_NONE != ret) {
\r
143 LOGE("[%s:%d] OPERATION_FAILED(0x%08x) : app_get_id failed.",
\r
144 __FUNCTION__, __LINE__, MESSAGES_ERROR_OPERATION_FAILED);
\r
145 return MESSAGES_ERROR_OPERATION_FAILED;
\r
148 push_info = msg_create_struct(MSG_STRUCT_PUSH_CONFIG_INFO);
\r
149 msg_set_str_value(push_info, MSG_PUSH_CONFIG_CONTENT_TYPE_STR, (char *)content_type, MAX_WAPPUSH_CONTENT_TYPE_LEN);
\r
150 msg_set_str_value(push_info, MSG_PUSH_CONFIG_APPLICATON_ID_STR, (char *)app_id, MAX_WAPPUSH_ID_LEN);
\r
151 msg_set_str_value(push_info, MSG_PUSH_CONFIG_PACKAGE_NAME_STR, pkg_name, MSG_FILEPATH_LEN_MAX);
\r
154 ret = msg_add_push_event(_svc->service_h, push_info);
\r
155 msg_release_struct(&push_info);
\r
156 if (MSG_SUCCESS != ret)
\r
158 return ERROR_CONVERT(ret);
\r
161 return MESSAGES_ERROR_NONE;
\r
164 int messages_push_deregister(messages_service_h service, const char *content_type, const char *app_id)
\r
166 CHECK_MESSAGES_SUPPORTED(MESSAGES_TELEPHONY_FEATURE);
\r
170 msg_struct_t push_info;
\r
173 messages_service_s *_svc = (messages_service_s *)service;
\r
176 CHECK_NULL(_svc->service_h);
\r
177 CHECK_NULL(content_type);
\r
178 CHECK_NULL(app_id);
\r
180 ret = app_get_id(&pkg_name);
\r
181 if (APP_ERROR_NONE != ret) {
\r
182 LOGE("[%s:%d] OPERATION_FAILED(0x%08x) : app_get_id failed.",
\r
183 __FUNCTION__, __LINE__, MESSAGES_ERROR_OPERATION_FAILED);
\r
184 return MESSAGES_ERROR_OPERATION_FAILED;
\r
187 push_info = msg_create_struct(MSG_STRUCT_PUSH_CONFIG_INFO);
\r
188 msg_set_str_value(push_info, MSG_PUSH_CONFIG_CONTENT_TYPE_STR, (char *)content_type, MAX_WAPPUSH_CONTENT_TYPE_LEN);
\r
189 msg_set_str_value(push_info, MSG_PUSH_CONFIG_APPLICATON_ID_STR, (char *)app_id, MAX_WAPPUSH_ID_LEN);
\r
190 msg_set_str_value(push_info, MSG_PUSH_CONFIG_PACKAGE_NAME_STR, pkg_name, MSG_FILEPATH_LEN_MAX);
\r
193 ret = msg_delete_push_event(_svc->service_h, push_info);
\r
194 msg_release_struct(&push_info);
\r
195 if (MSG_SUCCESS != ret)
\r
197 return ERROR_CONVERT(ret);
\r
200 return MESSAGES_ERROR_NONE;
\r
203 int messages_push_reregister(messages_service_h service, const char *content_type, const char *app_id,
\r
204 const char *dst_content_type, const char *dst_app_id)
\r
206 CHECK_MESSAGES_SUPPORTED(MESSAGES_TELEPHONY_FEATURE);
\r
210 msg_struct_t push_info;
\r
211 msg_struct_t dst_push_info;
\r
214 messages_service_s *_svc = (messages_service_s *)service;
\r
217 CHECK_NULL(_svc->service_h);
\r
218 CHECK_NULL(content_type);
\r
219 CHECK_NULL(app_id);
\r
220 CHECK_NULL(dst_content_type);
\r
221 CHECK_NULL(dst_app_id);
\r
223 ret = app_get_id(&pkg_name);
\r
224 if (APP_ERROR_NONE != ret) {
\r
225 LOGE("[%s:%d] OPERATION_FAILED(0x%08x) : app_get_id failed.",
\r
226 __FUNCTION__, __LINE__, MESSAGES_ERROR_OPERATION_FAILED);
\r
227 return MESSAGES_ERROR_OPERATION_FAILED;
\r
230 push_info = msg_create_struct(MSG_STRUCT_PUSH_CONFIG_INFO);
\r
231 msg_set_str_value(push_info, MSG_PUSH_CONFIG_CONTENT_TYPE_STR, (char *)content_type, MAX_WAPPUSH_CONTENT_TYPE_LEN);
\r
232 msg_set_str_value(push_info, MSG_PUSH_CONFIG_APPLICATON_ID_STR, (char *)app_id, MAX_WAPPUSH_ID_LEN);
\r
233 msg_set_str_value(push_info, MSG_PUSH_CONFIG_PACKAGE_NAME_STR, pkg_name, MSG_FILEPATH_LEN_MAX);
\r
235 dst_push_info = msg_create_struct(MSG_STRUCT_PUSH_CONFIG_INFO);
\r
236 msg_set_str_value(dst_push_info, MSG_PUSH_CONFIG_CONTENT_TYPE_STR, (char *)dst_content_type, MAX_WAPPUSH_CONTENT_TYPE_LEN);
\r
237 msg_set_str_value(dst_push_info, MSG_PUSH_CONFIG_APPLICATON_ID_STR, (char *)dst_app_id, MAX_WAPPUSH_ID_LEN);
\r
238 msg_set_str_value(dst_push_info, MSG_PUSH_CONFIG_PACKAGE_NAME_STR, pkg_name, MSG_FILEPATH_LEN_MAX);
\r
241 ret = msg_update_push_event(_svc->service_h, push_info, dst_push_info);
\r
242 msg_release_struct(&push_info);
\r
243 msg_release_struct(&dst_push_info);
\r
244 if (MSG_SUCCESS != ret)
\r
246 return ERROR_CONVERT(ret);
\r
249 return MESSAGES_ERROR_NONE;
\r