📄 preferences.c
字号:
/* preferences_update_widget_from_conf (dialog->check_start_on_boot, PREFS_START_ON_BOOT); */ preferences_update_widget_from_conf (dialog->check_start_on_gui, PREFS_START_ON_GUI); preferences_update_widget_from_conf (dialog->check_start_on_dial_out, PREFS_START_ON_DIAL_OUT); preferences_update_widget_from_conf (dialog->check_start_on_dhcp, PREFS_START_ON_DHCP); /* Network settings */ if (!combo_set_active_device (GTK_COMBO_BOX (dialog->combo_ext_device), preferences_get_string (PREFS_FW_EXT_IF))) { printf ("Warning: External interface previously configured not found\n"); gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combo_ext_device), 0); /* Default to the first item */ } if (!combo_set_active_device (GTK_COMBO_BOX (dialog->combo_int_device), preferences_get_string (PREFS_FW_INT_IF))) { printf ("Warning: External interface previously configured not found\n"); gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combo_int_device), 0); /* Default to the first item */ } preferences_update_widget_from_conf (dialog->check_enable_connection_sharing, PREFS_FW_NAT); preferences_update_widget_from_conf (dialog->check_enable_dhcp, PREFS_FW_DHCP_ENABLE); preferences_update_widget_from_conf (dialog->entry_dhcp_lowest_ip, PREFS_FW_DHCP_LOWEST_IP); preferences_update_widget_from_conf (dialog->entry_dhcp_highest_ip, PREFS_FW_DHCP_HIGHEST_IP); preferences_update_widget_from_conf (dialog->entry_dhcp_name_server, PREFS_FW_DHCP_NAMESERVER); gtk_widget_set_sensitive (dialog->expander_dhcp, preferences_get_bool (PREFS_FW_DHCP_ENABLE)); gtk_widget_set_sensitive (dialog->table_dhcp_settings, FALSE); /* ICMP */ preferences_update_widget_from_conf (dialog->check_enable_icmp, PREFS_FW_FILTER_ICMP); preferences_update_widget_from_conf (dialog->check_icmp_echo_request, PREFS_FW_ICMP_ECHO_REQUEST); preferences_update_widget_from_conf (dialog->check_icmp_echo_reply, PREFS_FW_ICMP_ECHO_REPLY); preferences_update_widget_from_conf (dialog->check_icmp_traceroute, PREFS_FW_ICMP_TRACEROUTE); preferences_update_widget_from_conf (dialog->check_icmp_mstraceroute, PREFS_FW_ICMP_MSTRACEROUTE); preferences_update_widget_from_conf (dialog->check_icmp_unreachable, PREFS_FW_ICMP_UNREACHABLE); preferences_update_widget_from_conf (dialog->check_icmp_timestamping, PREFS_FW_ICMP_TIMESTAMPING); preferences_update_widget_from_conf (dialog->check_icmp_address_masking, PREFS_FW_ICMP_MASKING); preferences_update_widget_from_conf (dialog->check_icmp_redirection, PREFS_FW_ICMP_REDIRECTION); preferences_update_widget_from_conf (dialog->check_icmp_source_quenching, PREFS_FW_ICMP_SOURCE_QUENCHES); gtk_widget_set_sensitive (dialog->frame_icmp_types, preferences_get_bool (PREFS_FW_FILTER_ICMP)); /* ToS */ preferences_update_widget_from_conf (dialog->check_enable_tos, PREFS_FW_FILTER_TOS); preferences_update_widget_from_conf (dialog->check_prioritize_workstations, PREFS_FW_TOS_CLIENT); preferences_update_widget_from_conf (dialog->check_prioritize_servers, PREFS_FW_TOS_SERVER); preferences_update_widget_from_conf (dialog->check_prioritize_x, PREFS_FW_TOS_X); preferences_update_widget_from_conf (dialog->radio_max_throughput, PREFS_FW_TOS_OPT_TROUGHPUT); preferences_update_widget_from_conf (dialog->radio_max_reliability, PREFS_FW_TOS_OPT_RELIABILITY); preferences_update_widget_from_conf (dialog->radio_max_interactivity, PREFS_FW_TOS_OPT_DELAY); gtk_widget_set_sensitive (dialog->frame_tos_services, preferences_get_bool (PREFS_FW_FILTER_TOS)); gtk_widget_set_sensitive (dialog->frame_tos_maximize, preferences_get_bool (PREFS_FW_FILTER_TOS)); /* Advanced */ preferences_update_widget_from_conf (dialog->radio_deny_packets, PREFS_FW_DENY_PACKETS); preferences_update_widget_from_conf (dialog->check_block_external_broadcast, PREFS_FW_BLOCK_EXTERNAL_BROADCAST); preferences_update_widget_from_conf (dialog->check_block_internal_broadcast, PREFS_FW_BLOCK_INTERNAL_BROADCAST); preferences_update_widget_from_conf (dialog->check_block_non_routables, PREFS_FW_BLOCK_NON_ROUTABLES);}static voidsave_preferences (PreferencesDialog *dialog){ /* Interface */ preferences_update_conf_from_widget (dialog->check_enable_tray_icon, PREFS_ENABLE_TRAY_ICON); preferences_update_conf_from_widget (dialog->check_minimize_to_tray, PREFS_MINIMIZE_TO_TRAY); /* Events */ preferences_update_conf_from_widget (dialog->check_skip_redundant, PREFS_SKIP_REDUNDANT); preferences_update_conf_from_widget (dialog->check_skip_not_for_firewall, PREFS_SKIP_NOT_FOR_FIREWALL); /* Policy */ preferences_update_conf_from_widget (dialog->check_apply_policy_instantly, PREFS_APPLY_POLICY_INSTANTLY); /* Firewall *//* preferences_update_conf_from_widget (dialog->check_start_on_boot, PREFS_START_ON_BOOT); */ preferences_update_conf_from_widget (dialog->check_start_on_gui, PREFS_START_ON_GUI); preferences_update_conf_from_widget (dialog->check_start_on_dial_out, PREFS_START_ON_DIAL_OUT); preferences_update_conf_from_widget (dialog->check_start_on_dhcp, PREFS_START_ON_DHCP); /* Network settings */ preferences_set_string (PREFS_FW_EXT_IF, combo_get_active_device (GTK_COMBO_BOX (dialog->combo_ext_device))); preferences_set_string (PREFS_FW_INT_IF, combo_get_active_device (GTK_COMBO_BOX (dialog->combo_int_device))); preferences_update_conf_from_widget (dialog->check_enable_connection_sharing, PREFS_FW_NAT); preferences_update_conf_from_widget (dialog->check_enable_dhcp, PREFS_FW_DHCP_ENABLE); preferences_update_conf_from_widget (dialog->entry_dhcp_lowest_ip, PREFS_FW_DHCP_LOWEST_IP); preferences_update_conf_from_widget (dialog->entry_dhcp_highest_ip, PREFS_FW_DHCP_HIGHEST_IP); preferences_update_conf_from_widget (dialog->entry_dhcp_name_server, PREFS_FW_DHCP_NAMESERVER); /* ICMP */ preferences_update_conf_from_widget (dialog->check_enable_icmp, PREFS_FW_FILTER_ICMP); preferences_update_conf_from_widget (dialog->check_icmp_echo_request, PREFS_FW_ICMP_ECHO_REQUEST); preferences_update_conf_from_widget (dialog->check_icmp_echo_reply, PREFS_FW_ICMP_ECHO_REPLY); preferences_update_conf_from_widget (dialog->check_icmp_traceroute, PREFS_FW_ICMP_TRACEROUTE); preferences_update_conf_from_widget (dialog->check_icmp_mstraceroute, PREFS_FW_ICMP_MSTRACEROUTE); preferences_update_conf_from_widget (dialog->check_icmp_unreachable, PREFS_FW_ICMP_UNREACHABLE); preferences_update_conf_from_widget (dialog->check_icmp_timestamping, PREFS_FW_ICMP_TIMESTAMPING); preferences_update_conf_from_widget (dialog->check_icmp_address_masking, PREFS_FW_ICMP_MASKING); preferences_update_conf_from_widget (dialog->check_icmp_redirection, PREFS_FW_ICMP_REDIRECTION); preferences_update_conf_from_widget (dialog->check_icmp_source_quenching, PREFS_FW_ICMP_SOURCE_QUENCHES); /* ToS */ preferences_update_conf_from_widget (dialog->check_enable_tos, PREFS_FW_FILTER_TOS); preferences_update_conf_from_widget (dialog->check_prioritize_workstations, PREFS_FW_TOS_CLIENT); preferences_update_conf_from_widget (dialog->check_prioritize_servers, PREFS_FW_TOS_SERVER); preferences_update_conf_from_widget (dialog->check_prioritize_x, PREFS_FW_TOS_X); preferences_update_conf_from_widget (dialog->radio_max_throughput, PREFS_FW_TOS_OPT_TROUGHPUT); preferences_update_conf_from_widget (dialog->radio_max_reliability, PREFS_FW_TOS_OPT_RELIABILITY); preferences_update_conf_from_widget (dialog->radio_max_interactivity, PREFS_FW_TOS_OPT_DELAY); gtk_widget_set_sensitive (dialog->frame_tos_services, preferences_get_bool (PREFS_FW_FILTER_TOS)); gtk_widget_set_sensitive (dialog->frame_tos_maximize, preferences_get_bool (PREFS_FW_FILTER_TOS)); /* Advanced */ preferences_update_conf_from_widget (dialog->radio_deny_packets, PREFS_FW_DENY_PACKETS); preferences_update_conf_from_widget (dialog->check_block_external_broadcast, PREFS_FW_BLOCK_EXTERNAL_BROADCAST); preferences_update_conf_from_widget (dialog->check_block_internal_broadcast, PREFS_FW_BLOCK_INTERNAL_BROADCAST); preferences_update_conf_from_widget (dialog->check_block_non_routables, PREFS_FW_BLOCK_NON_ROUTABLES); scriptwriter_output_configuration (); /* Write DHCP configuration */ if (preferences_get_bool (PREFS_FW_NAT) && preferences_get_bool (PREFS_FW_DHCP_ENABLE) && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radio_dhcp_create_conf))) dhcp_server_create_configuration (); /* Start firewall on ppp interface up */ if (preferences_get_bool (PREFS_START_ON_DIAL_OUT)) scriptwriter_write_ppp_hook (); else scriptwriter_remove_ppp_hook (); /* Start firewall on DCHP lease renewal */ if (preferences_get_bool (PREFS_START_ON_DHCP)) scriptwriter_write_dhcp_hook (); else scriptwriter_remove_dhcp_hook (); restart_firewall_if_active (); poicyview_update_nat_widgets (); if (preferences_get_bool (PREFS_ENABLE_TRAY_ICON)) { if (!tray_is_running ()) tray_init (); } else { if (tray_is_running ()) tray_remove (); }}static voidpreferences_response_cb (GtkDialog *main_dialog, gint response, PreferencesDialog *dialog){ if (response == GTK_RESPONSE_ACCEPT) { if (validate_dhcp_settings (dialog)) { save_preferences (dialog); gtk_widget_destroy (GTK_WIDGET (main_dialog)); } } else if (response == GTK_RESPONSE_HELP) { preferences_show_help (); } else gtk_widget_destroy (GTK_WIDGET (main_dialog));}static voidlog_handler_cb (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data){ return;}static PreferencesDialog *get_preferences_dialog (GtkWindow *parent){ static PreferencesDialog *dialog = NULL; GladeXML *gui; GtkTreeModel *model; GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkWidget *sections; if (dialog != NULL) { gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog_main), parent); gtk_window_present (GTK_WINDOW (dialog->dialog_main)); return dialog; } /* Suppress libglade warnings */ g_log_set_handler ("libglade", G_LOG_LEVEL_WARNING, log_handler_cb, NULL); /* Try to load the interface from the current directory first */ gui = glade_xml_new ("preferences.glade", NULL, NULL); if (gui == NULL) { /* If that fails, load the shared interface file */ gui = glade_xml_new (GLADEDIR"/preferences.glade", NULL, NULL); } if (gui == NULL) { error_dialog (_("Missing file"), _("Firestarter interface file not found"), _("The interface markup file preferences.glade could not be found."), Firestarter.window); return NULL; } dialog = g_new0 (PreferencesDialog, 1); dialog->dialog_main = glade_xml_get_widget (gui, "preferences_dialog"); g_signal_connect (G_OBJECT (dialog->dialog_main), "destroy", G_CALLBACK (dialog_destroyed), &dialog); g_signal_connect (G_OBJECT (dialog->dialog_main), "response", G_CALLBACK (preferences_response_cb), dialog); /* Set up the contents index */ sections = glade_xml_get_widget (gui, "sections"); model = create_sections_model (); gtk_tree_view_set_model (GTK_TREE_VIEW (sections), model); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("", renderer, "text", 1, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (sections), column); gtk_tree_view_expand_all (GTK_TREE_VIEW (sections)); g_signal_connect (G_OBJECT (sections), "cursor-changed", G_CALLBACK (change_section_cb), dialog); /* Set up the notebook */ dialog->notebook = glade_xml_get_widget (gui, "notebook"); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (dialog->notebook), FALSE); /* Set up the interface section */ dialog->check_enable_tray_icon = glade_xml_get_widget (gui, "check_enable_tray_icon"); dialog->check_minimize_to_tray = glade_xml_get_widget (gui, "check_minimize_to_tray"); setup_interface_section (dialog); /* Set up the events section */ dialog->check_skip_redundant = glade_xml_get_widget (gui, "check_skip_redundant"); dialog->check_skip_not_for_firewall = glade_xml_get_widget (gui, "check_skip_not_for_firewall"); dialog->window_host_filter = glade_xml_get_widget (gui, "window_host_filter"); dialog->window_port_filter = glade_xml_get_widget (gui, "window_port_filter"); dialog->button_add_host = glade_xml_get_widget (gui, "button_add_host"); dialog->button_add_port = glade_xml_get_widget (gui, "button_add_port"); dialog->button_remove_host = glade_xml_get_widget (gui, "button_remove_host"); dialog->button_remove_port = glade_xml_get_widget (gui, "button_remove_port"); dialog->dialog_host_filter = glade_xml_get_widget (gui, "dialog_host_filter"); dialog->dialog_port_filter = glade_xml_get_widget (gui, "dialog_port_filter"); dialog->entry_host = glade_xml_get_widget (gui, "entry_host"); dialog->entry_port = glade_xml_get_widget (gui, "entry_port"); setup_events_section (dialog); /* Set up the policy section */ dialog->check_apply_policy_instantly = glade_xml_get_widget (gui, "check_apply_policy_instantly"); /* Set up the firewall section *//* dialog->check_start_on_boot = glade_xml_get_widget (gui, "check_start_on_boot"); */ dialog->check_start_on_gui = glade_xml_get_widget (gui, "check_start_on_gui"); dialog->check_start_on_dial_out = glade_xml_get_widget (gui, "check_start_on_dial_out"); dialog->check_start_on_dhcp = glade_xml_get_widget (gui, "check_start_on_dhcp"); /* Set up the network settings section */ dialog->combo_ext_device = glade_xml_get_widget (gui, "combo_ext_device"); dialog->box_local_network_settings = glade_xml_get_widget (gui, "box_local_network_settings"); dialog->combo_int_device = glade_xml_get_widget (gui, "combo_int_device"); dialog->check_enable_connection_sharing = glade_xml_get_widget (gui, "check_enable_connection_sharing"); dialog->check_enable_dhcp = glade_xml_get_widget (gui, "check_enable_dhcp"); dialog->expander_dhcp = glade_xml_get_widget (gui, "expander_dhcp"); dialog->radio_dhcp_create_conf = glade_xml_get_widget (gui, "radio_dhcp_create_conf"); dialog->table_dhcp_settings = glade_xml_get_widget (gui, "table_dhcp_settings"); dialog->entry_dhcp_lowest_ip = glade_xml_get_widget (gui, "entry_dhcp_lowest_ip"); dialog->entry_dhcp_highest_ip = glade_xml_get_widget (gui, "entry_dhcp_highest_ip"); dialog->entry_dhcp_name_server = glade_xml_get_widget (gui, "entry_dhcp_name_server"); setup_network_settings_section (dialog); /* Set up ICMP section */ dialog->check_enable_icmp = glade_xml_get_widget (gui, "check_enable_icmp"); dialog->frame_icmp_types = glade_xml_get_widget (gui, "frame_icmp_types"); dialog->check_icmp_echo_request = glade_xml_get_widget (gui, "check_icmp_echo_request"); dialog->check_icmp_echo_reply = glade_xml_get_widget (gui, "check_icmp_echo_reply"); dialog->check_icmp_traceroute = glade_xml_get_widget (gui, "check_icmp_traceroute"); dialog->check_icmp_mstraceroute = glade_xml_get_widget (gui, "check_icmp_mstraceroute"); dialog->check_icmp_unreachable = glade_xml_get_widget (gui, "check_icmp_unreachable"); dialog->check_icmp_timestamping = glade_xml_get_widget (gui, "check_icmp_timestamping"); dialog->check_icmp_address_masking = glade_xml_get_widget (gui, "check_icmp_address_masking"); dialog->check_icmp_redirection = glade_xml_get_widget (gui, "check_icmp_redirection"); dialog->check_icmp_source_quenching = glade_xml_get_widget (gui, "check_icmp_source_quenching"); setup_icmp_section (dialog); /* Set up the ToS section */ dialog->check_enable_tos = glade_xml_get_widget (gui, "check_enable_tos"); dialog->frame_tos_services = glade_xml_get_widget (gui, "frame_tos_services"); dialog->check_prioritize_workstations = glade_xml_get_widget (gui, "check_prioritize_workstations"); dialog->check_prioritize_servers = glade_xml_get_widget (gui, "check_prioritize_servers"); dialog->check_prioritize_x = glade_xml_get_widget (gui, "check_prioritize_x"); dialog->frame_tos_maximize = glade_xml_get_widget (gui, "frame_tos_maximize"); dialog->radio_max_throughput = glade_xml_get_widget (gui, "radio_max_throughput"); dialog->radio_max_reliability = glade_xml_get_widget (gui, "radio_max_reliability"); dialog->radio_max_interactivity = glade_xml_get_widget (gui, "radio_max_interactivity"); setup_tos_section (dialog); /* Set up the advanced section */ dialog->radio_deny_packets = glade_xml_get_widget (gui, "radio_drop_packets"); dialog->check_block_external_broadcast = glade_xml_get_widget (gui, "check_block_external_broadcast"); dialog->check_block_internal_broadcast = glade_xml_get_widget (gui, "check_block_internal_broadcast"); dialog->check_block_non_routables = glade_xml_get_widget (gui, "check_block_non_routables"); select_first_section (GTK_TREE_VIEW (sections)); /* Set the default page */ gtk_notebook_set_page (GTK_NOTEBOOK (dialog->notebook), 0); g_object_unref (gui); return dialog;}/* [ preferences_run ] * Display the preferences GUI */voidpreferences_show (void){ PreferencesDialog *dialog; dialog = get_preferences_dialog (GTK_WINDOW (Firestarter.window)); if (!dialog) return; load_preferences (dialog); if (!GTK_WIDGET_VISIBLE (dialog->dialog_main)) gtk_widget_show (dialog->dialog_main);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -