⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statusview.c

📁 linux防火墙源代码 需要用的人自己下载看看 程序比较简单啊
💻 C
📖 第 1 页 / 共 3 页
字号:
static gbooleanupdate_conntrack_ttl (gchar *key, Connection_entry *entry, GHashTable *entries){	GtkListStore *store = get_connectionstore ();	entry->ttl--;	if (entry->ttl == 0) { /* Remove dead connections */		gtk_list_store_remove (store, entry->ref);		return TRUE;	} else {		if (entry->ttl < CONNTRACK_TTL-1) {			/* Mark connections not seen for a while */			gtk_list_store_set (store, entry->ref,		        	            CONNECTIONCOL_COLOR, COLOR_RETIRED_CONNECTION,					    -1);		}	}	return FALSE;}static voidfree_connection_entry (gpointer data){	Connection_entry *entry = (Connection_entry *)data;		gtk_tree_iter_free (entry->ref);	g_free (data);}/* [ update_status_screen ] * Timeout callback for refreshing the status view page periodically */static gbooleanupdate_status_screen (gpointer data){	static GHashTable *interfaces_info = NULL;	static GHashTable *interfaces_widgets = NULL;	static GHashTable *conntrack_entries = NULL;	if (interfaces_info == NULL)		interfaces_info = g_hash_table_new (g_str_hash, g_str_equal);	if (interfaces_widgets == NULL)		interfaces_widgets = g_hash_table_new (g_str_hash, g_str_equal);	if (conntrack_entries == NULL)		conntrack_entries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_connection_entry);	refresh_network_data (interfaces_info);	g_hash_table_foreach (interfaces_info, (GHFunc)refresh_interface, interfaces_widgets);	g_hash_table_foreach_remove (conntrack_entries, (GHRFunc)update_conntrack_ttl, conntrack_entries);	if (active_connections_visible)		connectionview_refresh (conntrack_entries);	return TRUE;}static voidview_set_color_col (GtkTreeView *view, gint col_num){	GList* renderers;	GList *columns;	GtkCellRenderer *renderer;	GList *e;	columns = gtk_tree_view_get_columns (view);	for (e = columns; e != NULL; e = g_list_next(e)) {		GtkTreeViewColumn* column = e->data;		renderers = gtk_tree_view_column_get_cell_renderers (column);		renderer = g_list_nth_data (renderers, 0);		gtk_tree_view_column_add_attribute (column, renderer, "foreground", CONNECTIONCOL_COLOR);		g_list_free (renderers);	}	g_list_free (columns);}voidstatus_lookup_selected_connection (void){	GtkTreeSelection *selection;	GtkTreeIter iter;	GtkListStore *store = get_connectionstore ();	gchar *source, *destination, *hostname;	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (connectionview));	if (!gtk_tree_selection_get_selected (selection, NULL, &iter))		return;	gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,	                    CONNECTIONCOL_SOURCE, &source,			    CONNECTIONCOL_DESTINATION, &destination,			    -1);	hostname = lookup_ip (source);	if (hostname != NULL)		gtk_list_store_set (store, &iter,	        	            CONNECTIONCOL_SOURCE, hostname,	         	           -1);	hostname = lookup_ip (destination);	if (hostname != NULL)		gtk_list_store_set (store, &iter,	        	            CONNECTIONCOL_DESTINATION, hostname,	         	           -1);	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (connectionview));	g_free (source);	g_free (destination);}static gbooleanconnectionview_has_selection (GtkTreeView *view){	GtkTreeSelection *selection;	GtkTreeIter iter;	gboolean has_selection;	selection = gtk_tree_view_get_selection (view);	has_selection = gtk_tree_selection_get_selected (selection, NULL, &iter);	return has_selection;}static gbooleanconnectionview_button_press_cb (GtkWidget* view, GdkEventButton* event){	gboolean retval = FALSE;	GtkWidget *menu;	if (!connectionview_has_selection (GTK_TREE_VIEW (view)))		return FALSE;	menu = menus_get_connections_context_menu ();	switch (event->button) {		case 1: break;		case 3: gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,		                        event->button, event->time);			retval = TRUE;			break;	}	return retval;}static voidexpander_cb (GObject *object, GParamSpec *param_spec, gpointer user_data){	GtkExpander *expander;	GtkWidget *contents;	expander = GTK_EXPANDER (object);	contents = GTK_WIDGET (user_data);	if (gtk_expander_get_expanded (expander)) {		gtk_widget_show (contents);		active_connections_visible = TRUE;	} else { /* Reclaim vertical space on expander collapse */		gint width;		gtk_window_get_size (GTK_WINDOW (Firestarter.window), &width, NULL);		gtk_widget_hide (contents);		gtk_window_resize (GTK_WINDOW (Firestarter.window), width, 1);		active_connections_visible = FALSE;	}}/* [ create_hitview_page ] * Create the hitview */GtkWidget *create_statusview_page (void){	GtkWidget *statuspagebox;	GtkWidget *scrolledwin;	GtkWidget *frame;	GtkWidget *label;	GtkWidget *table;	GtkWidget *table2;	GdkPixbuf *pixbuf;	GtkWidget *separator;	GtkWidget *expander;	View_def connectionview_def = {6, {			{_("Source"), G_TYPE_STRING, TRUE},			{_("Destination"), G_TYPE_STRING, TRUE},			{_("Port"), G_TYPE_STRING, TRUE},			{_("Service"), G_TYPE_STRING, TRUE},			{_("Program"), G_TYPE_STRING, TRUE},			{_("Color"), G_TYPE_STRING, FALSE},		}	};	statuspagebox = gtk_vbox_new (FALSE, 0);/* Firewall */	frame = gtk_frame_new (NULL);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<b>", _("Firewall"), "</b>", NULL));	gtk_frame_set_label_widget (GTK_FRAME (frame), label);	gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);	gtk_box_pack_start (GTK_BOX (statuspagebox), frame, FALSE, FALSE, GNOME_PAD_SMALL);	table = gtk_table_new (3, 3, FALSE);	gtk_table_set_row_spacings (GTK_TABLE(table), GNOME_PAD_SMALL);	gtk_table_set_col_spacings (GTK_TABLE(table), GNOME_PAD_SMALL);	gtk_container_add (GTK_CONTAINER (frame), table);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" weight=\"bold\">", _("Status"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" weight=\"bold\">", _("Events"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	table2 = gtk_table_new (3, 3, FALSE);	gtk_table_set_row_spacings (GTK_TABLE(table), GNOME_PAD_SMALL);	gtk_table_set_col_spacings (GTK_TABLE(table), GNOME_PAD_SMALL);	gtk_table_attach (GTK_TABLE (table), table2, 1, 2, 1, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" underline=\"single\">", _("Total"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (table2), label, 1, 2, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" underline=\"single\">", _("Serious"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (table2), label, 2, 3, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\">", _("Inbound"), "</span>", NULL));	gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.0);	gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 1, 2,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\">", _("Outbound"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	events_in = gtk_label_new ("0");	gtk_table_attach (GTK_TABLE (table2), events_in, 1, 2, 1, 2,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	events_out = gtk_label_new ("0");	gtk_table_attach (GTK_TABLE (table2), events_out, 1, 2, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	events_serious_in = gtk_label_new ("0");	gtk_table_attach (GTK_TABLE (table2), events_serious_in, 2, 3, 1, 2,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	events_serious_out = gtk_label_new ("0");	gtk_table_attach (GTK_TABLE (table2), events_serious_out, 2, 3, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 5); 	pixbuf = gdk_pixbuf_new_from_inline (-1, icon_start_large, FALSE, NULL);	fw_state_icon = gtk_image_new_from_pixbuf (pixbuf);	g_object_unref (G_OBJECT(pixbuf));	gtk_table_attach (GTK_TABLE (table), fw_state_icon, 0, 1, 1, 2,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);	fw_state_label = gtk_label_new (NULL);	/* Force a size so that the different label lengths don't shift the other content */	gtk_widget_set_size_request (fw_state_label, 70, -1);	gtk_label_set_markup (GTK_LABEL (fw_state_label), g_strconcat (		"<small>", _("Active"), "</small>", NULL));	gtk_table_attach (GTK_TABLE (table), fw_state_label, 0, 1, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);		separator = gtk_hseparator_new ();	gtk_box_pack_start (GTK_BOX (statuspagebox), separator, FALSE, FALSE, 10);/* Network */	frame = gtk_frame_new (NULL);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<b>", _("Network"), "</b>", NULL));	gtk_frame_set_label_widget (GTK_FRAME (frame), label);	gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);	gtk_box_pack_start (GTK_BOX (statuspagebox), frame, FALSE, FALSE, 0);	device_table = gtk_table_new (5, 10, FALSE);	gtk_table_set_row_spacings (GTK_TABLE(device_table), GNOME_PAD_SMALL);	gtk_table_set_col_spacings (GTK_TABLE(device_table), GNOME_PAD_SMALL);	gtk_container_add (GTK_CONTAINER (frame), device_table);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" underline=\"single\">", _("Device"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (device_table), label, 0, 1, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);		label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" underline=\"single\">", _("Type"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (device_table), label, 1, 2, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" underline=\"single\">", _("Received"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (device_table), label, 2, 3, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);		label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" underline=\"single\">", _("Sent"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (device_table), label, 3, 4, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);		label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span size=\"smaller\" underline=\"single\">", _("Activity"), "</span>", NULL));	gtk_table_attach (GTK_TABLE (device_table), label, 4, 5, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 5);		expander = gtk_expander_new (NULL);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<b>", _("Active connections"), "</b>", NULL));	gtk_expander_set_label_widget (GTK_EXPANDER (expander), label);	gtk_expander_set_spacing (GTK_EXPANDER (expander), 5);	gtk_box_pack_start (GTK_BOX (statuspagebox), expander, FALSE, FALSE, 10);/* Active Connections */		connectionview = gui_create_list_view (&connectionview_def, -1, 150);	g_signal_connect (G_OBJECT (connectionview), "button_press_event",	                  G_CALLBACK (connectionview_button_press_cb), NULL);	view_set_color_col (GTK_TREE_VIEW (connectionview), CONNECTIONCOL_COLOR);	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (connectionview), TRUE);	scrolledwin = gtk_scrolled_window_new (NULL, NULL);	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin),	                                GTK_POLICY_NEVER,	                                GTK_POLICY_AUTOMATIC);	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwin), GTK_SHADOW_IN);	g_signal_connect (G_OBJECT (expander), "notify::expanded",	                  G_CALLBACK (expander_cb), scrolledwin);	gtk_expander_set_expanded (GTK_EXPANDER (expander), FALSE);							gtk_box_pack_start (GTK_BOX (statuspagebox), scrolledwin, TRUE, TRUE, 1);	gtk_widget_show (connectionview);	gtk_widget_set_no_show_all (scrolledwin, TRUE);	/* Pack the treeview into the scrolled window  */	gtk_container_add (GTK_CONTAINER (scrolledwin), connectionview);	gtk_timeout_add (REFRESH_RATE*1000, update_status_screen, NULL);	gtk_widget_show_all (statuspagebox);	return statuspagebox;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -