Commit 49b4149b authored by winckel's avatar winckel

Added a time-out of about 5 minutes to socket connection.

Added control of sensitivity to some buttons.
Added a stop button for messages load.

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4943 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 89e029ee
......@@ -24,9 +24,14 @@
#include "xml_parse.h"
#define SOCKET_NB_CONNECT_RETRY (5 * 60 * 10) /* About 5 minutes time-out for connecting to peer */
#define SOCKET_US_BEFORE_CONNECT_RETRY (100 * 1000) /* Retry connection after 100 ms */
#define SOCKET_NB_SIGNALS_BEFORE_SIGNALLING 10
#define SOCKET_MS_BEFORE_SIGNALLING 100
gboolean socket_abort_connection = FALSE;
void *socket_thread_fct(void *arg);
static ssize_t socket_read_data(socket_data_t *socket_data, void *buffer, size_t size, int flags)
......@@ -264,6 +269,7 @@ void *socket_thread_fct(void *arg)
int ret;
struct sockaddr_in si_me;
socket_data_t *socket_data;
int retry = SOCKET_NB_CONNECT_RETRY;
/* master file descriptor list */
fd_set master_fds;
......@@ -313,18 +319,24 @@ void *socket_thread_fct(void *arg)
tv.tv_sec = 0;
tv.tv_usec = 1000 * SOCKET_MS_BEFORE_SIGNALLING;
/* Connecting to remote peer */
ret = connect(socket_data->sd, (struct sockaddr *)&si_me, sizeof(struct sockaddr_in));
if (ret < 0) {
g_warning("Failed to connect to peer %s:%d",
socket_data->ip_address, socket_data->port);
ui_pipe_write_message(socket_data->pipe_fd,
UI_PIPE_CONNECTION_FAILED, NULL, 0);
free(socket_data->ip_address);
free(socket_data);
/* Quit the thread */
pthread_exit(NULL);
}
do {
/* Connecting to remote peer */
ret = connect(socket_data->sd, (struct sockaddr *)&si_me, sizeof(struct sockaddr_in));
if ((ret < 0) && ((socket_abort_connection) || (retry < 0))) {
if (retry < 0) {
g_warning("Failed to connect to peer %s:%d",
socket_data->ip_address, socket_data->port);
ui_pipe_write_message(socket_data->pipe_fd,
UI_PIPE_CONNECTION_FAILED, NULL, 0);
}
free(socket_data->ip_address);
free(socket_data);
/* Quit the thread */
pthread_exit(NULL);
}
usleep(SOCKET_US_BEFORE_CONNECT_RETRY);
retry --;
} while (ret < 0);
/* Set the socket as non-blocking */
fcntl(socket_data->sd, F_SETFL, O_NONBLOCK);
......
......@@ -21,6 +21,8 @@ typedef struct {
GList *signal_list;
} socket_data_t;
gboolean socket_abort_connection;
int socket_connect_to_remote_host(const char *remote_ip, const uint16_t port,
int pipe_fd);
......
......@@ -511,6 +511,7 @@ static gboolean ui_handle_socket_connection_lost(gint fd)
/* Re-enable connect button */
ui_enable_connect_button ();
ui_set_sensitive_save_message_buttons (TRUE);
return TRUE;
}
......@@ -605,6 +606,7 @@ gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data)
/* Disable the connect button */
ui_disable_connect_button ();
ui_set_sensitive_save_message_buttons (FALSE);
ui_callback_signal_clear_list (widget, data);
......@@ -620,13 +622,12 @@ gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data)
gboolean ui_callback_on_disconnect(GtkWidget *widget, gpointer data)
{
/* We have to retrieve the ip address and port of remote host */
g_message("Disconnect event occurred");
ui_pipe_write_message (ui_main_data.pipe_fd[0], UI_PIPE_DISCONNECT_EVT, NULL, 0);
ui_enable_connect_button ();
ui_set_sensitive_save_message_buttons (TRUE);
return TRUE;
}
......
......@@ -25,6 +25,7 @@ typedef struct {
GtkToolItem *open_replay_file;
GtkToolItem *refresh_replay_file;
GtkToolItem *stop;
GtkToolItem *save_replay_file;
GtkToolItem *save_replay_file_filtered;
......
......@@ -7,6 +7,7 @@
#include "ui_main_screen.h"
#include "ui_menu_bar.h"
#include "ui_callbacks.h"
#include "ui_notifications.h"
static const guint BUTTON_SPACE = 0;
static const guint LABEL_SPACE = 5;
......@@ -14,12 +15,20 @@ static const guint SEPARATOR_SPACE = 5;
void ui_set_sensitive_move_buttons(gboolean enable)
{
// gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_clear_button), enable);
// gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_button), enable);
gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_last_button), enable);
gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_first_button), enable);
}
void ui_set_sensitive_save_message_buttons(gboolean enable)
{
if (ui_main_data.nb_message_received == 0)
{
enable = FALSE;
}
gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.save_replay_file), enable);
gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.save_replay_file_filtered), enable);
}
int ui_menu_bar_create(GtkWidget *vbox)
{
GtkAccelGroup *accel_group;
......@@ -271,6 +280,15 @@ int ui_toolbar_create(GtkWidget *vbox)
G_CALLBACK(ui_callback_on_open_messages), (gpointer) TRUE);
}
/* Stop reading messages file */
{
ui_main_data.stop = gtk_tool_button_new_from_stock(GTK_STOCK_STOP);
gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.stop), "Stop loading messages file");
g_signal_connect(G_OBJECT(ui_main_data.stop), "clicked",
ui_progressbar_window_destroy, NULL);
}
/* Button to save messages file */
{
ui_main_data.save_replay_file = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
......@@ -369,8 +387,11 @@ int ui_toolbar_create(GtkWidget *vbox)
gtk_box_pack_start(GTK_BOX(hbox), messages_label, FALSE, FALSE, LABEL_SPACE);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.open_replay_file), FALSE, FALSE, BUTTON_SPACE);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.refresh_replay_file), FALSE, FALSE, BUTTON_SPACE);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.stop), FALSE, FALSE, BUTTON_SPACE);
gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop), FALSE);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_replay_file), FALSE, FALSE, BUTTON_SPACE);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_replay_file_filtered), FALSE, FALSE, BUTTON_SPACE);
ui_set_sensitive_save_message_buttons(FALSE);
gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, SEPARATOR_SPACE);
......
......@@ -3,6 +3,8 @@
void ui_set_sensitive_move_buttons(gboolean enable);
void ui_set_sensitive_save_message_buttons(gboolean enable);
int ui_menu_bar_create(GtkWidget *vbox);
int ui_toolbar_create(GtkWidget *vbox);
......
......@@ -24,6 +24,7 @@
#include "locate_root.h"
#include "xml_parse.h"
#include "socket.h"
static const itti_message_types_t itti_dump_xml_definition_end = ITTI_DUMP_XML_DEFINITION_END;
static const itti_message_types_t itti_dump_message_type_end = ITTI_DUMP_MESSAGE_TYPE_END;
......@@ -37,6 +38,7 @@ int ui_disable_connect_button(void)
/* Disable Connect button and enable disconnect button */
gtk_widget_set_sensitive (GTK_WIDGET (ui_main_data.connect), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (ui_main_data.disconnect), TRUE);
socket_abort_connection = FALSE;
return RC_OK;
}
......@@ -46,6 +48,7 @@ int ui_enable_connect_button(void)
/* Disable Disconnect button and enable connect button */
gtk_widget_set_sensitive (GTK_WIDGET (ui_main_data.connect), TRUE);
gtk_widget_set_sensitive (GTK_WIDGET (ui_main_data.disconnect), FALSE);
socket_abort_connection = TRUE;
ui_set_title ("");
return RC_OK;
......@@ -280,6 +283,10 @@ int ui_messages_read(char *file_name)
basename = g_path_get_basename (file_name);
ui_set_title ("\"%s\"", basename);
}
else
{
result = RC_FAIL;
}
ui_progress_bar_terminate ();
......@@ -377,6 +384,8 @@ int ui_messages_open_file_chooser(void)
gtk_widget_destroy (filechooser);
if (accept)
{
ui_set_sensitive_save_message_buttons (FALSE);
result = ui_messages_read (filename);
if (result == RC_OK)
{
......@@ -386,6 +395,8 @@ int ui_messages_open_file_chooser(void)
g_free (ui_main_data.messages_file_name);
}
ui_main_data.messages_file_name = filename;
ui_set_sensitive_save_message_buttons (TRUE);
}
else
{
......@@ -572,6 +583,8 @@ int ui_progress_bar_set_fraction(double fraction)
g_signal_connect(ui_main_data.progressbar_window, "destroy", ui_progressbar_window_destroy, NULL);
gtk_widget_show_all (ui_main_data.progressbar_window);
gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop), TRUE);
}
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(ui_main_data.progressbar), fraction);
......@@ -594,6 +607,7 @@ int ui_progress_bar_terminate(void)
gtk_widget_destroy (ui_main_data.progressbar_window);
ui_main_data.progressbar_window = NULL;
}
gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop), FALSE);
return RC_OK;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment