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 g_conn_listener = NULL;
163 if (NULL != g_conn_sender) {
164 dbus_connection_close(g_conn_sender);
165 g_conn_sender = NULL;
169 int tts_dbus_open_connection()
171 if (NULL != g_conn_sender && NULL != g_conn_listener) {
172 SLOG(LOG_WARN, TAG_TTSC, "already existed connection ");
178 /* initialise the error value */
179 dbus_error_init(&err);
181 /* connect to the DBUS system bus, and check for errors */
182 g_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
183 if (dbus_error_is_set(&err)) {
184 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Dbus Connection Error (%s)", err.message);
185 dbus_error_free(&err);
188 if (NULL == g_conn_sender) {
189 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] fail to get dbus connection");
190 return TTS_ERROR_OPERATION_FAILED;
193 dbus_connection_set_exit_on_disconnect(g_conn_sender, false);
195 g_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
196 if (dbus_error_is_set(&err)) {
197 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Dbus Connection Error (%s)", err.message);
198 dbus_error_free(&err);
201 if (NULL == g_conn_listener) {
202 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] fail to get dbus connection for listener");
203 __tts_dbus_connection_free();
204 return TTS_ERROR_OPERATION_FAILED;
207 dbus_connection_set_exit_on_disconnect(g_conn_listener, false);
209 char rule[128] = {0, };
210 snprintf(rule, 128, "type='signal',interface='%s'", TTS_CLIENT_SERVICE_INTERFACE);
212 /* add a rule for which messages we want to see */
213 dbus_bus_add_match(g_conn_listener, rule, &err);
214 dbus_connection_flush(g_conn_listener);
217 if (true != dbus_connection_get_unix_fd(g_conn_listener, &fd)) {
218 SLOG(LOG_ERROR, TAG_TTSC, "Fail to get fd from dbus");
219 __tts_dbus_connection_free();
220 return TTS_ERROR_OPERATION_FAILED;
222 SLOG(LOG_DEBUG, TAG_TTSC, "Get fd from dbus : %d", fd);
225 g_dbus_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, NULL, NULL, NULL);
226 if (NULL == g_dbus_fd_handler) {
227 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get fd handler from ecore");
228 __tts_dbus_connection_free();
229 return TTS_ERROR_OPERATION_FAILED;
235 int tts_dbus_close_connection()
238 dbus_error_init(&err);
240 if (NULL != g_dbus_fd_handler) {
241 ecore_main_fd_handler_del(g_dbus_fd_handler);
242 g_dbus_fd_handler = NULL;
245 __tts_dbus_connection_free();
250 int tts_dbus_reconnect()
252 if (!g_conn_sender || !g_conn_listener) {
253 tts_dbus_close_connection();
255 if (0 != tts_dbus_open_connection()) {
256 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to reconnect");
260 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Reconnect");
264 bool sender_connected = dbus_connection_get_is_connected(g_conn_sender);
265 bool listener_connected = dbus_connection_get_is_connected(g_conn_listener);
266 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Sender(%s) Listener(%s)",
267 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
269 if (false == sender_connected || false == listener_connected) {
270 tts_dbus_close_connection();
272 if (0 != tts_dbus_open_connection()) {
273 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to reconnect");
277 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Reconnect");
283 DBusMessage* __tts_dbus_make_message(int uid, const char* method)
285 if (NULL == method) {
286 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input method is NULL");
290 tts_client_s* client = tts_client_get_by_uid(uid);
293 if (NULL == client) {
294 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not available");
300 if (TTS_MODE_DEFAULT == client->mode) {
301 msg = dbus_message_new_method_call(
302 TTS_SERVER_SERVICE_NAME,
303 TTS_SERVER_SERVICE_OBJECT_PATH,
304 TTS_SERVER_SERVICE_INTERFACE,
306 } else if (TTS_MODE_NOTIFICATION == client->mode) {
307 msg = dbus_message_new_method_call(
308 TTS_NOTI_SERVER_SERVICE_NAME,
309 TTS_NOTI_SERVER_SERVICE_OBJECT_PATH,
310 TTS_NOTI_SERVER_SERVICE_INTERFACE,
312 } else if (TTS_MODE_SCREEN_READER == client->mode) {
313 msg = dbus_message_new_method_call(
314 TTS_SR_SERVER_SERVICE_NAME,
315 TTS_SR_SERVER_SERVICE_OBJECT_PATH,
316 TTS_SR_SERVER_SERVICE_INTERFACE,
319 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input mode is not available");
326 int tts_dbus_request_hello(int uid)
329 dbus_error_init(&err);
332 msg = __tts_dbus_make_message(uid, TTS_METHOD_HELLO);
334 if (dbus_error_is_set(&err)) {
335 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts dbus log : %s", err);
336 dbus_error_free(&err);
340 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts hello : Fail to make message");
341 return TTS_ERROR_OPERATION_FAILED;
344 DBusMessage* result_msg = NULL;
347 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, HELLO_WAITING_TIME, &err);
348 dbus_message_unref(msg);
349 if (dbus_error_is_set(&err)) {
350 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts dbus log : %s", err);
351 dbus_error_free(&err);
354 if (NULL != result_msg) {
355 dbus_message_unref(result_msg);
357 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts hello");
360 result = TTS_ERROR_TIMED_OUT;
366 int tts_dbus_request_initialize(int uid, bool* credential_needed)
370 dbus_error_init(&err);
372 msg = __tts_dbus_make_message(uid, TTS_METHOD_INITIALIZE);
375 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts initialize : Fail to make message");
376 return TTS_ERROR_OPERATION_FAILED;
378 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts initialize : uid(%d)", uid);
382 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
383 dbus_message_unref(msg);
384 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
386 return TTS_ERROR_OPERATION_FAILED;
389 DBusMessage* result_msg;
390 int result = TTS_ERROR_OPERATION_FAILED;
392 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
393 dbus_message_unref(msg);
394 if (dbus_error_is_set(&err)) {
395 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
396 dbus_error_free(&err);
400 if (NULL != result_msg) {
401 dbus_message_get_args(result_msg, &err,
402 DBUS_TYPE_INT32, &result,
403 DBUS_TYPE_INT32, &temp,
406 if (dbus_error_is_set(&err)) {
407 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)", err.message);
408 dbus_error_free(&err);
409 result = TTS_ERROR_OPERATION_FAILED;
412 dbus_message_unref(result_msg);
415 *credential_needed = (bool)temp;
416 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts initialize : result = %d, credential_needed(%d)", result, *credential_needed);
418 /* add a rule for daemon error */
419 char rule_err[256] = {0, };
420 tts_client_s* client = tts_client_get_by_uid(uid);
421 if (NULL == client) {
422 SLOG(LOG_ERROR, TAG_TTSC, "Fail to get TTS client");
423 return TTS_ERROR_OPERATION_FAILED;
426 if (TTS_MODE_DEFAULT == client->mode) {
427 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);
428 } else if (TTS_MODE_NOTIFICATION == 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_NOTI_SERVER_SERVICE_INTERFACE);
430 } else if (TTS_MODE_SCREEN_READER == 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_SR_SERVER_SERVICE_INTERFACE);
433 dbus_bus_add_match(g_conn_listener, rule_err, &err);
434 dbus_connection_flush(g_conn_listener);
436 if (dbus_error_is_set(&err)) {
437 SLOG(LOG_ERROR, TAG_TTSC, "Match Error (%s)", err.message);
438 dbus_error_free(&err);
439 return TTS_ERROR_OPERATION_FAILED;
442 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts initialize : result = %d", result);
445 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
446 tts_dbus_reconnect();
447 result = TTS_ERROR_TIMED_OUT;
454 int tts_dbus_request_finalize(int uid)
458 dbus_error_init(&err);
460 /* remove a rule for daemon error */
461 char rule_err[256] = {0, };
462 tts_client_s* client = tts_client_get_by_uid(uid);
463 if (NULL == client) {
464 SLOG(LOG_ERROR, TAG_TTSC, "Fail to get TTS client");
465 return TTS_ERROR_OPERATION_FAILED;
468 if (TTS_MODE_DEFAULT == client->mode) {
469 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);
470 } else if (TTS_MODE_NOTIFICATION == 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_NOTI_SERVER_SERVICE_INTERFACE);
472 } else if (TTS_MODE_SCREEN_READER == 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_SR_SERVER_SERVICE_INTERFACE);
475 dbus_bus_remove_match(g_conn_listener, rule_err, &err);
476 dbus_connection_flush(g_conn_listener);
477 if (dbus_error_is_set(&err)) {
478 SLOG(LOG_ERROR, TAG_TTSC, "Match Error (%s)", err.message);
479 dbus_error_free(&err);
482 msg = __tts_dbus_make_message(uid, TTS_METHOD_FINALIZE);
485 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts finalize : Fail to make message");
486 return TTS_ERROR_OPERATION_FAILED;
488 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts finalize : uid(%d)", uid);
491 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
492 dbus_message_unref(msg);
493 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
495 return TTS_ERROR_OPERATION_FAILED;
498 DBusMessage* result_msg;
499 int result = TTS_ERROR_OPERATION_FAILED;
501 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
502 dbus_message_unref(msg);
503 if (dbus_error_is_set(&err)) {
504 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error %s", err.message);
505 dbus_error_free(&err);
508 if (NULL != result_msg) {
509 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
511 if (dbus_error_is_set(&err)) {
512 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)", err.message);
513 dbus_error_free(&err);
514 result = TTS_ERROR_OPERATION_FAILED;
517 dbus_message_unref(result_msg);
520 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts finalize : result = %d", result);
522 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts finalize : result = %d", result);
525 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
526 tts_dbus_reconnect();
527 result = TTS_ERROR_TIMED_OUT;
533 int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential)
535 if (NULL == text || NULL == lang) {
536 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
537 return TTS_ERROR_INVALID_PARAMETER;
542 dbus_error_init(&err);
544 msg = __tts_dbus_make_message(uid, TTS_METHOD_ADD_QUEUE);
547 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts add text : Fail to make message");
548 return TTS_ERROR_OPERATION_FAILED;
550 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts add text : uid(%d), text(%s), lang(%s), type(%d), speed(%d), id(%d), credential(%s)",
551 uid, text, lang, vctype, speed, uttid, (NULL == credential) ? "NULL" : credential);
555 if (NULL == credential) {
556 temp = strdup("NULL");
558 temp = strdup(credential);
561 if (true != dbus_message_append_args(msg,
562 DBUS_TYPE_INT32, &uid,
563 DBUS_TYPE_STRING, &text,
564 DBUS_TYPE_STRING, &lang,
565 DBUS_TYPE_INT32, &vctype,
566 DBUS_TYPE_INT32, &speed,
567 DBUS_TYPE_INT32, &uttid,
568 DBUS_TYPE_STRING, &temp,
569 DBUS_TYPE_INVALID)) {
570 dbus_message_unref(msg);
571 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
577 return TTS_ERROR_OPERATION_FAILED;
580 DBusMessage* result_msg;
581 int result = TTS_ERROR_OPERATION_FAILED;
583 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
584 dbus_message_unref(msg);
585 if (dbus_error_is_set(&err)) {
586 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
587 dbus_error_free(&err);
590 if (NULL != result_msg) {
591 dbus_message_get_args(result_msg, &err,
592 DBUS_TYPE_INT32, &result,
595 if (dbus_error_is_set(&err)) {
596 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : Get arguments error (%s)", err.message);
597 dbus_error_free(&err);
598 result = TTS_ERROR_OPERATION_FAILED;
600 dbus_message_unref(result_msg);
603 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts add text : result(%d)", result);
605 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : result(%d)", result);
608 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
609 tts_dbus_reconnect();
610 result = TTS_ERROR_TIMED_OUT;
620 int tts_dbus_request_set_private_data(int uid, const char* key, const char* data)
622 if (NULL == key || NULL == data) {
623 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
624 return TTS_ERROR_INVALID_PARAMETER;
629 dbus_error_init(&err);
631 msg = __tts_dbus_make_message(uid, TTS_METHOD_SET_PRIVATE_DATA);
634 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts set private data : Fail to make message");
635 return TTS_ERROR_OPERATION_FAILED;
637 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts set private data : uid(%d)", uid);
640 if (true != dbus_message_append_args(msg,
641 DBUS_TYPE_INT32, &uid,
642 DBUS_TYPE_STRING, &key,
643 DBUS_TYPE_STRING, &data,
644 DBUS_TYPE_INVALID)) {
645 dbus_message_unref(msg);
646 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
648 return TTS_ERROR_OPERATION_FAILED;
651 DBusMessage* result_msg;
652 int result = TTS_ERROR_OPERATION_FAILED;
654 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
655 dbus_message_unref(msg);
656 if (dbus_error_is_set(&err)) {
657 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
658 dbus_error_free(&err);
661 if (NULL != result_msg) {
662 dbus_message_get_args(result_msg, &err,
663 DBUS_TYPE_INT32, &result,
666 if (dbus_error_is_set(&err)) {
667 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts set private data : Get arguments error (%s)", err.message);
668 dbus_error_free(&err);
669 result = TTS_ERROR_OPERATION_FAILED;
671 dbus_message_unref(result_msg);
674 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts set private data : result(%d)", result);
676 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts set private data : result(%d)", result);
679 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
680 tts_dbus_reconnect();
681 result = TTS_ERROR_TIMED_OUT;
687 int tts_dbus_request_get_private_data(int uid, const char* key, char** data)
689 if (NULL == key || NULL == data) {
690 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
691 return TTS_ERROR_INVALID_PARAMETER;
696 dbus_error_init(&err);
698 msg = __tts_dbus_make_message(uid, TTS_METHOD_GET_PRIVATE_DATA);
701 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts get private data : Fail to make message");
702 return TTS_ERROR_OPERATION_FAILED;
704 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts get private data : uid(%d)", uid);
707 if (true != dbus_message_append_args(msg,
708 DBUS_TYPE_INT32, &uid,
709 DBUS_TYPE_STRING, &key,
710 DBUS_TYPE_INVALID)) {
711 dbus_message_unref(msg);
712 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
714 return TTS_ERROR_OPERATION_FAILED;
717 DBusMessage* result_msg;
718 int result = TTS_ERROR_OPERATION_FAILED;
720 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
721 dbus_message_unref(msg);
722 if (dbus_error_is_set(&err)) {
723 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
724 dbus_error_free(&err);
728 if (NULL != result_msg) {
729 dbus_message_get_args(result_msg, &err,
730 DBUS_TYPE_INT32, &result,
731 DBUS_TYPE_STRING, &temp,
734 if (dbus_error_is_set(&err)) {
735 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get private data : Get arguments error (%s)", err.message);
736 dbus_error_free(&err);
737 result = TTS_ERROR_OPERATION_FAILED;
739 dbus_message_unref(result_msg);
742 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get private data : result(%d)", result);
744 *data = strdup(temp);
747 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get private data : result(%d)", result);
750 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
751 tts_dbus_reconnect();
752 result = TTS_ERROR_TIMED_OUT;
758 int tts_dbus_request_play(int uid, const char* credential)
762 dbus_error_init(&err);
764 msg = __tts_dbus_make_message(uid, TTS_METHOD_PLAY);
767 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts play : Fail to make message");
768 return TTS_ERROR_OPERATION_FAILED;
770 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts play : uid(%d)", uid);
774 if (NULL == credential) {
775 temp = strdup("NULL");
777 temp = strdup(credential);
780 if (true != dbus_message_append_args(msg,
781 DBUS_TYPE_INT32, &uid,
782 DBUS_TYPE_STRING, &temp,
783 DBUS_TYPE_INVALID)) {
784 dbus_message_unref(msg);
785 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
791 return TTS_ERROR_OPERATION_FAILED;
794 DBusMessage* result_msg;
795 int result = TTS_ERROR_OPERATION_FAILED;
797 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
798 dbus_message_unref(msg);
799 if (dbus_error_is_set(&err)) {
800 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
801 dbus_error_free(&err);
804 if (NULL != result_msg) {
805 dbus_message_get_args(result_msg, &err,
806 DBUS_TYPE_INT32, &result,
809 if (dbus_error_is_set(&err)) {
810 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : Get arguments error (%s)", err.message);
811 dbus_error_free(&err);
812 result = TTS_ERROR_OPERATION_FAILED;
814 dbus_message_unref(result_msg);
817 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts play : result(%d)", result);
819 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : result(%d)", result);
822 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
823 tts_dbus_reconnect();
824 result = TTS_ERROR_TIMED_OUT;
834 int tts_dbus_request_stop(int uid)
838 dbus_error_init(&err);
840 msg = __tts_dbus_make_message(uid, TTS_METHOD_STOP);
843 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts stop : Fail to make message");
844 return TTS_ERROR_OPERATION_FAILED;
846 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts stop : uid(%d)", uid);
849 DBusMessage* result_msg;
850 int result = TTS_ERROR_OPERATION_FAILED;
852 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
853 dbus_message_unref(msg);
854 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
856 return TTS_ERROR_OPERATION_FAILED;
859 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
860 dbus_message_unref(msg);
861 if (dbus_error_is_set(&err)) {
862 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
863 dbus_error_free(&err);
866 if (NULL != result_msg) {
867 dbus_message_get_args(result_msg, &err,
868 DBUS_TYPE_INT32, &result,
871 if (dbus_error_is_set(&err)) {
872 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : Get arguments error (%s)", err.message);
873 dbus_error_free(&err);
874 result = TTS_ERROR_OPERATION_FAILED;
876 dbus_message_unref(result_msg);
879 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts stop : result(%d)", result);
881 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : result(%d)", result);
884 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
885 tts_dbus_reconnect();
886 result = TTS_ERROR_TIMED_OUT;
892 int tts_dbus_request_pause(int uid)
896 dbus_error_init(&err);
898 msg = __tts_dbus_make_message(uid, TTS_METHOD_PAUSE);
901 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts pause : Fail to make message");
902 return TTS_ERROR_OPERATION_FAILED;
904 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts pause : uid(%d)", uid);
907 DBusMessage* result_msg;
908 int result = TTS_ERROR_OPERATION_FAILED;
910 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
911 dbus_message_unref(msg);
912 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
914 return TTS_ERROR_OPERATION_FAILED;
917 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
918 dbus_message_unref(msg);
919 if (dbus_error_is_set(&err)) {
920 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
921 dbus_error_free(&err);
924 if (NULL != result_msg) {
925 dbus_message_get_args(result_msg, &err,
926 DBUS_TYPE_INT32, &result,
929 if (dbus_error_is_set(&err)) {
930 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : Get arguments error (%s)", err.message);
931 dbus_error_free(&err);
932 result = TTS_ERROR_OPERATION_FAILED;
934 dbus_message_unref(result_msg);
937 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts pause : result(%d)", result);
939 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : result(%d)", result);
942 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
943 tts_dbus_reconnect();
944 result = TTS_ERROR_TIMED_OUT;
950 int tts_dbus_request_play_pcm(int uid)
954 dbus_error_init(&err);
956 msg = __tts_dbus_make_message(uid, TTS_METHOD_PLAY_PCM);
959 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts play pcm : Fail to make message");
960 return TTS_ERROR_OPERATION_FAILED;
962 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts play pcm : uid(%d)", uid);
965 if (true != dbus_message_append_args(msg,
966 DBUS_TYPE_INT32, &uid,
967 DBUS_TYPE_INVALID)) {
968 dbus_message_unref(msg);
969 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
970 return TTS_ERROR_OPERATION_FAILED;
973 DBusMessage* result_msg;
974 int result = TTS_ERROR_OPERATION_FAILED;
976 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
977 dbus_message_unref(msg);
978 if (dbus_error_is_set(&err)) {
979 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
980 dbus_error_free(&err);
983 if (NULL != result_msg) {
984 dbus_message_get_args(result_msg, &err,
985 DBUS_TYPE_INT32, &result,
988 if (dbus_error_is_set(&err)) {
989 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play pcm : Get arguments error (%s)", err.message);
990 dbus_error_free(&err);
991 result = TTS_ERROR_OPERATION_FAILED;
993 dbus_message_unref(result_msg);
996 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts play pcm : result(%d)", result);
998 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play pcm : result(%d)", result);
1001 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
1002 tts_dbus_reconnect();
1003 result = TTS_ERROR_TIMED_OUT;
1009 int tts_dbus_request_stop_pcm(int uid)
1013 dbus_error_init(&err);
1015 msg = __tts_dbus_make_message(uid, TTS_METHOD_STOP_PCM);
1018 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts stop pcm : Fail to make message");
1019 return TTS_ERROR_OPERATION_FAILED;
1021 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts stop pcm : uid(%d)", uid);
1024 if (true != dbus_message_append_args(msg,
1025 DBUS_TYPE_INT32, &uid,
1026 DBUS_TYPE_INVALID)) {
1027 dbus_message_unref(msg);
1028 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
1029 return TTS_ERROR_OPERATION_FAILED;
1032 DBusMessage* result_msg;
1033 int result = TTS_ERROR_OPERATION_FAILED;
1035 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
1036 dbus_message_unref(msg);
1037 if (dbus_error_is_set(&err)) {
1038 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
1039 dbus_error_free(&err);
1042 if (NULL != result_msg) {
1043 dbus_message_get_args(result_msg, &err,
1044 DBUS_TYPE_INT32, &result,
1047 if (dbus_error_is_set(&err)) {
1048 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop pcm : Get arguments error (%s)", err.message);
1049 dbus_error_free(&err);
1050 result = TTS_ERROR_OPERATION_FAILED;
1052 dbus_message_unref(result_msg);
1055 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts stop pcm : result(%d)", result);
1057 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop pcm : result(%d)", result);
1060 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
1061 tts_dbus_reconnect();
1062 result = TTS_ERROR_TIMED_OUT;
1068 int tts_dbus_request_add_pcm(int uid, int event, const char* data, int data_size, int audio_type, int rate)
1072 dbus_error_init(&err);
1074 msg = __tts_dbus_make_message(uid, TTS_METHOD_ADD_PCM);
1077 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts add pcm : Fail to make message");
1078 return TTS_ERROR_OPERATION_FAILED;
1080 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts add pcm : uid(%d)", uid);
1083 if (true != dbus_message_append_args(msg,
1084 DBUS_TYPE_INT32, &uid,
1085 DBUS_TYPE_INT32, &event,
1086 DBUS_TYPE_INT32, &audio_type,
1087 DBUS_TYPE_INT32, &rate,
1088 DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
1090 DBUS_TYPE_INVALID)) {
1091 dbus_message_unref(msg);
1092 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
1093 return TTS_ERROR_OPERATION_FAILED;
1096 DBusMessage* result_msg;
1097 int result = TTS_ERROR_OPERATION_FAILED;
1099 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
1100 dbus_message_unref(msg);
1101 if (dbus_error_is_set(&err)) {
1102 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
1103 dbus_error_free(&err);
1106 if (NULL != result_msg) {
1107 dbus_message_get_args(result_msg, &err,
1108 DBUS_TYPE_INT32, &result,
1111 if (dbus_error_is_set(&err)) {
1112 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add pcm : Get arguments error (%s)", err.message);
1113 dbus_error_free(&err);
1114 result = TTS_ERROR_OPERATION_FAILED;
1116 dbus_message_unref(result_msg);
1119 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts add pcm : result(%d)", result);
1121 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add pcm : result(%d)", result);
1124 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
1125 tts_dbus_reconnect();
1126 result = TTS_ERROR_TIMED_OUT;