/* Silky - A GTK+ client for SILC. Copyright (C) 2003,2004 Toni Willberg - Functions used by timers This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA http://silky.sourceforge.net/ */ #include #include #include #include #ifdef HAVE_CONFIG_H # include #endif #include "timer.h" #include "support.h" #include "log.h" #include "common.h" gint lastpong; /* last time we received a ping */ extern silkyStruct *silky; extern GladeXML *xmlmain; /* PING This gets called periodically by GTK Shows lag time in the UI if it's over N seconds */ gboolean silky_ping(gpointer data) { GtkWidget *statusbar; gint pong = 0; guint context = 0; if (CONNECTED && silky && silky->client) { /* do nothing if we are not initialized and connected */ if(!lastpong) lastpong = time(NULL); pong = time(NULL) - lastpong; statusbar = glade_xml_get_widget (xmlmain, "silkystatusbar"); context = gtk_statusbar_get_context_id(GTK_STATUSBAR(glade_xml_get_widget (xmlmain, "silkystatusbar")), "Lag"); if (pong > 15) { debug ("No network activity in %d seconds, sending PING to server %s", pong, silky->conn->local_entry->server ); /* send PING to the server */ silc_client_command_call(silky->client, silky->conn, NULL, "PING", silky->conn->local_entry->server, NULL); } if (pong > 30) { /* show lag timer if lag is more than N seconds */ /* I18N lag */ debug("Showing LAG'O'METER for user"); gtk_statusbar_push(GTK_STATUSBAR(statusbar), context, g_strdup_printf(ngettext("Network problem: Server did not respond in %d second, please wait...", "Network problem: Server did not respond in %d seconds, please wait...", pong), pong)); } else { gtk_statusbar_push(GTK_STATUSBAR(statusbar), context, ""); } } return TRUE; } /* a small function called from timer, to update the keygen progressbar */ gboolean silky_progressbar_update(GtkProgressBar * keygen_progressbar) { if (GTK_IS_PROGRESS_BAR(keygen_progressbar)) { gtk_progress_bar_pulse(keygen_progressbar); return TRUE; } else { return FALSE; /* This happens if user closes the progress dialog while were are here. */ } }