aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/Makefile.nmake2
-rw-r--r--gtk/airpcap_dlg.c374
-rw-r--r--gtk/airpcap_dlg.h29
-rw-r--r--gtk/airpcap_gui_utils.c454
-rw-r--r--gtk/airpcap_gui_utils.h34
-rw-r--r--gtk/capture_dlg.c8
-rw-r--r--gtk/capture_if_dlg.c20
-rw-r--r--gtk/keys.h2
-rw-r--r--gtk/main.c222
9 files changed, 632 insertions, 513 deletions
diff --git a/gtk/Makefile.nmake b/gtk/Makefile.nmake
index 9ab577f026..96c18a365b 100644
--- a/gtk/Makefile.nmake
+++ b/gtk/Makefile.nmake
@@ -10,7 +10,7 @@ include ..\config.nmake
CFLAGS=-WX -DHAVE_CONFIG_H /I.. /I../wiretap $(GTK_CFLAGS) $(GNUTLS_CFLAGS) \
/I$(PCAP_DIR)\WPCAP\LIBPCAP /I$(PCAP_DIR)\WPCAP\LIBPCAP\bpf \
/I$(PCAP_DIR)\WPCAP\LIBPCAP\lbl \
- /I$(PCAP_DIR)\include $(NET_SNMP_CFLAGS) \
+ /I$(PCAP_DIR)\include $(NET_SNMP_CFLAGS) $(AIRPCAP_CFLAGS) \
/Zm800 -D_U_="" -D_NEED_VAR_IMPORT_ $(LOCAL_CFLAGS) \
$(PORTAUDIO_CFLAGS) \
$(HHC_CFLAGS)
diff --git a/gtk/airpcap_dlg.c b/gtk/airpcap_dlg.c
index ab92fa39fc..dd4881efa6 100644
--- a/gtk/airpcap_dlg.c
+++ b/gtk/airpcap_dlg.c
@@ -24,6 +24,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@@ -39,6 +40,7 @@
#include <epan/filesystem.h>
#include <epan/prefs.h>
#include <epan/prefs-int.h>
+#include <epan/crypt/wep-wpadefs.h>
#include <pcap.h>
@@ -375,8 +377,7 @@ static void
on_channel_en_changed(GtkWidget *w _U_, gpointer data)
{
const gchar *s;
-
- s = gtk_entry_get_text(GTK_ENTRY(w));
+ ULONG ch_freq;
if ( !block_advanced_signals && (data != NULL) && (w != NULL) )
{
@@ -385,244 +386,65 @@ on_channel_en_changed(GtkWidget *w _U_, gpointer data)
{
if (airpcap_if_selected != NULL)
{
- airpcap_if_selected->channel = airpcap_get_channel_number(s);
+ ch_freq = airpcap_get_frequency_from_str(s);
+ airpcap_if_active->channelInfo.Frequency = ch_freq;
airpcap_if_selected->saved = FALSE;
+ airpcap_update_channel_offset_cb(airpcap_if_selected, ch_freq, GTK_WIDGET(data));
}
}
}
}
/*
- * Changed callback for the capture type combobox
+ * Changed callback for the channel offset combobox
*/
static void
-on_capture_type_en_changed(GtkWidget *w _U_, gpointer data)
+on_channel_offset_cb_changed(GtkWidget *w _U_, gpointer data)
{
const gchar *s;
-
- s = gtk_entry_get_text(GTK_ENTRY(w));
+ gchar offset;
if ( !block_advanced_signals && (data != NULL) && (w != NULL) )
{
+ s = gtk_entry_get_text(GTK_ENTRY(w));
if ((g_strcasecmp("",s)))
{
- airpcap_if_selected->linkType = airpcap_get_link_type(s);
- airpcap_if_selected->saved = FALSE;
+ if (airpcap_if_selected != NULL)
+ {
+ sscanf(s,"%d",&offset);
+ airpcap_if_selected->channelInfo.ExtChannel = offset;
+ airpcap_if_selected->saved = FALSE;
+ }
}
}
}
/*
- * Activate callback for the adapter combobox
+ * Changed callback for the capture type combobox
*/
static void
-combo_if_activate_cb(GtkWidget *entry _U_, gpointer data)
-{
-}
-
-/*
- * 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)
+on_capture_type_en_changed(GtkWidget *w _U_, gpointer data)
{
- GtkWidget* interface_combo;
- GtkWidget* key_ls;
+ const gchar *s;
- /* 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));
+ s = gtk_entry_get_text(GTK_ENTRY(w));
- switch (btn)
+ if ( !block_advanced_signals && (data != NULL) && (w != NULL) )
{
- 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;
+ if ((g_strcasecmp("",s)))
+ {
+ airpcap_if_selected->linkType = airpcap_get_link_type(s);
+ airpcap_if_selected->saved = FALSE;
+ }
}
}
/*
- * 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
+ * Activate callback for the adapter combobox
*/
-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)
+static void
+combo_if_activate_cb(GtkWidget *entry _U_, 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_FCS_CHECK_KEY));
- wrong_crc_combo = GTK_WIDGET(OBJECT_GET_DATA(main_w,AIRPCAP_ADVANCED_FCS_FILTER_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);
-
- /* Enable the signals again */
- block_advanced_signals = FALSE;
- }
}
/*
@@ -636,7 +458,7 @@ void update_blink(gpointer data _U_)
sel = (airpcap_if_info_t*)data;
- ad = airpcap_if_open(get_airpcap_name_from_description(airpcap_if_list, sel->description), ebuf);
+ ad = airpcap_if_open(sel->name, ebuf);
if (ad)
{
if (sel->led)
@@ -834,7 +656,7 @@ on_key_management_apply_bt_clicked(GtkWidget *button, gpointer data _U_)
update_decryption_mode_cm(toolbar_cm);
/* Redissect all the packets, and re-evaluate the display filter. */
-/** //cf_redissect_packets(&cfile); **/
+/** cf_redissect_packets(&cfile); **/
}
/*
* Callback for the Wireless Advanced Settings 'Apply' button.
@@ -849,6 +671,7 @@ on_advanced_apply_bt_clicked(GtkWidget *button, gpointer data _U_)
GtkWidget *toolbar,
*toolbar_if_lb,
*toolbar_channel_cm,
+ *toolbar_channel_offset_cb,
*toolbar_wrong_crc_cm;
/* retrieve main window */
@@ -857,9 +680,10 @@ on_advanced_apply_bt_clicked(GtkWidget *button, gpointer data _U_)
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_FCS_FILTER_KEY));
+ 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_channel_offset_cb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY));
+ toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
/* Save the configuration (for all ) */
airpcap_save_selected_if_configuration(airpcap_if_selected);
@@ -868,8 +692,9 @@ on_advanced_apply_bt_clicked(GtkWidget *button, gpointer data _U_)
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_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
- airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
+ airpcap_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
+ airpcap_update_channel_offset_combo_entry(GTK_WIDGET(toolbar_channel_offset_cb),airpcap_if_selected->channelInfo.ExtChannel);
+ airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
}
}
@@ -2101,7 +1926,7 @@ update_decryption_mode_list(GtkWidget *w)
enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_NONE);
enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK);
- if (airpcap_if_list != NULL)
+ if (airpcap_if_list != NULL && g_list_length(airpcap_if_list) > 0)
{
enable_decryption_cb_items = g_list_append (enable_decryption_cb_items, AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP);
}
@@ -2144,11 +1969,13 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
GtkWidget *basic_parameters_al;
GtkWidget *basic_parameters_tb;
GtkWidget *channel_lb;
+ GtkWidget *channel_offset_lb;
GtkWidget *capture_type_lb;
GtkWidget *channel_cm;
GList *channel_cm_items = NULL;
GtkWidget *channel_en;
GtkWidget *capture_type_cm;
+ GtkWidget *channel_offset_cb;
GList *capture_type_cm_items = NULL;
GtkWidget *capture_type_en;
GtkWidget *fcs_ck;
@@ -2166,6 +1993,9 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
GtkWidget *apply_bt;
GtkWidget *cancel_bt;
+ /* for loop counter */
+ guint i;
+
/* widgets in the toolbar */
GtkWidget *toolbar,
*toolbar_if_lb,
@@ -2324,32 +2154,49 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
capture_type_lb = gtk_label_new ("Capture Type:");
gtk_widget_set_name (capture_type_lb, "capture_type_lb");
gtk_widget_show (capture_type_lb);
- gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_lb, 0, 1, 1,
- 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0),
+ gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_lb, 0, 1, 2,
+ 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0),
0, 0);
gtk_misc_set_alignment (GTK_MISC (capture_type_lb), 0, 0.5);
+ /* Start: Channel offset label */
+ channel_offset_lb = gtk_label_new ("Channel Offset:");
+ gtk_widget_set_name (channel_offset_lb, "channel_offset_lb");
+ gtk_widget_show (channel_offset_lb);
+ gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_lb, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (channel_offset_lb), 0, 0.5);
+ /* End: Channel offset label */
+
+ /* Start: Channel offset combo box */
+ channel_offset_cb = gtk_combo_new();
+ gtk_widget_set_name (channel_offset_cb, "channel_offset_cb");
+ gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(channel_offset_cb)->entry),FALSE);
+
+ airpcap_update_channel_offset_cb(airpcap_if_selected, airpcap_if_selected->channelInfo.Frequency, channel_offset_cb);
+ airpcap_update_channel_offset_combo_entry(channel_offset_cb, airpcap_if_selected->channelInfo.ExtChannel);
+
+ gtk_widget_show(channel_offset_cb);
+
+ gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_offset_cb, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ /* End: Channel offset combo box */
+
channel_cm = gtk_combo_new ();
gtk_widget_set_name (channel_cm, "channel_cm");
gtk_widget_show (channel_cm);
gtk_table_attach (GTK_TABLE (basic_parameters_tb), channel_cm, 1, 2, 0, 1,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "1");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "2");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "3");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "4");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "5");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "6");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "7");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "8");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "9");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "10");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "11");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "12");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "13");
- channel_cm_items = g_list_append (channel_cm_items, (gpointer) "14");
- gtk_combo_set_popdown_strings (GTK_COMBO (channel_cm), channel_cm_items);
+
+ if (airpcap_if_selected != NULL && airpcap_if_selected->pSupportedChannels != NULL && airpcap_if_selected->numSupportedChannels > 0){
+ for (i = 0; i<(airpcap_if_selected->numSupportedChannels); i++){
+ channel_cm_items = g_list_append(channel_cm_items, airpcap_get_channelstr_from_freq(airpcap_if_selected->pSupportedChannels[i].Frequency));
+ }
+ gtk_combo_set_popdown_strings( GTK_COMBO(channel_cm), channel_cm_items) ;
+ }
/* Select the first entry */
if (airpcap_if_selected != NULL)
@@ -2367,13 +2214,18 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
capture_type_cm = gtk_combo_new ();
gtk_widget_set_name (capture_type_cm, "capture_type_cm");
gtk_widget_show (capture_type_cm);
- gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_cm, 1, 2, 1,
- 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ gtk_table_attach (GTK_TABLE (basic_parameters_tb), capture_type_cm, 1, 2, 2,
+ 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
capture_type_cm_items =
g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_ONLY);
capture_type_cm_items =
g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO);
+
+ if (airpcap_get_dll_state() == AIRPCAP_DLL_OK){
+ capture_type_cm_items =
+ g_list_append (capture_type_cm_items, (gpointer) AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI);
+ }
gtk_combo_set_popdown_strings (GTK_COMBO (capture_type_cm),
capture_type_cm_items);
@@ -2381,10 +2233,14 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
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 (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);
+ }else if (airpcap_if_selected->linkType == AIRPCAP_LT_802_11_PLUS_PPI){
+ capture_s = g_strdup_printf("%s",AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI);
+ }
+
if (capture_s != NULL) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(capture_type_cm)->entry), capture_s);
}
g_free(capture_s);
@@ -2421,7 +2277,7 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
"basic_parameters_fcs_h_box");
gtk_widget_show (basic_parameters_fcs_h_box);
gtk_table_attach (GTK_TABLE (basic_parameters_tb),
- basic_parameters_fcs_h_box, 2, 3, 1, 2,
+ basic_parameters_fcs_h_box, 2, 3, 2, 3,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (GTK_FILL), 3, 0);
@@ -2492,7 +2348,7 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
#endif
gtk_widget_set_name (reset_configuration_bt, "reset_configuration_bt");
/* gtk_widget_show (reset_configuration_bt); */
- gtk_container_add (GTK_CONTAINER (left_h_button_box),
+ gtk_container_add (GTK_CONTAINER (low_buttons_h_box),
reset_configuration_bt);
GTK_WIDGET_SET_FLAGS (reset_configuration_bt, GTK_CAN_DEFAULT);
@@ -2520,7 +2376,8 @@ display_airpcap_advanced_cb(GtkWidget *w, gpointer data)
SIGNAL_CONNECT (blink_bt, "clicked", on_what_s_this_bt_clicked, airpcap_advanced_w);
}
- SIGNAL_CONNECT (channel_en, "changed",on_channel_en_changed, airpcap_advanced_w);
+ SIGNAL_CONNECT (channel_en, "changed",on_channel_en_changed, channel_offset_cb);
+ SIGNAL_CONNECT (GTK_COMBO(channel_offset_cb)->entry, "changed",on_channel_offset_cb_changed, airpcap_advanced_w);
SIGNAL_CONNECT (capture_type_en, "changed",on_capture_type_en_changed, airpcap_advanced_w);
SIGNAL_CONNECT (fcs_ck, "toggled",on_fcs_ck_toggled, airpcap_advanced_w);
SIGNAL_CONNECT (fcs_filter_en, "changed",on_fcs_filter_en_changed, airpcap_advanced_w);
@@ -2577,26 +2434,28 @@ on_advanced_ok_bt_clicked(GtkWidget *button, gpointer data _U_)
GtkWidget *toolbar,
*toolbar_if_lb,
*toolbar_channel_cm,
+ *toolbar_channel_offset_cb,
*toolbar_wrong_crc_cm,
*advanced_bt;
/* Retrieve the GUI object pointers */
- airpcap_advanced_w = GTK_WIDGET(data);
- interface_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_INTERFACE_KEY));
- channel_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CHANNEL_KEY));
- capture_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_LINK_TYPE_KEY));
- crc_check = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_CHECK_KEY));
- wrong_crc_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_FILTER_KEY));
- blink_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_BLINK_KEY));
- cancel_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CANCEL_KEY));
- ok_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_OK_KEY));
- advanced_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEY));
-
- toolbar = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_TOOLBAR_KEY));
+ airpcap_advanced_w = GTK_WIDGET(data);
+ interface_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_INTERFACE_KEY));
+ channel_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CHANNEL_KEY));
+ capture_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_LINK_TYPE_KEY));
+ crc_check = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_CHECK_KEY));
+ wrong_crc_combo = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_FCS_FILTER_KEY));
+ blink_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_BLINK_KEY));
+ cancel_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_CANCEL_KEY));
+ ok_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_OK_KEY));
+ advanced_bt = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_w,AIRPCAP_ADVANCED_KEY));
+
+ toolbar = GTK_WIDGET(OBJECT_GET_DATA(airpcap_advanced_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_channel_offset_cb = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY));
toolbar_wrong_crc_cm = GTK_WIDGET(OBJECT_GET_DATA(toolbar,AIRPCAP_TOOLBAR_FCS_FILTER_KEY));
/* Stop blinking ALL leds (go through the airpcap_if_list) */
@@ -2624,14 +2483,13 @@ on_advanced_ok_bt_clicked(GtkWidget *button, gpointer data _U_)
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_update_channel_combo(GTK_WIDGET(toolbar_channel_cm),airpcap_if_selected);
-
+ airpcap_update_channel_offset_combo_entry(GTK_WIDGET(toolbar_channel_offset_cb),airpcap_if_selected->channelInfo.ExtChannel);
airpcap_validation_type_combo_set_by_type(toolbar_wrong_crc_cm,airpcap_if_selected->CrcValidationOn);
}
/* 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)
+ if ( get_airpcap_if_from_name(airpcap_if_list,airpcap_if_active->description) != NULL)
{
airpcap_set_toolbar_start_capture(airpcap_if_active);
}
@@ -3102,11 +2960,11 @@ on_key_management_ok_bt_clicked(GtkWidget *button, gpointer data _U_)
write_prefs_to_file();
/* If interface active is airpcap, set sensitive TRUE for airpcap toolbar */
- if (airpcap_if_list != NULL)
+ if (airpcap_if_list != NULL && g_list_length(airpcap_if_list) > 0)
{
if (airpcap_if_active != NULL)
{
- if ( get_airpcap_if_by_name(airpcap_if_list,airpcap_if_active->description) != NULL)
+ if ( get_airpcap_if_from_name(airpcap_if_list,airpcap_if_active->description) != NULL)
{
airpcap_set_toolbar_start_capture(airpcap_if_active);
}
diff --git a/gtk/airpcap_dlg.h b/gtk/airpcap_dlg.h
index e5fbcc904d..82cc3373c9 100644
--- a/gtk/airpcap_dlg.h
+++ b/gtk/airpcap_dlg.h
@@ -51,29 +51,6 @@ void
on_add_key_w_destroy(GtkWidget *button, gpointer data _U_);
/*
- * 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);
-
-/* user confirmed the "Save settings..." dialog */
-void
-airpcap_dialog_save_before_closing_cb(gpointer dialog _U_, gint btn, gpointer data);
-
-/*
- * Pop-up window, used to ask the user if he wants to save the selected interface settings
- */
-void
-airpcap_ask_for_save(GtkWidget *entry _U_, gpointer data);
-
-/*
- * Function used to change the selected interface and advanced dialog box
- */
-void
-airpcap_change_if(GtkWidget *entry _U_, gpointer data);
-
-/*
* Fill the interface combo box specified
*/
void
@@ -262,12 +239,6 @@ static void
combo_if_activate_cb(GtkWidget *w _U_, gpointer data);
/*
- * Pop-up window that appears when user confirms the "Save settings..." dialog
- */
-static void
-airpcap_dialog_save_cb(GtkWidget* dialog _U_, gint btn, gpointer data);
-
-/*
* Thread function used to blink the led
*/
void update_blink(gpointer data _U_);
diff --git a/gtk/airpcap_gui_utils.c b/gtk/airpcap_gui_utils.c
index f5d2abce59..fc413fd1bb 100644
--- a/gtk/airpcap_gui_utils.c
+++ b/gtk/airpcap_gui_utils.c
@@ -54,6 +54,9 @@
#include "keys.h"
+/* Controls the releay of settings back to the adapter. */
+gboolean change_airpcap_settings = FALSE;
+
/*
* Used to retrieve a string containing a list of all the channels
* on which at least one adapter is capturing. This is true
@@ -63,37 +66,37 @@
gchar*
airpcap_get_all_channels_list(airpcap_if_info_t* if_info)
{
- gchar *channels;
+ gchar *frequencies;
gchar *tmp;
guint n,i;
GList *current_item;
airpcap_if_info_t* current_adapter;
/* Allocate the string used to store the ASCII representation of the WEP key */
- channels = (gchar*)g_malloc(sizeof(gchar)*128);
+ frequencies = (gchar*)g_malloc(sizeof(gchar)*128);
/* Make sure that the first char is '\0' in order to make g_strlcat() work */
- channels[0]='\0';
+ frequencies[0]='\0';
if(airpcap_if_is_any(if_info))
{
- n = g_list_length(airpcap_if_list);
-
- for(i = 0; i < n; i++)
- {
- current_item = g_list_nth(airpcap_if_list,i);
- current_adapter = (airpcap_if_info_t*)current_item->data;
- if(current_adapter != if_info)
- {
- tmp = g_strdup_printf("%d",current_adapter->channel);
- g_strlcat(channels,tmp,128);
- g_free(tmp);
-
- if(i<(n-1)) g_strlcat(channels,",",128);
- }
- }
+ n = g_list_length(airpcap_if_list);
+
+ for(i = 0; i < n; i++)
+ {
+ current_item = g_list_nth(airpcap_if_list,i);
+ current_adapter = (airpcap_if_info_t*)current_item->data;
+ if(current_adapter != if_info && g_strncasecmp("AirPcap USB wireless capture adapter nr.", current_adapter->description, 40) == 0)
+ {
+ tmp = g_strdup_printf("%d",current_adapter->channelInfo.Frequency);
+ g_strlcat(frequencies,tmp,128);
+ g_free(tmp);
+
+ if(i<(n-1)) g_strlcat(frequencies,",",128);
+ }
+ }
}
- return channels;
+ return frequencies;
}
/*
@@ -105,6 +108,8 @@ airpcap_set_toolbar_start_capture(airpcap_if_info_t* if_info)
GtkWidget *airpcap_toolbar_label;
GtkWidget *airpcap_toolbar_channel;
GtkWidget *airpcap_toolbar_channel_lb;
+ GtkWidget *airpcap_toolbar_channel_offset;
+ GtkWidget *airpcap_toolbar_channel_offset_lb;
GtkWidget *airpcap_toolbar_button;
GtkWidget *airpcap_toolbar_fcs;
GtkWidget *airpcap_toolbar_fcs_lb;
@@ -117,6 +122,8 @@ airpcap_set_toolbar_start_capture(airpcap_if_info_t* if_info)
airpcap_toolbar_label = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_INTERFACE_KEY);
airpcap_toolbar_channel = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_KEY);
airpcap_toolbar_channel_lb = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY);
+ airpcap_toolbar_channel_offset = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY);
+ airpcap_toolbar_channel_offset_lb = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_LABEL_KEY);
airpcap_toolbar_fcs = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_FCS_FILTER_KEY);
airpcap_toolbar_fcs_lb = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_FCS_FILTER_LABEL_KEY);
airpcap_toolbar_button = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_ADVANCED_KEY);
@@ -127,45 +134,65 @@ airpcap_set_toolbar_start_capture(airpcap_if_info_t* if_info)
/* The current interface is an airpcap interface */
if(if_info != NULL)
{
- gtk_widget_set_sensitive(airpcap_tb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_label,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_keys_button,FALSE);
- airpcap_update_channel_combo(GTK_WIDGET(airpcap_toolbar_channel),if_info);
-
- /*decription check box*/
- gtk_signal_handler_block_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
- if(if_info->DecryptionOn == AIRPCAP_DECRYPTION_ON)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),TRUE);
- else
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),FALSE);
- gtk_signal_handler_unblock_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
-
- if_label_text = g_strdup_printf("Current Wireless Interface: #%s", airpcap_get_if_string_number(if_info));
- gtk_label_set_text(GTK_LABEL(airpcap_toolbar_label),if_label_text);
- g_free(if_label_text);
+ gtk_widget_set_sensitive(airpcap_tb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_label,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset_lb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_keys_button,FALSE);
+
+ /*decription check box*/
+ gtk_signal_handler_block_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
+ if(if_info->DecryptionOn == AIRPCAP_DECRYPTION_ON)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),TRUE);
+ else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),FALSE);
+ gtk_signal_handler_unblock_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
+
+ if_label_text = g_strdup_printf("Current Wireless Interface: #%s", airpcap_get_if_string_number(if_info));
+ gtk_label_set_text(GTK_LABEL(airpcap_toolbar_label),if_label_text);
+ g_free(if_label_text);
+
+ change_airpcap_settings = FALSE;
+ if (if_info->pSupportedChannels != NULL && if_info->numSupportedChannels > 0){
+ guint i = 0;
+ GList *channel_list = NULL;
+
+ for (; i<if_info->numSupportedChannels; i++){
+ channel_list = g_list_append(channel_list, airpcap_get_channelstr_from_freq(if_info->pSupportedChannels[i].Frequency));
+ }
+ gtk_combo_set_popdown_strings( GTK_COMBO(airpcap_toolbar_channel), channel_list);
+ g_list_free(channel_list);
+ }
+
+ airpcap_update_channel_combo(GTK_WIDGET(airpcap_toolbar_channel),if_info);
+ airpcap_update_channel_offset_cb(if_info, if_info->channelInfo.Frequency, airpcap_toolbar_channel_offset);
+ airpcap_update_channel_offset_combo_entry(airpcap_toolbar_channel_offset, if_info->channelInfo.ExtChannel);
+ change_airpcap_settings = TRUE;
}
else /* Current interface is NOT an AirPcap one... */
{
- gtk_widget_set_sensitive(airpcap_tb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_label,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_keys_button,FALSE);
- airpcap_set_toolbar_no_if(airpcap_tb);
+ gtk_widget_set_sensitive(airpcap_tb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_label,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_keys_button,FALSE);
+ airpcap_set_toolbar_no_if(airpcap_tb);
}
}
@@ -179,6 +206,8 @@ airpcap_set_toolbar_stop_capture(airpcap_if_info_t* if_info)
GtkWidget *airpcap_toolbar_label;
GtkWidget *airpcap_toolbar_channel;
GtkWidget *airpcap_toolbar_channel_lb;
+ GtkWidget *airpcap_toolbar_channel_offset;
+ GtkWidget *airpcap_toolbar_channel_offset_lb;
GtkWidget *airpcap_toolbar_button;
GtkWidget *airpcap_toolbar_fcs;
GtkWidget *airpcap_toolbar_fcs_lb;
@@ -192,6 +221,8 @@ airpcap_set_toolbar_stop_capture(airpcap_if_info_t* if_info)
airpcap_toolbar_label = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_INTERFACE_KEY);
airpcap_toolbar_channel = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_KEY);
airpcap_toolbar_channel_lb = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY);
+ airpcap_toolbar_channel_offset = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY);
+ airpcap_toolbar_channel_offset_lb = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_LABEL_KEY);
airpcap_toolbar_fcs = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_FCS_FILTER_KEY);
airpcap_toolbar_fcs_lb = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_FCS_FILTER_LABEL_KEY);
airpcap_toolbar_button = OBJECT_GET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_ADVANCED_KEY);
@@ -202,47 +233,67 @@ airpcap_set_toolbar_stop_capture(airpcap_if_info_t* if_info)
/* The current interface is an airpcap interface */
if(if_info != NULL)
{
- gtk_widget_set_sensitive(airpcap_tb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_label,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_button,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_crc_filter_combo,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_keys_button,TRUE);
- airpcap_validation_type_combo_set_by_type(GTK_WIDGET(airpcap_toolbar_crc_filter_combo),if_info->CrcValidationOn);
- airpcap_update_channel_combo(GTK_WIDGET(airpcap_toolbar_channel),if_info);
-
- /*decription check box*/
- gtk_signal_handler_block_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
- if(if_info->DecryptionOn == AIRPCAP_DECRYPTION_ON)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),TRUE);
- else
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),FALSE);
- gtk_signal_handler_unblock_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
-
-
- if_label_text = g_strdup_printf("Current Wireless Interface: #%s", airpcap_get_if_string_number(if_info));
- gtk_label_set_text(GTK_LABEL(airpcap_toolbar_label),if_label_text);
- g_free(if_label_text);
- }
+ gtk_widget_set_sensitive(airpcap_tb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_label,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset_lb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_button,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_crc_filter_combo,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_keys_button,TRUE);
+ airpcap_validation_type_combo_set_by_type(GTK_WIDGET(airpcap_toolbar_crc_filter_combo),if_info->CrcValidationOn);
+
+ /*decription check box*/
+ gtk_signal_handler_block_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
+ if(if_info->DecryptionOn == AIRPCAP_DECRYPTION_ON)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),TRUE);
+ else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(airpcap_toolbar_decryption),FALSE);
+ gtk_signal_handler_unblock_by_func (GTK_OBJECT(airpcap_toolbar_decryption),GTK_SIGNAL_FUNC(airpcap_toolbar_encryption_cb), airpcap_tb);
+
+ if_label_text = g_strdup_printf("Current Wireless Interface: #%s", airpcap_get_if_string_number(if_info));
+ gtk_label_set_text(GTK_LABEL(airpcap_toolbar_label),if_label_text);
+ g_free(if_label_text);
+
+ change_airpcap_settings = FALSE;
+ if (if_info->pSupportedChannels != NULL && if_info->numSupportedChannels > 0){
+ guint i = 0;
+ GList *channel_list = NULL;
+
+ for (; i<if_info->numSupportedChannels; i++){
+ channel_list = g_list_append(channel_list, airpcap_get_channelstr_from_freq(if_info->pSupportedChannels[i].Frequency));
+ }
+ gtk_combo_set_popdown_strings( GTK_COMBO(airpcap_toolbar_channel), channel_list);
+ g_list_free(channel_list);
+ }
+
+ airpcap_update_channel_combo(GTK_WIDGET(airpcap_toolbar_channel),if_info);
+ airpcap_update_channel_offset_cb(if_info, if_info->channelInfo.Frequency, airpcap_toolbar_channel_offset);
+ airpcap_update_channel_offset_combo_entry(airpcap_toolbar_channel_offset, if_info->channelInfo.ExtChannel);
+ change_airpcap_settings = TRUE;
+ }
else
{
- gtk_widget_set_sensitive(airpcap_tb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_label,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_crc_filter_combo,FALSE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,TRUE);
- gtk_widget_set_sensitive(airpcap_toolbar_keys_button,TRUE);
- airpcap_set_toolbar_no_if(airpcap_tb);
+ gtk_widget_set_sensitive(airpcap_tb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_label,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_channel_offset_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_fcs_lb,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_button,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_crc_filter_combo,FALSE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_decryption_lb,TRUE);
+ gtk_widget_set_sensitive(airpcap_toolbar_keys_button,TRUE);
+ airpcap_set_toolbar_no_if(airpcap_tb);
+ change_airpcap_settings = FALSE;
}
}
@@ -435,17 +486,14 @@ airpcap_get_validation_name(AirpcapValidationType vt)
AirpcapLinkType
airpcap_get_link_type(const gchar* name)
{
- if(!(g_strcasecmp(AIRPCAP_LINK_TYPE_NAME_802_11_ONLY,name)))
- {
- return AIRPCAP_LT_802_11;
- }
- else if(!(g_strcasecmp(AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO,name)))
- {
- return AIRPCAP_LT_802_11_PLUS_RADIO;
- }
- else
- {
- return AIRPCAP_LT_UNKNOWN;
+ if(!(g_strcasecmp(AIRPCAP_LINK_TYPE_NAME_802_11_ONLY,name))){
+ return AIRPCAP_LT_802_11;
+ }else if(!(g_strcasecmp(AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO,name))){
+ return AIRPCAP_LT_802_11_PLUS_RADIO;
+ }else if(!(g_strcasecmp(AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI,name))){
+ return AIRPCAP_LT_802_11_PLUS_PPI;
+ }else{
+ return AIRPCAP_LT_UNKNOWN;
}
}
@@ -456,17 +504,14 @@ airpcap_get_link_type(const gchar* name)
gchar*
airpcap_get_link_name(AirpcapLinkType lt)
{
- if(lt == AIRPCAP_LT_802_11)
- {
- return AIRPCAP_LINK_TYPE_NAME_802_11_ONLY;
- }
- else if(lt == AIRPCAP_LT_802_11_PLUS_RADIO)
- {
- return AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO;
- }
- else if(lt == AIRPCAP_LT_UNKNOWN)
- {
- return AIRPCAP_LINK_TYPE_NAME_UNKNOWN;
+ if(lt == AIRPCAP_LT_802_11){
+ return AIRPCAP_LINK_TYPE_NAME_802_11_ONLY;
+ }else if(lt == AIRPCAP_LT_802_11_PLUS_RADIO){
+ return AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO;
+ }else if(lt == AIRPCAP_LT_802_11_PLUS_PPI){
+ return AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI;
+ }else if(lt == AIRPCAP_LT_UNKNOWN){
+ return AIRPCAP_LINK_TYPE_NAME_UNKNOWN;
}
return NULL;
}
@@ -524,16 +569,16 @@ airpcap_validation_type_combo_get_type(GtkWidget* c)
/*
* Retrieve the UINT corresponding to the given string (channel only, handle with care!)
*/
-UINT
-airpcap_get_channel_number(const gchar* s)
+ULONG
+airpcap_get_frequency_from_str(const gchar* s)
{
- int ch_num;
+ ULONG ch_freq;
- sscanf(s,"%d",&ch_num);
+ sscanf(s,"%ld",&ch_freq);
/* XXX - check for ch_num btween 1-14, and return -1 otherwise??? */
- return ch_num;
+ return ch_freq;
}
/*
@@ -549,9 +594,85 @@ airpcap_get_channel_name(UINT n)
* Set the combo box entry string given an UINT channel number
*/
void
-airpcap_channel_combo_set_by_number(GtkWidget* w,UINT channel)
+airpcap_channel_combo_set_by_number(GtkWidget* w,UINT chan_freq)
+{
+ gchar *entry_text;
+
+ entry_text = airpcap_get_channelstr_from_freq(chan_freq);
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),airpcap_get_channelstr_from_freq(chan_freq));
+ g_free(entry_text);
+}
+
+/*
+ * Change channel of Airpcap Adapter
+ */
+gboolean
+airpcap_update_frequency_and_offset(airpcap_if_info_t* if_info)
{
- gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),airpcap_get_channel_name(channel));
+ gchar ebuf[AIRPCAP_ERRBUF_SIZE];
+ PAirpcapHandle ad;
+ gboolean return_value = FALSE;
+
+ if (if_info != NULL){
+ ad = airpcap_if_open(if_info->name, ebuf);
+
+ if(ad != NULL) {
+ return_value = airpcap_if_set_device_channel_ex(ad,if_info->channelInfo);
+ airpcap_if_close(ad);
+ }
+ }
+
+ return return_value;
+}
+
+/*
+ * Update the channel offset of the given combobox
+ */
+void
+airpcap_update_channel_offset_cb(airpcap_if_info_t* if_info, ULONG ch_freq, GtkWidget *channel_offset_cb)
+{
+ const gchar *current_offset;
+ gchar current_offset_copy[10];
+ gchar *new_offset_str;
+ ULONG chan_flags;
+
+ if (airpcap_if_is_any(if_info)){
+ gtk_widget_set_sensitive(GTK_WIDGET(channel_offset_cb),FALSE);
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_offset_cb)->entry), "0");
+ return;
+ }
+
+ current_offset = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(channel_offset_cb)->entry));
+ strcpy (current_offset_copy, current_offset);
+ chan_flags = airpcap_load_channel_offset_cb(if_info, channel_offset_cb, ch_freq);
+
+ new_offset_str = current_offset_copy;
+
+ /* If current_offset == -1 && new_offset cannot be -1 */
+ if (strcmp(current_offset_copy, "-1") == 0 && !(chan_flags & FLAG_CAN_BE_HIGH)){
+ if ((chan_flags & FLAG_CAN_BE_LOW)){
+ new_offset_str = "+1";
+ }else{
+ new_offset_str = "0";
+ }
+ }else if (strcmp(current_offset_copy, "+1") == 0 && !(chan_flags & FLAG_CAN_BE_LOW)){
+ if ((chan_flags & FLAG_CAN_BE_HIGH)){
+ new_offset_str = "-1";
+ }else{
+ new_offset_str = "0";
+ }
+ }
+
+ change_airpcap_settings = FALSE;
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_offset_cb)->entry), new_offset_str);
+ change_airpcap_settings = TRUE;
+
+ sscanf(new_offset_str,"%d",&(if_info->channelInfo.ExtChannel));
+ if (!airpcap_update_frequency_and_offset(if_info)){
+ simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Adapter failed to be set with the following settings: Frequency - %ld Extension Channel - %d", if_info->channelInfo.Frequency, if_info->channelInfo.ExtChannel);
+ }
+
+ g_free(new_offset_str);
}
/*
@@ -572,23 +693,73 @@ airpcap_if_is_any(airpcap_if_info_t* if_info)
void
airpcap_update_channel_combo(GtkWidget* w, airpcap_if_info_t* if_info)
{
-gchar* channels_list;
+ gchar* frequency_list;
if(airpcap_if_is_any(if_info))
{
- channels_list = airpcap_get_all_channels_list(if_info);
- gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),channels_list);
- g_free(channels_list);
- gtk_widget_set_sensitive(GTK_WIDGET(w),FALSE);
+ frequency_list = airpcap_get_all_channels_list(if_info);
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry),frequency_list);
+ g_free(frequency_list);
+ change_airpcap_settings = FALSE;
+ gtk_widget_set_sensitive(GTK_WIDGET(w),FALSE);
}
else
{
- airpcap_channel_combo_set_by_number(w,if_info->channel);
- gtk_widget_set_sensitive(GTK_WIDGET(w),TRUE);
+ airpcap_channel_combo_set_by_number(w,if_info->channelInfo.Frequency);
+ change_airpcap_settings = TRUE;
+ gtk_widget_set_sensitive(GTK_WIDGET(w),TRUE);
}
}
/*
+ * Update channel offset combo box to 'offset'.
+ */
+void
+airpcap_update_channel_offset_combo_entry(GtkWidget* w, gchar extChannel)
+{
+ gchar channel_offset_value[3];
+
+ if (extChannel > 0){
+ sprintf(channel_offset_value, "+%d", extChannel);
+ }else{
+ sprintf(channel_offset_value, "%d", extChannel);
+ }
+
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(w)->entry), channel_offset_value);
+}
+
+/*
+ * Update channel offset combo box given the selected frequency. Return the flags from the given frequency.
+ */
+ULONG
+airpcap_load_channel_offset_cb(airpcap_if_info_t* if_info, GtkWidget* channel_offset_cb, ULONG chan_freq)
+{
+ GList *channel_offset_list = NULL;
+
+ if (if_info != NULL && if_info->pSupportedChannels != NULL && if_info->numSupportedChannels > 0){
+ guint i = 0;
+
+ for (; i<if_info->numSupportedChannels; i++){
+ if (if_info->pSupportedChannels[i].Frequency == chan_freq){
+ if ((if_info->pSupportedChannels[i].Flags & FLAG_CAN_BE_HIGH)){
+ channel_offset_list = g_list_append(channel_offset_list, "-1");
+ }
+ channel_offset_list = g_list_append(channel_offset_list, "0");
+ if ((if_info->pSupportedChannels[i].Flags & FLAG_CAN_BE_LOW)){
+ channel_offset_list = g_list_append(channel_offset_list, "+1");
+ }
+ gtk_combo_set_popdown_strings( GTK_COMBO(channel_offset_cb), channel_offset_list) ;
+ gtk_widget_set_sensitive(channel_offset_cb, g_list_length(channel_offset_list) > 1);
+ g_list_free(channel_offset_list);
+ return if_info->pSupportedChannels[i].Flags;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/*
* Takes the keys from the GtkList widget, and add them to the interface list
*/
void
@@ -1026,6 +1197,8 @@ airpcap_enable_toolbar_widgets(GtkWidget* w, gboolean en)
*if_description_lb,
*channel_cb,
*channel_lb,
+ *channel_offset_cb,
+ *channel_offset_lb,
*fcs_cb,
*fcs_lb,
*advanced_bt;
@@ -1038,6 +1211,8 @@ airpcap_enable_toolbar_widgets(GtkWidget* w, gboolean en)
if_description_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_INTERFACE_KEY);
channel_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY);
channel_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_KEY);
+ channel_offset_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY);
+ channel_offset_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_LABEL_KEY);
fcs_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_FCS_FILTER_LABEL_KEY);
fcs_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_FCS_FILTER_KEY);
advanced_bt = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_ADVANCED_KEY);
@@ -1046,6 +1221,8 @@ airpcap_enable_toolbar_widgets(GtkWidget* w, gboolean en)
if(if_description_lb != NULL) gtk_widget_set_sensitive(if_description_lb,en);
if(channel_lb != NULL) gtk_widget_set_sensitive(channel_lb,en);
if(channel_cb != NULL) gtk_widget_set_sensitive(channel_cb,en);
+ if(channel_offset_cb != NULL) gtk_widget_set_sensitive(channel_offset_cb,en);
+ if(channel_offset_lb != NULL) gtk_widget_set_sensitive(channel_offset_lb,en);
if(fcs_lb != NULL) gtk_widget_set_sensitive(fcs_lb,en);
if(fcs_cb != NULL) gtk_widget_set_sensitive(fcs_cb,en);
if(advanced_bt != NULL) gtk_widget_set_sensitive(advanced_bt,en);
@@ -1064,6 +1241,8 @@ airpcap_set_toolbar_no_if(GtkWidget* w)
*if_description_lb,
*channel_cb,
*channel_lb,
+ *channel_offset_cb,
+ *channel_offset_lb,
*fcs_cb,
*fcs_lb,
*advanced_bt;
@@ -1073,15 +1252,18 @@ airpcap_set_toolbar_no_if(GtkWidget* w)
toolbar_tb = w;
- if_description_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_INTERFACE_KEY);
- channel_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY);
- channel_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_KEY);
- fcs_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_FCS_FILTER_LABEL_KEY);
- fcs_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_FCS_FILTER_KEY);
- advanced_bt = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_ADVANCED_KEY);
+ if_description_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_INTERFACE_KEY);
+ channel_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY);
+ channel_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_KEY);
+ channel_offset_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_LABEL_KEY);
+ channel_offset_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY);
+ fcs_lb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_FCS_FILTER_LABEL_KEY);
+ fcs_cb = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_FCS_FILTER_KEY);
+ advanced_bt = OBJECT_GET_DATA(toolbar_tb,AIRPCAP_TOOLBAR_ADVANCED_KEY);
if(fcs_cb != NULL) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(fcs_cb)->entry),"");
if(channel_cb != NULL) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_cb)->entry),"");
+ if(channel_offset_cb != NULL) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_offset_cb)->entry),"");
if(if_description_lb != NULL) gtk_label_set_text(GTK_LABEL(if_description_lb),"Current Wireless Interface: None");
/*if(if_description_lb != NULL) gtk_widget_set_sensitive(if_description_lb,FALSE);
diff --git a/gtk/airpcap_gui_utils.h b/gtk/airpcap_gui_utils.h
index d4e4e7c604..5139de8941 100644
--- a/gtk/airpcap_gui_utils.h
+++ b/gtk/airpcap_gui_utils.h
@@ -35,7 +35,8 @@
#define AIRPCAP_LINK_TYPE_NAME_802_11_ONLY "802.11 Only"
#define AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_RADIO "802.11 + Radio"
-#define AIRPCAP_LINK_TYPE_NAME_UNKNOWN "Unknown"
+#define AIRPCAP_LINK_TYPE_NAME_UNKNOWN "Unknown"
+#define AIRPCAP_LINK_TYPE_NAME_802_11_PLUS_PPI "802.11 + PPI"
#define AIRPCAP_DECRYPTION_TYPE_STRING_WIRESHARK "Wireshark"
#define AIRPCAP_DECRYPTION_TYPE_STRING_AIRPCAP "Driver"
@@ -44,6 +45,9 @@
#define NO_ROW_SELECTED -1
#define NO_COLUMN_SELECTED -1
+/* Controls the releay of settings back to the adapter. */
+extern gboolean change_airpcap_settings;
+
/*
* This structure is used because we need to store infos about the currently selected
* row in the key list.
@@ -147,10 +151,16 @@ AirpcapValidationType
airpcap_validation_type_combo_get_type(GtkWidget* c);
/*
+ * Update channel offset combo box to 'offset'.
+ */
+void
+airpcap_update_channel_offset_combo_entry(GtkWidget* w, gchar extChannel);
+
+/*
* Returns the string corresponding to the given UINT (1-14, for channel only)
*/
-UINT
-airpcap_get_channel_number(const gchar* s);
+ULONG
+airpcap_get_frequency_from_str(const gchar* s);
/*
* Retrieve the UINT corresponding to the given string (channel only, handle with care!)
@@ -171,6 +181,12 @@ int
airpcap_if_is_any(airpcap_if_info_t* if_info);
/*
+ * Change channel of Airpcap Adapter
+ */
+gboolean
+airpcap_update_frequency_and_offset(airpcap_if_info_t* if_info);
+
+/*
* Takes the keys from the GtkList widget, and add them to the interface list
*/
void
@@ -183,6 +199,18 @@ void
airpcap_update_channel_combo(GtkWidget* w, airpcap_if_info_t* if_info);
/*
+ * Update the channel offset of the given combobox
+ */
+void
+airpcap_update_channel_offset_cb(airpcap_if_info_t* if_info, ULONG ch_freq, GtkWidget *channel_offset_cb);
+
+/*
+ * Update channel offset combo box given the selected frequency. Return the flags from the given frequency.
+ */
+ULONG
+airpcap_load_channel_offset_cb(airpcap_if_info_t* if_info, GtkWidget* channel_offset_cb, ULONG chan_freq);
+
+/*
* This function will take the current keys (widget list), specified for the
* current adapter, and save them as default for ALL the others.
*/
diff --git a/gtk/capture_dlg.c b/gtk/capture_dlg.c
index 656340866d..4420dbeab2 100644
--- a/gtk/capture_dlg.c
+++ b/gtk/capture_dlg.c
@@ -207,7 +207,7 @@ set_link_type_list(GtkWidget *linktype_om, GtkWidget *entry)
/* is it an airpcap interface??? */
/* retrieve the advanced button pointer */
advanced_bt = OBJECT_GET_DATA(entry,AIRPCAP_OPTIONS_ADVANCED_KEY);
- airpcap_if_selected = get_airpcap_if_by_name(airpcap_if_list,if_name);
+ airpcap_if_selected = get_airpcap_if_from_name(airpcap_if_list,if_name);
airpcap_enable_toolbar_widgets(airpcap_tb,FALSE);
if( airpcap_if_selected != NULL)
{
@@ -582,9 +582,11 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
*m_resolv_cb, *n_resolv_cb, *t_resolv_cb,
*bbox, *ok_bt, *cancel_bt,
*help_bt;
+#if GTK_MAJOR_VERSION >= 2 /* For some reason this button's action crashes under GTK 1. */
#ifdef HAVE_AIRPCAP
GtkWidget *advanced_hb, *advanced_bt;
#endif
+#endif
#if GTK_MAJOR_VERSION < 2
GtkAccelGroup *accel_group;
#endif
@@ -700,7 +702,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
#ifdef HAVE_AIRPCAP
/* get the airpcap interface (if it IS an airpcap interface, and update the
toolbar... and of course enable the advanced button...)*/
- airpcap_if_selected = get_airpcap_if_by_name(airpcap_if_list,capture_opts->iface);
+ airpcap_if_selected = get_airpcap_if_from_name(airpcap_if_list,capture_opts->iface);
#endif
if (capture_opts->iface != NULL) {
@@ -872,6 +874,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
OBJECT_SET_DATA(filter_bt, E_FILT_TE_PTR_KEY, filter_te);
/* advanced row */
+#if GTK_MAJOR_VERSION >= 2 /* For some reason this button's action crashes under GTK 1. */
#ifdef HAVE_AIRPCAP
advanced_hb = gtk_hbox_new(FALSE,5);
gtk_box_pack_start(GTK_BOX(capture_vb), advanced_hb, FALSE, FALSE, 0);
@@ -905,6 +908,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
gtk_widget_show(advanced_bt);
gtk_widget_show(advanced_hb);
#endif
+#endif
/* Capture file-related options frame */
file_fr = gtk_frame_new("Capture File(s)");
diff --git a/gtk/capture_if_dlg.c b/gtk/capture_if_dlg.c
index ef5483ac8f..35c59d5a19 100644
--- a/gtk/capture_if_dlg.c
+++ b/gtk/capture_if_dlg.c
@@ -120,6 +120,7 @@ typedef struct if_dlg_data_s {
#endif
guint32 last_packets;
gchar *device;
+ if_info_t if_info;
} if_dlg_data_t;
void update_if(if_dlg_data_t *if_dlg_data);
@@ -132,7 +133,7 @@ capture_do_cb(GtkWidget *capture_bt _U_, gpointer if_data)
if_dlg_data_t *if_dlg_data = if_data;
#ifdef HAVE_AIRPCAP
- airpcap_if_active = get_airpcap_if_from_description(airpcap_if_list, GTK_LABEL(if_dlg_data->descr_lb)->label);
+ airpcap_if_active = get_airpcap_if_from_name(airpcap_if_list, if_dlg_data->if_info.name);
airpcap_if_selected = airpcap_if_active;
#endif
@@ -390,6 +391,17 @@ combo_channel_new(void)
return channel_cb;
}
+/*
+ * Sorts the Interface List in alphabetical order
+ */
+int if_list_comparator_alph (const if_info_t *first, const if_info_t *second){
+ if(first != NULL && first->description != NULL && second != NULL && second->description != NULL){
+ return g_strcasecmp(first->description, second->description);
+ } else {
+ return 0;
+ }
+}
+
/* start getting capture stats from all interfaces */
void
capture_if_cb(GtkWidget *w _U_, gpointer d _U_)
@@ -444,6 +456,7 @@ capture_if_cb(GtkWidget *w _U_, gpointer d _U_)
/* LOAD THE INTERFACES */
if_list = get_interface_list(&err, &err_str);
+ if_list = g_list_sort (if_list, if_list_comparator_alph);
if (if_list == NULL && err == CANT_GET_INTERFACE_LIST) {
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
g_free(err_str);
@@ -460,7 +473,7 @@ capture_if_cb(GtkWidget *w _U_, gpointer d _U_)
update_decryption_mode_list(decryption_cm);
if (airpcap_if_list == NULL && err == CANT_GET_AIRPCAP_INTERFACE_LIST) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
+ /* simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str); /* XXX - Do we need to show an error here? */
g_free(err_str);
}
@@ -552,10 +565,11 @@ capture_if_cb(GtkWidget *w _U_, gpointer d _U_)
g_string_assign(if_tool_str, "");
if_info = curr->data;
if_dlg_data = g_malloc0(sizeof(if_dlg_data_t));
+ if_dlg_data->if_info = *if_info;
/* Kind of adaptor (icon) */
#ifdef HAVE_AIRPCAP
- if(get_airpcap_if_from_description(airpcap_if_list,if_info->description) != NULL)
+ if(get_airpcap_if_from_name(airpcap_if_list,if_info->name) != NULL)
icon = xpm_to_widget(capture_airpcap_16_xpm);
else
icon = xpm_to_widget(capture_ethernet_16_xpm);
diff --git a/gtk/keys.h b/gtk/keys.h
index 23dfd554ff..ebc25bb663 100644
--- a/gtk/keys.h
+++ b/gtk/keys.h
@@ -53,6 +53,8 @@
#define AIRPCAP_TOOLBAR_LINK_TYPE_KEY "airpcap_toolbar_lt_key"
#define AIRPCAP_TOOLBAR_CHANNEL_KEY "airpcap_toolbar_ch_key"
#define AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY "airpcap_toolbar_ch_lb_key"
+#define AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY "airpcap_toolbar_ch_offset_key"
+#define AIRPCAP_TOOLBAR_CHANNEL_OFFSET_LABEL_KEY "airpcap_toolbar_ch_offset_lb_key"
#define AIRPCAP_TOOLBAR_FCS_CHECK_KEY "airpcap_toolbar_fcs_check_key"
#define AIRPCAP_TOOLBAR_FCS_FILTER_LABEL_KEY "airpcap_toolbar_fcs_filter_lb_key"
#define AIRPCAP_TOOLBAR_FCS_FILTER_KEY "airpcap_toolbar_fcs_filter_key"
diff --git a/gtk/main.c b/gtk/main.c
index c395ce6f90..ff1bfdec17 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -2184,14 +2184,19 @@ main(int argc, char *argv[])
/* load the airpcap interfaces */
airpcap_if_list = get_airpcap_interface_list(&err, &err_str);
- if (airpcap_if_list == NULL && err == CANT_GET_AIRPCAP_INTERFACE_LIST) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
- g_free(err_str);
- }
- /* select the first ad default (THIS SHOULD BE CHANGED) */
- airpcap_if_active = airpcap_get_default_if(airpcap_if_list);
- break;
+ if (airpcap_if_list == NULL || g_list_length(airpcap_if_list) == 0){
+ if (err == CANT_GET_AIRPCAP_INTERFACE_LIST && err_str != NULL) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", "Failed to open Airpcap Adapters!");
+ g_free(err_str);
+ }
+ airpcap_if_active = NULL;
+
+ } else {
+ /* select the first ad default (THIS SHOULD BE CHANGED) */
+ airpcap_if_active = airpcap_get_default_if(airpcap_if_list);
+ }
+ break;
#if 0
/*
* XXX - Maybe we need to warn the user if one of the following happens???
@@ -4106,31 +4111,49 @@ window_state_event_cb (GtkWidget *widget _U_,
static void
airpcap_toolbar_channel_changed_cb(GtkWidget *w _U_, gpointer data)
{
- gchar ebuf[AIRPCAP_ERRBUF_SIZE];
- PAirpcapHandle ad;
const gchar *s;
- int ch_num;
-
- s = gtk_entry_get_text(GTK_ENTRY(data));
+ ULONG ch_freq;
- if ((data != NULL) && (w != NULL) ) {
- s = gtk_entry_get_text(GTK_ENTRY(data));
+ if ((data != NULL) && (w != NULL) && change_airpcap_settings) {
+ s = gtk_entry_get_text(GTK_ENTRY(w));
if ((g_strcasecmp("",s))) {
- sscanf(s,"%d",&ch_num);
+ ch_freq = airpcap_get_frequency_from_str(s);
if (airpcap_if_active != NULL) {
- ad = airpcap_if_open(get_airpcap_name_from_description(airpcap_if_list, airpcap_if_active->description), ebuf);
-
- if(ad) {
- airpcap_if_set_device_channel(ad,ch_num);
- airpcap_if_active->channel = ch_num;
- airpcap_if_close(ad);
- }
+ airpcap_if_active->channelInfo.Frequency = ch_freq;
+ airpcap_update_channel_offset_cb(airpcap_if_active, ch_freq, GTK_WIDGET(data));
}
}
}
}
/*
+ * Changed callback for the channel offset combobox
+ */
+static void
+on_channel_offset_cb_changed(GtkWidget *w _U_, gpointer data)
+{
+ const gchar *s;
+ gchar offset;
+
+ if ((data != NULL) && (w != NULL) && change_airpcap_settings)
+ {
+ s = gtk_entry_get_text(GTK_ENTRY(w));
+ if ((g_strcasecmp("",s)))
+ {
+ if (airpcap_if_active != NULL)
+ {
+ sscanf(s,"%d",&offset);
+ airpcap_if_active->channelInfo.ExtChannel = offset;
+ if (change_airpcap_settings != NULL)
+ {
+ airpcap_update_frequency_and_offset(airpcap_if_active);
+ }
+ }
+ }
+ }
+}
+
+/*
* Callback for the wrong crc combo
*/
static void
@@ -4140,15 +4163,13 @@ airpcap_toolbar_wrong_crc_combo_cb(GtkWidget *entry, gpointer user_data)
PAirpcapHandle ad;
if( !block_toolbar_signals && (airpcap_if_active != NULL)) {
- ad = airpcap_if_open(get_airpcap_name_from_description(airpcap_if_list,airpcap_if_active->description), ebuf);
+ ad = airpcap_if_open(airpcap_if_active->name, ebuf);
if (ad) {
airpcap_if_active->CrcValidationOn = airpcap_get_validation_type(gtk_entry_get_text(GTK_ENTRY(entry)));
airpcap_if_set_fcs_validation(ad,airpcap_if_active->CrcValidationOn);
/* Save configuration */
- if(!airpcap_if_store_cur_config_as_adapter_default(ad)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Cannot save configuration!!!\nRemember that in order to store the configuration in the registry you have to:\n\n- Close all the airpcap-based applications.\n- Be sure to have administrative privileges.");
- }
+ airpcap_if_store_cur_config_as_adapter_default(ad);
airpcap_if_close(ad);
}
}
@@ -4167,7 +4188,7 @@ airpcap_toolbar_encryption_cb(GtkWidget *entry, gpointer user_data)
/* Apply changes to the current adapter */
if( (airpcap_if_active != NULL)) {
- ad = airpcap_if_open(get_airpcap_name_from_description(airpcap_if_list,airpcap_if_active->description), ebuf);
+ ad = airpcap_if_open(airpcap_if_active->name, ebuf);
if(ad) {
if(airpcap_if_active->DecryptionOn == AIRPCAP_DECRYPTION_ON) {
@@ -4193,6 +4214,7 @@ airpcap_toolbar_encryption_cb(GtkWidget *entry, gpointer user_data)
return;
}
+ if (!(airpcap_if_list == NULL)){
n = g_list_length(airpcap_if_list);
/* The same kind of settings should be propagated to all the adapters */
@@ -4201,18 +4223,22 @@ airpcap_toolbar_encryption_cb(GtkWidget *entry, gpointer user_data)
curr_if = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i);
if( (curr_if != NULL) && (curr_if != airpcap_if_selected) ) {
- ad = airpcap_if_open(get_airpcap_name_from_description(airpcap_if_list,curr_if->description), ebuf);
+ ad = airpcap_if_open(curr_if->name, ebuf);
if(ad) {
curr_if->DecryptionOn = airpcap_if_selected->DecryptionOn;
airpcap_if_set_decryption_state(ad,curr_if->DecryptionOn);
/* Save configuration for the curr_if */
if(!airpcap_if_store_cur_config_as_adapter_default(ad)) {
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Cannot save configuration!!!\nRemember that in order to store the configuration in the registry you have to:\n\n- Close all the airpcap-based applications.\n- Be sure to have administrative privileges.");
- }
+ }
airpcap_if_close(ad);
}
}
}
+ } else {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "AirPcap Adapter Error!");
+ return;
+ }
}
/*
@@ -4289,13 +4315,16 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
gchar *title;
#ifdef HAVE_AIRPCAP
- GtkWidget *advanced_bt,
- *key_management_bt,
- *interface_lb,
- *channel_lb,
- *channel_cm,
- *wrong_crc_lb,
- *wrong_crc_cm;
+ GtkWidget *key_management_bt = NULL,
+#if GTK_MAJOR_VERSION >= 2 /* For some reason this button's action crashes under GTK 1. */
+ *advanced_bt = NULL,
+#endif
+ *channel_lb = NULL,
+ *channel_cm = NULL,
+ *channel_offset_lb = NULL,
+ *channel_offset_cb = NULL,
+ *wrong_crc_lb = NULL,
+ *wrong_crc_cm = NULL;
GtkWidget *enable_decryption_lb;
GtkWidget *enable_decryption_cb;
@@ -4306,7 +4335,7 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
GList *linktype_list = NULL;
GList *link_list = NULL;
GtkTooltips *airpcap_tooltips;
- gchar *if_label_text;
+ /* gchar *if_label_text; */
gint *from_widget = NULL;
#endif
@@ -4421,72 +4450,100 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
gtk_widget_show(airpcap_tb);
/* Interface Label */
- if(airpcap_if_active != NULL) {
+ /*if(airpcap_if_active != NULL) {
if_label_text = g_strdup_printf("%s %s\t","Current Wireless Interface: #",airpcap_get_if_string_number(airpcap_if_active));
interface_lb = gtk_label_new(if_label_text);
g_free(if_label_text);
} else {
interface_lb = gtk_label_new("No Wireless Interface Found ");
- }
+ }*/
/* Add the label to the toolbar */
- gtk_toolbar_append_widget(GTK_TOOLBAR(airpcap_tb), interface_lb,
+ /*gtk_toolbar_append_widget(GTK_TOOLBAR(airpcap_tb), interface_lb,
"Current Wireless Interface", "Private");
OBJECT_SET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_INTERFACE_KEY,interface_lb);
gtk_widget_show(interface_lb);
- gtk_toolbar_insert_space(GTK_TOOLBAR(airpcap_tb),1);
+ gtk_toolbar_insert_space(GTK_TOOLBAR(airpcap_tb),1);*/
/* Create the "802.11 Channel:" label */
- channel_lb = gtk_label_new(" 802.11 Channel: ");
+ channel_lb = gtk_label_new("802.11 Channel: ");
OBJECT_SET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY,channel_lb);
gtk_toolbar_append_widget(GTK_TOOLBAR(airpcap_tb), channel_lb,
"Current 802.11 Channel", "Private");
gtk_widget_show(channel_lb);
- WIDGET_SET_SIZE(channel_lb, 100, 28);
+ WIDGET_SET_SIZE(channel_lb, 85, 28);
/* Create the channel combo box */
channel_cm = gtk_combo_new();
gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(channel_cm)->entry),FALSE);
OBJECT_SET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_KEY,channel_cm);
- channel_list = g_list_append(channel_list, "1 (2412MHz)");
- channel_list = g_list_append(channel_list, "2 (2417MHz)");
- channel_list = g_list_append(channel_list, "3 (2422MHz)");
- channel_list = g_list_append(channel_list, "4 (2427MHz)");
- channel_list = g_list_append(channel_list, "5 (2432MHz)");
- channel_list = g_list_append(channel_list, "6 (2437MHz)");
- channel_list = g_list_append(channel_list, "7 (2442MHz)");
- channel_list = g_list_append(channel_list, "8 (2447MHz)");
- channel_list = g_list_append(channel_list, "9 (2452MHz)");
- channel_list = g_list_append(channel_list, "10 (2457MHz)");
- channel_list = g_list_append(channel_list, "11 (2462MHz)");
- channel_list = g_list_append(channel_list, "12 (2467MHz)");
- channel_list = g_list_append(channel_list, "13 (2472MHz)");
- channel_list = g_list_append(channel_list, "14 (2484MHz)");
-
- gtk_combo_set_popdown_strings( GTK_COMBO(channel_cm), channel_list) ;
+ if (airpcap_if_active != NULL && airpcap_if_active->pSupportedChannels != NULL && airpcap_if_active->numSupportedChannels > 0){
+ guint i = 0;
+ for (; i<airpcap_if_active->numSupportedChannels; i++){
+ channel_list = g_list_append(channel_list, airpcap_get_channelstr_from_freq(airpcap_if_active->pSupportedChannels[i].Frequency));
+ }
+ gtk_combo_set_popdown_strings( GTK_COMBO(channel_cm), channel_list) ;
+ }
gtk_tooltips_set_tip(airpcap_tooltips, GTK_WIDGET(GTK_COMBO(channel_cm)->entry),
"Change the 802.11 RF channel", NULL);
- WIDGET_SET_SIZE(channel_cm, 100, 28);
+ WIDGET_SET_SIZE(channel_cm, 120, 28);
- if(airpcap_if_active != NULL)
- gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_cm)->entry), airpcap_get_channel_name(airpcap_if_active->channel));
- else
+ if(airpcap_if_active != NULL)
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_cm)->entry), airpcap_get_channelstr_from_freq(airpcap_if_active->channelInfo.Frequency));
+ else
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_cm)->entry),"");
- /* callback for channel combo box */
- SIGNAL_CONNECT(GTK_COMBO(channel_cm)->entry,"changed",airpcap_toolbar_channel_changed_cb,GTK_COMBO(channel_cm)->entry);
gtk_widget_show(channel_cm);
gtk_toolbar_append_widget(GTK_TOOLBAR(airpcap_tb), channel_cm,
"802.11 Channel", "Private");
+ /* gtk_toolbar_append_space(GTK_TOOLBAR(airpcap_tb)); */
+
+ /* Create the "Channel Offset:" label */
+ channel_offset_lb = gtk_label_new("Channel Offset: ");
+ OBJECT_SET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_CHANNEL_OFFSET_LABEL_KEY,channel_offset_lb);
+ gtk_toolbar_append_widget(GTK_TOOLBAR(airpcap_tb), channel_offset_lb,
+ "Current 802.11 Channel Offset", "Private");
+ gtk_widget_show(channel_offset_lb);
+
+ WIDGET_SET_SIZE(channel_offset_lb, 80, 28);
+
+ /* Start: Channel offset combo box */
+ channel_offset_cb = gtk_combo_new();
+ gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(channel_offset_cb)->entry),FALSE);
+ OBJECT_SET_DATA(airpcap_tb, AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY, channel_offset_cb);
+
+ if(airpcap_if_active != NULL){
+ airpcap_update_channel_offset_cb(airpcap_if_active, airpcap_if_active->channelInfo.Frequency, channel_offset_cb);
+ airpcap_update_channel_offset_combo_entry(channel_offset_cb, airpcap_if_active->channelInfo.ExtChannel);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(channel_offset_cb)->entry),"");
+ }
+
+ gtk_tooltips_set_tip(airpcap_tooltips, GTK_WIDGET(GTK_COMBO(channel_offset_cb)->entry),
+ "Change channel offset", NULL);
+
+ WIDGET_SET_SIZE(channel_offset_cb, 50, 28);
+
+ gtk_widget_show(channel_offset_cb);
+
+ gtk_toolbar_append_widget(GTK_TOOLBAR(airpcap_tb), channel_offset_cb,
+ "802.11 Channel Offset", "Private");
+
gtk_toolbar_append_space(GTK_TOOLBAR(airpcap_tb));
+ /* callback for channel combo box */
+ SIGNAL_CONNECT(GTK_COMBO(channel_cm)->entry,"changed", airpcap_toolbar_channel_changed_cb, channel_offset_cb);
+ /* callback for channel offset combo box */
+ SIGNAL_CONNECT(GTK_COMBO(channel_offset_cb)->entry,"changed", on_channel_offset_cb_changed, channel_offset_cb);
+ /* End: Channel offset combo box */
+
/* Wrong CRC Label */
wrong_crc_lb = gtk_label_new(" FCS Filter: ");
OBJECT_SET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_FCS_FILTER_LABEL_KEY,wrong_crc_lb);
@@ -4552,6 +4609,7 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
gtk_toolbar_append_space(GTK_TOOLBAR(airpcap_tb));
+#if GTK_MAJOR_VERSION >= 2 /* For some reason this button's action crashes under GTK 1. */
/* Advanced button */
advanced_bt = gtk_button_new_with_label("Wireless Settings...");
OBJECT_SET_DATA(airpcap_tb,AIRPCAP_TOOLBAR_ADVANCED_KEY,advanced_bt);
@@ -4559,7 +4617,10 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
SIGNAL_CONNECT(advanced_bt, "clicked", toolbar_display_airpcap_advanced_cb, airpcap_tb);
gtk_toolbar_append_widget(GTK_TOOLBAR(airpcap_tb), advanced_bt,
"Set Advanced Wireless Settings", "Private");
+
+
gtk_widget_show(advanced_bt);
+#endif /* GTK_MAJOR_VERSION */
/* Key Management button */
key_management_bt = gtk_button_new_with_label("Decryption Keys...");
@@ -4570,21 +4631,18 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
"Manage Decryption Keys", "Private");
gtk_widget_show(key_management_bt);
- /* select the default interface */
- airpcap_if_active = airpcap_get_default_if(airpcap_if_list);
-
/* If no airpcap interface is present, gray everything */
if(airpcap_if_active == NULL) {
- if(airpcap_if_list == NULL) {
+ if(airpcap_if_list == NULL || g_list_length(airpcap_if_list) == 0) {
/*No airpcap device found */
airpcap_enable_toolbar_widgets(airpcap_tb,FALSE);
/* recent.airpcap_toolbar_show = TRUE; */
- } else {
- /* default adapter is not airpcap... or is airpcap but is not found*/
- airpcap_set_toolbar_stop_capture(airpcap_if_active);
- airpcap_enable_toolbar_widgets(airpcap_tb,FALSE);
- /* recent.airpcap_toolbar_show = TRUE; */
- }
+ } else {
+ /* default adapter is not airpcap... or is airpcap but is not found*/
+ airpcap_set_toolbar_stop_capture(airpcap_if_active);
+ airpcap_enable_toolbar_widgets(airpcap_tb,FALSE);
+ /* recent.airpcap_toolbar_show = TRUE; */
+ }
} else {
airpcap_set_toolbar_stop_capture(airpcap_if_active);
/* recent.airpcap_toolbar_show = TRUE; */
@@ -4764,12 +4822,14 @@ show_main_window(gboolean doing_work)
* This will read the decryption keys from the preferences file, and will
* store them into the registry...
*/
- if(!airpcap_check_decryption_keys(airpcap_if_list)) {
- /* Ask the user what to do ...*/
- airpcap_keys_check_w(NULL,NULL);
- } else {
- /* Keys from lists are equals, or wireshark has got no keys */
- airpcap_load_decryption_keys(airpcap_if_list);
+ if(airpcap_if_list != NULL && g_list_length(airpcap_if_list) > 0){
+ if (!airpcap_check_decryption_keys(airpcap_if_list)) {
+ /* Ask the user what to do ...*/
+ airpcap_keys_check_w(NULL,NULL);
+ } else {
+ /* Keys from lists are equals, or wireshark has got no keys */
+ airpcap_load_decryption_keys(airpcap_if_list);
+ }
}
switch (airpcap_dll_ret_val) {