From 8b95fa5be7270c2c0caa1a1a43c5a0cbf78a6d0a Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Thu, 7 Jul 2022 11:39:05 +0900 Subject: [PATCH] webrtc_test: Add execution options to launch/connect signaling server -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 --- packaging/capi-media-webrtc.spec | 2 +- test/webrtc_test.c | 99 +++++++++++++++++++++++++------- test/webrtc_test_priv.h | 8 +++ 3 files changed, 88 insertions(+), 21 deletions(-) diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 6954298d..bc957efd 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -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 diff --git a/test/webrtc_test.c b/test/webrtc_test.c index 64ef3de2..a9708e73 100644 --- a/test/webrtc_test.c +++ b/test/webrtc_test.c @@ -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; } diff --git a/test/webrtc_test_priv.h b/test/webrtc_test_priv.h index 4caab167..1dee7dfb 100644 --- a/test/webrtc_test_priv.h +++ b/test/webrtc_test_priv.h @@ -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 -- 2.34.1