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

📄 preferences.c

📁 Linux系统下著名的个人防火墙
💻 C
📖 第 1 页 / 共 3 页
字号:
static voidfilter_host_view_reload (GtkListStore *store){	GIOChannel* in;	GError *error = NULL;	gchar *line;	in = g_io_channel_new_file (FIRESTARTER_FILTER_HOSTS_SCRIPT, "r", &error);	if (in == NULL) {		g_printerr ("Error reading file %s: %s\n", FIRESTARTER_FILTER_HOSTS_SCRIPT, error->message);		g_error_free (error);		return;	}		while (g_io_channel_read_line (in, &line, NULL, NULL, &error) == G_IO_STATUS_NORMAL) {		filter_host_view_append (store, g_strstrip (line));		g_free (line);	}	if (error != NULL)		g_error_free (error);}static voidfilter_port_view_reload (GtkListStore *store){	GIOChannel* in;	GError *error = NULL;	gchar *line;	in = g_io_channel_new_file (FIRESTARTER_FILTER_PORTS_SCRIPT, "r", &error);	if (in == NULL) {		g_printerr ("Error reading file %s: %s\n", FIRESTARTER_FILTER_PORTS_SCRIPT, error->message);		g_error_free (error);		return;	}		while (g_io_channel_read_line (in, &line, NULL, NULL, &error) == G_IO_STATUS_NORMAL) {		filter_port_view_append (store, line);		g_free (line);	}	if (error != NULL)		g_error_free (error);}static voidfilter_host_dialog_cb (GtkDialog *host_dialog, gint response, PreferencesDialog *dialog){	if (response == GTK_RESPONSE_OK) {		gchar *host;		GtkListStore *store;		host = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->entry_host)));		printf ("read host: %s\n", host);		store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->view_host_filter)));		filter_host_view_append (store, host);		append_to_file (FIRESTARTER_FILTER_HOSTS_SCRIPT, host, TRUE);		g_free (host);	}	/* Reset dialog */	gtk_entry_set_text (GTK_ENTRY (dialog->entry_host), "");	gtk_widget_grab_focus (dialog->entry_host);	gtk_widget_hide (GTK_WIDGET (host_dialog));}static voidfilter_port_dialog_cb (GtkDialog *port_dialog, gint response, PreferencesDialog *dialog){	if (response == GTK_RESPONSE_OK) {		gchar *port;		GtkListStore *store;		port = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->entry_port)));		store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->view_port_filter)));		filter_port_view_append (store, port);		append_to_file (FIRESTARTER_FILTER_PORTS_SCRIPT, port, TRUE);		g_free (port);	}	/* Reset dialog */	gtk_entry_set_text (GTK_ENTRY (dialog->entry_port), "");	gtk_widget_grab_focus (dialog->entry_port);	gtk_widget_hide (GTK_WIDGET (port_dialog));}static voidfilter_host_remove (GtkTreeView *view){	GtkTreeSelection *selection;	GtkTreeModel *model;	GtkTreeIter iter;	model = gtk_tree_view_get_model (view);	selection = gtk_tree_view_get_selection (view);	if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {		GtkTreePath* path;		gint pos;				path = gtk_tree_model_get_path (model, &iter);		pos = gtk_tree_path_get_indices(path)[0];				gtk_list_store_remove (GTK_LIST_STORE (model), &iter);		remove_line_from_file (FIRESTARTER_FILTER_HOSTS_SCRIPT, pos);		gtk_tree_path_free (path);	}}static voidfilter_port_remove (GtkTreeView *view){	GtkTreeSelection *selection;	GtkTreeModel *model;	GtkTreeIter iter;	model = gtk_tree_view_get_model (view);	selection = gtk_tree_view_get_selection (view);	if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {		GtkTreePath* path;		gint pos;				path = gtk_tree_model_get_path (model, &iter);		pos = gtk_tree_path_get_indices(path)[0];				gtk_list_store_remove (GTK_LIST_STORE (model), &iter);		remove_line_from_file (FIRESTARTER_FILTER_PORTS_SCRIPT, pos);		gtk_tree_path_free (path);	}}static voidactivate_dialog_cb (GtkWidget *dialog){	gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);}static voidsetup_interface_section (PreferencesDialog *dialog){	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_tray_icon), dialog->check_minimize_to_tray);}static voidsetup_events_section (PreferencesDialog *dialog){	GtkWidget *window;	GtkWidget *view;	GtkListStore *store;	View_def host_filter_def = {1, {			{_("Hosts"), G_TYPE_STRING, TRUE},		}	};	View_def port_filter_def = {1, {			{_("Ports"), G_TYPE_STRING, TRUE},		}	};		/* Set up list of filtered hosts */	window = dialog->window_host_filter;	view = gui_create_list_view (&host_filter_def, 120, 150);	dialog->view_host_filter = view;	gtk_container_add (GTK_CONTAINER (window), view);	store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));	filter_host_view_reload (store);	gtk_widget_show_all (view);	g_signal_connect_swapped (dialog->button_add_host, "clicked",	                          G_CALLBACK (gtk_widget_show_all), dialog->dialog_host_filter);	g_signal_connect_swapped (dialog->button_remove_host, "clicked",	                          G_CALLBACK (filter_host_remove), dialog->view_host_filter);	g_signal_connect (dialog->dialog_host_filter, "response",	                  G_CALLBACK (filter_host_dialog_cb), dialog);	g_signal_connect_swapped (dialog->entry_host, "activate",	                          G_CALLBACK (activate_dialog_cb), dialog->dialog_host_filter);	/* Set up list of filtered ports */	window = dialog->window_port_filter;	view = gui_create_list_view (&port_filter_def, 120, 150);	dialog->view_port_filter = view;	gtk_container_add (GTK_CONTAINER (window), view);	store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));	filter_port_view_reload (store);	gtk_widget_show_all (view);	g_signal_connect_swapped (dialog->button_add_port, "clicked",	                          G_CALLBACK (gtk_widget_show_all), dialog->dialog_port_filter);	g_signal_connect_swapped (dialog->button_remove_port, "clicked",	                          G_CALLBACK (filter_port_remove), dialog->view_port_filter);	g_signal_connect (dialog->dialog_port_filter, "response",	                  G_CALLBACK (filter_port_dialog_cb), dialog);	g_signal_connect_swapped (dialog->entry_port, "activate",	                          G_CALLBACK (activate_dialog_cb), dialog->dialog_port_filter);}static voidsetup_network_settings_section (PreferencesDialog *dialog){	GtkTreeModel *model;	model = get_devices_model ();	gtk_combo_box_set_model (GTK_COMBO_BOX (dialog->combo_ext_device), model);	gtk_combo_box_set_model (GTK_COMBO_BOX (dialog->combo_int_device), model);	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_dhcp), dialog->expander_dhcp);	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->radio_dhcp_create_conf), dialog->table_dhcp_settings);	gtk_expander_set_expanded (GTK_EXPANDER (dialog->expander_dhcp), FALSE);	gtk_widget_set_sensitive (dialog->box_local_network_settings, is_capable_of_nat ());}static voidsetup_icmp_section (PreferencesDialog *dialog){	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_icmp), dialog->frame_icmp_types);}static voidsetup_tos_section (PreferencesDialog *dialog){	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_tos), dialog->frame_tos_services);	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dialog->check_enable_tos), dialog->frame_tos_maximize);}voidpreferences_update_widget_from_conf (GtkWidget *widget, const gchar *gconf_key){	if (GTK_IS_ENTRY (widget)) {		gchar *data;		data = preferences_get_string (gconf_key);		gtk_entry_set_text (GTK_ENTRY (widget), data);		g_free (data);	} else if (GTK_IS_TOGGLE_BUTTON (widget)) {		gboolean active;		active = preferences_get_bool (gconf_key);		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), active);	} else {		printf ("Failed to update widget from conf: %s\n", gconf_key);		g_assert_not_reached ();	}}voidpreferences_update_conf_from_widget (GtkWidget *widget, const gchar *gconf_key){	if (GTK_IS_ENTRY (widget)) {		const gchar *data;		data = gtk_entry_get_text (GTK_ENTRY (widget));		preferences_set_string (gconf_key, data);	} else if (GTK_IS_TOGGLE_BUTTON (widget)) {		gboolean active;		active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));		preferences_set_bool (gconf_key, active);	} else {		printf ("Failed to update conf from widget: %s\n", gconf_key);		g_assert_not_reached ();	}}static gbooleancombo_set_active_device (GtkComboBox *combo, gchar *new_if){	GtkTreeIter iter;	GtkTreeModel *model;	gchar *interface;	model = gtk_combo_box_get_model (combo);	gtk_tree_model_get_iter_first (model, &iter);	do {		gtk_tree_model_get (model, &iter, 1, &interface, -1);		if (g_str_equal (interface, new_if)) {			gtk_combo_box_set_active_iter (combo, &iter);			return TRUE;		}	} while (gtk_tree_model_iter_next (model, &iter));	return FALSE;}static gchar *combo_get_active_device (GtkComboBox *combo){	GtkTreeIter iter;	GtkTreeModel *model;	gchar *interface;	model = gtk_combo_box_get_model (combo);	gtk_combo_box_get_active_iter (combo, &iter);	gtk_tree_model_get (model, &iter, 1, &interface, -1);	return interface;}static gbooleanvalidate_dhcp_settings (PreferencesDialog *dialog){	const gchar *name_server, *highest_ip, *lowest_ip;	gboolean validates = TRUE;	if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->check_enable_dhcp)) ||	    !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radio_dhcp_create_conf)))		return TRUE;	name_server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_dhcp_name_server));	highest_ip = gtk_entry_get_text (GTK_ENTRY (dialog->entry_dhcp_highest_ip));	lowest_ip = gtk_entry_get_text (GTK_ENTRY (dialog->entry_dhcp_lowest_ip));	validates = (is_a_valid_host (highest_ip) &&		     is_a_valid_host (lowest_ip) &&		     (is_a_valid_host (name_server) || g_ascii_strcasecmp (name_server, "<dynamic>") == 0));	if (!validates) {		error_dialog (_("Please review your choices"),		              _("Invalid DHCP configuration"),		              _("Please review your DHCP settings, the configuration\n"		                "you specified is not valid."),		             dialog->dialog_main);	}	return validates;}static voidload_preferences (PreferencesDialog *dialog){	/* Interface */	preferences_update_widget_from_conf (dialog->check_enable_tray_icon, PREFS_ENABLE_TRAY_ICON);	preferences_update_widget_from_conf (dialog->check_minimize_to_tray, PREFS_MINIMIZE_TO_TRAY);	gtk_widget_set_sensitive (dialog->check_minimize_to_tray, preferences_get_bool (PREFS_ENABLE_TRAY_ICON));	/* Events */	preferences_update_widget_from_conf (dialog->check_skip_redundant, PREFS_SKIP_REDUNDANT);	preferences_update_widget_from_conf (dialog->check_skip_not_for_firewall, PREFS_SKIP_NOT_FOR_FIREWALL);		/* Policy */	preferences_update_widget_from_conf (dialog->check_apply_policy_instantly, PREFS_APPLY_POLICY_INSTANTLY);	/* Firewall */

⌨️ 快捷键说明

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