}
}
-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);
g_ad.signaling_server.private.port = port;
g_print("webrtc_signaling_connect() success\n");
+
+ return 0;
}
static void _webrtc_signaling_disconnect(void)
}
}
-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)
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,
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);
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);
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;
break;
case 'h':
default:
+out:
print_usage();
return 0;
}