5 * Giorgio Tino <giorgio.tino@cacetech.com>
6 * Copyright (c) CACE Technologies, LLC 2006
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 2000 Gerald Combs
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
36 #include <glib/gprintf.h>
40 #include <epan/filesystem.h>
41 #include <epan/prefs.h>
42 #include <epan/prefs-int.h>
43 #include <epan/crypt/wep-wpadefs.h>
48 #include "dlg_utils.h"
49 #include "gui_utils.h"
50 #include "simple_dialog.h"
51 #include "dfilter_expr_dlg.h"
52 #include "compat_macros.h"
53 #include "gtkglobals.h"
58 #include "airpcap_loader.h"
59 #include "airpcap_gui_utils.h"
60 #include "airpcap_dlg.h"
64 /* temporary block signals to widgets */
65 BOOL block_advanced_signals;
68 * This function is used to write the preferences to the preferences file.
69 * It has the same behaviour as prefs_main_write() in prefs_dlg.c
72 write_prefs_to_file(void)
78 /* Create the directory that holds personal configuration files, if
80 if (create_persconffile_dir(&pf_dir_path) == -1) {
81 simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
82 "Can't create directory\n\"%s\"\nfor preferences file: %s.", pf_dir_path,
86 /* Write the preferencs out. */
87 err = write_prefs(&pf_path);
89 simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
90 "Can't open preferences file\n\"%s\": %s.", pf_path,
98 * This struct will contain useful data for the selected (actual) airpcap device
101 airpcap_fill_if_combo(GtkWidget *combo, GList* if_list)
104 GList* popdown_if_list = NULL;
106 airpcap_if_info_t* if_info = NULL;
108 curr = g_list_nth(if_list, ifn);
110 if (curr != NULL) if_info = curr->data;
112 popdown_if_list = NULL;
113 ifn = g_list_length(if_list) - 1;
114 while (ifn >= 0) /* reverse order */
116 curr = g_list_nth(if_list, ifn);
119 if_info = curr->data;
121 popdown_if_list = g_list_append( popdown_if_list , if_info->description) ;
124 gtk_combo_set_popdown_strings( GTK_COMBO(combo), popdown_if_list) ;
126 if (airpcap_if_selected != NULL)
128 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), airpcap_if_selected->description);
132 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), "No Wireless Interfaces Found");
137 * Callback for the select row event in the key list widget
140 on_key_ls_select_row(GtkWidget *widget,
143 GdkEventButton *event,
146 airpcap_key_ls_selected_info_t* selected_item;
148 selected_item = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
150 selected_item->row = row;
151 selected_item->column = column;
155 * Callback for the unselect row event in the key list widget
158 on_key_ls_unselect_row(GtkWidget *widget,
161 GdkEventButton *event,
164 airpcap_key_ls_selected_info_t* selected_item;
166 selected_item = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
168 selected_item->row = NO_ROW_SELECTED;
169 selected_item->column = NO_COLUMN_SELECTED;
173 * Callback for the click column event in the key list widget
176 on_key_ls_click_column(GtkWidget *widget,
183 * Callback for the crc chackbox
186 on_fcs_ck_toggled(GtkWidget *w, gpointer user_data)
189 if ( !block_advanced_signals && (airpcap_if_selected != NULL))
191 if (airpcap_if_selected->IsFcsPresent)
193 airpcap_if_selected->IsFcsPresent = FALSE;
194 airpcap_if_selected->saved = FALSE;
198 airpcap_if_selected->IsFcsPresent = TRUE;
199 airpcap_if_selected->saved = FALSE;
205 * Callback for the wrong crc combo
208 on_edit_type_en_changed(GtkWidget *w, gpointer data)
210 GtkWidget *edit_key_w;
211 GtkWidget *edit_ssid_te;
216 gchar* type_text = NULL;
218 edit_key_w = GTK_WIDGET(data);
221 edit_ssid_te = OBJECT_GET_DATA(edit_key_w,AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY);
222 key_lb = OBJECT_GET_DATA(edit_key_w,AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY);
223 ssid_lb = OBJECT_GET_DATA(edit_key_w,AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY);
225 type_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(type_te)));
227 if (string_is_not_empty(type_text))
230 * If it is a WEP key, no SSID is required! Gray out rhe entry text so
231 * it doesn't create confusion ...
233 if (g_strcasecmp(type_text,AIRPCAP_WEP_KEY_STRING) == 0)
235 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
237 * Maybe the user has already entered some text into the SSID field
238 * and then switched to WEP...
240 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),"");
241 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
242 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
244 else if (g_strcasecmp(type_text,AIRPCAP_WPA_BIN_KEY_STRING) == 0)
246 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
248 * Maybe the user has already entered some text into the SSID field
249 * and then switched to WEP...
251 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),"");
252 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
253 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
255 else if (g_strcasecmp(type_text,AIRPCAP_WPA_PWD_KEY_STRING) == 0)
257 gtk_widget_set_sensitive(edit_ssid_te,TRUE);
259 * Maybe the user has already entered some text into the SSID field
260 * and then switched to WEP...
262 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),"");
263 gtk_label_set_text(GTK_LABEL(key_lb),"Passphrase");
264 gtk_label_set_text(GTK_LABEL(ssid_lb),"SSID");
267 gtk_widget_show(edit_ssid_te);
273 * Callback for the wrong crc combo
276 on_add_type_en_changed(GtkWidget *w, gpointer data)
278 GtkWidget *add_key_w;
279 GtkWidget *add_ssid_te;
284 gchar* type_text = NULL;
286 add_key_w = GTK_WIDGET(data);
289 add_ssid_te = OBJECT_GET_DATA(add_key_w,AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY);
290 key_lb = OBJECT_GET_DATA(add_key_w,AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY);
291 ssid_lb = OBJECT_GET_DATA(add_key_w,AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY);
293 type_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(type_te)));
295 if (string_is_not_empty(type_text))
298 * If it is a WEP key, no SSID is required! Gray out rhe entry text so
299 * it doesn't create confusion ...
301 if (g_strcasecmp(type_text,AIRPCAP_WEP_KEY_STRING) == 0)
303 gtk_widget_set_sensitive(add_ssid_te,FALSE);
305 * Maybe the user has already entered some text into the SSID field
306 * and then switched to WEP...
308 gtk_entry_set_text(GTK_ENTRY(add_ssid_te),"");
309 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
310 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
312 else if (g_strcasecmp(type_text,AIRPCAP_WPA_BIN_KEY_STRING) == 0)
314 gtk_widget_set_sensitive(add_ssid_te,FALSE);
316 * Maybe the user has already entered some text into the SSID field
317 * and then switched to WEP...
319 gtk_entry_set_text(GTK_ENTRY(add_ssid_te),"");
320 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
321 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
323 else if (g_strcasecmp(type_text,AIRPCAP_WPA_PWD_KEY_STRING) == 0)
325 gtk_widget_set_sensitive(add_ssid_te,TRUE);
327 * Maybe the user has already entered some text into the SSID field
328 * and then switched to WEP...
330 gtk_entry_set_text(GTK_ENTRY(add_ssid_te),"");
331 gtk_label_set_text(GTK_LABEL(key_lb),"Passphrase");
332 gtk_label_set_text(GTK_LABEL(ssid_lb),"SSID");
335 gtk_widget_show(add_ssid_te);
341 * Returns FALSE if a text string has lenght 0, i.e. the first char
342 * is '\0', TRUE otherwise
345 string_is_not_empty(gchar *s)
347 if (g_strcasecmp(s,"") != 0)
354 * Callback for the wrong crc combo
357 on_fcs_filter_en_changed(GtkWidget *w, gpointer data)
361 s = gtk_entry_get_text(GTK_ENTRY(w));
363 if ( !block_advanced_signals && (data != NULL) && (w != NULL) )
365 if ((g_strcasecmp("",s)))
367 airpcap_if_selected->CrcValidationOn = airpcap_get_validation_type(s);
368 airpcap_if_selected->saved = FALSE;
374 * Changed callback for the channel combobox
377 on_channel_en_changed(GtkWidget *w _U_, gpointer data)
382 if ( !block_advanced_signals && (data != NULL) && (w != NULL) )
384 s = gtk_entry_get_text(GTK_ENTRY(w));
385 if ((g_strcasecmp("",s)))
387 if (airpcap_if_selected != NULL)
389 ch_freq = airpcap_get_frequency_from_str(s);
390 airpcap_if_active->channelInfo.Frequency = ch_freq;
391 airpcap_if_selected->saved = FALSE;
392 airpcap_update_channel_offset_cb(airpcap_if_selected, ch_freq, GTK_WIDGET(data));
399 * Changed callback for the channel offset combobox
402 on_channel_offset_cb_changed(GtkWidget *w _U_, gpointer data)
407 if ( !block_advanced_signals && (data != NULL) && (w != NULL) )
409 s = gtk_entry_get_text(GTK_ENTRY(w));
410 if ((g_strcasecmp("",s)))
412 if (airpcap_if_selected != NULL)
414 sscanf(s,"%d",&offset);
415 airpcap_if_selected->channelInfo.ExtChannel = offset;
416 airpcap_if_selected->saved = FALSE;
423 * Changed callback for the capture type combobox
426 on_capture_type_en_changed(GtkWidget *w _U_, gpointer data)
430 s = gtk_entry_get_text(GTK_ENTRY(w));
432 if ( !block_advanced_signals && (data != NULL) && (w != NULL) )
434 if ((g_strcasecmp("",s)))
436 airpcap_if_selected->linkType = airpcap_get_link_type(s);
437 airpcap_if_selected->saved = FALSE;
443 * Activate callback for the adapter combobox
446 combo_if_activate_cb(GtkWidget *entry _U_, gpointer data)
451 * Thread function used to blink the led
453 void update_blink(gpointer data _U_)
455 airpcap_if_info_t* sel;
457 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
459 sel = (airpcap_if_info_t*)data;
461 ad = airpcap_if_open(sel->name, ebuf);
466 airpcap_if_turn_led_off(ad, 0);
471 airpcap_if_turn_led_on(ad, 0);
474 airpcap_if_close(ad);
479 * Blink button callback
482 on_blink_bt_clicked( GtkWidget *blink_bt _U_, gpointer if_data )
484 PAirpcapHandle ad = NULL;
485 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
487 if (airpcap_if_selected != NULL)
488 if (!(airpcap_if_selected->blinking))
490 #if GTK_MAJOR_VERSION >= 2
491 gtk_button_set_label(GTK_BUTTON(blink_bt),"Stop Blinking");
493 gtk_label_set_text(GTK_LABEL(GTK_BIN(blink_bt)->child),"Stop Blinking");
495 airpcap_if_selected->tag = gtk_timeout_add(500, (GtkFunction)update_blink,airpcap_if_selected);
496 airpcap_if_selected->blinking = TRUE;
500 #if GTK_MAJOR_VERSION >= 2
501 gtk_button_set_label(GTK_BUTTON(blink_bt)," Blink Led ");
503 gtk_label_set_text(GTK_LABEL(GTK_BIN(blink_bt)->child)," Blink Led ");
505 gtk_timeout_remove(airpcap_if_selected->tag);
506 airpcap_if_selected->blinking = FALSE;
507 /* Switch on the led! */
508 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
511 gtk_timeout_remove(airpcap_if_selected->tag);
512 airpcap_if_turn_led_on(ad, 0);
513 airpcap_if_selected->blinking = FALSE;
514 airpcap_if_selected->led = TRUE;
515 airpcap_if_close(ad);
521 * Callback for the 'Any' adapter What's This button.
524 on_what_s_this_bt_clicked( GtkWidget *blink_bt _U_, gpointer if_data )
526 simple_dialog(ESD_TYPE_INFO,ESD_BTN_OK,
527 "The Multi-Channel Aggregator is a virtual device "
528 "that can be used to capture packets from all the "
529 "AirPcap adapters at the same time.\n"
530 "The Capture Type, FCS and Encryption settings of "
531 "this virtual device can be configured as for any "
532 "real adapter.\nThe channel cannot be changed for "
534 "Refer to the AirPcap manual for more information.");
537 /* the window was closed, cleanup things */
539 on_key_management_destroy(GtkWidget *w _U_, gpointer data _U_)
541 GtkWidget *airpcap_advanced_w,
544 gint *from_widget = NULL;
546 /* Retrieve the GUI object pointers */
547 airpcap_advanced_w = GTK_WIDGET(data);
549 toolbar = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_TOOLBAR_KEY));
552 from_widget = (gint*)OBJECT_GET_DATA(toolbar,AIRPCAP_ADVANCED_FROM_KEY);
553 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
554 if ( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR)
555 gtk_widget_set_sensitive(toolbar,TRUE);
557 gtk_widget_set_sensitive(toolbar,FALSE);
561 /* reload the configuration!!! Configuration has not been saved but
562 the corresponding structure has been modified probably...*/
563 if (airpcap_if_selected != NULL)
565 if (!airpcap_if_selected->saved)
567 airpcap_load_selected_if_configuration(airpcap_if_selected);
573 /* the Advenced wireless Settings window was closed, cleanup things */
575 on_airpcap_advanced_destroy(GtkWidget *w _U_, gpointer data _U_)
577 GtkWidget *airpcap_advanced_w,
580 gint *from_widget = NULL;
582 /* Retrieve the GUI object pointers */
583 airpcap_advanced_w = GTK_WIDGET(data);
585 toolbar = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_TOOLBAR_KEY));
588 from_widget = (gint*)OBJECT_GET_DATA(toolbar,AIRPCAP_ADVANCED_FROM_KEY);
589 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
590 if ( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR)
591 gtk_widget_set_sensitive(toolbar,TRUE);
593 gtk_widget_set_sensitive(toolbar,FALSE);
597 /* reload the configuration!!! Configuration has not been saved but
598 the corresponding structure has been modified probably...*/
599 if (!airpcap_if_selected->saved)
601 airpcap_load_selected_if_configuration(airpcap_if_selected);
606 * Callback for the 'Apply' button.
609 on_key_management_apply_bt_clicked(GtkWidget *button, gpointer data _U_)
611 /* advenced window */
612 GtkWidget *key_management_w;
614 /* widgets in the toolbar */
616 GtkWidget *toolbar_cm;
620 GtkWidget *decryption_en;
622 char* decryption_mode_string = NULL;
624 /* retrieve main window */
625 key_management_w = GTK_WIDGET(data);
626 decryption_en = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_WEP_DECRYPTION_KEY));
627 key_ls = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY));
628 toolbar = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_TOOLBAR_KEY));
629 toolbar_cm = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_TOOLBAR_DECRYPTION_KEY));
631 #define CANT_SAVE_ERR_STR "Cannot save configuration!\n" \
632 "In order to store the configuration in the registry you must:\n\n" \
633 "- Close all the airpcap-based applications.\n"\
634 "- Have administrative privileges."
635 /* Set the Decryption Mode */
636 if (g_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK) == 0)
638 set_wireshark_decryption(TRUE);
639 if (!set_airpcap_decryption(FALSE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
641 else if (g_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
643 set_wireshark_decryption(FALSE);
644 if (!set_airpcap_decryption(TRUE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
646 else if (g_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_NONE) == 0)
648 set_wireshark_decryption(FALSE);
649 if (!set_airpcap_decryption(FALSE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
652 /* Save the configuration */
653 airpcap_read_and_save_decryption_keys_from_clist(key_ls,airpcap_if_selected,airpcap_if_list); /* This will save the keys for every adapter */
655 /* The update will make redissect al the packets... no need to do it here again */
656 update_decryption_mode_cm(toolbar_cm);
658 /* Redissect all the packets, and re-evaluate the display filter. */
659 /** cf_redissect_packets(&cfile); **/
662 * Callback for the Wireless Advanced Settings 'Apply' button.
665 on_advanced_apply_bt_clicked(GtkWidget *button, gpointer data _U_)
667 /* advenced window */
670 /* widgets in the toolbar */
674 *toolbar_channel_offset_cb,
675 *toolbar_wrong_crc_cm;
677 /* retrieve main window */
678 main_w = GTK_WIDGET(data);
680 toolbar = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_TOOLBAR_KEY));
682 /* retrieve toolbar info */
683 toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY));
684 toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY));
685 toolbar_channel_offset_cb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY));
686 toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
688 /* Save the configuration (for all ) */
689 airpcap_save_selected_if_configuration(airpcap_if_selected);
691 /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/
692 if ( g_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0)
694 gtk_label_set_text(GTK_LABEL(toolbar_if_lb), g_strdup_printf("%s %s\t","Current Wireless Interface: #",airpcap_get_if_string_number(airpcap_if_selected)));
695 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
696 airpcap_update_channel_offset_combo_entry(GTK_WIDGET(toolbar_channel_offset_cb),airpcap_if_selected->channelInfo.ExtChannel);
697 airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
702 * Callback for the 'OK' button.
705 airpcap_advanced_ok_cb(GtkWidget *w, gpointer data _U_)
707 /* advenced window */
710 /* widgets in the toolbar */
714 *toolbar_wrong_crc_cm,
715 *toolbar_decryption_ck;
719 /* retrieve main window */
720 main_w = GTK_WIDGET(data);
722 toolbar = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_TOOLBAR_KEY));
724 key_ls = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_KEYLIST_KEY));
726 /* retrieve toolbar info */
727 toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY));
728 toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY));
729 toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
730 toolbar_decryption_ck = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_DECRYPTION_KEY));
732 /* Save the configuration */
733 airpcap_add_keys_from_list(key_ls,airpcap_if_selected);
734 airpcap_save_selected_if_configuration(airpcap_if_selected);
735 /* Remove gtk timeout */
736 gtk_timeout_remove(airpcap_if_selected->tag);
738 /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/
739 if ( g_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0)
741 gtk_label_set_text(GTK_LABEL(toolbar_if_lb), g_strdup_printf("%s %s\t","Current Wireless Interface: #",airpcap_get_if_string_number(airpcap_if_selected)));
742 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
743 airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
745 gtk_signal_handler_block_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar);
746 if (airpcap_if_active->DecryptionOn == AIRPCAP_DECRYPTION_ON)
747 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),TRUE);
749 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),FALSE);
750 gtk_signal_handler_unblock_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar);
755 * Callback for the 'Reset Configuration' button.
758 on_reset_configuration_bt_clicked(GtkWidget *button, gpointer data _U_)
764 * Callback used to add a WEP key in the add new key box;
767 on_add_key_ok_bt_clicked(GtkWidget *widget, gpointer data _U_)
775 GString *new_type_string,
779 gchar *type_entered = NULL;
780 gchar *key_entered = NULL;
781 gchar *ssid_entered = NULL;
783 airpcap_key_ls_selected_info_t *selected_item;
785 int keys_in_list = 0;
789 gint r = NO_ROW_SELECTED;
790 gint c = NO_COLUMN_SELECTED;
792 key_ls = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY);
793 selected_item = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
794 type_cm = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY);
795 key_en = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY);
796 ssid_en = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY);
798 r = selected_item->row;
799 c = selected_item->column;
801 keys_in_list = GTK_CLIST(key_ls)->rows;
803 type_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(type_cm)->entry)));
804 key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
805 ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
807 /* Check if key is correct */
808 new_type_string = g_string_new(type_entered);
809 new_key_string = g_string_new(key_entered);
810 new_ssid_string = g_string_new(ssid_entered);
812 g_strchug(new_key_string->str);
813 g_strchomp(new_key_string->str);
815 g_strchug(new_ssid_string->str);
816 g_strchomp(new_ssid_string->str);
818 /* Check which type of key the user has entered */
819 if (g_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
822 if ( ((new_key_string->len) > WEP_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WEP_KEY_MIN_CHAR_SIZE))
824 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"WEP key size out of range!\nValid key size range is %d-%d characters (%d-%d bits).",WEP_KEY_MIN_CHAR_SIZE,WEP_KEY_MAX_CHAR_SIZE,WEP_KEY_MIN_BIT_SIZE,WEP_KEY_MAX_BIT_SIZE);
826 g_string_free(new_type_string,TRUE);
827 g_string_free(new_key_string, TRUE);
828 g_string_free(new_ssid_string,TRUE);
830 g_free(type_entered);
831 g_free(key_entered );
832 g_free(ssid_entered);
836 if ((new_key_string->len % 2) != 0)
838 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nThe number of characters must be even.");
840 g_string_free(new_type_string,TRUE);
841 g_string_free(new_key_string, TRUE);
842 g_string_free(new_ssid_string,TRUE);
844 g_free(type_entered);
845 g_free(key_entered );
846 g_free(ssid_entered);
850 for (i = 0; i < new_key_string->len; i++)
852 if (!g_ascii_isxdigit(new_key_string->str[i]))
854 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nA WEP key must be a hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
856 g_string_free(new_type_string,TRUE);
857 g_string_free(new_key_string, TRUE);
858 g_string_free(new_ssid_string,TRUE);
860 g_free(type_entered);
861 g_free(key_entered );
862 g_free(ssid_entered);
867 /* If so... add key */
868 airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
870 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
872 else if (g_strcasecmp(new_type_string->str,AIRPCAP_WPA_PWD_KEY_STRING) == 0) /* WPA Key */
874 /* XXX - Perform some WPA related input fields check */
875 /* If everything is ok, modify the entry int he list */
877 if ( ((new_key_string->len) > WPA_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WPA_KEY_MIN_CHAR_SIZE))
879 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"WPA key size out of range!\nValid key size range is %d-%d ASCII characters (%d-%d bits).",WPA_KEY_MIN_CHAR_SIZE,WPA_KEY_MAX_CHAR_SIZE,WPA_KEY_MIN_BIT_SIZE,WPA_KEY_MAX_BIT_SIZE);
881 g_string_free(new_type_string,TRUE);
882 g_string_free(new_key_string, TRUE);
883 g_string_free(new_ssid_string,TRUE);
885 g_free(type_entered);
886 g_free(key_entered );
887 g_free(ssid_entered);
892 * XXX - Maybe we need some check on the characters? I'm not sure if only stabdard ASCII are ok...
894 if ( ((new_ssid_string->len) > WPA_SSID_MAX_CHAR_SIZE) || ((new_ssid_string->len) < WPA_SSID_MIN_CHAR_SIZE))
896 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"SSID key size out of range!\nValid SSID size range is %d-%d ASCII characters (%d-%d bits).",WPA_SSID_MIN_CHAR_SIZE,WPA_SSID_MAX_CHAR_SIZE,WPA_SSID_MIN_BIT_SIZE,WPA_SSID_MAX_BIT_SIZE);
898 g_string_free(new_type_string,TRUE);
899 g_string_free(new_key_string, TRUE);
900 g_string_free(new_ssid_string,TRUE);
902 g_free(type_entered);
903 g_free(key_entered );
904 g_free(ssid_entered);
908 /* If so... add key */
909 airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
911 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
913 else if (g_strcasecmp(new_type_string->str,AIRPCAP_WPA_BIN_KEY_STRING) == 0) /* WPA_BIN Key */
915 /* XXX - Perform some WPA_BIN related input fields check */
916 /* If everything is ok, modify the entry int he list */
918 if ( ((new_key_string->len) != WPA_PSK_KEY_CHAR_SIZE))
920 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"WPA PSK/PMK key size is wrong!\nValid key size is %d characters (%d bits).",WPA_PSK_KEY_CHAR_SIZE,WPA_PSK_KEY_BIT_SIZE);
922 g_string_free(new_type_string,TRUE);
923 g_string_free(new_key_string, TRUE);
924 g_string_free(new_ssid_string,TRUE);
926 g_free(type_entered);
927 g_free(key_entered );
928 g_free(ssid_entered);
932 for (i = 0; i < new_key_string->len; i++)
934 if (!g_ascii_isxdigit(new_key_string->str[i]))
936 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
938 g_string_free(new_type_string,TRUE);
939 g_string_free(new_key_string, TRUE);
940 g_string_free(new_ssid_string,TRUE);
942 g_free(type_entered);
943 g_free(key_entered );
944 g_free(ssid_entered);
949 /* If so... add key */
950 airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
952 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
954 else /* Should never happen!!! */
956 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Unknown error in the key \"Type\" field!");
959 g_string_free(new_type_string,TRUE);
960 g_string_free(new_key_string, TRUE);
961 g_string_free(new_ssid_string,TRUE);
963 g_free(type_entered);
964 g_free(key_entered );
965 g_free(ssid_entered);
967 window_destroy(GTK_WIDGET(data));
972 * Callback used to edit a WEP key in the edit key box;
975 on_edit_key_ok_bt_clicked(GtkWidget *widget, gpointer data _U_)
983 GString *new_type_string,
987 gchar *type_entered = NULL;
988 gchar *key_entered = NULL;
989 gchar *ssid_entered = NULL;
991 airpcap_key_ls_selected_info_t *selected_item;
993 int keys_in_list = 0;
997 gint r = NO_ROW_SELECTED;
998 gint c = NO_COLUMN_SELECTED;
1000 key_ls = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY);
1001 selected_item = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_SELECTED_KEY);
1002 type_cm = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY);
1003 key_en = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY);
1004 ssid_en = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY);
1006 r = selected_item->row;
1007 c = selected_item->column;
1009 keys_in_list = GTK_CLIST(key_ls)->rows;
1011 type_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(type_cm)->entry)));
1012 key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
1013 ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
1015 /* Check if key is correct */
1016 new_type_string = g_string_new(type_entered);
1017 new_key_string = g_string_new(key_entered);
1018 new_ssid_string = g_string_new(ssid_entered);
1020 g_strchug(new_key_string->str);
1021 g_strchomp(new_key_string->str);
1023 g_strchug(new_ssid_string->str);
1024 g_strchomp(new_ssid_string->str);
1026 /* Check which type of key the user has entered */
1027 if (g_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
1030 if ( ((new_key_string->len) > WEP_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WEP_KEY_MIN_CHAR_SIZE))
1032 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"WEP key size out of range!\nValid key size range is %d-%d characters (%d-%d bits).",WEP_KEY_MIN_CHAR_SIZE,WEP_KEY_MAX_CHAR_SIZE,WEP_KEY_MIN_BIT_SIZE,WEP_KEY_MAX_BIT_SIZE);
1034 g_string_free(new_type_string,TRUE);
1035 g_string_free(new_key_string, TRUE);
1036 g_string_free(new_ssid_string,TRUE);
1038 g_free(type_entered);
1039 g_free(key_entered );
1040 g_free(ssid_entered);
1044 if ((new_key_string->len % 2) != 0)
1046 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nThe number of characters must be even.");
1048 g_string_free(new_type_string,TRUE);
1049 g_string_free(new_key_string, TRUE);
1050 g_string_free(new_ssid_string,TRUE);
1052 g_free(type_entered);
1053 g_free(key_entered );
1054 g_free(ssid_entered);
1058 for (i = 0; i < new_key_string->len; i++)
1060 if (!g_ascii_isxdigit(new_key_string->str[i]))
1062 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nA WEP key must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
1064 g_string_free(new_type_string,TRUE);
1065 g_string_free(new_key_string, TRUE);
1066 g_string_free(new_ssid_string,TRUE);
1068 g_free(type_entered);
1069 g_free(key_entered );
1070 g_free(ssid_entered);
1075 /* If so... Modify key */
1076 airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
1078 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1080 else if (g_strcasecmp(new_type_string->str,AIRPCAP_WPA_PWD_KEY_STRING) == 0) /* WPA Key */
1082 /* XXX - Perform some WPA related input fields check */
1083 /* If everything is ok, modify the entry int he list */
1085 if ( ((new_key_string->len) > WPA_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WPA_KEY_MIN_CHAR_SIZE))
1087 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"WPA key size out of range!\nValid key size range is %d-%d ASCII characters (%d-%d bits).",WPA_KEY_MIN_CHAR_SIZE,WPA_KEY_MAX_CHAR_SIZE,WPA_KEY_MIN_BIT_SIZE,WPA_KEY_MAX_BIT_SIZE);
1089 g_string_free(new_type_string,TRUE);
1090 g_string_free(new_key_string, TRUE);
1091 g_string_free(new_ssid_string,TRUE);
1093 g_free(type_entered);
1094 g_free(key_entered );
1095 g_free(ssid_entered);
1100 * XXX - Maybe we need some check on the characters? I'm not sure if only stabdard ASCII are ok...
1102 if ( ((new_ssid_string->len) > WPA_SSID_MAX_CHAR_SIZE) || ((new_ssid_string->len) < WPA_SSID_MIN_CHAR_SIZE))
1104 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"SSID key size out of range!\nValid SSID size range is %d-%d ASCII characters (%d-%d bits).",WPA_SSID_MIN_CHAR_SIZE,WPA_SSID_MAX_CHAR_SIZE,WPA_SSID_MIN_BIT_SIZE,WPA_SSID_MAX_BIT_SIZE);
1106 g_string_free(new_type_string,TRUE);
1107 g_string_free(new_key_string, TRUE);
1108 g_string_free(new_ssid_string,TRUE);
1110 g_free(type_entered);
1111 g_free(key_entered );
1112 g_free(ssid_entered);
1116 /* If so... Modify key */
1117 airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
1119 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1121 else if (g_strcasecmp(new_type_string->str,AIRPCAP_WPA_BIN_KEY_STRING) == 0) /* WPA_BIN Key */
1123 /* XXX - Perform some WPA_BIN related input fields check */
1124 /* If everything is ok, modify the entry int he list */
1126 if ( ((new_key_string->len) != WPA_PSK_KEY_CHAR_SIZE))
1128 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"WPA PSK/PMK key size is wrong!\nValid key size is %d characters (%d bits).",WPA_PSK_KEY_CHAR_SIZE,WPA_PSK_KEY_BIT_SIZE);
1130 g_string_free(new_type_string,TRUE);
1131 g_string_free(new_key_string, TRUE);
1132 g_string_free(new_ssid_string,TRUE);
1134 g_free(type_entered);
1135 g_free(key_entered );
1136 g_free(ssid_entered);
1140 for (i = 0; i < new_key_string->len; i++)
1142 if (!g_ascii_isxdigit(new_key_string->str[i]))
1144 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
1146 g_string_free(new_type_string,TRUE);
1147 g_string_free(new_key_string, TRUE);
1148 g_string_free(new_ssid_string,TRUE);
1150 g_free(type_entered);
1151 g_free(key_entered );
1152 g_free(ssid_entered);
1157 /* If so... Modify key */
1158 airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
1160 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1162 else /* Should never happen!!! */
1164 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Unknown error in the key \"Type\" field!");
1167 g_string_free(new_type_string,TRUE);
1168 g_string_free(new_key_string, TRUE);
1169 g_string_free(new_ssid_string,TRUE);
1171 g_free(type_entered);
1172 g_free(key_entered );
1173 g_free(ssid_entered);
1175 window_destroy(GTK_WIDGET(data));
1180 * Callback for the 'Add Key' button.
1183 on_add_new_key_bt_clicked(GtkWidget *button, gpointer data _U_)
1185 GtkWidget *add_key_window;
1186 GtkWidget *add_frame;
1187 GtkWidget *main_v_box;
1189 GtkWidget *add_frame_al;
1190 GtkWidget *add_type_cm;
1191 GList *add_type_cm_items = NULL;
1192 GtkWidget *add_type_en;
1193 GtkWidget *add_key_te;
1194 GtkWidget *add_ssid_te;
1195 GtkWidget *add_type_lb;
1196 GtkWidget *add_key_lb;
1197 GtkWidget *add_ssid_lb;
1198 GtkWidget *low_h_button_box;
1200 GtkWidget *cancel_bt;
1201 GtkWidget *add_frame_lb;
1203 GtkWidget *airpcap_advanced_w;
1205 /* Key List Widget */
1208 gint keys_in_list = 0;
1210 /* Selected entry in the key list (if any)*/
1211 airpcap_key_ls_selected_info_t* selected_item;
1216 airpcap_advanced_w = GTK_WIDGET(data);
1218 /* Retrieve the selected item... if no row is selected, this is null... */
1219 selected_item = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1221 r = selected_item->row;
1222 c = selected_item->column;
1224 /* Retrieve the key list widget pointer, and add it to the add_key_w */
1225 key_ls = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
1227 keys_in_list = GTK_CLIST(key_ls)->rows;
1229 if (keys_in_list >= MAX_ENCRYPTION_KEYS) /* Check if we have already reached the maximum number of allowed keys... */
1231 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Maximum number (%d) of decryption keys reached! You cannot add another key!\n",MAX_ENCRYPTION_KEYS);
1235 /* Gray out the Advanced Wireless Setting window */
1236 gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
1238 /* Pop-up a new window */
1239 add_key_window = window_new (GTK_WINDOW_TOPLEVEL, "Add Decryption Key");
1240 gtk_widget_set_name (add_key_window, "add_key_window");
1241 gtk_container_set_border_width (GTK_CONTAINER (add_key_window), 5);
1242 #if GTK_MAJOR_VERSION >= 2
1243 gtk_window_set_resizable (GTK_WINDOW (add_key_window), FALSE);
1245 gtk_window_set_policy(GTK_WINDOW(add_key_window), FALSE, FALSE, TRUE);
1248 main_v_box = gtk_vbox_new (FALSE, 0);
1249 gtk_widget_set_name (main_v_box, "main_v_box");
1250 gtk_widget_show (main_v_box);
1251 gtk_container_add (GTK_CONTAINER (add_key_window), main_v_box);
1253 add_frame = gtk_frame_new (NULL);
1254 gtk_widget_set_name (add_frame, "add_frame");
1255 gtk_widget_show (add_frame);
1256 gtk_box_pack_start (GTK_BOX (main_v_box), add_frame, TRUE, TRUE, 0);
1258 add_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1259 gtk_widget_set_name (add_frame_al, "add_frame_al");
1260 gtk_widget_show (add_frame_al);
1261 gtk_container_add (GTK_CONTAINER (add_frame), add_frame_al);
1262 #if GTK_MAJOR_VERSION >= 2
1263 gtk_alignment_set_padding (GTK_ALIGNMENT (add_frame_al), 0, 0, 12, 0);
1265 gtk_alignment_set (GTK_ALIGNMENT (add_frame_al), 0, 0, 12, 0);
1268 add_tb = gtk_table_new (2, 3, FALSE);
1269 gtk_widget_set_name (add_tb, "add_tb");
1270 gtk_container_set_border_width(GTK_CONTAINER(add_tb),5);
1271 gtk_widget_show (add_tb);
1272 gtk_container_add (GTK_CONTAINER (add_frame_al), add_tb);
1274 add_type_cm = gtk_combo_new ();
1275 gtk_widget_set_name (add_type_cm, "add_type_cm");
1276 gtk_widget_show (add_type_cm);
1277 gtk_table_attach (GTK_TABLE (add_tb), add_type_cm, 0, 1, 1, 2,
1278 (GtkAttachOptions) (GTK_FILL),
1279 (GtkAttachOptions) (0), 0, 0);
1280 #if GTK_MAJOR_VERSION >= 2
1281 gtk_widget_set_size_request (add_type_cm, 83, -1);
1283 gtk_widget_set_usize (add_type_cm, 83, -1);
1285 add_type_cm_items = g_list_append (add_type_cm_items, (gpointer) AIRPCAP_WEP_KEY_STRING);
1287 /* XXX - DEcomment only when WPA and WPA_BIN will be ready */
1288 #ifdef HAVE_AIRPDCAP
1289 add_type_cm_items = g_list_append (add_type_cm_items, (gpointer) AIRPCAP_WPA_PWD_KEY_STRING);
1290 add_type_cm_items = g_list_append (add_type_cm_items, (gpointer) AIRPCAP_WPA_BIN_KEY_STRING);
1292 gtk_combo_set_popdown_strings (GTK_COMBO (add_type_cm),
1294 g_list_free (add_type_cm_items);
1296 add_type_en = GTK_COMBO (add_type_cm)->entry;
1297 gtk_widget_set_name (add_type_en, "add_type_en");
1298 gtk_editable_set_editable (GTK_EDITABLE (add_type_en), FALSE);
1299 gtk_widget_show (add_type_en);
1301 add_key_te = gtk_entry_new ();
1302 gtk_widget_set_name (add_key_te, "add_key_te");
1304 gtk_widget_show (add_key_te);
1305 gtk_table_attach (GTK_TABLE (add_tb), add_key_te, 1, 2, 1, 2,
1306 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1307 #if GTK_MAJOR_VERSION >= 2
1308 gtk_widget_set_size_request (add_key_te, 178, -1);
1310 gtk_widget_set_usize (add_key_te, 178, -1);
1313 add_ssid_te = gtk_entry_new ();
1314 gtk_widget_set_name (add_ssid_te, "add_ssid_te");
1315 gtk_widget_set_sensitive(add_ssid_te,FALSE);
1316 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1317 gtk_widget_show (add_ssid_te);
1318 gtk_table_attach (GTK_TABLE (add_tb), add_ssid_te, 2, 3, 1, 2,
1319 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1321 add_type_lb = gtk_label_new ("Type");
1322 gtk_widget_set_name (add_type_lb, "add_type_lb");
1323 gtk_widget_show (add_type_lb);
1324 gtk_table_attach (GTK_TABLE (add_tb), add_type_lb, 0, 1, 0, 1,
1325 (GtkAttachOptions) (GTK_FILL),
1326 (GtkAttachOptions) (0), 0, 0);
1327 gtk_label_set_justify (GTK_LABEL (add_type_lb), GTK_JUSTIFY_CENTER);
1329 add_key_lb = gtk_label_new ("Key");
1330 gtk_widget_set_name (add_key_lb, "add_key_lb");
1331 gtk_widget_show (add_key_lb);
1332 gtk_table_attach (GTK_TABLE (add_tb), add_key_lb, 1, 2, 0, 1,
1333 (GtkAttachOptions) (GTK_FILL),
1334 (GtkAttachOptions) (0), 0, 0);
1335 gtk_label_set_justify (GTK_LABEL (add_key_lb), GTK_JUSTIFY_CENTER);
1337 add_ssid_lb = gtk_label_new ("");
1338 gtk_widget_set_name (add_ssid_lb, "add_ssid_lb");
1339 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1340 gtk_widget_show (add_ssid_lb);
1341 gtk_table_attach (GTK_TABLE (add_tb), add_ssid_lb, 2, 3, 0, 1,
1342 (GtkAttachOptions) (GTK_FILL),
1343 (GtkAttachOptions) (0), 0, 0);
1344 gtk_label_set_justify (GTK_LABEL (add_ssid_lb), GTK_JUSTIFY_CENTER);
1346 low_h_button_box = gtk_hbutton_box_new ();
1347 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
1348 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
1349 gtk_widget_show (low_h_button_box);
1350 gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
1351 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
1354 #if GTK_MAJOR_VERISON >= 2
1355 ok_bt = gtk_button_new_with_mnemonic ("OK");
1357 ok_bt = gtk_button_new_with_label ("OK");
1359 gtk_widget_set_name (ok_bt, "ok_bt");
1360 gtk_widget_show (ok_bt);
1361 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
1362 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
1364 #if GTK_MAJOR_VERISON >= 2
1365 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
1367 cancel_bt = gtk_button_new_with_label ("Cancel");
1369 gtk_widget_set_name (cancel_bt, "cancel_bt");
1370 gtk_widget_show (cancel_bt);
1371 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
1372 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
1374 add_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
1375 gtk_widget_set_name (add_frame_lb, "add_frame_lb");
1376 gtk_widget_show (add_frame_lb);
1377 #if GTK_MAJOR_VERSION >= 2
1378 gtk_frame_set_label_widget (GTK_FRAME (add_frame), add_frame_lb);
1379 gtk_label_set_use_markup (GTK_LABEL (add_frame_lb), TRUE);
1381 gtk_frame_set_label (GTK_FRAME (add_frame), "Modify Selected Key");
1385 SIGNAL_CONNECT(ok_bt, "clicked", on_add_key_ok_bt_clicked, add_key_window );
1386 SIGNAL_CONNECT(cancel_bt, "clicked", window_cancel_button_cb, add_key_window );
1387 SIGNAL_CONNECT(add_type_en, "changed",on_add_type_en_changed, add_key_window);
1388 SIGNAL_CONNECT(add_key_window, "delete_event",window_delete_event_cb, add_key_window);
1389 SIGNAL_CONNECT(add_key_window, "destroy",on_add_key_w_destroy, data);
1391 /* Add widget data */
1392 OBJECT_SET_DATA(add_key_window,AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY,key_ls);
1393 OBJECT_SET_DATA(add_key_window,AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY,selected_item);
1394 OBJECT_SET_DATA(add_key_window,AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY,add_type_cm);
1395 OBJECT_SET_DATA(add_key_window,AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY,add_key_te);
1396 OBJECT_SET_DATA(add_key_window,AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY,add_ssid_te);
1397 OBJECT_SET_DATA(add_key_window,AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY,add_key_lb);
1398 OBJECT_SET_DATA(add_key_window,AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY,add_ssid_lb);
1400 gtk_widget_show(add_key_window);
1404 * Add key window destroy callback
1407 add_key_w_destroy_cb(GtkWidget *button, gpointer data _U_)
1413 * Edit key window destroy callback
1416 on_edit_key_w_destroy(GtkWidget *button, gpointer data _U_)
1418 GtkWidget *airpcap_advanced_w;
1420 airpcap_advanced_w = GTK_WIDGET(data);
1422 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w),TRUE);
1428 * Add key window destroy callback
1431 on_add_key_w_destroy(GtkWidget *button, gpointer data _U_)
1433 GtkWidget *airpcap_advanced_w;
1435 airpcap_advanced_w = GTK_WIDGET(data);
1437 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w),TRUE);
1443 * Callback for the 'Remove Key' button.
1446 on_remove_key_bt_clicked(GtkWidget *button, gpointer data _U_)
1449 GtkWidget *airpcap_advanced_w;
1453 airpcap_key_ls_selected_info_t *selected_item;
1455 gint c = NO_COLUMN_SELECTED;
1456 gint r = NO_ROW_SELECTED;
1458 airpcap_advanced_w = GTK_WIDGET(data);
1460 /* retrieve needed stuff */
1461 key_ls = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
1462 selected_item = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1465 * Better to store the selected_item data in two new variables, because maybe some
1466 * select_row signal will be emitted somewhere...
1468 r = selected_item->row;
1469 c = selected_item->column;
1471 keys_in_list = GTK_CLIST(key_ls)->rows;
1473 if ( r == NO_ROW_SELECTED ) /* No key selected */
1476 /* Remove selected key*/
1477 gtk_clist_remove(GTK_CLIST(key_ls),r);
1479 /* Reselect another row, if any... */
1480 if ( r < (keys_in_list-1) )
1481 gtk_clist_select_row(GTK_CLIST(key_ls),r,c);
1483 gtk_clist_select_row(GTK_CLIST(key_ls),r-1,c);
1485 /* Need to save config... */
1486 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1490 * Callback for the 'Edit Key' button.
1493 on_edit_key_bt_clicked(GtkWidget *button, gpointer data _U_)
1495 GtkWidget *edit_key_window;
1496 GtkWidget *edit_frame;
1497 GtkWidget *main_v_box;
1499 GtkWidget *edit_frame_al;
1500 GtkWidget *edit_type_cm;
1501 GList *edit_type_cm_items = NULL;
1502 GtkWidget *edit_type_en;
1503 GtkWidget *edit_key_te;
1504 GtkWidget *edit_ssid_te;
1505 GtkWidget *edit_type_lb;
1506 GtkWidget *edit_key_lb;
1507 GtkWidget *edit_ssid_lb;
1508 GtkWidget *low_h_button_box;
1510 GtkWidget *cancel_bt;
1511 GtkWidget *edit_frame_lb;
1513 GtkWidget *airpcap_advanced_w;
1515 /* Key List Widget */
1518 /* Selected entry in the key list (if any)*/
1519 airpcap_key_ls_selected_info_t* selected_item;
1528 airpcap_advanced_w = GTK_WIDGET(data);
1530 /* Retrieve the selected item... if no row is selected, this is null... */
1531 selected_item = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1533 r = selected_item->row;
1534 c = selected_item->column;
1536 /* Retrieve the key list widget pointer, and add it to the edit_key_w */
1537 key_ls = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
1539 if ((r != NO_ROW_SELECTED) && (c != NO_COLUMN_SELECTED))
1541 gtk_clist_get_text(GTK_CLIST(key_ls),r,0,&row_type);
1542 gtk_clist_get_text(GTK_CLIST(key_ls),r,1,&row_key);
1543 gtk_clist_get_text(GTK_CLIST(key_ls),r,2,&row_ssid);
1545 /* Gray out the Advanced Wireless Setting window */
1546 gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
1548 /* Pop-up a new window */
1549 edit_key_window = window_new (GTK_WINDOW_TOPLEVEL, "Edit Decryption Key");
1550 gtk_widget_set_name (edit_key_window, "edit_key_window");
1551 gtk_container_set_border_width (GTK_CONTAINER (edit_key_window), 5);
1552 #if GTK_MAJOR_VERSION >= 2
1553 gtk_window_set_resizable (GTK_WINDOW (edit_key_window), FALSE);
1555 gtk_window_set_policy(GTK_WINDOW(edit_key_window), FALSE, FALSE, TRUE);
1558 main_v_box = gtk_vbox_new (FALSE, 0);
1559 gtk_widget_set_name (main_v_box, "main_v_box");
1560 gtk_widget_show (main_v_box);
1561 gtk_container_add (GTK_CONTAINER (edit_key_window), main_v_box);
1563 edit_frame = gtk_frame_new (NULL);
1564 gtk_widget_set_name (edit_frame, "edit_frame");
1565 gtk_widget_show (edit_frame);
1566 gtk_box_pack_start (GTK_BOX (main_v_box), edit_frame, TRUE, TRUE, 0);
1568 edit_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1569 gtk_widget_set_name (edit_frame_al, "edit_frame_al");
1570 gtk_widget_show (edit_frame_al);
1571 gtk_container_add (GTK_CONTAINER (edit_frame), edit_frame_al);
1572 #if GTK_MAJOR_VERSION >= 2
1573 gtk_alignment_set_padding (GTK_ALIGNMENT (edit_frame_al), 0, 0, 12, 0);
1575 gtk_alignment_set (GTK_ALIGNMENT (edit_frame_al), 0, 0, 12, 0);
1578 edit_tb = gtk_table_new (2, 3, FALSE);
1579 gtk_widget_set_name (edit_tb, "edit_tb");
1580 gtk_container_set_border_width(GTK_CONTAINER(edit_tb),5);
1581 gtk_widget_show (edit_tb);
1582 gtk_container_add (GTK_CONTAINER (edit_frame_al), edit_tb);
1584 edit_type_cm = gtk_combo_new ();
1585 gtk_widget_set_name (edit_type_cm, "edit_type_cm");
1586 gtk_widget_show (edit_type_cm);
1587 gtk_table_attach (GTK_TABLE (edit_tb), edit_type_cm, 0, 1, 1, 2,
1588 (GtkAttachOptions) (GTK_FILL),
1589 (GtkAttachOptions) (0), 0, 0);
1590 #if GTK_MAJOR_VERSION >= 2
1591 gtk_widget_set_size_request (edit_type_cm, 83, -1);
1593 gtk_widget_set_usize (edit_type_cm, 83, -1);
1595 edit_type_cm_items = g_list_append (edit_type_cm_items, (gpointer) AIRPCAP_WEP_KEY_STRING);
1596 /* XXX - Decomment only when WPA and WPA_BIN support will be ready!!! */
1597 #ifdef HAVE_AIRPDCAP
1598 edit_type_cm_items = g_list_append (edit_type_cm_items, (gpointer) AIRPCAP_WPA_PWD_KEY_STRING);
1599 edit_type_cm_items = g_list_append (edit_type_cm_items, (gpointer) AIRPCAP_WPA_BIN_KEY_STRING);
1601 gtk_combo_set_popdown_strings (GTK_COMBO (edit_type_cm),
1602 edit_type_cm_items);
1603 g_list_free (edit_type_cm_items);
1605 edit_type_en = GTK_COMBO (edit_type_cm)->entry;
1606 gtk_widget_set_name (edit_type_en, "edit_type_en");
1607 /* Set current type */
1608 gtk_entry_set_text(GTK_ENTRY(edit_type_en),row_type);
1609 gtk_editable_set_editable (GTK_EDITABLE (edit_type_en), FALSE);
1610 gtk_widget_show (edit_type_en);
1612 edit_key_te = gtk_entry_new ();
1613 gtk_widget_set_name (edit_key_te, "edit_key_te");
1614 /* Set current key */
1615 gtk_entry_set_text(GTK_ENTRY(edit_key_te),row_key);
1616 gtk_widget_show (edit_key_te);
1617 gtk_table_attach (GTK_TABLE (edit_tb), edit_key_te, 1, 2, 1, 2,
1618 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1619 #if GTK_MAJOR_VERSION >= 2
1620 gtk_widget_set_size_request (edit_key_te, 178, -1);
1622 gtk_widget_set_usize (edit_key_te, 178, -1);
1625 edit_ssid_te = gtk_entry_new ();
1626 gtk_widget_set_name (edit_ssid_te, "edit_ssid_te");
1628 /* Set current ssid (if key type is not WEP!)*/
1629 if (g_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0)
1631 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
1635 gtk_widget_set_sensitive(edit_ssid_te,TRUE);
1636 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),row_ssid);
1639 /* XXX - Decomment only when WPA and WPA@ will be ready */
1640 #ifdef HAVE_AIRPDCAP
1641 gtk_widget_show (edit_ssid_te);
1643 gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_te, 2, 3, 1, 2,
1644 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1646 edit_type_lb = gtk_label_new ("Type");
1647 gtk_widget_set_name (edit_type_lb, "edit_type_lb");
1648 gtk_widget_show (edit_type_lb);
1649 gtk_table_attach (GTK_TABLE (edit_tb), edit_type_lb, 0, 1, 0, 1,
1650 (GtkAttachOptions) (GTK_FILL),
1651 (GtkAttachOptions) (0), 0, 0);
1652 gtk_label_set_justify (GTK_LABEL (edit_type_lb), GTK_JUSTIFY_CENTER);
1654 edit_key_lb = gtk_label_new ("Key");
1655 gtk_widget_set_name (edit_key_lb, "edit_key_lb");
1656 gtk_widget_show (edit_key_lb);
1657 gtk_table_attach (GTK_TABLE (edit_tb), edit_key_lb, 1, 2, 0, 1,
1658 (GtkAttachOptions) (GTK_FILL),
1659 (GtkAttachOptions) (0), 0, 0);
1660 gtk_label_set_justify (GTK_LABEL (edit_key_lb), GTK_JUSTIFY_CENTER);
1662 edit_ssid_lb = gtk_label_new ("");
1663 gtk_widget_set_name (edit_ssid_lb, "edit_ssid_lb");
1664 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1665 gtk_widget_show (edit_ssid_lb);
1666 gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_lb, 2, 3, 0, 1,
1667 (GtkAttachOptions) (GTK_FILL),
1668 (GtkAttachOptions) (0), 0, 0);
1669 gtk_label_set_justify (GTK_LABEL (edit_ssid_lb), GTK_JUSTIFY_CENTER);
1671 low_h_button_box = gtk_hbutton_box_new ();
1672 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
1673 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
1674 gtk_widget_show (low_h_button_box);
1675 gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
1676 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
1679 #if GTK_MAJOR_VERISON >= 2
1680 ok_bt = gtk_button_new_with_mnemonic ("OK");
1682 ok_bt = gtk_button_new_with_label ("OK");
1684 gtk_widget_set_name (ok_bt, "ok_bt");
1685 gtk_widget_show (ok_bt);
1686 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
1687 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
1689 #if GTK_MAJOR_VERISON >= 2
1690 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
1692 cancel_bt = gtk_button_new_with_label ("Cancel");
1694 gtk_widget_set_name (cancel_bt, "cancel_bt");
1695 gtk_widget_show (cancel_bt);
1696 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
1697 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
1699 edit_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
1700 gtk_widget_set_name (edit_frame_lb, "edit_frame_lb");
1701 gtk_widget_show (edit_frame_lb);
1702 #if GTK_MAJOR_VERSION >= 2
1703 gtk_frame_set_label_widget (GTK_FRAME (edit_frame), edit_frame_lb);
1704 gtk_label_set_use_markup (GTK_LABEL (edit_frame_lb), TRUE);
1706 gtk_frame_set_label (GTK_FRAME (edit_frame), "Modify Selected Key");
1710 SIGNAL_CONNECT(ok_bt, "clicked", on_edit_key_ok_bt_clicked, edit_key_window );
1711 SIGNAL_CONNECT(cancel_bt, "clicked", window_cancel_button_cb, edit_key_window );
1712 SIGNAL_CONNECT(edit_type_en, "changed",on_edit_type_en_changed, edit_key_window);
1713 SIGNAL_CONNECT(edit_key_window, "delete_event",window_delete_event_cb, edit_key_window);
1714 SIGNAL_CONNECT(edit_key_window, "destroy",on_edit_key_w_destroy, data);
1716 /* Add widget data */
1717 OBJECT_SET_DATA(edit_key_window,AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY,key_ls);
1718 OBJECT_SET_DATA(edit_key_window,AIRPCAP_ADVANCED_EDIT_KEY_SELECTED_KEY,selected_item);
1719 OBJECT_SET_DATA(edit_key_window,AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY,edit_type_cm);
1720 OBJECT_SET_DATA(edit_key_window,AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY,edit_key_te);
1721 OBJECT_SET_DATA(edit_key_window,AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY,edit_ssid_te);
1722 OBJECT_SET_DATA(edit_key_window,AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY,edit_key_lb);
1723 OBJECT_SET_DATA(edit_key_window,AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY,edit_ssid_lb);
1725 gtk_widget_show(edit_key_window);
1730 * Callback for the 'Move Key Up' button.
1733 on_move_key_up_bt_clicked(GtkWidget *button, gpointer data _U_)
1735 GtkWidget *airpcap_advanced_w;
1737 GList *new_list = NULL;
1742 airpcap_key_ls_selected_info_t *selected_item;
1744 gint c = NO_COLUMN_SELECTED;
1745 gint r = NO_ROW_SELECTED;
1747 airpcap_advanced_w = GTK_WIDGET(data);
1749 /* retrieve needed stuff */
1750 key_ls = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
1751 selected_item = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1754 * Better to store the selected_item data in two new variables, because maybe some
1755 * select_row signal will be emitted somewhere...
1757 r = selected_item->row;
1758 c = selected_item->column;
1760 keys_in_list = GTK_CLIST(key_ls)->rows;
1762 if (keys_in_list < 2) /* With less than 2 keys, nothing can be moved ... */
1765 if ( r == 0 ) /* Cannot move up the first row */
1768 /* Move up selected key */
1769 gtk_clist_swap_rows (GTK_CLIST(key_ls),r-1,r);
1772 * Re-select the just moved key... so the user can keep pressing 'Move Key Up'
1773 * without re-select the row...
1775 gtk_clist_select_row (GTK_CLIST(key_ls),r-1,c);
1777 /* Need to save config... */
1778 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1782 * Callback for the 'Move Key Down' button.
1785 on_move_key_down_bt_clicked(GtkWidget *button, gpointer data _U_)
1787 GtkWidget *airpcap_advanced_w;
1789 GList *new_list = NULL;
1794 airpcap_key_ls_selected_info_t *selected_item;
1796 gint c = NO_COLUMN_SELECTED;
1797 gint r = NO_ROW_SELECTED;
1799 airpcap_advanced_w = GTK_WIDGET(data);
1801 /* retrieve needed stuff */
1802 key_ls = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
1803 selected_item = OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1806 * Better to store the selected_item data in two new variables, because maybe some
1807 * select_row signal will be emitted somewhere...
1809 r = selected_item->row;
1810 c = selected_item->column;
1812 keys_in_list = GTK_CLIST(key_ls)->rows;
1814 if (keys_in_list < 2) /* With less than 2 keys, nothing can be moved ... */
1817 if ( (r+1) == keys_in_list ) /* Cannot move down the last row */
1820 /* Move down selected key */
1821 gtk_clist_swap_rows (GTK_CLIST(key_ls),r,r+1);
1824 * Re-select the just moved key... so the user can keep pressing 'Move Key Down'
1825 * without re-select the row...
1827 gtk_clist_select_row (GTK_CLIST(key_ls),r+1,c);
1829 /* Need to save config... */
1830 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1833 /* Turns the decryption on or off */
1835 on_enable_decryption_en_changed(GtkWidget *w, gpointer data)
1837 GtkEntry *decryption_en;
1839 char* decryption_mode_string = NULL;
1841 decryption_en = GTK_ENTRY(w);
1844 * This callback is called twice: when the current text is canceled ("")
1845 * and then when the 'new text' is added ("new text"). We don't really
1846 * care about the first time, and we just return.
1848 if (g_strcasecmp(gtk_entry_get_text(decryption_en),"") == 0)
1851 if (g_strcasecmp(gtk_entry_get_text(decryption_en),AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK) == 0)
1853 set_wireshark_decryption(TRUE);
1854 if (!set_airpcap_decryption(FALSE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
1856 else if (g_strcasecmp(gtk_entry_get_text(decryption_en),AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
1858 set_wireshark_decryption(FALSE);
1859 if (!set_airpcap_decryption(TRUE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
1861 else if (g_strcasecmp(gtk_entry_get_text(decryption_en),AIRPCAP_DECRYPTION_TYPE_STRING_NONE) == 0)
1863 set_wireshark_decryption(FALSE);
1864 if (!set_airpcap_decryption(FALSE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
1867 /* Redissect all the packets, and re-evaluate the display filter. */
1868 cf_redissect_packets(&cfile);
1872 * Will fill the given combo box with the current decryption mode string
1875 update_decryption_mode_cm(GtkWidget *w)
1878 * This ensures that the entry tet changes... the callback will return immediately, but
1879 * at least next time packets will be redissected...
1881 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),"");
1883 /* Wireshark decryption is on */
1884 if (wireshark_decryption_on())
1886 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK);
1887 /* We don't know if AirPcap decryption is on or off, but we just turn it off */
1888 if (!set_airpcap_decryption(FALSE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
1890 /* AirPcap decryption is on */
1891 else if (airpcap_decryption_on())
1893 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP);
1895 /* No decryption enabled */
1898 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1905 * Creates the list of available decryption modes, depending on the adapters found
1908 update_decryption_mode_list(GtkWidget *w)
1910 GList *enable_decryption_cb_items = NULL;
1912 gchar *current_text;
1917 entry = GTK_COMBO(w)->entry;
1918 current_text = NULL;
1921 * XXX - Retrieve the current 'decryption mode'. It would be better just block the
1922 * signal handler, but it doesn't work... one of these days I'll try to figure otu why...
1924 current_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
1926 enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1927 enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK);
1929 if (airpcap_if_list != NULL && g_list_length(airpcap_if_list) > 0)
1931 enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP);
1935 /* The last decryption mode was 'Driver', but no more AirPcap adapter are found */
1936 if (g_strcasecmp(current_text,AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
1938 if (current_text != NULL) g_free(current_text);
1940 current_text = g_strdup(AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1944 gtk_signal_handler_block_by_data(GTK_OBJECT(entry),(gpointer)airpcap_tb);
1945 gtk_combo_set_popdown_strings (GTK_COMBO (w), enable_decryption_cb_items);
1946 /* The 'changed' callback will be called twice */
1947 gtk_entry_set_text(GTK_ENTRY(entry),current_text);
1948 gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry),(gpointer)airpcap_tb);
1950 if (current_text != NULL) g_free(current_text);
1952 g_list_free (enable_decryption_cb_items);
1955 /* Called to create the airpcap settings' window */
1957 display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
1959 GtkWidget *airpcap_advanced_w;
1960 GtkWidget *main_box;
1961 GtkWidget *settings_sub_box;
1962 GtkWidget *interface_fr;
1963 GtkWidget *interface_al;
1964 GtkWidget *interface_sub_h_box;
1965 GtkWidget *interface_name_lb;
1966 GtkWidget *blink_bt;
1967 GtkWidget *interface_frame_lb;
1968 GtkWidget *basic_parameters_fr;
1969 GtkWidget *basic_parameters_al;
1970 GtkWidget *basic_parameters_tb;
1971 GtkWidget *channel_lb;
1972 GtkWidget *channel_offset_lb;
1973 GtkWidget *capture_type_lb;
1974 GtkWidget *channel_cm;
1975 GList *channel_cm_items = NULL;
1976 GtkWidget *channel_en;
1977 GtkWidget *capture_type_cm;
1978 GtkWidget *channel_offset_cb;
1979 GList *capture_type_cm_items = NULL;
1980 GtkWidget *capture_type_en;
1982 GtkWidget *basic_parameters_fcs_h_box;
1983 GtkWidget *basic_parameters_fcs_filter_lb;
1984 GtkWidget *fcs_filter_cm;
1985 GList *fcs_filter_cm_items = NULL;
1986 GtkWidget *fcs_filter_en;
1987 GtkWidget *basic_parameters_frame_lb;
1988 GtkWidget *low_buttons_h_box;
1989 GtkWidget *left_h_button_box;
1990 GtkWidget *reset_configuration_bt;
1991 GtkWidget *right_h_button_box;
1993 GtkWidget *apply_bt;
1994 GtkWidget *cancel_bt;
1996 /* for loop counter */
1999 /* widgets in the toolbar */
2002 *toolbar_channel_cm,
2003 *toolbar_wrong_crc_cm;
2006 /*GList *channel_list,*capture_list;*/
2007 GList *linktype_list = NULL;
2010 /* user data - RETRIEVE pointers of toolbar widgets */
2011 toolbar = GTK_WIDGET(data);
2012 toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY));
2013 toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY));
2014 toolbar_wrong_crc_cm= GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
2016 /* gray out the toolbar */
2017 gtk_widget_set_sensitive(toolbar,FALSE);
2022 /* NULL to global widgets */
2023 block_advanced_signals = FALSE;
2025 /* the selected is the active, for now */
2026 airpcap_if_selected = airpcap_if_active;
2028 /* Create the new window */
2029 airpcap_advanced_w = window_new(GTK_WINDOW_TOPLEVEL, "Advanced Wireless Settings");
2031 gtk_container_set_border_width (GTK_CONTAINER (airpcap_advanced_w), 5);
2032 gtk_window_set_position (GTK_WINDOW (airpcap_advanced_w),
2033 GTK_WIN_POS_CENTER);
2035 #if GTK_MAJOR_VERSION >= 2
2036 gtk_window_set_resizable (GTK_WINDOW (airpcap_advanced_w), FALSE);
2037 gtk_window_set_type_hint (GTK_WINDOW (airpcap_advanced_w), GDK_WINDOW_TYPE_HINT_DIALOG);
2039 gtk_window_set_policy(GTK_WINDOW(airpcap_advanced_w), FALSE, FALSE, TRUE);
2042 main_box = gtk_vbox_new (FALSE, 0);
2043 gtk_widget_set_name (main_box, "main_box");
2044 gtk_widget_show (main_box);
2045 gtk_container_add (GTK_CONTAINER (airpcap_advanced_w), main_box);
2047 settings_sub_box = gtk_vbox_new (FALSE, 0);
2048 gtk_widget_set_name (settings_sub_box, "settings_sub_box");
2049 gtk_widget_show (settings_sub_box);
2050 gtk_box_pack_start (GTK_BOX (main_box), settings_sub_box, FALSE, TRUE, 0);
2052 interface_fr = gtk_frame_new (NULL);
2053 gtk_widget_set_name (interface_fr, "interface_fr");
2054 gtk_widget_show (interface_fr);
2055 gtk_box_pack_start (GTK_BOX (settings_sub_box), interface_fr, FALSE, FALSE,
2057 gtk_container_set_border_width (GTK_CONTAINER (interface_fr), 10);
2059 interface_al = gtk_alignment_new (0.5, 0.5, 1, 1);
2060 gtk_widget_set_name (interface_al, "interface_al");
2061 gtk_widget_show (interface_al);
2062 gtk_container_add (GTK_CONTAINER (interface_fr), interface_al);
2063 #if GTK_MAJOR_VERSION >= 2
2064 gtk_alignment_set_padding (GTK_ALIGNMENT (interface_al), 5, 5, 0, 0);
2066 gtk_alignment_set (GTK_ALIGNMENT (interface_al), 5, 5, 0, 0);
2069 interface_sub_h_box = gtk_hbox_new (FALSE, 0);
2070 gtk_widget_set_name (interface_sub_h_box, "interface_sub_h_box");
2071 gtk_widget_show (interface_sub_h_box);
2072 gtk_container_add (GTK_CONTAINER (interface_al), interface_sub_h_box);
2073 gtk_container_set_border_width (GTK_CONTAINER (interface_sub_h_box), 5);
2075 /* Fill the interface_box */
2076 if (airpcap_if_active != NULL)
2078 interface_name_lb = gtk_label_new(airpcap_if_active->description);
2082 interface_name_lb = gtk_label_new("No airpcap interface found!");
2083 gtk_widget_set_sensitive(main_box,FALSE);
2086 gtk_widget_set_name (interface_name_lb, "interface_name_lb");
2087 gtk_widget_show (interface_name_lb);
2088 gtk_box_pack_start (GTK_BOX (interface_sub_h_box), interface_name_lb, TRUE,
2091 /* If it is NOT the 'Any' Interface */
2092 if (!airpcap_if_is_any(airpcap_if_selected))
2094 #if GTK_MAJOR_VERSION >= 2
2095 blink_bt = gtk_button_new_with_mnemonic ("Blink Led");
2097 blink_bt = gtk_button_new_with_label("Blink Led");
2100 else /* It is the any interface, so it doesn't make sense to have 'Blink' button... */
2102 #if GTK_MAJOR_VERSION >= 2
2103 blink_bt = gtk_button_new_with_mnemonic ("What's This?");
2105 blink_bt = gtk_button_new_with_label("What's This?");
2108 gtk_widget_set_name (blink_bt, "blink_bt");
2109 gtk_widget_show (blink_bt);
2110 gtk_box_pack_end (GTK_BOX (interface_sub_h_box), blink_bt, FALSE, FALSE, 0);
2112 interface_frame_lb = gtk_label_new ("<b>Interface</b>");
2113 gtk_widget_set_name (interface_frame_lb, "interface_frame_lb");
2114 gtk_widget_show (interface_frame_lb);
2115 #if GTK_MAJOR_VERSION >= 2
2116 gtk_frame_set_label_widget (GTK_FRAME (interface_fr), interface_frame_lb);
2117 gtk_label_set_use_markup (GTK_LABEL (interface_frame_lb), TRUE);
2119 gtk_frame_set_label(GTK_FRAME(interface_fr),"Interface");
2122 basic_parameters_fr = gtk_frame_new (NULL);
2123 gtk_widget_set_name (basic_parameters_fr, "basic_parameters_fr");
2124 gtk_widget_show (basic_parameters_fr);
2125 gtk_box_pack_start (GTK_BOX (settings_sub_box), basic_parameters_fr, TRUE,FALSE, 0);
2126 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_fr), 10);
2128 basic_parameters_al = gtk_alignment_new (0.5, 0.5, 1, 1);
2129 gtk_widget_set_name (basic_parameters_al, "basic_parameters_al");
2130 gtk_widget_show (basic_parameters_al);
2131 gtk_container_add (GTK_CONTAINER (basic_parameters_fr),basic_parameters_al);
2132 #if GTK_MAJOR_VERSION >= 2
2133 gtk_alignment_set_padding (GTK_ALIGNMENT (basic_parameters_al), 10, 10, 0, 0);
2135 gtk_alignment_set (GTK_ALIGNMENT (basic_parameters_al), 10, 10, 0, 0);
2138 basic_parameters_tb = gtk_table_new (2, 3, FALSE);
2139 gtk_widget_set_name (basic_parameters_tb, "basic_parameters_tb");
2140 gtk_widget_show (basic_parameters_tb);
2141 gtk_container_add (GTK_CONTAINER (basic_parameters_al),
2142 basic_parameters_tb);
2143 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_tb), 5);
2144 gtk_table_set_col_spacings (GTK_TABLE (basic_parameters_tb), 20);
2146 channel_lb = gtk_label_new ("Channel:");
2147 gtk_widget_set_name (channel_lb, "channel_lb");
2148 gtk_widget_show (channel_lb);
2149 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_lb, 0, 1, 0, 1,
2150 (GtkAttachOptions) (GTK_FILL),
2151 (GtkAttachOptions) (0), 0, 0);
2152 gtk_misc_set_alignment (GTK_MISC (channel_lb), 0, 0.5);
2154 capture_type_lb = gtk_label_new ("Capture Type:");
2155 gtk_widget_set_name (capture_type_lb, "capture_type_lb");
2156 gtk_widget_show (capture_type_lb);
2157 gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_lb, 0, 1, 2,
2158 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0),
2160 gtk_misc_set_alignment (GTK_MISC (capture_type_lb), 0, 0.5);
2162 /* Start: Channel offset label */
2163 channel_offset_lb = gtk_label_new ("Channel Offset:");
2164 gtk_widget_set_name (channel_offset_lb, "channel_offset_lb");
2165 gtk_widget_show (channel_offset_lb);
2166 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_lb, 0, 1, 1, 2,
2167 (GtkAttachOptions) (GTK_FILL),
2168 (GtkAttachOptions) (0), 0, 0);
2169 gtk_misc_set_alignment (GTK_MISC (channel_offset_lb), 0, 0.5);
2170 /* End: Channel offset label */
2172 /* Start: Channel offset combo box */
2173 channel_offset_cb = gtk_combo_new();
2174 gtk_widget_set_name (channel_offset_cb, "channel_offset_cb");
2175 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(channel_offset_cb)->entry),FALSE);
2177 airpcap_update_channel_offset_cb(airpcap_if_selected, airpcap_if_selected->channelInfo.Frequency, channel_offset_cb);
2178 airpcap_update_channel_offset_combo_entry(channel_offset_cb, airpcap_if_selected->channelInfo.ExtChannel);
2180 gtk_widget_show(channel_offset_cb);
2182 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_cb, 1, 2, 1, 2,
2183 (GtkAttachOptions) (GTK_FILL),
2184 (GtkAttachOptions) (0), 0, 0);
2185 /* End: Channel offset combo box */
2187 channel_cm = gtk_combo_new ();
2188 gtk_widget_set_name (channel_cm, "channel_cm");
2189 gtk_widget_show (channel_cm);
2190 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_cm, 1, 2, 0, 1,
2191 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
2192 (GtkAttachOptions) (0), 0, 0);
2194 if (airpcap_if_selected != NULL && airpcap_if_selected->pSupportedChannels != NULL && airpcap_if_selected->numSupportedChannels > 0){
2195 for (i = 0; i<(airpcap_if_selected->numSupportedChannels); i++){
2196 channel_cm_items = g_list_append(channel_cm_items, airpcap_get_channelstr_from_freq(airpcap_if_selected->pSupportedChannels[i].Frequency));
2198 gtk_combo_set_popdown_strings( GTK_COMBO(channel_cm), channel_cm_items) ;
2201 /* Select the first entry */
2202 if (airpcap_if_selected != NULL)
2204 airpcap_update_channel_combo(GTK_WIDGET(channel_cm), airpcap_if_selected);
2207 g_list_free (channel_cm_items);
2209 channel_en = GTK_COMBO (channel_cm)->entry;
2210 gtk_editable_set_editable(GTK_EDITABLE(channel_en),FALSE);
2211 gtk_widget_set_name (channel_en, "channel_en");
2212 gtk_widget_show (channel_en);
2214 capture_type_cm = gtk_combo_new ();
2215 gtk_widget_set_name (capture_type_cm, "capture_type_cm");
2216 gtk_widget_show (capture_type_cm);
2217 gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_cm, 1, 2, 2,
2218 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
2219 (GtkAttachOptions) (0), 0, 0);
2220 capture_type_cm_items =
2221 g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_ONLY);
2222 capture_type_cm_items =
2223 g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO);
2225 if (airpcap_get_dll_state() == AIRPCAP_DLL_OK){
2226 capture_type_cm_items =
2227 g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI);
2229 gtk_combo_set_popdown_strings (GTK_COMBO (capture_type_cm),
2230 capture_type_cm_items);
2232 /* Current interface value */
2234 if (airpcap_if_selected != NULL)
2236 if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11){
2237 capture_s = g_strdup_printf("%s",AIRPCAP_LINK_TYPE_NAME_802_11_ONLY);
2238 }else if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_RADIO){
2239 capture_s = g_strdup_printf("%s",AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO);
2240 }else if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_PPI){
2241 capture_s = g_strdup_printf("%s",AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI);
2244 if (capture_s != NULL) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(capture_type_cm)->entry), capture_s);
2248 g_list_free (capture_type_cm_items);
2250 capture_type_en = GTK_COMBO (capture_type_cm)->entry;
2251 gtk_widget_set_name (capture_type_en, "capture_type_en");
2252 gtk_widget_show (capture_type_en);
2254 #if GTK_VERSION >= 2
2255 fcs_ck = gtk_check_button_new_with_mnemonic ("Include 802.11 FCS in Frames");
2257 fcs_ck = gtk_check_button_new_with_label ("Include 802.11 FCS in Frames");
2259 gtk_widget_set_name (fcs_ck, "fcs_ck");
2261 /* Fcs Presence check box */
2262 if (airpcap_if_selected != NULL)
2264 if (airpcap_if_selected->IsFcsPresent)
2265 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck),TRUE);
2267 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck),FALSE);
2270 gtk_widget_show (fcs_ck);
2271 gtk_table_attach (GTK_TABLE (basic_parameters_tb), fcs_ck, 2, 3, 0, 1,
2272 (GtkAttachOptions) (GTK_FILL),
2273 (GtkAttachOptions) (0), 0, 0);
2275 basic_parameters_fcs_h_box = gtk_hbox_new (FALSE, 1);
2276 gtk_widget_set_name (basic_parameters_fcs_h_box,
2277 "basic_parameters_fcs_h_box");
2278 gtk_widget_show (basic_parameters_fcs_h_box);
2279 gtk_table_attach (GTK_TABLE (basic_parameters_tb),
2280 basic_parameters_fcs_h_box, 2, 3, 2, 3,
2281 (GtkAttachOptions) (GTK_FILL),
2282 (GtkAttachOptions) (GTK_FILL), 3, 0);
2284 basic_parameters_fcs_filter_lb = gtk_label_new ("FCS Filter:");
2285 gtk_widget_set_name (basic_parameters_fcs_filter_lb,
2286 "basic_parameters_fcs_filter_lb");
2287 gtk_widget_show (basic_parameters_fcs_filter_lb);
2288 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box),
2289 basic_parameters_fcs_filter_lb, FALSE, FALSE, 0);
2291 fcs_filter_cm = gtk_combo_new ();
2292 gtk_widget_set_name (fcs_filter_cm, "fcs_filter_cm");
2293 gtk_widget_show (fcs_filter_cm);
2294 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box), fcs_filter_cm,
2296 #if GTK_MAJOR_VERSION >= 2
2297 gtk_widget_set_size_request (fcs_filter_cm, 112, -1);
2299 gtk_widget_set_usize (fcs_filter_cm, 112, -1);
2301 fcs_filter_cm_items =
2302 g_list_append (fcs_filter_cm_items, (gpointer) "All Frames");
2303 fcs_filter_cm_items =
2304 g_list_append (fcs_filter_cm_items, (gpointer) "Valid Frames");
2305 fcs_filter_cm_items =
2306 g_list_append (fcs_filter_cm_items, (gpointer) "Invalid Frames");
2307 gtk_combo_set_popdown_strings (GTK_COMBO (fcs_filter_cm),
2308 fcs_filter_cm_items);
2309 g_list_free (fcs_filter_cm_items);
2311 fcs_filter_en = GTK_COMBO (fcs_filter_cm)->entry;
2312 gtk_widget_set_name (fcs_filter_en, "fcs_filter_en");
2314 if (airpcap_if_selected != NULL)
2316 airpcap_validation_type_combo_set_by_type(fcs_filter_cm,airpcap_if_selected->CrcValidationOn);
2319 gtk_widget_show (fcs_filter_en);
2321 basic_parameters_frame_lb = gtk_label_new ("<b>Basic Parameters</b>");
2322 gtk_widget_set_name (basic_parameters_frame_lb,
2323 "basic_parameters_frame_lb");
2324 gtk_widget_show (basic_parameters_frame_lb);
2326 #if GTK_MAJOR_VERSION >= 2
2327 gtk_frame_set_label_widget (GTK_FRAME (basic_parameters_fr),basic_parameters_frame_lb);
2328 gtk_label_set_use_markup (GTK_LABEL (basic_parameters_frame_lb), TRUE);
2330 gtk_frame_set_label(GTK_FRAME (basic_parameters_fr),"Basic Parameters");
2333 low_buttons_h_box = gtk_hbox_new (FALSE, 0);
2334 gtk_widget_set_name (low_buttons_h_box, "low_buttons_h_box");
2335 gtk_widget_show (low_buttons_h_box);
2336 gtk_box_pack_end (GTK_BOX (main_box), low_buttons_h_box, FALSE, FALSE, 0);
2338 left_h_button_box = gtk_hbutton_box_new ();
2339 gtk_widget_set_name (left_h_button_box, "left_h_button_box");
2340 gtk_widget_show (left_h_button_box);
2341 gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
2344 #if GTK_MAJOR_VERSION >= 2
2345 reset_configuration_bt = gtk_button_new_with_mnemonic ("Reset Configuration");
2347 reset_configuration_bt = gtk_button_new_with_label ("Reset Configuration");
2349 gtk_widget_set_name (reset_configuration_bt, "reset_configuration_bt");
2350 /* gtk_widget_show (reset_configuration_bt); */
2351 gtk_container_add (GTK_CONTAINER (low_buttons_h_box),
2352 reset_configuration_bt);
2353 GTK_WIDGET_SET_FLAGS (reset_configuration_bt, GTK_CAN_DEFAULT);
2355 right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
2356 gtk_widget_show (right_h_button_box);
2357 gtk_box_pack_end (GTK_BOX (low_buttons_h_box), right_h_button_box, FALSE,
2359 gtk_button_box_set_layout (GTK_BUTTON_BOX (right_h_button_box),
2362 ok_bt = OBJECT_GET_DATA(right_h_button_box, GTK_STOCK_OK);
2363 apply_bt = OBJECT_GET_DATA(right_h_button_box, GTK_STOCK_APPLY);
2364 cancel_bt = OBJECT_GET_DATA(right_h_button_box, GTK_STOCK_CANCEL);
2366 /* Connect the callbacks */
2367 SIGNAL_CONNECT (airpcap_advanced_w, "delete_event", window_delete_event_cb, airpcap_advanced_w);
2368 SIGNAL_CONNECT (airpcap_advanced_w, "destroy", on_airpcap_advanced_destroy, airpcap_advanced_w);
2370 if (!airpcap_if_is_any(airpcap_if_selected))
2372 SIGNAL_CONNECT (blink_bt, "clicked", on_blink_bt_clicked, airpcap_advanced_w);
2376 SIGNAL_CONNECT (blink_bt, "clicked", on_what_s_this_bt_clicked, airpcap_advanced_w);
2379 SIGNAL_CONNECT (channel_en, "changed",on_channel_en_changed, channel_offset_cb);
2380 SIGNAL_CONNECT (GTK_COMBO(channel_offset_cb)->entry, "changed",on_channel_offset_cb_changed, airpcap_advanced_w);
2381 SIGNAL_CONNECT (capture_type_en, "changed",on_capture_type_en_changed, airpcap_advanced_w);
2382 SIGNAL_CONNECT (fcs_ck, "toggled",on_fcs_ck_toggled, airpcap_advanced_w);
2383 SIGNAL_CONNECT (fcs_filter_en, "changed",on_fcs_filter_en_changed, airpcap_advanced_w);
2384 SIGNAL_CONNECT (reset_configuration_bt, "clicked",on_reset_configuration_bt_clicked, airpcap_advanced_w);
2385 SIGNAL_CONNECT (apply_bt, "clicked",on_advanced_apply_bt_clicked, airpcap_advanced_w);
2386 SIGNAL_CONNECT (ok_bt,"clicked",on_advanced_ok_bt_clicked,airpcap_advanced_w);
2387 SIGNAL_CONNECT (cancel_bt,"clicked",on_advanced_cancel_bt_clicked,airpcap_advanced_w);
2389 /* Different because the window will be closed ... */
2390 /*window_set_cancel_button(airpcap_advanced_w, ok_bt, window_cancel_button_cb);
2391 window_set_cancel_button(airpcap_advanced_w, cancel_bt, window_cancel_button_cb);*/
2394 /* Store pointers to all widgets, for use by lookup_widget(). */
2395 OBJECT_SET_DATA (airpcap_advanced_w, AIRPCAP_ADVANCED_BLINK_KEY, blink_bt);
2396 OBJECT_SET_DATA (airpcap_advanced_w, AIRPCAP_ADVANCED_CHANNEL_KEY,channel_cm);
2397 OBJECT_SET_DATA (airpcap_advanced_w, AIRPCAP_ADVANCED_LINK_TYPE_KEY,capture_type_cm);
2398 OBJECT_SET_DATA (airpcap_advanced_w, AIRPCAP_ADVANCED_FCS_CHECK_KEY, fcs_ck);
2399 OBJECT_SET_DATA (airpcap_advanced_w, AIRPCAP_ADVANCED_FCS_FILTER_KEY, fcs_filter_cm);
2400 OBJECT_SET_DATA (airpcap_advanced_w, AIRPCAP_ADVANCED_OK_KEY, ok_bt);
2401 OBJECT_SET_DATA (airpcap_advanced_w, AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt);
2404 * I will need the toolbar and the main widget in some callback,
2405 * so I will add the toolbar pointer to the airpcap_advanced_w
2407 OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_TOOLBAR_KEY,toolbar);
2409 /* At the end, so that it appears completely all together ... */
2410 gtk_widget_show (airpcap_advanced_w);
2414 * Callback for the OK button 'clicked' in the Advanced Wireless Settings window.
2417 on_advanced_ok_bt_clicked(GtkWidget *button, gpointer data _U_)
2419 PAirpcapHandle ad = NULL;
2420 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
2422 /* Retrieve object data */
2423 GtkWidget *airpcap_advanced_w;
2424 GtkWidget *channel_combo;
2425 GtkWidget *capture_combo;
2426 GtkWidget *crc_check;
2427 GtkWidget *wrong_crc_combo;
2428 GtkWidget *blink_bt;
2429 GtkWidget *interface_combo;
2430 GtkWidget *cancel_bt;
2433 /* widgets in the toolbar */
2436 *toolbar_channel_cm,
2437 *toolbar_channel_offset_cb,
2438 *toolbar_wrong_crc_cm,
2441 /* Retrieve the GUI object pointers */
2442 airpcap_advanced_w = GTK_WIDGET(data);
2443 interface_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_INTERFACE_KEY));
2444 channel_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CHANNEL_KEY));
2445 capture_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_LINK_TYPE_KEY));
2446 crc_check = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_CHECK_KEY));
2447 wrong_crc_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_FILTER_KEY));
2448 blink_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_BLINK_KEY));
2449 cancel_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CANCEL_KEY));
2450 ok_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_OK_KEY));
2451 advanced_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEY));
2453 toolbar = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_TOOLBAR_KEY));
2455 /* retrieve toolbar info */
2456 toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY));
2457 toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY));
2458 toolbar_channel_offset_cb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY));
2459 toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
2461 /* Stop blinking ALL leds (go through the airpcap_if_list) */
2462 if (airpcap_if_selected != NULL)
2464 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
2467 gtk_timeout_remove(airpcap_if_selected->tag);
2468 airpcap_if_turn_led_on(ad, 0);
2469 airpcap_if_selected->blinking = FALSE;
2470 airpcap_if_selected->led = TRUE;
2471 airpcap_if_close(ad);
2475 /* ??? - Ask if want to save configuration */
2477 /* Save the configuration */
2478 airpcap_save_selected_if_configuration(airpcap_if_selected);
2479 /* Remove gtk timeout */
2480 gtk_timeout_remove(airpcap_if_selected->tag);
2482 /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/
2483 if ( g_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0)
2485 gtk_label_set_text(GTK_LABEL(toolbar_if_lb), g_strdup_printf("%s %s\t","Current Wireless Interface: #",airpcap_get_if_string_number(airpcap_if_selected)));
2486 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
2487 airpcap_update_channel_offset_combo_entry(GTK_WIDGET(toolbar_channel_offset_cb),airpcap_if_selected->channelInfo.ExtChannel);
2488 airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
2491 /* If interface active is airpcap, set sensitive TRUE for airpcap toolbar */
2492 if ( get_airpcap_if_from_name(airpcap_if_list,airpcap_if_active->description) != NULL)
2494 airpcap_set_toolbar_start_capture(airpcap_if_active);
2498 airpcap_set_toolbar_stop_capture(airpcap_if_active);
2501 gtk_widget_destroy(airpcap_advanced_w);
2505 * Callback for the CANCEL button 'clicked' in the Advanced Wireless Settings window.
2508 on_advanced_cancel_bt_clicked(GtkWidget *button, gpointer data _U_)
2510 PAirpcapHandle ad = NULL;
2511 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
2513 /* Retrieve object data */
2514 GtkWidget *airpcap_advanced_w;
2515 GtkWidget *channel_combo;
2516 GtkWidget *capture_combo;
2517 GtkWidget *crc_check;
2518 GtkWidget *wrong_crc_combo;
2519 GtkWidget *blink_bt;
2520 GtkWidget *interface_combo;
2521 GtkWidget *cancel_bt;
2524 /* widgets in the toolbar */
2527 *toolbar_channel_cm,
2528 *toolbar_wrong_crc_cm,
2531 /* Retrieve the GUI object pointers */
2532 airpcap_advanced_w = GTK_WIDGET(data);
2533 interface_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_INTERFACE_KEY));
2534 channel_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CHANNEL_KEY));
2535 capture_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_LINK_TYPE_KEY));
2536 crc_check = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_CHECK_KEY));
2537 wrong_crc_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_FILTER_KEY));
2538 blink_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_BLINK_KEY));
2539 cancel_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CANCEL_KEY));
2540 ok_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_OK_KEY));
2541 advanced_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEY));
2543 toolbar = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_TOOLBAR_KEY));
2545 /* retrieve toolbar info */
2546 toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY));
2547 toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY));
2548 toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
2550 /* Stop blinking ALL leds (go through the airpcap_if_list) */
2551 if (airpcap_if_selected != NULL)
2553 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
2556 gtk_timeout_remove(airpcap_if_selected->tag);
2557 airpcap_if_turn_led_on(ad, 0);
2558 airpcap_if_selected->blinking = FALSE;
2559 airpcap_if_selected->led = TRUE;
2560 airpcap_if_close(ad);
2564 /* reload the configuration!!! Configuration has not been saved but
2565 the corresponding structure has been modified probably...*/
2566 if (!airpcap_if_selected->saved)
2568 airpcap_load_selected_if_configuration(airpcap_if_selected);
2571 gtk_widget_destroy(airpcap_advanced_w);
2574 /* Called to create the key management window */
2576 display_airpcap_key_management_cb(GtkWidget *w, gpointer data)
2578 GtkWidget *key_management_w;
2579 GtkWidget *main_box;
2582 GtkWidget *keys_h_sub_box;
2583 GtkWidget *enable_decryption_tb;
2584 GtkWidget *enable_decryption_lb;
2585 GtkWidget *enable_decryption_cb;
2586 GList *enable_decryption_cb_items = NULL;
2587 GtkWidget *enable_decryption_en;
2588 GtkWidget *keys_v_sub_box;
2589 GtkWidget *keys_scrolled_w;
2591 GtkWidget *key_list_decryption_type_col_lb;
2592 GtkWidget *key_list_decryption_key_col_lb;
2593 GtkWidget *key_ls_decryption_ssid_col_lb;
2594 GtkWidget *key_v_button_box;
2595 GtkWidget *add_new_key_bt;
2596 GtkWidget *remove_key_bt;
2597 GtkWidget *edit_key_bt;
2598 GtkWidget *move_key_up_bt;
2599 GtkWidget *move_key_down_bt;
2600 GtkWidget *keys_frame_lb;
2601 GtkWidget *low_buttons_h_box;
2602 GtkWidget *left_h_button_box;
2603 GtkWidget *reset_configuration_bt;
2604 GtkWidget *right_h_button_box;
2606 GtkWidget *apply_bt;
2607 GtkWidget *cancel_bt;
2609 /* widgets in the toolbar */
2611 *toolbar_decryption_ck;
2614 /*GList *channel_list,*capture_list;*/
2615 GList *linktype_list = NULL;
2617 /* Selected row/column structure */
2618 airpcap_key_ls_selected_info_t *key_ls_selected_item;
2619 key_ls_selected_item = (airpcap_key_ls_selected_info_t*)g_malloc(sizeof(airpcap_key_ls_selected_info_t));
2620 key_ls_selected_item->row = NO_ROW_SELECTED;
2621 key_ls_selected_item->column = NO_COLUMN_SELECTED;
2623 /* user data - RETRIEVE pointers of toolbar widgets */
2624 toolbar = GTK_WIDGET(data);
2625 toolbar_decryption_ck = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_DECRYPTION_KEY));
2627 /* gray out the toolbar */
2628 gtk_widget_set_sensitive(toolbar,FALSE);
2633 /* NULL to global widgets */
2634 block_advanced_signals = FALSE;
2636 /* the selected is the active, for now */
2637 airpcap_if_selected = airpcap_if_active;
2639 /* Create the new window */
2640 key_management_w = window_new(GTK_WINDOW_TOPLEVEL, "Decryption Key Management");
2642 gtk_container_set_border_width (GTK_CONTAINER (key_management_w), 5);
2643 gtk_window_set_position (GTK_WINDOW (key_management_w),
2644 GTK_WIN_POS_CENTER);
2646 #if GTK_MAJOR_VERSION >= 2
2647 gtk_window_set_resizable (GTK_WINDOW (key_management_w), FALSE);
2648 gtk_window_set_type_hint (GTK_WINDOW (key_management_w), GDK_WINDOW_TYPE_HINT_DIALOG);
2650 gtk_window_set_policy(GTK_WINDOW(key_management_w), FALSE, FALSE, TRUE);
2653 main_box = gtk_vbox_new (FALSE, 0);
2654 gtk_widget_set_name (main_box, "main_box");
2655 gtk_widget_show (main_box);
2656 gtk_container_add (GTK_CONTAINER (key_management_w), main_box);
2658 keys_fr = gtk_frame_new (NULL);
2659 gtk_widget_set_name (keys_fr, "keys_fr");
2660 gtk_widget_show (keys_fr);
2661 gtk_box_pack_start (GTK_BOX (main_box), keys_fr, FALSE, FALSE, 0);
2662 gtk_container_set_border_width (GTK_CONTAINER (keys_fr), 10);
2664 keys_al = gtk_alignment_new (0.5, 0.5, 1, 1);
2665 gtk_widget_set_name (keys_al, "keys_al");
2666 gtk_widget_show (keys_al);
2667 gtk_container_add (GTK_CONTAINER (keys_fr), keys_al);
2668 gtk_container_set_border_width (GTK_CONTAINER (keys_al), 5);
2670 #if GTK_MAJOR_VERSION >= 2
2671 gtk_alignment_set_padding (GTK_ALIGNMENT (keys_al), 0, 0, 12, 0);
2673 gtk_alignment_set (GTK_ALIGNMENT (keys_al), 0, 0, 12, 0);
2676 keys_h_sub_box = gtk_vbox_new (FALSE, 0);
2677 gtk_widget_set_name (keys_h_sub_box, "keys_h_sub_box");
2678 gtk_widget_show (keys_h_sub_box);
2679 gtk_container_add (GTK_CONTAINER (keys_al), keys_h_sub_box);
2681 enable_decryption_tb = gtk_table_new (1, 2, FALSE);
2682 gtk_widget_set_name (enable_decryption_tb, "enable_decryption_tb");
2683 gtk_widget_show (enable_decryption_tb);
2684 gtk_box_pack_start (GTK_BOX (keys_h_sub_box), enable_decryption_tb, FALSE,
2686 gtk_table_set_col_spacings (GTK_TABLE (enable_decryption_tb), 6);
2688 enable_decryption_lb = gtk_label_new ("Select Decryption Mode");
2689 gtk_widget_set_name (enable_decryption_lb, "enable_decryption_lb");
2690 gtk_widget_show (enable_decryption_lb);
2691 gtk_table_attach (GTK_TABLE (enable_decryption_tb), enable_decryption_lb, 1,
2692 2, 0, 1, (GtkAttachOptions) (GTK_FILL),
2693 (GtkAttachOptions) (0), 0, 0);
2694 gtk_misc_set_alignment (GTK_MISC (enable_decryption_lb), 0, 0.5);
2696 enable_decryption_cb = gtk_combo_new ();
2697 gtk_widget_set_name (enable_decryption_cb, "enable_decryption_cb");
2698 gtk_widget_show (enable_decryption_cb);
2699 gtk_table_attach (GTK_TABLE (enable_decryption_tb), enable_decryption_cb, 0,
2700 1, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0),
2702 #if GTK_MAJOR_VERSION >= 2
2703 gtk_widget_set_size_request (enable_decryption_cb, 83, -1);
2705 gtk_widget_set_usize (enable_decryption_cb, 83, -1);
2707 update_decryption_mode_list(enable_decryption_cb);
2709 enable_decryption_en = GTK_COMBO (enable_decryption_cb)->entry;
2710 gtk_widget_set_name (enable_decryption_en, "enable_decryption_en");
2711 gtk_widget_show (enable_decryption_en);
2712 gtk_editable_set_editable (GTK_EDITABLE (enable_decryption_en), FALSE);
2713 GTK_WIDGET_UNSET_FLAGS (enable_decryption_en, GTK_CAN_FOCUS);
2715 /* Set correct decryption mode!!!! */
2716 update_decryption_mode_cm(enable_decryption_cb);
2718 keys_v_sub_box = gtk_hbox_new (FALSE, 0);
2719 gtk_widget_set_name (keys_v_sub_box, "keys_v_sub_box");
2720 gtk_widget_show (keys_v_sub_box);
2721 gtk_box_pack_start (GTK_BOX (keys_h_sub_box), keys_v_sub_box, TRUE, TRUE, 0);
2723 keys_scrolled_w = gtk_scrolled_window_new (NULL, NULL);
2724 gtk_widget_set_name (keys_scrolled_w, "keys_scrolled_w");
2725 gtk_widget_show (keys_scrolled_w);
2726 gtk_box_pack_start (GTK_BOX (keys_v_sub_box), keys_scrolled_w, TRUE, TRUE,
2728 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (keys_scrolled_w), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
2730 #ifdef HAVE_AIRPDCAP
2731 key_ls = gtk_clist_new (3);
2733 key_ls = gtk_clist_new (2);
2736 gtk_widget_set_name (key_ls, "key_ls");
2737 gtk_widget_show (key_ls);
2739 gtk_container_add (GTK_CONTAINER (keys_scrolled_w), key_ls);
2740 gtk_clist_set_column_width (GTK_CLIST (key_ls), 0, 54);
2741 gtk_clist_set_column_width (GTK_CLIST (key_ls), 1, 113);
2742 #ifdef HAVE_AIRPDCAP
2743 gtk_clist_set_column_width (GTK_CLIST (key_ls), 2, 80);
2745 gtk_clist_column_titles_show (GTK_CLIST (key_ls));
2746 gtk_clist_set_shadow_type (GTK_CLIST (key_ls), GTK_SHADOW_ETCHED_IN);
2747 gtk_clist_set_column_justification(GTK_CLIST (key_ls),0,GTK_JUSTIFY_CENTER);
2749 key_list_decryption_type_col_lb = gtk_label_new ("Type");
2750 gtk_widget_set_name (key_list_decryption_type_col_lb,
2751 "key_list_decryption_type_col_lb");
2752 gtk_widget_show (key_list_decryption_type_col_lb);
2753 gtk_clist_set_column_widget (GTK_CLIST (key_ls), 0, key_list_decryption_type_col_lb);
2755 key_list_decryption_key_col_lb = gtk_label_new ("Key");
2756 gtk_widget_set_name (key_list_decryption_key_col_lb,
2757 "key_list_decryption_key_col_lb");
2758 gtk_widget_show (key_list_decryption_key_col_lb);
2759 gtk_clist_set_column_widget (GTK_CLIST (key_ls), 1,
2760 key_list_decryption_key_col_lb);
2762 #ifdef HAVE_AIRPDCAP
2763 key_ls_decryption_ssid_col_lb = gtk_label_new ("SSID");
2764 gtk_widget_set_name (key_ls_decryption_ssid_col_lb,
2765 "key_ls_decryption_ssid_col_lb");
2766 gtk_widget_show (key_ls_decryption_ssid_col_lb);
2767 gtk_clist_set_column_widget (GTK_CLIST (key_ls), 2,
2768 key_ls_decryption_ssid_col_lb);
2772 key_v_button_box = gtk_vbutton_box_new ();
2773 gtk_widget_set_name (key_v_button_box, "key_v_button_box");
2774 gtk_widget_show (key_v_button_box);
2775 gtk_box_pack_start (GTK_BOX (keys_v_sub_box), key_v_button_box, FALSE, TRUE,
2778 add_new_key_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_NEW);
2779 gtk_widget_set_name (add_new_key_bt, "add_new_key_bt");
2780 gtk_widget_show (add_new_key_bt);
2781 gtk_container_add (GTK_CONTAINER (key_v_button_box), add_new_key_bt);
2782 GTK_WIDGET_SET_FLAGS (add_new_key_bt, GTK_CAN_DEFAULT);
2784 edit_key_bt = BUTTON_NEW_FROM_STOCK(WIRESHARK_STOCK_EDIT);
2785 gtk_widget_set_name (edit_key_bt, "edit_key_bt");
2786 gtk_widget_show (edit_key_bt);
2787 gtk_container_add (GTK_CONTAINER (key_v_button_box), edit_key_bt);
2788 GTK_WIDGET_SET_FLAGS (edit_key_bt, GTK_CAN_DEFAULT);
2790 remove_key_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_DELETE);
2791 gtk_widget_set_name (remove_key_bt, "remove_key_bt");
2792 gtk_widget_show (remove_key_bt);
2793 gtk_container_add (GTK_CONTAINER (key_v_button_box), remove_key_bt);
2794 GTK_WIDGET_SET_FLAGS (remove_key_bt, GTK_CAN_DEFAULT);
2796 move_key_up_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_GO_UP);
2797 gtk_widget_set_name (move_key_up_bt, "move_key_up_bt");
2798 gtk_widget_show (move_key_up_bt);
2799 gtk_container_add (GTK_CONTAINER (key_v_button_box), move_key_up_bt);
2800 GTK_WIDGET_SET_FLAGS (move_key_up_bt, GTK_CAN_DEFAULT);
2802 move_key_down_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_GO_DOWN);
2803 gtk_widget_set_name (move_key_down_bt, "move_key_down_bt");
2804 gtk_widget_show (move_key_down_bt);
2805 gtk_container_add (GTK_CONTAINER (key_v_button_box), move_key_down_bt);
2806 GTK_WIDGET_SET_FLAGS (move_key_down_bt, GTK_CAN_DEFAULT);
2808 keys_frame_lb = gtk_label_new ("<b>Decryption Keys</b>");
2809 gtk_widget_set_name (keys_frame_lb, "keys_frame_lb");
2810 gtk_widget_show (keys_frame_lb);
2812 #if GTK_MAJOR_VERSION >= 2
2813 gtk_frame_set_label_widget (GTK_FRAME (keys_fr), keys_frame_lb);
2814 gtk_label_set_use_markup (GTK_LABEL (keys_frame_lb), TRUE);
2816 gtk_frame_set_label (GTK_FRAME (keys_fr), "Decryption Keys");
2819 low_buttons_h_box = gtk_hbox_new (FALSE, 0);
2820 gtk_widget_set_name (low_buttons_h_box, "low_buttons_h_box");
2821 gtk_widget_show (low_buttons_h_box);
2822 gtk_box_pack_end (GTK_BOX (main_box), low_buttons_h_box, FALSE, FALSE, 0);
2824 left_h_button_box = gtk_hbutton_box_new ();
2825 gtk_widget_set_name (left_h_button_box, "left_h_button_box");
2826 gtk_widget_show (left_h_button_box);
2827 gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
2830 #if GTK_MAJOR_VERSION >= 2
2831 reset_configuration_bt = gtk_button_new_with_mnemonic ("Reset Configuration");
2833 reset_configuration_bt = gtk_button_new_with_label ("Reset Configuration");
2835 gtk_widget_set_name (reset_configuration_bt, "reset_configuration_bt");
2836 /* gtk_widget_show (reset_configuration_bt); */
2837 gtk_container_add (GTK_CONTAINER (left_h_button_box),
2838 reset_configuration_bt);
2839 GTK_WIDGET_SET_FLAGS (reset_configuration_bt, GTK_CAN_DEFAULT);
2841 right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
2842 gtk_widget_set_name (right_h_button_box, "right_h_button_box");
2843 gtk_widget_show (right_h_button_box);
2844 gtk_box_pack_end (GTK_BOX (low_buttons_h_box), right_h_button_box, FALSE,
2846 gtk_button_box_set_layout (GTK_BUTTON_BOX (right_h_button_box),
2849 ok_bt = OBJECT_GET_DATA(right_h_button_box, GTK_STOCK_OK);
2850 apply_bt = OBJECT_GET_DATA(right_h_button_box, GTK_STOCK_APPLY);
2851 cancel_bt = OBJECT_GET_DATA(right_h_button_box, GTK_STOCK_CANCEL);
2853 /* Connect the callbacks */
2854 SIGNAL_CONNECT (key_management_w, "delete_event", window_delete_event_cb, key_management_w);
2855 SIGNAL_CONNECT (key_management_w, "destroy", on_key_management_destroy, key_management_w);
2856 SIGNAL_CONNECT (add_new_key_bt, "clicked",on_add_new_key_bt_clicked, key_management_w);
2857 SIGNAL_CONNECT (remove_key_bt, "clicked",on_remove_key_bt_clicked, key_management_w);
2858 SIGNAL_CONNECT (edit_key_bt, "clicked",on_edit_key_bt_clicked, key_management_w);
2859 SIGNAL_CONNECT (move_key_up_bt, "clicked",on_move_key_up_bt_clicked, key_management_w);
2860 SIGNAL_CONNECT (move_key_down_bt, "clicked",on_move_key_down_bt_clicked, key_management_w);
2861 SIGNAL_CONNECT (reset_configuration_bt, "clicked",on_reset_configuration_bt_clicked, key_management_w);
2862 SIGNAL_CONNECT (apply_bt, "clicked",on_key_management_apply_bt_clicked, key_management_w);
2863 SIGNAL_CONNECT (ok_bt, "clicked",on_key_management_ok_bt_clicked, key_management_w);
2864 SIGNAL_CONNECT (cancel_bt, "clicked",on_key_management_cancel_bt_clicked, key_management_w);
2865 SIGNAL_CONNECT (key_ls, "select_row",on_key_ls_select_row, key_management_w);
2866 SIGNAL_CONNECT (key_ls, "unselect_row",on_key_ls_unselect_row, key_management_w);
2867 SIGNAL_CONNECT (key_ls, "click_column",on_key_ls_click_column, key_management_w);
2869 /* Different because the window will be closed ... */
2870 /*window_set_cancel_button(key_management_w, ok_bt, window_cancel_button_cb);
2871 window_set_cancel_button(key_management_w, cancel_bt, window_cancel_button_cb);*/
2873 OBJECT_SET_DATA (key_management_w, AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY,key_ls_selected_item);
2875 /* Store pointers to all widgets, for use by lookup_widget(). */
2876 OBJECT_SET_DATA (key_management_w, AIRPCAP_ADVANCED_WEP_DECRYPTION_KEY, enable_decryption_en);
2877 OBJECT_SET_DATA (key_management_w, AIRPCAP_ADVANCED_KEYLIST_KEY, key_ls);
2878 OBJECT_SET_DATA (key_management_w, AIRPCAP_ADVANCED_OK_KEY, ok_bt);
2879 OBJECT_SET_DATA (key_management_w, AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt);
2882 * I will need the toolbar and the main widget in some callback,
2883 * so I will add the toolbar pointer to the key_management_w
2885 OBJECT_SET_DATA(key_management_w,AIRPCAP_TOOLBAR_KEY,toolbar);
2886 OBJECT_SET_DATA (key_management_w, AIRPCAP_TOOLBAR_DECRYPTION_KEY, toolbar_decryption_ck);
2888 /* FIRST OF ALL, CHECK THE KEY COLLECTIONS */
2890 * This will read the decryption keys from the preferences file, and will store
2891 * them into the registry...
2893 if (!airpcap_check_decryption_keys(airpcap_if_list))
2895 /* Ask the user what to do ...*/
2896 airpcap_keys_check_w(key_management_w,NULL);
2898 else /* Keys from lists are equals, or wireshark has got no keys */
2900 airpcap_load_decryption_keys(airpcap_if_list);
2901 airpcap_fill_key_list(key_ls);
2902 /* At the end, so that it appears completely all together ... */
2903 gtk_widget_show (key_management_w);
2908 * Callback for the OK button 'clicked' in the Decryption Key Management window.
2911 on_key_management_ok_bt_clicked(GtkWidget *button, gpointer data _U_)
2913 /* advenced window */
2914 GtkWidget *key_management_w;
2916 /* widgets in the toolbar */
2918 GtkWidget *toolbar_cm;
2922 GtkWidget *decryption_en;
2924 char* decryption_mode_string = NULL;
2926 /* retrieve main window */
2927 key_management_w = GTK_WIDGET(data);
2928 decryption_en = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_WEP_DECRYPTION_KEY));
2929 key_ls = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY));
2930 toolbar = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_TOOLBAR_KEY));
2931 toolbar_cm = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_TOOLBAR_DECRYPTION_KEY));
2933 /* Set the Decryption Mode */
2934 if (g_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK) == 0)
2936 set_wireshark_decryption(TRUE);
2937 if (!set_airpcap_decryption(FALSE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
2939 else if (g_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
2941 set_wireshark_decryption(FALSE);
2942 if (!set_airpcap_decryption(TRUE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
2944 else if (g_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_NONE) == 0)
2946 set_wireshark_decryption(FALSE);
2947 if (!set_airpcap_decryption(FALSE)) simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, CANT_SAVE_ERR_STR);
2950 /* Save the configuration */
2951 airpcap_read_and_save_decryption_keys_from_clist(key_ls,airpcap_if_selected,airpcap_if_list); /* This will save the keys for every adapter */
2953 /* The update will make redissect al the packets... no need to do it here again */
2954 update_decryption_mode_cm(toolbar_cm);
2956 /* Redissect all the packets, and re-evaluate the display filter. */
2957 /** cf_redissect_packets(&cfile); **/
2959 /* Save the preferences to preferences file!!! */
2960 write_prefs_to_file();
2962 /* If interface active is airpcap, set sensitive TRUE for airpcap toolbar */
2963 if (airpcap_if_list != NULL && g_list_length(airpcap_if_list) > 0)
2965 if (airpcap_if_active != NULL)
2967 if ( get_airpcap_if_from_name(airpcap_if_list,airpcap_if_active->description) != NULL)
2969 airpcap_set_toolbar_start_capture(airpcap_if_active);
2973 airpcap_set_toolbar_stop_capture(airpcap_if_active);
2978 gtk_widget_destroy(key_management_w);
2982 * Callback for the CANCEL button 'clicked' in the Decryption Key Management window.
2985 on_key_management_cancel_bt_clicked(GtkWidget *button, gpointer data _U_)
2987 PAirpcapHandle ad = NULL;
2989 /* Retrieve object data */
2990 GtkWidget *key_management_w;
2991 GtkWidget *cancel_bt;
2995 /* widgets in the toolbar */
2997 *toolbar_decryption_ck,
3000 /* Row selected structure */
3001 airpcap_key_ls_selected_info_t *selected_item;
3003 /* Retrieve the GUI object pointers */
3004 key_management_w = GTK_WIDGET(data);
3005 cancel_bt = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_CANCEL_KEY));
3006 ok_bt = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_OK_KEY));
3007 key_ls = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY));
3008 key_management_bt = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEY));
3010 toolbar = GTK_WIDGET(OBJECT_GET_DATA(key_management_w,AIRPCAP_TOOLBAR_KEY));
3012 /* retrieve toolbar info */
3013 toolbar_decryption_ck = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_DECRYPTION_KEY));
3015 /* Retrieve the selected row item pointer... */
3016 selected_item = (airpcap_key_ls_selected_info_t*)(OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY));
3018 g_free(selected_item);
3020 gtk_widget_destroy(key_management_w);
3024 * Dialog box that appears whenever keys are not consistent between wireshark and AirPcap
3027 airpcap_keys_check_w(GtkWidget *w, gpointer data)
3029 GtkWidget *keys_check_w;
3030 GtkWidget *main_v_box;
3031 GtkWidget *warning_lb;
3032 GtkWidget *radio_tb;
3034 GSList *radio_bt_group = NULL;
3035 GtkWidget *merge_rb;
3036 GtkWidget *import_rb;
3037 GtkWidget *ignore_rb;
3039 GtkWidget *merge_lb;
3040 GtkWidget *import_lb;
3041 GtkWidget *ignore_lb;
3042 GtkWidget *low_h_button_box;
3044 GtkWidget *cancel_bt;
3046 keys_check_w = window_new (GTK_WINDOW_TOPLEVEL, "Decryption Key Warning");
3047 gtk_widget_set_name (keys_check_w, "keys_check_w");
3048 #if GTK_MAJOR_VERSION >= 2
3049 gtk_window_set_resizable (GTK_WINDOW (keys_check_w), FALSE);
3051 gtk_window_set_policy(GTK_WINDOW(keys_check_w), FALSE, FALSE, TRUE);
3054 main_v_box = gtk_vbox_new (FALSE, 0);
3055 gtk_widget_set_name (main_v_box, "main_v_box");
3056 gtk_widget_show (main_v_box);
3057 gtk_container_add (GTK_CONTAINER (keys_check_w), main_v_box);
3059 #if GTK_MAJOR_VERSION >= 2
3060 warning_lb = gtk_label_new("<b>WARNING!</b> Decryption keys specified in Wireshark's preferences file differ from those specified for the AirPcap adapter(s). You can choose to:");
3061 gtk_label_set_use_markup (GTK_LABEL (warning_lb), TRUE);
3063 warning_lb = gtk_label_new("WARNING! Decryption keys specified in Wireshark's preferences file differ from those specified for the AirPcap adapter(s). You can choose to:");
3065 gtk_widget_set_name (warning_lb, "warning_lb");
3066 gtk_widget_show (warning_lb);
3067 gtk_box_pack_start (GTK_BOX (main_v_box), warning_lb, FALSE, FALSE, 0);
3068 gtk_label_set_justify (GTK_LABEL (warning_lb), GTK_JUSTIFY_CENTER);
3069 gtk_label_set_line_wrap (GTK_LABEL (warning_lb), TRUE);
3071 radio_tb = gtk_table_new (4, 2, FALSE);
3072 gtk_widget_set_name (radio_tb, "radio_tb");
3073 gtk_widget_show (radio_tb);
3074 gtk_box_pack_start (GTK_BOX (main_v_box), radio_tb, TRUE, FALSE, 0);
3075 gtk_container_set_border_width (GTK_CONTAINER (radio_tb), 5);
3076 gtk_table_set_col_spacings (GTK_TABLE (radio_tb), 8);
3078 #if GTK_MAJOR_VERSION >= 2
3079 keep_rb = gtk_radio_button_new_with_mnemonic (NULL, "Keep");
3081 keep_rb = gtk_radio_button_new_with_label (NULL, "Keep");
3083 gtk_widget_set_name (keep_rb, "keep_rb");
3084 gtk_widget_show (keep_rb);
3085 gtk_table_attach (GTK_TABLE (radio_tb), keep_rb, 0, 1, 0, 1,
3086 (GtkAttachOptions) (GTK_FILL),
3087 (GtkAttachOptions) (0), 0, 0);
3088 gtk_radio_button_set_group (GTK_RADIO_BUTTON (keep_rb), radio_bt_group);
3089 #if GTK_MAJOR_VERSION >= 2
3090 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (keep_rb));
3092 radio_bt_group = gtk_radio_button_group (GTK_RADIO_BUTTON (keep_rb));
3095 #if GTK_MAJOR_VERSION >= 2
3096 merge_rb = gtk_radio_button_new_with_mnemonic (NULL, "Merge");
3098 merge_rb = gtk_radio_button_new_with_label (NULL, "Merge");
3100 gtk_widget_set_name (merge_rb, "merge_rb");
3101 gtk_widget_show (merge_rb);
3102 gtk_table_attach (GTK_TABLE (radio_tb), merge_rb, 0, 1, 1, 2,
3103 (GtkAttachOptions) (GTK_FILL),
3104 (GtkAttachOptions) (0), 0, 0);
3105 gtk_radio_button_set_group (GTK_RADIO_BUTTON (merge_rb), radio_bt_group);
3106 #if GTK_MAJOR_VERSION >= 2
3107 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (merge_rb));
3109 radio_bt_group = gtk_radio_button_group (GTK_RADIO_BUTTON (merge_rb));
3112 #if GTK_MAJOR_VERSION >= 2
3113 import_rb = gtk_radio_button_new_with_mnemonic (NULL, "Import");
3115 import_rb = gtk_radio_button_new_with_label (NULL, "Import");
3117 gtk_widget_set_name (import_rb, "import_rb");
3118 gtk_widget_show (import_rb);
3119 gtk_table_attach (GTK_TABLE (radio_tb), import_rb, 0, 1, 2, 3,
3120 (GtkAttachOptions) (GTK_FILL),
3121 (GtkAttachOptions) (0), 0, 0);
3122 gtk_radio_button_set_group (GTK_RADIO_BUTTON (import_rb), radio_bt_group);
3123 #if GTK_MAJOR_VERSION >= 2
3124 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (import_rb));
3126 radio_bt_group = gtk_radio_button_group (GTK_RADIO_BUTTON (import_rb));
3129 #if GTK_MAJOR_VERSION >= 2
3130 ignore_rb = gtk_radio_button_new_with_mnemonic (NULL, "Ignore");
3132 ignore_rb = gtk_radio_button_new_with_label (NULL, "Ignore");
3134 gtk_widget_set_name (ignore_rb, "ignore_rb");
3135 gtk_widget_show (ignore_rb);
3136 gtk_table_attach (GTK_TABLE (radio_tb), ignore_rb, 0, 1, 3, 4,
3137 (GtkAttachOptions) (GTK_FILL),
3138 (GtkAttachOptions) (0), 0, 0);
3139 gtk_radio_button_set_group (GTK_RADIO_BUTTON (ignore_rb), radio_bt_group);
3140 #if GTK_MAJOR_VERSION >= 2
3141 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (ignore_rb));
3143 radio_bt_group = gtk_radio_button_group (GTK_RADIO_BUTTON (ignore_rb));
3148 ("Use Wireshark keys, thus overwriting AirPcap adapter(s) ones.");
3149 gtk_widget_set_name (keep_lb, "keep_lb");
3150 gtk_widget_show (keep_lb);
3151 gtk_table_attach (GTK_TABLE (radio_tb), keep_lb, 1, 2, 0, 1,
3152 (GtkAttachOptions) (GTK_FILL),
3153 (GtkAttachOptions) (0), 0, 0);
3154 gtk_misc_set_alignment (GTK_MISC (keep_lb), 0, 0.5);
3156 merge_lb = gtk_label_new ("Merge Wireshark and AirPcap adapter(s) keys.");
3157 gtk_widget_set_name (merge_lb, "merge_lb");
3158 gtk_widget_show (merge_lb);
3159 gtk_table_attach (GTK_TABLE (radio_tb), merge_lb, 1, 2, 1, 2,
3160 (GtkAttachOptions) (GTK_FILL),
3161 (GtkAttachOptions) (0), 0, 0);
3162 gtk_misc_set_alignment (GTK_MISC (merge_lb), 0, 0.5);
3166 ("Use AirPcap adapter(s) keys, thus overwriting Wireshark ones.");
3167 gtk_widget_set_name (import_lb, "import_lb");
3168 gtk_widget_show (import_lb);
3169 gtk_table_attach (GTK_TABLE (radio_tb), import_lb, 1, 2, 2, 3,
3170 (GtkAttachOptions) (GTK_FILL),
3171 (GtkAttachOptions) (0), 0, 0);
3172 gtk_misc_set_alignment (GTK_MISC (import_lb), 0, 0.5);
3176 ("Keep using different set of keys. Remember that in this case, this dialog box will appear whenever you will attempt to modify/add/remove decryption keys.");
3177 gtk_widget_set_name (ignore_lb, "ignore_lb");
3178 gtk_widget_show (ignore_lb);
3179 gtk_table_attach (GTK_TABLE (radio_tb), ignore_lb, 1, 2, 3, 4,
3180 (GtkAttachOptions) (GTK_FILL),
3181 (GtkAttachOptions) (0), 0, 0);
3182 gtk_label_set_line_wrap (GTK_LABEL (ignore_lb), TRUE);
3183 gtk_misc_set_alignment (GTK_MISC (ignore_lb), 0, 0.5);
3185 low_h_button_box = gtk_hbutton_box_new ();
3186 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
3187 gtk_widget_show (low_h_button_box);
3188 gtk_box_pack_start (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE,
3190 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
3191 GTK_BUTTONBOX_SPREAD);
3193 #if GTK_MAJOR_VERSION >= 2
3194 ok_bt = gtk_button_new_with_mnemonic ("OK");
3196 ok_bt = gtk_button_new_with_label ("OK");
3198 gtk_widget_set_name (ok_bt, "ok_bt");
3199 gtk_widget_show (ok_bt);
3200 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
3201 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
3203 #if GTK_MAJOR_VERSION >= 2
3204 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
3206 cancel_bt = gtk_button_new_with_label ("Cancel");
3208 gtk_widget_set_name (cancel_bt, "cancel_bt");
3209 gtk_widget_show (cancel_bt);
3210 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
3211 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
3213 /* Store pointers to all widgets, for use by lookup_widget(). */
3214 SIGNAL_CONNECT (ok_bt, "clicked", on_keys_check_ok_bt_clicked, keys_check_w);
3215 SIGNAL_CONNECT (cancel_bt, "clicked", on_keys_check_cancel_bt_clicked, keys_check_w);
3216 SIGNAL_CONNECT (keys_check_w, "destroy", on_keys_check_w_destroy, keys_check_w);
3218 /* Store pointers to all widgets, for use by lookup_widget(). */
3219 OBJECT_SET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY,w);
3220 OBJECT_SET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY,merge_rb);
3221 OBJECT_SET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY,keep_rb);
3222 OBJECT_SET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY,import_rb);
3223 OBJECT_SET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY,ignore_rb);
3224 OBJECT_SET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_GROUP_KEY,radio_bt_group);
3226 gtk_widget_set_sensitive(top_level,FALSE);
3227 gtk_widget_show(keys_check_w);
3231 on_keys_check_cancel_bt_clicked (GtkWidget *button, gpointer user_data)
3233 GtkWidget *key_management_w;
3234 GtkWidget *keys_check_w;
3237 keys_check_w = GTK_WIDGET(user_data);
3239 key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY);
3241 /* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading,
3242 and is not NULL if it was called when the Key Management widget has been clicked */
3243 if (key_management_w != NULL)
3246 key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
3247 airpcap_fill_key_list(key_ls);
3248 gtk_widget_show (key_management_w);
3251 gtk_widget_destroy(keys_check_w);
3255 on_keys_check_ok_bt_clicked (GtkWidget *button, gpointer user_data)
3257 GtkWidget *key_management_w;
3258 GtkWidget *keys_check_w;
3260 GtkWidget *merge_rb,
3265 keys_check_w = GTK_WIDGET(user_data);
3267 key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY);
3268 merge_rb = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY);
3269 keep_rb = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY);
3270 import_rb = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY);
3271 ignore_rb = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY);
3273 /* Find out which radio button is selected and call the correct function */
3274 if (GTK_TOGGLE_BUTTON(merge_rb)->active) on_merge_bt_clicked (merge_rb,keys_check_w);
3275 else if (GTK_TOGGLE_BUTTON(keep_rb)->active) on_keep_bt_clicked (keep_rb,keys_check_w);
3276 else if (GTK_TOGGLE_BUTTON(import_rb)->active) on_import_bt_clicked (import_rb,keys_check_w);
3277 else if (GTK_TOGGLE_BUTTON(ignore_rb)->active) on_ignore_bt_clicked (ignore_rb,keys_check_w);
3278 else on_keys_check_cancel_bt_clicked(NULL,keys_check_w);
3282 on_keys_check_w_destroy (GtkWidget *w, gpointer user_data)
3284 gtk_widget_set_sensitive(top_level,TRUE);
3285 gtk_widget_set_sensitive(GTK_WIDGET(user_data),TRUE);
3289 on_keep_bt_clicked (GtkWidget *button, gpointer user_data)
3291 GtkWidget *key_management_w;
3292 GtkWidget *keys_check_w;
3293 GtkWidget *key_ls=NULL;
3295 GList* wireshark_keys=NULL;
3296 guint n_wireshark_keys = 0;
3298 GList* merged_keys=NULL;
3299 guint n_merged_keys = 0;
3302 guint n_total_keys=0;
3304 keys_check_w = GTK_WIDGET(user_data);
3306 key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY);
3308 n_adapters = g_list_length(airpcap_if_list);
3310 /* Retrieve Wireshark keys */
3311 wireshark_keys = get_wireshark_keys();
3312 n_wireshark_keys = g_list_length(wireshark_keys);
3313 n_total_keys += n_wireshark_keys;
3315 merged_keys = merge_key_list(wireshark_keys,NULL);
3316 n_merged_keys = g_list_length(merged_keys);
3318 /* Set up this new list as default for Wireshark and Adapters... */
3319 airpcap_save_decryption_keys(merged_keys,airpcap_if_list);
3321 /* Write the preferences to the preferences file (here is not needed, by the way)*/
3322 write_prefs_to_file();
3324 /* Free the memory */
3325 free_key_list(wireshark_keys);
3327 /* Close the window */
3328 gtk_widget_destroy(keys_check_w);
3330 /* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading,
3331 and is not NULL if it was called when the Key Management widget has been clicked */
3332 if (key_management_w != NULL)
3335 key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
3336 airpcap_fill_key_list(key_ls);
3337 gtk_widget_show (key_management_w);
3342 on_merge_bt_clicked (GtkWidget * button, gpointer user_data)
3344 GtkWidget *key_management_w;
3345 GtkWidget *keys_check_w;
3348 guint n_adapters = 0;
3349 guint n_wireshark_keys = 0;
3350 guint n_driver_keys = 0;
3351 guint n_curr_adapter_keys = 0;
3352 guint n_total_keys = 0;
3353 guint n_merged_keys = 0;
3356 GList* wireshark_keys=NULL;
3357 GList* driver_keys=NULL;
3358 GList* current_adapter_keys=NULL;
3359 GList* merged_list = NULL;
3360 GList* merged_list_tmp = NULL;
3362 airpcap_if_info_t* curr_adapter;
3364 keys_check_w = GTK_WIDGET(user_data);
3366 key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY);
3368 n_adapters = g_list_length(airpcap_if_list);
3370 /* Retrieve Wireshark keys */
3371 wireshark_keys = get_wireshark_keys();
3372 n_wireshark_keys = g_list_length(wireshark_keys);
3373 n_total_keys += n_wireshark_keys;
3375 merged_list = merge_key_list(wireshark_keys,NULL);
3377 /* Retrieve AirPcap driver's keys */
3378 driver_keys = get_airpcap_driver_keys();
3379 n_driver_keys = g_list_length(driver_keys);
3380 n_total_keys += n_driver_keys;
3382 merged_list = merge_key_list(merged_list,driver_keys);
3384 /* NOW wireshark_keys and driver_keys ARE no more needed... at the end, we will have to free them! */
3385 for (i = 0; i<n_adapters; i++)
3387 curr_adapter = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i);
3388 current_adapter_keys = get_airpcap_device_keys(curr_adapter);
3389 n_curr_adapter_keys = g_list_length(current_adapter_keys);
3391 merged_list_tmp = merged_list;
3392 merged_list = merge_key_list(merged_list_tmp,current_adapter_keys);
3393 free_key_list(merged_list_tmp);
3395 n_total_keys += n_curr_adapter_keys;
3398 n_merged_keys = g_list_length(merged_list);
3400 /* Set up this new list as default for Wireshark and Adapters... */
3401 airpcap_save_decryption_keys(merged_list,airpcap_if_list);
3403 /* Write the preferences to the preferences file */
3404 write_prefs_to_file();
3406 free_key_list(wireshark_keys);
3407 free_key_list(driver_keys);
3409 gtk_widget_destroy(keys_check_w);
3411 /* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading,
3412 and is not NULL if it was called when the Key Management widget has been clicked */
3413 if (key_management_w != NULL)
3416 key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
3417 airpcap_fill_key_list(key_ls);
3418 gtk_widget_show (key_management_w);
3424 on_import_bt_clicked (GtkWidget * button, gpointer user_data)
3426 GtkWidget *key_management_w;
3427 GtkWidget *keys_check_w;
3430 guint n_adapters = 0;
3431 guint n_wireshark_keys = 0;
3432 guint n_driver_keys = 0;
3433 guint n_curr_adapter_keys = 0;
3434 guint n_total_keys = 0;
3435 guint n_merged_keys = 0;
3438 GList* wireshark_keys=NULL;
3439 GList* driver_keys=NULL;
3440 GList* current_adapter_keys=NULL;
3441 GList* merged_list = NULL;
3442 GList* merged_list_tmp = NULL;
3444 airpcap_if_info_t* curr_adapter;
3446 keys_check_w = GTK_WIDGET(user_data);
3448 key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY);
3450 n_adapters = g_list_length(airpcap_if_list);
3452 wireshark_keys = get_wireshark_keys();
3453 n_wireshark_keys = g_list_length(wireshark_keys);
3454 n_total_keys += n_wireshark_keys;
3456 /* Retrieve AirPcap driver's keys */
3457 driver_keys = get_airpcap_driver_keys();
3458 n_driver_keys = g_list_length(driver_keys);
3459 n_total_keys += n_driver_keys;
3461 merged_list = merge_key_list(merged_list,driver_keys);
3463 /* NOW wireshark_keys IS no more needed... at the end, we will have to free it! */
3464 for (i = 0; i<n_adapters; i++)
3466 curr_adapter = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i);
3467 current_adapter_keys = get_airpcap_device_keys(curr_adapter);
3468 n_curr_adapter_keys = g_list_length(current_adapter_keys);
3470 merged_list_tmp = merged_list;
3471 merged_list = merge_key_list(merged_list_tmp,current_adapter_keys);
3472 free_key_list(merged_list_tmp);
3474 n_total_keys += n_curr_adapter_keys;
3477 n_merged_keys = g_list_length(merged_list);
3479 /* Set up this new list as default for Wireshark and Adapters... */
3480 airpcap_save_decryption_keys(merged_list,airpcap_if_list);
3482 /* Write the preferences to the preferences file */
3483 write_prefs_to_file();
3485 free_key_list(wireshark_keys);
3486 free_key_list(driver_keys);
3488 gtk_widget_destroy(keys_check_w);
3490 /* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading,
3491 and is not NULL if it was called when the Key Management widget has been clicked */
3492 if (key_management_w != NULL)
3495 key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
3496 airpcap_fill_key_list(key_ls);
3497 gtk_widget_show (key_management_w);
3503 on_ignore_bt_clicked (GtkWidget * button, gpointer user_data)
3505 GtkWidget *key_management_w;
3506 GtkWidget *keys_check_w;
3509 keys_check_w = GTK_WIDGET(user_data);
3511 key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY);
3513 /* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading,
3514 and is not NULL if it was called when the Key Management widget has been clicked */
3515 if (key_management_w != NULL)
3518 key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY);
3519 airpcap_fill_key_list(key_ls);
3520 gtk_widget_show (key_management_w);
3523 gtk_widget_destroy(keys_check_w);
3527 #endif /* HAVE_AIRPCAP */