webrtc_test: Add execution options to launch/connect signaling server 55/277455/3 accepted/tizen/unified/20220713.040806 submit/tizen/20220711.235733
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 7 Jul 2022 02:39:05 +0000 (11:39 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 7 Jul 2022 07:01:58 +0000 (16:01 +0900)
-l, --launch-signaling-server   port to be used for private signaling server (e.g. 8080)
-c, --connect-signaling-server  signaling server URL:PORT to connect (e.g. wss://123.123.123.123:8443, 192.168.1.123:8080)

e.g.)
To use private signaling server
 - peer1: webrtc_test -l 8080 -c 127.0.0.1:8080
 - peer2: webrtc_test -c 127.0.0.1:8080

To use public signaling server(wss:// or ws://)
 - peer1: webrtc_test -c wss://123.123.123.123:8443
 - peer2: webrtc_test -c wss://123.123.123.123:8443

[Version] 0.3.147
[Issue Type] New feature

Change-Id: I18a6a3b04e4abe468943b9c6a5e8cd9c1726f4d1
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
test/webrtc_test.c
test/webrtc_test_priv.h

index 6954298d3d31f1fa32cf5fd08aa82d37527294be..bc957efd3777c9bb0fe47a417323dfcaf6516ca0 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.146
+Version:    0.3.147
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 64ef3de2cf7929de139ab6899eeefb83d64c379c..a9708e737b840ad14ad453960156a15421e7beac 100644 (file)
@@ -1934,17 +1934,17 @@ static void __signaling_message_cb(webrtc_signaling_message_type_e type, const c
        }
 }
 
-static void _webrtc_signaling_connect(const char *ip, int port)
+static int _webrtc_signaling_connect(const char *ip, int port)
 {
        int ret;
 
        if (strlen(g_ad.signaling_server.public.url) > 0) {
                g_printerr("server[%s] is already set by 'ss'\n", g_ad.signaling_server.public.url);
-               return;
+               return -1;
        }
 
        ret = webrtc_signaling_connect(ip, port, __signaling_message_cb, &g_ad.conns[0], &g_ad.signaling_server.private.client);
-       RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
+       RET_VAL_IF(ret != WEBRTC_ERROR_NONE, -1, "failed to webrtc_signaling_connect(), ret[0x%x]", ret);
 
        if (g_ad.signaling_server.private.ip)
                free(g_ad.signaling_server.private.ip);
@@ -1952,6 +1952,8 @@ static void _webrtc_signaling_connect(const char *ip, int port)
        g_ad.signaling_server.private.port = port;
 
        g_print("webrtc_signaling_connect() success\n");
+
+       return 0;
 }
 
 static void _webrtc_signaling_disconnect(void)
@@ -2537,25 +2539,30 @@ static void _webrtc_data_channel_get_label(int index)
        }
 }
 
-static void _setting_uri(gchar *dest_arr, char *uri)
+static int _setting_uri(gchar *dest_arr, char *uri)
 {
        int ret = 0;
 
        if (!uri)
-               return;
+               return -1;
 
        if (g_ad.signaling_server.private.client) {
                g_printerr("already set by 'scc'\n");
-               return;
+               return -1;
        }
 
        if (strlen(uri) > strlen("0.0.0.0")) {
                ret = __copy_string_arr(dest_arr, uri);
-               if (ret != 0)
+               if (ret != 0) {
                        g_print("failed to __copy_string_arr()\n");
+                       return -1;
+               }
        } else {
                g_print("invalid value, uri[%s]\n", uri);
+               return -1;
        }
+
+       return 0;
 }
 
 static void _request_session(int remote_peer_id)
@@ -3673,14 +3680,14 @@ static void __websocket_connected_cb(SoupSession *session, GAsyncResult *res, vo
        g_ad.signaling_server.is_connected = true;
 }
 
-static void _connect_signaling_server(void)
+static int _connect_signaling_server(void)
 {
        SoupMessage *message;
        SoupSession *session;
        SoupURI *proxy_uri;
        const char *https_aliases[] = {"wss", NULL};
 
-       RET_IF(g_ad.signaling_server.private.client, "already set by 'scc'");
+       RET_VAL_IF(g_ad.signaling_server.private.client, -1, "already set by 'scc'");
 
        if (strlen(g_ad.proxy) == 0) {
                session = soup_session_new_with_options(SOUP_SESSION_SSL_STRICT, TRUE,
@@ -3702,44 +3709,51 @@ static void _connect_signaling_server(void)
 
        soup_session_websocket_connect_async(session, message, NULL, NULL, NULL,
                (GAsyncReadyCallback) __websocket_connected_cb, &g_ad.conns[0]);
+
+       return 0;
 }
 
-static void _webrtc_signaling_server_create(int port)
+static int _webrtc_signaling_server_create(int port)
 {
-       int ret = WEBRTC_ERROR_NONE;
+       int ret;
 
        ret = webrtc_signaling_server_create(port, &(g_ad.signaling_server.private.server));
-       RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
+       RET_VAL_IF(ret != WEBRTC_ERROR_NONE, -1, "failed to webrtc_signaling_server_create(), ret[0x%x]", ret);
 
-       g_print("webrtc_signaling_server_create() success, port[%d] g_ad.signaling_server.private.server[%p]\n", port, g_ad.signaling_server.private.server);
+       g_print("webrtc_signaling_server_create() success, port[%d] g_ad.signaling_server.private.server[%p]\n",
+               port, g_ad.signaling_server.private.server);
 
        g_ad.signaling_server.private.server_port = port;
+
+       return 0;
 }
 
 static void _webrtc_signaling_server_destroy(void)
 {
-       int ret = WEBRTC_ERROR_NONE;
+       int ret;
 
        ret = webrtc_signaling_server_destroy(g_ad.signaling_server.private.server);
-       RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
+       RET_IF(ret != WEBRTC_ERROR_NONE, "failed to webrtc_signaling_server_destroy(), ret[0x%x]", ret);
 
        g_print("webrtc_signaling_server_destroy() success\n");
        g_ad.signaling_server.private.server = NULL;
 }
 
-static void _webrtc_signaling_server_start(void)
+static int _webrtc_signaling_server_start(void)
 {
-       int ret = WEBRTC_ERROR_NONE;
+       int ret;
 
        ret = webrtc_signaling_server_start(g_ad.signaling_server.private.server);
-       RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
+       RET_VAL_IF(ret != WEBRTC_ERROR_NONE, -1, "webrtc_signaling_server_start(), ret[0x%x]", ret);
 
        g_print("webrtc_signaling_server_start() success\n");
+
+       return 0;
 }
 
 static void _webrtc_signaling_server_stop(void)
 {
-       int ret = WEBRTC_ERROR_NONE;
+       int ret;
 
        ret = webrtc_signaling_server_stop(g_ad.signaling_server.private.server);
        RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
@@ -4670,11 +4684,41 @@ static void print_usage()
        printf("Usage : ");
        printf("webrtc_test [option]\n\n"
                   "  -p, --proxy                     proxy URL to use (e.g. http://123.123.123.123:8080)\n"
+                  "  -l, --launch-signaling-server   port to be used for private signaling server (e.g. 8080)\n"
+                  "  -c, --connect-signaling-server  signaling server URL:PORT to connect (e.g. wss://123.123.123.123:8443, 192.168.1.123:8080)\n"
                   "  -f, --validate-feeding-data     validate media packet source feeding data by rendering these on gst pipeline\n"
                   "  -e, --validate-encoded-frame-cb validate media packets from encoded frame callback by rendering these on gst pipeline\n"
                   "  -h, --help                      help\n");
 }
 
+static int option_launch_signaling_server(int port)
+{
+       if (_webrtc_signaling_server_create(port) == -1)
+               return -1;
+       if (_webrtc_signaling_server_start() == -1)
+               return -1;
+       return 0;
+}
+
+static int option_connect_signaling_server(char *url)
+{
+       g_auto(GStrv) str_arr = g_strsplit((const gchar *)optarg, ":", 2);
+       printf("%s %s\n", str_arr[0], str_arr[1]);
+       if (g_str_has_prefix(str_arr[0], "wss") || g_str_has_prefix(str_arr[0], "ws")) {
+               if (_setting_uri(g_ad.signaling_server.public.url, optarg) == -1) {
+                       printf("invalid port number\n");
+                       return -1;
+               }
+               if (_connect_signaling_server() == -1)
+                       return -1;
+
+       } else {
+               if (_webrtc_signaling_connect(str_arr[0], atoi(str_arr[1])) == -1)
+                       return -1;
+       }
+       return 0;
+}
+
 int main(int argc, char *argv[])
 {
        GIOChannel *stdin_channel = g_io_channel_unix_new(0);
@@ -4690,19 +4734,33 @@ int main(int argc, char *argv[])
 
                static struct option long_options[] = {
                        { "proxy", required_argument, 0, 'p' },
+                       { "launch-signaling-server", required_argument, 0, 'l' },
+                       { "connect-signaling-server", required_argument, 0, 'c' },
                        { "validate-feeding-data", no_argument, 0, 'f' },
                        { "validate-encoded-frame-cb", no_argument, 0, 'e' },
                        { "help", no_argument, 0, 'h' },
                        { 0, 0, 0, 0 }
                };
 
-               if ((opt = getopt_long(argc, argv, "p:feh", long_options, &opt_idx)) == -1)
+               if ((opt = getopt_long(argc, argv, "p:l:c:feh", long_options, &opt_idx)) == -1)
                        break;
 
                switch (opt) {
                case 'p':
                        strncpy(g_ad.proxy, optarg, sizeof(g_ad.proxy) - 1);
                        break;
+               case 'l': {
+                       if (atoi(optarg) == 0) {
+                               printf("invalid port number\n");
+                               goto out;
+                       }
+                       if (option_launch_signaling_server(atoi(optarg)) == -1)
+                               goto out;
+                       break;
+               } case 'c':
+                       if (option_connect_signaling_server(optarg) == -1)
+                               goto out;
+                       break;
                case 'f':
                        g_ad.validate_feeding_data = true;
                        break;
@@ -4711,6 +4769,7 @@ int main(int argc, char *argv[])
                        break;
                case 'h':
                default:
+out:
                        print_usage();
                        return 0;
                }
index 4caab16785f7b6c9330ddaa1fa752169d3f15217..1dee7dfb2b55c812a1ef9e228d201641e3e336cb 100644 (file)
@@ -42,6 +42,14 @@ do { \
        } \
 } while (0)
 
+#define RET_VAL_IF(expr, val, fmt, arg...) \
+do { \
+       if ((expr)) { \
+               g_printerr("failed to %s(), "fmt"\n", __func__, ##arg); \
+               return (val); \
+       } \
+} while (0)
+
 #define TEST_MENU_WEBRTC_COMMON         0x00001000
 #define TEST_MENU_WEBRTC_MEDIA_SOURCE   0x00002000
 #define TEST_MENU_WEBRTC_MEDIA_RENDER   0x00004000