diff options
Diffstat (limited to 'gtk/airpcap_dlg.c')
-rw-r--r-- | gtk/airpcap_dlg.c | 1872 |
1 files changed, 1872 insertions, 0 deletions
diff --git a/gtk/airpcap_dlg.c b/gtk/airpcap_dlg.c new file mode 100644 index 0000000000..e177956870 --- /dev/null +++ b/gtk/airpcap_dlg.c @@ -0,0 +1,1872 @@ +/* airpcap_dlg.c + * + * $Id$ + * + * Ulf Lamping <ulf.lamping@web.de> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 2000 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_AIRPCAP + +#include <gtk/gtk.h> +#include <glib.h> + +#include <string.h> + +#include <epan/filesystem.h> + +#include "gtk/main.h" +#include "dlg_utils.h" +#include "gui_utils.h" +#include "simple_dialog.h" +#include "dfilter_expr_dlg.h" +#include "compat_macros.h" +#include "gtkglobals.h" +#include "help_dlg.h" + +#include <airpcap.h> +#include "airpcap_loader.h" +#include "airpcap_gui_utils.h" +#include "airpcap_dlg.h" + +#include "keys.h" + +/* temporary block signals to widgets */ +BOOL block_advanced_signals; + +/* + * This struct will contain useful data for the selected (actual) airpcap device + */ +void +airpcap_fill_if_combo(GtkWidget *combo, GList* if_list) +{ +int ifn = 0; +GList* popdown_if_list = NULL; +GList* curr = NULL; +airpcap_if_info_t* if_info = NULL; + + curr = g_list_nth(if_list, ifn); + if_info = NULL; + if(curr != NULL) if_info = curr->data; + + popdown_if_list = NULL; + ifn = g_list_length(if_list) - 1; + while(ifn >= 0) /* reverse order */ + { + curr = g_list_nth(if_list, ifn); + if_info = NULL; + if(curr != NULL) + if_info = curr->data; + if(if_info != NULL) + popdown_if_list = g_list_append( popdown_if_list , if_info->description) ; + ifn--; + } + gtk_combo_set_popdown_strings( GTK_COMBO(combo), popdown_if_list) ; + + if(airpcap_if_selected != NULL) + { + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), airpcap_if_selected->description); + } + else + { + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), "No Wireless Interfaces Found"); + } +} + +/* + * Callback for the crc chackbox + */ +static void +crc_check_cb(GtkWidget *w, gpointer user_data) +{ +if( !block_advanced_signals && (airpcap_if_selected != NULL)) + { + if(airpcap_if_selected->IsFcsPresent) + { + airpcap_if_selected->IsFcsPresent = FALSE; + airpcap_if_selected->saved = FALSE; + } + else + { + airpcap_if_selected->IsFcsPresent = TRUE; + airpcap_if_selected->saved = FALSE; + } + } +} + +/* + * Callback for the wrong crc combo + */ +static void +wrong_crc_combo_cb(GtkWidget *w, gpointer data) +{ +const gchar *s; + +s = gtk_entry_get_text(GTK_ENTRY(data)); + +if( !block_advanced_signals && (data != NULL) && (w != NULL) ) + { + if((g_strcasecmp("",s))) + { + airpcap_if_selected->CrcValidationOn = airpcap_get_validation_type(s); + airpcap_if_selected->saved = FALSE; + } + } +} + +/* + * Changed callback for the channel combobox + */ +static void +channel_changed_cb(GtkWidget *w _U_, gpointer data) +{ +const gchar *s; + + s = gtk_entry_get_text(GTK_ENTRY(data)); + +if( !block_advanced_signals && (data != NULL) && (w != NULL) ) + { + s = gtk_entry_get_text(GTK_ENTRY(data)); + if((g_strcasecmp("",s))) + { + if(airpcap_if_selected != NULL) + { + airpcap_if_selected->channel = airpcap_get_channel_number(s); + airpcap_if_selected->saved = FALSE; + } + } + } +} + +/* + * Changed callback for the link layer combobox + */ +static void +link_type_changed_cb(GtkWidget *w _U_, gpointer data) +{ +const gchar *s; + +s = gtk_entry_get_text(GTK_ENTRY(data)); + +if( !block_advanced_signals && (data != NULL) && (w != NULL) ) + { + if((g_strcasecmp("",s))) + { + airpcap_if_selected->linkType = airpcap_get_link_type(s); + airpcap_if_selected->saved = FALSE; + } + } +} + +/* + * Activate callback for the adapter combobox + */ +static void +combo_if_activate_cb(GtkWidget *entry _U_, gpointer data) +{ +} + +/* + * Changed callback for the adapter combobox + */ +static void +airpcap_advanced_combo_if_changed_cb(GtkWidget *w _U_, gpointer data) +{ +const gchar* s = NULL; + +s = gtk_entry_get_text(GTK_ENTRY(w)); + +if((g_strcasecmp("",s))) + { + /* We are trying to change the interface to set up...*/ + /* Check if the current interface settings need to be SAVED! */ + if( (airpcap_if_selected != NULL) && !block_advanced_signals) + { + if( (airpcap_if_selected->saved) ) /* Just change interface */ + { + /* No changes for this interface, no need to save anything */ + airpcap_change_if(w,data); + } + else + { + /* Popup a dialog to ask if user wants to save settings for selected + * interface before changing it... + */ + airpcap_ask_for_save(w,data); + } + } + } +} + +/* + * Takes the keys from the GtkList widget, and add them to the interface list + */ +void +airpcap_add_keys_from_list(GtkWidget *keylist, airpcap_if_info_t *if_info) +{ +GtkWidget *key_ls; + +GString *new_key; + +gchar *text_entered = NULL; + +GtkWidget *nl_item,*nl_lb; + +GList *list, + *children; + +/* airpcap stuff */ +UINT i, j; +gchar s[3]; +PAirpcapKeysCollection KeysCollection; +ULONG KeysCollectionSize; +UCHAR KeyByte; + +UINT keys_in_list = 0; + +key_ls = keylist; + +keys_in_list = (UINT)g_list_length(GTK_LIST(key_ls)->children); + +if(keys_in_list > 0) +{ + /* + * Save the encryption keys, if we have any of them + */ + KeysCollectionSize = 0; + + /* + * Calculate the size of the keys collection + */ + KeysCollectionSize = sizeof(AirpcapKeysCollection) + keys_in_list * sizeof(AirpcapKey); + + /* + * Allocate the collection + * We use malloc so it's easier to reuse the code in C programs + */ + KeysCollection = (PAirpcapKeysCollection)malloc(KeysCollectionSize); + if(!KeysCollection) + { + /* Simple dialog ERROR */ + simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","Failed mamory allocation for KeysCollection!"); + return; + } + + /* + * Populate the key collection + */ + list = GTK_LIST(key_ls)->children; + KeysCollection->nKeys = keys_in_list; + + for(i = 0; i < keys_in_list; i++) + { + KeysCollection->Keys[i].KeyType = AIRPCAP_KEYTYPE_WEP; + + /* Retrieve the Item corresponding to the i-th key */ + nl_item = g_list_nth_data(list, i); + children = gtk_container_children(GTK_CONTAINER(nl_item)); + nl_lb = g_list_nth_data(children,0); + new_key = g_string_new(GTK_LABEL(nl_lb)->label); + + KeysCollection->Keys[i].KeyLen = new_key->len / 2; + memset(&KeysCollection->Keys[i].KeyData, 0, sizeof(KeysCollection->Keys[i].KeyData)); + + for(j = 0 ; j < new_key->len; j += 2) + { + s[0] = new_key->str[j]; + s[1] = new_key->str[j+1]; + s[2] = '\0'; + KeyByte = (UCHAR)strtol(s, NULL, 16); + KeysCollection->Keys[i].KeyData[j / 2] = KeyByte; + } + } + + /* + * XXX - Free the old adapter key collection! + */ + if(airpcap_if_selected->keysCollection != NULL) + g_free(airpcap_if_selected->keysCollection); + + /* + * Set this collection ad the new one + */ + airpcap_if_selected->keysCollection = KeysCollection; + airpcap_if_selected->keysCollectionSize = KeysCollectionSize; +} +} + + +/* + * Pop-up window, used to ask the user if he wants to save the selected interface settings + * when closing the window. + */ +void +airpcap_ask_for_save_before_closing(GtkWidget *w _U_, gpointer data) +{ + GtkWidget* dialog; + + dialog = simple_dialog(ESD_TYPE_CONFIRMATION, ESD_BTNS_SAVE_DONTSAVE_CANCEL, + PRIMARY_TEXT_START "Save settings before closing?" PRIMARY_TEXT_END "\n\n" + "If you close the window without saving, changes you made will\nbe discarded."); + simple_dialog_set_cb(dialog, airpcap_dialog_save_before_closing_cb, data); +} + +/* user confirmed the "Save settings..." dialog */ +void +airpcap_dialog_save_before_closing_cb(gpointer dialog _U_, gint btn, gpointer data) +{ +GtkWidget* interface_combo; +GtkWidget* key_ls; + +/* I need the combo box entry */ +interface_combo = GTK_WIDGET(OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_INTERFACE_KEY)); +key_ls = GTK_WIDGET(OBJECT_GET_DATA(data,AIRPCAP_ADVANCED_KEYLIST_KEY)); + + switch(btn) { + case(ESD_BTN_SAVE): + /* save interface and exit */ + airpcap_add_keys_from_list(key_ls,airpcap_if_selected); + airpcap_save_selected_if_configuration(airpcap_if_selected); + /* Remove gtk timeout */ + gtk_timeout_remove(airpcap_if_selected->tag); + break; + case(ESD_BTN_DONT_SAVE): + /* exit without saving */ + break; + + default: + break; + } +} + +/* + * Pop-up window, used to ask the user if he wants to save the selected interface settings + * when changing the interface in the advanced dialog box + */ +void +airpcap_ask_for_save(GtkWidget *entry _U_, gpointer data) +{ + GtkWidget* dialog; + + dialog = simple_dialog(ESD_TYPE_CONFIRMATION, ESD_BTNS_SAVE_DONTSAVE_CANCEL, + PRIMARY_TEXT_START "Save settings before changing interface?" PRIMARY_TEXT_END "\n\n" + "If you change interface without saving, changes you made will\nbe discarded."); + simple_dialog_set_cb(dialog, airpcap_dialog_save_cb, data); + +} + +/* user confirmed the "Save settings..." dialog */ +void +airpcap_dialog_save_cb(GtkWidget* dialog _U_, gint btn, gpointer data) +{ +GtkWidget* interface_combo; +GtkWidget* key_ls; + +/* I need the combo box entry */ +interface_combo = GTK_WIDGET(OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_INTERFACE_KEY)); +key_ls = GTK_WIDGET(OBJECT_GET_DATA(data,AIRPCAP_ADVANCED_KEYLIST_KEY)); + + switch(btn) { + case(ESD_BTN_SAVE): + /* save interface and change */ + airpcap_add_keys_from_list(key_ls,airpcap_if_selected); + airpcap_save_selected_if_configuration(airpcap_if_selected); + /* Remove gtk timeout */ + gtk_timeout_remove(airpcap_if_selected->tag); + airpcap_change_if(GTK_COMBO(interface_combo)->entry,data); + break; + case(ESD_BTN_DONT_SAVE): + /* change interface without saving */ + airpcap_change_if(GTK_COMBO(interface_combo)->entry,data); + break; + case(ESD_BTN_CANCEL): + /* don't change interface and don't save */ + break; + default: + break; + } +} + +/* + * Function used to change the selected interface and advanced dialog box + */ +void +airpcap_change_if(GtkWidget *entry _U_, gpointer data) +{ + const gchar *s; + gchar *channel_s; + gchar *capture_s; + GtkWidget *main_w; + + GtkWidget *interface_combo; + GtkWidget *channel_combo; + GtkWidget *capture_combo; + GtkWidget *crc_check; + GtkWidget *wrong_crc_combo; + GtkWidget *blink_bt; + GtkWidget *key_ls; + + airpcap_if_info_t *new_if; + + /* Retrieve the GUI object pointers */ + main_w = GTK_WIDGET(data); + interface_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_INTERFACE_KEY)); + channel_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_CHANNEL_KEY)); + capture_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_LINK_TYPE_KEY)); + crc_check = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_CRC_KEY)); + wrong_crc_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_WRONG_CRC_KEY)); + blink_bt = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_BLINK_KEY)); + key_ls = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_KEYLIST_KEY)); + + s = gtk_entry_get_text(GTK_ENTRY(entry)); + + /* Select actual interface*/ + new_if = get_airpcap_if_from_description(airpcap_if_list, s); + + /* And change the GUI according to it... */ + /* This should always happen, but it seems that the callback is + * called twice, the first time with an 'empty' text... so it + * will return NULL! + */ + if(new_if != NULL) + { + airpcap_if_selected = new_if; + + new_if = NULL; + /* I need to 'block' signals to widgets or they will receive a signal now + and will change twice */ + block_advanced_signals = TRUE; + + /* Blink button */ + if(airpcap_if_selected->blinking) + { + #if GTK_MAJOR_VERSION >= 2 + gtk_button_set_label(GTK_BUTTON(blink_bt),"Stop Blinking"); + #else + gtk_label_set_text(GTK_LABEL(GTK_BIN(blink_bt)->child),"Stop Blinking"); + #endif + } + else + { + #if GTK_MAJOR_VERSION >= 2 + gtk_button_set_label(GTK_BUTTON(blink_bt)," Blink Led "); + #else + gtk_label_set_text(GTK_LABEL(GTK_BIN(blink_bt)->child)," Blink Led "); + #endif + } + + /* Channel combo */ + channel_s = g_strdup_printf("%d",airpcap_if_selected->channel); + if(channel_combo != NULL) /* this event seems to happen when combo is still NULL */ + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_combo)->entry), channel_s); + + /* Link Layer combo */ + capture_s = NULL; + if(airpcap_if_selected->linkType == AIRPCAP_LT_802_11) + { + capture_s = g_strdup_printf(AIRPCAP_LINK_TYPE_NAME_802_11_ONLY); + if(capture_combo != NULL) /* this event seems to happen when combo is still NULL */ + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(capture_combo)->entry), capture_s); + } + else if(airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_RADIO) + { + capture_s = g_strdup_printf(AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO); + if(capture_combo != NULL) /* this event seems to happen when combo is still NULL */ + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(capture_combo)->entry), capture_s); + } + + /* Fcs Presence check box */ + if(airpcap_if_selected->IsFcsPresent) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(crc_check),TRUE); + else + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(crc_check),FALSE); + + /* Wrong Crc combo box */ + if(airpcap_if_selected->CrcValidationOn == AIRPCAP_VT_ACCEPT_EVERYTHING) + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(wrong_crc_combo)->entry),AIRPCAP_VALIDATION_TYPE_NAME_ALL); + else if(airpcap_if_selected->CrcValidationOn == AIRPCAP_VT_ACCEPT_CORRECT_FRAMES) + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(wrong_crc_combo)->entry),AIRPCAP_VALIDATION_TYPE_NAME_CORRECT); + else if(airpcap_if_selected->CrcValidationOn == AIRPCAP_VT_ACCEPT_CORRUPT_FRAMES) + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(wrong_crc_combo)->entry),AIRPCAP_VALIDATION_TYPE_NAME_CORRUPT); + + /* Remove old keys */ + gtk_list_remove_items(GTK_LIST(key_ls),GTK_LIST(key_ls)->children); + /* Add new keys */ + airpcap_fill_key_list(key_ls,airpcap_if_selected); + + /* Enable the signals again */ + block_advanced_signals = FALSE; + } +} + +/* + * Thread function used to blink the led + */ +void update_blink(gpointer data _U_) +{ +airpcap_if_info_t* sel; +PAirpcapHandle ad; +char* ebuf = NULL; + +sel = (airpcap_if_info_t*)data; + +ad = airpcap_if_open(get_airpcap_name_from_description(airpcap_if_list, sel->description), ebuf); +if(ad) + { + if(sel->led) + { + airpcap_if_turn_led_off(ad, 0); + sel->led = FALSE; + } + else + { + airpcap_if_turn_led_on(ad, 0); + sel->led = TRUE; + } + airpcap_if_close(ad); + } +} + +/* + * Blink button callback + */ +void +blink_cb( GtkWidget *blink_bt _U_, gpointer if_data ) +{ +PAirpcapHandle ad = NULL; +char* ebuf = NULL; + +if(airpcap_if_selected != NULL) + if(!(airpcap_if_selected->blinking)) + { + #if GTK_MAJOR_VERSION >= 2 + gtk_button_set_label(GTK_BUTTON(blink_bt),"Stop Blinking"); + #else + gtk_label_set_text(GTK_LABEL(GTK_BIN(blink_bt)->child),"Stop Blinking"); + #endif + airpcap_if_selected->tag = gtk_timeout_add(500, (GtkFunction)update_blink,airpcap_if_selected); + airpcap_if_selected->blinking = TRUE; + } + else + { + #if GTK_MAJOR_VERSION >= 2 + gtk_button_set_label(GTK_BUTTON(blink_bt)," Blink Led "); + #else + gtk_label_set_text(GTK_LABEL(GTK_BIN(blink_bt)->child)," Blink Led "); + #endif + gtk_timeout_remove(airpcap_if_selected->tag); + airpcap_if_selected->blinking = FALSE; + /* Switch on the led! */ + ad = airpcap_if_open(airpcap_if_selected->name, ebuf); + if(ad) + { + gtk_timeout_remove(airpcap_if_selected->tag); + airpcap_if_turn_led_on(ad, 0); + airpcap_if_selected->blinking = FALSE; + airpcap_if_selected->led = TRUE; + airpcap_if_close(ad); + } + } +} + +/* the window was closed, cleanup things */ +static void +airpcap_if_destroy_cb(GtkWidget *w _U_, gpointer user_data _U_) +{ + PAirpcapHandle ad = NULL; + char* ebuf = NULL; + + /* Retrieve object data */ + GtkWidget *main_w; + GtkWidget *channel_combo; + GtkWidget *capture_combo; + GtkWidget *crc_check; + GtkWidget *wrong_crc_combo; + GtkWidget *blink_bt; + GtkWidget *interface_combo; + GtkWidget *cancel_bt; + GtkWidget *ok_bt; + GtkWidget *key_ls; + + /* widgets in the toolbar */ + GtkWidget *toolbar, + *toolbar_if_lb, + *toolbar_channel_cm, + *toolbar_wrong_crc_cm, + *toolbar_decryption_ck, + *advanced_bt; + + gint *from_widget = NULL; + + /* Retrieve the GUI object pointers */ + main_w = GTK_WIDGET(user_data); + interface_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_INTERFACE_KEY)); + channel_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_CHANNEL_KEY)); + capture_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_LINK_TYPE_KEY)); + crc_check = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_CRC_KEY)); + wrong_crc_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_WRONG_CRC_KEY)); + blink_bt = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_BLINK_KEY)); + cancel_bt = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_CANCEL_KEY)); + ok_bt = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_OK_KEY)); + key_ls = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_KEYLIST_KEY)); + advanced_bt = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_KEY)); + + toolbar = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_TOOLBAR_KEY)); + + /* retrieve toolbar info */ + toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY)); + toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY)); + toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_WRONG_CRC_KEY)); + toolbar_decryption_ck = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_DECRYPTION_KEY)); + + from_widget = (gint*)OBJECT_GET_DATA(toolbar,AIRPCAP_ADVANCED_FROM_KEY); + + /* ... */ + /* gray out the toolbar (if we came here from the toolbar advanced button)*/ + if( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR) + gtk_widget_set_sensitive(toolbar,TRUE); + + /* Stop blinking ALL leds (go through the airpcap_if_list) */ + if(airpcap_if_selected != NULL) + { + ad = airpcap_if_open(airpcap_if_selected->name, ebuf); + if(ad) + { + gtk_timeout_remove(airpcap_if_selected->tag); + airpcap_if_turn_led_on(ad, 0); + airpcap_if_selected->blinking = FALSE; + airpcap_if_selected->led = TRUE; + airpcap_if_close(ad); + } + } + + /* See if the 'Cancel' button was pressed or not + * if button is pressed, don't save configuration! + */ + if(GTK_BUTTON(cancel_bt)->in_button) + { + /* reload the configuration!!! Configuration has not been saved but + the corresponding structure has been modified probably...*/ + if(!airpcap_if_selected->saved) + { + airpcap_load_selected_if_configuration(airpcap_if_selected); + } + + /* NULL to everything */ + main_w = NULL; + blink_bt = NULL; + channel_combo = NULL; + interface_combo = NULL; + capture_combo = NULL; + crc_check = NULL; + wrong_crc_combo = NULL; + + /* ... */ + /* gray out the toolbar (if we came here from the toolbar advanced button)*/ + if( *from_widget == AIRPCAP_ADVANCED_FROM_TOOLBAR) + gtk_widget_set_sensitive(toolbar,TRUE); + + g_free(from_widget); + return; + } + else if(GTK_BUTTON(ok_bt)->in_button) + { + + /* ??? - Ask if want to save configuration */ + + /* Save the configuration */ + airpcap_add_keys_from_list(key_ls,airpcap_if_selected); + airpcap_save_selected_if_configuration(airpcap_if_selected); + /* Remove gtk timeout */ + gtk_timeout_remove(airpcap_if_selected->tag); + + /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/ + if( g_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0) + { + 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))); + airpcap_channel_combo_set_by_number(toolbar_channel_cm,airpcap_if_selected->channel); + airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn); + + gtk_signal_handler_block_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar); + if(airpcap_if_active->DecryptionOn == AIRPCAP_DECRYPTION_ON) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),TRUE); + else + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),FALSE); + gtk_signal_handler_unblock_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar); + } + + /* If interface active is airpcap, set sensitive TRUE for airpcap toolbar */ + if( get_airpcap_if_by_name(airpcap_if_list,airpcap_if_active->description) != NULL) + { + airpcap_set_toolbar_start_capture(airpcap_if_active); + } + else + { + airpcap_set_toolbar_stop_capture(airpcap_if_active); + } + + /* NULL to everything */ + main_w = NULL; + blink_bt = NULL; + channel_combo = NULL; + interface_combo = NULL; + capture_combo = NULL; + crc_check = NULL; + wrong_crc_combo = NULL; + + /* ... */ + /* gray out the toolbar (if we came here from the toolbar advanced button)*/ + if( *from_widget == AIRPCAP_ADVANCED_FROM_OPTIONS) + gtk_widget_set_sensitive(toolbar,FALSE); + + g_free(from_widget); + return; + } + + /* reload the configuration!!! Configuration has not been saved but + the corresponding structure has been modified probably...*/ + if(!airpcap_if_selected->saved) + { + airpcap_load_selected_if_configuration(airpcap_if_selected); + } +} + +/* + * Callback for the 'Apply' button. + */ +static void +airpcap_advanced_apply_cb(GtkWidget *button, gpointer data _U_) +{ + /* advenced window */ + GtkWidget *main_w; + + /* widgets in the toolbar */ + GtkWidget *toolbar, + *toolbar_if_lb, + *toolbar_channel_cm, + *toolbar_wrong_crc_cm, + *toolbar_decryption_ck; + + GtkWidget *key_ls; + + /* retrieve main window */ + main_w = GTK_WIDGET(data); + key_ls = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_KEYLIST_KEY)); + + toolbar = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_TOOLBAR_KEY)); + + /* retrieve toolbar info */ + toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY)); + toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY)); + toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_WRONG_CRC_KEY)); + toolbar_decryption_ck = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_DECRYPTION_KEY)); + + /* Save the configuration */ + airpcap_add_keys_from_list(key_ls,airpcap_if_selected); + airpcap_save_selected_if_configuration(airpcap_if_selected); + + /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/ + if( g_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0) + { + 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))); + airpcap_channel_combo_set_by_number(toolbar_channel_cm,airpcap_if_selected->channel); + airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn); + + gtk_signal_handler_block_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar); + if(airpcap_if_active->DecryptionOn == AIRPCAP_DECRYPTION_ON) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),TRUE); + else + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),FALSE); + gtk_signal_handler_unblock_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar); + } +} + +/* + * Callback for the 'Ok' button. + */ +static void +airpcap_advanced_ok_cb(GtkWidget *w, gpointer data _U_) +{ + /* advenced window */ + GtkWidget *main_w; + + /* widgets in the toolbar */ + GtkWidget *toolbar, + *toolbar_if_lb, + *toolbar_channel_cm, + *toolbar_wrong_crc_cm, + *toolbar_decryption_ck; + + GtkWidget *key_ls; + + /* retrieve main window */ + main_w = GTK_WIDGET(data); + + toolbar = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_TOOLBAR_KEY)); + + key_ls = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_KEYLIST_KEY)); + + /* retrieve toolbar info */ + toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY)); + toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY)); + toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_WRONG_CRC_KEY)); + toolbar_decryption_ck = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_DECRYPTION_KEY)); + + /* Save the configuration */ + airpcap_add_keys_from_list(key_ls,airpcap_if_selected); + airpcap_save_selected_if_configuration(airpcap_if_selected); + /* Remove gtk timeout */ + gtk_timeout_remove(airpcap_if_selected->tag); + + /* Update toolbar (only if airpcap_if_selected is airpcap_if_active)*/ + if( g_strcasecmp(airpcap_if_selected->description,airpcap_if_active->description) == 0) + { + 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))); + airpcap_channel_combo_set_by_number(toolbar_channel_cm,airpcap_if_selected->channel); + airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn); + + gtk_signal_handler_block_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar); + if(airpcap_if_active->DecryptionOn == AIRPCAP_DECRYPTION_ON) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),TRUE); + else + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar_decryption_ck),FALSE); + gtk_signal_handler_unblock_by_func (GTK_OBJECT(toolbar_decryption_ck),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), toolbar); + } +} + +/* + * Callback for the 'Reset Configuration' button. + */ +static void +airpcap_advanced_reset_configuration_cb(GtkWidget *button, gpointer data _U_) +{ + +} + +/* + * Callback for the 'About' button. + */ +static void +airpcap_advanced_about_cb(GtkWidget *button, gpointer data _U_) +{ + /* retrieve toolbar info */ +} + +/* + * Callback used to add a WEP key in the add new key box; + */ +static void +add_key(GtkWidget *widget, gpointer data _U_) +{ +GtkWidget *text, + *key_ls, + *ok_bt; + +GString *new_key; + +gchar *text_entered = NULL; + +int keys_in_list = 0; +unsigned int i; + +text = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_ADD_KEY_TEXT_KEY); +ok_bt = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_ADD_KEY_OK_KEY); +key_ls = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_KEYLIST_KEY); + +keys_in_list = g_list_length(GTK_LIST(key_ls)->children); +text_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(text))); + +/* Too many keys? */ +if(keys_in_list == MAX_ENCRYPTION_KEYS) + { + simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","Reached the Wep Keys Limit for this Interface."); + return; + } + +/* Check if key is correct */ +new_key = g_string_new(text_entered); + +g_strchug(new_key->str); +g_strchomp(new_key->str); + +if((new_key->len % 2) != 0) + { + simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","1) A Wep key must is an arbitrary length hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.\nThe number of characters must be even."); + return; + } + +for(i = 0; i < new_key->len; i++) + { + if(!g_ascii_isxdigit(new_key->str[i])) + { + simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","2) A Wep key must is an arbitrary length hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.\nThe number of characters must be even."); + return; + } + } + +/* If so... Add key */ +airpcap_add_key_to_list(key_ls,new_key->str); + +airpcap_if_selected->saved = FALSE; + +g_string_free(new_key,TRUE); +g_free(text_entered); + +window_destroy(GTK_WIDGET(data)); +return; +} + +/* + * Callback used to add a WEP key in the edit key box; + */ +static void +edit_key(GtkWidget *widget, gpointer data _U_) +{ +GtkWidget *text, + *key_ls, + *ok_bt; + +GString *new_key; + +gchar *text_entered = NULL; + +GtkWidget *label; + + +int keys_in_list = 0; +unsigned int i; + +text = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_TEXT_KEY); +ok_bt = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_OK_KEY); +key_ls = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_KEYLIST_KEY); +label = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_EDIT_KEY_LABEL_KEY); + +keys_in_list = g_list_length(GTK_LIST(key_ls)->children); +text_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(text))); + +/* Check if key is correct */ +new_key = g_string_new(text_entered); + +g_strchug(new_key->str); +g_strchomp(new_key->str); + +if((new_key->len % 2) != 0) + { + simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","1) A Wep key must is an arbitrary length hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.\nThe number of characters must be even."); + return; + } + +for(i = 0; i < new_key->len; i++) + { + if(!g_ascii_isxdigit(new_key->str[i])) + { + simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","2) A Wep key must is an arbitrary length hexadecimal number.\nThe valid characters are: 0123456789ABCDEF.\nThe number of characters must be even."); + return; + } + } + +/* If so... modify key */ +gtk_label_set_text(GTK_LABEL(label),new_key->str); + +airpcap_if_selected->saved = FALSE; + +g_string_free(new_key,TRUE); +g_free(text_entered); + +window_destroy(GTK_WIDGET(data)); +return; +} + +/* + * Callback for the 'Add Key' button. + */ +static void +airpcap_advanced_add_key_cb(GtkWidget *button, gpointer data _U_) +{ +/* Window */ +GtkWidget *add_key_w; + +/* Frame */ +GtkWidget *add_key_frame; + +/* Boxes */ +GtkWidget *main_box, /* vertical */ + *key_box, /* orizontal */ + *text_box, /* orizontal */ + *button_box;/* orizontal (packed to end)*/ + +/* Text Entry */ +GtkWidget *key_text_entry; + +/* Buttons */ +GtkWidget *key_ok_bt, + *key_cancel_bt; + +/* Key List Widget */ +GtkWidget *key_ls; + + /* Pop-up a new window */ + add_key_w = window_new (GTK_WINDOW_TOPLEVEL,"Add a WEP Key"); + + /* Connect events */ + SIGNAL_CONNECT(add_key_w, "delete_event",window_delete_event_cb, add_key_w); + SIGNAL_CONNECT(add_key_w, "destroy",add_key_w_destroy_cb, add_key_w); + + /* Sets the border width of the window. */ + gtk_container_set_border_width (GTK_CONTAINER (add_key_w), 5); + + /* Retrieve the key list widget pointer, and add it to the add_key_w */ + key_ls = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_KEYLIST_KEY); + OBJECT_SET_DATA(GTK_WIDGET(add_key_w),AIRPCAP_ADVANCED_KEYLIST_KEY,key_ls); + OBJECT_SET_DATA(GTK_WIDGET(add_key_w),AIRPCAP_ADVANCED_KEY,data); + + /* Create boxes */ + main_box = gtk_vbox_new(FALSE,1); + key_box = gtk_hbox_new(FALSE,1); + button_box = gtk_hbox_new(FALSE,1); + text_box = gtk_hbox_new(TRUE,1); + + /* Add the two sub boxes to the main box */ + gtk_box_pack_start(GTK_BOX(main_box), key_box, FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(main_box), button_box, FALSE, FALSE, 1); + + /* Add the main box to the main window */ + gtk_container_add(GTK_CONTAINER(add_key_w),main_box); + + /* Crete key frame */ + add_key_frame = gtk_frame_new(""); + gtk_frame_set_label(GTK_FRAME(add_key_frame),"Key"); + #if GTK_MAJOR_VERSION < 2 + gtk_widget_set_usize( GTK_WIDGET(add_key_frame), + 200, + -1 ); + #else + gtk_widget_set_size_request( GTK_WIDGET(add_key_frame), + 200, + -1 ); + #endif + + gtk_box_pack_start(GTK_BOX(key_box), add_key_frame, FALSE, FALSE, 1); + + /* Create and Add text entry*/ + key_text_entry = gtk_entry_new(); + OBJECT_SET_DATA(add_key_w, AIRPCAP_ADVANCED_ADD_KEY_TEXT_KEY, key_text_entry); + SIGNAL_CONNECT(key_text_entry, "activate", add_key, add_key_w ); + gtk_box_pack_start(GTK_BOX(text_box), key_text_entry, FALSE, FALSE, 1); + gtk_container_add(GTK_CONTAINER(add_key_frame),text_box); + gtk_container_set_border_width (GTK_CONTAINER (text_box), 5); + + /* Create and add buttons */ + key_ok_bt = gtk_button_new_with_label("OK"); + SIGNAL_CONNECT(key_ok_bt, "clicked", add_key, add_key_w ); + OBJECT_SET_DATA(add_key_w, AIRPCAP_ADVANCED_ADD_KEY_OK_KEY, key_ok_bt); + #if GTK_MAJOR_VERSION < 2 + gtk_widget_set_usize( GTK_WIDGET(key_ok_bt), + 50, + -1 ); + #else + gtk_widget_set_size_request( GTK_WIDGET(key_ok_bt), + 50, + -1 ); + #endif + key_cancel_bt = gtk_button_new_with_label("Cancel"); + SIGNAL_CONNECT(key_cancel_bt, "clicked", window_cancel_button_cb, add_key_w ); + #if GTK_MAJOR_VERSION < 2 + gtk_widget_set_usize( GTK_WIDGET(key_cancel_bt), + 50, + -1 ); + #else + gtk_widget_set_size_request( GTK_WIDGET(key_cancel_bt), + 50, + -1 ); + #endif + + gtk_box_pack_end(GTK_BOX(button_box), key_cancel_bt, FALSE, FALSE, 1); + gtk_box_pack_end(GTK_BOX(button_box), key_ok_bt, FALSE, FALSE, 1); + + /* Show all */ + gtk_widget_show(key_ok_bt); + gtk_widget_show(key_cancel_bt); + gtk_widget_show(key_text_entry); + gtk_widget_show(add_key_frame); + gtk_widget_show(text_box); + gtk_widget_show(button_box); + gtk_widget_show(key_box); + gtk_widget_show(main_box); + gtk_widget_show(add_key_w); +} + +/* + * Add key window destroy callback + */ +static void +add_key_w_destroy_cb(GtkWidget *button, gpointer data _U_) +{ +return; +} + +/* + * Edit key window destroy callback + */ +static void +edit_key_w_destroy_cb(GtkWidget *button, gpointer data _U_) +{ +return; +} + +/* + * Callback for the 'Remove Key' button. + */ +static void +airpcap_advanced_remove_key_cb(GtkWidget *button, gpointer data _U_) +{ +GtkList *key_ls; +GtkWidget *label; +GList *item = NULL; +gint n; + +/* retrieve key list */ +key_ls = GTK_LIST(data); + +/* Remove selected keys*/ +if(key_ls->selection != NULL) + { + item = g_list_nth(key_ls->selection,0); + if(item != NULL) + { + n = gtk_list_child_position(key_ls,item->data); + label = GTK_BIN(item->data)->child; + gtk_list_clear_items(key_ls,n,n+1); + } + } + +/* Need to save config... */ +airpcap_if_selected->saved = FALSE; +} + +/* + * Callback for the 'Edit Key' button. + */ +static void +airpcap_advanced_edit_key_cb(GtkWidget *button, gpointer data _U_) +{ +/* Window */ +GtkWidget *edit_key_w; + +/* Frame */ +GtkWidget *edit_key_frame; + +/* Boxes */ +GtkWidget *main_box, /* vertical */ + *key_box, /* orizontal */ + *text_box, /* orizontal */ + *button_box;/* orizontal (packed to end)*/ + +/* Text Entry */ +GtkWidget *key_text_entry; + +/* Buttons */ +GtkWidget *key_ok_bt, + *key_cancel_bt; + +/* Key List Widget */ +GtkWidget *key_ls; + +GtkWidget *label; +GList *item = NULL; +gint n; + +/* Retrieve the key list widget pointer, and add it to the edit_key_w */ +key_ls = OBJECT_GET_DATA(GTK_WIDGET(data),AIRPCAP_ADVANCED_KEYLIST_KEY); + +/* + * Check if a key has been selected. If not, just do nothing. + */ +if(GTK_LIST(key_ls)->selection != NULL) + { + item = g_list_nth(GTK_LIST(key_ls)->selection,0); + if(item != NULL) + { + /* Pop-up a new window */ + edit_key_w = window_new (GTK_WINDOW_TOPLEVEL,"Edit a WEP Key"); + + /* Connect events */ + SIGNAL_CONNECT(edit_key_w, "delete_event",window_delete_event_cb, edit_key_w); + SIGNAL_CONNECT(edit_key_w, "destroy",edit_key_w_destroy_cb, edit_key_w); + + /* Sets the border width of the window. */ + gtk_container_set_border_width (GTK_CONTAINER (edit_key_w), 5); + + OBJECT_SET_DATA(GTK_WIDGET(edit_key_w),AIRPCAP_ADVANCED_KEYLIST_KEY,key_ls); + OBJECT_SET_DATA(GTK_WIDGET(edit_key_w),AIRPCAP_ADVANCED_KEY,data); + + /* Create boxes */ + main_box = gtk_vbox_new(FALSE,1); + key_box = gtk_hbox_new(FALSE,1); + button_box = gtk_hbox_new(FALSE,1); + text_box = gtk_hbox_new(TRUE,1); + + /* Add the two sub boxes to the main box */ + gtk_box_pack_start(GTK_BOX(main_box), key_box, FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(main_box), button_box, FALSE, FALSE, 1); + + /* Add the main box to the main window */ + gtk_container_add(GTK_CONTAINER(edit_key_w),main_box); + + /* Crete key frame */ + edit_key_frame = gtk_frame_new(""); + gtk_frame_set_label(GTK_FRAME(edit_key_frame),"Key"); + #if GTK_MAJOR_VERSION < 2 + gtk_widget_set_usize( GTK_WIDGET(edit_key_frame), + 200, + -1 ); + #else + gtk_widget_set_size_request( GTK_WIDGET(edit_key_frame), + 200, + -1 ); + #endif + + gtk_box_pack_start(GTK_BOX(key_box), edit_key_frame, FALSE, FALSE, 1); + + /* Create and Add text entry*/ + key_text_entry = gtk_entry_new(); + /* Retrieve the currently selected entry */ + if(GTK_LIST(key_ls)->selection != NULL) + { + item = g_list_nth(GTK_LIST(key_ls)->selection,0); + if(item != NULL) + { + n = gtk_list_child_position(GTK_LIST(key_ls),item->data); + label = GTK_BIN(item->data)->child; + /* Pass the pointer as data */ + OBJECT_SET_DATA(edit_key_w,AIRPCAP_ADVANCED_EDIT_KEY_LABEL_KEY,label); + } + } + gtk_entry_set_text(GTK_ENTRY(key_text_entry),GTK_LABEL(label)->label); + OBJECT_SET_DATA(edit_key_w, AIRPCAP_ADVANCED_EDIT_KEY_TEXT_KEY, key_text_entry); + SIGNAL_CONNECT(key_text_entry, "activate", edit_key, edit_key_w ); + gtk_box_pack_start(GTK_BOX(text_box), key_text_entry, FALSE, FALSE, 1); + gtk_container_add(GTK_CONTAINER(edit_key_frame),text_box); + gtk_container_set_border_width (GTK_CONTAINER (text_box), 5); + + /* Create and add buttons */ + key_ok_bt = gtk_button_new_with_label("OK"); + SIGNAL_CONNECT(key_ok_bt, "clicked", edit_key, edit_key_w ); + OBJECT_SET_DATA(edit_key_w, AIRPCAP_ADVANCED_EDIT_KEY_OK_KEY, key_ok_bt); + #if GTK_MAJOR_VERSION < 2 + gtk_widget_set_usize( GTK_WIDGET(key_ok_bt), + 50, + -1 ); + #else + gtk_widget_set_size_request( GTK_WIDGET(key_ok_bt), + 50, + -1 ); + #endif + key_cancel_bt = gtk_button_new_with_label("Cancel"); + SIGNAL_CONNECT(key_cancel_bt, "clicked", window_cancel_button_cb, edit_key_w ); + #if GTK_MAJOR_VERSION < 2 + gtk_widget_set_usize( GTK_WIDGET(key_cancel_bt), + 50, + -1 ); + #else + gtk_widget_set_size_request( GTK_WIDGET(key_cancel_bt), + 50, + -1 ); + #endif + + gtk_box_pack_end(GTK_BOX(button_box), key_cancel_bt, FALSE, FALSE, 1); + gtk_box_pack_end(GTK_BOX(button_box), key_ok_bt, FALSE, FALSE, 1); + + /* Show all */ + gtk_widget_show(key_ok_bt); + gtk_widget_show(key_cancel_bt); + gtk_widget_show(key_text_entry); + gtk_widget_show(edit_key_frame); + gtk_widget_show(text_box); + gtk_widget_show(button_box); + gtk_widget_show(key_box); + gtk_widget_show(main_box); + gtk_widget_show(edit_key_w); + } + } +} + +/* + * Callback for the 'Move Key Up' button. + */ +static void +airpcap_advanced_move_key_up_cb(GtkWidget *button, gpointer data _U_) +{ +GtkList *key_ls; +GtkWidget *label,*nl_lb,*nl_item; +GList *new_list = NULL; +GList *item = NULL; +gint n; + +/* retrieve key list */ +key_ls = GTK_LIST(data); + +/* Remove selected keys*/ +if(key_ls->selection != NULL) + { + item = g_list_nth(key_ls->selection,0); + if(item != NULL) + { + n = gtk_list_child_position(key_ls,item->data); + if(n>0) + { + label = GTK_BIN(item->data)->child; + nl_lb = gtk_label_new(GTK_LABEL(label)->label); + gtk_list_clear_items(key_ls,n,n+1); + nl_item = gtk_list_item_new(); + gtk_misc_set_alignment (GTK_MISC (nl_lb), 0.0, 0.5); + gtk_container_add(GTK_CONTAINER(nl_item), nl_lb); + gtk_widget_show(nl_lb); + gtk_widget_show(nl_item); + new_list = g_list_append(new_list,nl_item); + gtk_list_insert_items(key_ls,new_list,n-1); + gtk_list_select_item(key_ls,n-1); + } + } + } + +/* Need to save config... */ +airpcap_if_selected->saved = FALSE; +} + +/* + * Callback for the 'Move Key Down' button. + */ +static void +airpcap_advanced_move_key_down_cb(GtkWidget *button, gpointer data _U_) +{ +GtkList *key_ls; +GtkWidget *label,*nl_lb,*nl_item; +GList *new_list = NULL; +GList *item = NULL; +unsigned int n; + +/* retrieve key list */ +key_ls = GTK_LIST(data); + +/* Remove selected keys*/ +if(key_ls->selection != NULL) + { + item = g_list_nth(key_ls->selection,0); + if(item != NULL) + { + n = gtk_list_child_position(key_ls,item->data); + if(n< (g_list_length(key_ls->children)-1)) + { + label = GTK_BIN(item->data)->child; + nl_lb = gtk_label_new(GTK_LABEL(label)->label); + gtk_list_clear_items(key_ls,n,n+1); + + nl_item = gtk_list_item_new(); + gtk_misc_set_alignment (GTK_MISC (nl_lb), 0.0, 0.5); + gtk_container_add(GTK_CONTAINER(nl_item), nl_lb); + gtk_widget_show(nl_lb); + gtk_widget_show(nl_item); + + new_list = g_list_append(new_list,nl_item); + gtk_list_insert_items(key_ls,new_list,n+1); + gtk_list_select_item(key_ls,n+1); + } + } + } + +/* Need to save config... */ +airpcap_if_selected->saved = FALSE; +} + +/* Turns the decryption on or off */ +static void +encryption_check_cb(GtkWidget *w, gpointer data) +{ +if( !block_advanced_signals && (airpcap_if_selected != NULL)) + { + if(airpcap_if_selected->DecryptionOn == AIRPCAP_DECRYPTION_ON) + { + airpcap_if_selected->DecryptionOn = AIRPCAP_DECRYPTION_OFF; + airpcap_if_selected->saved = FALSE; + } + else + { + airpcap_if_selected->DecryptionOn = AIRPCAP_DECRYPTION_ON; + airpcap_if_selected->saved = FALSE; + } + } +} + + +/* Called to create the airpcap settings' window */ +void +display_airpcap_advanced_cb(GtkWidget *w, gpointer data) +{ + /* Main window */ + GtkWidget *airpcap_advanced_w; + + /* Blink button */ + GtkWidget *blink_bt, + *channel_combo; + /* Combos */ + GtkWidget *interface_combo, + *capture_combo; + + /* check */ + GtkWidget *wrong_crc_combo; + + /* key list*/ + GtkWidget *key_ls; + + /* frames */ + GtkWidget *interface_frame, + *basic_frame, + *wep_frame; + /* boxes */ + GtkWidget *main_box, + *buttons_box_1, + *buttons_box_2, + *interface_box, + *basic_box, + *basic_combo_box, + *basic_check_box, + *basic_label_box, + *basic_wrong_box, + *wep_box, + *wep_sub_box, + *encryption_box, + *wep_buttons_box; + /* buttons */ + /* blink button is global */ + GtkWidget *add_new_key_bt, + *remove_key_bt, + *edit_key_bt, + *move_key_up_bt, + *move_key_down_bt, + *reset_configuration_bt, + *about_bt, + *apply_bt, + *ok_bt, + *cancel_bt; + /* combo */ + + /* shortcut to combo entry */ + GtkWidget *link_type_te, + *wrong_crc_te, + *channel_te; + /* check */ + /* global check buttons */ + GtkWidget *crc_check, + *encryption_check; + /* label */ + GtkWidget *channel_lb, + *wrong_lb, + *capture_lb; + /* text field */ + GtkWidget *key_text; + + /* widgets in the toolbar */ + GtkWidget *toolbar, + *toolbar_if_lb, + *toolbar_channel_cm, + *toolbar_wrong_crc_cm; + + /* other stuff */ + GList *channel_list,*capture_list; + GList *linktype_list = NULL; + gchar *channel_s,*capture_s; + + + /* user data - RETRIEVE pointers of toolbar widgets */ + toolbar = GTK_WIDGET(data); + toolbar_if_lb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_INTERFACE_KEY)); + toolbar_channel_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_KEY)); + toolbar_wrong_crc_cm= GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_WRONG_CRC_KEY)); + + /* gray out the toolbar */ + gtk_widget_set_sensitive(toolbar,FALSE); + + /* main window */ + /* global */ + + /* NULL to global widgets */ + blink_bt = NULL; + channel_combo = NULL; + block_advanced_signals = FALSE; + + /* the selected is the active, for now */ + airpcap_if_selected = airpcap_if_active; + + /* Create the new window */ + airpcap_advanced_w = window_new(GTK_WINDOW_TOPLEVEL, "Advanced Wireless Settings"); + + /* + * I will need the toolbar and the main widget in some callback, + * so I will add the toolbar pointer to the airpcap_advanced_w + */ + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_TOOLBAR_KEY,toolbar); + + /* Connect the callbacks */ + SIGNAL_CONNECT(airpcap_advanced_w, "delete_event", window_delete_event_cb, airpcap_advanced_w); + SIGNAL_CONNECT(airpcap_advanced_w, "destroy", airpcap_if_destroy_cb, airpcap_advanced_w); + + /* Set the size */ + /* Sets the border width of the window. */ + gtk_container_set_border_width (GTK_CONTAINER (airpcap_advanced_w), 10); + + /* Create the main box */ + main_box = gtk_vbox_new(FALSE,0); + + /* Create the button boxes */ + buttons_box_1 = gtk_hbox_new(FALSE,0); + buttons_box_2 = gtk_hbox_new(FALSE,0); + + /* Create the buttons for box 1 */ + reset_configuration_bt = gtk_button_new_with_label("Reset Configuration"); + SIGNAL_CONNECT(reset_configuration_bt, "clicked", airpcap_advanced_reset_configuration_cb, toolbar); + gtk_widget_show(reset_configuration_bt); + + about_bt = gtk_button_new_with_label("About"); + SIGNAL_CONNECT(about_bt, "clicked", airpcap_advanced_about_cb, toolbar); + gtk_widget_show(about_bt); + + /* Add them to box 1 */ + gtk_box_pack_start (GTK_BOX (buttons_box_1), reset_configuration_bt, FALSE, FALSE, 1); + gtk_box_pack_start (GTK_BOX (buttons_box_1), about_bt, FALSE, FALSE, 1); + + /* Create the buttons for box 2 */ + apply_bt = gtk_button_new_with_label("Apply"); + SIGNAL_CONNECT(apply_bt, "clicked", airpcap_advanced_apply_cb, airpcap_advanced_w); + gtk_widget_show(apply_bt); + + ok_bt = gtk_button_new_with_label("Ok"); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_OK_KEY,ok_bt); + window_set_cancel_button(airpcap_advanced_w, ok_bt, window_cancel_button_cb); + gtk_widget_show(ok_bt); + + cancel_bt = gtk_button_new_with_label("Cancel"); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CANCEL_KEY,cancel_bt); + window_set_cancel_button(airpcap_advanced_w, cancel_bt, window_cancel_button_cb); + gtk_widget_show(cancel_bt); + + /* Add them to box 2 */ + gtk_box_pack_end (GTK_BOX (buttons_box_2), cancel_bt, FALSE, FALSE, 1); + gtk_box_pack_end (GTK_BOX (buttons_box_2), apply_bt, FALSE, FALSE, 1); + gtk_box_pack_end (GTK_BOX (buttons_box_2), ok_bt, FALSE, FALSE, 1); + + /* Create the three main frames */ + interface_frame = gtk_frame_new(""); + gtk_frame_set_label(GTK_FRAME(interface_frame),"Interface"); + + basic_frame = gtk_frame_new(""); + gtk_frame_set_label(GTK_FRAME(basic_frame),"Basic Parameters"); + + wep_frame = gtk_frame_new(""); + gtk_frame_set_label(GTK_FRAME(wep_frame),"WEP Keys"); + + /* Create the three sub boxes */ + interface_box = gtk_hbox_new(FALSE,0); + basic_box = gtk_hbox_new(FALSE,0); + wep_box = gtk_vbox_new(FALSE,0); + + /* Fill the interface_box */ + if(airpcap_if_active != NULL) + { + interface_combo = gtk_label_new(airpcap_if_active->description); + } + else + { + interface_combo = gtk_label_new("No airpcap interface found!"); + gtk_widget_set_sensitive(main_box,FALSE); + } + + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_INTERFACE_KEY,interface_combo); + gtk_box_pack_start (GTK_BOX (interface_box), interface_combo, TRUE, TRUE, 0); + gtk_widget_show(interface_combo); + + /* blink led button (BEFORE interface_combo, 'cause its callback will need blink_bt)*/ + blink_bt = gtk_button_new_with_label(" Blink Led "); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_BLINK_KEY,blink_bt); + gtk_box_pack_end (GTK_BOX (interface_box), blink_bt, FALSE, FALSE, 0); + SIGNAL_CONNECT(blink_bt, "clicked", blink_cb, NULL); + gtk_widget_show(blink_bt); + + gtk_container_set_border_width (GTK_CONTAINER (interface_box), 10); + + /* Fill the basic_box */ + /* Create the two vertical boxes for combo and check */ + basic_combo_box = gtk_vbox_new(TRUE,0); + basic_check_box = gtk_vbox_new(TRUE,0); + basic_label_box = gtk_vbox_new(TRUE,0); + + /* Create the Wrong CRC horiziontal box */ + basic_wrong_box = gtk_hbox_new(FALSE,0); + + /* Fill the label vbox */ + channel_lb = gtk_label_new("Channel: "); + gtk_label_set_justify(GTK_LABEL(channel_lb),GTK_JUSTIFY_LEFT); + gtk_box_pack_start (GTK_BOX (basic_label_box), channel_lb, TRUE, TRUE, 0); + gtk_widget_show(channel_lb); + capture_lb = gtk_label_new("Capture Type:"); + gtk_label_set_justify(GTK_LABEL(capture_lb),GTK_JUSTIFY_LEFT); + gtk_box_pack_start (GTK_BOX (basic_label_box), capture_lb, TRUE, TRUE, 0); + gtk_widget_show(capture_lb); + + /* Create the two combo boxes */ + channel_combo = gtk_combo_new(); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CHANNEL_KEY,channel_combo); + + channel_list = NULL; + channel_list = g_list_append(channel_list, "1"); + channel_list = g_list_append(channel_list, "2"); + channel_list = g_list_append(channel_list, "3"); + channel_list = g_list_append(channel_list, "4"); + channel_list = g_list_append(channel_list, "5"); + channel_list = g_list_append(channel_list, "6"); + channel_list = g_list_append(channel_list, "7"); + channel_list = g_list_append(channel_list, "8"); + channel_list = g_list_append(channel_list, "9"); + channel_list = g_list_append(channel_list, "10"); + channel_list = g_list_append(channel_list, "11"); + channel_list = g_list_append(channel_list, "12"); + channel_list = g_list_append(channel_list, "13"); + channel_list = g_list_append(channel_list, "14"); + gtk_combo_set_popdown_strings( GTK_COMBO(channel_combo), channel_list) ; + + /* Select the first entry */ + if(airpcap_if_selected != NULL) + { + channel_s = g_strdup_printf("%d",airpcap_if_selected->channel); + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_combo)->entry), channel_s); + } + + channel_te = GTK_COMBO(channel_combo)->entry; + gtk_editable_set_editable(GTK_EDITABLE(channel_te),FALSE); + SIGNAL_CONNECT(channel_te, "changed", channel_changed_cb, channel_te); + gtk_box_pack_start (GTK_BOX (basic_combo_box), channel_combo, FALSE, FALSE, 0); + gtk_widget_show(channel_combo); + + capture_combo = gtk_combo_new(); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_LINK_TYPE_KEY,capture_combo); + capture_list = NULL; + capture_list = g_list_append(capture_list, AIRPCAP_LINK_TYPE_NAME_802_11_ONLY); + capture_list = g_list_append(capture_list, AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO); + gtk_combo_set_popdown_strings( GTK_COMBO(capture_combo), capture_list) ; + + capture_s = NULL; + if(airpcap_if_selected != NULL) + { + if(airpcap_if_selected->linkType == AIRPCAP_LT_802_11) + capture_s = g_strdup_printf("%s",AIRPCAP_LINK_TYPE_NAME_802_11_ONLY); + else if(airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_RADIO) + capture_s = g_strdup_printf("%s",AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO); + if(capture_s != NULL) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(capture_combo)->entry), capture_s); + } + g_free(capture_s); + + link_type_te = GTK_COMBO(capture_combo)->entry; + gtk_editable_set_editable(GTK_EDITABLE(link_type_te),FALSE); + SIGNAL_CONNECT(link_type_te, "changed", link_type_changed_cb, link_type_te); + gtk_box_pack_start (GTK_BOX (basic_combo_box), capture_combo, FALSE, FALSE, 1); + gtk_widget_show(capture_combo); + + /* Create the two check boxes */ + crc_check = gtk_check_button_new_with_label("Include 802.11 FCS in Frames"); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CRC_KEY,crc_check); + + /* Fcs Presence check box */ + if(airpcap_if_selected != NULL) + { + if(airpcap_if_selected->IsFcsPresent) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(crc_check),TRUE); + else + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(crc_check),FALSE); + } + + SIGNAL_CONNECT(crc_check,"toggled",crc_check_cb,NULL); + gtk_box_pack_start (GTK_BOX (basic_check_box), crc_check, FALSE, FALSE, 0); + gtk_widget_show(crc_check); + + /* CRC Filter label */ + wrong_lb = gtk_label_new("FCS Filter:"); + gtk_box_pack_start (GTK_BOX (basic_wrong_box), wrong_lb, FALSE, FALSE, 0); + gtk_widget_show(wrong_lb); + + /* CRC Filter combo */ + wrong_crc_combo = gtk_combo_new(); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_WRONG_CRC_KEY,wrong_crc_combo); + + linktype_list = g_list_append(linktype_list, AIRPCAP_VALIDATION_TYPE_NAME_ALL); + linktype_list = g_list_append(linktype_list, AIRPCAP_VALIDATION_TYPE_NAME_CORRECT); + linktype_list = g_list_append(linktype_list, AIRPCAP_VALIDATION_TYPE_NAME_CORRUPT); + + gtk_combo_set_popdown_strings( GTK_COMBO(wrong_crc_combo), linktype_list) ; + + wrong_crc_te = GTK_COMBO(wrong_crc_combo)->entry; + + if(airpcap_if_selected != NULL) + { + airpcap_validation_type_combo_set_by_type(wrong_crc_combo,airpcap_if_selected->CrcValidationOn); + } + + gtk_editable_set_editable(GTK_EDITABLE(wrong_crc_te),FALSE); + SIGNAL_CONNECT(wrong_crc_te,"changed",wrong_crc_combo_cb,wrong_crc_te); + gtk_box_pack_start (GTK_BOX (basic_wrong_box), wrong_crc_combo, FALSE, FALSE, 0); + gtk_widget_show(wrong_crc_combo); + + gtk_box_pack_start(GTK_BOX(basic_check_box), basic_wrong_box, FALSE, FALSE, 0); + gtk_widget_show(basic_wrong_box); + + /* Add the vertical inner boxes to the basic_box */ + gtk_box_pack_start (GTK_BOX (basic_box), basic_label_box, FALSE, FALSE, 10); + gtk_box_pack_start (GTK_BOX (basic_box), basic_combo_box, FALSE, FALSE, 10); + gtk_box_pack_start (GTK_BOX (basic_box), basic_check_box, FALSE, FALSE, 10); + + gtk_container_set_border_width (GTK_CONTAINER (basic_box), 10); + + /* Fill the wep_box */ + wep_sub_box = gtk_hbox_new(FALSE,1); + gtk_widget_show(wep_sub_box); + encryption_box = gtk_hbox_new(FALSE,1); + gtk_widget_show(encryption_box); + + /* encryption enabled box */ + encryption_check = gtk_check_button_new_with_label("Enable WEP Decryption"); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_DECRYPTION_KEY,encryption_check); + + /* Fcs Presence check box */ + if(airpcap_if_selected != NULL) + { + if(airpcap_if_selected->DecryptionOn == AIRPCAP_DECRYPTION_ON) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(encryption_check),TRUE); + else + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(encryption_check),FALSE); + } + + SIGNAL_CONNECT(encryption_check,"toggled",encryption_check_cb,NULL); + gtk_box_pack_start (GTK_BOX (encryption_box), encryption_check, FALSE, FALSE, 0); + gtk_widget_show(encryption_check); + + /* WEP text box */ + key_text = scrolled_window_new(NULL, NULL); + /* never use a scrollbar in x direction, show the complete relation string */ + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(key_text), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + #if GTK_MAJOR_VERSION >= 2 + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(key_text), + GTK_SHADOW_IN); + #endif + + /* add WEP keys if present... */ + key_ls = gtk_list_new(); + gtk_list_set_selection_mode(GTK_LIST(key_ls), GTK_SELECTION_SINGLE); + OBJECT_SET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEYLIST_KEY,key_ls); + + airpcap_fill_key_list(key_ls,airpcap_if_selected); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(key_text),key_ls); + gtk_widget_show(key_ls); + gtk_box_pack_start (GTK_BOX (wep_sub_box), key_text, TRUE, TRUE, 0); + gtk_widget_show(key_text); + + /* WEP buttons */ + wep_buttons_box = gtk_vbox_new(FALSE,0); + + /* Create and add buttons */ + add_new_key_bt = gtk_button_new_with_label("Add New Key"); + SIGNAL_CONNECT(add_new_key_bt, "clicked", airpcap_advanced_add_key_cb, airpcap_advanced_w); + gtk_box_pack_start (GTK_BOX (wep_buttons_box), add_new_key_bt, FALSE, FALSE, 0); + gtk_widget_show(add_new_key_bt); + remove_key_bt = gtk_button_new_with_label("Remove Key"); + SIGNAL_CONNECT(remove_key_bt, "clicked", airpcap_advanced_remove_key_cb, key_ls); + gtk_box_pack_start (GTK_BOX (wep_buttons_box), remove_key_bt, FALSE, FALSE, 0); + gtk_widget_show(remove_key_bt); + edit_key_bt = gtk_button_new_with_label("Edit Key"); + SIGNAL_CONNECT(edit_key_bt, "clicked", airpcap_advanced_edit_key_cb, airpcap_advanced_w); + gtk_box_pack_start (GTK_BOX (wep_buttons_box), edit_key_bt, FALSE, FALSE, 0); + gtk_widget_show(edit_key_bt); + move_key_up_bt = gtk_button_new_with_label("Move Key Up"); + SIGNAL_CONNECT(move_key_up_bt, "clicked", airpcap_advanced_move_key_up_cb, key_ls); + gtk_box_pack_start (GTK_BOX (wep_buttons_box), move_key_up_bt, FALSE, FALSE, 0); + gtk_widget_show(move_key_up_bt); + move_key_down_bt = gtk_button_new_with_label("Move Key Down"); + SIGNAL_CONNECT(move_key_down_bt, "clicked", airpcap_advanced_move_key_down_cb, key_ls); + gtk_box_pack_start (GTK_BOX (wep_buttons_box), move_key_down_bt, FALSE, FALSE, 0); + gtk_widget_show(move_key_down_bt); + + gtk_box_pack_end (GTK_BOX (wep_sub_box), wep_buttons_box, FALSE, FALSE, 0); + + gtk_container_set_border_width (GTK_CONTAINER (wep_sub_box), 10); + + gtk_box_pack_start (GTK_BOX (wep_box), encryption_box, FALSE, FALSE,0); + gtk_box_pack_start (GTK_BOX (wep_box), wep_sub_box, FALSE, FALSE,0); + gtk_widget_show(wep_sub_box); + + /* Add them to the frames */ + gtk_container_add(GTK_CONTAINER(interface_frame),interface_box); + gtk_container_add(GTK_CONTAINER(basic_frame),basic_box); + gtk_container_add(GTK_CONTAINER(wep_frame),wep_box); + + /* Add frames to the main box */ + gtk_box_pack_start (GTK_BOX (main_box), interface_frame, FALSE, FALSE, 1); + gtk_box_pack_start (GTK_BOX (main_box), basic_frame, FALSE, FALSE, 1); + gtk_box_pack_start (GTK_BOX (main_box), wep_frame, FALSE, FALSE, 1); + + /* Add buttons' boxes to the main box */ + gtk_box_pack_start (GTK_BOX (main_box), buttons_box_2, FALSE, FALSE, 1); + + /* Add the main box to the main window */ + gtk_container_add(GTK_CONTAINER(airpcap_advanced_w),main_box); + + /* SHOW EVERYTHING */ + /* Show the WEP key buttons */ + gtk_widget_show (wep_buttons_box); + + /* Show the combo and check boxes */ + gtk_widget_show (basic_label_box); + gtk_widget_show (basic_combo_box); + gtk_widget_show (basic_check_box); + + /* Show the button boxes */ + gtk_widget_show (buttons_box_1); + gtk_widget_show (buttons_box_2); + + /* Show the frames */ + gtk_widget_show (interface_frame); + gtk_widget_show (basic_frame); + gtk_widget_show (wep_frame); + + /* Show the sub main boxes */ + gtk_widget_show (interface_box); + gtk_widget_show (basic_box); + gtk_widget_show (wep_box); + + /* Show the main box */ + gtk_widget_show (main_box); + + /* Show the window */ + gtk_widget_show (airpcap_advanced_w); +} + +#endif /* HAVE_AIRPCAP */ |