CURRENT_STATUS_SET_REMOTE_DESCRIPTION,
CURRENT_STATUS_SETTING_SIGNALING_SERVER,
CURRENT_STATUS_SETTING_PROXY,
- CURRENT_STATUS_CHANGE_CONNECTION,
CURRENT_STATUS_REQUEST_SESSION,
CURRENT_STATUS_REQUEST_JOIN_ROOM,
CURRENT_STATUS_SEND_LOCAL_DESCRIPTION,
typedef struct _connection_s {
int index;
- SoupWebsocketConnection *ws_conn;
- gint32 local_peer_id;
int remote_peer_id;
- int server_status;
bool is_for_room;
bool is_offer;
int room_source_type;
- /* for private network */
- webrtc_signaling_client_h signaling_client;
- bool is_connected;
-
webrtc_h webrtc;
webrtc_data_channel_h channels[MAX_CHANNEL_LEN];
int channel_index;
char *remote_desc;
GList *ice_candidates;
- int menu_state;
- int cnt;
-
/* receive data & dump file */
gint64 sum_size;
gchar *expected_name;
media_packet_source_s packet_sources[MAX_MEDIA_PACKET_SOURCE_LEN];
} connection_s;
-static gchar g_signaling_server[MAX_STRING_LEN];
+typedef struct _signaling_server_s {
+ gchar url[MAX_STRING_LEN];
+ SoupWebsocketConnection *ws_conn;
+ int server_status;
+ gint32 local_peer_id;
+
+ /* for private network - internal API */
+ webrtc_signaling_client_h signaling_client;
+ bool is_connected;
+} signaling_server_s;
+
static gchar g_proxy[MAX_STRING_LEN];
static appdata_s g_ad;
static connection_s g_conns[MAX_CONNECTION_LEN];
-static int g_conn_index;
+static signaling_server_s g_signaling_server;
+static int g_menu_state;
+static int g_cnt;
static webrtc_signaling_server_h g_inner_signaling_server;
int ret = WEBRTC_ERROR_NONE;
int i;
gchar *string_with_peer_id;
- string_with_peer_id = g_strdup_printf("[%d] %s", g_conns[index].local_peer_id, string);
+ string_with_peer_id = g_strdup_printf("[%d] %s", g_signaling_server.local_peer_id, string);
for (i = 0; i < MAX_CHANNEL_LEN; i++) {
if (g_conns[index].channels[i] == NULL)
int ret = WEBRTC_ERROR_NONE;
int i;
gchar *string_with_peer_id;
- string_with_peer_id = g_strdup_printf("[%d] %s", g_conns[index].local_peer_id, string);
+ string_with_peer_id = g_strdup_printf("[%d] %s", g_signaling_server.local_peer_id, string);
for (i = 0; i < MAX_CHANNEL_LEN; i++) {
if (g_conns[index].channels[i] == NULL)
{
int ret = WEBRTC_ERROR_NONE;
- ret = webrtc_add_ice_candidate(g_conns[g_conn_index].webrtc, (const char *)data);
+ ret = webrtc_add_ice_candidate(g_conns[0].webrtc, (const char *)data);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_ice_candidate() success\n");
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(conn->ws_conn, message_for_room);
+ soup_websocket_connection_send_text(g_signaling_server.ws_conn, message_for_room);
g_free(message_for_room);
}
if (type == SIGNALING_MESSAGE_TYPE_CONNECTED) {
g_print("\n[from SERVER > CONNECTED %s]\n", message);
- conn->is_connected = true;
+ g_signaling_server.is_connected = true;
} else if (type == SIGNALING_MESSAGE_TYPE_DISCONNECTED) {
g_print("\n[from SERVER > DISCONNECTED %s]\n", message);
- conn->is_connected = false;
+ g_signaling_server.is_connected = false;
} else if (type == SIGNALING_MESSAGE_TYPE_SESSION_ESTABLISHED) {
g_print("\n[from SERVER > SESSION_ESTABLISHED with %s]\n", message);
}
}
-static void _webrtc_signaling_connect(int index, const char *ip, int port)
+static void _webrtc_signaling_connect(const char *ip, int port)
{
int ret = WEBRTC_ERROR_NONE;
- if (strlen(g_signaling_server) > 0) {
- g_printerr("server[%s] is already set by 'ss'\n", g_signaling_server);
+ if (strlen(g_signaling_server.url) > 0) {
+ g_printerr("server[%s] is already set by 'ss'\n", g_signaling_server.url);
return;
}
- ret = webrtc_signaling_connect(ip, port, __signaling_message_cb, &g_conns[index], &g_conns[index].signaling_client);
+ ret = webrtc_signaling_connect(ip, port, __signaling_message_cb, &g_conns[0], &g_signaling_server.signaling_client);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_signaling_connect() success\n");
}
-static void _webrtc_signaling_disconnect(int index)
+static void _webrtc_signaling_disconnect(void)
{
int ret = WEBRTC_ERROR_NONE;
- ret = webrtc_signaling_disconnect(g_conns[index].signaling_client);
+ ret = webrtc_signaling_disconnect(g_signaling_server.signaling_client);
RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
g_print("webrtc_signaling_disconnect() success\n");
}
-static void _webrtc_signaling_request_session(int index, int peer_id)
+static void _webrtc_signaling_request_session(int peer_id)
{
int ret = WEBRTC_ERROR_NONE;
- ret = webrtc_signaling_request_session(g_conns[index].signaling_client, peer_id);
+ ret = webrtc_signaling_request_session(g_signaling_server.signaling_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(connection_s *conn, const char *message)
+static void _webrtc_signaling_send_message(const char *message)
{
int ret = WEBRTC_ERROR_NONE;
- RET_IF(!conn, "conn is NULL");
RET_IF(!message, "message is NULL");
+ RET_IF(!g_signaling_server.signaling_client, "signaling_client is NULL");
- ret = webrtc_signaling_send_message(conn->signaling_client, message);
+ ret = webrtc_signaling_send_message(g_signaling_server.signaling_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 (conn->ws_conn) {
+ if (g_signaling_server.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(conn->ws_conn, candidate);
- } else if (conn->signaling_client && conn->is_connected) {
- _webrtc_signaling_send_message(conn, candidate);
+ soup_websocket_connection_send_text(g_signaling_server.ws_conn, candidate);
+ } else if (g_signaling_server.signaling_client && g_signaling_server.is_connected) {
+ _webrtc_signaling_send_message(candidate);
}
}
if (!uri)
return;
- if (g_conns[g_conn_index].signaling_client) {
+ if (g_signaling_server.signaling_client) {
g_printerr("already set by 'scc'\n");
return;
}
}
}
-static void _request_session(int index, int remote_peer_id)
+static void _request_session(int remote_peer_id)
{
- if (!g_conns[index].ws_conn && !g_conns[index].is_connected) {
- g_printerr("server[%s] is not connected\n", g_signaling_server);
+ if (!g_signaling_server.ws_conn && !g_signaling_server.is_connected) {
+ g_printerr("server[%s] is not connected\n", g_signaling_server.url);
return;
}
- if (g_conns[index].ws_conn) {
+ if (g_signaling_server.ws_conn) {
gchar *msg;
- if (soup_websocket_connection_get_state(g_conns[index].ws_conn) != SOUP_WEBSOCKET_STATE_OPEN) {
+ if (soup_websocket_connection_get_state(g_signaling_server.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_conns[index].ws_conn, msg);
+ soup_websocket_connection_send_text(g_signaling_server.ws_conn, msg);
g_free(msg);
} else {
- _webrtc_signaling_request_session(index, remote_peer_id);
+ _webrtc_signaling_request_session(remote_peer_id);
}
}
-static void _request_join_room(int index, char *room_name)
+static void _request_join_room(char *room_name)
{
gchar *msg;
RET_IF(!room_name, "room_name is NULL");
- if (!g_conns[index].ws_conn && !g_conns[index].is_connected) {
- g_printerr("server[%s] is not connected\n", g_signaling_server);
+ if (!g_signaling_server.ws_conn && !g_signaling_server.is_connected) {
+ g_printerr("server[%s] is not connected\n", g_signaling_server.url);
return;
}
- RET_IF(!g_conns[index].ws_conn, "ws_conn is NULL");
+ RET_IF(!g_signaling_server.ws_conn, "ws_conn is NULL");
- if (soup_websocket_connection_get_state(g_conns[index].ws_conn) != SOUP_WEBSOCKET_STATE_OPEN) {
+ if (soup_websocket_connection_get_state(g_signaling_server.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_conns[index].ws_conn, msg);
+ soup_websocket_connection_send_text(g_signaling_server.ws_conn, msg);
g_free(msg);
}
-static void _send_local_description(int index, bool is_offer)
+static void _send_local_description(bool is_offer)
{
char *desc;
- if (!g_conns[index].ws_conn && !g_conns[index].is_connected) {
- g_printerr("server[%s] is not connected\n", g_signaling_server);
+ if (!g_signaling_server.ws_conn && !g_signaling_server.is_connected) {
+ g_printerr("server[%s] is not connected\n", g_signaling_server.url);
return;
}
- desc = is_offer ? g_conns[index].offer : g_conns[index].answer;
+ desc = is_offer ? g_conns[0].offer : g_conns[0].answer;
g_print("\n[to SERVER > local description]\n%s\n", desc);
- if (g_conns[index].ws_conn)
- soup_websocket_connection_send_text(g_conns[index].ws_conn, desc);
+ if (g_signaling_server.ws_conn)
+ soup_websocket_connection_send_text(g_signaling_server.ws_conn, desc);
else
- _webrtc_signaling_send_message(&g_conns[index], desc);
+ _webrtc_signaling_send_message(desc);
}
gulong _connect_signal(GObject *obj, const char *signal_name, GCallback callback, gpointer user_data)
g_print("webrtc_file_source_get_looping() success, source_id[%u] looping_state[%u]\n", source_id, looping_state);
}
-static void __close_websocket(connection_s *conn)
+static void __close_websocket(signaling_server_s *ss)
{
- RET_IF(!conn, "conn is NULL");
+ RET_IF(!ss, "ss is NULL");
- g_print("close websocket, ws_conn[%p]\n", conn->ws_conn);
+ g_print("close websocket, ws_conn[%p]\n", ss->ws_conn);
- if (soup_websocket_connection_get_state(conn->ws_conn) == SOUP_WEBSOCKET_STATE_OPEN)
- soup_websocket_connection_close(conn->ws_conn, 1000, "");
+ if (soup_websocket_connection_get_state(ss->ws_conn) == SOUP_WEBSOCKET_STATE_OPEN)
+ soup_websocket_connection_close(ss->ws_conn, 1000, "");
else
- g_object_unref(conn->ws_conn);
+ g_object_unref(ss->ws_conn);
- conn->ws_conn = NULL;
- conn->server_status = SERVER_STATUS_DISCONNECTED;
+ ss->ws_conn = NULL;
+ ss->server_status = SERVER_STATUS_DISCONNECTED;
}
static void __websocket_closed_cb(SoupWebsocketConnection *ws_conn, gpointer user_data)
{
- connection_s *conn = (connection_s *)user_data;
+ signaling_server_s *ss = (signaling_server_s *)user_data;
- RET_IF(!conn, "conn is NULL");
+ RET_IF(!ss, "ss is NULL");
RET_IF(!ws_conn, "ws_conn is NULL");
- RET_IF(conn->ws_conn != ws_conn, "not matched ws_conn[%p, %p]", conn->ws_conn, ws_conn);
+ RET_IF(ss->ws_conn != ws_conn, "not matched ws_conn[%p, %p]", ss->ws_conn, ws_conn);
- __close_websocket(conn);
+ __close_websocket(ss);
}
static void __auto_configure_add_peer(gchar *peer_id, bool is_offer)
__handle_json_structured_message(conn, message);
}
-static void __handle_room_related_message(connection_s *conn, const gchar *text)
+static void __handle_room_related_message(const gchar *text)
{
gchar **tokens = NULL;
guint len;
guint i;
- RET_IF(!conn, "conn is NULL");
RET_IF(!text, "text is NULL");
if (g_str_has_prefix(text, "ROOM_OK")) {
g_print("\n[from SERVER > %s]\n", text);
- conn->server_status = SERVER_STATUS_ROOM_ESTABLISHED;
+ g_signaling_server.server_status = SERVER_STATUS_ROOM_ESTABLISHED;
/* parse text, get the previous peers in the room and negotiate to each other */
if (strlen(text) > strlen("ROOM_OK")) {
} else {
g_print("\n[from SERVER > %s]\n", text);
- conn->server_status = SERVER_STATUS_ERROR_FOUND;
+ g_signaling_server.server_status = SERVER_STATUS_ERROR_FOUND;
}
if (tokens)
RET_IF(!conn, "conn is NULL");
RET_IF(!ws_conn, "ws_conn is NULL");
- RET_IF(conn->ws_conn != ws_conn, "not matched ws_conn[%p, %p]", conn->ws_conn, ws_conn);
+ RET_IF(g_signaling_server.ws_conn != ws_conn, "not matched ws_conn[%p, %p]", g_signaling_server.ws_conn, ws_conn);
RET_IF(type != SOUP_WEBSOCKET_DATA_TEXT, "invalid data type(%d)", type);
data = g_bytes_get_data(message, &size);
/* NOTE: Logics below can be different in each server */
if (g_strcmp0(text, "HELLO") == 0) {
- g_print("\n[from SERVER > %s] registered done, local_peer_id[%d]\n", text, conn->local_peer_id);
+ g_print("\n[from SERVER > %s] registered done, local_peer_id[%d]\n", text, g_signaling_server.local_peer_id);
} else if (g_strcmp0(text, "SESSION_OK") == 0) {
g_print("\n[from SERVER > %s]\n", text);
- conn->server_status = SERVER_STATUS_SESSION_ESTABLISHED;
+ g_signaling_server.server_status = SERVER_STATUS_SESSION_ESTABLISHED;
} else if (g_str_has_prefix(text, "ROOM_")) {
- __handle_room_related_message(conn, text);
+ __handle_room_related_message(text);
} else if (g_str_has_prefix(text, "ERROR")) {
g_print("\n[from SERVER > %s]\n", text);
- conn->server_status = SERVER_STATUS_ERROR_FOUND;
+ g_signaling_server.server_status = SERVER_STATUS_ERROR_FOUND;
} else {
__handle_json_structured_message(conn, text);
g_error_free(error);
return;
}
- g_print("\n[%s] is connected, conn[%p]\n", g_signaling_server, conn);
+ g_print("\n[%s] is connected, conn[%p]\n", g_signaling_server.url, conn);
- conn->ws_conn = ws_conn;
- conn->server_status = SERVER_STATUS_CONNECTED;
+ g_signaling_server.ws_conn = ws_conn;
+ g_signaling_server.server_status = SERVER_STATUS_CONNECTED;
- g_signal_connect(ws_conn, "closed", G_CALLBACK(__websocket_closed_cb), conn);
+ g_signal_connect(ws_conn, "closed", G_CALLBACK(__websocket_closed_cb), &g_signaling_server);
g_signal_connect(ws_conn, "message", G_CALLBACK(__websocket_message_cb), conn);
- conn->local_peer_id = __send_greeting_to_register(ws_conn);
+ g_signaling_server.local_peer_id = __send_greeting_to_register(ws_conn);
}
-static void _connect_signaling_server(int index)
+static void _connect_signaling_server(void)
{
SoupMessage *message;
SoupSession *session;
SoupURI *proxy_uri;
const char *https_aliases[] = {"wss", NULL};
- RET_IF(g_conns[index].signaling_client, "already set by 'scc'");
+ RET_IF(g_signaling_server.signaling_client, "already set by 'scc'");
if (strlen(g_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_signaling_server);
+ message = soup_message_new(SOUP_METHOD_GET, g_signaling_server.url);
- g_print("connecting to signaling server[%s]...\n", g_signaling_server);
+ g_print("connecting to signaling server[%s]...\n", g_signaling_server.url);
soup_session_websocket_connect_async(session, message, NULL, NULL, NULL,
- (GAsyncReadyCallback) __websocket_connected_cb, &g_conns[index]);
+ (GAsyncReadyCallback) __websocket_connected_cb, &g_conns[0]);
}
static void _webrtc_signaling_server_create(int port)
}
g_print("quit program\n");
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_TERMINATE;
+ g_menu_state = CURRENT_STATUS_TERMINATE;
elm_exit();
}
int len = strlen(cmd);
if (len == 1) {
if (strncmp(cmd, "c", 1) == 0) {
- _webrtc_create(g_conn_index);
+ _webrtc_create(0);
} else if (strncmp(cmd, "a", 1) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_ADD_MEDIA_SOURCE;
+ g_menu_state = CURRENT_STATUS_ADD_MEDIA_SOURCE;
} else if (strncmp(cmd, "r", 1) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_REMOVE_MEDIA_SOURCE;
+ g_menu_state = CURRENT_STATUS_REMOVE_MEDIA_SOURCE;
} else if (strncmp(cmd, "p", 1) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_PAUSE;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_PAUSE;
} else if (strncmp(cmd, "o", 1) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_PAUSE;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_PAUSE;
} else if (strncmp(cmd, "v", 1) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_RESOLUTION;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_RESOLUTION;
} else if (strncmp(cmd, "l", 1) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_RESOLUTION;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_RESOLUTION;
} else if (strncmp(cmd, "s", 1) == 0) {
- _webrtc_start(g_conn_index);
+ _webrtc_start(0);
} else if (strncmp(cmd, "t", 1) == 0) {
- _webrtc_stop(g_conn_index);
+ _webrtc_stop(0);
} else if (strncmp(cmd, "d", 1) == 0) {
- _webrtc_destroy(g_conn_index);
+ _webrtc_destroy(0);
} else if (strncmp(cmd, "g", 1) == 0) {
- _webrtc_get_state(g_conn_index);
+ _webrtc_get_state(0);
} else if (strncmp(cmd, "q", 1) == 0) {
quit_program();
} else if (len == 2) {
if (strncmp(cmd, "sf", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_FORMAT;
+ g_menu_state = CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_FORMAT;
} else if (strncmp(cmd, "td", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_DIRECTION;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_DIRECTION;
} else if (strncmp(cmd, "gd", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_DIRECTION;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_DIRECTION;
} else if (strncmp(cmd, "dt", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_DISPLAY_TYPE;
+ g_menu_state = CURRENT_STATUS_SET_DISPLAY_TYPE;
} else if (strncmp(cmd, "dm", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_DISPLAY_MODE;
+ g_menu_state = CURRENT_STATUS_SET_DISPLAY_MODE;
} else if (strncmp(cmd, "gm", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_GET_DISPLAY_MODE;
+ g_menu_state = CURRENT_STATUS_GET_DISPLAY_MODE;
} else if (strncmp(cmd, "dv", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_DISPLAY_VISIBLE;
+ g_menu_state = CURRENT_STATUS_SET_DISPLAY_VISIBLE;
} else if (strncmp(cmd, "gv", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_GET_DISPLAY_VISIBLE;
+ g_menu_state = CURRENT_STATUS_GET_DISPLAY_VISIBLE;
} else if (strncmp(cmd, "al", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK;
} else if (strncmp(cmd, "vl", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_LOOPBACK;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_LOOPBACK;
} else if (strncmp(cmd, "cd", 2) == 0) {
- _webrtc_create_data_channel(g_conn_index);
+ _webrtc_create_data_channel(0);
} else if (strncmp(cmd, "dd", 2) == 0) {
- _webrtc_destroy_data_channel(g_conn_index);
+ _webrtc_destroy_data_channel(0);
} else if (strncmp(cmd, "dl", 2) == 0) {
- _webrtc_data_channel_get_label(g_conn_index);
+ _webrtc_data_channel_get_label(0);
} else if (strncmp(cmd, "sz", 2) == 0) {
- _webrtc_set_data_channel_cb(g_conn_index);
+ _webrtc_set_data_channel_cb(0);
} else if (strncmp(cmd, "uz", 2) == 0) {
- _webrtc_unset_data_channel_cb(g_conn_index);
+ _webrtc_unset_data_channel_cb(0);
} else if (strncmp(cmd, "zs", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_DATA_CHANNEL_SEND_STRING;
+ g_menu_state = CURRENT_STATUS_DATA_CHANNEL_SEND_STRING;
} else if (strncmp(cmd, "zb", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_DATA_CHANNEL_SEND_STRING_AS_BYTES;
+ g_menu_state = CURRENT_STATUS_DATA_CHANNEL_SEND_STRING_AS_BYTES;
} else if (strncmp(cmd, "zf", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_DATA_CHANNEL_SEND_FILE;
+ g_menu_state = CURRENT_STATUS_DATA_CHANNEL_SEND_FILE;
} else if (strncmp(cmd, "mu", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MUTE_MEDIA_SOURCE;
+ g_menu_state = CURRENT_STATUS_MUTE_MEDIA_SOURCE;
} else if (strncmp(cmd, "se", 2) == 0) {
- _webrtc_set_error_cb(g_conn_index);
+ _webrtc_set_error_cb(0);
} else if (strncmp(cmd, "ue", 2) == 0) {
- _webrtc_unset_error_cb(g_conn_index);
+ _webrtc_unset_error_cb(0);
} else if (strncmp(cmd, "sc", 2) == 0) {
- _webrtc_set_state_changed_cb(g_conn_index);
+ _webrtc_set_state_changed_cb(0);
} else if (strncmp(cmd, "us", 2) == 0) {
- _webrtc_unset_state_changed_cb(g_conn_index);
+ _webrtc_unset_state_changed_cb(0);
} else if (strncmp(cmd, "sn", 2) == 0) {
- _webrtc_set_negotiation_needed_cb(g_conn_index);
+ _webrtc_set_negotiation_needed_cb(0);
} else if (strncmp(cmd, "un", 2) == 0) {
- _webrtc_unset_negotiation_needed_cb(g_conn_index);
+ _webrtc_unset_negotiation_needed_cb(0);
} else if (strncmp(cmd, "si", 2) == 0) {
- _webrtc_set_ice_candidate_cb(g_conn_index);
+ _webrtc_set_ice_candidate_cb(0);
} else if (strncmp(cmd, "ui", 2) == 0) {
- _webrtc_unset_ice_candidate_cb(g_conn_index);
+ _webrtc_unset_ice_candidate_cb(0);
} else if (strncmp(cmd, "sk", 2) == 0) {
- _webrtc_set_track_added_cb(g_conn_index);
+ _webrtc_set_track_added_cb(0);
} else if (strncmp(cmd, "uk", 2) == 0) {
- _webrtc_unset_track_added_cb(g_conn_index);
+ _webrtc_unset_track_added_cb(0);
} else if (strncmp(cmd, "sa", 2) == 0) {
- _webrtc_set_encoded_audio_frame_cb(g_conn_index);
+ _webrtc_set_encoded_audio_frame_cb(0);
} else if (strncmp(cmd, "ua", 2) == 0) {
- _webrtc_unset_encoded_audio_frame_cb(g_conn_index);
+ _webrtc_unset_encoded_audio_frame_cb(0);
} else if (strncmp(cmd, "sv", 2) == 0) {
- _webrtc_set_encoded_video_frame_cb(g_conn_index);
+ _webrtc_set_encoded_video_frame_cb(0);
} else if (strncmp(cmd, "uv", 2) == 0) {
- _webrtc_unset_encoded_video_frame_cb(g_conn_index);
+ _webrtc_unset_encoded_video_frame_cb(0);
} else if (strncmp(cmd, "sm", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_BUFFER_STATE_CHANGED_CB;
+ g_menu_state = CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_BUFFER_STATE_CHANGED_CB;
} else if (strncmp(cmd, "um", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB;
+ g_menu_state = CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB;
} else if (strncmp(cmd, "co", 2) == 0) {
- _webrtc_create_offer(&g_conns[g_conn_index], false);
+ _webrtc_create_offer(&g_conns[0], false);
} else if (strncmp(cmd, "ca", 2) == 0) {
- _webrtc_create_answer(&g_conns[g_conn_index], false);
+ _webrtc_create_answer(&g_conns[0], false);
} else if (strncmp(cmd, "sl", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_LOCAL_DESCRIPTION;
+ g_menu_state = CURRENT_STATUS_SET_LOCAL_DESCRIPTION;
} else if (strncmp(cmd, "sr", 2) == 0) {
- _webrtc_set_remote_description(&g_conns[g_conn_index]);
+ _webrtc_set_remote_description(&g_conns[0]);
} else if (strncmp(cmd, "st", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_STUN_SERVER;
+ g_menu_state = CURRENT_STATUS_SET_STUN_SERVER;
} else if (strncmp(cmd, "gt", 2) == 0) {
- _webrtc_get_stun_server(g_conn_index);
+ _webrtc_get_stun_server(0);
} else if (strncmp(cmd, "su", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_ADD_TURN_SERVER;
+ g_menu_state = CURRENT_STATUS_ADD_TURN_SERVER;
} else if (strncmp(cmd, "gu", 2) == 0) {
- _webrtc_get_turn_servers(g_conn_index);
+ _webrtc_get_turn_servers(0);
} else if (strncmp(cmd, "ss", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SETTING_SIGNALING_SERVER;
+ g_menu_state = CURRENT_STATUS_SETTING_SIGNALING_SERVER;
} else if (strncmp(cmd, "px", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SETTING_PROXY;
-
- } else if (strncmp(cmd, "cc", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_CHANGE_CONNECTION;
+ g_menu_state = CURRENT_STATUS_SETTING_PROXY;
} else if (strncmp(cmd, "cs", 2) == 0) {
- _connect_signaling_server(g_conn_index);
+ _connect_signaling_server();
} else if (strncmp(cmd, "rs", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_REQUEST_SESSION;
+ g_menu_state = CURRENT_STATUS_REQUEST_SESSION;
} else if (strncmp(cmd, "rj", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_REQUEST_JOIN_ROOM;
+ g_menu_state = CURRENT_STATUS_REQUEST_JOIN_ROOM;
} else if (strncmp(cmd, "sd", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SEND_LOCAL_DESCRIPTION;
+ g_menu_state = CURRENT_STATUS_SEND_LOCAL_DESCRIPTION;
} else if (strncmp(cmd, "sp", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE;
+ g_menu_state = CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE;
} else if (strncmp(cmd, "tp", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE;
+ g_menu_state = CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE;
} else if (strncmp(cmd, "pa", 2) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_MEDIA_PATH_TO_MEDIA_FILE_SOURCE;
+ g_menu_state = CURRENT_STATUS_SET_MEDIA_PATH_TO_MEDIA_FILE_SOURCE;
} else if (strncmp(cmd, "ac", 2) == 0) {
- _webrtc_add_ice_candidate(&g_conns[g_conn_index], NULL);
+ _webrtc_add_ice_candidate(&g_conns[0], NULL);
} else {
g_print("unknown menu \n");
if (strncmp(cmd, "sac", 3) == 0) {
int i;
- _webrtc_set_error_cb(g_conn_index);
- _webrtc_set_state_changed_cb(g_conn_index);
- _webrtc_set_negotiation_needed_cb(g_conn_index);
- _webrtc_set_ice_candidate_cb(g_conn_index);
- _webrtc_set_track_added_cb(g_conn_index);
- _webrtc_set_data_channel_cb(g_conn_index);
- _webrtc_set_all_negotiation_state_change_cbs(g_conn_index);
+ _webrtc_set_error_cb(0);
+ _webrtc_set_state_changed_cb(0);
+ _webrtc_set_negotiation_needed_cb(0);
+ _webrtc_set_ice_candidate_cb(0);
+ _webrtc_set_track_added_cb(0);
+ _webrtc_set_data_channel_cb(0);
+ _webrtc_set_all_negotiation_state_change_cbs(0);
for (i = 0; i < MAX_MEDIA_PACKET_SOURCE_LEN; i++) {
- if (g_conns[g_conn_index].packet_sources[i].source_id > 0)
- _webrtc_media_packet_source_set_buffer_state_changed_cb(g_conn_index, g_conns[g_conn_index].packet_sources[i].source_id);
+ if (g_conns[0].packet_sources[i].source_id > 0)
+ _webrtc_media_packet_source_set_buffer_state_changed_cb(0, g_conns[0].packet_sources[i].source_id);
}
} else if (strncmp(cmd, "san", 3) == 0) {
- _webrtc_set_all_negotiation_state_change_cbs(g_conn_index);
+ _webrtc_set_all_negotiation_state_change_cbs(0);
} else if (strncmp(cmd, "uan", 3) == 0) {
- _webrtc_unset_all_negotiation_state_change_cbs(g_conn_index);
+ _webrtc_unset_all_negotiation_state_change_cbs(0);
} else if (strncmp(cmd, "gan", 3) == 0) {
- _webrtc_get_all_negotiation_states(g_conn_index);
+ _webrtc_get_all_negotiation_states(0);
} else if (strncmp(cmd, "coa", 3) == 0) {
- _webrtc_create_offer(&g_conns[g_conn_index], true);
+ _webrtc_create_offer(&g_conns[0], true);
} else if (strncmp(cmd, "caa", 3) == 0) {
- _webrtc_create_answer(&g_conns[g_conn_index], true);
+ _webrtc_create_answer(&g_conns[0], true);
} else if (strncmp(cmd, "stp", 3) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_ICE_TRANSPORT_POLICY;
+ g_menu_state = CURRENT_STATUS_SET_ICE_TRANSPORT_POLICY;
} else if (strncmp(cmd, "gtp", 3) == 0) {
- _webrtc_get_ice_transport_policy(g_conn_index);
+ _webrtc_get_ice_transport_policy(0);
} else if (strncmp(cmd, "ssc", 3) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_CREATE_PRIVATE_SIGNALING_SERVER;
+ g_menu_state = CURRENT_STATUS_CREATE_PRIVATE_SIGNALING_SERVER;
} else if (strncmp(cmd, "ssd", 3) == 0) {
_webrtc_signaling_server_destroy();
_webrtc_signaling_server_stop();
} else if (strncmp(cmd, "scc", 3) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_CONNECT_TO_PRIVATE_SIGNALING_SERVER;
+ g_menu_state = CURRENT_STATUS_CONNECT_TO_PRIVATE_SIGNALING_SERVER;
} else if (strncmp(cmd, "scd", 3) == 0) {
- _webrtc_signaling_disconnect(g_conn_index);
+ _webrtc_signaling_disconnect();
} else if (strncmp(cmd, "scs", 3) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_SET_CROP_SCREEN_SOURCE;
+ g_menu_state = CURRENT_STATUS_SET_CROP_SCREEN_SOURCE;
} else if (strncmp(cmd, "ucs", 3) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE;
+ g_menu_state = CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE;
} else if (strncmp(cmd, "sfl", 3) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_FILE_LOOPING;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_SET_FILE_LOOPING;
} else if (strncmp(cmd, "gfl", 3) == 0) {
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_FILE_LOOPING;
+ g_menu_state = CURRENT_STATUS_MEDIA_SOURCE_GET_FILE_LOOPING;
} else {
g_print("unknown menu \n");
void display_setting_status()
{
int len_proxy = strlen(g_proxy);
- int len_server = strlen(g_signaling_server);
+ int len_server = strlen(g_signaling_server.url);
int i;
if (len_proxy == 0 && len_server == 0)
if (len_proxy > 0)
g_print(" proxy[%s]", g_proxy);
- if (len_server > 0) {
- g_print(" server[%s]\n", g_signaling_server);
- for (i = 0; i < MAX_CONNECTION_LEN; i++) {
- if (i == g_conn_index)
- g_print(" [*]");
- else
- g_print(" [ ]");
- g_print("[%d][%s][%d]\n", i, g_server_status_str[g_conns[i].server_status], g_conns[i].local_peer_id);
- }
+ if (len_server > 0)
+ g_print(" server[%s][%s]\n", g_signaling_server.url, g_server_status_str[g_signaling_server.server_status]);
+ if (g_signaling_server.local_peer_id > 0)
+ g_print(" local peer id : %d\n", g_signaling_server.local_peer_id);
+ for (i = 0; i < MAX_CONNECTION_LEN; i++) {
+ if (g_conns[i].remote_peer_id == 0)
+ continue;
+ g_print(" [%d] remote peer id : %d\n", i, g_conns[i].remote_peer_id);
}
g_print("-----------------------------------------------------------------------------------------\n");
}
g_print("=========================================================================================\n");
g_print(" Native WebRTC Test (press q to quit, * for internal API)\n");
g_print("-----------------------------------------------------------------------------------------\n");
- display_handle_status(g_conn_index);
+ display_handle_status(0);
g_print("c. Create\t");
g_print("d. Destroy\n");
g_print("s. Start\t");
display_setting_status();
g_print("px. Set proxy URL\n");
g_print("ss. Set signaling server URL\n");
- g_print("cc. Change connection\n");
g_print("cs. Connect to the signaling server\n");
g_print("rs. Request session of remote peer id\n");
g_print("rj. Request join room\n");
static void displaymenu()
{
- if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MAINMENU) {
+ if (g_menu_state == CURRENT_STATUS_MAINMENU) {
display_sub_basic();
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_ADD_MEDIA_SOURCE) {
+ } else if (g_menu_state == CURRENT_STATUS_ADD_MEDIA_SOURCE) {
g_print("*** input media source type.(1:audiotest, 2:videotest, 3:mic, 4:camera, 5:screen, 6:file, 7:media packet, 8:custom audio, 9:custom video)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_REMOVE_MEDIA_SOURCE) {
+ } else if (g_menu_state == CURRENT_STATUS_REMOVE_MEDIA_SOURCE) {
g_print("*** input media source id to remove.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_PAUSE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_PAUSE) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input media type.(1:audio 2:video)\n");
- else if (g_conns[g_conn_index].cnt == 2)
+ else if (g_cnt == 2)
g_print("*** input pause or play.(1:pause, 0:play)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_PAUSE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_PAUSE) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input media type.(1:audio 2:video)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_RESOLUTION) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_RESOLUTION) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input width.\n");
- else if (g_conns[g_conn_index].cnt == 2)
+ else if (g_cnt == 2)
g_print("*** input height.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_RESOLUTION) {
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_RESOLUTION) {
g_print("*** input source id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_BUFFER_STATE_CHANGED_CB) {
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_BUFFER_STATE_CHANGED_CB) {
g_print("*** input media packet source id to set buffer state changed callback.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB) {
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB) {
g_print("*** input media packet source id to unset buffer state changed callback.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_FORMAT) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_FORMAT) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input media format.(1:I420 2:NV12 3:PCM_S16LE 4:H264)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_DIRECTION) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_DIRECTION) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input media type.(1:audio 2:video)\n");
- else if (g_conns[g_conn_index].cnt == 2)
+ else if (g_cnt == 2)
g_print("*** input transceiver direction.(1:sendonly 2:recvonly 3:sendrecv)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_DIRECTION) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_DIRECTION) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input media type.(1:audio 2:video)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_DISPLAY_TYPE) {
+ } else if (g_menu_state == CURRENT_STATUS_SET_DISPLAY_TYPE) {
g_print("*** input display type.(1:overlay 2:evas)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_DISPLAY_MODE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_SET_DISPLAY_MODE) {
+ if (g_cnt == 0)
g_print("*** input track id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input display mode.(1:letter-box 2:origin size 3:full)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_GET_DISPLAY_MODE) {
+ } else if (g_menu_state == CURRENT_STATUS_GET_DISPLAY_MODE) {
g_print("*** input track id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_DISPLAY_VISIBLE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_SET_DISPLAY_VISIBLE) {
+ if (g_cnt == 0)
g_print("*** input track id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input display visible.(1:true 0:false)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_GET_DISPLAY_VISIBLE) {
+ } else if (g_menu_state == CURRENT_STATUS_GET_DISPLAY_VISIBLE) {
g_print("*** input track id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK) {
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK) {
g_print("*** input source id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_LOOPBACK) {
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_LOOPBACK) {
g_print("*** input source id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_FILE_LOOPING) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_SET_FILE_LOOPING) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input looping state.(1:true 0:false)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_FILE_LOOPING) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MEDIA_SOURCE_GET_FILE_LOOPING) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_DATA_CHANNEL_SEND_STRING) {
+ } else if (g_menu_state == CURRENT_STATUS_DATA_CHANNEL_SEND_STRING) {
g_print("*** input string to send.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_DATA_CHANNEL_SEND_STRING_AS_BYTES) {
+ } else if (g_menu_state == CURRENT_STATUS_DATA_CHANNEL_SEND_STRING_AS_BYTES) {
g_print("*** input string to send.(it will be converted to bytes data)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_DATA_CHANNEL_SEND_FILE) {
+ } else if (g_menu_state == CURRENT_STATUS_DATA_CHANNEL_SEND_FILE) {
g_print("*** input file path to send.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_MUTE_MEDIA_SOURCE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_MUTE_MEDIA_SOURCE) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input media type.(1:audio 2:video)\n");
- else if (g_conns[g_conn_index].cnt == 2)
+ else if (g_cnt == 2)
g_print("*** input mute mode.(0:unmuted 1:muted)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_CROP_SCREEN_SOURCE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_SET_CROP_SCREEN_SOURCE) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input x.\n");
- else if (g_conns[g_conn_index].cnt == 2)
+ else if (g_cnt == 2)
g_print("*** input y.\n");
- else if (g_conns[g_conn_index].cnt == 3)
+ else if (g_cnt == 3)
g_print("*** input width.\n");
- else if (g_conns[g_conn_index].cnt == 4)
+ else if (g_cnt == 4)
g_print("*** input height.\n");
- else if (g_conns[g_conn_index].cnt == 5)
+ else if (g_cnt == 5)
g_print("*** input whether screen rotates (0: horizontal, 1: vertical).\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_STUN_SERVER) {
+ } else if (g_menu_state == CURRENT_STATUS_SET_STUN_SERVER) {
g_print("*** input STUN server address.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_ADD_TURN_SERVER) {
+ } else if (g_menu_state == CURRENT_STATUS_ADD_TURN_SERVER) {
g_print("*** input TURN server address.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_ICE_TRANSPORT_POLICY) {
+ } else if (g_menu_state == CURRENT_STATUS_SET_ICE_TRANSPORT_POLICY) {
g_print("*** input ICE transport policy.(0:all, 1:relay)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_LOCAL_DESCRIPTION) {
+ } else if (g_menu_state == CURRENT_STATUS_SET_LOCAL_DESCRIPTION) {
g_print("*** input type of local description.(1:offer, 2:answer)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SETTING_SIGNALING_SERVER) {
+ } else if (g_menu_state == CURRENT_STATUS_SETTING_SIGNALING_SERVER) {
g_print("*** input signaling server URL.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SETTING_PROXY) {
+ } else if (g_menu_state == CURRENT_STATUS_SETTING_PROXY) {
g_print("*** input proxy URL.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_CHANGE_CONNECTION) {
- g_print("*** input to connection index.(0 ~ 2)\n");
-
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_REQUEST_SESSION) {
+ } else if (g_menu_state == CURRENT_STATUS_REQUEST_SESSION) {
g_print("*** input remote peer id.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_REQUEST_JOIN_ROOM) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_REQUEST_JOIN_ROOM) {
+ if (g_cnt == 0)
g_print("*** input source type.(1:videotest/audiotest 2:camera/mic)\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input room name to join.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SEND_LOCAL_DESCRIPTION) {
+ } else if (g_menu_state == CURRENT_STATUS_SEND_LOCAL_DESCRIPTION) {
g_print("*** input type of local description to send to the server.(1:offer, 2:answer)\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE) {
+ } else if (g_menu_state == CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE) {
g_print("*** input media packet source id to start pushing packet.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE) {
+ } else if (g_menu_state == CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE) {
g_print("*** input media packet source id to stop pushing packet.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_SET_MEDIA_PATH_TO_MEDIA_FILE_SOURCE) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_SET_MEDIA_PATH_TO_MEDIA_FILE_SOURCE) {
+ if (g_cnt == 0)
g_print("*** input source id.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input media path.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_CREATE_PRIVATE_SIGNALING_SERVER) {
+ } else if (g_menu_state == CURRENT_STATUS_CREATE_PRIVATE_SIGNALING_SERVER) {
g_print("*** input port.\n");
- } else if (g_conns[g_conn_index].menu_state == CURRENT_STATUS_CONNECT_TO_PRIVATE_SIGNALING_SERVER) {
- if (g_conns[g_conn_index].cnt == 0)
+ } else if (g_menu_state == CURRENT_STATUS_CONNECT_TO_PRIVATE_SIGNALING_SERVER) {
+ if (g_cnt == 0)
g_print("*** input server ip.\n");
- else if (g_conns[g_conn_index].cnt == 1)
+ else if (g_cnt == 1)
g_print("*** input port.\n");
} else {
void reset_menu_state(void)
{
- g_conns[g_conn_index].menu_state = CURRENT_STATUS_MAINMENU;
+ g_menu_state = CURRENT_STATUS_MAINMENU;
}
static void interpret(char *cmd)
{
int value;
- switch (g_conns[g_conn_index].menu_state) {
+ switch (g_menu_state) {
case CURRENT_STATUS_MAINMENU:
_interpret_main_menu(cmd);
break;
case CURRENT_STATUS_ADD_MEDIA_SOURCE: {
value = atoi(cmd);
- _webrtc_add_media_source(g_conn_index, value, NULL);
+ _webrtc_add_media_source(0, value, NULL);
reset_menu_state();
break;
}
case CURRENT_STATUS_REMOVE_MEDIA_SOURCE: {
value = atoi(cmd);
- _webrtc_remove_media_source(g_conn_index, value);
+ _webrtc_remove_media_source(0, value);
reset_menu_state();
break;
}
int is_pause;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
media_type = value - 1;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 2:
is_pause = value;
- _webrtc_media_source_set_pause(g_conn_index, id, media_type, is_pause);
+ _webrtc_media_source_set_pause(0, id, media_type, is_pause);
id = media_type = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
static unsigned int id;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
- _webrtc_media_source_get_pause(g_conn_index, id, value - 1);
+ _webrtc_media_source_get_pause(0, id, value - 1);
id = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
static int height;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
width = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 2:
height = value;
- _webrtc_media_source_set_video_resolution(g_conn_index, id, width, height);
+ _webrtc_media_source_set_video_resolution(0, id, width, height);
id = width = height = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
}
case CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_RESOLUTION: {
value = atoi(cmd);
- _webrtc_media_source_get_video_resolution(g_conn_index, value);
+ _webrtc_media_source_get_video_resolution(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_BUFFER_STATE_CHANGED_CB: {
value = atoi(cmd);
- _webrtc_media_packet_source_set_buffer_state_changed_cb(g_conn_index, value);
+ _webrtc_media_packet_source_set_buffer_state_changed_cb(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB: {
value = atoi(cmd);
- _webrtc_media_packet_source_unset_buffer_state_changed_cb(g_conn_index, value);
+ _webrtc_media_packet_source_unset_buffer_state_changed_cb(0, value);
reset_menu_state();
break;
}
static unsigned int id;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
- _webrtc_media_packet_source_set_format(g_conn_index, id, value);
+ _webrtc_media_packet_source_set_format(0, id, value);
id = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
static unsigned int direction;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
media_type = value - 1;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 2:
direction = value - 1;
- _webrtc_media_source_set_transceiver_direction(g_conn_index, id, media_type, direction);
+ _webrtc_media_source_set_transceiver_direction(0, id, media_type, direction);
id = media_type = direction = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
static unsigned int media_type;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
media_type = value - 1;
- _webrtc_media_source_get_transceiver_direction(g_conn_index, id, media_type);
+ _webrtc_media_source_get_transceiver_direction(0, id, media_type);
id = media_type = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
}
case CURRENT_STATUS_SET_DISPLAY_TYPE: {
value = atoi(cmd);
- _webrtc_set_display_type(g_conn_index, value - 1);
+ _webrtc_set_display_type(0, value - 1);
reset_menu_state();
break;
}
static unsigned int id;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
- _webrtc_set_display_mode(g_conn_index, id, value - 1);
+ _webrtc_set_display_mode(0, id, value - 1);
id = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
}
case CURRENT_STATUS_GET_DISPLAY_MODE: {
value = atoi(cmd);
- _webrtc_get_display_mode(g_conn_index, value);
+ _webrtc_get_display_mode(0, value);
reset_menu_state();
break;
}
static unsigned int id;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
- _webrtc_set_display_visible(g_conn_index, id, value);
+ _webrtc_set_display_visible(0, id, value);
id = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
}
case CURRENT_STATUS_GET_DISPLAY_VISIBLE: {
value = atoi(cmd);
- _webrtc_get_display_visible(g_conn_index, value);
+ _webrtc_get_display_visible(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK: {
value = atoi(cmd);
- _webrtc_media_source_set_audio_loopback(g_conn_index, value);
+ _webrtc_media_source_set_audio_loopback(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_LOOPBACK: {
value = atoi(cmd);
- _webrtc_media_source_set_video_loopback(g_conn_index, value);
+ _webrtc_media_source_set_video_loopback(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_DATA_CHANNEL_SEND_STRING: {
- _webrtc_data_channel_send_string(g_conn_index, cmd);
+ _webrtc_data_channel_send_string(0, cmd);
reset_menu_state();
break;
}
case CURRENT_STATUS_DATA_CHANNEL_SEND_STRING_AS_BYTES: {
- _webrtc_data_channel_send_string_as_bytes(g_conn_index, cmd);
+ _webrtc_data_channel_send_string_as_bytes(0, cmd);
reset_menu_state();
break;
}
case CURRENT_STATUS_DATA_CHANNEL_SEND_FILE: {
- _webrtc_data_channel_send_file(g_conn_index, cmd);
+ _webrtc_data_channel_send_file(0, cmd);
reset_menu_state();
break;
}
case CURRENT_STATUS_SET_STUN_SERVER: {
- _webrtc_set_stun_server(g_conn_index, cmd);
+ _webrtc_set_stun_server(0, cmd);
reset_menu_state();
break;
}
case CURRENT_STATUS_ADD_TURN_SERVER: {
- _webrtc_add_turn_server(g_conn_index, cmd);
+ _webrtc_add_turn_server(0, cmd);
reset_menu_state();
break;
}
case CURRENT_STATUS_SET_ICE_TRANSPORT_POLICY: {
value = atoi(cmd);
- _webrtc_set_ice_transport_policy(g_conn_index, value);
+ _webrtc_set_ice_transport_policy(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_SET_LOCAL_DESCRIPTION: {
value = atoi(cmd);
if (value == 1)
- _webrtc_set_local_description(&g_conns[g_conn_index], true);
+ _webrtc_set_local_description(&g_conns[0], true);
else if (value == 2)
- _webrtc_set_local_description(&g_conns[g_conn_index], false);
+ _webrtc_set_local_description(&g_conns[0], false);
else
g_print("invalid value[%d]\n", value);
break;
}
case CURRENT_STATUS_SETTING_SIGNALING_SERVER: {
- _setting_uri(g_signaling_server, cmd);
+ _setting_uri(g_signaling_server.url, cmd);
reset_menu_state();
break;
}
reset_menu_state();
break;
}
- case CURRENT_STATUS_CHANGE_CONNECTION: {
- value = atoi(cmd);
- if (value < 0 || value >= MAX_CONNECTION_LEN)
- g_print("invalid value[%d]", value);
- else
- g_conn_index = value;
- reset_menu_state();
- break;
- }
case CURRENT_STATUS_REQUEST_SESSION: {
value = atoi(cmd);
- _request_session(g_conn_index, value);
+ _request_session(value);
reset_menu_state();
break;
}
case CURRENT_STATUS_REQUEST_JOIN_ROOM: {
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
value = atoi(cmd);
if (value <= 0 || value > 2) {
reset_menu_state();
break;
}
- g_conns[g_conn_index].room_source_type = value;
- g_conns[g_conn_index].cnt++;
+ g_conns[0].room_source_type = value;
+ g_cnt++;
break;
case 1:
- _request_join_room(g_conn_index, cmd);
- g_conns[g_conn_index].cnt = 0;
+ _request_join_room(cmd);
+ g_cnt = 0;
reset_menu_state();
break;
}
case CURRENT_STATUS_SEND_LOCAL_DESCRIPTION: {
value = atoi(cmd);
if (value == 1)
- _send_local_description(g_conn_index, true);
+ _send_local_description(true);
else if (value == 2)
- _send_local_description(g_conn_index, false);
+ _send_local_description(false);
else
g_print("invalid value[%d]\n", value);
}
case CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE: {
value = atoi(cmd);
- _start_pushing_packet(g_conn_index, value);
+ _start_pushing_packet(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE: {
value = atoi(cmd);
- _stop_pushing_packet(g_conn_index, value);
+ _stop_pushing_packet(0, value);
reset_menu_state();
break;
}
static unsigned int id;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
- _set_media_path(g_conn_index, id, cmd);
+ _set_media_path(0, id, cmd);
id = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
case CURRENT_STATUS_MEDIA_SOURCE_SET_FILE_LOOPING: {
static unsigned int id;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
- _webrtc_media_source_set_file_looping(g_conn_index, id, value);
+ _webrtc_media_source_set_file_looping(0, id, value);
id = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
}
case CURRENT_STATUS_MEDIA_SOURCE_GET_FILE_LOOPING: {
value = atoi(cmd);
- _webrtc_media_source_get_file_looping(g_conn_index, value);
+ _webrtc_media_source_get_file_looping(0, value);
reset_menu_state();
break;
}
case CURRENT_STATUS_CONNECT_TO_PRIVATE_SIGNALING_SERVER: {
static char *ip = NULL;
- if (strlen(g_signaling_server) > 0) {
- g_printerr("server[%s] is already set by 'ss'\n", g_signaling_server);
+ if (strlen(g_signaling_server.url) > 0) {
+ g_printerr("server[%s] is already set by 'ss'\n", g_signaling_server.url);
reset_menu_state();
break;
}
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
ip = strdup(cmd);
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
value = atoi(cmd);
- _webrtc_signaling_connect(g_conn_index, ip, value);
- g_conns[g_conn_index].cnt = 0;
+ _webrtc_signaling_connect(ip, value);
+ g_cnt = 0;
if (ip) {
free(ip);
ip = NULL;
static int is_vertical;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
x = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 2:
y = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 3:
w = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 4:
h = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 5:
is_vertical = value;
int width, height;
- _webrtc_screen_source_set_crop(g_conn_index, id, x, y, w, h, is_vertical, &width, &height);
+ _webrtc_screen_source_set_crop(0, id, x, y, w, h, is_vertical, &width, &height);
x = y = w = h = is_vertical = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
}
case CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE: {
value = atoi(cmd);
- _webrtc_screen_source_unset_crop(g_conn_index, value);
+ _webrtc_screen_source_unset_crop(0, value);
reset_menu_state();
break;
}
static unsigned int media_type;
value = atoi(cmd);
- switch (g_conns[g_conn_index].cnt) {
+ switch (g_cnt) {
case 0:
id = value;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 1:
media_type = value - 1;
- g_conns[g_conn_index].cnt++;
+ g_cnt++;
break;
case 2:
- _webrtc_media_source_set_mute(g_conn_index, id, media_type, value);
+ _webrtc_media_source_set_mute(0, id, media_type, value);
id = media_type = 0;
- g_conns[g_conn_index].cnt = 0;
+ g_cnt = 0;
reset_menu_state();
break;
}
}
}
- if (g_conns[g_conn_index].menu_state != CURRENT_STATUS_TERMINATE)
+ if (g_menu_state != CURRENT_STATUS_TERMINATE)
g_timeout_add(100, timeout_menu_display, 0);
}