RET_IF(!message, "message is NULL");
message_for_room = g_strdup_printf ("ROOM_PEER_MSG %d %s", remote_peer_id, message);
- soup_websocket_connection_send_text(g_ad.signaling_server.ws_conn, message_for_room);
+ soup_websocket_connection_send_text(g_ad.signaling_server.public.ws_conn, message_for_room);
g_free(message_for_room);
}
static void _webrtc_signaling_connect(const char *ip, int port)
{
- int ret = WEBRTC_ERROR_NONE;
+ int ret;
- if (strlen(g_ad.signaling_server.url) > 0) {
- g_printerr("server[%s] is already set by 'ss'\n", g_ad.signaling_server.url);
+ 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;
}
- ret = webrtc_signaling_connect(ip, port, __signaling_message_cb, &g_ad.conns[0], &g_ad.signaling_server.signaling_client);
+ 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);
- if (g_ad.signaling_server.private_ip)
- free(g_ad.signaling_server.private_ip);
- g_ad.signaling_server.private_ip = strdup(ip);
- g_ad.signaling_server.port = port;
+ if (g_ad.signaling_server.private.ip)
+ free(g_ad.signaling_server.private.ip);
+ g_ad.signaling_server.private.ip = strdup(ip);
+ g_ad.signaling_server.private.port = port;
g_print("webrtc_signaling_connect() success\n");
}
static void _webrtc_signaling_disconnect(void)
{
- int ret = WEBRTC_ERROR_NONE;
+ int ret;
- ret = webrtc_signaling_disconnect(g_ad.signaling_server.signaling_client);
+ RET_IF(!g_ad.signaling_server.is_connected, "signaling server is not connected");
+
+ ret = webrtc_signaling_disconnect(g_ad.signaling_server.private.client);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_signaling_disconnect() success\n");
+
+ g_ad.signaling_server.private.client = NULL;
}
static void _webrtc_signaling_request_session(int peer_id)
{
- int ret = WEBRTC_ERROR_NONE;
+ int ret;
+
+ RET_IF(!g_ad.signaling_server.is_connected, "signaling server is not connected");
- ret = webrtc_signaling_request_session(g_ad.signaling_server.signaling_client, peer_id);
+ ret = webrtc_signaling_request_session(g_ad.signaling_server.private.client, peer_id);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_signaling_request_session() success\n");
static void _webrtc_signaling_send_message(const char *message)
{
- int ret = WEBRTC_ERROR_NONE;
+ int ret;
RET_IF(!message, "message is NULL");
- RET_IF(!g_ad.signaling_server.signaling_client, "signaling_client is NULL");
+ RET_IF(!g_ad.signaling_server.is_connected, "signaling server is not connected");
- ret = webrtc_signaling_send_message(g_ad.signaling_server.signaling_client, message);
+ ret = webrtc_signaling_send_message(g_ad.signaling_server.private.client, message);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_signaling_send_message() success\n");
RET_IF(!conn, "conn is NULL");
g_print("\n[to SERVER > ICE]\n%s\n", candidate);
- if (g_ad.signaling_server.ws_conn) {
+
+ RET_IF(!g_ad.signaling_server.is_connected, "signaling server is not connected");
+
+ if (g_ad.signaling_server.public.ws_conn) {
if (conn->is_for_room)
_websocket_connection_send_text_for_room(conn, conn->remote_peer_id, candidate);
else
- soup_websocket_connection_send_text(g_ad.signaling_server.ws_conn, candidate);
- } else if (g_ad.signaling_server.signaling_client && g_ad.signaling_server.is_connected) {
+ soup_websocket_connection_send_text(g_ad.signaling_server.public.ws_conn, candidate);
+
+ } else if (g_ad.signaling_server.private.client) {
_webrtc_signaling_send_message(candidate);
}
}
if (!uri)
return;
- if (g_ad.signaling_server.signaling_client) {
+ if (g_ad.signaling_server.private.client) {
g_printerr("already set by 'scc'\n");
return;
}
static void _request_session(int remote_peer_id)
{
- if (!g_ad.signaling_server.ws_conn && !g_ad.signaling_server.is_connected) {
- g_printerr("server[%s] is not connected\n", g_ad.signaling_server.url);
- return;
- }
+ RET_IF(!g_ad.signaling_server.is_connected, "signaling server is not connected");
- if (g_ad.signaling_server.ws_conn) {
+ if (g_ad.signaling_server.public.ws_conn) {
gchar *msg;
- if (soup_websocket_connection_get_state(g_ad.signaling_server.ws_conn) != SOUP_WEBSOCKET_STATE_OPEN) {
+ if (soup_websocket_connection_get_state(g_ad.signaling_server.public.ws_conn) != SOUP_WEBSOCKET_STATE_OPEN) {
g_printerr("websocket is not opened\n");
return;
}
msg = g_strdup_printf("SESSION %d", remote_peer_id);
g_print("\n[to SERVER > %s]\n", msg);
- soup_websocket_connection_send_text(g_ad.signaling_server.ws_conn, msg);
+ soup_websocket_connection_send_text(g_ad.signaling_server.public.ws_conn, msg);
g_free(msg);
- } else {
+ } else if (g_ad.signaling_server.private.client) {
_webrtc_signaling_request_session(remote_peer_id);
+
+ } else {
+ g_printerr("Neither public nor private signaling server is connected\n");
}
}
gchar *msg;
RET_IF(!room_name, "room_name is NULL");
+ RET_IF(!g_ad.signaling_server.is_connected, "signaling server is not connected");
+ RET_IF(!g_ad.signaling_server.public.ws_conn, "ws_conn is NULL");
- if (!g_ad.signaling_server.ws_conn && !g_ad.signaling_server.is_connected) {
- g_printerr("server[%s] is not connected\n", g_ad.signaling_server.url);
- return;
- }
-
- RET_IF(!g_ad.signaling_server.ws_conn, "ws_conn is NULL");
-
- if (soup_websocket_connection_get_state(g_ad.signaling_server.ws_conn) != SOUP_WEBSOCKET_STATE_OPEN) {
+ if (soup_websocket_connection_get_state(g_ad.signaling_server.public.ws_conn) != SOUP_WEBSOCKET_STATE_OPEN) {
g_printerr("websocket is not opened\n");
return;
}
msg = g_strdup_printf("ROOM %s", room_name);
g_print("\n[to SERVER > %s]\n", msg);
- soup_websocket_connection_send_text(g_ad.signaling_server.ws_conn, msg);
+ soup_websocket_connection_send_text(g_ad.signaling_server.public.ws_conn, msg);
g_free(msg);
}
{
char *desc;
- if (!g_ad.signaling_server.ws_conn && !g_ad.signaling_server.is_connected) {
- g_printerr("server[%s] is not connected\n", g_ad.signaling_server.url);
- return;
- }
+ RET_IF(!g_ad.signaling_server.is_connected, "signaling server is not connected");
desc = is_offer ? g_ad.conns[0].offer : g_ad.conns[0].answer;
g_print("\n[to SERVER > local description]\n%s\n", desc);
- if (g_ad.signaling_server.ws_conn)
- soup_websocket_connection_send_text(g_ad.signaling_server.ws_conn, desc);
- else
+ if (g_ad.signaling_server.public.ws_conn)
+ soup_websocket_connection_send_text(g_ad.signaling_server.public.ws_conn, desc);
+ else if (g_ad.signaling_server.private.client)
_webrtc_signaling_send_message(desc);
+ else
+ g_printerr("Neither public nor private signaling server is connected\n");
}
gulong _connect_signal(GObject *obj, const char *signal_name, GCallback callback, gpointer user_data)
{
RET_IF(!ss, "ss is NULL");
- g_print("close websocket, ws_conn[%p]\n", ss->ws_conn);
+ g_print("close websocket, ws_conn[%p]\n", ss->public.ws_conn);
- if (soup_websocket_connection_get_state(ss->ws_conn) == SOUP_WEBSOCKET_STATE_OPEN)
- soup_websocket_connection_close(ss->ws_conn, 1000, "");
+ if (soup_websocket_connection_get_state(ss->public.ws_conn) == SOUP_WEBSOCKET_STATE_OPEN)
+ soup_websocket_connection_close(ss->public.ws_conn, 1000, "");
else
- g_object_unref(ss->ws_conn);
+ g_object_unref(ss->public.ws_conn);
- ss->ws_conn = NULL;
+ ss->public.ws_conn = NULL;
ss->server_status = SERVER_STATUS_DISCONNECTED;
+ ss->is_connected = false;
}
static void __websocket_closed_cb(SoupWebsocketConnection *ws_conn, gpointer user_data)
RET_IF(!ss, "ss is NULL");
RET_IF(!ws_conn, "ws_conn is NULL");
- RET_IF(ss->ws_conn != ws_conn, "not matched ws_conn[%p, %p]", ss->ws_conn, ws_conn);
+ RET_IF(ss->public.ws_conn != ws_conn, "not matched ws_conn[%p, %p]", ss->public.ws_conn, ws_conn);
__close_websocket(ss);
}
RET_IF(!conn, "conn is NULL");
RET_IF(!ws_conn, "ws_conn is NULL");
- RET_IF(g_ad.signaling_server.ws_conn != ws_conn, "not matched ws_conn[%p, %p]", g_ad.signaling_server.ws_conn, ws_conn);
+ RET_IF(g_ad.signaling_server.public.ws_conn != ws_conn, "not matched ws_conn[%p, %p]", g_ad.signaling_server.public.ws_conn, ws_conn);
RET_IF(type != SOUP_WEBSOCKET_DATA_TEXT, "invalid data type(%d)", type);
data = g_bytes_get_data(message, &size);
g_error_free(error);
return;
}
- g_print("\n[%s] is connected, conn[%p]\n", g_ad.signaling_server.url, conn);
+ g_print("\n[%s] is connected, conn[%p]\n", g_ad.signaling_server.public.url, conn);
- g_ad.signaling_server.ws_conn = ws_conn;
+ g_ad.signaling_server.public.ws_conn = ws_conn;
g_ad.signaling_server.server_status = SERVER_STATUS_CONNECTED;
g_signal_connect(ws_conn, "closed", G_CALLBACK(__websocket_closed_cb), &g_ad.signaling_server);
g_signal_connect(ws_conn, "message", G_CALLBACK(__websocket_message_cb), conn);
g_ad.signaling_server.local_peer_id = __send_greeting_to_register(ws_conn);
+ g_ad.signaling_server.is_connected = true;
}
static void _connect_signaling_server(void)
SoupURI *proxy_uri;
const char *https_aliases[] = {"wss", NULL};
- RET_IF(g_ad.signaling_server.signaling_client, "already set by 'scc'");
+ RET_IF(g_ad.signaling_server.private.client, "already set by 'scc'");
if (strlen(g_ad.proxy) == 0) {
session = soup_session_new_with_options(SOUP_SESSION_SSL_STRICT, TRUE,
soup_uri_free(proxy_uri);
}
- message = soup_message_new(SOUP_METHOD_GET, g_ad.signaling_server.url);
+ message = soup_message_new(SOUP_METHOD_GET, g_ad.signaling_server.public.url);
- g_print("connecting to signaling server[%s]...\n", g_ad.signaling_server.url);
+ g_print("connecting to signaling server[%s]...\n", g_ad.signaling_server.public.url);
soup_session_websocket_connect_async(session, message, NULL, NULL, NULL,
(GAsyncReadyCallback) __websocket_connected_cb, &g_ad.conns[0]);
{
int ret = WEBRTC_ERROR_NONE;
- ret = webrtc_signaling_server_create(port, &(g_ad.inner_signaling_server));
+ ret = webrtc_signaling_server_create(port, &(g_ad.signaling_server.private.server));
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
- g_print("webrtc_signaling_server_create() success, port[%d] g_inner_signaling_server[%p]\n", port, g_ad.inner_signaling_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;
}
static void _webrtc_signaling_server_destroy(void)
{
int ret = WEBRTC_ERROR_NONE;
- ret = webrtc_signaling_server_destroy(g_ad.inner_signaling_server);
+ ret = webrtc_signaling_server_destroy(g_ad.signaling_server.private.server);
RET_IF(ret != WEBRTC_ERROR_NONE, "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)
{
int ret = WEBRTC_ERROR_NONE;
- ret = webrtc_signaling_server_start(g_ad.inner_signaling_server);
+ ret = webrtc_signaling_server_start(g_ad.signaling_server.private.server);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_signaling_server_start() success\n");
{
int ret = WEBRTC_ERROR_NONE;
- ret = webrtc_signaling_server_stop(g_ad.inner_signaling_server);
+ ret = webrtc_signaling_server_stop(g_ad.signaling_server.private.server);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_signaling_server_stop() success\n");
switch (g_ad.menu_status) {
case CURRENT_STATUS_SETTING_SIGNALING_SERVER: {
- _setting_uri(g_ad.signaling_server.url, cmd);
+ _setting_uri(g_ad.signaling_server.public.url, cmd);
reset_menu_state();
break;
}
case CURRENT_STATUS_PRIVATE_SIGNALING_SERVER_CONNECT: {
static char *ip = NULL;
- if (strlen(g_ad.signaling_server.url) > 0) {
- g_printerr("server[%s] is already set by 'ss'\n", g_ad.signaling_server.url);
+ 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);
reset_menu_state();
break;
}