2 * Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 * http://www.apache.org/licenses/LICENSE-2.0
7 * Unless required by applicable law or agreed to in writing, software
8 * distributed under the License is distributed on an "AS IS" BASIS,
9 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 * See the License for the specific language governing permissions and
11 * limitations under the License.
17 #include <sys/inotify.h>
19 #include "tts_client.h"
20 #include "tts_config_mgr.h"
26 #define HELLO_WAITING_TIME 500
27 #define WAITING_TIME 5000
29 static DBusConnection* g_conn_sender = NULL;
30 static DBusConnection* g_conn_listener = NULL;
32 static Ecore_Fd_Handler* g_dbus_fd_handler = NULL;
35 extern int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char *err_msg);
37 extern int __tts_cb_set_state(int uid, int state);
39 extern int __tts_cb_utt_started(int uid, int utt_id);
41 extern int __tts_cb_utt_completed(int uid, int utt_id);
44 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
46 if (NULL == g_conn_listener) return ECORE_CALLBACK_RENEW;
48 dbus_connection_read_write_dispatch(g_conn_listener, 50);
51 DBusMessage* msg = NULL;
52 msg = dbus_connection_pop_message(g_conn_listener);
54 if (true != dbus_connection_get_is_connected(g_conn_listener)) {
55 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Connection is disconnected");
59 /* loop again if we haven't read a message */
65 dbus_error_init(&err);
67 char if_name[64] = {0, };
68 snprintf(if_name, 64, "%s", TTS_CLIENT_SERVICE_INTERFACE);
70 if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_UTTERANCE_STARTED)) {
74 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INT32, &uttid, DBUS_TYPE_INVALID);
75 if (dbus_error_is_set(&err)) {
76 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Get arguments error (%s)", err.message);
77 dbus_error_free(&err);
80 if (0 == __tts_cb_utt_started(uid, uttid)) {
81 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts utterance started : uid(%d) uttid(%d)", uid, uttid);
83 } /* TTSD_METHOD_UTTERANCE_STARTED */
85 else if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_UTTERANCE_COMPLETED)) {
89 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INT32, &uttid, DBUS_TYPE_INVALID);
90 if (dbus_error_is_set(&err)) {
91 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Get arguments error (%s)", err.message);
92 dbus_error_free(&err);
95 if (0 == __tts_cb_utt_completed(uid, uttid)) {
96 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts utterance completed : uid(%d) uttid(%d)", uid, uttid);
98 } /* TTS_SIGNAL_UTTERANCE_STARTED */
100 else if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_SET_STATE)) {
104 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
105 if (dbus_error_is_set(&err)) {
106 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Get arguments error (%s)", err.message);
107 dbus_error_free(&err);
110 if (0 == __tts_cb_set_state(uid, state)) {
111 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts state changed : uid(%d) state(%d)", uid, state);
113 } /* TTSD_SIGNAL_SET_STATE */
115 else if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_ERROR)) {
121 dbus_message_get_args(msg, &err,
122 DBUS_TYPE_INT32, &uid,
123 DBUS_TYPE_INT32, &uttid,
124 DBUS_TYPE_INT32, &reason,
125 DBUS_TYPE_STRING, &err_msg,
128 if (dbus_error_is_set(&err)) {
129 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Error message - Get arguments error (%s)", err.message);
130 dbus_error_free(&err);
132 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Error message : uid(%d), error(%d), uttid(%d), err_msg(%s)", uid, reason, uttid, (NULL == err_msg) ? "NULL" : err_msg);
133 __tts_cb_error(uid, reason, uttid, err_msg);
136 } /* TTSD_SIGNAL_ERROR */
138 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
139 SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Owner Changed");
140 __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
141 SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
142 SLOG(LOG_DEBUG, TAG_TTSC, " ");
143 } /* NameOwnerChanged */
146 SLOG(LOG_DEBUG, TAG_TTSC, "Message is NOT valid");
147 dbus_message_unref(msg);
151 /* free the message */
152 dbus_message_unref(msg);
154 return ECORE_CALLBACK_PASS_ON;
157 static void __tts_dbus_connection_free()
159 if (NULL != g_conn_listener) {
160 dbus_connection_close(g_conn_listener);
161 dbus_connection_unref(g_conn_listener);
162 g_conn_listener = NULL;
164 if (NULL != g_conn_sender) {
165 dbus_connection_close(g_conn_sender);
166 dbus_connection_unref(g_conn_sender);
167 g_conn_sender = NULL;
171 int tts_dbus_open_connection()
173 if (NULL != g_conn_sender && NULL != g_conn_listener) {
174 SLOG(LOG_WARN, TAG_TTSC, "already existed connection ");
180 /* initialise the error value */
181 dbus_error_init(&err);
183 /* connect to the DBUS system bus, and check for errors */
184 g_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
185 if (dbus_error_is_set(&err)) {
186 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Dbus Connection Error (%s)", err.message);
187 dbus_error_free(&err);
190 if (NULL == g_conn_sender) {
191 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] fail to get dbus connection");
192 return TTS_ERROR_OPERATION_FAILED;
195 dbus_connection_set_exit_on_disconnect(g_conn_sender, false);
197 g_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
198 if (dbus_error_is_set(&err)) {
199 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Dbus Connection Error (%s)", err.message);
200 dbus_error_free(&err);
203 if (NULL == g_conn_listener) {
204 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] fail to get dbus connection for listener");
205 __tts_dbus_connection_free();
206 return TTS_ERROR_OPERATION_FAILED;
209 dbus_connection_set_exit_on_disconnect(g_conn_listener, false);
211 char rule[128] = {0, };
212 snprintf(rule, 128, "type='signal',interface='%s'", TTS_CLIENT_SERVICE_INTERFACE);
214 /* add a rule for which messages we want to see */
215 dbus_bus_add_match(g_conn_listener, rule, &err);
216 dbus_connection_flush(g_conn_listener);
219 if (true != dbus_connection_get_unix_fd(g_conn_listener, &fd)) {
220 SLOG(LOG_ERROR, TAG_TTSC, "Fail to get fd from dbus");
221 __tts_dbus_connection_free();
222 return TTS_ERROR_OPERATION_FAILED;
224 SLOG(LOG_DEBUG, TAG_TTSC, "Get fd from dbus : %d", fd);
227 g_dbus_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, NULL, NULL, NULL);
228 if (NULL == g_dbus_fd_handler) {
229 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get fd handler from ecore");
230 __tts_dbus_connection_free();
231 return TTS_ERROR_OPERATION_FAILED;
237 int tts_dbus_close_connection()
240 dbus_error_init(&err);
242 if (NULL != g_dbus_fd_handler) {
243 ecore_main_fd_handler_del(g_dbus_fd_handler);
244 g_dbus_fd_handler = NULL;
247 __tts_dbus_connection_free();
252 int tts_dbus_reconnect()
254 if (!g_conn_sender || !g_conn_listener) {
255 tts_dbus_close_connection();
257 if (0 != tts_dbus_open_connection()) {
258 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to reconnect");
262 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Reconnect");
266 bool sender_connected = dbus_connection_get_is_connected(g_conn_sender);
267 bool listener_connected = dbus_connection_get_is_connected(g_conn_listener);
268 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Sender(%s) Listener(%s)",
269 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
271 if (false == sender_connected || false == listener_connected) {
272 tts_dbus_close_connection();
274 if (0 != tts_dbus_open_connection()) {
275 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to reconnect");
279 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Reconnect");
285 DBusMessage* __tts_dbus_make_message(int uid, const char* method)
287 if (NULL == method) {
288 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input method is NULL");
292 tts_client_s* client = tts_client_get_by_uid(uid);
295 if (NULL == client) {
296 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not available");
302 if (TTS_MODE_DEFAULT == client->mode) {
303 msg = dbus_message_new_method_call(
304 TTS_SERVER_SERVICE_NAME,
305 TTS_SERVER_SERVICE_OBJECT_PATH,
306 TTS_SERVER_SERVICE_INTERFACE,
308 } else if (TTS_MODE_NOTIFICATION == client->mode) {
309 msg = dbus_message_new_method_call(
310 TTS_NOTI_SERVER_SERVICE_NAME,
311 TTS_NOTI_SERVER_SERVICE_OBJECT_PATH,
312 TTS_NOTI_SERVER_SERVICE_INTERFACE,
314 } else if (TTS_MODE_SCREEN_READER == client->mode) {
315 msg = dbus_message_new_method_call(
316 TTS_SR_SERVER_SERVICE_NAME,
317 TTS_SR_SERVER_SERVICE_OBJECT_PATH,
318 TTS_SR_SERVER_SERVICE_INTERFACE,
321 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input mode is not available");
328 int tts_dbus_request_hello(int uid)
331 dbus_error_init(&err);
334 msg = __tts_dbus_make_message(uid, TTS_METHOD_HELLO);
336 if (dbus_error_is_set(&err)) {
337 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts dbus log : %s", err);
338 dbus_error_free(&err);
342 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts hello : Fail to make message");
343 return TTS_ERROR_OPERATION_FAILED;
346 DBusMessage* result_msg = NULL;
349 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, HELLO_WAITING_TIME, &err);
350 dbus_message_unref(msg);
351 if (dbus_error_is_set(&err)) {
352 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts dbus log : %s", err);
353 dbus_error_free(&err);
356 if (NULL != result_msg) {
357 dbus_message_unref(result_msg);
359 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts hello");
362 result = TTS_ERROR_TIMED_OUT;
368 int tts_dbus_request_initialize(int uid, bool* credential_needed)
372 dbus_error_init(&err);
374 msg = __tts_dbus_make_message(uid, TTS_METHOD_INITIALIZE);
377 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts initialize : Fail to make message");
378 return TTS_ERROR_OPERATION_FAILED;
380 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts initialize : uid(%d)", uid);
384 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
385 dbus_message_unref(msg);
386 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
388 return TTS_ERROR_OPERATION_FAILED;
391 DBusMessage* result_msg;
392 int result = TTS_ERROR_OPERATION_FAILED;
394 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
395 dbus_message_unref(msg);
396 if (dbus_error_is_set(&err)) {
397 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
398 dbus_error_free(&err);
402 if (NULL != result_msg) {
403 dbus_message_get_args(result_msg, &err,
404 DBUS_TYPE_INT32, &result,
405 DBUS_TYPE_INT32, &temp,
408 if (dbus_error_is_set(&err)) {
409 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)", err.message);
410 dbus_error_free(&err);
411 result = TTS_ERROR_OPERATION_FAILED;
414 dbus_message_unref(result_msg);
417 *credential_needed = (bool)temp;
418 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts initialize : result = %d, credential_needed(%d)", result, *credential_needed);
420 /* add a rule for daemon error */
421 char rule_err[256] = {0, };
422 tts_client_s* client = tts_client_get_by_uid(uid);
423 if (NULL == client) {
424 SLOG(LOG_ERROR, TAG_TTSC, "Fail to get TTS client");
425 return TTS_ERROR_OPERATION_FAILED;
428 if (TTS_MODE_DEFAULT == client->mode) {
429 snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_SERVER_SERVICE_INTERFACE);
430 } else if (TTS_MODE_NOTIFICATION == client->mode) {
431 snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_NOTI_SERVER_SERVICE_INTERFACE);
432 } else if (TTS_MODE_SCREEN_READER == client->mode) {
433 snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_SR_SERVER_SERVICE_INTERFACE);
435 dbus_bus_add_match(g_conn_listener, rule_err, &err);
436 dbus_connection_flush(g_conn_listener);
438 if (dbus_error_is_set(&err)) {
439 SLOG(LOG_ERROR, TAG_TTSC, "Match Error (%s)", err.message);
440 dbus_error_free(&err);
441 return TTS_ERROR_OPERATION_FAILED;
444 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts initialize : result = %d", result);
447 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
448 tts_dbus_reconnect();
449 result = TTS_ERROR_TIMED_OUT;
456 int tts_dbus_request_finalize(int uid)
460 dbus_error_init(&err);
462 /* remove a rule for daemon error */
463 char rule_err[256] = {0, };
464 tts_client_s* client = tts_client_get_by_uid(uid);
465 if (NULL == client) {
466 SLOG(LOG_ERROR, TAG_TTSC, "Fail to get TTS client");
467 return TTS_ERROR_OPERATION_FAILED;
470 if (TTS_MODE_DEFAULT == client->mode) {
471 snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_SERVER_SERVICE_INTERFACE);
472 } else if (TTS_MODE_NOTIFICATION == client->mode) {
473 snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_NOTI_SERVER_SERVICE_INTERFACE);
474 } else if (TTS_MODE_SCREEN_READER == client->mode) {
475 snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", TTS_SR_SERVER_SERVICE_INTERFACE);
477 dbus_bus_remove_match(g_conn_listener, rule_err, &err);
478 dbus_connection_flush(g_conn_listener);
479 if (dbus_error_is_set(&err)) {
480 SLOG(LOG_ERROR, TAG_TTSC, "Match Error (%s)", err.message);
481 dbus_error_free(&err);
484 msg = __tts_dbus_make_message(uid, TTS_METHOD_FINALIZE);
487 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts finalize : Fail to make message");
488 return TTS_ERROR_OPERATION_FAILED;
490 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts finalize : uid(%d)", uid);
493 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
494 dbus_message_unref(msg);
495 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
497 return TTS_ERROR_OPERATION_FAILED;
500 DBusMessage* result_msg;
501 int result = TTS_ERROR_OPERATION_FAILED;
503 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
504 dbus_message_unref(msg);
505 if (dbus_error_is_set(&err)) {
506 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error %s", err.message);
507 dbus_error_free(&err);
510 if (NULL != result_msg) {
511 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
513 if (dbus_error_is_set(&err)) {
514 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)", err.message);
515 dbus_error_free(&err);
516 result = TTS_ERROR_OPERATION_FAILED;
519 dbus_message_unref(result_msg);
522 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts finalize : result = %d", result);
524 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts finalize : result = %d", result);
527 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
528 tts_dbus_reconnect();
529 result = TTS_ERROR_TIMED_OUT;
535 int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential)
537 if (NULL == text || NULL == lang) {
538 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
539 return TTS_ERROR_INVALID_PARAMETER;
544 dbus_error_init(&err);
546 msg = __tts_dbus_make_message(uid, TTS_METHOD_ADD_QUEUE);
549 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts add text : Fail to make message");
550 return TTS_ERROR_OPERATION_FAILED;
552 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts add text : uid(%d), text(%s), lang(%s), type(%d), speed(%d), id(%d), credential(%s)",
553 uid, text, lang, vctype, speed, uttid, (NULL == credential) ? "NULL" : credential);
557 if (NULL == credential) {
558 temp = strdup("NULL");
560 temp = strdup(credential);
563 if (true != dbus_message_append_args(msg,
564 DBUS_TYPE_INT32, &uid,
565 DBUS_TYPE_STRING, &text,
566 DBUS_TYPE_STRING, &lang,
567 DBUS_TYPE_INT32, &vctype,
568 DBUS_TYPE_INT32, &speed,
569 DBUS_TYPE_INT32, &uttid,
570 DBUS_TYPE_STRING, &temp,
571 DBUS_TYPE_INVALID)) {
572 dbus_message_unref(msg);
573 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
579 return TTS_ERROR_OPERATION_FAILED;
582 DBusMessage* result_msg;
583 int result = TTS_ERROR_OPERATION_FAILED;
585 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
586 dbus_message_unref(msg);
587 if (dbus_error_is_set(&err)) {
588 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
589 dbus_error_free(&err);
592 if (NULL != result_msg) {
593 dbus_message_get_args(result_msg, &err,
594 DBUS_TYPE_INT32, &result,
597 if (dbus_error_is_set(&err)) {
598 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : Get arguments error (%s)", err.message);
599 dbus_error_free(&err);
600 result = TTS_ERROR_OPERATION_FAILED;
602 dbus_message_unref(result_msg);
605 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts add text : result(%d)", result);
607 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : result(%d)", result);
610 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
611 tts_dbus_reconnect();
612 result = TTS_ERROR_TIMED_OUT;
622 int tts_dbus_request_set_private_data(int uid, const char* key, const char* data)
624 if (NULL == key || NULL == data) {
625 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
626 return TTS_ERROR_INVALID_PARAMETER;
631 dbus_error_init(&err);
633 msg = __tts_dbus_make_message(uid, TTS_METHOD_SET_PRIVATE_DATA);
636 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts set private data : Fail to make message");
637 return TTS_ERROR_OPERATION_FAILED;
639 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts set private data : uid(%d)", uid);
642 if (true != dbus_message_append_args(msg,
643 DBUS_TYPE_INT32, &uid,
644 DBUS_TYPE_STRING, &key,
645 DBUS_TYPE_STRING, &data,
646 DBUS_TYPE_INVALID)) {
647 dbus_message_unref(msg);
648 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
650 return TTS_ERROR_OPERATION_FAILED;
653 DBusMessage* result_msg;
654 int result = TTS_ERROR_OPERATION_FAILED;
656 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
657 dbus_message_unref(msg);
658 if (dbus_error_is_set(&err)) {
659 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
660 dbus_error_free(&err);
663 if (NULL != result_msg) {
664 dbus_message_get_args(result_msg, &err,
665 DBUS_TYPE_INT32, &result,
668 if (dbus_error_is_set(&err)) {
669 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts set private data : Get arguments error (%s)", err.message);
670 dbus_error_free(&err);
671 result = TTS_ERROR_OPERATION_FAILED;
673 dbus_message_unref(result_msg);
676 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts set private data : result(%d)", result);
678 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts set private data : result(%d)", result);
681 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
682 tts_dbus_reconnect();
683 result = TTS_ERROR_TIMED_OUT;
689 int tts_dbus_request_get_private_data(int uid, const char* key, char** data)
691 if (NULL == key || NULL == data) {
692 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
693 return TTS_ERROR_INVALID_PARAMETER;
698 dbus_error_init(&err);
700 msg = __tts_dbus_make_message(uid, TTS_METHOD_GET_PRIVATE_DATA);
703 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts get private data : Fail to make message");
704 return TTS_ERROR_OPERATION_FAILED;
706 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts get private data : uid(%d)", uid);
709 if (true != dbus_message_append_args(msg,
710 DBUS_TYPE_INT32, &uid,
711 DBUS_TYPE_STRING, &key,
712 DBUS_TYPE_INVALID)) {
713 dbus_message_unref(msg);
714 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
716 return TTS_ERROR_OPERATION_FAILED;
719 DBusMessage* result_msg;
720 int result = TTS_ERROR_OPERATION_FAILED;
722 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
723 dbus_message_unref(msg);
724 if (dbus_error_is_set(&err)) {
725 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
726 dbus_error_free(&err);
730 if (NULL != result_msg) {
731 dbus_message_get_args(result_msg, &err,
732 DBUS_TYPE_INT32, &result,
733 DBUS_TYPE_STRING, &temp,
736 if (dbus_error_is_set(&err)) {
737 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get private data : Get arguments error (%s)", err.message);
738 dbus_error_free(&err);
739 result = TTS_ERROR_OPERATION_FAILED;
741 dbus_message_unref(result_msg);
744 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get private data : result(%d)", result);
746 *data = strdup(temp);
749 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get private data : result(%d)", result);
752 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
753 tts_dbus_reconnect();
754 result = TTS_ERROR_TIMED_OUT;
760 int tts_dbus_request_play(int uid, const char* credential)
764 dbus_error_init(&err);
766 msg = __tts_dbus_make_message(uid, TTS_METHOD_PLAY);
769 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts play : Fail to make message");
770 return TTS_ERROR_OPERATION_FAILED;
772 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts play : uid(%d)", uid);
776 if (NULL == credential) {
777 temp = strdup("NULL");
779 temp = strdup(credential);
782 if (true != dbus_message_append_args(msg,
783 DBUS_TYPE_INT32, &uid,
784 DBUS_TYPE_STRING, &temp,
785 DBUS_TYPE_INVALID)) {
786 dbus_message_unref(msg);
787 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
793 return TTS_ERROR_OPERATION_FAILED;
796 DBusMessage* result_msg;
797 int result = TTS_ERROR_OPERATION_FAILED;
799 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
800 dbus_message_unref(msg);
801 if (dbus_error_is_set(&err)) {
802 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
803 dbus_error_free(&err);
806 if (NULL != result_msg) {
807 dbus_message_get_args(result_msg, &err,
808 DBUS_TYPE_INT32, &result,
811 if (dbus_error_is_set(&err)) {
812 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : Get arguments error (%s)", err.message);
813 dbus_error_free(&err);
814 result = TTS_ERROR_OPERATION_FAILED;
816 dbus_message_unref(result_msg);
819 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts play : result(%d)", result);
821 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : result(%d)", result);
824 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
825 tts_dbus_reconnect();
826 result = TTS_ERROR_TIMED_OUT;
836 int tts_dbus_request_stop(int uid)
840 dbus_error_init(&err);
842 msg = __tts_dbus_make_message(uid, TTS_METHOD_STOP);
845 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts stop : Fail to make message");
846 return TTS_ERROR_OPERATION_FAILED;
848 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts stop : uid(%d)", uid);
851 DBusMessage* result_msg;
852 int result = TTS_ERROR_OPERATION_FAILED;
854 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
855 dbus_message_unref(msg);
856 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
858 return TTS_ERROR_OPERATION_FAILED;
861 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
862 dbus_message_unref(msg);
863 if (dbus_error_is_set(&err)) {
864 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
865 dbus_error_free(&err);
868 if (NULL != result_msg) {
869 dbus_message_get_args(result_msg, &err,
870 DBUS_TYPE_INT32, &result,
873 if (dbus_error_is_set(&err)) {
874 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : Get arguments error (%s)", err.message);
875 dbus_error_free(&err);
876 result = TTS_ERROR_OPERATION_FAILED;
878 dbus_message_unref(result_msg);
881 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts stop : result(%d)", result);
883 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : result(%d)", result);
886 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
887 tts_dbus_reconnect();
888 result = TTS_ERROR_TIMED_OUT;
894 int tts_dbus_request_pause(int uid)
898 dbus_error_init(&err);
900 msg = __tts_dbus_make_message(uid, TTS_METHOD_PAUSE);
903 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts pause : Fail to make message");
904 return TTS_ERROR_OPERATION_FAILED;
906 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts pause : uid(%d)", uid);
909 DBusMessage* result_msg;
910 int result = TTS_ERROR_OPERATION_FAILED;
912 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
913 dbus_message_unref(msg);
914 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
916 return TTS_ERROR_OPERATION_FAILED;
919 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
920 dbus_message_unref(msg);
921 if (dbus_error_is_set(&err)) {
922 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
923 dbus_error_free(&err);
926 if (NULL != result_msg) {
927 dbus_message_get_args(result_msg, &err,
928 DBUS_TYPE_INT32, &result,
931 if (dbus_error_is_set(&err)) {
932 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : Get arguments error (%s)", err.message);
933 dbus_error_free(&err);
934 result = TTS_ERROR_OPERATION_FAILED;
936 dbus_message_unref(result_msg);
939 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts pause : result(%d)", result);
941 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : result(%d)", result);
944 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
945 tts_dbus_reconnect();
946 result = TTS_ERROR_TIMED_OUT;
952 int tts_dbus_request_play_pcm(int uid)
956 dbus_error_init(&err);
958 msg = __tts_dbus_make_message(uid, TTS_METHOD_PLAY_PCM);
961 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts play pcm : Fail to make message");
962 return TTS_ERROR_OPERATION_FAILED;
964 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts play pcm : uid(%d)", uid);
967 if (true != dbus_message_append_args(msg,
968 DBUS_TYPE_INT32, &uid,
969 DBUS_TYPE_INVALID)) {
970 dbus_message_unref(msg);
971 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
972 return TTS_ERROR_OPERATION_FAILED;
975 DBusMessage* result_msg;
976 int result = TTS_ERROR_OPERATION_FAILED;
978 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
979 dbus_message_unref(msg);
980 if (dbus_error_is_set(&err)) {
981 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
982 dbus_error_free(&err);
985 if (NULL != result_msg) {
986 dbus_message_get_args(result_msg, &err,
987 DBUS_TYPE_INT32, &result,
990 if (dbus_error_is_set(&err)) {
991 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play pcm : Get arguments error (%s)", err.message);
992 dbus_error_free(&err);
993 result = TTS_ERROR_OPERATION_FAILED;
995 dbus_message_unref(result_msg);
998 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts play pcm : result(%d)", result);
1000 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play pcm : result(%d)", result);
1003 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
1004 tts_dbus_reconnect();
1005 result = TTS_ERROR_TIMED_OUT;
1011 int tts_dbus_request_stop_pcm(int uid)
1015 dbus_error_init(&err);
1017 msg = __tts_dbus_make_message(uid, TTS_METHOD_STOP_PCM);
1020 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts stop pcm : Fail to make message");
1021 return TTS_ERROR_OPERATION_FAILED;
1023 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts stop pcm : uid(%d)", uid);
1026 if (true != dbus_message_append_args(msg,
1027 DBUS_TYPE_INT32, &uid,
1028 DBUS_TYPE_INVALID)) {
1029 dbus_message_unref(msg);
1030 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
1031 return TTS_ERROR_OPERATION_FAILED;
1034 DBusMessage* result_msg;
1035 int result = TTS_ERROR_OPERATION_FAILED;
1037 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
1038 dbus_message_unref(msg);
1039 if (dbus_error_is_set(&err)) {
1040 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
1041 dbus_error_free(&err);
1044 if (NULL != result_msg) {
1045 dbus_message_get_args(result_msg, &err,
1046 DBUS_TYPE_INT32, &result,
1049 if (dbus_error_is_set(&err)) {
1050 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop pcm : Get arguments error (%s)", err.message);
1051 dbus_error_free(&err);
1052 result = TTS_ERROR_OPERATION_FAILED;
1054 dbus_message_unref(result_msg);
1057 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts stop pcm : result(%d)", result);
1059 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop pcm : result(%d)", result);
1062 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
1063 tts_dbus_reconnect();
1064 result = TTS_ERROR_TIMED_OUT;
1070 int tts_dbus_request_add_pcm(int uid, int event, const char* data, int data_size, int audio_type, int rate)
1074 dbus_error_init(&err);
1076 msg = __tts_dbus_make_message(uid, TTS_METHOD_ADD_PCM);
1079 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts add pcm : Fail to make message");
1080 return TTS_ERROR_OPERATION_FAILED;
1082 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts add pcm : uid(%d)", uid);
1085 if (true != dbus_message_append_args(msg,
1086 DBUS_TYPE_INT32, &uid,
1087 DBUS_TYPE_INT32, &event,
1088 DBUS_TYPE_INT32, &audio_type,
1089 DBUS_TYPE_INT32, &rate,
1090 DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
1092 DBUS_TYPE_INVALID)) {
1093 dbus_message_unref(msg);
1094 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
1095 return TTS_ERROR_OPERATION_FAILED;
1098 DBusMessage* result_msg;
1099 int result = TTS_ERROR_OPERATION_FAILED;
1101 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
1102 dbus_message_unref(msg);
1103 if (dbus_error_is_set(&err)) {
1104 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
1105 dbus_error_free(&err);
1108 if (NULL != result_msg) {
1109 dbus_message_get_args(result_msg, &err,
1110 DBUS_TYPE_INT32, &result,
1113 if (dbus_error_is_set(&err)) {
1114 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add pcm : Get arguments error (%s)", err.message);
1115 dbus_error_free(&err);
1116 result = TTS_ERROR_OPERATION_FAILED;
1118 dbus_message_unref(result_msg);
1121 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts add pcm : result(%d)", result);
1123 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add pcm : result(%d)", result);
1126 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
1127 tts_dbus_reconnect();
1128 result = TTS_ERROR_TIMED_OUT;