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.
34 /*#include <glib/gprintf.h> */
38 #include <epan/filesystem.h>
39 #include <epan/emem.h>
40 #include <epan/prefs.h>
41 #include <epan/prefs-int.h>
42 #include <epan/frequency-utils.h>
43 #include <epan/crypt/wep-wpadefs.h>
47 #include "../simple_dialog.h"
50 #include "gtk/dlg_utils.h"
51 #include "gtk/gui_utils.h"
52 #include "gtk/dfilter_expr_dlg.h"
53 #include "gtk/stock_icons.h"
54 #include "gtk/gtkglobals.h"
55 #include "gtk/help_dlg.h"
59 #include "airpcap_loader.h"
60 #include "airpcap_gui_utils.h"
61 #include "airpcap_dlg.h"
64 * This structure is used because we need to store infos about the currently selected
65 * row in the key list.
69 }airpcap_key_ls_selected_info_t;
72 * This function is used to write the preferences to the preferences file.
73 * It has the same behaviour as prefs_main_write() in prefs_dlg.c
76 write_prefs_to_file(void)
82 /* Create the directory that holds personal configuration files, if
84 if (create_persconffile_dir(&pf_dir_path) == -1) {
85 simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
86 "Can't create directory\n\"%s\"\nfor preferences file: %s.", pf_dir_path,
90 /* Write the preferencs out. */
91 err = write_prefs(&pf_path);
93 simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
94 "Can't open preferences file\n\"%s\": %s.", pf_path,
102 * Callback for the select row event in the key list widget
105 on_key_list_select_row(GtkTreeSelection *selection, gpointer data)
107 GtkWidget *add_new_key_bt, *edit_key_bt, *remove_key_bt;
108 GtkWidget *move_key_up_bt, *move_key_down_bt;
111 GtkTreePath *path, *path_up, *path_down;
113 add_new_key_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_NEW_KEY);
114 edit_key_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_EDIT_KEY);
115 remove_key_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_DELETE_KEY);
116 move_key_up_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_UP_KEY);
117 move_key_down_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_DOWN_KEY);
119 if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
120 path = gtk_tree_model_get_path(model, &iter);
121 path_up = gtk_tree_path_copy(path);
122 path_down = gtk_tree_path_copy(path);
123 gtk_tree_path_next(path_down);
125 if (gtk_tree_model_iter_n_children(model, NULL) >= MAX_ENCRYPTION_KEYS) {
126 gtk_widget_set_sensitive(add_new_key_bt, FALSE);
128 gtk_widget_set_sensitive(add_new_key_bt, TRUE);
131 gtk_widget_set_sensitive(edit_key_bt, TRUE);
132 gtk_widget_set_sensitive(remove_key_bt, TRUE);
134 /* ...and we have to use two different methods to figure out first/last because? */
135 if (gtk_tree_path_prev(path_up)) {
136 gtk_widget_set_sensitive(move_key_up_bt, TRUE);
138 gtk_widget_set_sensitive(move_key_up_bt, FALSE);
141 if (gtk_tree_model_get_iter(model, &iter, path_down)) {
142 gtk_widget_set_sensitive(move_key_down_bt, TRUE);
144 gtk_widget_set_sensitive(move_key_down_bt, FALSE);
147 gtk_tree_path_free(path);
148 gtk_tree_path_free(path_up);
149 gtk_tree_path_free(path_down);
151 gtk_widget_set_sensitive(add_new_key_bt, FALSE);
152 gtk_widget_set_sensitive(edit_key_bt, FALSE);
153 gtk_widget_set_sensitive(remove_key_bt, FALSE);
154 gtk_widget_set_sensitive(move_key_up_bt, FALSE);
155 gtk_widget_set_sensitive(move_key_down_bt, FALSE);
159 * Callback for the select row event in the key list widget
162 on_key_list_reorder(GtkTreeModel *model _U_, GtkTreePath *path _U_, GtkTreeIter *iter _U_, gpointer no _U_, gpointer data) {
163 GtkTreeSelection *selection;
165 selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
166 on_key_list_select_row(selection, data);
170 * Callback for the crc checkbox
173 on_fcs_ck_toggled(GtkWidget *w _U_, gpointer user_data _U_)
176 if (airpcap_if_selected != NULL)
178 if (airpcap_if_selected->IsFcsPresent)
180 airpcap_if_selected->IsFcsPresent = FALSE;
181 airpcap_if_selected->saved = FALSE;
185 airpcap_if_selected->IsFcsPresent = TRUE;
186 airpcap_if_selected->saved = FALSE;
192 * Callback for the wrong crc combo
195 on_edit_type_cb_changed(GtkWidget *w, gpointer data)
197 GtkWidget *edit_key_w;
198 GtkWidget *edit_ssid_te;
203 gchar* type_text = NULL;
205 edit_key_w = GTK_WIDGET(data);
208 edit_ssid_te = g_object_get_data(G_OBJECT(edit_key_w),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY);
209 key_lb = g_object_get_data(G_OBJECT(edit_key_w),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY);
210 ssid_lb = g_object_get_data(G_OBJECT(edit_key_w),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY);
212 type_text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
214 if (g_ascii_strcasecmp(type_text, ""))
217 * If it is a WEP key, no SSID is required! Gray out the entry text so
218 * it doesn't create confusion ...
220 if (g_ascii_strcasecmp(type_text,AIRPCAP_WEP_KEY_STRING) == 0)
222 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
224 * Maybe the user has already entered some text into the SSID field
225 * and then switched to WEP...
227 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),"");
228 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
229 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
231 else if (g_ascii_strcasecmp(type_text,AIRPCAP_WPA_BIN_KEY_STRING) == 0)
233 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
235 * Maybe the user has already entered some text into the SSID field
236 * and then switched to WPA...
238 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),"");
239 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
240 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
242 else if (g_ascii_strcasecmp(type_text,AIRPCAP_WPA_PWD_KEY_STRING) == 0)
244 gtk_widget_set_sensitive(edit_ssid_te,TRUE);
246 * Maybe the user has already entered some text into the SSID field
247 * and then switched to WPA...
249 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),"");
250 gtk_label_set_text(GTK_LABEL(key_lb),"Passphrase");
251 gtk_label_set_text(GTK_LABEL(ssid_lb),"SSID");
254 gtk_widget_show(edit_ssid_te);
260 * Callback for the wrong crc combo
263 on_add_type_cb_changed(GtkWidget *w, gpointer data)
265 GtkWidget *add_key_w;
266 GtkWidget *add_ssid_te;
271 gchar* type_text = NULL;
273 add_key_w = GTK_WIDGET(data);
276 add_ssid_te = g_object_get_data(G_OBJECT(add_key_w),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY);
277 key_lb = g_object_get_data(G_OBJECT(add_key_w),AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY);
278 ssid_lb = g_object_get_data(G_OBJECT(add_key_w),AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY);
280 type_text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
282 if (g_ascii_strcasecmp(type_text, ""))
285 * If it is a WEP key, no SSID is required! Gray out rhe entry text so
286 * it doesn't create confusion ...
288 if (g_ascii_strcasecmp(type_text,AIRPCAP_WEP_KEY_STRING) == 0)
290 gtk_widget_set_sensitive(add_ssid_te,FALSE);
292 * Maybe the user has already entered some text into the SSID field
293 * and then switched to WEP...
295 gtk_entry_set_text(GTK_ENTRY(add_ssid_te),"");
296 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
297 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
299 else if (g_ascii_strcasecmp(type_text,AIRPCAP_WPA_BIN_KEY_STRING) == 0)
301 gtk_widget_set_sensitive(add_ssid_te,FALSE);
303 * Maybe the user has already entered some text into the SSID field
304 * and then switched to WPA...
306 gtk_entry_set_text(GTK_ENTRY(add_ssid_te),"");
307 gtk_label_set_text(GTK_LABEL(key_lb),"Key");
308 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
310 else if (g_ascii_strcasecmp(type_text,AIRPCAP_WPA_PWD_KEY_STRING) == 0)
312 gtk_widget_set_sensitive(add_ssid_te,TRUE);
314 * Maybe the user has already entered some text into the SSID field
315 * and then switched to WPA...
317 gtk_entry_set_text(GTK_ENTRY(add_ssid_te),"");
318 gtk_label_set_text(GTK_LABEL(key_lb),"Passphrase");
319 gtk_label_set_text(GTK_LABEL(ssid_lb),"SSID");
322 gtk_widget_show(add_ssid_te);
328 * Callback for the wrong crc combo
331 on_fcs_filter_cb_changed(GtkWidget *fcs_filter_cb, gpointer data _U_)
333 gchar *fcs_filter_str;
335 if (fcs_filter_cb != NULL)
337 fcs_filter_str = gtk_combo_box_get_active_text(GTK_COMBO_BOX(fcs_filter_cb));
338 if (fcs_filter_str && (g_ascii_strcasecmp("", fcs_filter_str)))
340 airpcap_if_selected->CrcValidationOn = airpcap_get_validation_type(fcs_filter_str);
341 airpcap_if_selected->saved = FALSE;
343 g_free(fcs_filter_str);
349 * Changed callback for the capture type combobox
352 on_capture_type_cb_changed(GtkWidget *cb, gpointer user_data _U_)
360 s = gtk_combo_box_get_active_text(GTK_COMBO_BOX(cb));
362 if ((g_ascii_strcasecmp("",s)))
364 airpcap_if_selected->linkType = airpcap_get_link_type(s);
365 airpcap_if_selected->saved = FALSE;
371 * Thread function used to blink the led
374 update_blink(gpointer data)
376 airpcap_if_info_t* sel;
378 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
380 sel = (airpcap_if_info_t*)data;
382 ad = airpcap_if_open(sel->name, ebuf);
387 airpcap_if_turn_led_off(ad, 0);
392 airpcap_if_turn_led_on(ad, 0);
395 airpcap_if_close(ad);
401 * Blink button callback
404 on_blink_bt_clicked( GtkWidget *blink_bt, gpointer data _U_)
406 PAirpcapHandle ad = NULL;
407 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
409 if (airpcap_if_selected != NULL) {
410 if (!(airpcap_if_selected->blinking))
412 gtk_button_set_label(GTK_BUTTON(blink_bt),"Stop Blinking");
413 airpcap_if_selected->tag = g_timeout_add(500,update_blink,airpcap_if_selected);
414 airpcap_if_selected->blinking = TRUE;
418 gtk_button_set_label(GTK_BUTTON(blink_bt)," Blink Led ");
419 g_source_remove(airpcap_if_selected->tag);
420 airpcap_if_selected->blinking = FALSE;
421 /* Switch on the led! */
422 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
425 g_source_remove(airpcap_if_selected->tag);
426 airpcap_if_turn_led_on(ad, 0);
427 airpcap_if_selected->blinking = FALSE;
428 airpcap_if_selected->led = TRUE;
429 airpcap_if_close(ad);
436 * Callback for the 'Any' adapter What's This button.
439 on_what_s_this_bt_clicked( GtkWidget *blink_bt _U_, gpointer data _U_)
441 simple_dialog(ESD_TYPE_INFO,ESD_BTN_OK,
442 "The Multi-Channel Aggregator is a virtual device "
443 "that can be used to capture packets from all the "
444 "AirPcap adapters at the same time.\n"
445 "The Capture Type, FCS and Encryption settings of "
446 "this virtual device can be configured as for any "
447 "real adapter.\nThe channel cannot be changed for "
449 "Refer to the AirPcap manual for more information.");
452 /* the window was closed, cleanup things */
454 on_key_management_destroy(GtkWidget *w _U_, gpointer data)
456 GtkWidget *airpcap_advanced_w,
459 gint *from_widget = NULL;
461 /* Retrieve the GUI object pointers */
462 airpcap_advanced_w = GTK_WIDGET(data);
464 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
467 from_widget = (gint*)g_object_get_data(G_OBJECT(toolbar),AIRPCAP_ADVANCED_FROM_KEY);
468 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
469 if ( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR)
470 gtk_widget_set_sensitive(toolbar,TRUE);
472 gtk_widget_set_sensitive(toolbar,FALSE);
476 /* reload the configuration!!! Configuration has not been saved but
477 the corresponding structure has been modified probably...*/
478 if (airpcap_if_selected != NULL)
480 if (!airpcap_if_selected->saved)
482 airpcap_load_selected_if_configuration(airpcap_if_selected);
488 /* the Advenced wireless Settings window was closed, cleanup things */
490 on_airpcap_advanced_destroy(GtkWidget *w _U_, gpointer data)
492 GtkWidget *airpcap_advanced_w,
495 gint *from_widget = NULL;
497 /* Retrieve the GUI object pointers */
498 airpcap_advanced_w = GTK_WIDGET(data);
500 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
503 from_widget = (gint*)g_object_get_data(G_OBJECT(toolbar),AIRPCAP_ADVANCED_FROM_KEY);
504 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
505 if ( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR)
506 gtk_widget_set_sensitive(toolbar,TRUE);
508 gtk_widget_set_sensitive(toolbar,FALSE);
512 /* reload the configuration!!! Configuration has not been saved but
513 the corresponding structure has been modified probably...*/
514 if (!airpcap_if_selected->saved)
516 airpcap_load_selected_if_configuration(airpcap_if_selected);
521 * Callback for the 'Apply' button.
524 * XXX - Pressing 'Apply' has the same effect as pressing 'OK' -- you
525 * can't revert back to the old set of keys by pressing 'Cancel'. We
526 * either need to fix reversion or get rid of the 'Apply' button.
529 on_key_management_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
531 /* advenced window */
532 GtkWidget *key_management_w;
534 /* widgets in the toolbar */
536 GtkWidget *toolbar_cb;
537 GtkWidget *decryption_mode_cb;
539 GtkListStore *key_list_store;
541 module_t *wlan_module = prefs_find_module("wlan");
542 gchar *decryption_mode_string;
544 /* retrieve main window */
545 key_management_w = GTK_WIDGET(data);
546 decryption_mode_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_DECRYPTION_MODE_KEY));
547 key_list_store = GTK_LIST_STORE(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
548 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY));
549 toolbar_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
551 #define CANT_SAVE_ERR_STR "Cannot save configuration! Another application " \
552 "might be using AirPcap, or you might not have sufficient privileges."
553 /* Set the Decryption Mode */
555 decryption_mode_string = gtk_combo_box_get_active_text (GTK_COMBO_BOX(decryption_mode_cb));
556 if (g_ascii_strcasecmp(decryption_mode_string, AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK) == 0)
558 set_wireshark_decryption(TRUE);
559 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
561 else if (g_ascii_strcasecmp(decryption_mode_string, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
563 set_wireshark_decryption(FALSE);
564 if (!set_airpcap_decryption(TRUE)) g_warning(CANT_SAVE_ERR_STR);
566 else if (g_ascii_strcasecmp(decryption_mode_string, AIRPCAP_DECRYPTION_TYPE_STRING_NONE) == 0)
568 set_wireshark_decryption(FALSE);
569 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
571 g_free(decryption_mode_string);
573 /* Save the configuration */
574 airpcap_read_and_save_decryption_keys_from_list_store(key_list_store,airpcap_if_selected,airpcap_if_list); /* This will save the keys for every adapter */
576 /* The update will make redissect al the packets... no need to do it here again */
577 update_decryption_mode(toolbar_cb);
579 /* Redissect all the packets, and re-evaluate the display filter. */
580 prefs_apply(wlan_module);
584 * Callback used to add a WEP key in the add new key box;
587 on_add_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
593 GtkListStore *key_list_store;
595 GString *new_type_string,
599 gchar *type_entered = NULL;
600 gchar *key_entered = NULL;
601 gchar *ssid_entered = NULL;
605 key_list_store = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY);
606 type_cb = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY);
607 key_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY);
608 ssid_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY);
610 type_entered = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
611 key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
612 ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
614 /* Check if key is correct */
615 new_type_string = g_string_new(type_entered);
616 new_key_string = g_string_new(key_entered);
617 new_ssid_string = g_string_new(ssid_entered);
619 g_free(type_entered);
620 g_free(key_entered );
621 g_free(ssid_entered);
623 g_strstrip(new_key_string->str);
624 g_strstrip(new_ssid_string->str);
626 /* Check which type of key the user has entered */
627 if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
630 if ( ((new_key_string->len) > WEP_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WEP_KEY_MIN_CHAR_SIZE))
632 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);
634 g_string_free(new_type_string,TRUE);
635 g_string_free(new_key_string, TRUE);
636 g_string_free(new_ssid_string,TRUE);
641 if ((new_key_string->len % 2) != 0)
643 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nThe number of characters must be even.");
645 g_string_free(new_type_string,TRUE);
646 g_string_free(new_key_string, TRUE);
647 g_string_free(new_ssid_string,TRUE);
652 for (i = 0; i < new_key_string->len; i++)
654 if (!g_ascii_isxdigit(new_key_string->str[i]))
656 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nA WEP key must be a hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
658 g_string_free(new_type_string,TRUE);
659 g_string_free(new_key_string, TRUE);
660 g_string_free(new_ssid_string,TRUE);
666 /* If so... add key */
667 airpcap_add_key_to_list(key_list_store, new_type_string->str, new_key_string->str, new_ssid_string->str);
669 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
671 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_PWD_KEY_STRING) == 0) /* WPA Key */
673 /* XXX - Perform some WPA related input fields check */
674 /* If everything is ok, modify the entry in the list */
676 if ( ((new_key_string->len) > WPA_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WPA_KEY_MIN_CHAR_SIZE))
678 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);
680 g_string_free(new_type_string,TRUE);
681 g_string_free(new_key_string, TRUE);
682 g_string_free(new_ssid_string,TRUE);
688 * XXX - Maybe we need some check on the characters? I'm not sure if only standard ASCII are ok...
690 if ((new_ssid_string->len) > WPA_SSID_MAX_CHAR_SIZE)
692 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);
694 g_string_free(new_type_string,TRUE);
695 g_string_free(new_key_string, TRUE);
696 g_string_free(new_ssid_string,TRUE);
701 /* If so... add key */
702 airpcap_add_key_to_list(key_list_store, new_type_string->str, new_key_string->str, new_ssid_string->str);
704 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
706 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_BIN_KEY_STRING) == 0) /* WPA_BIN Key */
708 /* XXX - Perform some WPA_BIN related input fields check */
709 /* If everything is ok, modify the entry int he list */
711 if ( ((new_key_string->len) != WPA_PSK_KEY_CHAR_SIZE))
713 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);
715 g_string_free(new_type_string,TRUE);
716 g_string_free(new_key_string, TRUE);
717 g_string_free(new_ssid_string,TRUE);
722 for (i = 0; i < new_key_string->len; i++)
724 if (!g_ascii_isxdigit(new_key_string->str[i]))
726 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
728 g_string_free(new_type_string,TRUE);
729 g_string_free(new_key_string, TRUE);
730 g_string_free(new_ssid_string,TRUE);
736 /* If so... add key */
737 airpcap_add_key_to_list(key_list_store, new_type_string->str, new_key_string->str, new_ssid_string->str);
739 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
741 else /* Should never happen!!! */
743 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Unknown error in the key \"Type\" field!");
746 g_string_free(new_type_string,TRUE);
747 g_string_free(new_key_string, TRUE);
748 g_string_free(new_ssid_string,TRUE);
750 window_destroy(GTK_WIDGET(data));
755 * Callback used to edit a WEP key in the edit key box;
758 on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
764 GtkListStore *key_list_store;
765 GtkTreeSelection *selection;
768 GString *new_type_string,
772 gchar *type_entered = NULL;
773 gchar *key_entered = NULL;
774 gchar *ssid_entered = NULL;
778 key_list_store = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY);
779 selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
780 type_cb = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY);
781 key_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY);
782 ssid_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY);
784 if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
787 type_entered = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
788 key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
789 ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
791 g_strstrip(key_entered);
792 g_strstrip(ssid_entered);
794 /* Check if key is correct */
795 new_type_string = g_string_new(type_entered);
796 new_key_string = g_string_new(key_entered);
797 new_ssid_string = g_string_new(ssid_entered);
799 g_free(type_entered);
800 g_free(key_entered );
801 g_free(ssid_entered);
803 /* Check which type of key the user has entered */
804 if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
807 if ( ((new_key_string->len) > WEP_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WEP_KEY_MIN_CHAR_SIZE))
809 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);
811 g_string_free(new_type_string,TRUE);
812 g_string_free(new_key_string, TRUE);
813 g_string_free(new_ssid_string,TRUE);
818 if ((new_key_string->len % 2) != 0)
820 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nThe number of characters must be even.");
822 g_string_free(new_type_string,TRUE);
823 g_string_free(new_key_string, TRUE);
824 g_string_free(new_ssid_string,TRUE);
829 for (i = 0; i < new_key_string->len; i++)
831 if (!g_ascii_isxdigit(new_key_string->str[i]))
833 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nA WEP key must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
835 g_string_free(new_type_string,TRUE);
836 g_string_free(new_key_string, TRUE);
837 g_string_free(new_ssid_string,TRUE);
843 /* If so... Modify key */
844 gtk_list_store_set(key_list_store, &iter,
845 KL_COL_TYPE, new_type_string->str,
846 KL_COL_KEY, new_key_string->str,
847 KL_COL_SSID, new_ssid_string->str,
850 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
852 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_PWD_KEY_STRING) == 0) /* WPA Key */
854 /* XXX - Perform some WPA related input fields check */
855 /* If everything is ok, modify the entry in the list */
857 if ( ((new_key_string->len) > WPA_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WPA_KEY_MIN_CHAR_SIZE))
859 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);
861 g_string_free(new_type_string,TRUE);
862 g_string_free(new_key_string, TRUE);
863 g_string_free(new_ssid_string,TRUE);
869 * XXX - Maybe we need some check on the characters? I'm not sure if only standard ASCII are ok...
871 if ((new_ssid_string->len) > WPA_SSID_MAX_CHAR_SIZE)
873 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);
875 g_string_free(new_type_string,TRUE);
876 g_string_free(new_key_string, TRUE);
877 g_string_free(new_ssid_string,TRUE);
882 /* If so... Modify key */
883 gtk_list_store_set(key_list_store, &iter,
884 KL_COL_TYPE, new_type_string->str,
885 KL_COL_KEY, new_key_string->str,
886 KL_COL_SSID, new_ssid_string->str,
889 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
891 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_BIN_KEY_STRING) == 0) /* WPA_BIN Key */
893 /* XXX - Perform some WPA_BIN related input fields check */
894 /* If everything is ok, modify the entry in the list */
896 if ( ((new_key_string->len) != WPA_PSK_KEY_CHAR_SIZE))
898 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);
900 g_string_free(new_type_string,TRUE);
901 g_string_free(new_key_string, TRUE);
902 g_string_free(new_ssid_string,TRUE);
907 for (i = 0; i < new_key_string->len; i++)
909 if (!g_ascii_isxdigit(new_key_string->str[i]))
911 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
913 g_string_free(new_type_string,TRUE);
914 g_string_free(new_key_string, TRUE);
915 g_string_free(new_ssid_string,TRUE);
921 /* If so... Modify key */
922 gtk_list_store_set(key_list_store, &iter,
923 KL_COL_TYPE, new_type_string->str,
924 KL_COL_KEY, new_key_string->str,
925 KL_COL_SSID, new_ssid_string->str,
928 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
930 else /* Should never happen!!! */
932 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Unknown error in the key \"Type\" field!");
935 g_string_free(new_type_string,TRUE);
936 g_string_free(new_key_string, TRUE);
937 g_string_free(new_ssid_string,TRUE);
939 window_destroy(GTK_WIDGET(data));
944 * Add key window destroy callback
947 on_add_key_w_destroy(GtkWidget *button _U_, gpointer data)
949 GtkWidget *airpcap_advanced_w;
951 airpcap_advanced_w = GTK_WIDGET(data);
953 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w),TRUE);
959 * Callback for the 'Add Key' button.
962 on_add_new_key_bt_clicked(GtkWidget *button _U_, gpointer data)
964 GtkWidget *add_key_window;
965 GtkWidget *add_frame;
966 GtkWidget *main_v_box;
968 GtkWidget *add_frame_al;
969 GtkWidget *add_type_cb;
970 GtkWidget *add_key_te;
971 GtkWidget *add_ssid_te;
972 GtkWidget *add_type_lb;
973 GtkWidget *add_key_lb;
974 GtkWidget *add_ssid_lb;
975 GtkWidget *low_h_button_box;
977 GtkWidget *cancel_bt;
978 GtkWidget *add_frame_lb;
980 GtkWidget *airpcap_advanced_w;
982 GtkListStore *key_list_store;
984 airpcap_advanced_w = GTK_WIDGET(data);
986 key_list_store = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
988 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(key_list_store), NULL) >= MAX_ENCRYPTION_KEYS)
990 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Maximum number (%d) of decryption keys reached! You cannot add another key!\n",MAX_ENCRYPTION_KEYS);
994 /* Gray out the Advanced Wireless Setting window */
995 gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
997 /* Pop-up a new window */
998 add_key_window = dlg_window_new ("Add Decryption Key");
999 gtk_widget_set_name (add_key_window, "add_key_window");
1000 gtk_container_set_border_width (GTK_CONTAINER (add_key_window), 5);
1001 gtk_window_set_resizable (GTK_WINDOW (add_key_window), FALSE);
1003 main_v_box = gtk_vbox_new (FALSE, 0);
1004 gtk_widget_set_name (main_v_box, "main_v_box");
1005 gtk_widget_show (main_v_box);
1006 gtk_container_add (GTK_CONTAINER (add_key_window), main_v_box);
1008 add_frame = gtk_frame_new (NULL);
1009 gtk_widget_set_name (add_frame, "add_frame");
1010 gtk_widget_show (add_frame);
1011 gtk_box_pack_start (GTK_BOX (main_v_box), add_frame, TRUE, TRUE, 0);
1013 add_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1014 gtk_widget_set_name (add_frame_al, "add_frame_al");
1015 gtk_widget_show (add_frame_al);
1016 gtk_container_add (GTK_CONTAINER (add_frame), add_frame_al);
1017 gtk_alignment_set_padding (GTK_ALIGNMENT (add_frame_al), 0, 0, 12, 0);
1019 add_tb = gtk_table_new (2, 3, FALSE);
1020 gtk_widget_set_name (add_tb, "add_tb");
1021 gtk_container_set_border_width(GTK_CONTAINER(add_tb),5);
1022 gtk_widget_show (add_tb);
1023 gtk_container_add (GTK_CONTAINER (add_frame_al), add_tb);
1025 add_type_cb = gtk_combo_box_new_text();
1026 gtk_combo_box_append_text(GTK_COMBO_BOX(add_type_cb), AIRPCAP_WEP_KEY_STRING);
1028 gtk_combo_box_append_text(GTK_COMBO_BOX(add_type_cb), AIRPCAP_WPA_PWD_KEY_STRING);
1029 gtk_combo_box_append_text(GTK_COMBO_BOX(add_type_cb), AIRPCAP_WPA_BIN_KEY_STRING);
1030 gtk_combo_box_set_active(GTK_COMBO_BOX(add_type_cb), 0);
1031 gtk_widget_set_name (add_type_cb, "add_type_cb");
1032 gtk_widget_show (add_type_cb);
1033 gtk_table_attach (GTK_TABLE (add_tb), add_type_cb, 0, 1, 1, 2,
1034 (GtkAttachOptions) (GTK_FILL),
1035 (GtkAttachOptions) (0), 0, 0);
1036 gtk_widget_set_size_request (add_type_cb, 83, -1);
1038 add_key_te = gtk_entry_new ();
1039 gtk_widget_set_name (add_key_te, "add_key_te");
1041 gtk_widget_show (add_key_te);
1042 gtk_table_attach (GTK_TABLE (add_tb), add_key_te, 1, 2, 1, 2,
1043 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1044 gtk_widget_set_size_request (add_key_te, 178, -1);
1046 add_ssid_te = gtk_entry_new ();
1047 gtk_widget_set_name (add_ssid_te, "add_ssid_te");
1048 gtk_widget_set_sensitive(add_ssid_te,FALSE);
1049 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1050 gtk_widget_show (add_ssid_te);
1051 gtk_table_attach (GTK_TABLE (add_tb), add_ssid_te, 2, 3, 1, 2,
1052 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1054 add_type_lb = gtk_label_new ("Type");
1055 gtk_widget_set_name (add_type_lb, "add_type_lb");
1056 gtk_widget_show (add_type_lb);
1057 gtk_table_attach (GTK_TABLE (add_tb), add_type_lb, 0, 1, 0, 1,
1058 (GtkAttachOptions) (GTK_FILL),
1059 (GtkAttachOptions) (0), 0, 0);
1060 gtk_label_set_justify (GTK_LABEL (add_type_lb), GTK_JUSTIFY_CENTER);
1062 add_key_lb = gtk_label_new ("Key");
1063 gtk_widget_set_name (add_key_lb, "add_key_lb");
1064 gtk_widget_show (add_key_lb);
1065 gtk_table_attach (GTK_TABLE (add_tb), add_key_lb, 1, 2, 0, 1,
1066 (GtkAttachOptions) (GTK_FILL),
1067 (GtkAttachOptions) (0), 0, 0);
1068 gtk_label_set_justify (GTK_LABEL (add_key_lb), GTK_JUSTIFY_CENTER);
1070 add_ssid_lb = gtk_label_new ("");
1071 gtk_widget_set_name (add_ssid_lb, "add_ssid_lb");
1072 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1073 gtk_widget_show (add_ssid_lb);
1074 gtk_table_attach (GTK_TABLE (add_tb), add_ssid_lb, 2, 3, 0, 1,
1075 (GtkAttachOptions) (GTK_FILL),
1076 (GtkAttachOptions) (0), 0, 0);
1077 gtk_label_set_justify (GTK_LABEL (add_ssid_lb), GTK_JUSTIFY_CENTER);
1079 low_h_button_box = gtk_hbutton_box_new ();
1080 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
1081 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
1082 gtk_widget_show (low_h_button_box);
1083 gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
1084 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
1087 ok_bt = gtk_button_new_with_mnemonic ("OK");
1088 gtk_widget_set_name (ok_bt, "ok_bt");
1089 gtk_widget_show (ok_bt);
1090 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
1091 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
1093 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
1094 gtk_widget_set_name (cancel_bt, "cancel_bt");
1095 gtk_widget_show (cancel_bt);
1096 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
1097 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
1099 add_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
1100 gtk_widget_set_name (add_frame_lb, "add_frame_lb");
1101 gtk_widget_show (add_frame_lb);
1102 gtk_frame_set_label_widget (GTK_FRAME (add_frame), add_frame_lb);
1103 gtk_label_set_use_markup (GTK_LABEL (add_frame_lb), TRUE);
1106 g_signal_connect(ok_bt, "clicked", G_CALLBACK(on_add_key_ok_bt_clicked), add_key_window );
1107 g_signal_connect(cancel_bt, "clicked", G_CALLBACK(window_cancel_button_cb), add_key_window );
1108 g_signal_connect(add_type_cb, "changed", G_CALLBACK(on_add_type_cb_changed), add_key_window);
1109 g_signal_connect(add_key_window, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
1110 g_signal_connect(add_key_window, "destroy", G_CALLBACK(on_add_key_w_destroy), data);
1112 /* Add widget data */
1113 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY,key_list_store);
1114 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY,add_type_cb);
1115 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY,add_key_te);
1116 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY,add_ssid_te);
1117 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY,add_key_lb);
1118 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY,add_ssid_lb);
1120 gtk_widget_show(add_key_window);
1124 * Edit key window destroy callback
1127 on_edit_key_w_destroy(GtkWidget *button _U_, gpointer data)
1129 GtkWidget *airpcap_advanced_w;
1131 airpcap_advanced_w = GTK_WIDGET(data);
1133 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w),TRUE);
1139 * Callback for the 'Remove Key' button.
1142 on_remove_key_bt_clicked(GtkWidget *button _U_, gpointer data)
1144 GtkTreeModel *model;
1146 GtkTreeSelection *selection;
1148 /* retrieve needed stuff */
1149 selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
1151 if (!gtk_tree_selection_get_selected(selection, &model, &iter))
1154 /* Remove selected key */
1155 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
1156 gtk_tree_selection_select_iter(selection, &iter);
1157 /* XXX - select the last item if needed? */
1159 /* Need to save config... */
1160 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1164 * Callback for the 'Edit Key' button.
1167 on_edit_key_bt_clicked(GtkWidget *button _U_, gpointer data)
1169 GtkWidget *edit_key_window;
1170 GtkWidget *edit_frame;
1171 GtkWidget *main_v_box;
1173 GtkWidget *edit_frame_al;
1174 GtkWidget *edit_type_cb;
1175 GtkWidget *edit_key_te;
1176 GtkWidget *edit_ssid_te;
1177 GtkWidget *edit_type_lb;
1178 GtkWidget *edit_key_lb;
1179 GtkWidget *edit_ssid_lb;
1180 GtkWidget *low_h_button_box;
1182 GtkWidget *cancel_bt;
1183 GtkWidget *edit_frame_lb;
1185 GtkWidget *airpcap_advanced_w;
1187 GtkTreeModel *model;
1189 GtkTreeSelection *selection;
1191 /* Key List Store */
1192 GtkListStore *key_list_store;
1198 airpcap_advanced_w = GTK_WIDGET(data);
1200 /* Retrieve the selected item... if no row is selected, this is null... */
1201 selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
1202 key_list_store = g_object_get_data (G_OBJECT(data), AIRPCAP_ADVANCED_KEYLIST_KEY);
1205 if (!gtk_tree_selection_get_selected(selection, &model, &iter))
1208 gtk_tree_model_get(model, &iter,
1209 KL_COL_TYPE, &row_type,
1210 KL_COL_KEY, &row_key,
1211 KL_COL_SSID, &row_ssid,
1214 /* Gray out the Advanced Wireless Setting window */
1215 gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
1217 /* Pop-up a new window */
1218 edit_key_window = dlg_window_new("Edit Decryption Key");
1219 gtk_widget_set_name (edit_key_window, "edit_key_window");
1220 gtk_container_set_border_width (GTK_CONTAINER (edit_key_window), 5);
1221 gtk_window_set_resizable (GTK_WINDOW (edit_key_window), FALSE);
1223 main_v_box = gtk_vbox_new (FALSE, 0);
1224 gtk_widget_set_name (main_v_box, "main_v_box");
1225 gtk_widget_show (main_v_box);
1226 gtk_container_add (GTK_CONTAINER (edit_key_window), main_v_box);
1228 edit_frame = gtk_frame_new (NULL);
1229 gtk_widget_set_name (edit_frame, "edit_frame");
1230 gtk_widget_show (edit_frame);
1231 gtk_box_pack_start (GTK_BOX (main_v_box), edit_frame, TRUE, TRUE, 0);
1233 edit_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1234 gtk_widget_set_name (edit_frame_al, "edit_frame_al");
1235 gtk_widget_show (edit_frame_al);
1236 gtk_container_add (GTK_CONTAINER (edit_frame), edit_frame_al);
1237 gtk_alignment_set_padding (GTK_ALIGNMENT (edit_frame_al), 0, 0, 12, 0);
1239 edit_tb = gtk_table_new (2, 3, FALSE);
1240 gtk_widget_set_name (edit_tb, "edit_tb");
1241 gtk_container_set_border_width(GTK_CONTAINER(edit_tb),5);
1242 gtk_widget_show (edit_tb);
1243 gtk_container_add (GTK_CONTAINER (edit_frame_al), edit_tb);
1245 edit_type_cb = gtk_combo_box_new_text();
1246 gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WEP_KEY_STRING);
1248 gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WPA_PWD_KEY_STRING);
1249 gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WPA_BIN_KEY_STRING);
1250 /* Set current type */
1251 gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 0);
1252 if (g_ascii_strcasecmp(row_type, AIRPCAP_WPA_PWD_KEY_STRING) == 0) {
1253 gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 1);
1254 } else if (g_ascii_strcasecmp(row_type, AIRPCAP_WPA_BIN_KEY_STRING) == 0) {
1255 gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 2);
1257 gtk_widget_set_name (edit_type_cb, "edit_type_cb");
1258 gtk_widget_show (edit_type_cb);
1259 gtk_table_attach (GTK_TABLE (edit_tb), edit_type_cb, 0, 1, 1, 2,
1260 (GtkAttachOptions) (GTK_FILL),
1261 (GtkAttachOptions) (0), 0, 0);
1262 gtk_widget_set_size_request (edit_type_cb, 83, -1);
1264 edit_key_te = gtk_entry_new ();
1265 gtk_widget_set_name (edit_key_te, "edit_key_te");
1266 /* Set current key */
1267 gtk_entry_set_text(GTK_ENTRY(edit_key_te),row_key);
1268 gtk_widget_show (edit_key_te);
1269 gtk_table_attach (GTK_TABLE (edit_tb), edit_key_te, 1, 2, 1, 2,
1270 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1271 gtk_widget_set_size_request (edit_key_te, 178, -1);
1273 edit_ssid_te = gtk_entry_new ();
1274 gtk_widget_set_name (edit_ssid_te, "edit_ssid_te");
1276 /* Set current ssid (if key type is not WEP!)*/
1277 if (g_ascii_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0)
1279 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
1283 gtk_widget_set_sensitive(edit_ssid_te,TRUE);
1284 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),row_ssid);
1287 /* XXX - Decomment only when WPA and WPA@ will be ready */
1288 gtk_widget_show (edit_ssid_te);
1289 gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_te, 2, 3, 1, 2,
1290 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1292 edit_type_lb = gtk_label_new ("Type");
1293 gtk_widget_set_name (edit_type_lb, "edit_type_lb");
1294 gtk_widget_show (edit_type_lb);
1295 gtk_table_attach (GTK_TABLE (edit_tb), edit_type_lb, 0, 1, 0, 1,
1296 (GtkAttachOptions) (GTK_FILL),
1297 (GtkAttachOptions) (0), 0, 0);
1298 gtk_label_set_justify (GTK_LABEL (edit_type_lb), GTK_JUSTIFY_CENTER);
1300 edit_key_lb = gtk_label_new ("Key");
1301 gtk_widget_set_name (edit_key_lb, "edit_key_lb");
1302 gtk_widget_show (edit_key_lb);
1303 gtk_table_attach (GTK_TABLE (edit_tb), edit_key_lb, 1, 2, 0, 1,
1304 (GtkAttachOptions) (GTK_FILL),
1305 (GtkAttachOptions) (0), 0, 0);
1306 gtk_label_set_justify (GTK_LABEL (edit_key_lb), GTK_JUSTIFY_CENTER);
1308 edit_ssid_lb = gtk_label_new ("");
1309 gtk_widget_set_name (edit_ssid_lb, "edit_ssid_lb");
1310 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1311 gtk_widget_show (edit_ssid_lb);
1312 gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_lb, 2, 3, 0, 1,
1313 (GtkAttachOptions) (GTK_FILL),
1314 (GtkAttachOptions) (0), 0, 0);
1315 gtk_label_set_justify (GTK_LABEL (edit_ssid_lb), GTK_JUSTIFY_CENTER);
1317 low_h_button_box = gtk_hbutton_box_new ();
1318 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
1319 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
1320 gtk_widget_show (low_h_button_box);
1321 gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
1322 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
1325 ok_bt = gtk_button_new_with_mnemonic ("OK");
1326 gtk_widget_set_name (ok_bt, "ok_bt");
1327 gtk_widget_show (ok_bt);
1328 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
1329 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
1331 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
1332 gtk_widget_set_name (cancel_bt, "cancel_bt");
1333 gtk_widget_show (cancel_bt);
1334 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
1335 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
1337 edit_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
1338 gtk_widget_set_name (edit_frame_lb, "edit_frame_lb");
1339 gtk_widget_show (edit_frame_lb);
1340 gtk_frame_set_label_widget (GTK_FRAME (edit_frame), edit_frame_lb);
1341 gtk_label_set_use_markup (GTK_LABEL (edit_frame_lb), TRUE);
1344 g_signal_connect(ok_bt, "clicked", G_CALLBACK(on_edit_key_ok_bt_clicked), edit_key_window );
1345 g_signal_connect(cancel_bt, "clicked", G_CALLBACK(window_cancel_button_cb), edit_key_window );
1346 g_signal_connect(edit_type_cb, "changed", G_CALLBACK(on_edit_type_cb_changed), edit_key_window);
1347 g_signal_connect(edit_key_window, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
1348 g_signal_connect(edit_key_window, "destroy", G_CALLBACK(on_edit_key_w_destroy), data);
1350 /* Add widget data */
1351 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY,key_list_store);
1352 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY,selection);
1353 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY,edit_type_cb);
1354 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY,edit_key_te);
1355 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY,edit_ssid_te);
1356 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY,edit_key_lb);
1357 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY,edit_ssid_lb);
1363 gtk_widget_show(edit_key_window);
1367 * Callback for the 'Move Key Up' button.
1370 on_move_key_up_bt_clicked(GtkWidget *button _U_, gpointer key_list)
1372 tree_view_list_store_move_selection(GTK_TREE_VIEW(key_list), TRUE);
1376 * Callback for the 'Move Key Down' button.
1379 on_move_key_down_bt_clicked(GtkWidget *button _U_, gpointer list_view)
1381 tree_view_list_store_move_selection(GTK_TREE_VIEW(list_view), FALSE);
1384 /* Turns the decryption on or off */
1386 on_decryption_mode_cb_changed(GtkWidget *cb, gpointer data _U_)
1394 cur_active = gtk_combo_box_get_active(GTK_COMBO_BOX(cb));
1396 if (cur_active < 0) {
1400 switch(cur_active) {
1401 /* XXX - Don't use magic numbers here */
1402 case 1: /* Wireshark */
1403 set_wireshark_decryption(TRUE);
1404 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
1406 case 2: /* Driver */
1407 set_wireshark_decryption(FALSE);
1408 if (!set_airpcap_decryption(TRUE)) g_warning(CANT_SAVE_ERR_STR);
1411 set_wireshark_decryption(FALSE);
1412 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
1416 /* Redissect all the packets, and re-evaluate the display filter. */
1417 redissect_packets();
1421 * Selects the current decryption mode string in the decryption mode combo box
1424 update_decryption_mode(GtkWidget *cb)
1430 /* Wireshark decryption is on */
1431 if (wireshark_decryption_on())
1433 gtk_combo_box_set_active(GTK_COMBO_BOX(cb), 1);
1435 /* AirPcap decryption is on */
1436 else if (airpcap_decryption_on())
1438 gtk_combo_box_set_active(GTK_COMBO_BOX(cb), 2);
1440 /* No decryption enabled */
1443 gtk_combo_box_set_active(GTK_COMBO_BOX(cb), 0);
1450 * Creates the list of available decryption modes, depending on the adapters found
1453 update_decryption_mode_list(GtkWidget *cb)
1455 gchar *current_text;
1460 current_text = NULL;
1463 * XXX - Retrieve the current 'decryption mode'. It would be better just block the
1464 * signal handler, but it doesn't work... one of these days I'll try to figure out why...
1466 current_text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(cb));
1468 while (gtk_tree_model_iter_n_children(gtk_combo_box_get_model(GTK_COMBO_BOX(cb)), NULL) > 0) {
1469 gtk_combo_box_remove_text(GTK_COMBO_BOX(cb), 0);
1472 gtk_combo_box_append_text(GTK_COMBO_BOX(cb), AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1473 gtk_combo_box_append_text(GTK_COMBO_BOX(cb), AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK);
1475 if (airpcap_if_list != NULL && g_list_length(airpcap_if_list) > 0)
1477 gtk_combo_box_append_text(GTK_COMBO_BOX(cb), AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP);
1481 /* The last decryption mode was 'Driver', but no more AirPcap adapter are found */
1482 if (current_text == NULL || g_ascii_strcasecmp(current_text, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
1484 g_free(current_text);
1485 current_text = g_strdup(AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1489 if (g_ascii_strcasecmp(current_text, AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK) == 0) {
1490 gtk_combo_box_set_active(GTK_COMBO_BOX(cb), 1);
1491 } else if (g_ascii_strcasecmp(current_text, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0) {
1492 gtk_combo_box_set_active(GTK_COMBO_BOX(cb), 2);
1493 } else { /* None / Invalid */
1494 gtk_combo_box_set_active(GTK_COMBO_BOX(cb), 0);
1497 g_free(current_text);
1502 * Callback for the Wireless Advanced Settings 'Apply' button.
1505 on_advanced_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
1507 /* advenced window */
1508 GtkWidget *airpcap_advanced_w;
1509 GtkWidget *channel_cb, *channel_offset_cb;
1511 /* widgets in the toolbar */
1514 *toolbar_channel_cb,
1515 *toolbar_channel_offset_cb,
1516 *toolbar_fcs_filter_cb;
1518 /* retrieve main window */
1519 airpcap_advanced_w = GTK_WIDGET(data);
1521 /* Set the channel and offset */
1522 channel_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CHANNEL_KEY));
1523 channel_offset_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CHANNEL_OFFSET_KEY));
1524 airpcap_channel_offset_changed_cb(channel_offset_cb, NULL);
1525 airpcap_channel_changed_set_cb(channel_cb, channel_offset_cb);
1528 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
1530 /* retrieve toolbar info */
1531 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
1532 toolbar_channel_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
1533 toolbar_channel_offset_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY));
1534 toolbar_fcs_filter_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
1536 /* Save the configuration (for all ) */
1537 airpcap_save_selected_if_configuration(airpcap_if_selected);
1539 /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/
1540 if ( g_ascii_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0)
1542 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)));
1543 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cb),airpcap_if_selected);
1544 airpcap_update_channel_offset_combo(airpcap_if_selected, airpcap_if_selected->channelInfo.Frequency, toolbar_channel_offset_cb, TRUE);
1545 airpcap_validation_type_combo_set_by_type(toolbar_fcs_filter_cb,airpcap_if_selected->CrcValidationOn);
1550 * Callback for the OK button 'clicked' in the Advanced Wireless Settings window.
1553 on_advanced_ok_bt_clicked(GtkWidget *button _U_, gpointer data)
1555 PAirpcapHandle ad = NULL;
1556 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
1558 /* Retrieve object data */
1559 GtkWidget *airpcap_advanced_w = GTK_WIDGET(data);
1561 if (airpcap_if_selected == NULL) { /* There's not much we can do. */
1562 gtk_widget_destroy(airpcap_advanced_w);
1566 on_advanced_apply_bt_clicked(button, data);
1568 /* Stop blinking our LED */
1569 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
1572 g_source_remove(airpcap_if_selected->tag);
1573 airpcap_if_turn_led_on(ad, 0);
1574 airpcap_if_selected->blinking = FALSE;
1575 airpcap_if_selected->led = TRUE;
1576 airpcap_if_close(ad);
1579 /* Remove GLIB timeout */
1580 g_source_remove(airpcap_if_selected->tag);
1582 gtk_widget_destroy(airpcap_advanced_w);
1586 * Callback for the CANCEL button 'clicked' in the Advanced Wireless Settings window.
1589 on_advanced_cancel_bt_clicked(GtkWidget *button _U_, gpointer data)
1591 PAirpcapHandle ad = NULL;
1592 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
1594 /* Retrieve object data */
1595 GtkWidget *airpcap_advanced_w;
1596 GtkWidget *channel_combo;
1597 GtkWidget *capture_combo;
1598 GtkWidget *crc_check;
1599 GtkWidget *wrong_crc_combo;
1600 GtkWidget *blink_bt;
1601 GtkWidget *interface_combo;
1602 GtkWidget *cancel_bt;
1605 /* widgets in the toolbar */
1608 *toolbar_channel_cb,
1609 *toolbar_wrong_crc_cb,
1612 /* Retrieve the GUI object pointers */
1613 airpcap_advanced_w = GTK_WIDGET(data);
1614 interface_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_INTERFACE_KEY));
1615 channel_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CHANNEL_KEY));
1616 capture_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_LINK_TYPE_KEY));
1617 crc_check = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_FCS_CHECK_KEY));
1618 wrong_crc_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_FCS_FILTER_KEY));
1619 blink_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_BLINK_KEY));
1620 cancel_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CANCEL_KEY));
1621 ok_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_OK_KEY));
1622 advanced_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEY));
1624 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
1626 /* retrieve toolbar info */
1627 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
1628 toolbar_channel_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
1629 toolbar_wrong_crc_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
1631 /* Stop blinking ALL leds (go through the airpcap_if_list) */
1632 if (airpcap_if_selected != NULL)
1634 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
1637 g_source_remove(airpcap_if_selected->tag);
1638 airpcap_if_turn_led_on(ad, 0);
1639 airpcap_if_selected->blinking = FALSE;
1640 airpcap_if_selected->led = TRUE;
1641 airpcap_if_close(ad);
1645 /* reload the configuration!!! Configuration has not been saved but
1646 the corresponding structure has been modified probably...*/
1647 if (!airpcap_if_selected->saved)
1649 airpcap_load_selected_if_configuration(airpcap_if_selected);
1652 gtk_widget_destroy(airpcap_advanced_w);
1656 /* Called to create the airpcap settings' window */
1658 display_airpcap_advanced_cb(GtkWidget *w _U_, gpointer data)
1660 GtkWidget *airpcap_advanced_w;
1661 GtkWidget *main_box;
1662 GtkWidget *settings_sub_box;
1663 GtkWidget *interface_fr;
1664 GtkWidget *interface_al;
1665 GtkWidget *interface_sub_h_box;
1666 GtkWidget *interface_name_lb;
1667 GtkWidget *blink_bt;
1668 GtkWidget *interface_frame_lb;
1669 GtkWidget *basic_parameters_fr;
1670 GtkWidget *basic_parameters_al;
1671 GtkWidget *basic_parameters_tb;
1672 GtkWidget *channel_lb;
1673 GtkWidget *channel_offset_lb;
1674 GtkWidget *capture_type_lb;
1675 GtkWidget *channel_cb;
1676 GtkWidget *channel_offset_cb;
1677 GtkWidget *capture_type_cb;
1679 GtkWidget *basic_parameters_fcs_h_box;
1680 GtkWidget *basic_parameters_fcs_filter_lb;
1681 GtkWidget *fcs_filter_cb;
1682 GtkWidget *basic_parameters_frame_lb;
1683 GtkWidget *low_buttons_h_box;
1684 GtkWidget *left_h_button_box;
1685 GtkWidget *right_h_button_box;
1687 GtkWidget *apply_bt;
1688 GtkWidget *cancel_bt;
1690 /* widgets in the toolbar */
1693 *toolbar_channel_cb,
1694 *toolbar_wrong_crc_cb;
1696 /* user data - RETRIEVE pointers of toolbar widgets */
1697 toolbar = GTK_WIDGET(data);
1698 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
1699 toolbar_channel_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
1700 toolbar_wrong_crc_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
1702 /* gray out the toolbar */
1703 gtk_widget_set_sensitive(toolbar,FALSE);
1708 /* the selected is the active, for now */
1709 airpcap_if_selected = airpcap_if_active;
1711 /* Create the new window */
1712 airpcap_advanced_w = dlg_window_new("Advanced Wireless Settings"); /* transient_for top_level */
1713 gtk_window_set_destroy_with_parent (GTK_WINDOW(airpcap_advanced_w), TRUE);
1715 gtk_container_set_border_width (GTK_CONTAINER (airpcap_advanced_w), 5);
1716 gtk_window_set_position (GTK_WINDOW (airpcap_advanced_w),
1717 GTK_WIN_POS_CENTER);
1719 gtk_window_set_resizable (GTK_WINDOW (airpcap_advanced_w), FALSE);
1720 gtk_window_set_type_hint (GTK_WINDOW (airpcap_advanced_w), GDK_WINDOW_TYPE_HINT_DIALOG);
1722 main_box = gtk_vbox_new (FALSE, 0);
1723 gtk_widget_set_name (main_box, "main_box");
1724 gtk_widget_show (main_box);
1725 gtk_container_add (GTK_CONTAINER (airpcap_advanced_w), main_box);
1727 settings_sub_box = gtk_vbox_new (FALSE, 0);
1728 gtk_widget_set_name (settings_sub_box, "settings_sub_box");
1729 gtk_widget_show (settings_sub_box);
1730 gtk_box_pack_start (GTK_BOX (main_box), settings_sub_box, FALSE, TRUE, 0);
1732 interface_fr = gtk_frame_new (NULL);
1733 gtk_widget_set_name (interface_fr, "interface_fr");
1734 gtk_widget_show (interface_fr);
1735 gtk_box_pack_start (GTK_BOX (settings_sub_box), interface_fr, FALSE, FALSE,
1737 gtk_container_set_border_width (GTK_CONTAINER (interface_fr), 10);
1739 interface_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1740 gtk_widget_set_name (interface_al, "interface_al");
1741 gtk_widget_show (interface_al);
1742 gtk_container_add (GTK_CONTAINER (interface_fr), interface_al);
1743 gtk_alignment_set_padding (GTK_ALIGNMENT (interface_al), 5, 5, 0, 0);
1745 interface_sub_h_box = gtk_hbox_new (FALSE, 0);
1746 gtk_widget_set_name (interface_sub_h_box, "interface_sub_h_box");
1747 gtk_widget_show (interface_sub_h_box);
1748 gtk_container_add (GTK_CONTAINER (interface_al), interface_sub_h_box);
1749 gtk_container_set_border_width (GTK_CONTAINER (interface_sub_h_box), 5);
1751 /* Fill the interface_box */
1752 if (airpcap_if_active != NULL)
1754 interface_name_lb = gtk_label_new(airpcap_if_active->description);
1758 interface_name_lb = gtk_label_new("No airpcap interface found!");
1759 gtk_widget_set_sensitive(main_box,FALSE);
1762 gtk_widget_set_name (interface_name_lb, "interface_name_lb");
1763 gtk_widget_show (interface_name_lb);
1764 gtk_box_pack_start (GTK_BOX (interface_sub_h_box), interface_name_lb, TRUE,
1767 /* If it is NOT the 'Any' Interface */
1768 if (!airpcap_if_is_any(airpcap_if_selected))
1770 blink_bt = gtk_button_new_with_mnemonic ("Blink Led");
1772 else /* It is the any interface, so it doesn't make sense to have 'Blink' button... */
1774 blink_bt = gtk_button_new_with_mnemonic ("What's This?");
1776 gtk_widget_set_name (blink_bt, "blink_bt");
1777 gtk_widget_show (blink_bt);
1778 gtk_box_pack_end (GTK_BOX (interface_sub_h_box), blink_bt, FALSE, FALSE, 0);
1780 interface_frame_lb = gtk_label_new ("<b>Interface</b>");
1781 gtk_widget_set_name (interface_frame_lb, "interface_frame_lb");
1782 gtk_widget_show (interface_frame_lb);
1783 gtk_frame_set_label_widget (GTK_FRAME (interface_fr), interface_frame_lb);
1784 gtk_label_set_use_markup (GTK_LABEL (interface_frame_lb), TRUE);
1786 basic_parameters_fr = gtk_frame_new (NULL);
1787 gtk_widget_set_name (basic_parameters_fr, "basic_parameters_fr");
1788 gtk_widget_show (basic_parameters_fr);
1789 gtk_box_pack_start (GTK_BOX (settings_sub_box), basic_parameters_fr, TRUE,FALSE, 0);
1790 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_fr), 10);
1792 basic_parameters_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1793 gtk_widget_set_name (basic_parameters_al, "basic_parameters_al");
1794 gtk_widget_show (basic_parameters_al);
1795 gtk_container_add (GTK_CONTAINER (basic_parameters_fr),basic_parameters_al);
1796 gtk_alignment_set_padding (GTK_ALIGNMENT (basic_parameters_al), 10, 10, 0, 0);
1798 basic_parameters_tb = gtk_table_new (2, 3, FALSE);
1799 gtk_widget_set_name (basic_parameters_tb, "basic_parameters_tb");
1800 gtk_widget_show (basic_parameters_tb);
1801 gtk_container_add (GTK_CONTAINER (basic_parameters_al),
1802 basic_parameters_tb);
1803 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_tb), 5);
1804 gtk_table_set_col_spacings (GTK_TABLE (basic_parameters_tb), 20);
1806 channel_lb = gtk_label_new ("Channel:");
1807 gtk_widget_set_name (channel_lb, "channel_lb");
1808 gtk_widget_show (channel_lb);
1809 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_lb, 0, 1, 0, 1,
1810 (GtkAttachOptions) (GTK_FILL),
1811 (GtkAttachOptions) (0), 0, 0);
1812 gtk_misc_set_alignment (GTK_MISC (channel_lb), 0, 0.5);
1814 capture_type_lb = gtk_label_new ("Capture Type:");
1815 gtk_widget_set_name (capture_type_lb, "capture_type_lb");
1816 gtk_widget_show (capture_type_lb);
1817 gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_lb, 0, 1, 2,
1818 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0),
1820 gtk_misc_set_alignment (GTK_MISC (capture_type_lb), 0, 0.5);
1822 /* Start: Channel offset label */
1823 channel_offset_lb = gtk_label_new ("Channel Offset:");
1824 gtk_widget_set_name (channel_offset_lb, "channel_offset_lb");
1825 gtk_widget_show (channel_offset_lb);
1826 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_lb, 0, 1, 1, 2,
1827 (GtkAttachOptions) (GTK_FILL),
1828 (GtkAttachOptions) (0), 0, 0);
1829 gtk_misc_set_alignment (GTK_MISC (channel_offset_lb), 0, 0.5);
1830 /* End: Channel offset label */
1832 /* Start: Channel offset combo box */
1833 channel_offset_cb = gtk_combo_box_new_text();
1834 gtk_widget_set_name (channel_offset_cb, "channel_offset_cb");
1836 airpcap_update_channel_offset_combo(airpcap_if_selected, airpcap_if_selected->channelInfo.Frequency, channel_offset_cb, FALSE);
1838 gtk_widget_show(channel_offset_cb);
1840 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_cb, 1, 2, 1, 2,
1841 (GtkAttachOptions) (GTK_FILL),
1842 (GtkAttachOptions) (0), 0, 0);
1843 /* End: Channel offset combo box */
1845 channel_cb = gtk_combo_box_new_text();
1846 gtk_widget_set_name (channel_cb, "channel_cb");
1847 gtk_widget_show (channel_cb);
1848 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_cb, 1, 2, 0, 1,
1849 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1850 (GtkAttachOptions) (0), 0, 0);
1852 /* Select the current channel */
1853 airpcap_update_channel_combo(GTK_WIDGET(channel_cb), airpcap_if_selected);
1855 capture_type_cb = gtk_combo_box_new_text();
1856 gtk_combo_box_append_text(GTK_COMBO_BOX(capture_type_cb), AIRPCAP_LINK_TYPE_NAME_802_11_ONLY);
1857 gtk_combo_box_append_text(GTK_COMBO_BOX(capture_type_cb), AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO);
1858 if (airpcap_get_dll_state() == AIRPCAP_DLL_OK) {
1859 gtk_combo_box_append_text(GTK_COMBO_BOX(capture_type_cb), AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI);
1862 gtk_widget_set_name (capture_type_cb, "capture_type_cb");
1863 gtk_widget_show (capture_type_cb);
1864 gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_cb, 1, 2, 2,
1865 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1866 (GtkAttachOptions) (0), 0, 0);
1868 /* Current interface value */
1869 if (airpcap_if_selected != NULL)
1871 if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_RADIO){
1872 gtk_combo_box_set_active(GTK_COMBO_BOX(capture_type_cb), AIRPCAP_LINK_TYPE_NUM_802_11_PLUS_RADIO);
1873 }else if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_PPI){
1874 gtk_combo_box_set_active(GTK_COMBO_BOX(capture_type_cb), AIRPCAP_LINK_TYPE_NUM_802_11_PLUS_PPI);
1876 gtk_combo_box_set_active(GTK_COMBO_BOX(capture_type_cb), AIRPCAP_LINK_TYPE_NUM_802_11_ONLY);
1880 fcs_ck = gtk_check_button_new_with_label ("Include 802.11 FCS in Frames");
1882 gtk_widget_set_name (fcs_ck, "fcs_ck");
1884 /* Fcs Presence check box */
1885 if (airpcap_if_selected != NULL)
1887 if (airpcap_if_selected->IsFcsPresent)
1888 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck),TRUE);
1890 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck),FALSE);
1893 gtk_widget_show (fcs_ck);
1894 gtk_table_attach (GTK_TABLE (basic_parameters_tb), fcs_ck, 2, 3, 0, 1,
1895 (GtkAttachOptions) (GTK_FILL),
1896 (GtkAttachOptions) (0), 0, 0);
1898 basic_parameters_fcs_h_box = gtk_hbox_new (FALSE, 1);
1899 gtk_widget_set_name (basic_parameters_fcs_h_box,
1900 "basic_parameters_fcs_h_box");
1901 gtk_widget_show (basic_parameters_fcs_h_box);
1902 gtk_table_attach (GTK_TABLE (basic_parameters_tb),
1903 basic_parameters_fcs_h_box, 2, 3, 2, 3,
1904 (GtkAttachOptions) (GTK_FILL),
1905 (GtkAttachOptions) (GTK_FILL), 3, 0);
1907 basic_parameters_fcs_filter_lb = gtk_label_new ("FCS Filter:");
1908 gtk_widget_set_name (basic_parameters_fcs_filter_lb,
1909 "basic_parameters_fcs_filter_lb");
1910 gtk_widget_show (basic_parameters_fcs_filter_lb);
1911 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box),
1912 basic_parameters_fcs_filter_lb, FALSE, FALSE, 0);
1914 fcs_filter_cb = gtk_combo_box_new_text();
1915 gtk_combo_box_append_text(GTK_COMBO_BOX(fcs_filter_cb), airpcap_get_validation_name(AIRPCAP_VT_ACCEPT_EVERYTHING));
1916 gtk_combo_box_append_text(GTK_COMBO_BOX(fcs_filter_cb), airpcap_get_validation_name(AIRPCAP_VT_ACCEPT_CORRECT_FRAMES));
1917 gtk_combo_box_append_text(GTK_COMBO_BOX(fcs_filter_cb), airpcap_get_validation_name(AIRPCAP_VT_ACCEPT_CORRUPT_FRAMES));
1918 gtk_combo_box_set_active(GTK_COMBO_BOX(fcs_filter_cb), 0);
1919 gtk_widget_set_name (fcs_filter_cb, "fcs_filter_cb");
1920 gtk_widget_show (fcs_filter_cb);
1921 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box), fcs_filter_cb,
1923 gtk_widget_set_size_request (fcs_filter_cb, 112, -1);
1925 if (airpcap_if_selected != NULL)
1927 airpcap_validation_type_combo_set_by_type(fcs_filter_cb, airpcap_if_selected->CrcValidationOn);
1930 basic_parameters_frame_lb = gtk_label_new ("<b>Basic Parameters</b>");
1931 gtk_widget_set_name (basic_parameters_frame_lb,
1932 "basic_parameters_frame_lb");
1933 gtk_widget_show (basic_parameters_frame_lb);
1935 gtk_frame_set_label_widget (GTK_FRAME (basic_parameters_fr),basic_parameters_frame_lb);
1936 gtk_label_set_use_markup (GTK_LABEL (basic_parameters_frame_lb), TRUE);
1938 low_buttons_h_box = gtk_hbox_new (FALSE, 0);
1939 gtk_widget_set_name (low_buttons_h_box, "low_buttons_h_box");
1940 gtk_widget_show (low_buttons_h_box);
1941 gtk_box_pack_end (GTK_BOX (main_box), low_buttons_h_box, FALSE, FALSE, 0);
1943 left_h_button_box = gtk_hbutton_box_new ();
1944 gtk_widget_set_name (left_h_button_box, "left_h_button_box");
1945 gtk_widget_show (left_h_button_box);
1946 gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
1949 right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
1950 gtk_widget_show (right_h_button_box);
1951 gtk_box_pack_end (GTK_BOX (low_buttons_h_box), right_h_button_box, FALSE,
1953 gtk_button_box_set_layout (GTK_BUTTON_BOX (right_h_button_box),
1956 ok_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_OK);
1957 apply_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_APPLY);
1958 cancel_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_CANCEL);
1960 /* Connect the callbacks */
1961 g_signal_connect (airpcap_advanced_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
1962 g_signal_connect (airpcap_advanced_w, "destroy", G_CALLBACK(on_airpcap_advanced_destroy), airpcap_advanced_w);
1964 if (!airpcap_if_is_any(airpcap_if_selected))
1966 g_signal_connect (blink_bt, "clicked", G_CALLBACK(on_blink_bt_clicked), NULL);
1970 g_signal_connect (blink_bt, "clicked", G_CALLBACK(on_what_s_this_bt_clicked), NULL);
1973 g_signal_connect (channel_cb, "changed", G_CALLBACK(airpcap_channel_changed_noset_cb), channel_offset_cb);
1974 /* We don't attach the channel offset combo because we don't want it changing anything yet. */
1975 g_signal_connect (capture_type_cb, "changed", G_CALLBACK(on_capture_type_cb_changed), NULL);
1976 g_signal_connect (fcs_ck, "toggled", G_CALLBACK(on_fcs_ck_toggled), NULL);
1977 g_signal_connect (fcs_filter_cb, "changed", G_CALLBACK(on_fcs_filter_cb_changed), NULL);
1978 g_signal_connect (apply_bt, "clicked", G_CALLBACK(on_advanced_apply_bt_clicked), airpcap_advanced_w);
1979 g_signal_connect (ok_bt,"clicked", G_CALLBACK(on_advanced_ok_bt_clicked), airpcap_advanced_w);
1980 g_signal_connect (cancel_bt,"clicked", G_CALLBACK(on_advanced_cancel_bt_clicked), airpcap_advanced_w);
1982 /* Different because the window will be closed ... */
1983 /*window_set_cancel_button(airpcap_advanced_w, ok_bt, window_cancel_button_cb);
1984 window_set_cancel_button(airpcap_advanced_w, cancel_bt, window_cancel_button_cb);*/
1987 /* Store pointers to all widgets, for use by lookup_widget(). */
1988 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_BLINK_KEY, blink_bt);
1989 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_CHANNEL_KEY,channel_cb);
1990 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_CHANNEL_OFFSET_KEY, channel_offset_cb);
1991 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_LINK_TYPE_KEY,capture_type_cb);
1992 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_FCS_CHECK_KEY, fcs_ck);
1993 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_FCS_FILTER_KEY, fcs_filter_cb);
1994 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_OK_KEY, ok_bt);
1995 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt);
1998 * I will need the toolbar and the main widget in some callback,
1999 * so I will add the toolbar pointer to the airpcap_advanced_w
2001 g_object_set_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY,toolbar);
2003 /* At the end, so that it appears completely all together ... */
2004 gtk_widget_show (airpcap_advanced_w);
2008 * Callback for the OK button 'clicked' in the Decryption Key Management window.
2011 on_key_management_ok_bt_clicked(GtkWidget *button, gpointer data)
2013 /* advanced window */
2014 GtkWidget *key_management_w;
2016 /* retrieve main window */
2017 key_management_w = GTK_WIDGET(data);
2019 /* Apply the current decryption preferences */
2020 on_key_management_apply_bt_clicked(button, data);
2022 /* Save the preferences to preferences file!!! */
2023 write_prefs_to_file();
2025 gtk_widget_destroy(key_management_w);
2029 * Callback for the CANCEL button 'clicked' in the Decryption Key Management window.
2032 on_key_management_cancel_bt_clicked(GtkWidget *button _U_, gpointer data)
2034 /* Retrieve object data */
2035 GtkWidget *key_management_w;
2036 GtkWidget *cancel_bt;
2038 GtkListStore *key_list_store;
2040 /* widgets in the toolbar */
2042 *toolbar_decryption_ck,
2045 /* Retrieve the GUI object pointers */
2046 key_management_w = GTK_WIDGET(data);
2047 cancel_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_CANCEL_KEY));
2048 ok_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_OK_KEY));
2049 key_list_store = GTK_LIST_STORE(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
2050 key_management_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEY));
2052 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY));
2054 /* retrieve toolbar info */
2055 toolbar_decryption_ck = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
2057 gtk_widget_destroy(key_management_w);
2060 /* Called to create the key management window */
2062 display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
2064 GtkWidget *key_management_w;
2065 GtkWidget *main_box;
2068 GtkWidget *keys_h_sub_box;
2069 GtkWidget *decryption_mode_tb;
2070 GtkWidget *decryption_mode_lb;
2071 GtkWidget *decryption_mode_cb;
2072 GtkWidget *keys_v_sub_box;
2073 GtkWidget *keys_scrolled_w;
2074 GtkListStore *key_list_store;
2075 GtkWidget *key_list;
2076 GtkWidget *key_v_button_box;
2077 GtkWidget *add_new_key_bt;
2078 GtkWidget *remove_key_bt;
2079 GtkWidget *edit_key_bt;
2080 GtkWidget *move_key_up_bt;
2081 GtkWidget *move_key_down_bt;
2082 GtkWidget *keys_frame_lb;
2083 GtkWidget *low_buttons_h_box;
2084 GtkWidget *left_h_button_box;
2085 GtkWidget *right_h_button_box;
2087 GtkWidget *apply_bt;
2088 GtkWidget *cancel_bt;
2090 /* widgets in the toolbar */
2092 *toolbar_decryption_ck;
2095 GtkTreeViewColumn *column;
2096 GtkCellRenderer *renderer;
2097 GtkTreeSortable *sortable;
2098 GtkTreeSelection *selection;
2101 /* Selected row/column structure */
2102 airpcap_key_ls_selected_info_t *key_ls_selected_item;
2103 key_ls_selected_item = (airpcap_key_ls_selected_info_t*)g_malloc(sizeof(airpcap_key_ls_selected_info_t));
2104 key_ls_selected_item->row = NO_ROW_SELECTED;
2106 /* user data - RETRIEVE pointers of toolbar widgets */
2107 toolbar = GTK_WIDGET(data);
2108 toolbar_decryption_ck = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
2110 /* gray out the toolbar */
2111 gtk_widget_set_sensitive(toolbar,FALSE);
2116 /* the selected is the active, for now */
2117 airpcap_if_selected = airpcap_if_active;
2119 /* Create the new window */
2120 key_management_w = dlg_window_new("Decryption Key Management"); /* transient_for top_level */
2121 gtk_window_set_destroy_with_parent (GTK_WINDOW(key_management_w), TRUE);
2123 gtk_container_set_border_width (GTK_CONTAINER (key_management_w), 5);
2124 gtk_window_set_position (GTK_WINDOW (key_management_w),
2125 GTK_WIN_POS_CENTER);
2127 gtk_window_set_resizable (GTK_WINDOW (key_management_w), FALSE);
2128 gtk_window_set_type_hint (GTK_WINDOW (key_management_w), GDK_WINDOW_TYPE_HINT_DIALOG);
2130 main_box = gtk_vbox_new (FALSE, 0);
2131 gtk_widget_set_name (main_box, "main_box");
2132 gtk_widget_show (main_box);
2133 gtk_container_add (GTK_CONTAINER (key_management_w), main_box);
2135 keys_fr = gtk_frame_new (NULL);
2136 gtk_widget_set_name (keys_fr, "keys_fr");
2137 gtk_widget_show (keys_fr);
2138 gtk_box_pack_start (GTK_BOX (main_box), keys_fr, FALSE, FALSE, 0);
2139 gtk_container_set_border_width (GTK_CONTAINER (keys_fr), 10);
2141 keys_al = gtk_alignment_new (0.5, 0.5, 1, 1);
2142 gtk_widget_set_name (keys_al, "keys_al");
2143 gtk_widget_show (keys_al);
2144 gtk_container_add (GTK_CONTAINER (keys_fr), keys_al);
2145 gtk_container_set_border_width (GTK_CONTAINER (keys_al), 5);
2147 gtk_alignment_set_padding (GTK_ALIGNMENT (keys_al), 0, 0, 12, 0);
2149 keys_h_sub_box = gtk_vbox_new (FALSE, 0);
2150 gtk_widget_set_name (keys_h_sub_box, "keys_h_sub_box");
2151 gtk_widget_show (keys_h_sub_box);
2152 gtk_container_add (GTK_CONTAINER (keys_al), keys_h_sub_box);
2154 decryption_mode_tb = gtk_table_new (1, 2, FALSE);
2155 gtk_widget_set_name (decryption_mode_tb, "decryption_mode_tb");
2156 gtk_widget_show (decryption_mode_tb);
2157 gtk_box_pack_start (GTK_BOX (keys_h_sub_box), decryption_mode_tb, FALSE,
2159 gtk_table_set_col_spacings (GTK_TABLE (decryption_mode_tb), 6);
2161 decryption_mode_lb = gtk_label_new ("Select Decryption Mode");
2162 gtk_widget_set_name (decryption_mode_lb, "decryption_mode_lb");
2163 gtk_widget_show (decryption_mode_lb);
2164 gtk_table_attach (GTK_TABLE (decryption_mode_tb), decryption_mode_lb, 1,
2165 2, 0, 1, (GtkAttachOptions) (GTK_FILL),
2166 (GtkAttachOptions) (0), 0, 0);
2167 gtk_misc_set_alignment (GTK_MISC (decryption_mode_lb), 0, 0.5);
2169 decryption_mode_cb = gtk_combo_box_new_text();
2170 update_decryption_mode_list(decryption_mode_cb);
2171 gtk_widget_set_name (decryption_mode_cb, "decryption_mode_cb");
2172 gtk_widget_show (decryption_mode_cb);
2173 gtk_table_attach (GTK_TABLE (decryption_mode_tb), decryption_mode_cb, 0,
2174 1, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0),
2176 gtk_widget_set_size_request (decryption_mode_cb, 83, -1);
2178 /* Set correct decryption mode!!!! */
2179 update_decryption_mode(decryption_mode_cb);
2181 keys_v_sub_box = gtk_hbox_new (FALSE, 0);
2182 gtk_widget_set_name (keys_v_sub_box, "keys_v_sub_box");
2183 gtk_widget_show (keys_v_sub_box);
2184 gtk_box_pack_start (GTK_BOX (keys_h_sub_box), keys_v_sub_box, TRUE, TRUE, 0);
2186 keys_scrolled_w = gtk_scrolled_window_new (NULL, NULL);
2187 gtk_widget_set_name (keys_scrolled_w, "keys_scrolled_w");
2188 gtk_widget_show (keys_scrolled_w);
2189 gtk_box_pack_start (GTK_BOX (keys_v_sub_box), keys_scrolled_w, TRUE, TRUE,
2191 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (keys_scrolled_w), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
2195 /* Create the store */
2196 key_list_store = gtk_list_store_new(KL_NUM_COLS,
2197 G_TYPE_STRING, /* Type */
2198 G_TYPE_STRING /* Key */
2199 , G_TYPE_STRING /* SSID */
2203 key_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(key_list_store));
2205 sortable = GTK_TREE_SORTABLE(key_list_store);
2207 #if GTK_CHECK_VERSION(2,6,0)
2208 /* Speed up the list display */
2209 gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(key_list), TRUE);
2212 /* Setup the sortable columns */
2213 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(key_list), FALSE);
2215 /* The view now holds a reference. We can get rid of our own reference */
2216 g_object_unref(G_OBJECT(key_list_store));
2219 * Create the first column packet, associating the "text" attribute of the
2220 * cell_renderer to the first column of the model
2222 renderer = gtk_cell_renderer_text_new();
2223 column = gtk_tree_view_column_new_with_attributes("Type", renderer,
2224 "text", KL_COL_TYPE, NULL);
2225 gtk_tree_view_column_set_sort_column_id(column, KL_COL_TYPE);
2226 gtk_tree_view_column_set_resizable(column, TRUE);
2227 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
2228 gtk_tree_view_column_set_min_width(column, 60);
2229 gtk_tree_view_column_set_fixed_width(column, 100);
2230 /* Add the column to the view. */
2231 gtk_tree_view_append_column(GTK_TREE_VIEW(key_list), column);
2234 renderer = gtk_cell_renderer_text_new();
2235 column = gtk_tree_view_column_new_with_attributes("Key", renderer,
2236 "text", KL_COL_KEY, NULL);
2237 gtk_tree_view_column_set_sort_column_id(column, KL_COL_KEY);
2238 gtk_tree_view_column_set_resizable(column, TRUE);
2239 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
2240 gtk_tree_view_column_set_min_width(column, 120);
2241 gtk_tree_view_column_set_fixed_width(column, 200);
2242 gtk_tree_view_append_column(GTK_TREE_VIEW(key_list), column);
2245 renderer = gtk_cell_renderer_text_new();
2246 column = gtk_tree_view_column_new_with_attributes("SSID", renderer,
2247 "text", KL_COL_SSID,
2249 gtk_tree_view_column_set_sort_column_id(column, KL_COL_SSID);
2250 gtk_tree_view_column_set_resizable(column, TRUE);
2251 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
2252 gtk_tree_view_column_set_min_width(column, 80);
2253 gtk_tree_view_column_set_fixed_width(column, 150);
2254 gtk_tree_view_append_column(GTK_TREE_VIEW(key_list), column);
2256 /* Now enable the sorting of each column */
2257 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(key_list), TRUE);
2258 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(key_list), TRUE);
2260 /* Setup the selection handler */
2261 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(key_list));
2262 gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
2264 gtk_widget_show (key_list);
2266 gtk_container_add (GTK_CONTAINER (keys_scrolled_w), key_list);
2268 key_v_button_box = gtk_vbutton_box_new ();
2269 gtk_widget_set_name (key_v_button_box, "key_v_button_box");
2270 gtk_widget_show (key_v_button_box);
2271 gtk_box_pack_start (GTK_BOX (keys_v_sub_box), key_v_button_box, FALSE, TRUE,
2274 add_new_key_bt = gtk_button_new_from_stock(GTK_STOCK_NEW);
2275 gtk_widget_set_name (add_new_key_bt, "add_new_key_bt");
2276 gtk_widget_show (add_new_key_bt);
2277 gtk_container_add (GTK_CONTAINER (key_v_button_box), add_new_key_bt);
2278 GTK_WIDGET_SET_FLAGS (add_new_key_bt, GTK_CAN_DEFAULT);
2280 edit_key_bt = gtk_button_new_from_stock(WIRESHARK_STOCK_EDIT);
2281 gtk_widget_set_name (edit_key_bt, "edit_key_bt");
2282 gtk_widget_show (edit_key_bt);
2283 gtk_container_add (GTK_CONTAINER (key_v_button_box), edit_key_bt);
2284 GTK_WIDGET_SET_FLAGS (edit_key_bt, GTK_CAN_DEFAULT);
2286 remove_key_bt = gtk_button_new_from_stock(GTK_STOCK_DELETE);
2287 gtk_widget_set_name (remove_key_bt, "remove_key_bt");
2288 gtk_widget_show (remove_key_bt);
2289 gtk_container_add (GTK_CONTAINER (key_v_button_box), remove_key_bt);
2290 GTK_WIDGET_SET_FLAGS (remove_key_bt, GTK_CAN_DEFAULT);
2292 move_key_up_bt = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
2293 gtk_widget_set_name (move_key_up_bt, "move_key_up_bt");
2294 gtk_widget_show (move_key_up_bt);
2295 gtk_container_add (GTK_CONTAINER (key_v_button_box), move_key_up_bt);
2296 GTK_WIDGET_SET_FLAGS (move_key_up_bt, GTK_CAN_DEFAULT);
2298 move_key_down_bt = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
2299 gtk_widget_set_name (move_key_down_bt, "move_key_down_bt");
2300 gtk_widget_show (move_key_down_bt);
2301 gtk_container_add (GTK_CONTAINER (key_v_button_box), move_key_down_bt);
2302 GTK_WIDGET_SET_FLAGS (move_key_down_bt, GTK_CAN_DEFAULT);
2304 keys_frame_lb = gtk_label_new ("<b>Decryption Keys</b>");
2305 gtk_widget_set_name (keys_frame_lb, "keys_frame_lb");
2306 gtk_widget_show (keys_frame_lb);
2308 gtk_frame_set_label_widget (GTK_FRAME (keys_fr), keys_frame_lb);
2309 gtk_label_set_use_markup (GTK_LABEL (keys_frame_lb), TRUE);
2311 low_buttons_h_box = gtk_hbox_new (FALSE, 0);
2312 gtk_widget_set_name (low_buttons_h_box, "low_buttons_h_box");
2313 gtk_widget_show (low_buttons_h_box);
2314 gtk_box_pack_end (GTK_BOX (main_box), low_buttons_h_box, FALSE, FALSE, 0);
2316 left_h_button_box = gtk_hbutton_box_new ();
2317 gtk_widget_set_name (left_h_button_box, "left_h_button_box");
2318 gtk_widget_show (left_h_button_box);
2319 gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
2322 right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
2323 gtk_widget_set_name (right_h_button_box, "right_h_button_box");
2324 gtk_widget_show (right_h_button_box);
2325 gtk_box_pack_end (GTK_BOX (low_buttons_h_box), right_h_button_box, FALSE,
2327 gtk_button_box_set_layout (GTK_BUTTON_BOX (right_h_button_box),
2330 ok_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_OK);
2331 apply_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_APPLY);
2332 cancel_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_CANCEL);
2334 /* Connect the callbacks */
2335 g_signal_connect (key_management_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
2336 g_signal_connect (key_management_w, "destroy", G_CALLBACK(on_key_management_destroy), key_management_w);
2337 g_signal_connect (add_new_key_bt, "clicked", G_CALLBACK(on_add_new_key_bt_clicked), key_management_w);
2338 g_signal_connect (remove_key_bt, "clicked", G_CALLBACK(on_remove_key_bt_clicked), key_management_w);
2339 g_signal_connect (edit_key_bt, "clicked", G_CALLBACK(on_edit_key_bt_clicked), key_management_w);
2340 g_signal_connect (move_key_up_bt, "clicked", G_CALLBACK(on_move_key_up_bt_clicked), key_list);
2341 g_signal_connect (move_key_down_bt, "clicked", G_CALLBACK(on_move_key_down_bt_clicked), key_list);
2342 g_signal_connect (apply_bt, "clicked", G_CALLBACK(on_key_management_apply_bt_clicked), key_management_w);
2343 g_signal_connect (ok_bt, "clicked", G_CALLBACK(on_key_management_ok_bt_clicked), key_management_w);
2344 g_signal_connect (cancel_bt, "clicked", G_CALLBACK(on_key_management_cancel_bt_clicked), key_management_w);
2345 g_signal_connect (selection, "changed", G_CALLBACK(on_key_list_select_row), key_management_w);
2346 g_signal_connect (key_list_store, "rows_reordered", G_CALLBACK(on_key_list_reorder), key_management_w);
2348 /* Different because the window will be closed ... */
2349 /*window_set_cancel_button(key_management_w, ok_bt, window_cancel_button_cb);
2350 window_set_cancel_button(key_management_w, cancel_bt, window_cancel_button_cb);*/
2352 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY,selection);
2354 /* Store pointers to all widgets, for use by lookup_widget(). */
2355 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_DECRYPTION_MODE_KEY, decryption_mode_cb);
2356 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_KEYLIST_KEY, key_list_store);
2357 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_OK_KEY, ok_bt);
2358 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt);
2360 /* Enable / disable buttons */
2361 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_NEW_KEY, add_new_key_bt);
2362 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_EDIT_KEY, edit_key_bt);
2363 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_DELETE_KEY, remove_key_bt);
2364 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_UP_KEY, move_key_up_bt);
2365 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_DOWN_KEY, move_key_down_bt);
2368 * I will need the toolbar and the main widget in some callback,
2369 * so I will add the toolbar pointer to the key_management_w
2371 g_object_set_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY,toolbar);
2372 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_TOOLBAR_DECRYPTION_KEY, toolbar_decryption_ck);
2374 /* FIRST OF ALL, CHECK THE KEY COLLECTIONS */
2376 * This will read the decryption keys from the preferences file, and will store
2377 * them into the registry...
2379 if (!airpcap_check_decryption_keys(airpcap_if_list))
2381 /* Ask the user what to do ...*/
2382 airpcap_keys_check_w(key_management_w,NULL);
2384 else /* Keys from lists are equals, or Wireshark has got no keys */
2386 airpcap_load_decryption_keys(airpcap_if_list);
2387 airpcap_fill_key_list(key_list_store);
2388 /* At the end, so that it appears completely all together ... */
2389 gtk_widget_show (key_management_w);
2392 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(key_list_store), &iter);
2393 gtk_tree_selection_select_iter(selection, &iter);
2398 on_keys_check_cancel_bt_clicked (GtkWidget *button _U_, gpointer user_data)
2400 GtkWidget *key_management_w;
2401 GtkWidget *keys_check_w;
2402 GtkListStore *key_list_store;
2404 keys_check_w = GTK_WIDGET(user_data);
2406 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
2408 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2409 and is not NULL if it was called when the Key Management widget has been clicked */
2410 if (key_management_w != NULL)
2413 key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
2414 airpcap_fill_key_list(key_list_store);
2415 gtk_widget_show (key_management_w);
2418 gtk_widget_destroy(keys_check_w);
2422 on_merge_bt_clicked (GtkWidget* button _U_, gpointer user_data)
2424 GtkWidget *key_management_w;
2425 GtkWidget *keys_check_w;
2426 GtkListStore *key_list_store;
2428 guint n_adapters = 0;
2429 guint n_wireshark_keys = 0;
2430 guint n_driver_keys = 0;
2431 guint n_curr_adapter_keys = 0;
2432 guint n_total_keys = 0;
2433 guint n_merged_keys = 0;
2436 GList* wireshark_keys=NULL;
2437 GList* driver_keys=NULL;
2438 GList* current_adapter_keys=NULL;
2439 GList* merged_list = NULL;
2440 GList* merged_list_tmp = NULL;
2442 airpcap_if_info_t* curr_adapter;
2444 keys_check_w = GTK_WIDGET(user_data);
2446 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
2448 n_adapters = g_list_length(airpcap_if_list);
2450 /* Retrieve Wireshark keys */
2451 wireshark_keys = get_wireshark_keys();
2452 n_wireshark_keys = g_list_length(wireshark_keys);
2453 n_total_keys += n_wireshark_keys;
2455 merged_list = merge_key_list(wireshark_keys,NULL);
2457 /* Retrieve AirPcap driver's keys */
2458 driver_keys = get_airpcap_driver_keys();
2459 n_driver_keys = g_list_length(driver_keys);
2460 n_total_keys += n_driver_keys;
2462 merged_list = merge_key_list(merged_list,driver_keys);
2464 /* NOW wireshark_keys and driver_keys ARE no more needed... at the end, we will have to free them! */
2465 for (i = 0; i<n_adapters; i++)
2467 curr_adapter = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i);
2468 current_adapter_keys = get_airpcap_device_keys(curr_adapter);
2469 n_curr_adapter_keys = g_list_length(current_adapter_keys);
2471 merged_list_tmp = merged_list;
2472 merged_list = merge_key_list(merged_list_tmp,current_adapter_keys);
2473 free_key_list(merged_list_tmp);
2475 n_total_keys += n_curr_adapter_keys;
2478 n_merged_keys = g_list_length(merged_list);
2480 /* Set up this new list as default for Wireshark and Adapters... */
2481 airpcap_save_decryption_keys(merged_list,airpcap_if_list);
2483 /* Write the preferences to the preferences file */
2484 write_prefs_to_file();
2486 free_key_list(wireshark_keys);
2487 free_key_list(driver_keys);
2489 gtk_widget_destroy(keys_check_w);
2491 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2492 and is not NULL if it was called when the Key Management widget has been clicked */
2493 if (key_management_w != NULL)
2496 key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
2497 airpcap_fill_key_list(key_list_store);
2498 gtk_widget_show (key_management_w);
2503 on_keep_bt_clicked (GtkWidget *button _U_, gpointer user_data)
2505 GtkWidget *key_management_w;
2506 GtkWidget *keys_check_w;
2507 GtkListStore *key_list_store=NULL;
2509 GList* wireshark_keys=NULL;
2510 guint n_wireshark_keys = 0;
2512 GList* merged_keys=NULL;
2513 guint n_merged_keys = 0;
2516 guint n_total_keys=0;
2518 keys_check_w = GTK_WIDGET(user_data);
2520 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
2522 n_adapters = g_list_length(airpcap_if_list);
2524 /* Retrieve Wireshark keys */
2525 wireshark_keys = get_wireshark_keys();
2526 n_wireshark_keys = g_list_length(wireshark_keys);
2527 n_total_keys += n_wireshark_keys;
2529 merged_keys = merge_key_list(wireshark_keys,NULL);
2530 n_merged_keys = g_list_length(merged_keys);
2532 /* Set up this new list as default for Wireshark and Adapters... */
2533 airpcap_save_decryption_keys(merged_keys,airpcap_if_list);
2535 /* Write the preferences to the preferences file (here is not needed, by the way)*/
2536 write_prefs_to_file();
2538 /* Free the memory */
2539 free_key_list(wireshark_keys);
2541 /* Close the window */
2542 gtk_widget_destroy(keys_check_w);
2544 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2545 and is not NULL if it was called when the Key Management widget has been clicked */
2546 if (key_management_w != NULL)
2549 key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
2550 airpcap_fill_key_list(key_list_store);
2551 gtk_widget_show (key_management_w);
2556 on_import_bt_clicked (GtkWidget* button _U_, gpointer user_data)
2558 GtkWidget *key_management_w;
2559 GtkWidget *keys_check_w;
2560 GtkListStore *key_list_store;
2562 guint n_adapters = 0;
2563 guint n_wireshark_keys = 0;
2564 guint n_driver_keys = 0;
2565 guint n_curr_adapter_keys = 0;
2566 guint n_total_keys = 0;
2567 guint n_merged_keys = 0;
2570 GList* wireshark_keys=NULL;
2571 GList* driver_keys=NULL;
2572 GList* current_adapter_keys=NULL;
2573 GList* merged_list = NULL;
2574 GList* merged_list_tmp = NULL;
2576 airpcap_if_info_t* curr_adapter;
2578 keys_check_w = GTK_WIDGET(user_data);
2580 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
2582 n_adapters = g_list_length(airpcap_if_list);
2584 wireshark_keys = get_wireshark_keys();
2585 n_wireshark_keys = g_list_length(wireshark_keys);
2586 n_total_keys += n_wireshark_keys;
2588 /* Retrieve AirPcap driver's keys */
2589 driver_keys = get_airpcap_driver_keys();
2590 n_driver_keys = g_list_length(driver_keys);
2591 n_total_keys += n_driver_keys;
2593 merged_list = merge_key_list(merged_list,driver_keys);
2595 /* NOW wireshark_keys IS no more needed... at the end, we will have to free it! */
2596 for (i = 0; i<n_adapters; i++)
2598 curr_adapter = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i);
2599 current_adapter_keys = get_airpcap_device_keys(curr_adapter);
2600 n_curr_adapter_keys = g_list_length(current_adapter_keys);
2602 merged_list_tmp = merged_list;
2603 merged_list = merge_key_list(merged_list_tmp,current_adapter_keys);
2604 free_key_list(merged_list_tmp);
2606 n_total_keys += n_curr_adapter_keys;
2609 n_merged_keys = g_list_length(merged_list);
2611 /* Set up this new list as default for Wireshark and Adapters... */
2612 airpcap_save_decryption_keys(merged_list,airpcap_if_list);
2614 /* Write the preferences to the preferences file */
2615 write_prefs_to_file();
2617 free_key_list(wireshark_keys);
2618 free_key_list(driver_keys);
2620 gtk_widget_destroy(keys_check_w);
2622 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2623 and is not NULL if it was called when the Key Management widget has been clicked */
2624 if (key_management_w != NULL)
2627 key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
2628 airpcap_fill_key_list(key_list_store);
2629 gtk_widget_show (key_management_w);
2634 on_ignore_bt_clicked (GtkWidget* button _U_, gpointer user_data)
2636 GtkWidget *key_management_w;
2637 GtkWidget *keys_check_w;
2638 GtkListStore *key_list_store;
2640 keys_check_w = GTK_WIDGET(user_data);
2642 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
2644 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2645 and is not NULL if it was called when the Key Management widget has been clicked */
2646 if (key_management_w != NULL)
2649 key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
2650 airpcap_fill_key_list(key_list_store);
2651 gtk_widget_show (key_management_w);
2654 gtk_widget_destroy(keys_check_w);
2658 on_keys_check_ok_bt_clicked (GtkWidget *button _U_, gpointer user_data)
2660 GtkWidget *key_management_w;
2661 GtkWidget *keys_check_w;
2663 GtkWidget *merge_rb,
2668 keys_check_w = GTK_WIDGET(user_data);
2670 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
2671 merge_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY);
2672 keep_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY);
2673 import_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY);
2674 ignore_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY);
2676 /* Find out which radio button is selected and call the correct function */
2677 if (GTK_TOGGLE_BUTTON(merge_rb)->active) on_merge_bt_clicked (merge_rb,keys_check_w);
2678 else if (GTK_TOGGLE_BUTTON(keep_rb)->active) on_keep_bt_clicked (keep_rb,keys_check_w);
2679 else if (GTK_TOGGLE_BUTTON(import_rb)->active) on_import_bt_clicked (import_rb,keys_check_w);
2680 else if (GTK_TOGGLE_BUTTON(ignore_rb)->active) on_ignore_bt_clicked (ignore_rb,keys_check_w);
2681 else on_keys_check_cancel_bt_clicked(NULL,keys_check_w);
2685 on_keys_check_w_destroy (GtkWidget *w _U_, gpointer user_data)
2687 gtk_widget_set_sensitive(top_level,TRUE);
2688 gtk_widget_set_sensitive(GTK_WIDGET(user_data),TRUE);
2692 * Dialog box that appears whenever keys are not consistent between Wireshark and AirPcap
2695 airpcap_keys_check_w(GtkWidget *w, gpointer data _U_)
2697 GtkWidget *keys_check_w;
2698 GtkWidget *main_v_box;
2699 GtkWidget *warning_lb;
2700 GtkWidget *radio_tb;
2702 GSList *radio_bt_group = NULL;
2703 GtkWidget *merge_rb;
2704 GtkWidget *import_rb;
2705 GtkWidget *ignore_rb;
2707 GtkWidget *merge_lb;
2708 GtkWidget *import_lb;
2709 GtkWidget *ignore_lb;
2710 GtkWidget *low_h_button_box;
2712 GtkWidget *cancel_bt;
2714 keys_check_w = window_new (GTK_WINDOW_TOPLEVEL, "Decryption Key Warning");
2715 gtk_widget_set_name (keys_check_w, "keys_check_w");
2716 gtk_window_set_resizable (GTK_WINDOW (keys_check_w), FALSE);
2718 main_v_box = gtk_vbox_new (FALSE, 0);
2719 gtk_widget_set_name (main_v_box, "main_v_box");
2720 gtk_widget_show (main_v_box);
2721 gtk_container_add (GTK_CONTAINER (keys_check_w), main_v_box);
2723 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:");
2724 gtk_label_set_use_markup (GTK_LABEL (warning_lb), TRUE);
2725 gtk_widget_set_name (warning_lb, "warning_lb");
2726 gtk_widget_show (warning_lb);
2727 gtk_box_pack_start (GTK_BOX (main_v_box), warning_lb, FALSE, FALSE, 0);
2728 gtk_label_set_justify (GTK_LABEL (warning_lb), GTK_JUSTIFY_CENTER);
2729 gtk_label_set_line_wrap (GTK_LABEL (warning_lb), TRUE);
2731 radio_tb = gtk_table_new (4, 2, FALSE);
2732 gtk_widget_set_name (radio_tb, "radio_tb");
2733 gtk_widget_show (radio_tb);
2734 gtk_box_pack_start (GTK_BOX (main_v_box), radio_tb, TRUE, FALSE, 0);
2735 gtk_container_set_border_width (GTK_CONTAINER (radio_tb), 5);
2736 gtk_table_set_col_spacings (GTK_TABLE (radio_tb), 8);
2738 keep_rb = gtk_radio_button_new_with_mnemonic (NULL, "Keep");
2739 gtk_widget_set_name (keep_rb, "keep_rb");
2740 gtk_widget_show (keep_rb);
2741 gtk_table_attach (GTK_TABLE (radio_tb), keep_rb, 0, 1, 0, 1,
2742 (GtkAttachOptions) (GTK_FILL),
2743 (GtkAttachOptions) (0), 0, 0);
2744 gtk_radio_button_set_group (GTK_RADIO_BUTTON (keep_rb), radio_bt_group);
2745 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (keep_rb));
2747 merge_rb = gtk_radio_button_new_with_mnemonic (NULL, "Merge");
2748 gtk_widget_set_name (merge_rb, "merge_rb");
2749 gtk_widget_show (merge_rb);
2750 gtk_table_attach (GTK_TABLE (radio_tb), merge_rb, 0, 1, 1, 2,
2751 (GtkAttachOptions) (GTK_FILL),
2752 (GtkAttachOptions) (0), 0, 0);
2753 gtk_radio_button_set_group (GTK_RADIO_BUTTON (merge_rb), radio_bt_group);
2754 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (merge_rb));
2756 import_rb = gtk_radio_button_new_with_mnemonic (NULL, "Import");
2757 gtk_widget_set_name (import_rb, "import_rb");
2758 gtk_widget_show (import_rb);
2759 gtk_table_attach (GTK_TABLE (radio_tb), import_rb, 0, 1, 2, 3,
2760 (GtkAttachOptions) (GTK_FILL),
2761 (GtkAttachOptions) (0), 0, 0);
2762 gtk_radio_button_set_group (GTK_RADIO_BUTTON (import_rb), radio_bt_group);
2763 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (import_rb));
2765 ignore_rb = gtk_radio_button_new_with_mnemonic (NULL, "Ignore");
2766 gtk_widget_set_name (ignore_rb, "ignore_rb");
2767 gtk_widget_show (ignore_rb);
2768 gtk_table_attach (GTK_TABLE (radio_tb), ignore_rb, 0, 1, 3, 4,
2769 (GtkAttachOptions) (GTK_FILL),
2770 (GtkAttachOptions) (0), 0, 0);
2771 gtk_radio_button_set_group (GTK_RADIO_BUTTON (ignore_rb), radio_bt_group);
2772 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (ignore_rb));
2776 ("Use Wireshark keys, thus overwriting AirPcap adapter(s) ones.");
2777 gtk_widget_set_name (keep_lb, "keep_lb");
2778 gtk_widget_show (keep_lb);
2779 gtk_table_attach (GTK_TABLE (radio_tb), keep_lb, 1, 2, 0, 1,
2780 (GtkAttachOptions) (GTK_FILL),
2781 (GtkAttachOptions) (0), 0, 0);
2782 gtk_misc_set_alignment (GTK_MISC (keep_lb), 0, 0.5);
2784 merge_lb = gtk_label_new ("Merge Wireshark and AirPcap adapter(s) keys.");
2785 gtk_widget_set_name (merge_lb, "merge_lb");
2786 gtk_widget_show (merge_lb);
2787 gtk_table_attach (GTK_TABLE (radio_tb), merge_lb, 1, 2, 1, 2,
2788 (GtkAttachOptions) (GTK_FILL),
2789 (GtkAttachOptions) (0), 0, 0);
2790 gtk_misc_set_alignment (GTK_MISC (merge_lb), 0, 0.5);
2794 ("Use AirPcap adapter(s) keys, thus overwriting Wireshark ones.");
2795 gtk_widget_set_name (import_lb, "import_lb");
2796 gtk_widget_show (import_lb);
2797 gtk_table_attach (GTK_TABLE (radio_tb), import_lb, 1, 2, 2, 3,
2798 (GtkAttachOptions) (GTK_FILL),
2799 (GtkAttachOptions) (0), 0, 0);
2800 gtk_misc_set_alignment (GTK_MISC (import_lb), 0, 0.5);
2804 ("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.");
2805 gtk_widget_set_name (ignore_lb, "ignore_lb");
2806 gtk_widget_show (ignore_lb);
2807 gtk_table_attach (GTK_TABLE (radio_tb), ignore_lb, 1, 2, 3, 4,
2808 (GtkAttachOptions) (GTK_FILL),
2809 (GtkAttachOptions) (0), 0, 0);
2810 gtk_label_set_line_wrap (GTK_LABEL (ignore_lb), TRUE);
2811 gtk_misc_set_alignment (GTK_MISC (ignore_lb), 0, 0.5);
2813 low_h_button_box = gtk_hbutton_box_new ();
2814 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
2815 gtk_widget_show (low_h_button_box);
2816 gtk_box_pack_start (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE,
2818 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
2819 GTK_BUTTONBOX_SPREAD);
2821 ok_bt = gtk_button_new_with_mnemonic ("OK");
2822 gtk_widget_set_name (ok_bt, "ok_bt");
2823 gtk_widget_show (ok_bt);
2824 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
2825 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
2827 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
2828 gtk_widget_set_name (cancel_bt, "cancel_bt");
2829 gtk_widget_show (cancel_bt);
2830 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
2831 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
2833 /* Store pointers to all widgets, for use by lookup_widget(). */
2834 g_signal_connect (ok_bt, "clicked", G_CALLBACK(on_keys_check_ok_bt_clicked), keys_check_w);
2835 g_signal_connect (cancel_bt, "clicked", G_CALLBACK(on_keys_check_cancel_bt_clicked), keys_check_w);
2836 g_signal_connect (keys_check_w, "destroy", G_CALLBACK(on_keys_check_w_destroy), keys_check_w);
2838 /* Store pointers to all widgets, for use by lookup_widget(). */
2839 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY,w);
2840 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY,merge_rb);
2841 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY,keep_rb);
2842 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY,import_rb);
2843 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY,ignore_rb);
2844 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_GROUP_KEY,radio_bt_group);
2846 gtk_widget_set_sensitive(top_level,FALSE);
2847 gtk_widget_show(keys_check_w);
2851 #endif /* HAVE_AIRPCAP */
2859 * indent-tabs-mode: t
2862 * ex: set shiftwidth=4 tabstop=4 noexpandtab
2863 * :indentSize=4:tabSize=4:noTabs=false: