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.
35 /*#include <glib/gprintf.h> */
39 #include <epan/filesystem.h>
40 #include <epan/emem.h>
41 #include <epan/prefs.h>
42 #include <epan/prefs-int.h>
43 #include <epan/frequency-utils.h>
44 #include <epan/crypt/wep-wpadefs.h>
48 #include "../simple_dialog.h"
51 #include "gtk/dlg_utils.h"
52 #include "gtk/gui_utils.h"
53 #include "gtk/dfilter_expr_dlg.h"
54 #include "gtk/stock_icons.h"
55 #include "gtk/gtkglobals.h"
56 #include "gtk/help_dlg.h"
60 #include "airpcap_loader.h"
61 #include "airpcap_gui_utils.h"
62 #include "airpcap_dlg.h"
65 * This function is used to write the preferences to the preferences file.
66 * It has the same behaviour as prefs_main_write() in prefs_dlg.c
69 write_prefs_to_file(void)
75 /* Create the directory that holds personal configuration files, if
77 if (create_persconffile_dir(&pf_dir_path) == -1) {
78 simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
79 "Can't create directory\n\"%s\"\nfor preferences file: %s.", pf_dir_path,
83 /* Write the preferencs out. */
84 err = write_prefs(&pf_path);
86 simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
87 "Can't open preferences file\n\"%s\": %s.", pf_path,
95 * This struct will contain useful data for the selected (actual) airpcap device
98 airpcap_fill_if_combo(GtkWidget *combo, GList* if_list)
101 GList* popdown_if_list = NULL;
103 airpcap_if_info_t* if_info = NULL;
105 curr = g_list_nth(if_list, ifn);
107 if (curr != NULL) if_info = curr->data;
109 popdown_if_list = NULL;
110 ifn = g_list_length(if_list) - 1;
111 while (ifn >= 0) /* reverse order */
113 curr = g_list_nth(if_list, ifn);
116 if_info = curr->data;
118 popdown_if_list = g_list_append( popdown_if_list , if_info->description) ;
121 gtk_combo_set_popdown_strings( GTK_COMBO(combo), popdown_if_list) ;
122 g_list_free(popdown_if_list);
124 if (airpcap_if_selected != NULL)
126 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), airpcap_if_selected->description);
130 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), "No Wireless Interfaces Found");
135 * Callback for the select row event in the key list widget
138 on_key_ls_select_row(GtkWidget *widget,
141 GdkEventButton *event,
144 airpcap_key_ls_selected_info_t* selected_item;
146 selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
148 selected_item->row = row;
149 selected_item->column = column;
153 * Callback for the unselect row event in the key list widget
156 on_key_ls_unselect_row(GtkWidget *widget,
159 GdkEventButton *event,
162 airpcap_key_ls_selected_info_t* selected_item;
164 selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
166 selected_item->row = NO_ROW_SELECTED;
167 selected_item->column = NO_COLUMN_SELECTED;
171 * Callback for the click column event in the key list widget
174 on_key_ls_click_column(GtkWidget *widget,
181 * Callback for the crc checkbox
184 on_fcs_ck_toggled(GtkWidget *w, gpointer user_data)
187 if (airpcap_if_selected != NULL)
189 if (airpcap_if_selected->IsFcsPresent)
191 airpcap_if_selected->IsFcsPresent = FALSE;
192 airpcap_if_selected->saved = FALSE;
196 airpcap_if_selected->IsFcsPresent = TRUE;
197 airpcap_if_selected->saved = FALSE;
203 * Callback for the wrong crc combo
206 on_edit_type_en_changed(GtkWidget *w, gpointer data)
208 GtkWidget *edit_key_w;
209 GtkWidget *edit_ssid_te;
214 gchar* type_text = NULL;
216 edit_key_w = GTK_WIDGET(data);
219 edit_ssid_te = g_object_get_data(G_OBJECT(edit_key_w),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY);
220 key_lb = g_object_get_data(G_OBJECT(edit_key_w),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY);
221 ssid_lb = g_object_get_data(G_OBJECT(edit_key_w),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY);
223 type_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(type_te)));
225 if (string_is_not_empty(type_text))
228 * If it is a WEP key, no SSID is required! Gray out the entry text so
229 * it doesn't create confusion ...
231 if (g_ascii_strcasecmp(type_text,AIRPCAP_WEP_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 WEP...
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_BIN_KEY_STRING) == 0)
244 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
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),"Key");
251 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
253 else if (g_ascii_strcasecmp(type_text,AIRPCAP_WPA_PWD_KEY_STRING) == 0)
255 gtk_widget_set_sensitive(edit_ssid_te,TRUE);
257 * Maybe the user has already entered some text into the SSID field
258 * and then switched to WPA...
260 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),"");
261 gtk_label_set_text(GTK_LABEL(key_lb),"Passphrase");
262 gtk_label_set_text(GTK_LABEL(ssid_lb),"SSID");
265 gtk_widget_show(edit_ssid_te);
271 * Callback for the wrong crc combo
274 on_add_type_en_changed(GtkWidget *w, gpointer data)
276 GtkWidget *add_key_w;
277 GtkWidget *add_ssid_te;
282 gchar* type_text = NULL;
284 add_key_w = GTK_WIDGET(data);
287 add_ssid_te = g_object_get_data(G_OBJECT(add_key_w),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY);
288 key_lb = g_object_get_data(G_OBJECT(add_key_w),AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY);
289 ssid_lb = g_object_get_data(G_OBJECT(add_key_w),AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY);
291 type_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(type_te)));
293 if (string_is_not_empty(type_text))
296 * If it is a WEP key, no SSID is required! Gray out rhe entry text so
297 * it doesn't create confusion ...
299 if (g_ascii_strcasecmp(type_text,AIRPCAP_WEP_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 WEP...
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_BIN_KEY_STRING) == 0)
312 gtk_widget_set_sensitive(add_ssid_te,FALSE);
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),"Key");
319 gtk_label_set_text(GTK_LABEL(ssid_lb),"");
321 else if (g_ascii_strcasecmp(type_text,AIRPCAP_WPA_PWD_KEY_STRING) == 0)
323 gtk_widget_set_sensitive(add_ssid_te,TRUE);
325 * Maybe the user has already entered some text into the SSID field
326 * and then switched to WPA...
328 gtk_entry_set_text(GTK_ENTRY(add_ssid_te),"");
329 gtk_label_set_text(GTK_LABEL(key_lb),"Passphrase");
330 gtk_label_set_text(GTK_LABEL(ssid_lb),"SSID");
333 gtk_widget_show(add_ssid_te);
339 * Returns FALSE if a text string has length 0, i.e. the first char
340 * is '\0', TRUE otherwise
343 string_is_not_empty(gchar *s)
345 if (g_ascii_strcasecmp(s,"") != 0)
352 * Callback for the wrong crc combo
355 on_fcs_filter_en_changed(GtkWidget *w, gpointer data _U_)
359 s = gtk_entry_get_text(GTK_ENTRY(w));
363 if ((g_ascii_strcasecmp("",s)))
365 airpcap_if_selected->CrcValidationOn = airpcap_get_validation_type(s);
366 airpcap_if_selected->saved = FALSE;
372 * Changed callback for the channel combobox
375 on_channel_en_changed(GtkWidget *w, gpointer data _U_)
382 s = gtk_entry_get_text(GTK_ENTRY(w));
383 if ((g_ascii_strcasecmp("",s)))
385 if (airpcap_if_selected != NULL)
387 ch_freq = airpcap_get_frequency_from_str(s);
388 airpcap_if_active->channelInfo.Frequency = ch_freq;
389 airpcap_if_selected->saved = FALSE;
390 airpcap_update_channel_offset_cb(airpcap_if_selected, ch_freq, GTK_WIDGET(data));
397 * Changed callback for the channel offset combobox
400 on_channel_offset_cb_changed(GtkWidget *w, gpointer data _U_)
405 if (w == NULL || !GTK_WIDGET_SENSITIVE(w)) {
409 s = gtk_entry_get_text(GTK_ENTRY(w));
410 if ((g_ascii_strcasecmp("",s)))
412 if (airpcap_if_selected != NULL)
414 sscanf(s,"%d",&offset);
415 airpcap_if_selected->channelInfo.ExtChannel = offset;
416 airpcap_if_selected->saved = FALSE;
422 * Changed callback for the capture type combobox
425 on_capture_type_en_changed(GtkWidget *w, gpointer data _U_)
433 s = gtk_entry_get_text(GTK_ENTRY(w));
435 if ((g_ascii_strcasecmp("",s)))
437 airpcap_if_selected->linkType = airpcap_get_link_type(s);
438 airpcap_if_selected->saved = FALSE;
443 * Activate callback for the adapter combobox
446 combo_if_activate_cb(GtkWidget *entry _U_, gpointer data _U_)
451 * Thread function used to blink the led
453 gboolean update_blink(gpointer data)
455 airpcap_if_info_t* sel;
457 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
459 sel = (airpcap_if_info_t*)data;
461 ad = airpcap_if_open(sel->name, ebuf);
466 airpcap_if_turn_led_off(ad, 0);
471 airpcap_if_turn_led_on(ad, 0);
474 airpcap_if_close(ad);
480 * Blink button callback
483 on_blink_bt_clicked( GtkWidget *blink_bt, gpointer if_data )
485 PAirpcapHandle ad = NULL;
486 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
488 if (airpcap_if_selected != NULL)
489 if (!(airpcap_if_selected->blinking))
491 gtk_button_set_label(GTK_BUTTON(blink_bt),"Stop Blinking");
492 airpcap_if_selected->tag = g_timeout_add(500,update_blink,airpcap_if_selected);
493 airpcap_if_selected->blinking = TRUE;
497 gtk_button_set_label(GTK_BUTTON(blink_bt)," Blink Led ");
498 g_source_remove(airpcap_if_selected->tag);
499 airpcap_if_selected->blinking = FALSE;
500 /* Switch on the led! */
501 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
504 g_source_remove(airpcap_if_selected->tag);
505 airpcap_if_turn_led_on(ad, 0);
506 airpcap_if_selected->blinking = FALSE;
507 airpcap_if_selected->led = TRUE;
508 airpcap_if_close(ad);
514 * Callback for the 'Any' adapter What's This button.
517 on_what_s_this_bt_clicked( GtkWidget *blink_bt _U_, gpointer if_data )
519 simple_dialog(ESD_TYPE_INFO,ESD_BTN_OK,
520 "The Multi-Channel Aggregator is a virtual device "
521 "that can be used to capture packets from all the "
522 "AirPcap adapters at the same time.\n"
523 "The Capture Type, FCS and Encryption settings of "
524 "this virtual device can be configured as for any "
525 "real adapter.\nThe channel cannot be changed for "
527 "Refer to the AirPcap manual for more information.");
530 /* the window was closed, cleanup things */
532 on_key_management_destroy(GtkWidget *w _U_, gpointer data _U_)
534 GtkWidget *airpcap_advanced_w,
537 gint *from_widget = NULL;
539 /* Retrieve the GUI object pointers */
540 airpcap_advanced_w = GTK_WIDGET(data);
542 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
545 from_widget = (gint*)g_object_get_data(G_OBJECT(toolbar),AIRPCAP_ADVANCED_FROM_KEY);
546 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
547 if ( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR)
548 gtk_widget_set_sensitive(toolbar,TRUE);
550 gtk_widget_set_sensitive(toolbar,FALSE);
554 /* reload the configuration!!! Configuration has not been saved but
555 the corresponding structure has been modified probably...*/
556 if (airpcap_if_selected != NULL)
558 if (!airpcap_if_selected->saved)
560 airpcap_load_selected_if_configuration(airpcap_if_selected);
566 /* the Advenced wireless Settings window was closed, cleanup things */
568 on_airpcap_advanced_destroy(GtkWidget *w _U_, gpointer data)
570 GtkWidget *airpcap_advanced_w,
573 gint *from_widget = NULL;
575 /* Retrieve the GUI object pointers */
576 airpcap_advanced_w = GTK_WIDGET(data);
578 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
581 from_widget = (gint*)g_object_get_data(G_OBJECT(toolbar),AIRPCAP_ADVANCED_FROM_KEY);
582 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
583 if ( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR)
584 gtk_widget_set_sensitive(toolbar,TRUE);
586 gtk_widget_set_sensitive(toolbar,FALSE);
590 /* reload the configuration!!! Configuration has not been saved but
591 the corresponding structure has been modified probably...*/
592 if (!airpcap_if_selected->saved)
594 airpcap_load_selected_if_configuration(airpcap_if_selected);
599 * Callback for the 'Apply' button.
602 * XXX - Pressing 'Apply' has the same effect as pressing 'OK' -- you
603 * can't revert back to the old set of keys by pressing 'Cancel'. We
604 * either need to fix reversion or get rid of the 'Apply' button.
607 on_key_management_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
609 /* advenced window */
610 GtkWidget *key_management_w;
612 /* widgets in the toolbar */
614 GtkWidget *toolbar_cm;
616 GtkWidget *decryption_en;
618 char* decryption_mode_string = NULL;
619 module_t *wlan_module = prefs_find_module("wlan");
621 /* retrieve main window */
622 key_management_w = GTK_WIDGET(data);
623 decryption_en = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_WEP_DECRYPTION_KEY));
624 key_ls = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
625 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY));
626 toolbar_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
628 #define CANT_SAVE_ERR_STR "Cannot save configuration! Another application " \
629 "might be using AirPcap, or you might not have sufficient privileges."
630 /* Set the Decryption Mode */
631 if (g_ascii_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK) == 0)
633 set_wireshark_decryption(TRUE);
634 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
636 else if (g_ascii_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
638 set_wireshark_decryption(FALSE);
639 if (!set_airpcap_decryption(TRUE)) g_warning(CANT_SAVE_ERR_STR);
641 else if (g_ascii_strcasecmp(gtk_entry_get_text(GTK_ENTRY(decryption_en)),AIRPCAP_DECRYPTION_TYPE_STRING_NONE) == 0)
643 set_wireshark_decryption(FALSE);
644 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
647 /* Save the configuration */
648 airpcap_read_and_save_decryption_keys_from_clist(key_ls,airpcap_if_selected,airpcap_if_list); /* This will save the keys for every adapter */
650 /* The update will make redissect al the packets... no need to do it here again */
651 update_decryption_mode_cm(toolbar_cm);
653 /* Redissect all the packets, and re-evaluate the display filter. */
654 prefs_apply(wlan_module);
657 * Callback for the Wireless Advanced Settings 'Apply' button.
660 on_advanced_apply_bt_clicked(GtkWidget *button, gpointer data _U_)
662 /* advenced window */
665 /* widgets in the toolbar */
669 *toolbar_channel_offset_cb,
670 *toolbar_wrong_crc_cm;
672 /* retrieve main window */
673 main_w = GTK_WIDGET(data);
675 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(main_w),AIRPCAP_TOOLBAR_KEY));
677 /* retrieve toolbar info */
678 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
679 toolbar_channel_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
680 toolbar_channel_offset_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY));
681 toolbar_wrong_crc_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
683 /* Save the configuration (for all ) */
684 airpcap_save_selected_if_configuration(airpcap_if_selected);
686 /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/
687 if ( g_ascii_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0)
689 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)));
690 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
691 airpcap_update_channel_offset_combo_entry(GTK_WIDGET(toolbar_channel_offset_cb),airpcap_if_selected->channelInfo.ExtChannel);
692 airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
696 #if 0 /* XXX: not used ?? */
698 * Callback for the 'OK' button.
701 airpcap_advanced_ok_cb(GtkWidget *w, gpointer data _U_)
703 /* advanced window */
706 /* widgets in the toolbar */
710 *toolbar_wrong_crc_cm,
711 *toolbar_decryption_ck;
715 /* retrieve main window */
716 main_w = GTK_WIDGET(data);
718 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(main_w),AIRPCAP_TOOLBAR_KEY));
720 key_ls = GTK_WIDGET(g_object_get_data(G_OBJECT(main_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
722 /* retrieve toolbar info */
723 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
724 toolbar_channel_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
725 toolbar_wrong_crc_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
726 toolbar_decryption_ck = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
728 /* Save the configuration */
729 airpcap_add_keys_from_list(key_ls,airpcap_if_selected);
730 airpcap_save_selected_if_configuration(airpcap_if_selected);
731 /* Remove GLIB timeout */
732 g_source_remove(airpcap_if_selected->tag);
734 /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/
735 if ( g_ascii_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0)
737 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)));
738 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
739 airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
741 g_signal_handlers_block_by_func (toolbar_decryption_ck,airpcap_toolbar_encryption_cb, toolbar);
742 if (airpcap_if_active->DecryptionOn == AIRPCAP_DECRYPTION_ON)
743 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),TRUE);
745 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),FALSE);
746 g_signal_handlers_unblock_by_func (toolbar_decryption_ck,airpcap_toolbar_encryption_cb, toolbar);
752 * Callback for the 'Reset Configuration' button.
755 on_reset_configuration_bt_clicked(GtkWidget *button _U_, gpointer data _U_)
761 * Callback used to add a WEP key in the add new key box;
764 on_add_key_ok_bt_clicked(GtkWidget *widget, gpointer data _U_)
772 GString *new_type_string,
776 gchar *type_entered = NULL;
777 gchar *key_entered = NULL;
778 gchar *ssid_entered = NULL;
780 airpcap_key_ls_selected_info_t *selected_item;
782 int keys_in_list = 0;
786 gint r = NO_ROW_SELECTED;
787 gint c = NO_COLUMN_SELECTED;
789 key_ls = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY);
790 selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
791 type_cm = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY);
792 key_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY);
793 ssid_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY);
795 r = selected_item->row;
796 c = selected_item->column;
798 keys_in_list = GTK_CLIST(key_ls)->rows;
800 type_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(type_cm)->entry)));
801 key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
802 ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
804 /* Check if key is correct */
805 new_type_string = g_string_new(type_entered);
806 new_key_string = g_string_new(key_entered);
807 new_ssid_string = g_string_new(ssid_entered);
809 g_strchug(new_key_string->str);
810 g_strchomp(new_key_string->str);
812 g_strchug(new_ssid_string->str);
813 g_strchomp(new_ssid_string->str);
815 /* Check which type of key the user has entered */
816 if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
819 if ( ((new_key_string->len) > WEP_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WEP_KEY_MIN_CHAR_SIZE))
821 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);
823 g_string_free(new_type_string,TRUE);
824 g_string_free(new_key_string, TRUE);
825 g_string_free(new_ssid_string,TRUE);
827 g_free(type_entered);
828 g_free(key_entered );
829 g_free(ssid_entered);
833 if ((new_key_string->len % 2) != 0)
835 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nThe number of characters must be even.");
837 g_string_free(new_type_string,TRUE);
838 g_string_free(new_key_string, TRUE);
839 g_string_free(new_ssid_string,TRUE);
841 g_free(type_entered);
842 g_free(key_entered );
843 g_free(ssid_entered);
847 for (i = 0; i < new_key_string->len; i++)
849 if (!g_ascii_isxdigit(new_key_string->str[i]))
851 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nA WEP key must be a hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
853 g_string_free(new_type_string,TRUE);
854 g_string_free(new_key_string, TRUE);
855 g_string_free(new_ssid_string,TRUE);
857 g_free(type_entered);
858 g_free(key_entered );
859 g_free(ssid_entered);
864 /* If so... add key */
865 airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
867 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
869 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_PWD_KEY_STRING) == 0) /* WPA Key */
871 /* XXX - Perform some WPA related input fields check */
872 /* If everything is ok, modify the entry in the list */
874 if ( ((new_key_string->len) > WPA_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WPA_KEY_MIN_CHAR_SIZE))
876 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);
878 g_string_free(new_type_string,TRUE);
879 g_string_free(new_key_string, TRUE);
880 g_string_free(new_ssid_string,TRUE);
882 g_free(type_entered);
883 g_free(key_entered );
884 g_free(ssid_entered);
889 * XXX - Maybe we need some check on the characters? I'm not sure if only standard ASCII are ok...
891 if ( ((new_ssid_string->len) > WPA_SSID_MAX_CHAR_SIZE) || ((new_ssid_string->len) < WPA_SSID_MIN_CHAR_SIZE))
893 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);
895 g_string_free(new_type_string,TRUE);
896 g_string_free(new_key_string, TRUE);
897 g_string_free(new_ssid_string,TRUE);
899 g_free(type_entered);
900 g_free(key_entered );
901 g_free(ssid_entered);
905 /* If so... add key */
906 airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
908 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
910 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_BIN_KEY_STRING) == 0) /* WPA_BIN Key */
912 /* XXX - Perform some WPA_BIN related input fields check */
913 /* If everything is ok, modify the entry int he list */
915 if ( ((new_key_string->len) != WPA_PSK_KEY_CHAR_SIZE))
917 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);
919 g_string_free(new_type_string,TRUE);
920 g_string_free(new_key_string, TRUE);
921 g_string_free(new_ssid_string,TRUE);
923 g_free(type_entered);
924 g_free(key_entered );
925 g_free(ssid_entered);
929 for (i = 0; i < new_key_string->len; i++)
931 if (!g_ascii_isxdigit(new_key_string->str[i]))
933 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
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 g_free(type_entered);
940 g_free(key_entered );
941 g_free(ssid_entered);
946 /* If so... add key */
947 airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
949 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
951 else /* Should never happen!!! */
953 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Unknown error in the key \"Type\" field!");
956 g_string_free(new_type_string,TRUE);
957 g_string_free(new_key_string, TRUE);
958 g_string_free(new_ssid_string,TRUE);
960 g_free(type_entered);
961 g_free(key_entered );
962 g_free(ssid_entered);
964 window_destroy(GTK_WIDGET(data));
969 * Callback used to edit a WEP key in the edit key box;
972 on_edit_key_ok_bt_clicked(GtkWidget *widget, gpointer data _U_)
980 GString *new_type_string,
984 gchar *type_entered = NULL;
985 gchar *key_entered = NULL;
986 gchar *ssid_entered = NULL;
988 airpcap_key_ls_selected_info_t *selected_item;
990 int keys_in_list = 0;
994 gint r = NO_ROW_SELECTED;
995 gint c = NO_COLUMN_SELECTED;
997 key_ls = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY);
998 selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_SELECTED_KEY);
999 type_cm = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY);
1000 key_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY);
1001 ssid_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY);
1003 r = selected_item->row;
1004 c = selected_item->column;
1006 keys_in_list = GTK_CLIST(key_ls)->rows;
1008 type_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(type_cm)->entry)));
1009 key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
1010 ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
1012 /* Check if key is correct */
1013 new_type_string = g_string_new(type_entered);
1014 new_key_string = g_string_new(key_entered);
1015 new_ssid_string = g_string_new(ssid_entered);
1017 g_strchug(new_key_string->str);
1018 g_strchomp(new_key_string->str);
1020 g_strchug(new_ssid_string->str);
1021 g_strchomp(new_ssid_string->str);
1023 /* Check which type of key the user has entered */
1024 if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
1027 if ( ((new_key_string->len) > WEP_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WEP_KEY_MIN_CHAR_SIZE))
1029 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);
1031 g_string_free(new_type_string,TRUE);
1032 g_string_free(new_key_string, TRUE);
1033 g_string_free(new_ssid_string,TRUE);
1035 g_free(type_entered);
1036 g_free(key_entered );
1037 g_free(ssid_entered);
1041 if ((new_key_string->len % 2) != 0)
1043 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nThe number of characters must be even.");
1045 g_string_free(new_type_string,TRUE);
1046 g_string_free(new_key_string, TRUE);
1047 g_string_free(new_ssid_string,TRUE);
1049 g_free(type_entered);
1050 g_free(key_entered );
1051 g_free(ssid_entered);
1055 for (i = 0; i < new_key_string->len; i++)
1057 if (!g_ascii_isxdigit(new_key_string->str[i]))
1059 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WEP key!\nA WEP key must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
1061 g_string_free(new_type_string,TRUE);
1062 g_string_free(new_key_string, TRUE);
1063 g_string_free(new_ssid_string,TRUE);
1065 g_free(type_entered);
1066 g_free(key_entered );
1067 g_free(ssid_entered);
1072 /* If so... Modify key */
1073 airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
1075 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1077 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_PWD_KEY_STRING) == 0) /* WPA Key */
1079 /* XXX - Perform some WPA related input fields check */
1080 /* If everything is ok, modify the entry in the list */
1082 if ( ((new_key_string->len) > WPA_KEY_MAX_CHAR_SIZE) || ((new_key_string->len) < WPA_KEY_MIN_CHAR_SIZE))
1084 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);
1086 g_string_free(new_type_string,TRUE);
1087 g_string_free(new_key_string, TRUE);
1088 g_string_free(new_ssid_string,TRUE);
1090 g_free(type_entered);
1091 g_free(key_entered );
1092 g_free(ssid_entered);
1097 * XXX - Maybe we need some check on the characters? I'm not sure if only standard ASCII are ok...
1099 if ( ((new_ssid_string->len) > WPA_SSID_MAX_CHAR_SIZE) || ((new_ssid_string->len) < WPA_SSID_MIN_CHAR_SIZE))
1101 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);
1103 g_string_free(new_type_string,TRUE);
1104 g_string_free(new_key_string, TRUE);
1105 g_string_free(new_ssid_string,TRUE);
1107 g_free(type_entered);
1108 g_free(key_entered );
1109 g_free(ssid_entered);
1113 /* If so... Modify key */
1114 airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
1116 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1118 else if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WPA_BIN_KEY_STRING) == 0) /* WPA_BIN Key */
1120 /* XXX - Perform some WPA_BIN related input fields check */
1121 /* If everything is ok, modify the entry in the list */
1123 if ( ((new_key_string->len) != WPA_PSK_KEY_CHAR_SIZE))
1125 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);
1127 g_string_free(new_type_string,TRUE);
1128 g_string_free(new_key_string, TRUE);
1129 g_string_free(new_ssid_string,TRUE);
1131 g_free(type_entered);
1132 g_free(key_entered );
1133 g_free(ssid_entered);
1137 for (i = 0; i < new_key_string->len; i++)
1139 if (!g_ascii_isxdigit(new_key_string->str[i]))
1141 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
1143 g_string_free(new_type_string,TRUE);
1144 g_string_free(new_key_string, TRUE);
1145 g_string_free(new_ssid_string,TRUE);
1147 g_free(type_entered);
1148 g_free(key_entered );
1149 g_free(ssid_entered);
1154 /* If so... Modify key */
1155 airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
1157 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1159 else /* Should never happen!!! */
1161 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Unknown error in the key \"Type\" field!");
1164 g_string_free(new_type_string,TRUE);
1165 g_string_free(new_key_string, TRUE);
1166 g_string_free(new_ssid_string,TRUE);
1168 g_free(type_entered);
1169 g_free(key_entered );
1170 g_free(ssid_entered);
1172 window_destroy(GTK_WIDGET(data));
1177 * Callback for the 'Add Key' button.
1180 on_add_new_key_bt_clicked(GtkWidget *button, gpointer data _U_)
1182 GtkWidget *add_key_window;
1183 GtkWidget *add_frame;
1184 GtkWidget *main_v_box;
1186 GtkWidget *add_frame_al;
1187 GtkWidget *add_type_cm;
1188 GList *add_type_cm_items = NULL;
1189 GtkWidget *add_type_en;
1190 GtkWidget *add_key_te;
1191 GtkWidget *add_ssid_te;
1192 GtkWidget *add_type_lb;
1193 GtkWidget *add_key_lb;
1194 GtkWidget *add_ssid_lb;
1195 GtkWidget *low_h_button_box;
1197 GtkWidget *cancel_bt;
1198 GtkWidget *add_frame_lb;
1200 GtkWidget *airpcap_advanced_w;
1202 /* Key List Widget */
1205 gint keys_in_list = 0;
1207 /* Selected entry in the key list (if any)*/
1208 airpcap_key_ls_selected_info_t* selected_item;
1212 airpcap_advanced_w = GTK_WIDGET(data);
1214 /* Retrieve the selected item... if no row is selected, this is null... */
1215 selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1217 r = selected_item->row;
1218 c = selected_item->column;
1220 /* Retrieve the key list widget pointer, and add it to the add_key_w */
1221 key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
1223 keys_in_list = GTK_CLIST(key_ls)->rows;
1225 if (keys_in_list >= MAX_ENCRYPTION_KEYS) /* Check if we have already reached the maximum number of allowed keys... */
1227 simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Maximum number (%d) of decryption keys reached! You cannot add another key!\n",MAX_ENCRYPTION_KEYS);
1231 /* Gray out the Advanced Wireless Setting window */
1232 gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
1234 /* Pop-up a new window */
1235 add_key_window = window_new (GTK_WINDOW_TOPLEVEL, "Add Decryption Key");
1236 gtk_widget_set_name (add_key_window, "add_key_window");
1237 gtk_container_set_border_width (GTK_CONTAINER (add_key_window), 5);
1238 gtk_window_set_resizable (GTK_WINDOW (add_key_window), FALSE);
1240 main_v_box = gtk_vbox_new (FALSE, 0);
1241 gtk_widget_set_name (main_v_box, "main_v_box");
1242 gtk_widget_show (main_v_box);
1243 gtk_container_add (GTK_CONTAINER (add_key_window), main_v_box);
1245 add_frame = gtk_frame_new (NULL);
1246 gtk_widget_set_name (add_frame, "add_frame");
1247 gtk_widget_show (add_frame);
1248 gtk_box_pack_start (GTK_BOX (main_v_box), add_frame, TRUE, TRUE, 0);
1250 add_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1251 gtk_widget_set_name (add_frame_al, "add_frame_al");
1252 gtk_widget_show (add_frame_al);
1253 gtk_container_add (GTK_CONTAINER (add_frame), add_frame_al);
1254 gtk_alignment_set_padding (GTK_ALIGNMENT (add_frame_al), 0, 0, 12, 0);
1256 add_tb = gtk_table_new (2, 3, FALSE);
1257 gtk_widget_set_name (add_tb, "add_tb");
1258 gtk_container_set_border_width(GTK_CONTAINER(add_tb),5);
1259 gtk_widget_show (add_tb);
1260 gtk_container_add (GTK_CONTAINER (add_frame_al), add_tb);
1262 add_type_cm = gtk_combo_new ();
1263 gtk_widget_set_name (add_type_cm, "add_type_cm");
1264 gtk_widget_show (add_type_cm);
1265 gtk_table_attach (GTK_TABLE (add_tb), add_type_cm, 0, 1, 1, 2,
1266 (GtkAttachOptions) (GTK_FILL),
1267 (GtkAttachOptions) (0), 0, 0);
1268 gtk_widget_set_size_request (add_type_cm, 83, -1);
1269 add_type_cm_items = g_list_append (add_type_cm_items, (gpointer) AIRPCAP_WEP_KEY_STRING);
1271 /* XXX - DEcomment only when WPA and WPA_BIN will be ready */
1272 #ifdef HAVE_AIRPDCAP
1273 add_type_cm_items = g_list_append (add_type_cm_items, (gpointer) AIRPCAP_WPA_PWD_KEY_STRING);
1274 add_type_cm_items = g_list_append (add_type_cm_items, (gpointer) AIRPCAP_WPA_BIN_KEY_STRING);
1276 gtk_combo_set_popdown_strings (GTK_COMBO (add_type_cm),
1278 g_list_free (add_type_cm_items);
1280 add_type_en = GTK_COMBO (add_type_cm)->entry;
1281 gtk_widget_set_name (add_type_en, "add_type_en");
1282 gtk_editable_set_editable (GTK_EDITABLE (add_type_en), FALSE);
1283 gtk_widget_show (add_type_en);
1285 add_key_te = gtk_entry_new ();
1286 gtk_widget_set_name (add_key_te, "add_key_te");
1288 gtk_widget_show (add_key_te);
1289 gtk_table_attach (GTK_TABLE (add_tb), add_key_te, 1, 2, 1, 2,
1290 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1291 gtk_widget_set_size_request (add_key_te, 178, -1);
1293 add_ssid_te = gtk_entry_new ();
1294 gtk_widget_set_name (add_ssid_te, "add_ssid_te");
1295 gtk_widget_set_sensitive(add_ssid_te,FALSE);
1296 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1297 gtk_widget_show (add_ssid_te);
1298 gtk_table_attach (GTK_TABLE (add_tb), add_ssid_te, 2, 3, 1, 2,
1299 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1301 add_type_lb = gtk_label_new ("Type");
1302 gtk_widget_set_name (add_type_lb, "add_type_lb");
1303 gtk_widget_show (add_type_lb);
1304 gtk_table_attach (GTK_TABLE (add_tb), add_type_lb, 0, 1, 0, 1,
1305 (GtkAttachOptions) (GTK_FILL),
1306 (GtkAttachOptions) (0), 0, 0);
1307 gtk_label_set_justify (GTK_LABEL (add_type_lb), GTK_JUSTIFY_CENTER);
1309 add_key_lb = gtk_label_new ("Key");
1310 gtk_widget_set_name (add_key_lb, "add_key_lb");
1311 gtk_widget_show (add_key_lb);
1312 gtk_table_attach (GTK_TABLE (add_tb), add_key_lb, 1, 2, 0, 1,
1313 (GtkAttachOptions) (GTK_FILL),
1314 (GtkAttachOptions) (0), 0, 0);
1315 gtk_label_set_justify (GTK_LABEL (add_key_lb), GTK_JUSTIFY_CENTER);
1317 add_ssid_lb = gtk_label_new ("");
1318 gtk_widget_set_name (add_ssid_lb, "add_ssid_lb");
1319 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1320 gtk_widget_show (add_ssid_lb);
1321 gtk_table_attach (GTK_TABLE (add_tb), add_ssid_lb, 2, 3, 0, 1,
1322 (GtkAttachOptions) (GTK_FILL),
1323 (GtkAttachOptions) (0), 0, 0);
1324 gtk_label_set_justify (GTK_LABEL (add_ssid_lb), GTK_JUSTIFY_CENTER);
1326 low_h_button_box = gtk_hbutton_box_new ();
1327 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
1328 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
1329 gtk_widget_show (low_h_button_box);
1330 gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
1331 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
1334 ok_bt = gtk_button_new_with_mnemonic ("OK");
1335 gtk_widget_set_name (ok_bt, "ok_bt");
1336 gtk_widget_show (ok_bt);
1337 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
1338 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
1340 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
1341 gtk_widget_set_name (cancel_bt, "cancel_bt");
1342 gtk_widget_show (cancel_bt);
1343 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
1344 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
1346 add_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
1347 gtk_widget_set_name (add_frame_lb, "add_frame_lb");
1348 gtk_widget_show (add_frame_lb);
1349 gtk_frame_set_label_widget (GTK_FRAME (add_frame), add_frame_lb);
1350 gtk_label_set_use_markup (GTK_LABEL (add_frame_lb), TRUE);
1353 g_signal_connect(ok_bt, "clicked", G_CALLBACK(on_add_key_ok_bt_clicked), add_key_window );
1354 g_signal_connect(cancel_bt, "clicked", G_CALLBACK(window_cancel_button_cb), add_key_window );
1355 g_signal_connect(add_type_en, "changed", G_CALLBACK(on_add_type_en_changed), add_key_window);
1356 g_signal_connect(add_key_window, "delete_event", G_CALLBACK(window_delete_event_cb), add_key_window);
1357 g_signal_connect(add_key_window, "destroy", G_CALLBACK(on_add_key_w_destroy), data);
1359 /* Add widget data */
1360 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY,key_ls);
1361 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY,selected_item);
1362 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY,add_type_cm);
1363 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY,add_key_te);
1364 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY,add_ssid_te);
1365 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY,add_key_lb);
1366 g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY,add_ssid_lb);
1368 gtk_widget_show(add_key_window);
1372 * Add key window destroy callback
1375 add_key_w_destroy_cb(GtkWidget *button _U_, gpointer data _U_)
1381 * Edit key window destroy callback
1384 on_edit_key_w_destroy(GtkWidget *button, gpointer data)
1386 GtkWidget *airpcap_advanced_w;
1388 airpcap_advanced_w = GTK_WIDGET(data);
1390 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w),TRUE);
1396 * Add key window destroy callback
1399 on_add_key_w_destroy(GtkWidget *button, gpointer data)
1401 GtkWidget *airpcap_advanced_w;
1403 airpcap_advanced_w = GTK_WIDGET(data);
1405 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w),TRUE);
1411 * Callback for the 'Remove Key' button.
1414 on_remove_key_bt_clicked(GtkWidget *button, gpointer data)
1417 GtkWidget *airpcap_advanced_w;
1421 airpcap_key_ls_selected_info_t *selected_item;
1423 gint c = NO_COLUMN_SELECTED;
1424 gint r = NO_ROW_SELECTED;
1426 airpcap_advanced_w = GTK_WIDGET(data);
1428 /* retrieve needed stuff */
1429 key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
1430 selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1433 * Better to store the selected_item data in two new variables, because maybe some
1434 * select_row signal will be emitted somewhere...
1436 r = selected_item->row;
1437 c = selected_item->column;
1439 keys_in_list = GTK_CLIST(key_ls)->rows;
1441 if ( r == NO_ROW_SELECTED ) /* No key selected */
1444 /* Remove selected key */
1445 gtk_clist_remove(GTK_CLIST(key_ls),r);
1447 /* Reselect another row, if any... */
1448 if ( r < (keys_in_list-1) )
1449 gtk_clist_select_row(GTK_CLIST(key_ls),r,c);
1451 gtk_clist_select_row(GTK_CLIST(key_ls),r-1,c);
1453 /* Need to save config... */
1454 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1458 * Callback for the 'Edit Key' button.
1461 on_edit_key_bt_clicked(GtkWidget *button, gpointer data)
1463 GtkWidget *edit_key_window;
1464 GtkWidget *edit_frame;
1465 GtkWidget *main_v_box;
1467 GtkWidget *edit_frame_al;
1468 GtkWidget *edit_type_cm;
1469 GList *edit_type_cm_items = NULL;
1470 GtkWidget *edit_type_en;
1471 GtkWidget *edit_key_te;
1472 GtkWidget *edit_ssid_te;
1473 GtkWidget *edit_type_lb;
1474 GtkWidget *edit_key_lb;
1475 GtkWidget *edit_ssid_lb;
1476 GtkWidget *low_h_button_box;
1478 GtkWidget *cancel_bt;
1479 GtkWidget *edit_frame_lb;
1481 GtkWidget *airpcap_advanced_w;
1483 /* Key List Widget */
1486 /* Selected entry in the key list (if any)*/
1487 airpcap_key_ls_selected_info_t* selected_item;
1495 airpcap_advanced_w = GTK_WIDGET(data);
1497 /* Retrieve the selected item... if no row is selected, this is null... */
1498 selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1500 r = selected_item->row;
1501 c = selected_item->column;
1503 /* Retrieve the key list widget pointer, and add it to the edit_key_w */
1504 key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
1506 if ((r != NO_ROW_SELECTED) && (c != NO_COLUMN_SELECTED))
1508 gtk_clist_get_text(GTK_CLIST(key_ls),r,0,&row_type);
1509 gtk_clist_get_text(GTK_CLIST(key_ls),r,1,&row_key);
1510 gtk_clist_get_text(GTK_CLIST(key_ls),r,2,&row_ssid);
1512 /* Gray out the Advanced Wireless Setting window */
1513 gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
1515 /* Pop-up a new window */
1516 edit_key_window = window_new (GTK_WINDOW_TOPLEVEL, "Edit Decryption Key");
1517 gtk_widget_set_name (edit_key_window, "edit_key_window");
1518 gtk_container_set_border_width (GTK_CONTAINER (edit_key_window), 5);
1519 gtk_window_set_resizable (GTK_WINDOW (edit_key_window), FALSE);
1521 main_v_box = gtk_vbox_new (FALSE, 0);
1522 gtk_widget_set_name (main_v_box, "main_v_box");
1523 gtk_widget_show (main_v_box);
1524 gtk_container_add (GTK_CONTAINER (edit_key_window), main_v_box);
1526 edit_frame = gtk_frame_new (NULL);
1527 gtk_widget_set_name (edit_frame, "edit_frame");
1528 gtk_widget_show (edit_frame);
1529 gtk_box_pack_start (GTK_BOX (main_v_box), edit_frame, TRUE, TRUE, 0);
1531 edit_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1532 gtk_widget_set_name (edit_frame_al, "edit_frame_al");
1533 gtk_widget_show (edit_frame_al);
1534 gtk_container_add (GTK_CONTAINER (edit_frame), edit_frame_al);
1535 gtk_alignment_set_padding (GTK_ALIGNMENT (edit_frame_al), 0, 0, 12, 0);
1537 edit_tb = gtk_table_new (2, 3, FALSE);
1538 gtk_widget_set_name (edit_tb, "edit_tb");
1539 gtk_container_set_border_width(GTK_CONTAINER(edit_tb),5);
1540 gtk_widget_show (edit_tb);
1541 gtk_container_add (GTK_CONTAINER (edit_frame_al), edit_tb);
1543 edit_type_cm = gtk_combo_new ();
1544 gtk_widget_set_name (edit_type_cm, "edit_type_cm");
1545 gtk_widget_show (edit_type_cm);
1546 gtk_table_attach (GTK_TABLE (edit_tb), edit_type_cm, 0, 1, 1, 2,
1547 (GtkAttachOptions) (GTK_FILL),
1548 (GtkAttachOptions) (0), 0, 0);
1549 gtk_widget_set_size_request (edit_type_cm, 83, -1);
1550 edit_type_cm_items = g_list_append (edit_type_cm_items, (gpointer) AIRPCAP_WEP_KEY_STRING);
1551 /* XXX - Decomment only when WPA and WPA_BIN support will be ready!!! */
1552 #ifdef HAVE_AIRPDCAP
1553 edit_type_cm_items = g_list_append (edit_type_cm_items, (gpointer) AIRPCAP_WPA_PWD_KEY_STRING);
1554 edit_type_cm_items = g_list_append (edit_type_cm_items, (gpointer) AIRPCAP_WPA_BIN_KEY_STRING);
1556 gtk_combo_set_popdown_strings (GTK_COMBO (edit_type_cm),
1557 edit_type_cm_items);
1558 g_list_free (edit_type_cm_items);
1560 edit_type_en = GTK_COMBO (edit_type_cm)->entry;
1561 gtk_widget_set_name (edit_type_en, "edit_type_en");
1562 /* Set current type */
1563 gtk_entry_set_text(GTK_ENTRY(edit_type_en),row_type);
1564 gtk_editable_set_editable (GTK_EDITABLE (edit_type_en), FALSE);
1565 gtk_widget_show (edit_type_en);
1567 edit_key_te = gtk_entry_new ();
1568 gtk_widget_set_name (edit_key_te, "edit_key_te");
1569 /* Set current key */
1570 gtk_entry_set_text(GTK_ENTRY(edit_key_te),row_key);
1571 gtk_widget_show (edit_key_te);
1572 gtk_table_attach (GTK_TABLE (edit_tb), edit_key_te, 1, 2, 1, 2,
1573 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1574 gtk_widget_set_size_request (edit_key_te, 178, -1);
1576 edit_ssid_te = gtk_entry_new ();
1577 gtk_widget_set_name (edit_ssid_te, "edit_ssid_te");
1579 /* Set current ssid (if key type is not WEP!)*/
1580 if (g_ascii_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0)
1582 gtk_widget_set_sensitive(edit_ssid_te,FALSE);
1586 gtk_widget_set_sensitive(edit_ssid_te,TRUE);
1587 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),row_ssid);
1590 /* XXX - Decomment only when WPA and WPA@ will be ready */
1591 #ifdef HAVE_AIRPDCAP
1592 gtk_widget_show (edit_ssid_te);
1594 gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_te, 2, 3, 1, 2,
1595 (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1597 edit_type_lb = gtk_label_new ("Type");
1598 gtk_widget_set_name (edit_type_lb, "edit_type_lb");
1599 gtk_widget_show (edit_type_lb);
1600 gtk_table_attach (GTK_TABLE (edit_tb), edit_type_lb, 0, 1, 0, 1,
1601 (GtkAttachOptions) (GTK_FILL),
1602 (GtkAttachOptions) (0), 0, 0);
1603 gtk_label_set_justify (GTK_LABEL (edit_type_lb), GTK_JUSTIFY_CENTER);
1605 edit_key_lb = gtk_label_new ("Key");
1606 gtk_widget_set_name (edit_key_lb, "edit_key_lb");
1607 gtk_widget_show (edit_key_lb);
1608 gtk_table_attach (GTK_TABLE (edit_tb), edit_key_lb, 1, 2, 0, 1,
1609 (GtkAttachOptions) (GTK_FILL),
1610 (GtkAttachOptions) (0), 0, 0);
1611 gtk_label_set_justify (GTK_LABEL (edit_key_lb), GTK_JUSTIFY_CENTER);
1613 edit_ssid_lb = gtk_label_new ("");
1614 gtk_widget_set_name (edit_ssid_lb, "edit_ssid_lb");
1615 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1616 gtk_widget_show (edit_ssid_lb);
1617 gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_lb, 2, 3, 0, 1,
1618 (GtkAttachOptions) (GTK_FILL),
1619 (GtkAttachOptions) (0), 0, 0);
1620 gtk_label_set_justify (GTK_LABEL (edit_ssid_lb), GTK_JUSTIFY_CENTER);
1622 low_h_button_box = gtk_hbutton_box_new ();
1623 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
1624 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
1625 gtk_widget_show (low_h_button_box);
1626 gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
1627 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
1630 ok_bt = gtk_button_new_with_mnemonic ("OK");
1631 gtk_widget_set_name (ok_bt, "ok_bt");
1632 gtk_widget_show (ok_bt);
1633 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
1634 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
1636 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
1637 gtk_widget_set_name (cancel_bt, "cancel_bt");
1638 gtk_widget_show (cancel_bt);
1639 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
1640 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
1642 edit_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
1643 gtk_widget_set_name (edit_frame_lb, "edit_frame_lb");
1644 gtk_widget_show (edit_frame_lb);
1645 gtk_frame_set_label_widget (GTK_FRAME (edit_frame), edit_frame_lb);
1646 gtk_label_set_use_markup (GTK_LABEL (edit_frame_lb), TRUE);
1649 g_signal_connect(ok_bt, "clicked", G_CALLBACK(on_edit_key_ok_bt_clicked), edit_key_window );
1650 g_signal_connect(cancel_bt, "clicked", G_CALLBACK(window_cancel_button_cb), edit_key_window );
1651 g_signal_connect(edit_type_en, "changed", G_CALLBACK(on_edit_type_en_changed), edit_key_window);
1652 g_signal_connect(edit_key_window, "delete_event", G_CALLBACK(window_delete_event_cb), edit_key_window);
1653 g_signal_connect(edit_key_window, "destroy", G_CALLBACK(on_edit_key_w_destroy), data);
1655 /* Add widget data */
1656 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY,key_ls);
1657 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SELECTED_KEY,selected_item);
1658 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY,edit_type_cm);
1659 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY,edit_key_te);
1660 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY,edit_ssid_te);
1661 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY,edit_key_lb);
1662 g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY,edit_ssid_lb);
1664 gtk_widget_show(edit_key_window);
1669 * Callback for the 'Move Key Up' button.
1672 on_move_key_up_bt_clicked(GtkWidget *button, gpointer data)
1674 GtkWidget *airpcap_advanced_w;
1679 airpcap_key_ls_selected_info_t *selected_item;
1681 gint c = NO_COLUMN_SELECTED;
1682 gint r = NO_ROW_SELECTED;
1684 airpcap_advanced_w = GTK_WIDGET(data);
1686 /* retrieve needed stuff */
1687 key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
1688 selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1691 * Better to store the selected_item data in two new variables, because maybe some
1692 * select_row signal will be emitted somewhere...
1694 r = selected_item->row;
1695 c = selected_item->column;
1697 keys_in_list = GTK_CLIST(key_ls)->rows;
1699 if (keys_in_list < 2) /* With less than 2 keys, nothing can be moved ... */
1702 if ( r == 0 ) /* Cannot move up the first row */
1705 /* Move up selected key */
1706 gtk_clist_swap_rows (GTK_CLIST(key_ls),r-1,r);
1709 * Re-select the just moved key... so the user can keep pressing 'Move Key Up'
1710 * without re-select the row...
1712 gtk_clist_select_row (GTK_CLIST(key_ls),r-1,c);
1714 /* Need to save config... */
1715 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1719 * Callback for the 'Move Key Down' button.
1722 on_move_key_down_bt_clicked(GtkWidget *button, gpointer data)
1724 GtkWidget *airpcap_advanced_w;
1729 airpcap_key_ls_selected_info_t *selected_item;
1731 gint c = NO_COLUMN_SELECTED;
1732 gint r = NO_ROW_SELECTED;
1734 airpcap_advanced_w = GTK_WIDGET(data);
1736 /* retrieve needed stuff */
1737 key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
1738 selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
1741 * Better to store the selected_item data in two new variables, because maybe some
1742 * select_row signal will be emitted somewhere...
1744 r = selected_item->row;
1745 c = selected_item->column;
1747 keys_in_list = GTK_CLIST(key_ls)->rows;
1749 if (keys_in_list < 2) /* With less than 2 keys, nothing can be moved ... */
1752 if ( (r+1) == keys_in_list ) /* Cannot move down the last row */
1755 /* Move down selected key */
1756 gtk_clist_swap_rows (GTK_CLIST(key_ls),r,r+1);
1759 * Re-select the just moved key... so the user can keep pressing 'Move Key Down'
1760 * without re-select the row...
1762 gtk_clist_select_row (GTK_CLIST(key_ls),r+1,c);
1764 /* Need to save config... */
1765 if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
1768 /* Turns the decryption on or off */
1770 on_enable_decryption_en_changed(GtkWidget *w, gpointer data)
1772 GtkEntry *decryption_en;
1774 char* decryption_mode_string = NULL;
1776 decryption_en = GTK_ENTRY(w);
1779 * This callback is called twice: when the current text is canceled ("")
1780 * and then when the 'new text' is added ("new text"). We don't really
1781 * care about the first time, and we just return.
1783 if (g_ascii_strcasecmp(gtk_entry_get_text(decryption_en),"") == 0)
1786 if (g_ascii_strcasecmp(gtk_entry_get_text(decryption_en),AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK) == 0)
1788 set_wireshark_decryption(TRUE);
1789 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
1791 else if (g_ascii_strcasecmp(gtk_entry_get_text(decryption_en),AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
1793 set_wireshark_decryption(FALSE);
1794 if (!set_airpcap_decryption(TRUE)) g_warning(CANT_SAVE_ERR_STR);
1796 else if (g_ascii_strcasecmp(gtk_entry_get_text(decryption_en),AIRPCAP_DECRYPTION_TYPE_STRING_NONE) == 0)
1798 set_wireshark_decryption(FALSE);
1799 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
1802 /* Redissect all the packets, and re-evaluate the display filter. */
1803 redissect_packets();
1807 * Will fill the given combo box with the current decryption mode string
1810 update_decryption_mode_cm(GtkWidget *w)
1813 * This ensures that the entry get changes... the callback will return immediately, but
1814 * at least next time packets will be redissected...
1816 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),"");
1818 /* Wireshark decryption is on */
1819 if (wireshark_decryption_on())
1821 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK);
1822 /* We don't know if AirPcap decryption is on or off, but we just turn it off */
1823 if (!set_airpcap_decryption(FALSE)) g_warning(CANT_SAVE_ERR_STR);
1825 /* AirPcap decryption is on */
1826 else if (airpcap_decryption_on())
1828 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP);
1830 /* No decryption enabled */
1833 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1840 * Creates the list of available decryption modes, depending on the adapters found
1843 update_decryption_mode_list(GtkWidget *w)
1845 GList *enable_decryption_cb_items = NULL;
1847 gchar *current_text;
1852 entry = GTK_COMBO(w)->entry;
1853 current_text = NULL;
1856 * XXX - Retrieve the current 'decryption mode'. It would be better just block the
1857 * signal handler, but it doesn't work... one of these days I'll try to figure out why...
1859 current_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
1861 enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1862 enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK);
1864 if (airpcap_if_list != NULL && g_list_length(airpcap_if_list) > 0)
1866 enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP);
1870 /* The last decryption mode was 'Driver', but no more AirPcap adapter are found */
1871 if (g_ascii_strcasecmp(current_text,AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP) == 0)
1873 if (current_text != NULL) g_free(current_text);
1875 current_text = g_strdup(AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
1879 g_signal_handlers_block_matched(entry,G_SIGNAL_MATCH_DATA,0,0,0,0,airpcap_tb);
1880 gtk_combo_set_popdown_strings (GTK_COMBO (w), enable_decryption_cb_items);
1881 /* The 'changed' callback will be called twice */
1882 gtk_entry_set_text(GTK_ENTRY(entry),current_text);
1883 g_signal_handlers_unblock_matched(entry,G_SIGNAL_MATCH_DATA,0,0,0,0,airpcap_tb);
1885 if (current_text != NULL) g_free(current_text);
1887 g_list_free (enable_decryption_cb_items);
1890 /* Called to create the airpcap settings' window */
1892 display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
1894 GtkWidget *airpcap_advanced_w;
1895 GtkWidget *main_box;
1896 GtkWidget *settings_sub_box;
1897 GtkWidget *interface_fr;
1898 GtkWidget *interface_al;
1899 GtkWidget *interface_sub_h_box;
1900 GtkWidget *interface_name_lb;
1901 GtkWidget *blink_bt;
1902 GtkWidget *interface_frame_lb;
1903 GtkWidget *basic_parameters_fr;
1904 GtkWidget *basic_parameters_al;
1905 GtkWidget *basic_parameters_tb;
1906 GtkWidget *channel_lb;
1907 GtkWidget *channel_offset_lb;
1908 GtkWidget *capture_type_lb;
1909 GtkWidget *channel_cm;
1910 GList *channel_cm_items = NULL;
1911 GtkWidget *channel_en;
1912 GtkWidget *capture_type_cm;
1913 GtkWidget *channel_offset_cb;
1914 GList *capture_type_cm_items = NULL;
1915 GtkWidget *capture_type_en;
1917 GtkWidget *basic_parameters_fcs_h_box;
1918 GtkWidget *basic_parameters_fcs_filter_lb;
1919 GtkWidget *fcs_filter_cm;
1920 GList *fcs_filter_cm_items = NULL;
1921 GtkWidget *fcs_filter_en;
1922 GtkWidget *basic_parameters_frame_lb;
1923 GtkWidget *low_buttons_h_box;
1924 GtkWidget *left_h_button_box;
1925 GtkWidget *reset_configuration_bt;
1926 GtkWidget *right_h_button_box;
1928 GtkWidget *apply_bt;
1929 GtkWidget *cancel_bt;
1931 /* for loop counter */
1934 /* widgets in the toolbar */
1937 *toolbar_channel_cm,
1938 *toolbar_wrong_crc_cm;
1941 /*GList *channel_list,*capture_list;*/
1942 /*GList *linktype_list = NULL;*/
1945 /* user data - RETRIEVE pointers of toolbar widgets */
1946 toolbar = GTK_WIDGET(data);
1947 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
1948 toolbar_channel_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
1949 toolbar_wrong_crc_cm= GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
1951 /* gray out the toolbar */
1952 gtk_widget_set_sensitive(toolbar,FALSE);
1957 /* the selected is the active, for now */
1958 airpcap_if_selected = airpcap_if_active;
1960 /* Create the new window */
1961 airpcap_advanced_w = window_new(GTK_WINDOW_TOPLEVEL, "Advanced Wireless Settings");
1963 gtk_container_set_border_width (GTK_CONTAINER (airpcap_advanced_w), 5);
1964 gtk_window_set_position (GTK_WINDOW (airpcap_advanced_w),
1965 GTK_WIN_POS_CENTER);
1967 gtk_window_set_resizable (GTK_WINDOW (airpcap_advanced_w), FALSE);
1968 gtk_window_set_type_hint (GTK_WINDOW (airpcap_advanced_w), GDK_WINDOW_TYPE_HINT_DIALOG);
1970 main_box = gtk_vbox_new (FALSE, 0);
1971 gtk_widget_set_name (main_box, "main_box");
1972 gtk_widget_show (main_box);
1973 gtk_container_add (GTK_CONTAINER (airpcap_advanced_w), main_box);
1975 settings_sub_box = gtk_vbox_new (FALSE, 0);
1976 gtk_widget_set_name (settings_sub_box, "settings_sub_box");
1977 gtk_widget_show (settings_sub_box);
1978 gtk_box_pack_start (GTK_BOX (main_box), settings_sub_box, FALSE, TRUE, 0);
1980 interface_fr = gtk_frame_new (NULL);
1981 gtk_widget_set_name (interface_fr, "interface_fr");
1982 gtk_widget_show (interface_fr);
1983 gtk_box_pack_start (GTK_BOX (settings_sub_box), interface_fr, FALSE, FALSE,
1985 gtk_container_set_border_width (GTK_CONTAINER (interface_fr), 10);
1987 interface_al = gtk_alignment_new (0.5, 0.5, 1, 1);
1988 gtk_widget_set_name (interface_al, "interface_al");
1989 gtk_widget_show (interface_al);
1990 gtk_container_add (GTK_CONTAINER (interface_fr), interface_al);
1991 gtk_alignment_set_padding (GTK_ALIGNMENT (interface_al), 5, 5, 0, 0);
1993 interface_sub_h_box = gtk_hbox_new (FALSE, 0);
1994 gtk_widget_set_name (interface_sub_h_box, "interface_sub_h_box");
1995 gtk_widget_show (interface_sub_h_box);
1996 gtk_container_add (GTK_CONTAINER (interface_al), interface_sub_h_box);
1997 gtk_container_set_border_width (GTK_CONTAINER (interface_sub_h_box), 5);
1999 /* Fill the interface_box */
2000 if (airpcap_if_active != NULL)
2002 interface_name_lb = gtk_label_new(airpcap_if_active->description);
2006 interface_name_lb = gtk_label_new("No airpcap interface found!");
2007 gtk_widget_set_sensitive(main_box,FALSE);
2010 gtk_widget_set_name (interface_name_lb, "interface_name_lb");
2011 gtk_widget_show (interface_name_lb);
2012 gtk_box_pack_start (GTK_BOX (interface_sub_h_box), interface_name_lb, TRUE,
2015 /* If it is NOT the 'Any' Interface */
2016 if (!airpcap_if_is_any(airpcap_if_selected))
2018 blink_bt = gtk_button_new_with_mnemonic ("Blink Led");
2020 else /* It is the any interface, so it doesn't make sense to have 'Blink' button... */
2022 blink_bt = gtk_button_new_with_mnemonic ("What's This?");
2024 gtk_widget_set_name (blink_bt, "blink_bt");
2025 gtk_widget_show (blink_bt);
2026 gtk_box_pack_end (GTK_BOX (interface_sub_h_box), blink_bt, FALSE, FALSE, 0);
2028 interface_frame_lb = gtk_label_new ("<b>Interface</b>");
2029 gtk_widget_set_name (interface_frame_lb, "interface_frame_lb");
2030 gtk_widget_show (interface_frame_lb);
2031 gtk_frame_set_label_widget (GTK_FRAME (interface_fr), interface_frame_lb);
2032 gtk_label_set_use_markup (GTK_LABEL (interface_frame_lb), TRUE);
2034 basic_parameters_fr = gtk_frame_new (NULL);
2035 gtk_widget_set_name (basic_parameters_fr, "basic_parameters_fr");
2036 gtk_widget_show (basic_parameters_fr);
2037 gtk_box_pack_start (GTK_BOX (settings_sub_box), basic_parameters_fr, TRUE,FALSE, 0);
2038 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_fr), 10);
2040 basic_parameters_al = gtk_alignment_new (0.5, 0.5, 1, 1);
2041 gtk_widget_set_name (basic_parameters_al, "basic_parameters_al");
2042 gtk_widget_show (basic_parameters_al);
2043 gtk_container_add (GTK_CONTAINER (basic_parameters_fr),basic_parameters_al);
2044 gtk_alignment_set_padding (GTK_ALIGNMENT (basic_parameters_al), 10, 10, 0, 0);
2046 basic_parameters_tb = gtk_table_new (2, 3, FALSE);
2047 gtk_widget_set_name (basic_parameters_tb, "basic_parameters_tb");
2048 gtk_widget_show (basic_parameters_tb);
2049 gtk_container_add (GTK_CONTAINER (basic_parameters_al),
2050 basic_parameters_tb);
2051 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_tb), 5);
2052 gtk_table_set_col_spacings (GTK_TABLE (basic_parameters_tb), 20);
2054 channel_lb = gtk_label_new ("Channel:");
2055 gtk_widget_set_name (channel_lb, "channel_lb");
2056 gtk_widget_show (channel_lb);
2057 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_lb, 0, 1, 0, 1,
2058 (GtkAttachOptions) (GTK_FILL),
2059 (GtkAttachOptions) (0), 0, 0);
2060 gtk_misc_set_alignment (GTK_MISC (channel_lb), 0, 0.5);
2062 capture_type_lb = gtk_label_new ("Capture Type:");
2063 gtk_widget_set_name (capture_type_lb, "capture_type_lb");
2064 gtk_widget_show (capture_type_lb);
2065 gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_lb, 0, 1, 2,
2066 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0),
2068 gtk_misc_set_alignment (GTK_MISC (capture_type_lb), 0, 0.5);
2070 /* Start: Channel offset label */
2071 channel_offset_lb = gtk_label_new ("Channel Offset:");
2072 gtk_widget_set_name (channel_offset_lb, "channel_offset_lb");
2073 gtk_widget_show (channel_offset_lb);
2074 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_lb, 0, 1, 1, 2,
2075 (GtkAttachOptions) (GTK_FILL),
2076 (GtkAttachOptions) (0), 0, 0);
2077 gtk_misc_set_alignment (GTK_MISC (channel_offset_lb), 0, 0.5);
2078 /* End: Channel offset label */
2080 /* Start: Channel offset combo box */
2081 channel_offset_cb = gtk_combo_new();
2082 gtk_widget_set_name (channel_offset_cb, "channel_offset_cb");
2083 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(channel_offset_cb)->entry),FALSE);
2085 airpcap_update_channel_offset_cb(airpcap_if_selected, airpcap_if_selected->channelInfo.Frequency, channel_offset_cb);
2086 airpcap_update_channel_offset_combo_entry(channel_offset_cb, airpcap_if_selected->channelInfo.ExtChannel);
2088 gtk_widget_show(channel_offset_cb);
2090 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_cb, 1, 2, 1, 2,
2091 (GtkAttachOptions) (GTK_FILL),
2092 (GtkAttachOptions) (0), 0, 0);
2093 /* End: Channel offset combo box */
2095 channel_cm = gtk_combo_new ();
2096 gtk_widget_set_name (channel_cm, "channel_cm");
2097 gtk_widget_show (channel_cm);
2098 gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_cm, 1, 2, 0, 1,
2099 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
2100 (GtkAttachOptions) (0), 0, 0);
2102 if (airpcap_if_selected != NULL && airpcap_if_selected->pSupportedChannels != NULL && airpcap_if_selected->numSupportedChannels > 0){
2103 for (i = 0; i<(airpcap_if_selected->numSupportedChannels); i++){
2104 channel_cm_items = g_list_append(channel_cm_items, ieee80211_mhz_to_str(airpcap_if_selected->pSupportedChannels[i].Frequency));
2106 gtk_combo_set_popdown_strings( GTK_COMBO(channel_cm), channel_cm_items);
2107 airpcap_free_channel_combo_list (channel_cm_items);
2110 /* Select the first entry */
2111 if (airpcap_if_selected != NULL)
2113 airpcap_update_channel_combo(GTK_WIDGET(channel_cm), airpcap_if_selected);
2117 channel_en = GTK_COMBO (channel_cm)->entry;
2118 gtk_editable_set_editable(GTK_EDITABLE(channel_en),FALSE);
2119 gtk_widget_set_name (channel_en, "channel_en");
2120 gtk_widget_show (channel_en);
2122 capture_type_cm = gtk_combo_new ();
2123 gtk_widget_set_name (capture_type_cm, "capture_type_cm");
2124 gtk_widget_show (capture_type_cm);
2125 gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_cm, 1, 2, 2,
2126 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
2127 (GtkAttachOptions) (0), 0, 0);
2128 capture_type_cm_items =
2129 g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_ONLY);
2130 capture_type_cm_items =
2131 g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO);
2133 if (airpcap_get_dll_state() == AIRPCAP_DLL_OK){
2134 capture_type_cm_items =
2135 g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI);
2137 gtk_combo_set_popdown_strings (GTK_COMBO (capture_type_cm),
2138 capture_type_cm_items);
2140 /* Current interface value */
2142 if (airpcap_if_selected != NULL)
2144 if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11){
2145 capture_s = g_strdup(AIRPCAP_LINK_TYPE_NAME_802_11_ONLY);
2146 }else if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_RADIO){
2147 capture_s = g_strdup(AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO);
2148 }else if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_PPI){
2149 capture_s = g_strdup(AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI);
2152 if (capture_s != NULL) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(capture_type_cm)->entry), capture_s);
2156 g_list_free (capture_type_cm_items);
2158 capture_type_en = GTK_COMBO (capture_type_cm)->entry;
2159 gtk_widget_set_name (capture_type_en, "capture_type_en");
2160 gtk_widget_show (capture_type_en);
2162 fcs_ck = gtk_check_button_new_with_label ("Include 802.11 FCS in Frames");
2164 gtk_widget_set_name (fcs_ck, "fcs_ck");
2166 /* Fcs Presence check box */
2167 if (airpcap_if_selected != NULL)
2169 if (airpcap_if_selected->IsFcsPresent)
2170 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck),TRUE);
2172 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck),FALSE);
2175 gtk_widget_show (fcs_ck);
2176 gtk_table_attach (GTK_TABLE (basic_parameters_tb), fcs_ck, 2, 3, 0, 1,
2177 (GtkAttachOptions) (GTK_FILL),
2178 (GtkAttachOptions) (0), 0, 0);
2180 basic_parameters_fcs_h_box = gtk_hbox_new (FALSE, 1);
2181 gtk_widget_set_name (basic_parameters_fcs_h_box,
2182 "basic_parameters_fcs_h_box");
2183 gtk_widget_show (basic_parameters_fcs_h_box);
2184 gtk_table_attach (GTK_TABLE (basic_parameters_tb),
2185 basic_parameters_fcs_h_box, 2, 3, 2, 3,
2186 (GtkAttachOptions) (GTK_FILL),
2187 (GtkAttachOptions) (GTK_FILL), 3, 0);
2189 basic_parameters_fcs_filter_lb = gtk_label_new ("FCS Filter:");
2190 gtk_widget_set_name (basic_parameters_fcs_filter_lb,
2191 "basic_parameters_fcs_filter_lb");
2192 gtk_widget_show (basic_parameters_fcs_filter_lb);
2193 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box),
2194 basic_parameters_fcs_filter_lb, FALSE, FALSE, 0);
2196 fcs_filter_cm = gtk_combo_new ();
2197 gtk_widget_set_name (fcs_filter_cm, "fcs_filter_cm");
2198 gtk_widget_show (fcs_filter_cm);
2199 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box), fcs_filter_cm,
2201 gtk_widget_set_size_request (fcs_filter_cm, 112, -1);
2202 fcs_filter_cm_items =
2203 g_list_append (fcs_filter_cm_items, (gpointer) "All Frames");
2204 fcs_filter_cm_items =
2205 g_list_append (fcs_filter_cm_items, (gpointer) "Valid Frames");
2206 fcs_filter_cm_items =
2207 g_list_append (fcs_filter_cm_items, (gpointer) "Invalid Frames");
2208 gtk_combo_set_popdown_strings (GTK_COMBO (fcs_filter_cm),
2209 fcs_filter_cm_items);
2210 g_list_free (fcs_filter_cm_items);
2212 fcs_filter_en = GTK_COMBO (fcs_filter_cm)->entry;
2213 gtk_widget_set_name (fcs_filter_en, "fcs_filter_en");
2215 if (airpcap_if_selected != NULL)
2217 airpcap_validation_type_combo_set_by_type(fcs_filter_cm,airpcap_if_selected->CrcValidationOn);
2220 gtk_widget_show (fcs_filter_en);
2222 basic_parameters_frame_lb = gtk_label_new ("<b>Basic Parameters</b>");
2223 gtk_widget_set_name (basic_parameters_frame_lb,
2224 "basic_parameters_frame_lb");
2225 gtk_widget_show (basic_parameters_frame_lb);
2227 gtk_frame_set_label_widget (GTK_FRAME (basic_parameters_fr),basic_parameters_frame_lb);
2228 gtk_label_set_use_markup (GTK_LABEL (basic_parameters_frame_lb), TRUE);
2230 low_buttons_h_box = gtk_hbox_new (FALSE, 0);
2231 gtk_widget_set_name (low_buttons_h_box, "low_buttons_h_box");
2232 gtk_widget_show (low_buttons_h_box);
2233 gtk_box_pack_end (GTK_BOX (main_box), low_buttons_h_box, FALSE, FALSE, 0);
2235 left_h_button_box = gtk_hbutton_box_new ();
2236 gtk_widget_set_name (left_h_button_box, "left_h_button_box");
2237 gtk_widget_show (left_h_button_box);
2238 gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
2241 reset_configuration_bt = gtk_button_new_with_mnemonic ("Reset Configuration");
2242 gtk_widget_set_name (reset_configuration_bt, "reset_configuration_bt");
2243 /* gtk_widget_show (reset_configuration_bt); */
2244 gtk_container_add (GTK_CONTAINER (low_buttons_h_box),
2245 reset_configuration_bt);
2246 GTK_WIDGET_SET_FLAGS (reset_configuration_bt, GTK_CAN_DEFAULT);
2248 right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
2249 gtk_widget_show (right_h_button_box);
2250 gtk_box_pack_end (GTK_BOX (low_buttons_h_box), right_h_button_box, FALSE,
2252 gtk_button_box_set_layout (GTK_BUTTON_BOX (right_h_button_box),
2255 ok_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_OK);
2256 apply_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_APPLY);
2257 cancel_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_CANCEL);
2259 /* Connect the callbacks */
2260 g_signal_connect (airpcap_advanced_w, "delete_event", G_CALLBACK(window_delete_event_cb), airpcap_advanced_w);
2261 g_signal_connect (airpcap_advanced_w, "destroy", G_CALLBACK(on_airpcap_advanced_destroy), airpcap_advanced_w);
2263 if (!airpcap_if_is_any(airpcap_if_selected))
2265 g_signal_connect (blink_bt, "clicked", G_CALLBACK(on_blink_bt_clicked), airpcap_advanced_w);
2269 g_signal_connect (blink_bt, "clicked", G_CALLBACK(on_what_s_this_bt_clicked), airpcap_advanced_w);
2272 g_signal_connect (channel_en, "changed", G_CALLBACK(on_channel_en_changed), channel_offset_cb);
2273 g_signal_connect (GTK_COMBO(channel_offset_cb)->entry, "changed", G_CALLBACK(on_channel_offset_cb_changed), NULL);
2274 g_signal_connect (capture_type_en, "changed", G_CALLBACK(on_capture_type_en_changed), airpcap_advanced_w);
2275 g_signal_connect (fcs_ck, "toggled", G_CALLBACK(on_fcs_ck_toggled), airpcap_advanced_w);
2276 g_signal_connect (fcs_filter_en, "changed", G_CALLBACK(on_fcs_filter_en_changed), airpcap_advanced_w);
2277 g_signal_connect (reset_configuration_bt, "clicked", G_CALLBACK(on_reset_configuration_bt_clicked), airpcap_advanced_w);
2278 g_signal_connect (apply_bt, "clicked", G_CALLBACK(on_advanced_apply_bt_clicked), airpcap_advanced_w);
2279 g_signal_connect (ok_bt,"clicked", G_CALLBACK(on_advanced_ok_bt_clicked), airpcap_advanced_w);
2280 g_signal_connect (cancel_bt,"clicked", G_CALLBACK(on_advanced_cancel_bt_clicked), airpcap_advanced_w);
2282 /* Different because the window will be closed ... */
2283 /*window_set_cancel_button(airpcap_advanced_w, ok_bt, window_cancel_button_cb);
2284 window_set_cancel_button(airpcap_advanced_w, cancel_bt, window_cancel_button_cb);*/
2287 /* Store pointers to all widgets, for use by lookup_widget(). */
2288 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_BLINK_KEY, blink_bt);
2289 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_CHANNEL_KEY,channel_cm);
2290 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_LINK_TYPE_KEY,capture_type_cm);
2291 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_FCS_CHECK_KEY, fcs_ck);
2292 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_FCS_FILTER_KEY, fcs_filter_cm);
2293 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_OK_KEY, ok_bt);
2294 g_object_set_data (G_OBJECT(airpcap_advanced_w), AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt);
2297 * I will need the toolbar and the main widget in some callback,
2298 * so I will add the toolbar pointer to the airpcap_advanced_w
2300 g_object_set_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY,toolbar);
2302 /* At the end, so that it appears completely all together ... */
2303 gtk_widget_show (airpcap_advanced_w);
2307 * Callback for the OK button 'clicked' in the Advanced Wireless Settings window.
2310 on_advanced_ok_bt_clicked(GtkWidget *button, gpointer data)
2312 PAirpcapHandle ad = NULL;
2313 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
2315 /* Retrieve object data */
2316 GtkWidget *airpcap_advanced_w;
2317 GtkWidget *channel_combo;
2318 GtkWidget *capture_combo;
2319 GtkWidget *crc_check;
2320 GtkWidget *wrong_crc_combo;
2321 GtkWidget *blink_bt;
2322 GtkWidget *interface_combo;
2323 GtkWidget *cancel_bt;
2326 /* widgets in the toolbar */
2329 *toolbar_channel_cm,
2330 *toolbar_channel_offset_cb,
2331 *toolbar_wrong_crc_cm,
2334 /* Retrieve the GUI object pointers */
2335 airpcap_advanced_w = GTK_WIDGET(data);
2336 interface_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_INTERFACE_KEY));
2337 channel_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CHANNEL_KEY));
2338 capture_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_LINK_TYPE_KEY));
2339 crc_check = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_FCS_CHECK_KEY));
2340 wrong_crc_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_FCS_FILTER_KEY));
2341 blink_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_BLINK_KEY));
2342 cancel_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CANCEL_KEY));
2343 ok_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_OK_KEY));
2344 advanced_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEY));
2346 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
2348 /* retrieve toolbar info */
2349 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
2350 toolbar_channel_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
2351 toolbar_channel_offset_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY));
2352 toolbar_wrong_crc_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
2354 if (airpcap_if_selected == NULL) { /* There's not much we can do. */
2355 gtk_widget_destroy(airpcap_advanced_w);
2359 /* Stop blinking our LED */
2360 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
2363 g_source_remove(airpcap_if_selected->tag);
2364 airpcap_if_turn_led_on(ad, 0);
2365 airpcap_if_selected->blinking = FALSE;
2366 airpcap_if_selected->led = TRUE;
2367 airpcap_if_close(ad);
2370 /* ??? - Ask if want to save configuration */
2372 /* Save the configuration */
2373 airpcap_save_selected_if_configuration(airpcap_if_selected);
2374 /* Remove GLIB timeout */
2375 g_source_remove(airpcap_if_selected->tag);
2377 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)));
2378 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
2379 airpcap_update_channel_offset_combo_entry(GTK_WIDGET(toolbar_channel_offset_cb),airpcap_if_selected->channelInfo.ExtChannel);
2380 airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
2382 gtk_widget_destroy(airpcap_advanced_w);
2386 * Callback for the CANCEL button 'clicked' in the Advanced Wireless Settings window.
2389 on_advanced_cancel_bt_clicked(GtkWidget *button, gpointer data)
2391 PAirpcapHandle ad = NULL;
2392 gchar ebuf[AIRPCAP_ERRBUF_SIZE];
2394 /* Retrieve object data */
2395 GtkWidget *airpcap_advanced_w;
2396 GtkWidget *channel_combo;
2397 GtkWidget *capture_combo;
2398 GtkWidget *crc_check;
2399 GtkWidget *wrong_crc_combo;
2400 GtkWidget *blink_bt;
2401 GtkWidget *interface_combo;
2402 GtkWidget *cancel_bt;
2405 /* widgets in the toolbar */
2408 *toolbar_channel_cm,
2409 *toolbar_wrong_crc_cm,
2412 /* Retrieve the GUI object pointers */
2413 airpcap_advanced_w = GTK_WIDGET(data);
2414 interface_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_INTERFACE_KEY));
2415 channel_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CHANNEL_KEY));
2416 capture_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_LINK_TYPE_KEY));
2417 crc_check = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_FCS_CHECK_KEY));
2418 wrong_crc_combo = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_FCS_FILTER_KEY));
2419 blink_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_BLINK_KEY));
2420 cancel_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_CANCEL_KEY));
2421 ok_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_OK_KEY));
2422 advanced_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEY));
2424 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_TOOLBAR_KEY));
2426 /* retrieve toolbar info */
2427 toolbar_if_lb = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_INTERFACE_KEY));
2428 toolbar_channel_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_CHANNEL_KEY));
2429 toolbar_wrong_crc_cm = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
2431 /* Stop blinking ALL leds (go through the airpcap_if_list) */
2432 if (airpcap_if_selected != NULL)
2434 ad = airpcap_if_open(airpcap_if_selected->name, ebuf);
2437 g_source_remove(airpcap_if_selected->tag);
2438 airpcap_if_turn_led_on(ad, 0);
2439 airpcap_if_selected->blinking = FALSE;
2440 airpcap_if_selected->led = TRUE;
2441 airpcap_if_close(ad);
2445 /* reload the configuration!!! Configuration has not been saved but
2446 the corresponding structure has been modified probably...*/
2447 if (!airpcap_if_selected->saved)
2449 airpcap_load_selected_if_configuration(airpcap_if_selected);
2452 gtk_widget_destroy(airpcap_advanced_w);
2455 /* Called to create the key management window */
2457 display_airpcap_key_management_cb(GtkWidget *w, gpointer data)
2459 GtkWidget *key_management_w;
2460 GtkWidget *main_box;
2463 GtkWidget *keys_h_sub_box;
2464 GtkWidget *enable_decryption_tb;
2465 GtkWidget *enable_decryption_lb;
2466 GtkWidget *enable_decryption_cb;
2467 /*GList *enable_decryption_cb_items = NULL;*/
2468 GtkWidget *enable_decryption_en;
2469 GtkWidget *keys_v_sub_box;
2470 GtkWidget *keys_scrolled_w;
2472 GtkWidget *key_list_decryption_type_col_lb;
2473 GtkWidget *key_list_decryption_key_col_lb;
2474 GtkWidget *key_ls_decryption_ssid_col_lb;
2475 GtkWidget *key_v_button_box;
2476 GtkWidget *add_new_key_bt;
2477 GtkWidget *remove_key_bt;
2478 GtkWidget *edit_key_bt;
2479 GtkWidget *move_key_up_bt;
2480 GtkWidget *move_key_down_bt;
2481 GtkWidget *keys_frame_lb;
2482 GtkWidget *low_buttons_h_box;
2483 GtkWidget *left_h_button_box;
2484 GtkWidget *reset_configuration_bt;
2485 GtkWidget *right_h_button_box;
2487 GtkWidget *apply_bt;
2488 GtkWidget *cancel_bt;
2490 /* widgets in the toolbar */
2492 *toolbar_decryption_ck;
2495 /*GList *channel_list,*capture_list;*/
2496 /*GList *linktype_list = NULL;*/
2498 /* Selected row/column structure */
2499 airpcap_key_ls_selected_info_t *key_ls_selected_item;
2500 key_ls_selected_item = (airpcap_key_ls_selected_info_t*)g_malloc(sizeof(airpcap_key_ls_selected_info_t));
2501 key_ls_selected_item->row = NO_ROW_SELECTED;
2502 key_ls_selected_item->column = NO_COLUMN_SELECTED;
2504 /* user data - RETRIEVE pointers of toolbar widgets */
2505 toolbar = GTK_WIDGET(data);
2506 toolbar_decryption_ck = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
2508 /* gray out the toolbar */
2509 gtk_widget_set_sensitive(toolbar,FALSE);
2514 /* the selected is the active, for now */
2515 airpcap_if_selected = airpcap_if_active;
2517 /* Create the new window */
2518 key_management_w = window_new(GTK_WINDOW_TOPLEVEL, "Decryption Key Management");
2520 gtk_container_set_border_width (GTK_CONTAINER (key_management_w), 5);
2521 gtk_window_set_position (GTK_WINDOW (key_management_w),
2522 GTK_WIN_POS_CENTER);
2524 gtk_window_set_resizable (GTK_WINDOW (key_management_w), FALSE);
2525 gtk_window_set_type_hint (GTK_WINDOW (key_management_w), GDK_WINDOW_TYPE_HINT_DIALOG);
2527 main_box = gtk_vbox_new (FALSE, 0);
2528 gtk_widget_set_name (main_box, "main_box");
2529 gtk_widget_show (main_box);
2530 gtk_container_add (GTK_CONTAINER (key_management_w), main_box);
2532 keys_fr = gtk_frame_new (NULL);
2533 gtk_widget_set_name (keys_fr, "keys_fr");
2534 gtk_widget_show (keys_fr);
2535 gtk_box_pack_start (GTK_BOX (main_box), keys_fr, FALSE, FALSE, 0);
2536 gtk_container_set_border_width (GTK_CONTAINER (keys_fr), 10);
2538 keys_al = gtk_alignment_new (0.5, 0.5, 1, 1);
2539 gtk_widget_set_name (keys_al, "keys_al");
2540 gtk_widget_show (keys_al);
2541 gtk_container_add (GTK_CONTAINER (keys_fr), keys_al);
2542 gtk_container_set_border_width (GTK_CONTAINER (keys_al), 5);
2544 gtk_alignment_set_padding (GTK_ALIGNMENT (keys_al), 0, 0, 12, 0);
2546 keys_h_sub_box = gtk_vbox_new (FALSE, 0);
2547 gtk_widget_set_name (keys_h_sub_box, "keys_h_sub_box");
2548 gtk_widget_show (keys_h_sub_box);
2549 gtk_container_add (GTK_CONTAINER (keys_al), keys_h_sub_box);
2551 enable_decryption_tb = gtk_table_new (1, 2, FALSE);
2552 gtk_widget_set_name (enable_decryption_tb, "enable_decryption_tb");
2553 gtk_widget_show (enable_decryption_tb);
2554 gtk_box_pack_start (GTK_BOX (keys_h_sub_box), enable_decryption_tb, FALSE,
2556 gtk_table_set_col_spacings (GTK_TABLE (enable_decryption_tb), 6);
2558 enable_decryption_lb = gtk_label_new ("Select Decryption Mode");
2559 gtk_widget_set_name (enable_decryption_lb, "enable_decryption_lb");
2560 gtk_widget_show (enable_decryption_lb);
2561 gtk_table_attach (GTK_TABLE (enable_decryption_tb), enable_decryption_lb, 1,
2562 2, 0, 1, (GtkAttachOptions) (GTK_FILL),
2563 (GtkAttachOptions) (0), 0, 0);
2564 gtk_misc_set_alignment (GTK_MISC (enable_decryption_lb), 0, 0.5);
2566 enable_decryption_cb = gtk_combo_new ();
2567 gtk_widget_set_name (enable_decryption_cb, "enable_decryption_cb");
2568 gtk_widget_show (enable_decryption_cb);
2569 gtk_table_attach (GTK_TABLE (enable_decryption_tb), enable_decryption_cb, 0,
2570 1, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0),
2572 gtk_widget_set_size_request (enable_decryption_cb, 83, -1);
2573 update_decryption_mode_list(enable_decryption_cb);
2575 enable_decryption_en = GTK_COMBO (enable_decryption_cb)->entry;
2576 gtk_widget_set_name (enable_decryption_en, "enable_decryption_en");
2577 gtk_widget_show (enable_decryption_en);
2578 gtk_editable_set_editable (GTK_EDITABLE (enable_decryption_en), FALSE);
2579 GTK_WIDGET_UNSET_FLAGS (enable_decryption_en, GTK_CAN_FOCUS);
2581 /* Set correct decryption mode!!!! */
2582 update_decryption_mode_cm(enable_decryption_cb);
2584 keys_v_sub_box = gtk_hbox_new (FALSE, 0);
2585 gtk_widget_set_name (keys_v_sub_box, "keys_v_sub_box");
2586 gtk_widget_show (keys_v_sub_box);
2587 gtk_box_pack_start (GTK_BOX (keys_h_sub_box), keys_v_sub_box, TRUE, TRUE, 0);
2589 keys_scrolled_w = gtk_scrolled_window_new (NULL, NULL);
2590 gtk_widget_set_name (keys_scrolled_w, "keys_scrolled_w");
2591 gtk_widget_show (keys_scrolled_w);
2592 gtk_box_pack_start (GTK_BOX (keys_v_sub_box), keys_scrolled_w, TRUE, TRUE,
2594 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (keys_scrolled_w), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
2596 #ifdef HAVE_AIRPDCAP
2597 key_ls = gtk_clist_new (3);
2599 key_ls = gtk_clist_new (2);
2602 gtk_widget_set_name (key_ls, "key_ls");
2603 gtk_widget_show (key_ls);
2605 gtk_container_add (GTK_CONTAINER (keys_scrolled_w), key_ls);
2606 gtk_clist_set_column_width (GTK_CLIST (key_ls), 0, 54);
2607 gtk_clist_set_column_width (GTK_CLIST (key_ls), 1, 113);
2608 #ifdef HAVE_AIRPDCAP
2609 gtk_clist_set_column_width (GTK_CLIST (key_ls), 2, 80);
2611 gtk_clist_column_titles_show (GTK_CLIST (key_ls));
2612 gtk_clist_set_shadow_type (GTK_CLIST (key_ls), GTK_SHADOW_ETCHED_IN);
2613 gtk_clist_set_column_justification(GTK_CLIST (key_ls),0,GTK_JUSTIFY_CENTER);
2615 key_list_decryption_type_col_lb = gtk_label_new ("Type");
2616 gtk_widget_set_name (key_list_decryption_type_col_lb,
2617 "key_list_decryption_type_col_lb");
2618 gtk_widget_show (key_list_decryption_type_col_lb);
2619 gtk_clist_set_column_widget (GTK_CLIST (key_ls), 0, key_list_decryption_type_col_lb);
2621 key_list_decryption_key_col_lb = gtk_label_new ("Key");
2622 gtk_widget_set_name (key_list_decryption_key_col_lb,
2623 "key_list_decryption_key_col_lb");
2624 gtk_widget_show (key_list_decryption_key_col_lb);
2625 gtk_clist_set_column_widget (GTK_CLIST (key_ls), 1,
2626 key_list_decryption_key_col_lb);
2628 #ifdef HAVE_AIRPDCAP
2629 key_ls_decryption_ssid_col_lb = gtk_label_new ("SSID");
2630 gtk_widget_set_name (key_ls_decryption_ssid_col_lb,
2631 "key_ls_decryption_ssid_col_lb");
2632 gtk_widget_show (key_ls_decryption_ssid_col_lb);
2633 gtk_clist_set_column_widget (GTK_CLIST (key_ls), 2,
2634 key_ls_decryption_ssid_col_lb);
2638 key_v_button_box = gtk_vbutton_box_new ();
2639 gtk_widget_set_name (key_v_button_box, "key_v_button_box");
2640 gtk_widget_show (key_v_button_box);
2641 gtk_box_pack_start (GTK_BOX (keys_v_sub_box), key_v_button_box, FALSE, TRUE,
2644 add_new_key_bt = gtk_button_new_from_stock(GTK_STOCK_NEW);
2645 gtk_widget_set_name (add_new_key_bt, "add_new_key_bt");
2646 gtk_widget_show (add_new_key_bt);
2647 gtk_container_add (GTK_CONTAINER (key_v_button_box), add_new_key_bt);
2648 GTK_WIDGET_SET_FLAGS (add_new_key_bt, GTK_CAN_DEFAULT);
2650 edit_key_bt = gtk_button_new_from_stock(WIRESHARK_STOCK_EDIT);
2651 gtk_widget_set_name (edit_key_bt, "edit_key_bt");
2652 gtk_widget_show (edit_key_bt);
2653 gtk_container_add (GTK_CONTAINER (key_v_button_box), edit_key_bt);
2654 GTK_WIDGET_SET_FLAGS (edit_key_bt, GTK_CAN_DEFAULT);
2656 remove_key_bt = gtk_button_new_from_stock(GTK_STOCK_DELETE);
2657 gtk_widget_set_name (remove_key_bt, "remove_key_bt");
2658 gtk_widget_show (remove_key_bt);
2659 gtk_container_add (GTK_CONTAINER (key_v_button_box), remove_key_bt);
2660 GTK_WIDGET_SET_FLAGS (remove_key_bt, GTK_CAN_DEFAULT);
2662 move_key_up_bt = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
2663 gtk_widget_set_name (move_key_up_bt, "move_key_up_bt");
2664 gtk_widget_show (move_key_up_bt);
2665 gtk_container_add (GTK_CONTAINER (key_v_button_box), move_key_up_bt);
2666 GTK_WIDGET_SET_FLAGS (move_key_up_bt, GTK_CAN_DEFAULT);
2668 move_key_down_bt = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
2669 gtk_widget_set_name (move_key_down_bt, "move_key_down_bt");
2670 gtk_widget_show (move_key_down_bt);
2671 gtk_container_add (GTK_CONTAINER (key_v_button_box), move_key_down_bt);
2672 GTK_WIDGET_SET_FLAGS (move_key_down_bt, GTK_CAN_DEFAULT);
2674 keys_frame_lb = gtk_label_new ("<b>Decryption Keys</b>");
2675 gtk_widget_set_name (keys_frame_lb, "keys_frame_lb");
2676 gtk_widget_show (keys_frame_lb);
2678 gtk_frame_set_label_widget (GTK_FRAME (keys_fr), keys_frame_lb);
2679 gtk_label_set_use_markup (GTK_LABEL (keys_frame_lb), TRUE);
2681 low_buttons_h_box = gtk_hbox_new (FALSE, 0);
2682 gtk_widget_set_name (low_buttons_h_box, "low_buttons_h_box");
2683 gtk_widget_show (low_buttons_h_box);
2684 gtk_box_pack_end (GTK_BOX (main_box), low_buttons_h_box, FALSE, FALSE, 0);
2686 left_h_button_box = gtk_hbutton_box_new ();
2687 gtk_widget_set_name (left_h_button_box, "left_h_button_box");
2688 gtk_widget_show (left_h_button_box);
2689 gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
2692 reset_configuration_bt = gtk_button_new_with_mnemonic ("Reset Configuration");
2693 gtk_widget_set_name (reset_configuration_bt, "reset_configuration_bt");
2694 /* gtk_widget_show (reset_configuration_bt); */
2695 gtk_container_add (GTK_CONTAINER (left_h_button_box),
2696 reset_configuration_bt);
2697 GTK_WIDGET_SET_FLAGS (reset_configuration_bt, GTK_CAN_DEFAULT);
2699 right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
2700 gtk_widget_set_name (right_h_button_box, "right_h_button_box");
2701 gtk_widget_show (right_h_button_box);
2702 gtk_box_pack_end (GTK_BOX (low_buttons_h_box), right_h_button_box, FALSE,
2704 gtk_button_box_set_layout (GTK_BUTTON_BOX (right_h_button_box),
2707 ok_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_OK);
2708 apply_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_APPLY);
2709 cancel_bt = g_object_get_data(G_OBJECT(right_h_button_box), GTK_STOCK_CANCEL);
2711 /* Connect the callbacks */
2712 g_signal_connect (key_management_w, "delete_event", G_CALLBACK(window_delete_event_cb), key_management_w);
2713 g_signal_connect (key_management_w, "destroy", G_CALLBACK(on_key_management_destroy), key_management_w);
2714 g_signal_connect (add_new_key_bt, "clicked", G_CALLBACK(on_add_new_key_bt_clicked), key_management_w);
2715 g_signal_connect (remove_key_bt, "clicked", G_CALLBACK(on_remove_key_bt_clicked), key_management_w);
2716 g_signal_connect (edit_key_bt, "clicked", G_CALLBACK(on_edit_key_bt_clicked), key_management_w);
2717 g_signal_connect (move_key_up_bt, "clicked", G_CALLBACK(on_move_key_up_bt_clicked), key_management_w);
2718 g_signal_connect (move_key_down_bt, "clicked", G_CALLBACK(on_move_key_down_bt_clicked), key_management_w);
2719 g_signal_connect (reset_configuration_bt, "clicked", G_CALLBACK(on_reset_configuration_bt_clicked), key_management_w);
2720 g_signal_connect (apply_bt, "clicked", G_CALLBACK(on_key_management_apply_bt_clicked), key_management_w);
2721 g_signal_connect (ok_bt, "clicked", G_CALLBACK(on_key_management_ok_bt_clicked), key_management_w);
2722 g_signal_connect (cancel_bt, "clicked", G_CALLBACK(on_key_management_cancel_bt_clicked), key_management_w);
2723 g_signal_connect (key_ls, "select_row", G_CALLBACK(on_key_ls_select_row), key_management_w);
2724 g_signal_connect (key_ls, "unselect_row", G_CALLBACK(on_key_ls_unselect_row), key_management_w);
2725 g_signal_connect (key_ls, "click_column", G_CALLBACK(on_key_ls_click_column), key_management_w);
2727 /* Different because the window will be closed ... */
2728 /*window_set_cancel_button(key_management_w, ok_bt, window_cancel_button_cb);
2729 window_set_cancel_button(key_management_w, cancel_bt, window_cancel_button_cb);*/
2731 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY,key_ls_selected_item);
2733 /* Store pointers to all widgets, for use by lookup_widget(). */
2734 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_WEP_DECRYPTION_KEY, enable_decryption_en);
2735 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_KEYLIST_KEY, key_ls);
2736 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_OK_KEY, ok_bt);
2737 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt);
2740 * I will need the toolbar and the main widget in some callback,
2741 * so I will add the toolbar pointer to the key_management_w
2743 g_object_set_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY,toolbar);
2744 g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_TOOLBAR_DECRYPTION_KEY, toolbar_decryption_ck);
2746 /* FIRST OF ALL, CHECK THE KEY COLLECTIONS */
2748 * This will read the decryption keys from the preferences file, and will store
2749 * them into the registry...
2751 if (!airpcap_check_decryption_keys(airpcap_if_list))
2753 /* Ask the user what to do ...*/
2754 airpcap_keys_check_w(key_management_w,NULL);
2756 else /* Keys from lists are equals, or Wireshark has got no keys */
2758 airpcap_load_decryption_keys(airpcap_if_list);
2759 airpcap_fill_key_list(key_ls);
2760 /* At the end, so that it appears completely all together ... */
2761 gtk_widget_show (key_management_w);
2766 * Callback for the OK button 'clicked' in the Decryption Key Management window.
2769 on_key_management_ok_bt_clicked(GtkWidget *button, gpointer data)
2771 /* advanced window */
2772 GtkWidget *key_management_w;
2774 /* retrieve main window */
2775 key_management_w = GTK_WIDGET(data);
2777 /* Apply the current decryption preferences */
2778 on_key_management_apply_bt_clicked(button, data);
2780 /* Save the preferences to preferences file!!! */
2781 write_prefs_to_file();
2783 gtk_widget_destroy(key_management_w);
2787 * Callback for the CANCEL button 'clicked' in the Decryption Key Management window.
2790 on_key_management_cancel_bt_clicked(GtkWidget *button, gpointer data)
2792 PAirpcapHandle ad = NULL;
2794 /* Retrieve object data */
2795 GtkWidget *key_management_w;
2796 GtkWidget *cancel_bt;
2800 /* widgets in the toolbar */
2802 *toolbar_decryption_ck,
2805 /* Row selected structure */
2806 airpcap_key_ls_selected_info_t *selected_item;
2808 /* Retrieve the GUI object pointers */
2809 key_management_w = GTK_WIDGET(data);
2810 cancel_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_CANCEL_KEY));
2811 ok_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_OK_KEY));
2812 key_ls = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
2813 key_management_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEY));
2815 toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY));
2817 /* retrieve toolbar info */
2818 toolbar_decryption_ck = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
2820 /* Retrieve the selected row item pointer... */
2821 selected_item = (airpcap_key_ls_selected_info_t*)(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY));
2823 g_free(selected_item);
2825 gtk_widget_destroy(key_management_w);
2829 * Dialog box that appears whenever keys are not consistent between Wireshark and AirPcap
2832 airpcap_keys_check_w(GtkWidget *w, gpointer data)
2834 GtkWidget *keys_check_w;
2835 GtkWidget *main_v_box;
2836 GtkWidget *warning_lb;
2837 GtkWidget *radio_tb;
2839 GSList *radio_bt_group = NULL;
2840 GtkWidget *merge_rb;
2841 GtkWidget *import_rb;
2842 GtkWidget *ignore_rb;
2844 GtkWidget *merge_lb;
2845 GtkWidget *import_lb;
2846 GtkWidget *ignore_lb;
2847 GtkWidget *low_h_button_box;
2849 GtkWidget *cancel_bt;
2851 keys_check_w = window_new (GTK_WINDOW_TOPLEVEL, "Decryption Key Warning");
2852 gtk_widget_set_name (keys_check_w, "keys_check_w");
2853 gtk_window_set_resizable (GTK_WINDOW (keys_check_w), FALSE);
2855 main_v_box = gtk_vbox_new (FALSE, 0);
2856 gtk_widget_set_name (main_v_box, "main_v_box");
2857 gtk_widget_show (main_v_box);
2858 gtk_container_add (GTK_CONTAINER (keys_check_w), main_v_box);
2860 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:");
2861 gtk_label_set_use_markup (GTK_LABEL (warning_lb), TRUE);
2862 gtk_widget_set_name (warning_lb, "warning_lb");
2863 gtk_widget_show (warning_lb);
2864 gtk_box_pack_start (GTK_BOX (main_v_box), warning_lb, FALSE, FALSE, 0);
2865 gtk_label_set_justify (GTK_LABEL (warning_lb), GTK_JUSTIFY_CENTER);
2866 gtk_label_set_line_wrap (GTK_LABEL (warning_lb), TRUE);
2868 radio_tb = gtk_table_new (4, 2, FALSE);
2869 gtk_widget_set_name (radio_tb, "radio_tb");
2870 gtk_widget_show (radio_tb);
2871 gtk_box_pack_start (GTK_BOX (main_v_box), radio_tb, TRUE, FALSE, 0);
2872 gtk_container_set_border_width (GTK_CONTAINER (radio_tb), 5);
2873 gtk_table_set_col_spacings (GTK_TABLE (radio_tb), 8);
2875 keep_rb = gtk_radio_button_new_with_mnemonic (NULL, "Keep");
2876 gtk_widget_set_name (keep_rb, "keep_rb");
2877 gtk_widget_show (keep_rb);
2878 gtk_table_attach (GTK_TABLE (radio_tb), keep_rb, 0, 1, 0, 1,
2879 (GtkAttachOptions) (GTK_FILL),
2880 (GtkAttachOptions) (0), 0, 0);
2881 gtk_radio_button_set_group (GTK_RADIO_BUTTON (keep_rb), radio_bt_group);
2882 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (keep_rb));
2884 merge_rb = gtk_radio_button_new_with_mnemonic (NULL, "Merge");
2885 gtk_widget_set_name (merge_rb, "merge_rb");
2886 gtk_widget_show (merge_rb);
2887 gtk_table_attach (GTK_TABLE (radio_tb), merge_rb, 0, 1, 1, 2,
2888 (GtkAttachOptions) (GTK_FILL),
2889 (GtkAttachOptions) (0), 0, 0);
2890 gtk_radio_button_set_group (GTK_RADIO_BUTTON (merge_rb), radio_bt_group);
2891 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (merge_rb));
2893 import_rb = gtk_radio_button_new_with_mnemonic (NULL, "Import");
2894 gtk_widget_set_name (import_rb, "import_rb");
2895 gtk_widget_show (import_rb);
2896 gtk_table_attach (GTK_TABLE (radio_tb), import_rb, 0, 1, 2, 3,
2897 (GtkAttachOptions) (GTK_FILL),
2898 (GtkAttachOptions) (0), 0, 0);
2899 gtk_radio_button_set_group (GTK_RADIO_BUTTON (import_rb), radio_bt_group);
2900 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (import_rb));
2902 ignore_rb = gtk_radio_button_new_with_mnemonic (NULL, "Ignore");
2903 gtk_widget_set_name (ignore_rb, "ignore_rb");
2904 gtk_widget_show (ignore_rb);
2905 gtk_table_attach (GTK_TABLE (radio_tb), ignore_rb, 0, 1, 3, 4,
2906 (GtkAttachOptions) (GTK_FILL),
2907 (GtkAttachOptions) (0), 0, 0);
2908 gtk_radio_button_set_group (GTK_RADIO_BUTTON (ignore_rb), radio_bt_group);
2909 radio_bt_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (ignore_rb));
2913 ("Use Wireshark keys, thus overwriting AirPcap adapter(s) ones.");
2914 gtk_widget_set_name (keep_lb, "keep_lb");
2915 gtk_widget_show (keep_lb);
2916 gtk_table_attach (GTK_TABLE (radio_tb), keep_lb, 1, 2, 0, 1,
2917 (GtkAttachOptions) (GTK_FILL),
2918 (GtkAttachOptions) (0), 0, 0);
2919 gtk_misc_set_alignment (GTK_MISC (keep_lb), 0, 0.5);
2921 merge_lb = gtk_label_new ("Merge Wireshark and AirPcap adapter(s) keys.");
2922 gtk_widget_set_name (merge_lb, "merge_lb");
2923 gtk_widget_show (merge_lb);
2924 gtk_table_attach (GTK_TABLE (radio_tb), merge_lb, 1, 2, 1, 2,
2925 (GtkAttachOptions) (GTK_FILL),
2926 (GtkAttachOptions) (0), 0, 0);
2927 gtk_misc_set_alignment (GTK_MISC (merge_lb), 0, 0.5);
2931 ("Use AirPcap adapter(s) keys, thus overwriting Wireshark ones.");
2932 gtk_widget_set_name (import_lb, "import_lb");
2933 gtk_widget_show (import_lb);
2934 gtk_table_attach (GTK_TABLE (radio_tb), import_lb, 1, 2, 2, 3,
2935 (GtkAttachOptions) (GTK_FILL),
2936 (GtkAttachOptions) (0), 0, 0);
2937 gtk_misc_set_alignment (GTK_MISC (import_lb), 0, 0.5);
2941 ("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.");
2942 gtk_widget_set_name (ignore_lb, "ignore_lb");
2943 gtk_widget_show (ignore_lb);
2944 gtk_table_attach (GTK_TABLE (radio_tb), ignore_lb, 1, 2, 3, 4,
2945 (GtkAttachOptions) (GTK_FILL),
2946 (GtkAttachOptions) (0), 0, 0);
2947 gtk_label_set_line_wrap (GTK_LABEL (ignore_lb), TRUE);
2948 gtk_misc_set_alignment (GTK_MISC (ignore_lb), 0, 0.5);
2950 low_h_button_box = gtk_hbutton_box_new ();
2951 gtk_widget_set_name (low_h_button_box, "low_h_button_box");
2952 gtk_widget_show (low_h_button_box);
2953 gtk_box_pack_start (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE,
2955 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
2956 GTK_BUTTONBOX_SPREAD);
2958 ok_bt = gtk_button_new_with_mnemonic ("OK");
2959 gtk_widget_set_name (ok_bt, "ok_bt");
2960 gtk_widget_show (ok_bt);
2961 gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
2962 GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
2964 cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
2965 gtk_widget_set_name (cancel_bt, "cancel_bt");
2966 gtk_widget_show (cancel_bt);
2967 gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
2968 GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
2970 /* Store pointers to all widgets, for use by lookup_widget(). */
2971 g_signal_connect (ok_bt, "clicked", G_CALLBACK(on_keys_check_ok_bt_clicked), keys_check_w);
2972 g_signal_connect (cancel_bt, "clicked", G_CALLBACK(on_keys_check_cancel_bt_clicked), keys_check_w);
2973 g_signal_connect (keys_check_w, "destroy", G_CALLBACK(on_keys_check_w_destroy), keys_check_w);
2975 /* Store pointers to all widgets, for use by lookup_widget(). */
2976 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY,w);
2977 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY,merge_rb);
2978 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY,keep_rb);
2979 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY,import_rb);
2980 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY,ignore_rb);
2981 g_object_set_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_GROUP_KEY,radio_bt_group);
2983 gtk_widget_set_sensitive(top_level,FALSE);
2984 gtk_widget_show(keys_check_w);
2988 on_keys_check_cancel_bt_clicked (GtkWidget *button, gpointer user_data)
2990 GtkWidget *key_management_w;
2991 GtkWidget *keys_check_w;
2994 keys_check_w = GTK_WIDGET(user_data);
2996 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
2998 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2999 and is not NULL if it was called when the Key Management widget has been clicked */
3000 if (key_management_w != NULL)
3003 key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
3004 airpcap_fill_key_list(key_ls);
3005 gtk_widget_show (key_management_w);
3008 gtk_widget_destroy(keys_check_w);
3012 on_keys_check_ok_bt_clicked (GtkWidget *button, gpointer user_data)
3014 GtkWidget *key_management_w;
3015 GtkWidget *keys_check_w;
3017 GtkWidget *merge_rb,
3022 keys_check_w = GTK_WIDGET(user_data);
3024 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
3025 merge_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY);
3026 keep_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY);
3027 import_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY);
3028 ignore_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY);
3030 /* Find out which radio button is selected and call the correct function */
3031 if (GTK_TOGGLE_BUTTON(merge_rb)->active) on_merge_bt_clicked (merge_rb,keys_check_w);
3032 else if (GTK_TOGGLE_BUTTON(keep_rb)->active) on_keep_bt_clicked (keep_rb,keys_check_w);
3033 else if (GTK_TOGGLE_BUTTON(import_rb)->active) on_import_bt_clicked (import_rb,keys_check_w);
3034 else if (GTK_TOGGLE_BUTTON(ignore_rb)->active) on_ignore_bt_clicked (ignore_rb,keys_check_w);
3035 else on_keys_check_cancel_bt_clicked(NULL,keys_check_w);
3039 on_keys_check_w_destroy (GtkWidget *w, gpointer user_data)
3041 gtk_widget_set_sensitive(top_level,TRUE);
3042 gtk_widget_set_sensitive(GTK_WIDGET(user_data),TRUE);
3046 on_keep_bt_clicked (GtkWidget *button, gpointer user_data)
3048 GtkWidget *key_management_w;
3049 GtkWidget *keys_check_w;
3050 GtkWidget *key_ls=NULL;
3052 GList* wireshark_keys=NULL;
3053 guint n_wireshark_keys = 0;
3055 GList* merged_keys=NULL;
3056 guint n_merged_keys = 0;
3059 guint n_total_keys=0;
3061 keys_check_w = GTK_WIDGET(user_data);
3063 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
3065 n_adapters = g_list_length(airpcap_if_list);
3067 /* Retrieve Wireshark keys */
3068 wireshark_keys = get_wireshark_keys();
3069 n_wireshark_keys = g_list_length(wireshark_keys);
3070 n_total_keys += n_wireshark_keys;
3072 merged_keys = merge_key_list(wireshark_keys,NULL);
3073 n_merged_keys = g_list_length(merged_keys);
3075 /* Set up this new list as default for Wireshark and Adapters... */
3076 airpcap_save_decryption_keys(merged_keys,airpcap_if_list);
3078 /* Write the preferences to the preferences file (here is not needed, by the way)*/
3079 write_prefs_to_file();
3081 /* Free the memory */
3082 free_key_list(wireshark_keys);
3084 /* Close the window */
3085 gtk_widget_destroy(keys_check_w);
3087 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
3088 and is not NULL if it was called when the Key Management widget has been clicked */
3089 if (key_management_w != NULL)
3092 key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
3093 airpcap_fill_key_list(key_ls);
3094 gtk_widget_show (key_management_w);
3099 on_merge_bt_clicked (GtkWidget * button, gpointer user_data)
3101 GtkWidget *key_management_w;
3102 GtkWidget *keys_check_w;
3105 guint n_adapters = 0;
3106 guint n_wireshark_keys = 0;
3107 guint n_driver_keys = 0;
3108 guint n_curr_adapter_keys = 0;
3109 guint n_total_keys = 0;
3110 guint n_merged_keys = 0;
3113 GList* wireshark_keys=NULL;
3114 GList* driver_keys=NULL;
3115 GList* current_adapter_keys=NULL;
3116 GList* merged_list = NULL;
3117 GList* merged_list_tmp = NULL;
3119 airpcap_if_info_t* curr_adapter;
3121 keys_check_w = GTK_WIDGET(user_data);
3123 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
3125 n_adapters = g_list_length(airpcap_if_list);
3127 /* Retrieve Wireshark keys */
3128 wireshark_keys = get_wireshark_keys();
3129 n_wireshark_keys = g_list_length(wireshark_keys);
3130 n_total_keys += n_wireshark_keys;
3132 merged_list = merge_key_list(wireshark_keys,NULL);
3134 /* Retrieve AirPcap driver's keys */
3135 driver_keys = get_airpcap_driver_keys();
3136 n_driver_keys = g_list_length(driver_keys);
3137 n_total_keys += n_driver_keys;
3139 merged_list = merge_key_list(merged_list,driver_keys);
3141 /* NOW wireshark_keys and driver_keys ARE no more needed... at the end, we will have to free them! */
3142 for (i = 0; i<n_adapters; i++)
3144 curr_adapter = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i);
3145 current_adapter_keys = get_airpcap_device_keys(curr_adapter);
3146 n_curr_adapter_keys = g_list_length(current_adapter_keys);
3148 merged_list_tmp = merged_list;
3149 merged_list = merge_key_list(merged_list_tmp,current_adapter_keys);
3150 free_key_list(merged_list_tmp);
3152 n_total_keys += n_curr_adapter_keys;
3155 n_merged_keys = g_list_length(merged_list);
3157 /* Set up this new list as default for Wireshark and Adapters... */
3158 airpcap_save_decryption_keys(merged_list,airpcap_if_list);
3160 /* Write the preferences to the preferences file */
3161 write_prefs_to_file();
3163 free_key_list(wireshark_keys);
3164 free_key_list(driver_keys);
3166 gtk_widget_destroy(keys_check_w);
3168 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
3169 and is not NULL if it was called when the Key Management widget has been clicked */
3170 if (key_management_w != NULL)
3173 key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
3174 airpcap_fill_key_list(key_ls);
3175 gtk_widget_show (key_management_w);
3181 on_import_bt_clicked (GtkWidget * button, gpointer user_data)
3183 GtkWidget *key_management_w;
3184 GtkWidget *keys_check_w;
3187 guint n_adapters = 0;
3188 guint n_wireshark_keys = 0;
3189 guint n_driver_keys = 0;
3190 guint n_curr_adapter_keys = 0;
3191 guint n_total_keys = 0;
3192 guint n_merged_keys = 0;
3195 GList* wireshark_keys=NULL;
3196 GList* driver_keys=NULL;
3197 GList* current_adapter_keys=NULL;
3198 GList* merged_list = NULL;
3199 GList* merged_list_tmp = NULL;
3201 airpcap_if_info_t* curr_adapter;
3203 keys_check_w = GTK_WIDGET(user_data);
3205 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
3207 n_adapters = g_list_length(airpcap_if_list);
3209 wireshark_keys = get_wireshark_keys();
3210 n_wireshark_keys = g_list_length(wireshark_keys);
3211 n_total_keys += n_wireshark_keys;
3213 /* Retrieve AirPcap driver's keys */
3214 driver_keys = get_airpcap_driver_keys();
3215 n_driver_keys = g_list_length(driver_keys);
3216 n_total_keys += n_driver_keys;
3218 merged_list = merge_key_list(merged_list,driver_keys);
3220 /* NOW wireshark_keys IS no more needed... at the end, we will have to free it! */
3221 for (i = 0; i<n_adapters; i++)
3223 curr_adapter = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i);
3224 current_adapter_keys = get_airpcap_device_keys(curr_adapter);
3225 n_curr_adapter_keys = g_list_length(current_adapter_keys);
3227 merged_list_tmp = merged_list;
3228 merged_list = merge_key_list(merged_list_tmp,current_adapter_keys);
3229 free_key_list(merged_list_tmp);
3231 n_total_keys += n_curr_adapter_keys;
3234 n_merged_keys = g_list_length(merged_list);
3236 /* Set up this new list as default for Wireshark and Adapters... */
3237 airpcap_save_decryption_keys(merged_list,airpcap_if_list);
3239 /* Write the preferences to the preferences file */
3240 write_prefs_to_file();
3242 free_key_list(wireshark_keys);
3243 free_key_list(driver_keys);
3245 gtk_widget_destroy(keys_check_w);
3247 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
3248 and is not NULL if it was called when the Key Management widget has been clicked */
3249 if (key_management_w != NULL)
3252 key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
3253 airpcap_fill_key_list(key_ls);
3254 gtk_widget_show (key_management_w);
3260 on_ignore_bt_clicked (GtkWidget * button, gpointer user_data)
3262 GtkWidget *key_management_w;
3263 GtkWidget *keys_check_w;
3266 keys_check_w = GTK_WIDGET(user_data);
3268 key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
3270 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
3271 and is not NULL if it was called when the Key Management widget has been clicked */
3272 if (key_management_w != NULL)
3275 key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
3276 airpcap_fill_key_list(key_ls);
3277 gtk_widget_show (key_management_w);
3280 gtk_widget_destroy(keys_check_w);
3284 #endif /* HAVE_AIRPCAP */
3292 * indent-tabs-mode: t
3295 * ex: set shiftwidth=4 tabstop=4 noexpandtab
3296 * :indentSize=4:tabSize=4:noTabs=false: