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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
35 #include <epan/filesystem.h>
36 #include <epan/emem.h>
37 #include <epan/prefs.h>
38 #include <epan/frequency-utils.h>
39 #include <epan/crypt/wep-wpadefs.h>
43 #include "ui/simple_dialog.h"
45 #include "ui/gtk/main.h"
46 #include "ui/gtk/dlg_utils.h"
47 #include "ui/gtk/gui_utils.h"
48 #include "ui/gtk/dfilter_expr_dlg.h"
49 #include "ui/gtk/stock_icons.h"
50 #include "ui/gtk/gtkglobals.h"
51 #include "ui/gtk/help_dlg.h"
52 #include "ui/gtk/keys.h"
53 #include "ui/gtk/old-gtk-compat.h"
54 #include "ui/gtk/packet_win.h"
57 #include "airpcap_loader.h"
58 #include "airpcap_gui_utils.h"
59 #include "airpcap_dlg.h"
62 * Callback for the select row event in the key list widget
65 on_key_list_select_row(GtkTreeSelection
*selection
, gpointer data
)
67 GtkWidget
*add_new_key_bt
, *edit_key_bt
, *remove_key_bt
;
68 GtkWidget
*move_key_up_bt
, *move_key_down_bt
;
71 GtkTreePath
*path
, *path_up
, *path_down
;
73 add_new_key_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_KEY_MGMT_NEW_KEY
);
74 edit_key_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_KEY_MGMT_EDIT_KEY
);
75 remove_key_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_KEY_MGMT_DELETE_KEY
);
76 move_key_up_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_KEY_MGMT_UP_KEY
);
77 move_key_down_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_KEY_MGMT_DOWN_KEY
);
79 if (gtk_tree_selection_get_selected(selection
, &model
, &iter
)) {
80 path
= gtk_tree_model_get_path(model
, &iter
);
81 path_up
= gtk_tree_path_copy(path
);
82 path_down
= gtk_tree_path_copy(path
);
83 gtk_tree_path_next(path_down
);
85 if (gtk_tree_model_iter_n_children(model
, NULL
) >= MAX_ENCRYPTION_KEYS
) {
86 gtk_widget_set_sensitive(add_new_key_bt
, FALSE
);
88 gtk_widget_set_sensitive(add_new_key_bt
, TRUE
);
91 gtk_widget_set_sensitive(edit_key_bt
, TRUE
);
92 gtk_widget_set_sensitive(remove_key_bt
, TRUE
);
94 /* ...and we have to use two different methods to figure out first/last because? */
95 if (gtk_tree_path_prev(path_up
)) {
96 gtk_widget_set_sensitive(move_key_up_bt
, TRUE
);
98 gtk_widget_set_sensitive(move_key_up_bt
, FALSE
);
101 if (gtk_tree_model_get_iter(model
, &iter
, path_down
)) {
102 gtk_widget_set_sensitive(move_key_down_bt
, TRUE
);
104 gtk_widget_set_sensitive(move_key_down_bt
, FALSE
);
107 gtk_tree_path_free(path
);
108 gtk_tree_path_free(path_up
);
109 gtk_tree_path_free(path_down
);
111 gtk_widget_set_sensitive(add_new_key_bt
, FALSE
);
112 gtk_widget_set_sensitive(edit_key_bt
, FALSE
);
113 gtk_widget_set_sensitive(remove_key_bt
, FALSE
);
114 gtk_widget_set_sensitive(move_key_up_bt
, FALSE
);
115 gtk_widget_set_sensitive(move_key_down_bt
, FALSE
);
119 * Callback for the select row event in the key list widget
122 on_key_list_reorder(GtkTreeModel
*model _U_
, GtkTreePath
*path _U_
, GtkTreeIter
*iter _U_
, gpointer no _U_
, gpointer data
) {
123 GtkTreeSelection
*selection
;
125 selection
= (GtkTreeSelection
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY
);
126 on_key_list_select_row(selection
, data
);
130 * Callback for the crc checkbox
133 on_fcs_ck_toggled(GtkWidget
*w _U_
, gpointer user_data _U_
)
136 if (airpcap_if_selected
!= NULL
)
138 if (airpcap_if_selected
->IsFcsPresent
)
140 airpcap_if_selected
->IsFcsPresent
= FALSE
;
141 airpcap_if_selected
->saved
= FALSE
;
145 airpcap_if_selected
->IsFcsPresent
= TRUE
;
146 airpcap_if_selected
->saved
= FALSE
;
152 * Callback for the wrong crc combo
155 on_edit_type_cb_changed(GtkWidget
*w
, gpointer data
)
157 GtkWidget
*edit_key_w
;
158 GtkWidget
*edit_ssid_te
;
163 gchar
* type_text
= NULL
;
165 edit_key_w
= GTK_WIDGET(data
);
168 edit_ssid_te
= (GtkWidget
*)g_object_get_data(G_OBJECT(edit_key_w
),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY
);
169 key_lb
= (GtkWidget
*)g_object_get_data(G_OBJECT(edit_key_w
),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY
);
170 ssid_lb
= (GtkWidget
*)g_object_get_data(G_OBJECT(edit_key_w
),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY
);
172 type_text
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(type_cb
));
174 if (g_ascii_strcasecmp(type_text
, ""))
177 * If it is a WEP key, no SSID is required! Gray out the entry text so
178 * it doesn't create confusion ...
180 if (g_ascii_strcasecmp(type_text
,AIRPCAP_WEP_KEY_STRING
) == 0)
182 gtk_widget_set_sensitive(edit_ssid_te
,FALSE
);
184 * Maybe the user has already entered some text into the SSID field
185 * and then switched to WEP...
187 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te
),"");
188 gtk_label_set_text(GTK_LABEL(key_lb
),"Key");
189 gtk_label_set_text(GTK_LABEL(ssid_lb
),"");
191 else if (g_ascii_strcasecmp(type_text
,AIRPCAP_WPA_BIN_KEY_STRING
) == 0)
193 gtk_widget_set_sensitive(edit_ssid_te
,FALSE
);
195 * Maybe the user has already entered some text into the SSID field
196 * and then switched to WPA...
198 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te
),"");
199 gtk_label_set_text(GTK_LABEL(key_lb
),"Key");
200 gtk_label_set_text(GTK_LABEL(ssid_lb
),"");
202 else if (g_ascii_strcasecmp(type_text
,AIRPCAP_WPA_PWD_KEY_STRING
) == 0)
204 gtk_widget_set_sensitive(edit_ssid_te
,TRUE
);
206 * Maybe the user has already entered some text into the SSID field
207 * and then switched to WPA...
209 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te
),"");
210 gtk_label_set_text(GTK_LABEL(key_lb
),"Passphrase");
211 gtk_label_set_text(GTK_LABEL(ssid_lb
),"SSID");
214 gtk_widget_show(edit_ssid_te
);
220 * Callback for the wrong crc combo
223 on_add_type_cb_changed(GtkWidget
*w
, gpointer data
)
225 GtkWidget
*add_key_w
;
226 GtkWidget
*add_ssid_te
;
231 gchar
* type_text
= NULL
;
233 add_key_w
= GTK_WIDGET(data
);
236 add_ssid_te
= (GtkWidget
*)g_object_get_data(G_OBJECT(add_key_w
),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY
);
237 key_lb
= (GtkWidget
*)g_object_get_data(G_OBJECT(add_key_w
),AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY
);
238 ssid_lb
= (GtkWidget
*)g_object_get_data(G_OBJECT(add_key_w
),AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY
);
240 type_text
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(type_cb
));
242 if (g_ascii_strcasecmp(type_text
, ""))
245 * If it is a WEP key, no SSID is required! Gray out rhe entry text so
246 * it doesn't create confusion ...
248 if (g_ascii_strcasecmp(type_text
,AIRPCAP_WEP_KEY_STRING
) == 0)
250 gtk_widget_set_sensitive(add_ssid_te
,FALSE
);
252 * Maybe the user has already entered some text into the SSID field
253 * and then switched to WEP...
255 gtk_entry_set_text(GTK_ENTRY(add_ssid_te
),"");
256 gtk_label_set_text(GTK_LABEL(key_lb
),"Key");
257 gtk_label_set_text(GTK_LABEL(ssid_lb
),"");
259 else if (g_ascii_strcasecmp(type_text
,AIRPCAP_WPA_BIN_KEY_STRING
) == 0)
261 gtk_widget_set_sensitive(add_ssid_te
,FALSE
);
263 * Maybe the user has already entered some text into the SSID field
264 * and then switched to WPA...
266 gtk_entry_set_text(GTK_ENTRY(add_ssid_te
),"");
267 gtk_label_set_text(GTK_LABEL(key_lb
),"Key");
268 gtk_label_set_text(GTK_LABEL(ssid_lb
),"");
270 else if (g_ascii_strcasecmp(type_text
,AIRPCAP_WPA_PWD_KEY_STRING
) == 0)
272 gtk_widget_set_sensitive(add_ssid_te
,TRUE
);
274 * Maybe the user has already entered some text into the SSID field
275 * and then switched to WPA...
277 gtk_entry_set_text(GTK_ENTRY(add_ssid_te
),"");
278 gtk_label_set_text(GTK_LABEL(key_lb
),"Passphrase");
279 gtk_label_set_text(GTK_LABEL(ssid_lb
),"SSID");
282 gtk_widget_show(add_ssid_te
);
288 * Callback for the wrong crc combo
291 on_fcs_filter_cb_changed(GtkWidget
*fcs_filter_cb
, gpointer data _U_
)
293 gchar
*fcs_filter_str
;
295 if (fcs_filter_cb
!= NULL
)
297 fcs_filter_str
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(fcs_filter_cb
));
298 if (fcs_filter_str
&& (g_ascii_strcasecmp("", fcs_filter_str
)))
300 airpcap_if_selected
->CrcValidationOn
= airpcap_get_validation_type(fcs_filter_str
);
301 airpcap_if_selected
->saved
= FALSE
;
303 g_free(fcs_filter_str
);
309 * Changed callback for the capture type combobox
312 on_capture_type_cb_changed(GtkWidget
*cb
, gpointer user_data _U_
)
320 s
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(cb
));
322 if ((g_ascii_strcasecmp("",s
)))
324 airpcap_if_selected
->linkType
= airpcap_get_link_type(s
);
325 airpcap_if_selected
->saved
= FALSE
;
331 * Thread function used to blink the led
334 update_blink(gpointer data
)
336 airpcap_if_info_t
* sel
;
338 gchar ebuf
[AIRPCAP_ERRBUF_SIZE
];
340 sel
= (airpcap_if_info_t
*)data
;
342 ad
= airpcap_if_open(sel
->name
, ebuf
);
347 airpcap_if_turn_led_off(ad
, 0);
352 airpcap_if_turn_led_on(ad
, 0);
355 airpcap_if_close(ad
);
361 * Blink button callback
364 on_blink_bt_clicked( GtkWidget
*blink_bt
, gpointer data _U_
)
366 PAirpcapHandle ad
= NULL
;
367 gchar ebuf
[AIRPCAP_ERRBUF_SIZE
];
369 if (airpcap_if_selected
!= NULL
) {
370 if (!(airpcap_if_selected
->blinking
))
372 gtk_button_set_label(GTK_BUTTON(blink_bt
),"Stop Blinking");
373 airpcap_if_selected
->tag
= g_timeout_add(500,update_blink
,airpcap_if_selected
);
374 airpcap_if_selected
->blinking
= TRUE
;
378 gtk_button_set_label(GTK_BUTTON(blink_bt
)," Blink Led ");
379 g_source_remove(airpcap_if_selected
->tag
);
380 airpcap_if_selected
->blinking
= FALSE
;
381 /* Switch on the led! */
382 ad
= airpcap_if_open(airpcap_if_selected
->name
, ebuf
);
385 g_source_remove(airpcap_if_selected
->tag
);
386 airpcap_if_turn_led_on(ad
, 0);
387 airpcap_if_selected
->blinking
= FALSE
;
388 airpcap_if_selected
->led
= TRUE
;
389 airpcap_if_close(ad
);
396 * Callback for the 'Any' adapter What's This button.
399 on_what_s_this_bt_clicked( GtkWidget
*blink_bt _U_
, gpointer data _U_
)
401 simple_dialog(ESD_TYPE_INFO
,ESD_BTN_OK
,
402 "The Multi-Channel Aggregator is a virtual device "
403 "that can be used to capture packets from all the "
404 "AirPcap adapters at the same time.\n"
405 "The Capture Type, FCS and Encryption settings of "
406 "this virtual device can be configured as for any "
407 "real adapter.\nThe channel cannot be changed for "
409 "Refer to the AirPcap manual for more information.");
412 /* the window was closed, cleanup things */
414 on_key_management_destroy(GtkWidget
*w _U_
, gpointer data
)
416 GtkWidget
*airpcap_advanced_w
,
419 gint
*from_widget
= NULL
;
421 /* Retrieve the GUI object pointers */
422 airpcap_advanced_w
= GTK_WIDGET(data
);
424 toolbar
= GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w
),AIRPCAP_TOOLBAR_KEY
));
427 from_widget
= (gint
*)g_object_get_data(G_OBJECT(toolbar
),AIRPCAP_ADVANCED_FROM_KEY
);
428 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
429 if ( *from_widget
== AIRPCAP_ADVANCED_FROM_TOOLBAR
)
430 gtk_widget_set_sensitive(toolbar
,TRUE
);
432 gtk_widget_set_sensitive(toolbar
,FALSE
);
436 /* reload the configuration!!! Configuration has not been saved but
437 the corresponding structure has been modified probably...*/
438 if (airpcap_if_selected
!= NULL
)
440 if (!airpcap_if_selected
->saved
)
442 airpcap_load_selected_if_configuration(airpcap_if_selected
);
448 /* the Advenced wireless Settings window was closed, cleanup things */
450 on_airpcap_advanced_destroy(GtkWidget
*w _U_
, gpointer data
)
452 GtkWidget
*airpcap_advanced_w
,
455 gint
*from_widget
= NULL
;
457 /* Retrieve the GUI object pointers */
458 airpcap_advanced_w
= GTK_WIDGET(data
);
460 toolbar
= GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w
),AIRPCAP_TOOLBAR_KEY
));
463 from_widget
= (gint
*)g_object_get_data(G_OBJECT(toolbar
),AIRPCAP_ADVANCED_FROM_KEY
);
464 /* gray out the toolbar (if we came here from the toolbar advanced button)*/
465 if ( *from_widget
== AIRPCAP_ADVANCED_FROM_TOOLBAR
)
466 gtk_widget_set_sensitive(toolbar
,TRUE
);
468 gtk_widget_set_sensitive(toolbar
,FALSE
);
472 /* reload the configuration!!! Configuration has not been saved but
473 the corresponding structure has been modified probably...*/
474 if (!airpcap_if_selected
->saved
)
476 airpcap_load_selected_if_configuration(airpcap_if_selected
);
481 * Callback for the 'Apply' button.
484 * XXX - Pressing 'Apply' has the same effect as pressing 'OK' -- you
485 * can't revert back to the old set of keys by pressing 'Cancel'. We
486 * either need to fix reversion or get rid of the 'Apply' button.
489 on_key_management_apply_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
491 /* advenced window */
492 GtkWidget
*key_management_w
;
494 /* widgets in the toolbar */
495 GtkWidget
*toolbar_cb
;
496 GtkWidget
*decryption_mode_cb
;
498 GtkListStore
*key_list_store
;
500 module_t
*wlan_module
= prefs_find_module("wlan");
501 gchar
*decryption_mode_string
;
503 /* retrieve main window */
504 key_management_w
= GTK_WIDGET(data
);
505 decryption_mode_cb
= GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_ADVANCED_DECRYPTION_MODE_KEY
));
506 key_list_store
= GTK_LIST_STORE(g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_ADVANCED_KEYLIST_KEY
));
507 toolbar_cb
= GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_TOOLBAR_DECRYPTION_KEY
));
509 #define CANT_SAVE_ERR_STR "Cannot save configuration! Another application " \
510 "might be using AirPcap, or you might not have sufficient privileges."
511 /* Set the Decryption Mode */
513 decryption_mode_string
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(decryption_mode_cb
));
514 if (g_ascii_strcasecmp(decryption_mode_string
, AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK
) == 0)
516 set_wireshark_decryption(TRUE
);
517 if (!set_airpcap_decryption(FALSE
)) g_warning(CANT_SAVE_ERR_STR
);
519 else if (g_ascii_strcasecmp(decryption_mode_string
, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP
) == 0)
521 set_wireshark_decryption(FALSE
);
522 if (!set_airpcap_decryption(TRUE
)) g_warning(CANT_SAVE_ERR_STR
);
524 else if (g_ascii_strcasecmp(decryption_mode_string
, AIRPCAP_DECRYPTION_TYPE_STRING_NONE
) == 0)
526 set_wireshark_decryption(FALSE
);
527 if (!set_airpcap_decryption(FALSE
)) g_warning(CANT_SAVE_ERR_STR
);
529 g_free(decryption_mode_string
);
531 /* Save the configuration */
532 airpcap_read_and_save_decryption_keys_from_list_store(key_list_store
,airpcap_if_selected
,airpcap_if_list
); /* This will save the keys for every adapter */
534 /* The update will make redissect al the packets... no need to do it here again */
535 update_decryption_mode(toolbar_cb
);
537 /* Redissect all the packets, and re-evaluate the display filter. */
538 prefs_apply(wlan_module
);
542 * Callback used to add a WEP key in the add new key box;
545 on_add_key_ok_bt_clicked(GtkWidget
*widget _U_
, gpointer data
)
551 GtkListStore
*key_list_store
;
553 GString
*new_type_string
,
557 gchar
*type_entered
= NULL
;
558 gchar
*key_entered
= NULL
;
559 gchar
*ssid_entered
= NULL
;
563 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY
);
564 type_cb
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY
);
565 key_en
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY
);
566 ssid_en
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY
);
568 type_entered
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(type_cb
));
569 key_entered
= g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en
)));
570 ssid_entered
= g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en
)));
572 /* Check if key is correct */
573 new_type_string
= g_string_new(type_entered
);
574 new_key_string
= g_string_new(key_entered
);
575 new_ssid_string
= g_string_new(ssid_entered
);
577 g_free(type_entered
);
578 g_free(key_entered
);
579 g_free(ssid_entered
);
581 g_strstrip(new_key_string
->str
);
582 g_strstrip(new_ssid_string
->str
);
584 /* Check which type of key the user has entered */
585 if (g_ascii_strcasecmp(new_type_string
->str
,AIRPCAP_WEP_KEY_STRING
) == 0) /* WEP key */
588 if ( ((new_key_string
->len
) > WEP_KEY_MAX_CHAR_SIZE
) || ((new_key_string
->len
) < WEP_KEY_MIN_CHAR_SIZE
))
590 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
);
592 g_string_free(new_type_string
,TRUE
);
593 g_string_free(new_key_string
, TRUE
);
594 g_string_free(new_ssid_string
,TRUE
);
599 if ((new_key_string
->len
% 2) != 0)
601 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Invalid WEP key!\nThe number of characters must be even.");
603 g_string_free(new_type_string
,TRUE
);
604 g_string_free(new_key_string
, TRUE
);
605 g_string_free(new_ssid_string
,TRUE
);
610 for (i
= 0; i
< new_key_string
->len
; i
++)
612 if (!g_ascii_isxdigit(new_key_string
->str
[i
]))
614 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Invalid WEP key!\nA WEP key must be a hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
616 g_string_free(new_type_string
,TRUE
);
617 g_string_free(new_key_string
, TRUE
);
618 g_string_free(new_ssid_string
,TRUE
);
624 /* If so... add key */
625 airpcap_add_key_to_list(key_list_store
, new_type_string
->str
, new_key_string
->str
, new_ssid_string
->str
);
627 if (airpcap_if_selected
!= NULL
) airpcap_if_selected
->saved
= FALSE
;
629 else if (g_ascii_strcasecmp(new_type_string
->str
,AIRPCAP_WPA_PWD_KEY_STRING
) == 0) /* WPA Key */
631 /* XXX - Perform some WPA related input fields check */
632 /* If everything is ok, modify the entry in the list */
634 if ( ((new_key_string
->len
) > WPA_KEY_MAX_CHAR_SIZE
) || ((new_key_string
->len
) < WPA_KEY_MIN_CHAR_SIZE
))
636 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
);
638 g_string_free(new_type_string
,TRUE
);
639 g_string_free(new_key_string
, TRUE
);
640 g_string_free(new_ssid_string
,TRUE
);
646 * XXX - Maybe we need some check on the characters? I'm not sure if only standard ASCII are ok...
648 if ((new_ssid_string
->len
) > WPA_SSID_MAX_CHAR_SIZE
)
650 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
);
652 g_string_free(new_type_string
,TRUE
);
653 g_string_free(new_key_string
, TRUE
);
654 g_string_free(new_ssid_string
,TRUE
);
659 /* If so... add key */
660 airpcap_add_key_to_list(key_list_store
, new_type_string
->str
, new_key_string
->str
, new_ssid_string
->str
);
662 if (airpcap_if_selected
!= NULL
) airpcap_if_selected
->saved
= FALSE
;
664 else if (g_ascii_strcasecmp(new_type_string
->str
,AIRPCAP_WPA_BIN_KEY_STRING
) == 0) /* WPA_BIN Key */
666 /* XXX - Perform some WPA_BIN related input fields check */
667 /* If everything is ok, modify the entry int he list */
669 if ( ((new_key_string
->len
) != WPA_PSK_KEY_CHAR_SIZE
))
671 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
);
673 g_string_free(new_type_string
,TRUE
);
674 g_string_free(new_key_string
, TRUE
);
675 g_string_free(new_ssid_string
,TRUE
);
680 for (i
= 0; i
< new_key_string
->len
; i
++)
682 if (!g_ascii_isxdigit(new_key_string
->str
[i
]))
684 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
686 g_string_free(new_type_string
,TRUE
);
687 g_string_free(new_key_string
, TRUE
);
688 g_string_free(new_ssid_string
,TRUE
);
694 /* If so... add key */
695 airpcap_add_key_to_list(key_list_store
, new_type_string
->str
, new_key_string
->str
, new_ssid_string
->str
);
697 if (airpcap_if_selected
!= NULL
) airpcap_if_selected
->saved
= FALSE
;
699 else /* Should never happen!!! */
701 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Unknown error in the key \"Type\" field.");
704 g_string_free(new_type_string
,TRUE
);
705 g_string_free(new_key_string
, TRUE
);
706 g_string_free(new_ssid_string
,TRUE
);
708 window_destroy(GTK_WIDGET(data
));
713 * Callback used to edit a WEP key in the edit key box;
716 on_edit_key_ok_bt_clicked(GtkWidget
*widget _U_
, gpointer data
)
722 GtkListStore
*key_list_store
;
723 GtkTreeSelection
*selection
;
726 GString
*new_type_string
,
730 gchar
*type_entered
= NULL
;
731 gchar
*key_entered
= NULL
;
732 gchar
*ssid_entered
= NULL
;
736 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY
);
737 selection
= (GtkTreeSelection
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY
);
738 type_cb
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY
);
739 key_en
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY
);
740 ssid_en
= (GtkWidget
*)g_object_get_data(G_OBJECT(data
),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY
);
742 if (!gtk_tree_selection_get_selected(selection
, NULL
, &iter
))
745 type_entered
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(type_cb
));
746 key_entered
= g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en
)));
747 ssid_entered
= g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en
)));
749 g_strstrip(key_entered
);
750 g_strstrip(ssid_entered
);
752 /* Check if key is correct */
753 new_type_string
= g_string_new(type_entered
);
754 new_key_string
= g_string_new(key_entered
);
755 new_ssid_string
= g_string_new(ssid_entered
);
757 g_free(type_entered
);
758 g_free(key_entered
);
759 g_free(ssid_entered
);
761 /* Check which type of key the user has entered */
762 if (g_ascii_strcasecmp(new_type_string
->str
,AIRPCAP_WEP_KEY_STRING
) == 0) /* WEP key */
765 if ( ((new_key_string
->len
) > WEP_KEY_MAX_CHAR_SIZE
) || ((new_key_string
->len
) < WEP_KEY_MIN_CHAR_SIZE
))
767 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
);
769 g_string_free(new_type_string
,TRUE
);
770 g_string_free(new_key_string
, TRUE
);
771 g_string_free(new_ssid_string
,TRUE
);
776 if ((new_key_string
->len
% 2) != 0)
778 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Invalid WEP key!\nThe number of characters must be even.");
780 g_string_free(new_type_string
,TRUE
);
781 g_string_free(new_key_string
, TRUE
);
782 g_string_free(new_ssid_string
,TRUE
);
787 for (i
= 0; i
< new_key_string
->len
; i
++)
789 if (!g_ascii_isxdigit(new_key_string
->str
[i
]))
791 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Invalid WEP key!\nA WEP key must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
793 g_string_free(new_type_string
,TRUE
);
794 g_string_free(new_key_string
, TRUE
);
795 g_string_free(new_ssid_string
,TRUE
);
801 /* If so... Modify key */
802 gtk_list_store_set(key_list_store
, &iter
,
803 KL_COL_TYPE
, new_type_string
->str
,
804 KL_COL_KEY
, new_key_string
->str
,
805 KL_COL_SSID
, new_ssid_string
->str
,
808 if (airpcap_if_selected
!= NULL
) airpcap_if_selected
->saved
= FALSE
;
810 else if (g_ascii_strcasecmp(new_type_string
->str
,AIRPCAP_WPA_PWD_KEY_STRING
) == 0) /* WPA Key */
812 /* XXX - Perform some WPA related input fields check */
813 /* If everything is ok, modify the entry in the list */
815 if ( ((new_key_string
->len
) > WPA_KEY_MAX_CHAR_SIZE
) || ((new_key_string
->len
) < WPA_KEY_MIN_CHAR_SIZE
))
817 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
);
819 g_string_free(new_type_string
,TRUE
);
820 g_string_free(new_key_string
, TRUE
);
821 g_string_free(new_ssid_string
,TRUE
);
827 * XXX - Maybe we need some check on the characters? I'm not sure if only standard ASCII are ok...
829 if ((new_ssid_string
->len
) > WPA_SSID_MAX_CHAR_SIZE
)
831 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
);
833 g_string_free(new_type_string
,TRUE
);
834 g_string_free(new_key_string
, TRUE
);
835 g_string_free(new_ssid_string
,TRUE
);
840 /* If so... Modify key */
841 gtk_list_store_set(key_list_store
, &iter
,
842 KL_COL_TYPE
, new_type_string
->str
,
843 KL_COL_KEY
, new_key_string
->str
,
844 KL_COL_SSID
, new_ssid_string
->str
,
847 if (airpcap_if_selected
!= NULL
) airpcap_if_selected
->saved
= FALSE
;
849 else if (g_ascii_strcasecmp(new_type_string
->str
,AIRPCAP_WPA_BIN_KEY_STRING
) == 0) /* WPA_BIN Key */
851 /* XXX - Perform some WPA_BIN related input fields check */
852 /* If everything is ok, modify the entry in the list */
854 if ( ((new_key_string
->len
) != WPA_PSK_KEY_CHAR_SIZE
))
856 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
);
858 g_string_free(new_type_string
,TRUE
);
859 g_string_free(new_key_string
, TRUE
);
860 g_string_free(new_ssid_string
,TRUE
);
865 for (i
= 0; i
< new_key_string
->len
; i
++)
867 if (!g_ascii_isxdigit(new_key_string
->str
[i
]))
869 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Invalid WPA PSK/PMK key!\nKey must be an hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.");
871 g_string_free(new_type_string
,TRUE
);
872 g_string_free(new_key_string
, TRUE
);
873 g_string_free(new_ssid_string
,TRUE
);
879 /* If so... Modify key */
880 gtk_list_store_set(key_list_store
, &iter
,
881 KL_COL_TYPE
, new_type_string
->str
,
882 KL_COL_KEY
, new_key_string
->str
,
883 KL_COL_SSID
, new_ssid_string
->str
,
886 if (airpcap_if_selected
!= NULL
) airpcap_if_selected
->saved
= FALSE
;
888 else /* Should never happen!!! */
890 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Unknown error in the key \"Type\" field.");
893 g_string_free(new_type_string
,TRUE
);
894 g_string_free(new_key_string
, TRUE
);
895 g_string_free(new_ssid_string
,TRUE
);
897 window_destroy(GTK_WIDGET(data
));
902 * Add key window destroy callback
905 on_add_key_w_destroy(GtkWidget
*button _U_
, gpointer data
)
907 GtkWidget
*airpcap_advanced_w
;
909 airpcap_advanced_w
= GTK_WIDGET(data
);
911 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w
),TRUE
);
917 * Callback for the 'Add Key' button.
920 on_add_new_key_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
922 GtkWidget
*add_key_window
;
923 GtkWidget
*add_frame
;
924 GtkWidget
*main_v_box
;
926 GtkWidget
*add_frame_al
;
927 GtkWidget
*add_type_cb
;
928 GtkWidget
*add_key_te
;
929 GtkWidget
*add_ssid_te
;
930 GtkWidget
*add_type_lb
;
931 GtkWidget
*add_key_lb
;
932 GtkWidget
*add_ssid_lb
;
933 GtkWidget
*low_h_button_box
;
935 GtkWidget
*cancel_bt
;
936 GtkWidget
*add_frame_lb
;
938 GtkWidget
*airpcap_advanced_w
;
940 GtkListStore
*key_list_store
;
942 airpcap_advanced_w
= GTK_WIDGET(data
);
944 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(airpcap_advanced_w
),AIRPCAP_ADVANCED_KEYLIST_KEY
);
946 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(key_list_store
), NULL
) >= MAX_ENCRYPTION_KEYS
)
948 simple_dialog(ESD_TYPE_ERROR
,ESD_BTN_OK
,"Maximum number (%d) of decryption keys reached! You cannot add another key!\n",MAX_ENCRYPTION_KEYS
);
952 /* Gray out the Advanced Wireless Setting window */
953 gtk_widget_set_sensitive(airpcap_advanced_w
,FALSE
);
955 /* Pop-up a new window */
956 add_key_window
= dlg_window_new ("Add Decryption Key");
957 gtk_window_set_modal(GTK_WINDOW(add_key_window
), TRUE
);
958 gtk_window_set_transient_for(GTK_WINDOW(add_key_window
), GTK_WINDOW(airpcap_advanced_w
));
959 gtk_widget_set_name (add_key_window
, "add_key_window");
960 gtk_container_set_border_width (GTK_CONTAINER (add_key_window
), 5);
961 gtk_window_set_resizable (GTK_WINDOW (add_key_window
), FALSE
);
963 main_v_box
= ws_gtk_box_new (GTK_ORIENTATION_VERTICAL
, 0, FALSE
);
964 gtk_widget_set_name (main_v_box
, "main_v_box");
965 gtk_widget_show (main_v_box
);
966 gtk_container_add (GTK_CONTAINER (add_key_window
), main_v_box
);
968 add_frame
= gtk_frame_new (NULL
);
969 gtk_widget_set_name (add_frame
, "add_frame");
970 gtk_widget_show (add_frame
);
971 gtk_box_pack_start (GTK_BOX (main_v_box
), add_frame
, TRUE
, TRUE
, 0);
973 add_frame_al
= gtk_alignment_new (0.5f
, 0.5f
, 1, 1);
974 gtk_widget_set_name (add_frame_al
, "add_frame_al");
975 gtk_widget_show (add_frame_al
);
976 gtk_container_add (GTK_CONTAINER (add_frame
), add_frame_al
);
977 gtk_alignment_set_padding (GTK_ALIGNMENT (add_frame_al
), 0, 0, 12, 0);
979 add_grid
= ws_gtk_grid_new ();
980 gtk_widget_set_name (add_grid
, "add_tb");
981 gtk_container_set_border_width(GTK_CONTAINER(add_grid
),5);
982 gtk_widget_show (add_grid
);
983 gtk_container_add (GTK_CONTAINER (add_frame_al
), add_grid
);
985 add_type_lb
= gtk_label_new ("Type");
986 gtk_widget_set_name (add_type_lb
, "add_type_lb");
987 gtk_widget_show (add_type_lb
);
988 ws_gtk_grid_attach_defaults (GTK_GRID (add_grid
), add_type_lb
, 0, 0, 1, 1);
989 gtk_label_set_justify (GTK_LABEL (add_type_lb
), GTK_JUSTIFY_CENTER
);
991 add_key_lb
= gtk_label_new ("Key");
992 gtk_widget_set_name (add_key_lb
, "add_key_lb");
993 gtk_widget_show (add_key_lb
);
994 ws_gtk_grid_attach_defaults (GTK_GRID (add_grid
), add_key_lb
, 1, 0, 1, 1);
995 gtk_label_set_justify (GTK_LABEL (add_key_lb
), GTK_JUSTIFY_CENTER
);
997 add_ssid_lb
= gtk_label_new ("");
998 gtk_widget_set_name (add_ssid_lb
, "add_ssid_lb");
999 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1000 gtk_widget_show (add_ssid_lb
);
1001 ws_gtk_grid_attach_defaults (GTK_GRID (add_grid
), add_ssid_lb
, 2, 0, 1, 1);
1002 gtk_label_set_justify (GTK_LABEL (add_ssid_lb
), GTK_JUSTIFY_CENTER
);
1004 add_type_cb
= gtk_combo_box_text_new();
1005 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(add_type_cb
), AIRPCAP_WEP_KEY_STRING
);
1007 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(add_type_cb
), AIRPCAP_WPA_PWD_KEY_STRING
);
1008 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(add_type_cb
), AIRPCAP_WPA_BIN_KEY_STRING
);
1009 gtk_combo_box_set_active(GTK_COMBO_BOX(add_type_cb
), 0);
1010 gtk_widget_set_name (add_type_cb
, "add_type_cb");
1011 gtk_widget_show (add_type_cb
);
1012 ws_gtk_grid_attach_defaults (GTK_GRID (add_grid
), add_type_cb
, 0, 1, 1, 1);
1013 gtk_widget_set_size_request (add_type_cb
, 83, -1);
1015 add_key_te
= gtk_entry_new ();
1016 gtk_widget_set_name (add_key_te
, "add_key_te");
1018 gtk_widget_show (add_key_te
);
1019 ws_gtk_grid_attach_defaults (GTK_GRID (add_grid
), add_key_te
, 1, 1, 1, 1);
1020 gtk_widget_set_size_request (add_key_te
, 178, -1);
1022 add_ssid_te
= gtk_entry_new ();
1023 gtk_widget_set_name (add_ssid_te
, "add_ssid_te");
1024 gtk_widget_set_sensitive(add_ssid_te
,FALSE
);
1025 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1026 gtk_widget_show (add_ssid_te
);
1027 ws_gtk_grid_attach_defaults (GTK_GRID (add_grid
), add_ssid_te
, 2, 1, 1, 1);
1028 low_h_button_box
= gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL
);
1029 gtk_widget_set_name (low_h_button_box
, "low_h_button_box");
1030 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box
), 5);
1031 gtk_widget_show (low_h_button_box
);
1032 gtk_box_pack_end (GTK_BOX (main_v_box
), low_h_button_box
, FALSE
, FALSE
, 0);
1033 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box
),
1036 ok_bt
= gtk_button_new_with_mnemonic ("OK");
1037 gtk_widget_set_name (ok_bt
, "ok_bt");
1038 gtk_widget_show (ok_bt
);
1039 gtk_container_add (GTK_CONTAINER (low_h_button_box
), ok_bt
);
1040 gtk_widget_set_can_default (ok_bt
, TRUE
);
1042 cancel_bt
= gtk_button_new_with_mnemonic ("Cancel");
1043 gtk_widget_set_name (cancel_bt
, "cancel_bt");
1044 gtk_widget_show (cancel_bt
);
1045 gtk_container_add (GTK_CONTAINER (low_h_button_box
), cancel_bt
);
1046 gtk_widget_set_can_default (cancel_bt
, TRUE
);
1048 add_frame_lb
= gtk_label_new ("<b>Modify Selected Key</b>");
1049 gtk_widget_set_name (add_frame_lb
, "add_frame_lb");
1050 gtk_widget_show (add_frame_lb
);
1051 gtk_frame_set_label_widget (GTK_FRAME (add_frame
), add_frame_lb
);
1052 gtk_label_set_use_markup (GTK_LABEL (add_frame_lb
), TRUE
);
1055 g_signal_connect(ok_bt
, "clicked", G_CALLBACK(on_add_key_ok_bt_clicked
), add_key_window
);
1056 g_signal_connect(cancel_bt
, "clicked", G_CALLBACK(window_cancel_button_cb
), add_key_window
);
1057 g_signal_connect(add_type_cb
, "changed", G_CALLBACK(on_add_type_cb_changed
), add_key_window
);
1058 g_signal_connect(add_key_window
, "delete_event", G_CALLBACK(window_delete_event_cb
), NULL
);
1059 g_signal_connect(add_key_window
, "destroy", G_CALLBACK(on_add_key_w_destroy
), data
);
1061 /* Add widget data */
1062 g_object_set_data(G_OBJECT(add_key_window
),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY
,key_list_store
);
1063 g_object_set_data(G_OBJECT(add_key_window
),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY
,add_type_cb
);
1064 g_object_set_data(G_OBJECT(add_key_window
),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY
,add_key_te
);
1065 g_object_set_data(G_OBJECT(add_key_window
),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY
,add_ssid_te
);
1066 g_object_set_data(G_OBJECT(add_key_window
),AIRPCAP_ADVANCED_ADD_KEY_KEY_LABEL_KEY
,add_key_lb
);
1067 g_object_set_data(G_OBJECT(add_key_window
),AIRPCAP_ADVANCED_ADD_KEY_SSID_LABEL_KEY
,add_ssid_lb
);
1069 gtk_widget_show(add_key_window
);
1073 * Edit key window destroy callback
1076 on_edit_key_w_destroy(GtkWidget
*button _U_
, gpointer data
)
1078 GtkWidget
*airpcap_advanced_w
;
1080 airpcap_advanced_w
= GTK_WIDGET(data
);
1082 gtk_widget_set_sensitive(GTK_WIDGET(airpcap_advanced_w
),TRUE
);
1088 * Callback for the 'Remove Key' button.
1091 on_remove_key_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
1093 GtkTreeModel
*model
;
1095 GtkTreeSelection
*selection
;
1097 /* retrieve needed stuff */
1098 selection
= (GtkTreeSelection
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY
);
1100 if (!gtk_tree_selection_get_selected(selection
, &model
, &iter
))
1103 /* Remove selected key */
1104 gtk_list_store_remove(GTK_LIST_STORE(model
), &iter
);
1105 gtk_tree_selection_select_iter(selection
, &iter
);
1106 /* XXX - select the last item if needed? */
1108 /* Need to save config... */
1109 if (airpcap_if_selected
!= NULL
) airpcap_if_selected
->saved
= FALSE
;
1113 * Callback for the 'Edit Key' button.
1116 on_edit_key_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
1118 GtkWidget
*edit_key_window
;
1119 GtkWidget
*edit_frame
;
1120 GtkWidget
*main_v_box
;
1121 GtkWidget
*edit_grid
;
1122 GtkWidget
*edit_frame_al
;
1123 GtkWidget
*edit_type_cb
;
1124 GtkWidget
*edit_key_te
;
1125 GtkWidget
*edit_ssid_te
;
1126 GtkWidget
*edit_type_lb
;
1127 GtkWidget
*edit_key_lb
;
1128 GtkWidget
*edit_ssid_lb
;
1129 GtkWidget
*low_h_button_box
;
1131 GtkWidget
*cancel_bt
;
1132 GtkWidget
*edit_frame_lb
;
1134 GtkWidget
*airpcap_advanced_w
;
1136 GtkTreeModel
*model
;
1138 GtkTreeSelection
*selection
;
1140 /* Key List Store */
1141 GtkListStore
*key_list_store
;
1147 airpcap_advanced_w
= GTK_WIDGET(data
);
1149 /* Retrieve the selected item... if no row is selected, this is null... */
1150 selection
= (GtkTreeSelection
*)g_object_get_data(G_OBJECT(data
), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY
);
1151 key_list_store
= (GtkListStore
*)g_object_get_data (G_OBJECT(data
), AIRPCAP_ADVANCED_KEYLIST_KEY
);
1154 if (!gtk_tree_selection_get_selected(selection
, &model
, &iter
))
1157 gtk_tree_model_get(model
, &iter
,
1158 KL_COL_TYPE
, &row_type
,
1159 KL_COL_KEY
, &row_key
,
1160 KL_COL_SSID
, &row_ssid
,
1163 /* Gray out the Advanced Wireless Setting window */
1164 gtk_widget_set_sensitive(airpcap_advanced_w
,FALSE
);
1166 /* Pop-up a new window */
1167 edit_key_window
= dlg_window_new("Edit Decryption Key");
1168 gtk_window_set_modal(GTK_WINDOW(edit_key_window
), TRUE
);
1169 gtk_window_set_transient_for(GTK_WINDOW(edit_key_window
), GTK_WINDOW(airpcap_advanced_w
));
1170 gtk_widget_set_name (edit_key_window
, "edit_key_window");
1171 gtk_container_set_border_width (GTK_CONTAINER (edit_key_window
), 5);
1172 gtk_window_set_resizable (GTK_WINDOW (edit_key_window
), FALSE
);
1174 main_v_box
= ws_gtk_box_new(GTK_ORIENTATION_VERTICAL
, 0, FALSE
);
1175 gtk_widget_set_name (main_v_box
, "main_v_box");
1176 gtk_widget_show (main_v_box
);
1177 gtk_container_add (GTK_CONTAINER (edit_key_window
), main_v_box
);
1179 edit_frame
= gtk_frame_new (NULL
);
1180 gtk_widget_set_name (edit_frame
, "edit_frame");
1181 gtk_widget_show (edit_frame
);
1182 gtk_box_pack_start (GTK_BOX (main_v_box
), edit_frame
, TRUE
, TRUE
, 0);
1184 edit_frame_al
= gtk_alignment_new (0.5f
, 0.5f
, 1, 1);
1185 gtk_widget_set_name (edit_frame_al
, "edit_frame_al");
1186 gtk_widget_show (edit_frame_al
);
1187 gtk_container_add (GTK_CONTAINER (edit_frame
), edit_frame_al
);
1188 gtk_alignment_set_padding (GTK_ALIGNMENT (edit_frame_al
), 0, 0, 12, 0);
1190 edit_grid
= ws_gtk_grid_new();
1192 gtk_widget_set_name (edit_grid
, "edit_tb");
1193 gtk_container_set_border_width(GTK_CONTAINER(edit_grid
),5);
1194 gtk_widget_show (edit_grid
);
1195 gtk_container_add (GTK_CONTAINER (edit_frame_al
), edit_grid
);
1197 edit_type_lb
= gtk_label_new ("Type");
1198 gtk_widget_set_name (edit_type_lb
, "edit_type_lb");
1199 gtk_widget_show (edit_type_lb
);
1200 ws_gtk_grid_attach_defaults (GTK_GRID (edit_grid
), edit_type_lb
, 0, 0, 1, 1);
1201 gtk_label_set_justify (GTK_LABEL (edit_type_lb
), GTK_JUSTIFY_CENTER
);
1203 edit_key_lb
= gtk_label_new ("Key");
1204 gtk_widget_set_name (edit_key_lb
, "edit_key_lb");
1205 gtk_widget_show (edit_key_lb
);
1206 ws_gtk_grid_attach_defaults (GTK_GRID (edit_grid
), edit_key_lb
, 1, 0, 1, 1);
1207 gtk_label_set_justify (GTK_LABEL (edit_key_lb
), GTK_JUSTIFY_CENTER
);
1209 edit_ssid_lb
= gtk_label_new ("");
1210 gtk_widget_set_name (edit_ssid_lb
, "edit_ssid_lb");
1211 /* XXX - Decomment only when WPA and WPA_BIN will be ready */
1212 gtk_widget_show (edit_ssid_lb
);
1213 ws_gtk_grid_attach_defaults (GTK_GRID (edit_grid
), edit_ssid_lb
, 2, 0, 1, 1);
1214 gtk_label_set_justify (GTK_LABEL (edit_ssid_lb
), GTK_JUSTIFY_CENTER
);
1216 edit_type_cb
= gtk_combo_box_text_new();
1217 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(edit_type_cb
), AIRPCAP_WEP_KEY_STRING
);
1219 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(edit_type_cb
), AIRPCAP_WPA_PWD_KEY_STRING
);
1220 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(edit_type_cb
), AIRPCAP_WPA_BIN_KEY_STRING
);
1221 /* Set current type */
1222 gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb
), 0);
1223 if (g_ascii_strcasecmp(row_type
, AIRPCAP_WPA_PWD_KEY_STRING
) == 0) {
1224 gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb
), 1);
1225 } else if (g_ascii_strcasecmp(row_type
, AIRPCAP_WPA_BIN_KEY_STRING
) == 0) {
1226 gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb
), 2);
1228 gtk_widget_set_name (edit_type_cb
, "edit_type_cb");
1229 gtk_widget_show (edit_type_cb
);
1230 ws_gtk_grid_attach_defaults (GTK_GRID (edit_grid
), edit_type_cb
, 0, 1, 1, 1);
1231 gtk_widget_set_size_request (edit_type_cb
, 83, -1);
1233 edit_key_te
= gtk_entry_new ();
1234 gtk_widget_set_name (edit_key_te
, "edit_key_te");
1235 /* Set current key */
1236 gtk_entry_set_text(GTK_ENTRY(edit_key_te
),row_key
);
1237 gtk_widget_show (edit_key_te
);
1238 ws_gtk_grid_attach_defaults (GTK_GRID (edit_grid
), edit_key_te
, 1, 1, 1, 1);
1239 gtk_widget_set_size_request (edit_key_te
, 178, -1);
1241 edit_ssid_te
= gtk_entry_new ();
1242 gtk_widget_set_name (edit_ssid_te
, "edit_ssid_te");
1244 /* Set current ssid (if key type is not WEP!)*/
1245 if (g_ascii_strcasecmp(row_type
,AIRPCAP_WEP_KEY_STRING
) == 0)
1247 gtk_widget_set_sensitive(edit_ssid_te
,FALSE
);
1251 gtk_widget_set_sensitive(edit_ssid_te
,TRUE
);
1252 gtk_entry_set_text(GTK_ENTRY(edit_ssid_te
),row_ssid
?row_ssid
:"");
1255 /* XXX - Decomment only when WPA and WPA@ will be ready */
1256 gtk_widget_show (edit_ssid_te
);
1257 ws_gtk_grid_attach_defaults (GTK_GRID (edit_grid
), edit_ssid_te
, 2, 1, 1, 1);
1259 low_h_button_box
= gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL
);
1260 gtk_widget_set_name (low_h_button_box
, "low_h_button_box");
1261 gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box
), 5);
1262 gtk_widget_show (low_h_button_box
);
1263 gtk_box_pack_end (GTK_BOX (main_v_box
), low_h_button_box
, FALSE
, FALSE
, 0);
1264 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box
),
1267 ok_bt
= gtk_button_new_with_mnemonic ("OK");
1268 gtk_widget_set_name (ok_bt
, "ok_bt");
1269 gtk_widget_show (ok_bt
);
1270 gtk_container_add (GTK_CONTAINER (low_h_button_box
), ok_bt
);
1271 gtk_widget_set_can_default (ok_bt
, TRUE
);
1273 cancel_bt
= gtk_button_new_with_mnemonic ("Cancel");
1274 gtk_widget_set_name (cancel_bt
, "cancel_bt");
1275 gtk_widget_show (cancel_bt
);
1276 gtk_container_add (GTK_CONTAINER (low_h_button_box
), cancel_bt
);
1277 gtk_widget_set_can_default (cancel_bt
, TRUE
);
1279 edit_frame_lb
= gtk_label_new ("<b>Modify Selected Key</b>");
1280 gtk_widget_set_name (edit_frame_lb
, "edit_frame_lb");
1281 gtk_widget_show (edit_frame_lb
);
1282 gtk_frame_set_label_widget (GTK_FRAME (edit_frame
), edit_frame_lb
);
1283 gtk_label_set_use_markup (GTK_LABEL (edit_frame_lb
), TRUE
);
1286 g_signal_connect(ok_bt
, "clicked", G_CALLBACK(on_edit_key_ok_bt_clicked
), edit_key_window
);
1287 g_signal_connect(cancel_bt
, "clicked", G_CALLBACK(window_cancel_button_cb
), edit_key_window
);
1288 g_signal_connect(edit_type_cb
, "changed", G_CALLBACK(on_edit_type_cb_changed
), edit_key_window
);
1289 g_signal_connect(edit_key_window
, "delete_event", G_CALLBACK(window_delete_event_cb
), NULL
);
1290 g_signal_connect(edit_key_window
, "destroy", G_CALLBACK(on_edit_key_w_destroy
), data
);
1292 /* Add widget data */
1293 g_object_set_data(G_OBJECT(edit_key_window
),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY
,key_list_store
);
1294 g_object_set_data(G_OBJECT(edit_key_window
),AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY
,selection
);
1295 g_object_set_data(G_OBJECT(edit_key_window
),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY
,edit_type_cb
);
1296 g_object_set_data(G_OBJECT(edit_key_window
),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY
,edit_key_te
);
1297 g_object_set_data(G_OBJECT(edit_key_window
),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY
,edit_ssid_te
);
1298 g_object_set_data(G_OBJECT(edit_key_window
),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY
,edit_key_lb
);
1299 g_object_set_data(G_OBJECT(edit_key_window
),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY
,edit_ssid_lb
);
1305 gtk_widget_show(edit_key_window
);
1309 * Callback for the 'Move Key Up' button.
1312 on_move_key_up_bt_clicked(GtkWidget
*button _U_
, gpointer key_list
)
1314 tree_view_list_store_move_selection(GTK_TREE_VIEW(key_list
), TRUE
);
1318 * Callback for the 'Move Key Down' button.
1321 on_move_key_down_bt_clicked(GtkWidget
*button _U_
, gpointer list_view
)
1323 tree_view_list_store_move_selection(GTK_TREE_VIEW(list_view
), FALSE
);
1326 /* Turns the decryption on or off */
1328 on_decryption_mode_cb_changed(GtkWidget
*cb
, gpointer data _U_
)
1336 cur_active
= gtk_combo_box_get_active(GTK_COMBO_BOX(cb
));
1338 if (cur_active
< 0) {
1342 switch(cur_active
) {
1343 /* XXX - Don't use magic numbers here */
1344 case 1: /* Wireshark */
1345 set_wireshark_decryption(TRUE
);
1346 if (!set_airpcap_decryption(FALSE
)) g_warning(CANT_SAVE_ERR_STR
);
1348 case 2: /* Driver */
1349 set_wireshark_decryption(FALSE
);
1350 if (!set_airpcap_decryption(TRUE
)) g_warning(CANT_SAVE_ERR_STR
);
1353 set_wireshark_decryption(FALSE
);
1354 if (!set_airpcap_decryption(FALSE
)) g_warning(CANT_SAVE_ERR_STR
);
1358 /* Redissect all the packets, and re-evaluate the display filter. */
1359 redissect_packets();
1360 redissect_all_packet_windows();
1364 * Selects the current decryption mode string in the decryption mode combo box
1367 update_decryption_mode(GtkWidget
*cb
)
1373 /* Wireshark decryption is on */
1374 if (wireshark_decryption_on())
1376 gtk_combo_box_set_active(GTK_COMBO_BOX(cb
), 1);
1378 /* AirPcap decryption is on */
1379 else if (airpcap_decryption_on())
1381 gtk_combo_box_set_active(GTK_COMBO_BOX(cb
), 2);
1383 /* No decryption enabled */
1386 gtk_combo_box_set_active(GTK_COMBO_BOX(cb
), 0);
1393 * Creates the list of available decryption modes, depending on the adapters found
1396 update_decryption_mode_list(GtkWidget
*cb
)
1398 gchar
*current_text
;
1403 current_text
= NULL
;
1406 * XXX - Retrieve the current 'decryption mode'. It would be better just block the
1407 * signal handler, but it doesn't work... one of these days I'll try to figure out why...
1409 current_text
= gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(cb
));
1411 while (gtk_tree_model_iter_n_children(gtk_combo_box_get_model(GTK_COMBO_BOX(cb
)), NULL
) > 0) {
1412 gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(cb
), 0);
1415 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(cb
), AIRPCAP_DECRYPTION_TYPE_STRING_NONE
);
1416 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(cb
), AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK
);
1418 if (airpcap_if_list
!= NULL
&& g_list_length(airpcap_if_list
) > 0)
1420 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(cb
), AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP
);
1424 /* The last decryption mode was 'Driver', but no more AirPcap adapter are found */
1425 if (current_text
== NULL
|| g_ascii_strcasecmp(current_text
, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP
) == 0)
1427 g_free(current_text
);
1428 current_text
= g_strdup(AIRPCAP_DECRYPTION_TYPE_STRING_NONE
);
1432 if (g_ascii_strcasecmp(current_text
, AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK
) == 0) {
1433 gtk_combo_box_set_active(GTK_COMBO_BOX(cb
), 1);
1434 } else if (g_ascii_strcasecmp(current_text
, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP
) == 0) {
1435 gtk_combo_box_set_active(GTK_COMBO_BOX(cb
), 2);
1436 } else { /* None / Invalid */
1437 gtk_combo_box_set_active(GTK_COMBO_BOX(cb
), 0);
1440 g_free(current_text
);
1445 * Callback for the Wireless Advanced Settings 'Apply' button.
1448 on_advanced_apply_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
1450 /* advenced window */
1451 GtkWidget
*airpcap_advanced_w
;
1452 GtkWidget
*channel_cb
, *channel_offset_cb
;
1454 /* widgets in the toolbar */
1457 *toolbar_channel_cb
,
1458 *toolbar_channel_offset_cb
,
1459 *toolbar_fcs_filter_cb
;
1461 /* retrieve main window */
1462 airpcap_advanced_w
= GTK_WIDGET(data
);
1464 /* Set the channel and offset */
1465 channel_cb
= GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w
),AIRPCAP_ADVANCED_CHANNEL_KEY
));
1466 channel_offset_cb
= GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w
),AIRPCAP_ADVANCED_CHANNEL_OFFSET_KEY
));
1467 airpcap_channel_offset_changed_cb(channel_offset_cb
, NULL
);
1468 airpcap_channel_changed_set_cb(channel_cb
, channel_offset_cb
);
1471 toolbar
= GTK_WIDGET(g_object_get_data(G_OBJECT(airpcap_advanced_w
),AIRPCAP_TOOLBAR_KEY
));
1473 /* retrieve toolbar info */
1474 toolbar_if_lb
= GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar
),AIRPCAP_TOOLBAR_INTERFACE_KEY
));
1475 toolbar_channel_cb
= GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar
),AIRPCAP_TOOLBAR_CHANNEL_KEY
));
1476 toolbar_channel_offset_cb
= GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar
),AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY
));
1477 toolbar_fcs_filter_cb
= GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar
),AIRPCAP_TOOLBAR_FCS_FILTER_KEY
));
1479 /* Save the configuration (for all ) */
1480 airpcap_save_selected_if_configuration(airpcap_if_selected
);
1482 /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/
1483 if ( g_ascii_strcasecmp(airpcap_if_selected
->description
,airpcap_if_active
->description
) == 0)
1485 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
)));
1486 airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cb
),airpcap_if_selected
);
1487 airpcap_update_channel_offset_combo(airpcap_if_selected
, airpcap_if_selected
->channelInfo
.Frequency
, toolbar_channel_offset_cb
, TRUE
);
1488 airpcap_validation_type_combo_set_by_type(toolbar_fcs_filter_cb
,airpcap_if_selected
->CrcValidationOn
);
1493 * Callback for the OK button 'clicked' in the Advanced Wireless Settings window.
1496 on_advanced_ok_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
1498 PAirpcapHandle ad
= NULL
;
1499 gchar ebuf
[AIRPCAP_ERRBUF_SIZE
];
1501 /* Retrieve object data */
1502 GtkWidget
*airpcap_advanced_w
= GTK_WIDGET(data
);
1504 if (airpcap_if_selected
== NULL
) { /* There's not much we can do. */
1505 gtk_widget_destroy(airpcap_advanced_w
);
1509 on_advanced_apply_bt_clicked(button
, data
);
1511 /* Stop blinking our LED */
1512 ad
= airpcap_if_open(airpcap_if_selected
->name
, ebuf
);
1515 g_source_remove(airpcap_if_selected
->tag
);
1516 airpcap_if_turn_led_on(ad
, 0);
1517 airpcap_if_selected
->blinking
= FALSE
;
1518 airpcap_if_selected
->led
= TRUE
;
1519 airpcap_if_close(ad
);
1522 /* Remove GLIB timeout */
1523 g_source_remove(airpcap_if_selected
->tag
);
1525 gtk_widget_destroy(airpcap_advanced_w
);
1529 * Callback for the CANCEL button 'clicked' in the Advanced Wireless Settings window.
1532 on_advanced_cancel_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
1534 PAirpcapHandle ad
= NULL
;
1535 gchar ebuf
[AIRPCAP_ERRBUF_SIZE
];
1537 /* Retrieve object data */
1538 GtkWidget
*airpcap_advanced_w
;
1540 /* Retrieve the GUI object pointers */
1541 airpcap_advanced_w
= GTK_WIDGET(data
);
1543 /* Stop blinking ALL leds (go through the airpcap_if_list) */
1544 if (airpcap_if_selected
!= NULL
)
1546 ad
= airpcap_if_open(airpcap_if_selected
->name
, ebuf
);
1549 g_source_remove(airpcap_if_selected
->tag
);
1550 airpcap_if_turn_led_on(ad
, 0);
1551 airpcap_if_selected
->blinking
= FALSE
;
1552 airpcap_if_selected
->led
= TRUE
;
1553 airpcap_if_close(ad
);
1556 /* reload the configuration!!! Configuration has not been saved but
1557 the corresponding structure has been modified probably...*/
1558 if (!airpcap_if_selected
->saved
)
1560 airpcap_load_selected_if_configuration(airpcap_if_selected
);
1564 gtk_widget_destroy(airpcap_advanced_w
);
1568 /* Called to create the airpcap settings' window */
1570 display_airpcap_advanced_cb(GtkWidget
*w _U_
, gpointer data
)
1572 GtkWidget
*airpcap_advanced_w
;
1573 GtkWidget
*main_box
;
1574 GtkWidget
*settings_sub_box
;
1575 GtkWidget
*interface_fr
;
1576 GtkWidget
*interface_al
;
1577 GtkWidget
*interface_sub_h_box
;
1578 GtkWidget
*interface_name_lb
;
1579 GtkWidget
*blink_bt
;
1580 GtkWidget
*interface_frame_lb
;
1581 GtkWidget
*basic_parameters_fr
;
1582 GtkWidget
*basic_parameters_al
;
1583 GtkWidget
*basic_parameters_grid
;
1584 GtkWidget
*channel_lb
;
1585 GtkWidget
*channel_offset_lb
;
1586 GtkWidget
*capture_type_lb
;
1587 GtkWidget
*channel_cb
;
1588 GtkWidget
*channel_offset_cb
;
1589 GtkWidget
*capture_type_cb
;
1591 GtkWidget
*basic_parameters_fcs_h_box
;
1592 GtkWidget
*basic_parameters_fcs_filter_lb
;
1593 GtkWidget
*fcs_filter_cb
;
1594 GtkWidget
*basic_parameters_frame_lb
;
1595 GtkWidget
*low_buttons_h_box
;
1596 GtkWidget
*left_h_button_box
;
1597 GtkWidget
*right_h_button_box
;
1599 GtkWidget
*apply_bt
;
1600 GtkWidget
*cancel_bt
;
1602 /* widgets in the toolbar */
1605 /* user data - RETRIEVE pointers of toolbar widgets */
1606 toolbar
= GTK_WIDGET(data
);
1608 /* gray out the toolbar */
1609 gtk_widget_set_sensitive(toolbar
,FALSE
);
1614 /* the selected is the active, for now */
1615 airpcap_if_selected
= airpcap_if_active
;
1617 /* Create the new window */
1618 airpcap_advanced_w
= dlg_window_new("Advanced Wireless Settings"); /* transient_for top_level */
1619 gtk_window_set_modal(GTK_WINDOW(airpcap_advanced_w
), TRUE
);
1620 gtk_window_set_transient_for(GTK_WINDOW(airpcap_advanced_w
), GTK_WINDOW(gtk_widget_get_toplevel(w
)));
1621 gtk_window_set_destroy_with_parent (GTK_WINDOW(airpcap_advanced_w
), TRUE
);
1623 gtk_container_set_border_width (GTK_CONTAINER (airpcap_advanced_w
), 5);
1624 gtk_window_set_position (GTK_WINDOW (airpcap_advanced_w
),
1625 GTK_WIN_POS_CENTER
);
1627 gtk_window_set_resizable (GTK_WINDOW (airpcap_advanced_w
), FALSE
);
1628 gtk_window_set_type_hint (GTK_WINDOW (airpcap_advanced_w
), GDK_WINDOW_TYPE_HINT_DIALOG
);
1630 main_box
= ws_gtk_box_new(GTK_ORIENTATION_VERTICAL
, 0, FALSE
);
1631 gtk_widget_set_name (main_box
, "main_box");
1632 gtk_widget_show (main_box
);
1633 gtk_container_add (GTK_CONTAINER (airpcap_advanced_w
), main_box
);
1635 settings_sub_box
= ws_gtk_box_new(GTK_ORIENTATION_VERTICAL
, 0, FALSE
);
1636 gtk_widget_set_name (settings_sub_box
, "settings_sub_box");
1637 gtk_widget_show (settings_sub_box
);
1638 gtk_box_pack_start (GTK_BOX (main_box
), settings_sub_box
, FALSE
, TRUE
, 0);
1640 interface_fr
= gtk_frame_new (NULL
);
1641 gtk_widget_set_name (interface_fr
, "interface_fr");
1642 gtk_widget_show (interface_fr
);
1643 gtk_box_pack_start (GTK_BOX (settings_sub_box
), interface_fr
, FALSE
, FALSE
,
1645 gtk_container_set_border_width (GTK_CONTAINER (interface_fr
), 10);
1647 interface_al
= gtk_alignment_new (0.5f
, 0.5f
, 1, 1);
1648 gtk_widget_set_name (interface_al
, "interface_al");
1649 gtk_widget_show (interface_al
);
1650 gtk_container_add (GTK_CONTAINER (interface_fr
), interface_al
);
1651 gtk_alignment_set_padding (GTK_ALIGNMENT (interface_al
), 5, 5, 0, 0);
1653 interface_sub_h_box
= ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, 0, FALSE
);
1654 gtk_widget_set_name (interface_sub_h_box
, "interface_sub_h_box");
1655 gtk_widget_show (interface_sub_h_box
);
1656 gtk_container_add (GTK_CONTAINER (interface_al
), interface_sub_h_box
);
1657 gtk_container_set_border_width (GTK_CONTAINER (interface_sub_h_box
), 5);
1659 /* Fill the interface_box */
1660 if (airpcap_if_active
!= NULL
)
1662 interface_name_lb
= gtk_label_new(airpcap_if_active
->description
);
1666 interface_name_lb
= gtk_label_new("Couldn't find an airpcap interface.");
1667 gtk_widget_set_sensitive(main_box
,FALSE
);
1670 gtk_widget_set_name (interface_name_lb
, "interface_name_lb");
1671 gtk_widget_show (interface_name_lb
);
1672 gtk_box_pack_start (GTK_BOX (interface_sub_h_box
), interface_name_lb
, TRUE
,
1675 /* If it is NOT the 'Any' Interface */
1676 if (!airpcap_if_is_any(airpcap_if_selected
))
1678 blink_bt
= gtk_button_new_with_mnemonic ("Blink Led");
1680 else /* It is the any interface, so it doesn't make sense to have 'Blink' button... */
1682 blink_bt
= gtk_button_new_with_mnemonic ("What's This?");
1684 gtk_widget_set_name (blink_bt
, "blink_bt");
1685 gtk_widget_show (blink_bt
);
1686 gtk_box_pack_end (GTK_BOX (interface_sub_h_box
), blink_bt
, FALSE
, FALSE
, 0);
1688 interface_frame_lb
= gtk_label_new ("<b>Interface</b>");
1689 gtk_widget_set_name (interface_frame_lb
, "interface_frame_lb");
1690 gtk_widget_show (interface_frame_lb
);
1691 gtk_frame_set_label_widget (GTK_FRAME (interface_fr
), interface_frame_lb
);
1692 gtk_label_set_use_markup (GTK_LABEL (interface_frame_lb
), TRUE
);
1694 basic_parameters_fr
= gtk_frame_new (NULL
);
1695 gtk_widget_set_name (basic_parameters_fr
, "basic_parameters_fr");
1696 gtk_widget_show (basic_parameters_fr
);
1697 gtk_box_pack_start (GTK_BOX (settings_sub_box
), basic_parameters_fr
, TRUE
,FALSE
, 0);
1698 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_fr
), 10);
1700 basic_parameters_al
= gtk_alignment_new (0.5f
, 0.5f
, 1, 1);
1701 gtk_widget_set_name (basic_parameters_al
, "basic_parameters_al");
1702 gtk_widget_show (basic_parameters_al
);
1703 gtk_container_add (GTK_CONTAINER (basic_parameters_fr
),basic_parameters_al
);
1704 gtk_alignment_set_padding (GTK_ALIGNMENT (basic_parameters_al
), 10, 10, 0, 0);
1706 basic_parameters_grid
= ws_gtk_grid_new ();
1707 gtk_widget_set_name (basic_parameters_grid
, "basic_parameters_grid");
1708 gtk_widget_show (basic_parameters_grid
);
1709 gtk_container_add (GTK_CONTAINER (basic_parameters_al
),
1710 basic_parameters_grid
);
1711 gtk_container_set_border_width (GTK_CONTAINER (basic_parameters_grid
), 5);
1712 ws_gtk_grid_set_column_spacing(GTK_GRID(basic_parameters_grid
), 20);
1714 channel_lb
= gtk_label_new ("Channel:");
1715 gtk_widget_set_name (channel_lb
, "channel_lb");
1716 gtk_widget_show (channel_lb
);
1717 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
), channel_lb
, 0, 0, 1, 1,
1718 (GtkAttachOptions
) (GTK_FILL
),
1719 (GtkAttachOptions
) (0), 0, 0);
1720 gtk_misc_set_alignment (GTK_MISC (channel_lb
), 0, 0.5f
);
1722 capture_type_lb
= gtk_label_new ("Capture Type:");
1723 gtk_widget_set_name (capture_type_lb
, "capture_type_lb");
1724 gtk_widget_show (capture_type_lb
);
1725 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
), capture_type_lb
, 0, 2, 1,
1726 1, (GtkAttachOptions
) (GTK_FILL
), (GtkAttachOptions
) (0),
1728 gtk_misc_set_alignment (GTK_MISC (capture_type_lb
), 0, 0.5f
);
1730 /* Start: Channel offset label */
1731 channel_offset_lb
= gtk_label_new ("Channel Offset:");
1732 gtk_widget_set_name (channel_offset_lb
, "channel_offset_lb");
1733 gtk_widget_show (channel_offset_lb
);
1734 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
), channel_offset_lb
, 0, 1, 1, 1,
1735 (GtkAttachOptions
) (GTK_FILL
),
1736 (GtkAttachOptions
) (0), 0, 0);
1737 gtk_misc_set_alignment (GTK_MISC (channel_offset_lb
), 0, 0.5f
);
1738 /* End: Channel offset label */
1740 /* Start: Channel offset combo box */
1741 channel_offset_cb
= gtk_combo_box_text_new();
1742 gtk_widget_set_name (channel_offset_cb
, "channel_offset_cb");
1744 airpcap_update_channel_offset_combo(airpcap_if_selected
, airpcap_if_selected
->channelInfo
.Frequency
, channel_offset_cb
, FALSE
);
1746 gtk_widget_show(channel_offset_cb
);
1748 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
), channel_offset_cb
, 1, 1, 1, 1,
1749 (GtkAttachOptions
) (GTK_FILL
),
1750 (GtkAttachOptions
) (0), 0, 0);
1751 /* End: Channel offset combo box */
1753 channel_cb
= gtk_combo_box_text_new();
1754 gtk_widget_set_name (channel_cb
, "channel_cb");
1755 gtk_widget_show (channel_cb
);
1756 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
), channel_cb
, 1, 0, 1, 1,
1757 (GtkAttachOptions
) (GTK_EXPAND
| GTK_FILL
),
1758 (GtkAttachOptions
) (0), 0, 0);
1760 /* Select the current channel */
1761 airpcap_update_channel_combo(GTK_WIDGET(channel_cb
), airpcap_if_selected
);
1763 capture_type_cb
= gtk_combo_box_text_new();
1764 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(capture_type_cb
), AIRPCAP_LINK_TYPE_NAME_802_11_ONLY
);
1765 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(capture_type_cb
), AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO
);
1766 if (airpcap_get_dll_state() == AIRPCAP_DLL_OK
) {
1767 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(capture_type_cb
), AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI
);
1770 gtk_widget_set_name (capture_type_cb
, "capture_type_cb");
1771 gtk_widget_show (capture_type_cb
);
1772 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
), capture_type_cb
, 1, 2, 1,
1773 1, (GtkAttachOptions
) (GTK_EXPAND
| GTK_FILL
),
1774 (GtkAttachOptions
) (0), 0, 0);
1776 /* Current interface value */
1777 if (airpcap_if_selected
!= NULL
)
1779 if (airpcap_if_selected
->linkType
== AIRPCAP_LT_802_11_PLUS_RADIO
){
1780 gtk_combo_box_set_active(GTK_COMBO_BOX(capture_type_cb
), AIRPCAP_LINK_TYPE_NUM_802_11_PLUS_RADIO
);
1781 }else if (airpcap_if_selected
->linkType
== AIRPCAP_LT_802_11_PLUS_PPI
){
1782 gtk_combo_box_set_active(GTK_COMBO_BOX(capture_type_cb
), AIRPCAP_LINK_TYPE_NUM_802_11_PLUS_PPI
);
1784 gtk_combo_box_set_active(GTK_COMBO_BOX(capture_type_cb
), AIRPCAP_LINK_TYPE_NUM_802_11_ONLY
);
1788 fcs_ck
= gtk_check_button_new_with_label ("Include 802.11 FCS in Frames");
1790 gtk_widget_set_name (fcs_ck
, "fcs_ck");
1792 /* Fcs Presence check box */
1793 if (airpcap_if_selected
!= NULL
)
1795 if (airpcap_if_selected
->IsFcsPresent
)
1796 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck
),TRUE
);
1798 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fcs_ck
),FALSE
);
1801 gtk_widget_show (fcs_ck
);
1802 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
), fcs_ck
, 3, 0, 2, 1,
1803 (GtkAttachOptions
) (GTK_FILL
),
1804 (GtkAttachOptions
) (0), 0, 0);
1806 basic_parameters_fcs_h_box
= ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, 1, FALSE
);
1807 gtk_widget_set_name (basic_parameters_fcs_h_box
,
1808 "basic_parameters_fcs_h_box");
1809 gtk_widget_show (basic_parameters_fcs_h_box
);
1810 ws_gtk_grid_attach_extended (GTK_GRID (basic_parameters_grid
),
1811 basic_parameters_fcs_h_box
, 3, 2, 2, 1,
1812 (GtkAttachOptions
) (GTK_FILL
),
1813 (GtkAttachOptions
) (GTK_FILL
), 3, 0);
1815 basic_parameters_fcs_filter_lb
= gtk_label_new ("FCS Filter:");
1816 gtk_widget_set_name (basic_parameters_fcs_filter_lb
,
1817 "basic_parameters_fcs_filter_lb");
1818 gtk_widget_show (basic_parameters_fcs_filter_lb
);
1819 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box
),
1820 basic_parameters_fcs_filter_lb
, FALSE
, FALSE
, 0);
1822 fcs_filter_cb
= gtk_combo_box_text_new();
1823 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(fcs_filter_cb
), airpcap_get_validation_name(AIRPCAP_VT_ACCEPT_EVERYTHING
));
1824 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(fcs_filter_cb
), airpcap_get_validation_name(AIRPCAP_VT_ACCEPT_CORRECT_FRAMES
));
1825 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(fcs_filter_cb
), airpcap_get_validation_name(AIRPCAP_VT_ACCEPT_CORRUPT_FRAMES
));
1826 gtk_combo_box_set_active(GTK_COMBO_BOX(fcs_filter_cb
), 0);
1827 gtk_widget_set_name (fcs_filter_cb
, "fcs_filter_cb");
1828 gtk_widget_show (fcs_filter_cb
);
1829 gtk_box_pack_start (GTK_BOX (basic_parameters_fcs_h_box
), fcs_filter_cb
,
1831 gtk_widget_set_size_request (fcs_filter_cb
, 112, -1);
1833 if (airpcap_if_selected
!= NULL
)
1835 airpcap_validation_type_combo_set_by_type(fcs_filter_cb
, airpcap_if_selected
->CrcValidationOn
);
1838 basic_parameters_frame_lb
= gtk_label_new ("<b>Basic Parameters</b>");
1839 gtk_widget_set_name (basic_parameters_frame_lb
,
1840 "basic_parameters_frame_lb");
1841 gtk_widget_show (basic_parameters_frame_lb
);
1843 gtk_frame_set_label_widget (GTK_FRAME (basic_parameters_fr
),basic_parameters_frame_lb
);
1844 gtk_label_set_use_markup (GTK_LABEL (basic_parameters_frame_lb
), TRUE
);
1846 low_buttons_h_box
= ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, 0, FALSE
);
1847 gtk_widget_set_name (low_buttons_h_box
, "low_buttons_h_box");
1848 gtk_widget_show (low_buttons_h_box
);
1849 gtk_box_pack_end (GTK_BOX (main_box
), low_buttons_h_box
, FALSE
, FALSE
, 0);
1851 left_h_button_box
= gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL
);
1852 gtk_widget_set_name (left_h_button_box
, "left_h_button_box");
1853 gtk_widget_show (left_h_button_box
);
1854 gtk_box_pack_start (GTK_BOX (low_buttons_h_box
), left_h_button_box
, FALSE
,
1857 /* dlg_button_row_new() returns an (h)box */
1858 right_h_button_box
= dlg_button_row_new(GTK_STOCK_OK
, GTK_STOCK_APPLY
, GTK_STOCK_CANCEL
, NULL
);
1859 gtk_widget_show (right_h_button_box
);
1860 gtk_box_pack_end (GTK_BOX (low_buttons_h_box
), right_h_button_box
, FALSE
,
1863 ok_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(right_h_button_box
), GTK_STOCK_OK
);
1864 apply_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(right_h_button_box
), GTK_STOCK_APPLY
);
1865 cancel_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(right_h_button_box
), GTK_STOCK_CANCEL
);
1867 /* Connect the callbacks */
1868 g_signal_connect (airpcap_advanced_w
, "delete_event", G_CALLBACK(window_delete_event_cb
), NULL
);
1869 g_signal_connect (airpcap_advanced_w
, "destroy", G_CALLBACK(on_airpcap_advanced_destroy
), airpcap_advanced_w
);
1871 if (!airpcap_if_is_any(airpcap_if_selected
))
1873 g_signal_connect (blink_bt
, "clicked", G_CALLBACK(on_blink_bt_clicked
), NULL
);
1877 g_signal_connect (blink_bt
, "clicked", G_CALLBACK(on_what_s_this_bt_clicked
), NULL
);
1880 g_signal_connect (channel_cb
, "changed", G_CALLBACK(airpcap_channel_changed_noset_cb
), channel_offset_cb
);
1881 /* We don't attach the channel offset combo because we don't want it changing anything yet. */
1882 g_signal_connect (capture_type_cb
, "changed", G_CALLBACK(on_capture_type_cb_changed
), NULL
);
1883 g_signal_connect (fcs_ck
, "toggled", G_CALLBACK(on_fcs_ck_toggled
), NULL
);
1884 g_signal_connect (fcs_filter_cb
, "changed", G_CALLBACK(on_fcs_filter_cb_changed
), NULL
);
1885 g_signal_connect (apply_bt
, "clicked", G_CALLBACK(on_advanced_apply_bt_clicked
), airpcap_advanced_w
);
1886 g_signal_connect (ok_bt
,"clicked", G_CALLBACK(on_advanced_ok_bt_clicked
), airpcap_advanced_w
);
1887 g_signal_connect (cancel_bt
,"clicked", G_CALLBACK(on_advanced_cancel_bt_clicked
), airpcap_advanced_w
);
1889 /* Different because the window will be closed ... */
1890 /*window_set_cancel_button(airpcap_advanced_w, ok_bt, window_cancel_button_cb);
1891 window_set_cancel_button(airpcap_advanced_w, cancel_bt, window_cancel_button_cb);*/
1894 /* Store pointers to all widgets, for use by lookup_widget(). */
1895 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_BLINK_KEY
, blink_bt
);
1896 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_CHANNEL_KEY
,channel_cb
);
1897 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_CHANNEL_OFFSET_KEY
, channel_offset_cb
);
1898 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_LINK_TYPE_KEY
,capture_type_cb
);
1899 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_FCS_CHECK_KEY
, fcs_ck
);
1900 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_FCS_FILTER_KEY
, fcs_filter_cb
);
1901 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_OK_KEY
, ok_bt
);
1902 g_object_set_data (G_OBJECT(airpcap_advanced_w
), AIRPCAP_ADVANCED_CANCEL_KEY
, cancel_bt
);
1905 * I will need the toolbar and the main widget in some callback,
1906 * so I will add the toolbar pointer to the airpcap_advanced_w
1908 g_object_set_data(G_OBJECT(airpcap_advanced_w
),AIRPCAP_TOOLBAR_KEY
,toolbar
);
1910 /* At the end, so that it appears completely all together ... */
1911 gtk_widget_show (airpcap_advanced_w
);
1915 * Callback for the OK button 'clicked' in the Decryption Key Management window.
1918 on_key_management_ok_bt_clicked(GtkWidget
*button
, gpointer data
)
1920 /* advanced window */
1921 GtkWidget
*key_management_w
;
1923 /* retrieve main window */
1924 key_management_w
= GTK_WIDGET(data
);
1926 /* Apply the current decryption preferences */
1927 on_key_management_apply_bt_clicked(button
, data
);
1929 gtk_widget_destroy(key_management_w
);
1933 * Callback for the CANCEL button 'clicked' in the Decryption Key Management window.
1936 on_key_management_cancel_bt_clicked(GtkWidget
*button _U_
, gpointer data
)
1938 /* Retrieve object data */
1939 GtkWidget
*key_management_w
;
1941 /* Retrieve the GUI object pointers */
1942 key_management_w
= GTK_WIDGET(data
);
1944 gtk_widget_destroy(key_management_w
);
1947 /* Called to create the key management window */
1949 display_airpcap_key_management_cb(GtkWidget
*w _U_
, gpointer data
)
1951 GtkWidget
*key_management_w
;
1952 GtkWidget
*main_box
;
1955 GtkWidget
*keys_h_sub_box
;
1956 GtkWidget
*decryption_mode_grid
;
1957 GtkWidget
*decryption_mode_lb
;
1958 GtkWidget
*decryption_mode_cb
;
1959 GtkWidget
*keys_v_sub_box
;
1960 GtkWidget
*keys_scrolled_w
;
1961 GtkListStore
*key_list_store
;
1962 GtkWidget
*key_list
;
1963 GtkWidget
*key_v_button_box
;
1964 GtkWidget
*add_new_key_bt
;
1965 GtkWidget
*remove_key_bt
;
1966 GtkWidget
*edit_key_bt
;
1967 GtkWidget
*move_key_up_bt
;
1968 GtkWidget
*move_key_down_bt
;
1969 GtkWidget
*keys_frame_lb
;
1970 GtkWidget
*low_buttons_h_box
;
1971 GtkWidget
*left_h_button_box
;
1972 GtkWidget
*right_h_button_box
;
1974 GtkWidget
*apply_bt
;
1975 GtkWidget
*cancel_bt
;
1977 /* widgets in the toolbar */
1979 *toolbar_decryption_ck
;
1982 GtkTreeViewColumn
*column
;
1983 GtkCellRenderer
*renderer
;
1984 GtkTreeSelection
*selection
;
1987 /* user data - RETRIEVE pointers of toolbar widgets */
1988 toolbar
= GTK_WIDGET(data
);
1989 toolbar_decryption_ck
= GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar
),AIRPCAP_TOOLBAR_DECRYPTION_KEY
));
1991 /* gray out the toolbar */
1992 gtk_widget_set_sensitive(toolbar
,FALSE
);
1997 /* the selected is the active, for now */
1998 airpcap_if_selected
= airpcap_if_active
;
2000 /* Create the new window */
2001 key_management_w
= dlg_window_new("Decryption Key Management"); /* transient_for top_level */
2002 gtk_window_set_destroy_with_parent(GTK_WINDOW(key_management_w
), TRUE
);
2003 gtk_window_set_modal(GTK_WINDOW(key_management_w
), TRUE
);
2005 gtk_container_set_border_width (GTK_CONTAINER (key_management_w
), 5);
2006 gtk_window_set_position (GTK_WINDOW (key_management_w
),
2007 GTK_WIN_POS_CENTER
);
2009 gtk_window_set_resizable (GTK_WINDOW (key_management_w
), FALSE
);
2010 gtk_window_set_type_hint (GTK_WINDOW (key_management_w
), GDK_WINDOW_TYPE_HINT_DIALOG
);
2012 main_box
= ws_gtk_box_new(GTK_ORIENTATION_VERTICAL
, 0, FALSE
);
2013 gtk_widget_set_name (main_box
, "main_box");
2014 gtk_widget_show (main_box
);
2015 gtk_container_add (GTK_CONTAINER (key_management_w
), main_box
);
2017 keys_fr
= gtk_frame_new (NULL
);
2018 gtk_widget_set_name (keys_fr
, "keys_fr");
2019 gtk_widget_show (keys_fr
);
2020 gtk_box_pack_start (GTK_BOX (main_box
), keys_fr
, FALSE
, FALSE
, 0);
2021 gtk_container_set_border_width (GTK_CONTAINER (keys_fr
), 10);
2023 keys_al
= gtk_alignment_new (0.5f
, 0.5f
, 1, 1);
2024 gtk_widget_set_name (keys_al
, "keys_al");
2025 gtk_widget_show (keys_al
);
2026 gtk_container_add (GTK_CONTAINER (keys_fr
), keys_al
);
2027 gtk_container_set_border_width (GTK_CONTAINER (keys_al
), 5);
2029 gtk_alignment_set_padding (GTK_ALIGNMENT (keys_al
), 0, 0, 12, 0);
2031 keys_h_sub_box
= ws_gtk_box_new(GTK_ORIENTATION_VERTICAL
, 0, FALSE
);
2032 gtk_widget_set_name (keys_h_sub_box
, "keys_h_sub_box");
2033 gtk_widget_show (keys_h_sub_box
);
2034 gtk_container_add (GTK_CONTAINER (keys_al
), keys_h_sub_box
);
2036 decryption_mode_grid
= ws_gtk_grid_new ();
2037 gtk_widget_set_name (decryption_mode_grid
, "decryption_mode_grid");
2038 gtk_widget_show (decryption_mode_grid
);
2039 gtk_box_pack_start (GTK_BOX (keys_h_sub_box
), decryption_mode_grid
, FALSE
,
2041 ws_gtk_grid_set_row_spacing(GTK_GRID(decryption_mode_grid
), 6);
2043 decryption_mode_lb
= gtk_label_new ("Select Decryption Mode");
2044 gtk_widget_set_name (decryption_mode_lb
, "decryption_mode_lb");
2045 gtk_widget_show (decryption_mode_lb
);
2046 ws_gtk_grid_attach_extended (GTK_GRID (decryption_mode_grid
), decryption_mode_lb
, 1,
2047 0, 1, 1, (GtkAttachOptions
) (GTK_FILL
),
2048 (GtkAttachOptions
) (0), 0, 0);
2049 gtk_misc_set_alignment (GTK_MISC (decryption_mode_lb
), 0, 0.5f
);
2051 decryption_mode_cb
= gtk_combo_box_text_new();
2052 update_decryption_mode_list(decryption_mode_cb
);
2053 gtk_widget_set_name (decryption_mode_cb
, "decryption_mode_cb");
2054 gtk_widget_show (decryption_mode_cb
);
2055 ws_gtk_grid_attach_extended (GTK_GRID (decryption_mode_grid
), decryption_mode_cb
, 0,
2056 0, 1, 1, (GtkAttachOptions
) (0), (GtkAttachOptions
) (0),
2058 gtk_widget_set_size_request (decryption_mode_cb
, 83, -1);
2060 /* Set correct decryption mode!!!! */
2061 update_decryption_mode(decryption_mode_cb
);
2063 keys_v_sub_box
= ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, 0, FALSE
);
2064 gtk_widget_set_name (keys_v_sub_box
, "keys_v_sub_box");
2065 gtk_widget_show (keys_v_sub_box
);
2066 gtk_box_pack_start (GTK_BOX (keys_h_sub_box
), keys_v_sub_box
, TRUE
, TRUE
, 0);
2068 keys_scrolled_w
= gtk_scrolled_window_new (NULL
, NULL
);
2069 gtk_widget_set_name (keys_scrolled_w
, "keys_scrolled_w");
2070 gtk_widget_show (keys_scrolled_w
);
2071 gtk_box_pack_start (GTK_BOX (keys_v_sub_box
), keys_scrolled_w
, TRUE
, TRUE
,
2073 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (keys_scrolled_w
), GTK_POLICY_NEVER
, GTK_POLICY_AUTOMATIC
);
2077 /* Create the store */
2078 key_list_store
= gtk_list_store_new(KL_NUM_COLS
,
2079 G_TYPE_STRING
, /* Type */
2080 G_TYPE_STRING
/* Key */
2081 , G_TYPE_STRING
/* SSID */
2085 key_list
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(key_list_store
));
2087 /* Speed up the list display */
2088 gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(key_list
), TRUE
);
2090 /* Setup the sortable columns */
2091 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(key_list
), FALSE
);
2093 /* The view now holds a reference. We can get rid of our own reference */
2094 g_object_unref(G_OBJECT(key_list_store
));
2097 * Create the first column packet, associating the "text" attribute of the
2098 * cell_renderer to the first column of the model
2100 renderer
= gtk_cell_renderer_text_new();
2101 column
= gtk_tree_view_column_new_with_attributes("Type", renderer
,
2102 "text", KL_COL_TYPE
, NULL
);
2103 gtk_tree_view_column_set_sort_column_id(column
, KL_COL_TYPE
);
2104 gtk_tree_view_column_set_resizable(column
, TRUE
);
2105 gtk_tree_view_column_set_sizing(column
, GTK_TREE_VIEW_COLUMN_FIXED
);
2106 gtk_tree_view_column_set_min_width(column
, 60);
2107 gtk_tree_view_column_set_fixed_width(column
, 100);
2108 /* Add the column to the view. */
2109 gtk_tree_view_append_column(GTK_TREE_VIEW(key_list
), column
);
2112 renderer
= gtk_cell_renderer_text_new();
2113 column
= gtk_tree_view_column_new_with_attributes("Key", renderer
,
2114 "text", KL_COL_KEY
, NULL
);
2115 gtk_tree_view_column_set_sort_column_id(column
, KL_COL_KEY
);
2116 gtk_tree_view_column_set_resizable(column
, TRUE
);
2117 gtk_tree_view_column_set_sizing(column
, GTK_TREE_VIEW_COLUMN_FIXED
);
2118 gtk_tree_view_column_set_min_width(column
, 120);
2119 gtk_tree_view_column_set_fixed_width(column
, 200);
2120 gtk_tree_view_append_column(GTK_TREE_VIEW(key_list
), column
);
2123 renderer
= gtk_cell_renderer_text_new();
2124 column
= gtk_tree_view_column_new_with_attributes("SSID", renderer
,
2125 "text", KL_COL_SSID
,
2127 gtk_tree_view_column_set_sort_column_id(column
, KL_COL_SSID
);
2128 gtk_tree_view_column_set_resizable(column
, TRUE
);
2129 gtk_tree_view_column_set_sizing(column
, GTK_TREE_VIEW_COLUMN_FIXED
);
2130 gtk_tree_view_column_set_min_width(column
, 80);
2131 gtk_tree_view_column_set_fixed_width(column
, 150);
2132 gtk_tree_view_append_column(GTK_TREE_VIEW(key_list
), column
);
2134 /* Now enable the sorting of each column */
2135 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(key_list
), TRUE
);
2136 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(key_list
), TRUE
);
2138 /* Setup the selection handler */
2139 selection
= gtk_tree_view_get_selection(GTK_TREE_VIEW(key_list
));
2140 gtk_tree_selection_set_mode(selection
, GTK_SELECTION_SINGLE
);
2142 gtk_widget_show (key_list
);
2144 gtk_container_add (GTK_CONTAINER (keys_scrolled_w
), key_list
);
2146 key_v_button_box
= gtk_button_box_new (GTK_ORIENTATION_VERTICAL
);
2147 gtk_widget_set_name (key_v_button_box
, "key_v_button_box");
2148 gtk_widget_show (key_v_button_box
);
2149 gtk_box_pack_start (GTK_BOX (keys_v_sub_box
), key_v_button_box
, FALSE
, TRUE
,
2152 add_new_key_bt
= gtk_button_new_from_stock(GTK_STOCK_NEW
);
2153 gtk_widget_set_name (add_new_key_bt
, "add_new_key_bt");
2154 gtk_widget_show (add_new_key_bt
);
2155 gtk_container_add (GTK_CONTAINER (key_v_button_box
), add_new_key_bt
);
2156 gtk_widget_set_can_default (add_new_key_bt
, TRUE
);
2158 edit_key_bt
= gtk_button_new_from_stock(WIRESHARK_STOCK_EDIT
);
2159 gtk_widget_set_name (edit_key_bt
, "edit_key_bt");
2160 gtk_widget_show (edit_key_bt
);
2161 gtk_container_add (GTK_CONTAINER (key_v_button_box
), edit_key_bt
);
2162 gtk_widget_set_can_default (edit_key_bt
, TRUE
);
2164 remove_key_bt
= gtk_button_new_from_stock(GTK_STOCK_DELETE
);
2165 gtk_widget_set_name (remove_key_bt
, "remove_key_bt");
2166 gtk_widget_show (remove_key_bt
);
2167 gtk_container_add (GTK_CONTAINER (key_v_button_box
), remove_key_bt
);
2168 gtk_widget_set_can_default (remove_key_bt
, TRUE
);
2170 move_key_up_bt
= gtk_button_new_from_stock(GTK_STOCK_GO_UP
);
2171 gtk_widget_set_name (move_key_up_bt
, "move_key_up_bt");
2172 gtk_widget_show (move_key_up_bt
);
2173 gtk_container_add (GTK_CONTAINER (key_v_button_box
), move_key_up_bt
);
2174 gtk_widget_set_can_default (move_key_up_bt
, TRUE
);
2176 move_key_down_bt
= gtk_button_new_from_stock(GTK_STOCK_GO_DOWN
);
2177 gtk_widget_set_name (move_key_down_bt
, "move_key_down_bt");
2178 gtk_widget_show (move_key_down_bt
);
2179 gtk_container_add (GTK_CONTAINER (key_v_button_box
), move_key_down_bt
);
2180 gtk_widget_set_can_default (move_key_down_bt
, TRUE
);
2182 keys_frame_lb
= gtk_label_new ("<b>Decryption Keys</b>");
2183 gtk_widget_set_name (keys_frame_lb
, "keys_frame_lb");
2184 gtk_widget_show (keys_frame_lb
);
2186 gtk_frame_set_label_widget (GTK_FRAME (keys_fr
), keys_frame_lb
);
2187 gtk_label_set_use_markup (GTK_LABEL (keys_frame_lb
), TRUE
);
2189 low_buttons_h_box
= ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL
, 0, FALSE
);
2190 gtk_widget_set_name (low_buttons_h_box
, "low_buttons_h_box");
2191 gtk_widget_show (low_buttons_h_box
);
2192 gtk_box_pack_end (GTK_BOX (main_box
), low_buttons_h_box
, FALSE
, FALSE
, 0);
2194 left_h_button_box
= gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL
);
2195 gtk_widget_set_name (left_h_button_box
, "left_h_button_box");
2196 gtk_widget_show (left_h_button_box
);
2197 gtk_box_pack_start (GTK_BOX (low_buttons_h_box
), left_h_button_box
, FALSE
,
2200 /* dlg_button_row_new() returns an (h)box */
2201 right_h_button_box
= dlg_button_row_new(GTK_STOCK_OK
, GTK_STOCK_APPLY
, GTK_STOCK_CANCEL
, NULL
);
2202 gtk_widget_set_name (right_h_button_box
, "right_h_button_box");
2203 gtk_widget_show (right_h_button_box
);
2204 gtk_box_pack_end (GTK_BOX (low_buttons_h_box
), right_h_button_box
, FALSE
,
2207 ok_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(right_h_button_box
), GTK_STOCK_OK
);
2208 apply_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(right_h_button_box
), GTK_STOCK_APPLY
);
2209 cancel_bt
= (GtkWidget
*)g_object_get_data(G_OBJECT(right_h_button_box
), GTK_STOCK_CANCEL
);
2211 /* Connect the callbacks */
2212 g_signal_connect (key_management_w
, "delete_event", G_CALLBACK(window_delete_event_cb
), NULL
);
2213 g_signal_connect (key_management_w
, "destroy", G_CALLBACK(on_key_management_destroy
), key_management_w
);
2214 g_signal_connect (add_new_key_bt
, "clicked", G_CALLBACK(on_add_new_key_bt_clicked
), key_management_w
);
2215 g_signal_connect (remove_key_bt
, "clicked", G_CALLBACK(on_remove_key_bt_clicked
), key_management_w
);
2216 g_signal_connect (edit_key_bt
, "clicked", G_CALLBACK(on_edit_key_bt_clicked
), key_management_w
);
2217 g_signal_connect (move_key_up_bt
, "clicked", G_CALLBACK(on_move_key_up_bt_clicked
), key_list
);
2218 g_signal_connect (move_key_down_bt
, "clicked", G_CALLBACK(on_move_key_down_bt_clicked
), key_list
);
2219 g_signal_connect (apply_bt
, "clicked", G_CALLBACK(on_key_management_apply_bt_clicked
), key_management_w
);
2220 g_signal_connect (ok_bt
, "clicked", G_CALLBACK(on_key_management_ok_bt_clicked
), key_management_w
);
2221 g_signal_connect (cancel_bt
, "clicked", G_CALLBACK(on_key_management_cancel_bt_clicked
), key_management_w
);
2222 g_signal_connect (selection
, "changed", G_CALLBACK(on_key_list_select_row
), key_management_w
);
2223 g_signal_connect (key_list_store
, "rows_reordered", G_CALLBACK(on_key_list_reorder
), key_management_w
);
2225 /* Different because the window will be closed ... */
2226 /*window_set_cancel_button(key_management_w, ok_bt, window_cancel_button_cb);
2227 window_set_cancel_button(key_management_w, cancel_bt, window_cancel_button_cb);*/
2229 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY
,selection
);
2231 /* Store pointers to all widgets, for use by lookup_widget(). */
2232 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_ADVANCED_DECRYPTION_MODE_KEY
, decryption_mode_cb
);
2233 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_ADVANCED_KEYLIST_KEY
, key_list_store
);
2234 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_ADVANCED_OK_KEY
, ok_bt
);
2235 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_ADVANCED_CANCEL_KEY
, cancel_bt
);
2237 /* Enable / disable buttons */
2238 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_KEY_MGMT_NEW_KEY
, add_new_key_bt
);
2239 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_KEY_MGMT_EDIT_KEY
, edit_key_bt
);
2240 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_KEY_MGMT_DELETE_KEY
, remove_key_bt
);
2241 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_KEY_MGMT_UP_KEY
, move_key_up_bt
);
2242 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_KEY_MGMT_DOWN_KEY
, move_key_down_bt
);
2245 * I will need the toolbar and the main widget in some callback,
2246 * so I will add the toolbar pointer to the key_management_w
2248 g_object_set_data(G_OBJECT(key_management_w
),AIRPCAP_TOOLBAR_KEY
,toolbar
);
2249 g_object_set_data (G_OBJECT(key_management_w
), AIRPCAP_TOOLBAR_DECRYPTION_KEY
, toolbar_decryption_ck
);
2251 /* FIRST OF ALL, CHECK THE KEY COLLECTIONS */
2253 * This will read the decryption keys from the preferences file, and will store
2254 * them into the registry...
2256 if (!airpcap_check_decryption_keys(airpcap_if_list
))
2258 /* Ask the user what to do ...*/
2259 airpcap_keys_check_w(key_management_w
,NULL
);
2261 else /* Keys from lists are equals, or Wireshark has got no keys */
2263 airpcap_load_decryption_keys(airpcap_if_list
);
2264 airpcap_fill_key_list(key_list_store
);
2265 /* At the end, so that it appears completely all together ... */
2266 gtk_widget_show (key_management_w
);
2269 if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(key_list_store
), &iter
))
2271 gtk_tree_selection_select_iter(selection
, &iter
);
2277 on_keys_check_cancel_bt_clicked (GtkWidget
*button _U_
, gpointer user_data
)
2279 GtkWidget
*key_management_w
;
2280 GtkWidget
*keys_check_w
;
2281 GtkListStore
*key_list_store
;
2283 keys_check_w
= GTK_WIDGET(user_data
);
2285 key_management_w
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_KEY
);
2287 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2288 and is not NULL if it was called when the Key Management widget has been clicked */
2289 if (key_management_w
!= NULL
)
2292 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_ADVANCED_KEYLIST_KEY
);
2293 airpcap_fill_key_list(key_list_store
);
2294 gtk_widget_show (key_management_w
);
2297 gtk_widget_destroy(keys_check_w
);
2301 on_merge_bt_clicked (GtkWidget
* button _U_
, gpointer user_data
)
2303 GtkWidget
*key_management_w
;
2304 GtkWidget
*keys_check_w
;
2305 GtkListStore
*key_list_store
;
2307 guint n_adapters
= 0;
2310 GList
* wireshark_keys
=NULL
;
2311 GList
* driver_keys
=NULL
;
2312 GList
* current_adapter_keys
=NULL
;
2313 GList
* merged_list
= NULL
;
2314 GList
* merged_list_tmp
= NULL
;
2316 airpcap_if_info_t
* curr_adapter
;
2318 keys_check_w
= GTK_WIDGET(user_data
);
2320 key_management_w
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_KEY
);
2322 n_adapters
= g_list_length(airpcap_if_list
);
2324 /* Retrieve Wireshark keys */
2325 wireshark_keys
= get_wireshark_keys();
2327 merged_list
= merge_key_list(wireshark_keys
,NULL
);
2329 /* Retrieve AirPcap driver's keys */
2330 driver_keys
= get_airpcap_driver_keys();
2332 merged_list
= merge_key_list(merged_list
,driver_keys
);
2334 /* NOW wireshark_keys and driver_keys ARE no more needed... at the end, we will have to free them! */
2335 for (i
= 0; i
<n_adapters
; i
++)
2337 curr_adapter
= (airpcap_if_info_t
*)g_list_nth_data(airpcap_if_list
,i
);
2338 current_adapter_keys
= get_airpcap_device_keys(curr_adapter
);
2340 merged_list_tmp
= merged_list
;
2341 merged_list
= merge_key_list(merged_list_tmp
,current_adapter_keys
);
2342 free_key_list(merged_list_tmp
);
2346 /* Set up this new list as default for Wireshark and Adapters... */
2347 airpcap_save_decryption_keys(merged_list
,airpcap_if_list
);
2349 free_key_list(wireshark_keys
);
2350 free_key_list(driver_keys
);
2352 gtk_widget_destroy(keys_check_w
);
2354 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2355 and is not NULL if it was called when the Key Management widget has been clicked */
2356 if (key_management_w
!= NULL
)
2359 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_ADVANCED_KEYLIST_KEY
);
2360 airpcap_fill_key_list(key_list_store
);
2361 gtk_widget_show (key_management_w
);
2366 on_keep_bt_clicked (GtkWidget
*button _U_
, gpointer user_data
)
2368 GtkWidget
*key_management_w
;
2369 GtkWidget
*keys_check_w
;
2370 GtkListStore
*key_list_store
=NULL
;
2372 GList
* wireshark_keys
=NULL
;
2374 GList
* merged_keys
=NULL
;
2376 keys_check_w
= GTK_WIDGET(user_data
);
2378 key_management_w
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_KEY
);
2380 /* Retrieve Wireshark keys */
2381 wireshark_keys
= get_wireshark_keys();
2383 merged_keys
= merge_key_list(wireshark_keys
,NULL
);
2385 /* Set up this new list as default for Wireshark and Adapters... */
2386 airpcap_save_decryption_keys(merged_keys
,airpcap_if_list
);
2388 /* Free the memory */
2389 free_key_list(wireshark_keys
);
2391 /* Close the window */
2392 gtk_widget_destroy(keys_check_w
);
2394 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2395 and is not NULL if it was called when the Key Management widget has been clicked */
2396 if (key_management_w
!= NULL
)
2399 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_ADVANCED_KEYLIST_KEY
);
2400 airpcap_fill_key_list(key_list_store
);
2401 gtk_widget_show (key_management_w
);
2406 on_import_bt_clicked (GtkWidget
* button _U_
, gpointer user_data
)
2408 GtkWidget
*key_management_w
;
2409 GtkWidget
*keys_check_w
;
2410 GtkListStore
*key_list_store
;
2412 guint n_adapters
= 0;
2415 GList
* wireshark_keys
=NULL
;
2416 GList
* driver_keys
=NULL
;
2417 GList
* current_adapter_keys
=NULL
;
2418 GList
* merged_list
= NULL
;
2419 GList
* merged_list_tmp
= NULL
;
2421 airpcap_if_info_t
* curr_adapter
;
2423 keys_check_w
= GTK_WIDGET(user_data
);
2425 key_management_w
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_KEY
);
2427 n_adapters
= g_list_length(airpcap_if_list
);
2429 wireshark_keys
= get_wireshark_keys();
2431 /* Retrieve AirPcap driver's keys */
2432 driver_keys
= get_airpcap_driver_keys();
2434 merged_list
= merge_key_list(merged_list
,driver_keys
);
2436 /* NOW wireshark_keys IS no more needed... at the end, we will have to free it! */
2437 for (i
= 0; i
<n_adapters
; i
++)
2439 curr_adapter
= (airpcap_if_info_t
*)g_list_nth_data(airpcap_if_list
,i
);
2440 current_adapter_keys
= get_airpcap_device_keys(curr_adapter
);
2442 merged_list_tmp
= merged_list
;
2443 merged_list
= merge_key_list(merged_list_tmp
,current_adapter_keys
);
2444 free_key_list(merged_list_tmp
);
2448 /* Set up this new list as default for Wireshark and Adapters... */
2449 airpcap_save_decryption_keys(merged_list
,airpcap_if_list
);
2451 free_key_list(wireshark_keys
);
2452 free_key_list(driver_keys
);
2454 gtk_widget_destroy(keys_check_w
);
2456 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2457 and is not NULL if it was called when the Key Management widget has been clicked */
2458 if (key_management_w
!= NULL
)
2461 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_ADVANCED_KEYLIST_KEY
);
2462 airpcap_fill_key_list(key_list_store
);
2463 gtk_widget_show (key_management_w
);
2468 on_ignore_bt_clicked (GtkWidget
* button _U_
, gpointer user_data
)
2470 GtkWidget
*key_management_w
;
2471 GtkWidget
*keys_check_w
;
2472 GtkListStore
*key_list_store
;
2474 keys_check_w
= GTK_WIDGET(user_data
);
2476 key_management_w
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_KEY
);
2478 /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
2479 and is not NULL if it was called when the Key Management widget has been clicked */
2480 if (key_management_w
!= NULL
)
2483 key_list_store
= (GtkListStore
*)g_object_get_data(G_OBJECT(key_management_w
),AIRPCAP_ADVANCED_KEYLIST_KEY
);
2484 airpcap_fill_key_list(key_list_store
);
2485 gtk_widget_show (key_management_w
);
2488 gtk_widget_destroy(keys_check_w
);
2492 on_keys_check_ok_bt_clicked (GtkWidget
*button _U_
, gpointer user_data
)
2494 GtkWidget
*keys_check_w
;
2496 GtkWidget
*merge_rb
,
2501 keys_check_w
= GTK_WIDGET(user_data
);
2503 merge_rb
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY
);
2504 keep_rb
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY
);
2505 import_rb
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY
);
2506 ignore_rb
= (GtkWidget
*)g_object_get_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY
);
2508 /* Find out which radio button is selected and call the correct function */
2509 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(merge_rb
)))
2510 on_merge_bt_clicked (merge_rb
,keys_check_w
);
2511 else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(keep_rb
)))
2512 on_keep_bt_clicked (keep_rb
,keys_check_w
);
2513 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(import_rb
)))
2514 on_import_bt_clicked (import_rb
,keys_check_w
);
2515 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ignore_rb
)))
2516 on_ignore_bt_clicked (ignore_rb
,keys_check_w
);
2517 else on_keys_check_cancel_bt_clicked(NULL
,keys_check_w
);
2521 on_keys_check_w_destroy (GtkWidget
*w _U_
, gpointer user_data
)
2523 gtk_widget_set_sensitive(top_level
,TRUE
);
2524 gtk_widget_set_sensitive(GTK_WIDGET(user_data
),TRUE
);
2528 * Dialog box that appears whenever keys are not consistent between Wireshark and AirPcap
2531 airpcap_keys_check_w(GtkWidget
*w
, gpointer data _U_
)
2533 GtkWidget
*keys_check_w
;
2534 GtkWidget
*main_v_box
;
2535 GtkWidget
*warning_lb
;
2536 GtkWidget
*radio_grid
;
2538 GSList
*radio_bt_group
= NULL
;
2539 GtkWidget
*merge_rb
;
2540 GtkWidget
*import_rb
;
2541 GtkWidget
*ignore_rb
;
2543 GtkWidget
*merge_lb
;
2544 GtkWidget
*import_lb
;
2545 GtkWidget
*ignore_lb
;
2546 GtkWidget
*low_h_button_box
;
2548 GtkWidget
*cancel_bt
;
2550 keys_check_w
= window_new (GTK_WINDOW_TOPLEVEL
, "Decryption Key Warning");
2551 gtk_widget_set_name (keys_check_w
, "keys_check_w");
2552 gtk_window_set_resizable (GTK_WINDOW (keys_check_w
), FALSE
);
2554 main_v_box
= ws_gtk_box_new(GTK_ORIENTATION_VERTICAL
, 0, FALSE
);
2555 gtk_widget_set_name (main_v_box
, "main_v_box");
2556 gtk_widget_show (main_v_box
);
2557 gtk_container_add (GTK_CONTAINER (keys_check_w
), main_v_box
);
2559 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:");
2560 gtk_label_set_use_markup (GTK_LABEL (warning_lb
), TRUE
);
2561 gtk_widget_set_name (warning_lb
, "warning_lb");
2562 gtk_widget_show (warning_lb
);
2563 gtk_box_pack_start (GTK_BOX (main_v_box
), warning_lb
, FALSE
, FALSE
, 0);
2564 gtk_label_set_justify (GTK_LABEL (warning_lb
), GTK_JUSTIFY_CENTER
);
2565 gtk_label_set_line_wrap (GTK_LABEL (warning_lb
), TRUE
);
2567 radio_grid
= ws_gtk_grid_new();
2568 gtk_widget_set_name (radio_grid
, "radio_grid");
2569 gtk_widget_show (radio_grid
);
2570 gtk_box_pack_start (GTK_BOX (main_v_box
), radio_grid
, TRUE
, FALSE
, 0);
2571 gtk_container_set_border_width (GTK_CONTAINER (radio_grid
), 5);
2572 ws_gtk_grid_set_column_spacing (GTK_GRID (radio_grid
), 8);
2574 keep_rb
= gtk_radio_button_new_with_mnemonic (NULL
, "Keep");
2575 gtk_widget_set_name (keep_rb
, "keep_rb");
2576 gtk_widget_show (keep_rb
);
2577 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), keep_rb
, 0, 0, 1, 1,
2578 (GtkAttachOptions
) (GTK_FILL
),
2579 (GtkAttachOptions
) (0), 0, 0);
2580 gtk_radio_button_set_group (GTK_RADIO_BUTTON (keep_rb
), radio_bt_group
);
2581 radio_bt_group
= gtk_radio_button_get_group (GTK_RADIO_BUTTON (keep_rb
));
2583 merge_rb
= gtk_radio_button_new_with_mnemonic (NULL
, "Merge");
2584 gtk_widget_set_name (merge_rb
, "merge_rb");
2585 gtk_widget_show (merge_rb
);
2586 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), merge_rb
, 0, 1, 1, 1,
2587 (GtkAttachOptions
) (GTK_FILL
),
2588 (GtkAttachOptions
) (0), 0, 0);
2589 gtk_radio_button_set_group (GTK_RADIO_BUTTON (merge_rb
), radio_bt_group
);
2590 radio_bt_group
= gtk_radio_button_get_group (GTK_RADIO_BUTTON (merge_rb
));
2592 import_rb
= gtk_radio_button_new_with_mnemonic (NULL
, "Import");
2593 gtk_widget_set_name (import_rb
, "import_rb");
2594 gtk_widget_show (import_rb
);
2595 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), import_rb
, 0, 2, 1, 1,
2596 (GtkAttachOptions
) (GTK_FILL
),
2597 (GtkAttachOptions
) (0), 0, 0);
2598 gtk_radio_button_set_group (GTK_RADIO_BUTTON (import_rb
), radio_bt_group
);
2599 radio_bt_group
= gtk_radio_button_get_group (GTK_RADIO_BUTTON (import_rb
));
2601 ignore_rb
= gtk_radio_button_new_with_mnemonic (NULL
, "Ignore");
2602 gtk_widget_set_name (ignore_rb
, "ignore_rb");
2603 gtk_widget_show (ignore_rb
);
2604 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), ignore_rb
, 0, 3, 1, 1,
2605 (GtkAttachOptions
) (GTK_FILL
),
2606 (GtkAttachOptions
) (0), 0, 0);
2607 gtk_radio_button_set_group (GTK_RADIO_BUTTON (ignore_rb
), radio_bt_group
);
2608 radio_bt_group
= gtk_radio_button_get_group (GTK_RADIO_BUTTON (ignore_rb
));
2612 ("Use Wireshark keys, thus overwriting AirPcap adapter(s) ones.");
2613 gtk_widget_set_name (keep_lb
, "keep_lb");
2614 gtk_widget_show (keep_lb
);
2615 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), keep_lb
, 1, 0, 1, 1,
2616 (GtkAttachOptions
) (GTK_FILL
),
2617 (GtkAttachOptions
) (0), 0, 0);
2618 gtk_misc_set_alignment (GTK_MISC (keep_lb
), 0, 0.5f
);
2620 merge_lb
= gtk_label_new ("Merge Wireshark and AirPcap adapter(s) keys.");
2621 gtk_widget_set_name (merge_lb
, "merge_lb");
2622 gtk_widget_show (merge_lb
);
2623 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), merge_lb
, 1, 1, 1, 1,
2624 (GtkAttachOptions
) (GTK_FILL
),
2625 (GtkAttachOptions
) (0), 0, 0);
2626 gtk_misc_set_alignment (GTK_MISC (merge_lb
), 0, 0.5f
);
2630 ("Use AirPcap adapter(s) keys, thus overwriting Wireshark ones.");
2631 gtk_widget_set_name (import_lb
, "import_lb");
2632 gtk_widget_show (import_lb
);
2633 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), import_lb
, 1, 2, 1, 1,
2634 (GtkAttachOptions
) (GTK_FILL
),
2635 (GtkAttachOptions
) (0), 0, 0);
2636 gtk_misc_set_alignment (GTK_MISC (import_lb
), 0, 0.5f
);
2640 ("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.");
2641 gtk_widget_set_name (ignore_lb
, "ignore_lb");
2642 gtk_widget_show (ignore_lb
);
2643 ws_gtk_grid_attach_extended (GTK_GRID (radio_grid
), ignore_lb
, 1, 3, 1, 1,
2644 (GtkAttachOptions
) (GTK_FILL
),
2645 (GtkAttachOptions
) (0), 0, 0);
2646 gtk_label_set_line_wrap (GTK_LABEL (ignore_lb
), TRUE
);
2647 gtk_misc_set_alignment (GTK_MISC (ignore_lb
), 0, 0.5f
);
2649 low_h_button_box
= gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL
);
2650 gtk_widget_set_name (low_h_button_box
, "low_h_button_box");
2651 gtk_widget_show (low_h_button_box
);
2652 gtk_box_pack_start (GTK_BOX (main_v_box
), low_h_button_box
, FALSE
, FALSE
,
2654 gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box
),
2655 GTK_BUTTONBOX_SPREAD
);
2657 ok_bt
= gtk_button_new_with_mnemonic ("OK");
2658 gtk_widget_set_name (ok_bt
, "ok_bt");
2659 gtk_widget_show (ok_bt
);
2660 gtk_container_add (GTK_CONTAINER (low_h_button_box
), ok_bt
);
2661 gtk_widget_set_can_default (ok_bt
, TRUE
);
2663 cancel_bt
= gtk_button_new_with_mnemonic ("Cancel");
2664 gtk_widget_set_name (cancel_bt
, "cancel_bt");
2665 gtk_widget_show (cancel_bt
);
2666 gtk_container_add (GTK_CONTAINER (low_h_button_box
), cancel_bt
);
2667 gtk_widget_set_can_default (cancel_bt
, TRUE
);
2669 /* Store pointers to all widgets, for use by lookup_widget(). */
2670 g_signal_connect (ok_bt
, "clicked", G_CALLBACK(on_keys_check_ok_bt_clicked
), keys_check_w
);
2671 g_signal_connect (cancel_bt
, "clicked", G_CALLBACK(on_keys_check_cancel_bt_clicked
), keys_check_w
);
2672 g_signal_connect (keys_check_w
, "destroy", G_CALLBACK(on_keys_check_w_destroy
), keys_check_w
);
2674 /* Store pointers to all widgets, for use by lookup_widget(). */
2675 g_object_set_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_KEY
,w
);
2676 g_object_set_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY
,merge_rb
);
2677 g_object_set_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY
,keep_rb
);
2678 g_object_set_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY
,import_rb
);
2679 g_object_set_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY
,ignore_rb
);
2680 g_object_set_data(G_OBJECT(keys_check_w
),AIRPCAP_CHECK_WINDOW_RADIO_GROUP_KEY
,radio_bt_group
);
2682 gtk_widget_set_sensitive(top_level
,FALSE
);
2683 gtk_widget_show(keys_check_w
);
2687 #endif /* HAVE_AIRPCAP */
2695 * indent-tabs-mode: nil
2698 * ex: set shiftwidth=4 tabstop=8 expandtab:
2699 * :indentSize=4:tabSize=8:noTabs=true: