add publish/discover dbus api 26/239326/2
authorJaechul Lee <jcsing.lee@samsung.com>
Fri, 24 Jul 2020 03:13:53 +0000 (12:13 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Fri, 24 Jul 2020 07:36:48 +0000 (07:36 +0000)
Change-Id: Ie587ae340ae9199af3b03f44e7de70b9af2ab15c
Signed-off-by: Jaechul Lee <jcsing.lee@samsung.com>
src/stream-manager-dbus-priv.h
src/stream-manager-dbus.c

index 3b0ea885f2f9392ed05aad3c6d2b18eebf239a95..7054d77b039c4059e1ad8b15de71fadcc56605e4 100644 (file)
@@ -55,6 +55,8 @@
 #define STREAM_MANAGER_METHOD_NAME_ACTIVATE_DUCKING                  "ActivateDucking"
 #define STREAM_MANAGER_METHOD_NAME_GET_DUCKING_STATE                 "GetDuckingState"
 #define STREAM_MANAGER_METHOD_NAME_UPDATE_PROPLIST                   "UpdateProplist"
+#define STREAM_MANAGER_METHOD_NAME_DISCOVER_REMOTE_DEVICE            "DiscoverRemoteDevice"
+#define STREAM_MANAGER_METHOD_NAME_PUBLISH_LOCAL_DEVICE              "PublishLocalDevice"
 /* signal */
 #define STREAM_MANAGER_SIGNAL_NAME_VOLUME_CHANGED                    "VolumeChanged"
 #define STREAM_MANAGER_SIGNAL_NAME_DUCKING_STATE_CHANGED             "DuckingStateChanged"
@@ -92,6 +94,8 @@ enum method_handler_index {
     METHOD_HANDLER_ACTIVATE_DUCKING,
     METHOD_HANDLER_GET_DUCKING_STATE,
     METHOD_HANDLER_UPDATE_PROPLIST,
+    METHOD_HANDLER_DISCOVER_REMOTE_DEVICE,
+    METHOD_HANDLER_PUBLISH_LOCAL_DEVICE,
     METHOD_HANDLER_MAX
 };
 
@@ -275,6 +279,12 @@ pa_dbus_interface_info stream_manager_interface_info = {
     "   <arg name=\"index\" direction=\"in\" type=\"u\"/>"                   \
     "   <arg name=\"proplist\" direction=\"in\" type=\"s\"/>"                \
     "  </method>"                                                            \
+    "  <method name=\"STREAM_MANAGER_METHOD_NAME_DISCOVER_REMOTE_DEVICEE\">" \
+    "   <arg name=\"enable\" direction=\"in\" type=\"b\"/>"                  \
+    "  </method>"                                                            \
+    "  <method name=\"STREAM_MANAGER_METHOD_NAME_PUBLISH_LOCAL_DEVICE\">"    \
+    "   <arg name=\"enable\" direction=\"in\" type=\"b\"/>"                  \
+    "  </method>"                                                            \
     "  <signal name=\"STREAM_MANAGER_SIGNAL_NAME_VOLUME_CHANGED\">"          \
     "   <arg name=\"direction\" type=\"s\"/>"                                \
     "   <arg name=\"volume_type\" type=\"s\"/>"                              \
@@ -292,8 +302,8 @@ pa_dbus_interface_info stream_manager_interface_info = {
     "   <arg name=\"peer_info\" type=\"s\"/>"                                \
     "  </signal>"                                                            \
     "  <signal name=\"STREAM_MANAGER_SIGNAL_NAME_REMOTE_ACCESS\">"           \
-    "   <arg name=\"index\" type=\"u\"/>"                                     \
-    "   <arg name=\"permission\" type=\"s\"/>"                                    \
+    "   <arg name=\"index\" type=\"u\"/>"                                    \
+    "   <arg name=\"permission\" type=\"s\"/>"                               \
     "  </signal>"                                                            \
     " </interface>"                                                          \
     " <interface name=\"org.freedesktop.DBus.Introspectable\">"              \
index 9dc9f5300ec3fe367d1494f2a7b8de3070729f45..41ca81c4e531b4a0925feb6b5d815c6474cfe4dc 100644 (file)
@@ -71,6 +71,8 @@ static void handle_get_pid_of_latest_stream(DBusConnection *conn, DBusMessage *m
 static void handle_activate_ducking(DBusConnection *conn, DBusMessage *msg, void *userdata);
 static void handle_get_ducking_state(DBusConnection *conn, DBusMessage *msg, void *userdata);
 static void handle_update_proplist(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_discover_remote_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_publish_local_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
 static void send_volume_changed_signal(DBusConnection *conn, const char *direction, const char *volume_type, const uint32_t volume_level);
 
 static pa_dbus_arg_info get_stream_info_args[]  = { { "stream_type", "s", "in" },
@@ -183,6 +185,9 @@ static pa_dbus_arg_info get_ducking_state_args[] = { { "index", "u", "in" },
 static pa_dbus_arg_info update_proplist_args[] = { { "type", "s", "in" },
                                                    { "index", "u",  "in" },
                                                    { "property", "s", "in" } };
+static pa_dbus_arg_info discover_remote_device_args[] = { { "enable", "b", "in" } };
+static pa_dbus_arg_info publish_local_device_args[] = { { "enable", "b", "in" } };
+
 
 static const char* signature_args_for_in[] = {
     "s",        /* METHOD_HANDLER_GET_STREAM_INFO */
@@ -213,7 +218,9 @@ static const char* signature_args_for_in[] = {
     "sas",      /* METHOD_HANDLER_GET_PID_OF_LATEST_STREAM */
     "ubsud",    /* METHOD_HANDLER_ACTIVATE_DUCKING */
     "u",        /* METHOD_HANDLER_GET_DUCKING_STATE */
-    "sus"       /* METHOD_HANDLER_UPDATE_PROPLIST */
+    "sus",      /* METHOD_HANDLER_UPDATE_PROPLIST */
+    "b",        /* METHOD_HANDLER_DISCOVER_REMOTE_DEVICE */
+    "b"         /* METHOD_HANDLER_PUBLISH_LOCAL_DEVICE */
     };
 
 static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
@@ -362,6 +369,16 @@ static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
         .arguments = update_proplist_args,
         .n_arguments = sizeof(update_proplist_args) / sizeof(pa_dbus_arg_info),
         .receive_cb = handle_update_proplist },
+    [METHOD_HANDLER_DISCOVER_REMOTE_DEVICE] = {
+        .method_name = STREAM_MANAGER_METHOD_NAME_DISCOVER_REMOTE_DEVICE,
+        .arguments = discover_remote_device_args,
+        .n_arguments = sizeof(discover_remote_device_args) / sizeof(pa_dbus_arg_info),
+        .receive_cb = handle_discover_remote_device },
+    [METHOD_HANDLER_PUBLISH_LOCAL_DEVICE] = {
+        .method_name = STREAM_MANAGER_METHOD_NAME_PUBLISH_LOCAL_DEVICE,
+        .arguments = publish_local_device_args,
+        .n_arguments = sizeof(publish_local_device_args) / sizeof(pa_dbus_arg_info),
+        .receive_cb = handle_publish_local_device },
 };
 
 static DBusHandlerResult handle_introspect(DBusConnection *conn, DBusMessage *msg, void *userdata) {
@@ -2392,6 +2409,103 @@ out:
     pa_dbus_send_empty_reply(conn, msg);
 }
 
+static uint32_t discover;
+static uint32_t protocol_tcp;
+static uint32_t publish;
+
+static void handle_discover_remote_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+    pa_stream_manager *m = (pa_stream_manager*)userdata;
+    pa_module *module;
+    dbus_bool_t enable;
+
+    pa_assert(conn);
+    pa_assert(msg);
+    pa_assert(m);
+
+    pa_assert_se(dbus_message_get_args(msg, NULL,
+                                       DBUS_TYPE_BOOLEAN, &enable,
+                                       DBUS_TYPE_INVALID));
+
+    pa_log_info("discover module enable(%d)", enable);
+
+    if (enable) {
+        if (discover) {
+            pa_log_error("already loaded");
+            goto error;
+        }
+        if (pa_module_load(&module, m->core, "module-tizenaudio-discover", NULL)) {
+            pa_log_error("failed to load module");
+            goto error;
+        }
+        discover = module->index;
+    } else {
+        if (discover) {
+            pa_module_unload_request_by_index(m->core, discover, true);
+            discover = 0;
+        }
+    }
+
+    pa_dbus_send_empty_reply(conn, msg);
+
+    return;
+
+error:
+    pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "%s",
+                            "org.tizen.multimedia.audio.Internal");
+}
+
+static void handle_publish_local_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+    pa_stream_manager *m = (pa_stream_manager*)userdata;
+    pa_module *module;
+    dbus_bool_t enable;
+
+    pa_assert(conn);
+    pa_assert(msg);
+    pa_assert(m);
+
+    pa_assert_se(dbus_message_get_args(msg, NULL,
+                                       DBUS_TYPE_BOOLEAN, &enable,
+                                       DBUS_TYPE_INVALID));
+
+    pa_log_info("publish module enable(%d)", enable);
+
+    if (enable) {
+        if (protocol_tcp || publish) {
+            pa_log_error("already loaded");
+            goto error;
+        }
+        if (pa_module_load(&module, m->core, "module-native-protocol-tcp", "auth-anonymous=1")) {
+            pa_log_error("failed to load module");
+            goto error;
+        }
+        protocol_tcp = module->index;
+
+        if (pa_module_load(&module, m->core, "module-tizenaudio-publish", NULL)) {
+            pa_module_unload_request_by_index(m->core, protocol_tcp, true);
+            pa_log_error("failed to load module");
+            goto error;
+        }
+        publish = module->index;
+    } else {
+        if (protocol_tcp) {
+            pa_module_unload_request_by_index(m->core, protocol_tcp, true);
+            protocol_tcp = 0;
+        }
+        if (publish) {
+            pa_module_unload_request_by_index(m->core, publish, true);
+            publish = 0;
+        }
+    }
+
+    pa_dbus_send_empty_reply(conn, msg);
+
+    return;
+
+error:
+    pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "%s",
+                            "org.tizen.multimedia.audio.Internal");
+}
+
 static DBusHandlerResult handle_methods(DBusConnection *conn, DBusMessage *msg, void *userdata) {
     int idx = 0;
     pa_stream_manager *m = (pa_stream_manager*)userdata;