* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ifdef _WIN32
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <epan/crypt/wep-wpadefs.h>
#include <epan/crypt/airpdcap_ws.h>
#include <epan/strutil.h>
+#include <epan/frequency-utils.h>
#include "capture_ui_utils.h"
+#include <wsutil/file_util.h>
#include "simple_dialog.h"
#include <airpcap.h>
#include "airpcap_loader.h"
-/*
- * We load dynamically the dag library in order link it only when
- * it's present on the system
- */
-static HMODULE AirpcapLib = NULL;
/*
* Set to TRUE if the DLL was successfully loaded AND all functions
*/
static gboolean AirpcapLoaded = FALSE;
-static int AirpcapVersion = 3;
+#ifdef _WIN32
+/*
+ * We load dynamically the dag library in order link it only when
+ * it's present on the system
+ */
+static void * AirpcapLib = NULL;
static AirpcapGetLastErrorHandler g_PAirpcapGetLastError;
-static AirpcapGetDeviceListHandler g_PAirpcapGetDeviceList;
-static AirpcapFreeDeviceListHandler g_PAirpcapFreeDeviceList;
-static AirpcapOpenHandler g_PAirpcapOpen;
-static AirpcapCloseHandler g_PAirpcapClose;
-static AirpcapGetLinkTypeHandler g_PAirpcapGetLinkType;
-static AirpcapSetLinkTypeHandler g_PAirpcapSetLinkType;
static AirpcapSetKernelBufferHandler g_PAirpcapSetKernelBuffer;
static AirpcapSetFilterHandler g_PAirpcapSetFilter;
static AirpcapGetMacAddressHandler g_PAirpcapGetMacAddress;
static AirpcapGetReadEventHandler g_PAirpcapGetReadEvent;
static AirpcapReadHandler g_PAirpcapRead;
static AirpcapGetStatsHandler g_PAirpcapGetStats;
+#endif
+
+static int AirpcapVersion = 3;
+
+static AirpcapGetDeviceListHandler g_PAirpcapGetDeviceList;
+static AirpcapFreeDeviceListHandler g_PAirpcapFreeDeviceList;
+static AirpcapOpenHandler g_PAirpcapOpen;
+static AirpcapCloseHandler g_PAirpcapClose;
+static AirpcapGetLinkTypeHandler g_PAirpcapGetLinkType;
+static AirpcapSetLinkTypeHandler g_PAirpcapSetLinkType;
static AirpcapTurnLedOnHandler g_PAirpcapTurnLedOn;
static AirpcapTurnLedOffHandler g_PAirpcapTurnLedOff;
static AirpcapGetDeviceChannelHandler g_PAirpcapGetDeviceChannel;
module_t *wlan_prefs = NULL;
Dot11Channel *pSupportedChannels;
-ULONG numSupportedChannels;
-
-static Dot11Channel Dot11aChannels[] =
-{
- {34, 5170, 0},
- {36, 5180, 0},
- {38, 5190, 0},
- {40, 5200, 0},
- {42, 5210, 0},
- {44, 5220, 0},
- {46, 5230, 0},
- {48, 5240, 0},
- {52, 5260, 0},
- {56, 5280, 0},
- {60, 5300, 0},
- {64, 5320, 0},
- {149, 5745, 0},
- {153, 5765, 0},
- {157, 5785, 0},
- {161, 5805, 0},
-};
-
-static Dot11Channel Dot11bChannels[] =
-{
- {1, 2412, 0},
- {2, 2417, 0},
- {3, 2422, 0},
- {4, 2427, 0},
- {5, 2432, 0},
- {6, 2437, 0},
- {7, 2442, 0},
- {8, 2447, 0},
- {9, 2452, 0},
- {10, 2457, 0},
- {11, 2462, 0},
- {12, 2467, 0},
- {13, 2472, 0},
- {14, 2484, 0},
-};
+guint numSupportedChannels;
static AirpcapChannelInfo LegacyChannels[] =
{
{2484, 0, {0,0,0}},
};
-static ULONG num_legacy_channels = 14;
+static guint num_legacy_channels = 14;
/*
* Callback used by the load_wlan_keys() routine in order to read a WEP decryption key
*/
static guint
-get_wep_key(pref_t *pref, gpointer ud _U_)
+get_wep_key(pref_t *pref, gpointer ud)
{
- gchar *my_string = NULL;
+ gchar *key_string = NULL;
+ guint8 key_type = AIRPDCAP_KEY_TYPE_WEP;
keys_cb_data_t* user_data;
decryption_key_t* new_key;
/* Retrieve user data info */
user_data = (keys_cb_data_t*)ud;
- if (g_strncasecmp(pref->name, "wep_key", 7) == 0 && pref->type == PREF_STRING)
+ if (g_ascii_strncasecmp(pref->name, "wep_key", 7) == 0 && pref->type == PREF_STRING)
{
- my_string = g_strdup(*pref->varp.string);
+ /* strip out key type */
+ if (g_ascii_strncasecmp(*pref->varp.string, STRING_KEY_TYPE_WEP ":", 4) == 0) {
+ key_string = (gchar*)(*pref->varp.string)+4;
+ }
+ else if (g_ascii_strncasecmp(*pref->varp.string, STRING_KEY_TYPE_WPA_PWD ":", 8) == 0) {
+ key_string = (gchar*)(*pref->varp.string)+8;
+ key_type = AIRPDCAP_KEY_TYPE_WPA_PWD;
+ }
+ else if (g_ascii_strncasecmp(*pref->varp.string, STRING_KEY_TYPE_WPA_PSK ":", 8) == 0) {
+ key_string = (gchar*)(*pref->varp.string)+8;
+ key_type = AIRPDCAP_KEY_TYPE_WPA_PSK;
+ }
+ else {
+ key_type = AIRPDCAP_KEY_TYPE_WEP;
+ key_string = (gchar*)*pref->varp.string;
+ }
/* Here we have the string describing the key... */
- new_key = parse_key_string(my_string);
+ new_key = parse_key_string(key_string, key_type);
- if( new_key != NULL)
- {
- /* Key is added only if not null ... */
- user_data->list = g_list_append(user_data->list,new_key);
- user_data->number_of_keys++;
- user_data->current_index++;
- }
+ if( new_key != NULL)
+ {
+ /* Key is added only if not null ... */
+ user_data->list = g_list_append(user_data->list,new_key);
+ user_data->number_of_keys++;
+ user_data->current_index++;
+ }
}
return 0;
}
/* Retrieve user data info */
user_data = (keys_cb_data_t*)ud;
- if (g_strncasecmp(pref->name, "wep_key", 7) == 0 && pref->type == PREF_STRING)
+ if (g_ascii_strncasecmp(pref->name, "wep_key", 7) == 0 && pref->type == PREF_STRING)
{
/* Ok, the pref we're gonna set is a wep_key ... but what number? */
sscanf(pref->name,"wep_key%d",&wep_key_number);
* Function used to read the Decryption Keys from the preferences and store them
* properly into the airpcap adapter.
*/
-BOOL
-load_wlan_driver_wep_keys()
+gboolean
+load_wlan_driver_wep_keys(void)
{
keys_cb_data_t* user_data;
guint i;
- gchar *tmp = NULL;
/* Retrieve the wlan preferences */
wlan_prefs = prefs_find_module("wlan");
* This function will tell the airpcap driver the key list to use
* This will be stored into the registry...
*/
-BOOL
+gboolean
write_wlan_wep_keys_to_registry(airpcap_if_info_t* info_if, GList* key_list)
{
- UINT i,j;
+ guint i,j;
GString *new_key;
gchar s[3];
PAirpcapKeysCollection KeysCollection;
- ULONG KeysCollectionSize;
- UCHAR KeyByte;
- UINT keys_in_list = 0;
+ guint KeysCollectionSize;
+ guint8 KeyByte;
+ guint keys_in_list = 0;
decryption_key_t* key_item = NULL;
keys_in_list = g_list_length(key_list);
key_item = (decryption_key_t*)g_list_nth_data(key_list,i);
new_key = g_string_new(key_item->key->str);
- KeysCollection->Keys[i].KeyLen = new_key->len / 2;
+ KeysCollection->Keys[i].KeyLen = (guint) 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);
+ KeyByte = (guint8)strtol(s, NULL, 16);
KeysCollection->Keys[i].KeyData[j / 2] = KeyByte;
}
* This function will tell the airpcap driver the key list to use
* This will be stored into the registry...
*/
-BOOL
+gboolean
write_wlan_driver_wep_keys_to_registry(GList* key_list)
{
- UINT i,j,k,n,y;
+ guint i,j,k,n,y;
GString *new_key;
gchar s[3];
PAirpcapKeysCollection KeysCollection;
- ULONG KeysCollectionSize;
- UCHAR KeyByte;
- UINT keys_in_list = 0;
+ guint KeysCollectionSize;
+ guint8 KeyByte;
+ guint keys_in_list = 0;
decryption_key_t* key_item = NULL;
airpcap_if_info_t* fake_info_if = NULL;
key_item = (decryption_key_t*)g_list_nth_data(key_list,i);
/*
- * XXX - The AIRPDCAP_KEY_TYPE_WEP is the only supportd right now!
+ * XXX - The AIRPDCAP_KEY_TYPE_WEP is the only supported right now!
* We will have to modify the AirpcapKey structure in order to
* support the other two types! What happens now, is that simply the
- * not supported keys will just be discarded (they will be saved in wireshark though)
+ * not supported keys will just be discarded (they will be saved in Wireshark though)
*/
if(key_item->type == AIRPDCAP_KEY_TYPE_WEP)
{
new_key = g_string_new(key_item->key->str);
- KeysCollection->Keys[y].KeyLen = new_key->len / 2;
+ KeysCollection->Keys[y].KeyLen = (guint) new_key->len / 2;
memset(&KeysCollection->Keys[y].KeyData, 0, sizeof(KeysCollection->Keys[y].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);
+ KeyByte = (guint8)strtol(s, NULL, 16);
KeysCollection->Keys[y].KeyData[j / 2] = KeyByte;
}
/* XXX - Change when WPA will be supported!!! */
* Function used to save to the preference file the Decryption Keys.
*/
int
-save_wlan_driver_wep_keys()
+save_wlan_driver_wep_keys(void)
{
GList* key_list = NULL;
char* tmp_key = NULL;
fake_info_if = airpcap_driver_fake_if_info_new();
if(fake_info_if == NULL)
- return FALSE;
+ return 0;
/* Retrieve the wlan preferences */
wlan_prefs = prefs_find_module("wlan");
/* Allocate a structure used to keep infos between the callbacks */
user_data = (keys_cb_data_t*)g_malloc(sizeof(keys_cb_data_t));
- /* Number of keys in key list */
/* Number of keys in key list */
if(fake_info_if->keysCollectionSize != 0)
keys_in_list = (guint)(fake_info_if->keysCollectionSize - sizeof(AirpcapKeysCollection))/sizeof(AirpcapKey);
save_wlan_wireshark_wep_keys(GList* key_ls)
{
GList* key_list = NULL;
- char* tmp_key = NULL;
guint keys_in_list,i;
keys_cb_data_t* user_data;
- airpcap_if_info_t* fake_info_if = NULL;
decryption_key_t* tmp_dk;
/* Retrieve the wlan preferences */
/*
* Airpcap wrapper, used to store the current settings for the selected adapter
*/
-BOOL
+gboolean
airpcap_if_store_cur_config_as_adapter_default(PAirpcapHandle ah)
{
if (!AirpcapLoaded) return FALSE;
* Airpcap wrapper, used to open an airpcap adapter
*/
PAirpcapHandle
-airpcap_if_open(PCHAR name, PCHAR err)
+airpcap_if_open(gchar * name, gchar * err)
{
if (!AirpcapLoaded) return NULL;
if (name == NULL) return NULL;
/*
* Airpcap wrapper, used to close an airpcap adapter
*/
-VOID
+void
airpcap_if_close(PAirpcapHandle handle)
{
if (!AirpcapLoaded) return;
* Retrieve the state of the Airpcap DLL
*/
int
-airpcap_get_dll_state()
+airpcap_get_dll_state(void)
{
return AirpcapVersion;
}
/*
* Airpcap wrapper, used to turn on the led of an airpcap adapter
*/
-BOOL
-airpcap_if_turn_led_on(PAirpcapHandle AdapterHandle, UINT LedNumber)
+gboolean
+airpcap_if_turn_led_on(PAirpcapHandle AdapterHandle, guint LedNumber)
{
if (!AirpcapLoaded) return FALSE;
return g_PAirpcapTurnLedOn(AdapterHandle,LedNumber);
/*
* Airpcap wrapper, used to turn off the led of an airpcap adapter
*/
-BOOL
-airpcap_if_turn_led_off(PAirpcapHandle AdapterHandle, UINT LedNumber)
+gboolean
+airpcap_if_turn_led_off(PAirpcapHandle AdapterHandle, guint LedNumber)
{
if (!AirpcapLoaded) return FALSE;
return g_PAirpcapTurnLedOff(AdapterHandle,LedNumber);
/*
* Airpcap wrapper, used to get the channel of an airpcap adapter
*/
-BOOL
-airpcap_if_get_device_channel(PAirpcapHandle ah, PUINT ch)
+gboolean
+airpcap_if_get_device_channel(PAirpcapHandle ah, guint * ch)
{
if (!AirpcapLoaded) return FALSE;
return g_PAirpcapGetDeviceChannel(ah,ch);
/*
* Airpcap wrapper, used to get the supported channels of an airpcap adapter
*/
-BOOL
-airpcap_if_get_device_supported_channels(PAirpcapHandle ah, AirpcapChannelInfo **cInfo, PULONG nInfo)
+gboolean
+airpcap_if_get_device_supported_channels(PAirpcapHandle ah, AirpcapChannelInfo **cInfo, guint * nInfo)
{
if (!AirpcapLoaded) return FALSE;
if (airpcap_get_dll_state() == AIRPCAP_DLL_OLD){
* Airpcap wrapper, used to get the supported channels of an airpcap adapter
*/
Dot11Channel*
-airpcap_if_get_device_supported_channels_array(PAirpcapHandle ah, PULONG pNumSupportedChannels)
+airpcap_if_get_device_supported_channels_array(PAirpcapHandle ah, guint * pNumSupportedChannels)
{
- AirpcapChannelInfo *chanInfo;
- ULONG i=0, j=0, numInfo = 0;
- if (!AirpcapLoaded) return FALSE;
- if (airpcap_if_get_device_supported_channels(ah, &chanInfo, &numInfo) == FALSE) return NULL;
- numSupportedChannels = 0;
-
- /*
- * allocate a bigger array
- */
- if (numInfo == 0)
- return FALSE;
+ AirpcapChannelInfo *chanInfo;
+ guint i=0, j=0, numInfo = 0;
- pSupportedChannels = malloc(numInfo * (sizeof *pSupportedChannels));
+ if (!AirpcapLoaded)
+ return NULL;
+ if (airpcap_if_get_device_supported_channels(ah, &chanInfo, &numInfo) == FALSE)
+ return NULL;
+ numSupportedChannels = 0;
- for (i = 0; i < numInfo; i++)
- {
- ULONG supportedChannel = 0xFFFFFFFF;
+ /*
+ * allocate a bigger array
+ */
+ if (numInfo == 0)
+ return NULL;
- /*
- * search if we have it already
- */
- for (j = 0; j < numSupportedChannels; j++)
- {
- if (pSupportedChannels[j].Frequency == chanInfo[i].Frequency)
- {
- supportedChannel = j;
- break;
- }
- }
+ pSupportedChannels = g_malloc(numInfo * (sizeof *pSupportedChannels));
- if (supportedChannel == 0xFFFFFFFF)
- {
- /*
- * not found, create a new item
- */
- pSupportedChannels[numSupportedChannels].Frequency = chanInfo[i].Frequency;
-
- switch(chanInfo[i].ExtChannel)
- {
- case -1: pSupportedChannels[numSupportedChannels].Flags = FLAG_CAN_BE_HIGH; break;
- case +1: pSupportedChannels[numSupportedChannels].Flags = FLAG_CAN_BE_LOW; break;
- case 0:
- default: pSupportedChannels[numSupportedChannels].Flags = 0;
- }
-
- /*
- * match with the ABG channels
- */
-
- for (j = 0; j < sizeof(Dot11aChannels)/sizeof(Dot11aChannels[0]); j++)
- {
- if (pSupportedChannels[numSupportedChannels].Frequency == Dot11aChannels[j].Frequency)
- {
- pSupportedChannels[numSupportedChannels].Flags |= FLAG_IS_A_CHANNEL;
- pSupportedChannels[numSupportedChannels].Channel = Dot11aChannels[j].Channel;
- break;
- }
- }
-
- for (j = 0; j < sizeof(Dot11bChannels)/sizeof(Dot11bChannels[0]); j++)
- {
- if (pSupportedChannels[numSupportedChannels].Frequency == Dot11bChannels[j].Frequency)
- {
- pSupportedChannels[numSupportedChannels].Flags |= FLAG_IS_BG_CHANNEL;
- pSupportedChannels[numSupportedChannels].Channel = Dot11bChannels[j].Channel;
- break;
- }
- }
-
- if ((pSupportedChannels[numSupportedChannels].Flags & (FLAG_IS_BG_CHANNEL | FLAG_IS_A_CHANNEL)) == 0){
- pSupportedChannels[numSupportedChannels].Channel = 0;
- }
-
- numSupportedChannels++;
- }
- else
- {
- /*
- * just update the ext channel flags
- */
- switch(chanInfo[i].ExtChannel)
- {
- case -1: pSupportedChannels[supportedChannel].Flags |= FLAG_CAN_BE_HIGH; break;
- case +1: pSupportedChannels[supportedChannel].Flags |= FLAG_CAN_BE_LOW; break;
- case 0:
- default:
- break;
- }
- }
- }
+ for (i = 0; i < numInfo; i++)
+ {
+ guint supportedChannel = G_MAXUINT;
+
+ /*
+ * search if we have it already
+ */
+ for (j = 0; j < numSupportedChannels; j++)
+ {
+ if (pSupportedChannels[j].Frequency == chanInfo[i].Frequency)
+ {
+ supportedChannel = j;
+ break;
+ }
+ }
+
+ if (supportedChannel == G_MAXUINT)
+ {
+ /*
+ * not found, create a new item
+ */
+ pSupportedChannels[numSupportedChannels].Frequency = chanInfo[i].Frequency;
+
+ switch(chanInfo[i].ExtChannel)
+ {
+ case -1:
+ pSupportedChannels[numSupportedChannels].Flags = FLAG_CAN_BE_LOW;
+ break;
+ case +1:
+ pSupportedChannels[numSupportedChannels].Flags = FLAG_CAN_BE_HIGH;
+ break;
+ case 0:
+ default:
+ pSupportedChannels[numSupportedChannels].Flags = 0;
+ }
+
+ /*
+ * Gather channel information
+ */
+
+ pSupportedChannels[numSupportedChannels].Flags |=
+ FREQ_IS_BG(pSupportedChannels[numSupportedChannels].Frequency) ?
+ FLAG_IS_BG_CHANNEL : FLAG_IS_A_CHANNEL;
+ pSupportedChannels[numSupportedChannels].Channel =
+ ieee80211_mhz_to_chan(pSupportedChannels[numSupportedChannels].Frequency);
+ numSupportedChannels++;
+ }
+ else
+ {
+ /*
+ * just update the ext channel flags
+ */
+ switch(chanInfo[i].ExtChannel)
+ {
+ case -1:
+ pSupportedChannels[supportedChannel].Flags |= FLAG_CAN_BE_LOW;
+ break;
+ case +1:
+ pSupportedChannels[supportedChannel].Flags |= FLAG_CAN_BE_HIGH;
+ break;
+ case 0:
+ default:
+ break;
+ }
+ }
+ }
- /*
- * Now sort the list by frequency
- */
- for (i = 0 ; i < numSupportedChannels - 1; i++)
- {
- for (j = i + 1; j < numSupportedChannels; j++)
- {
- if (pSupportedChannels[i].Frequency > pSupportedChannels[j].Frequency)
- {
- Dot11Channel temp = pSupportedChannels[i];
- pSupportedChannels[i] = pSupportedChannels[j];
- pSupportedChannels[j] = temp;
- }
- }
- }
+ if (numSupportedChannels < 1)
+ return NULL;
+ /*
+ * Now sort the list by frequency
+ */
+ for (i = 0 ; i < numSupportedChannels - 1; i++)
+ {
+ for (j = i + 1; j < numSupportedChannels; j++)
+ {
+ if (pSupportedChannels[i].Frequency > pSupportedChannels[j].Frequency)
+ {
+ Dot11Channel temp = pSupportedChannels[i];
+ pSupportedChannels[i] = pSupportedChannels[j];
+ pSupportedChannels[j] = temp;
+ }
+ }
+ }
- *pNumSupportedChannels = numSupportedChannels;
+ *pNumSupportedChannels = numSupportedChannels;
return pSupportedChannels;
}
-/*
- * Get channel representation string given a Frequency
- */
-gchar*
-airpcap_get_channelstr_from_freq(ULONG chan_freq){
- gchar *channelstr;
- guint j;
-
- channelstr = (gchar*)g_malloc(sizeof(gchar)*20);
- for (j = 0; j < sizeof(Dot11aChannels)/sizeof(Dot11aChannels[0]); j++)
- {
- if (chan_freq == Dot11aChannels[j].Frequency)
- {
- sprintf(channelstr, "%u MHz [A %u]", chan_freq, Dot11aChannels[j].Channel);
- return channelstr;
- }
- }
-
- for (j = 0; j < sizeof(Dot11bChannels)/sizeof(Dot11bChannels[0]); j++)
- {
- if (chan_freq == Dot11bChannels[j].Frequency)
- {
- sprintf(channelstr, "%u MHz [BG %u]", chan_freq, Dot11bChannels[j].Channel);
- return channelstr;
- }
- }
-
- sprintf(channelstr, "%u MHz", chan_freq);
-
- return channelstr;
-}
-
-/*
- * Get channel number given a Frequency
- */
-guint
-airpcap_get_channel_number_from_freq(ULONG chan_freq){
- guint j;
-
- for (j = 0; j < sizeof(Dot11bChannels)/sizeof(Dot11bChannels[0]); j++){
- if (chan_freq == Dot11bChannels[j].Frequency){
- return Dot11bChannels[j].Channel;
- }
- }
-
- for (j = 0; j < sizeof(Dot11aChannels)/sizeof(Dot11aChannels[0]); j++){
- if (chan_freq == Dot11aChannels[j].Frequency){
- return Dot11aChannels[j].Channel;
- }
- }
-
- return 0;
-}
-
-/*
- * Get Frequency given a Channel number
- */
-ULONG
-airpcap_get_freq_from_channel_number(guint chan_number){
- guint j;
-
- for (j = 0; j < sizeof(Dot11bChannels)/sizeof(Dot11bChannels[0]); j++){
- if (chan_number == Dot11bChannels[j].Channel){
- return Dot11bChannels[j].Frequency;
- }
- }
-
- for (j = 0; j < sizeof(Dot11aChannels)/sizeof(Dot11aChannels[0]); j++){
- if (chan_number == Dot11aChannels[j].Channel){
- return Dot11aChannels[j].Frequency;
- }
- }
-
- return 0;
-}
-
-
/*
* Airpcap wrapper, used to set the channel of an airpcap adapter
*/
-BOOL
-airpcap_if_set_device_channel(PAirpcapHandle ah, UINT ch)
+gboolean
+airpcap_if_set_device_channel(PAirpcapHandle ah, guint ch)
{
if (!AirpcapLoaded) return FALSE;
return g_PAirpcapSetDeviceChannel(ah,ch);
/*
* Airpcap wrapper, used to set the frequency of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_set_device_channel_ex(PAirpcapHandle ah, AirpcapChannelInfo ChannelInfo)
{
if (!AirpcapLoaded) return FALSE;
if (airpcap_get_dll_state() == AIRPCAP_DLL_OLD){
- guint channel = 0;
- channel = airpcap_get_channel_number_from_freq(ChannelInfo.Frequency);
+ gint channel = 0;
+ channel = ieee80211_mhz_to_chan(ChannelInfo.Frequency);
- if (channel == 0){
+ if (channel < 0){
return FALSE;
} else {
return airpcap_if_set_device_channel(ah, channel);
/*
* Airpcap wrapper, used to get the frequency of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_get_device_channel_ex(PAirpcapHandle ah, PAirpcapChannelInfo pChannelInfo)
{
if (!AirpcapLoaded) return FALSE;
if (airpcap_get_dll_state() == AIRPCAP_DLL_OLD){
guint channel = 0;
- ULONG chan_freq = 0;
+ guint chan_freq = 0;
if (!airpcap_if_get_device_channel(ah, &channel)) return FALSE;
- chan_freq = airpcap_get_freq_from_channel_number(channel);
+ chan_freq = ieee80211_chan_to_mhz(channel, TRUE);
if (chan_freq == 0) return FALSE;
pChannelInfo->Frequency = chan_freq;
/*
* Airpcap wrapper, used to get the link type of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_get_link_type(PAirpcapHandle ah, PAirpcapLinkType lt)
{
if (!AirpcapLoaded) return FALSE;
/*
* Airpcap wrapper, used to set the link type of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_set_link_type(PAirpcapHandle ah, AirpcapLinkType lt)
{
if (!AirpcapLoaded) return FALSE;
/*
* Airpcap wrapper, used to get the fcs presence of an airpcap adapter
*/
-BOOL
-airpcap_if_get_fcs_presence(PAirpcapHandle ah, PBOOL fcs)
+gboolean
+airpcap_if_get_fcs_presence(PAirpcapHandle ah, gboolean * fcs)
{
if (!AirpcapLoaded) return FALSE;
return g_PAirpcapGetFcsPresence(ah,fcs);
/*
* Airpcap wrapper, used to set the fcs presence of an airpcap adapter
*/
-BOOL
-airpcap_if_set_fcs_presence(PAirpcapHandle ah, BOOL fcs)
+gboolean
+airpcap_if_set_fcs_presence(PAirpcapHandle ah, gboolean fcs)
{
if (!AirpcapLoaded) return FALSE;
return g_PAirpcapSetFcsPresence(ah,fcs);
/*
* Airpcap wrapper, used to get the decryption enabling of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_get_decryption_state(PAirpcapHandle ah, PAirpcapDecryptionState PEnable)
{
if (!AirpcapLoaded) return FALSE;
/*
* Airpcap wrapper, used to set the decryption enabling of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_set_decryption_state(PAirpcapHandle ah, AirpcapDecryptionState Enable)
{
if (!AirpcapLoaded) return FALSE;
/*
* Airpcap wrapper, used to get the decryption enabling of an airpcap driver
*/
-BOOL
+gboolean
airpcap_if_get_driver_decryption_state(PAirpcapHandle ah, PAirpcapDecryptionState PEnable)
{
if (!AirpcapLoaded || (g_PAirpcapGetDriverDecryptionState==NULL)) return FALSE;
/*
* Airpcap wrapper, used to set the decryption enabling of an airpcap driver
*/
-BOOL
+gboolean
airpcap_if_set_driver_decryption_state(PAirpcapHandle ah, AirpcapDecryptionState Enable)
{
if (!AirpcapLoaded || (g_PAirpcapSetDriverDecryptionState==NULL)) return FALSE;
/*
* Airpcap wrapper, used to get the fcs validation of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_get_fcs_validation(PAirpcapHandle ah, PAirpcapValidationType val)
{
if (!AirpcapLoaded) return FALSE;
/*
* Airpcap wrapper, used to set the fcs validation of an airpcap adapter
*/
-BOOL
+gboolean
airpcap_if_set_fcs_validation(PAirpcapHandle ah, AirpcapValidationType val)
{
if (!AirpcapLoaded) return FALSE;
/*
* Airpcap wrapper, used to save the settings for the selected_if
*/
-BOOL
+gboolean
airpcap_if_set_device_keys(PAirpcapHandle AdapterHandle, PAirpcapKeysCollection KeysCollection)
{
if (!AirpcapLoaded) return FALSE;
/*
* Airpcap wrapper, used to save the settings for the selected_if
*/
-BOOL
-airpcap_if_get_device_keys(PAirpcapHandle AdapterHandle, PAirpcapKeysCollection KeysCollection, PUINT PKeysCollectionSize)
+gboolean
+airpcap_if_get_device_keys(PAirpcapHandle AdapterHandle, PAirpcapKeysCollection KeysCollection, guint * PKeysCollectionSize)
{
if (!AirpcapLoaded) return FALSE;
return g_PAirpcapGetDeviceKeys(AdapterHandle,KeysCollection,PKeysCollectionSize);
/*
* Airpcap wrapper, used to save the driver's set of keys
*/
-BOOL
+gboolean
airpcap_if_set_driver_keys(PAirpcapHandle AdapterHandle, PAirpcapKeysCollection KeysCollection)
{
if (!AirpcapLoaded || (g_PAirpcapSetDriverKeys==NULL)) return FALSE;
/*
* Airpcap wrapper, used to load the driver's set of keys
*/
-BOOL
-airpcap_if_get_driver_keys(PAirpcapHandle AdapterHandle, PAirpcapKeysCollection KeysCollection, PUINT PKeysCollectionSize)
+gboolean
+airpcap_if_get_driver_keys(PAirpcapHandle AdapterHandle, PAirpcapKeysCollection KeysCollection, guint * PKeysCollectionSize)
{
if (!AirpcapLoaded || (g_PAirpcapGetDriverKeys==NULL)) return FALSE;
return g_PAirpcapGetDriverKeys(AdapterHandle,KeysCollection,PKeysCollectionSize);
ad = airpcap_if_open(name, ebuf);
if(ad)
{
- if_info = g_malloc(sizeof (airpcap_if_info_t));
+ if_info = g_malloc0(sizeof (airpcap_if_info_t));
if_info->name = g_strdup(name);
if (description == NULL){
if_info->description = NULL;
* This function will create a new fake drivers' interface, to load global keys...
*/
airpcap_if_info_t*
-airpcap_driver_fake_if_info_new()
+airpcap_driver_fake_if_info_new(void)
{
PAirpcapHandle ad;
gchar ebuf[AIRPCAP_ERRBUF_SIZE];
g_print(" LINKTYPE: %d\n",if_info->linkType);
g_print(" LOOPBACK: %s\n",if_info->loopback ? "YES" : "NO");
g_print(" (GTK) TAG: %d\n",if_info->tag);
- g_print("SUPPORTED CHANNELS POINTER: %lu\n",if_info->pSupportedChannels);
- g_print(" NUM SUPPORTED CHANNELS: %lu\n",if_info->numSupportedChannels);
+ g_print("SUPPORTED CHANNELS POINTER: %p\n",if_info->pSupportedChannels);
+ g_print(" NUM SUPPORTED CHANNELS: %u\n",if_info->numSupportedChannels);
for(i=0; i<(if_info->numSupportedChannels); i++){
g_print("\n SUPPORTED CHANNEL #%u\n",i+1);
g_print(" CHANNEL: %u\n",if_info->pSupportedChannels[i].Channel);
- g_print(" FREQUENCY: %lu\n",if_info->pSupportedChannels[i].Frequency);
- g_print(" FLAGS: %lu\n",if_info->pSupportedChannels[i].Flags);
+ g_print(" FREQUENCY: %u\n",if_info->pSupportedChannels[i].Frequency);
+ g_print(" FLAGS: %u\n",if_info->pSupportedChannels[i].Flags);
}
g_print("\n\n");
}
/*
* Function used to load the WEP keys for a selected interface
*/
-BOOL
+gboolean
airpcap_if_load_keys(PAirpcapHandle ad, airpcap_if_info_t *if_info)
{
if(!if_info) return FALSE;
/*
* Function used to load the WEP keys for a selected interface
*/
-BOOL
+gboolean
airpcap_if_load_driver_keys(PAirpcapHandle ad, airpcap_if_info_t *if_info)
{
if_info->keysCollectionSize = 0;
{
GList *il = NULL;
airpcap_if_info_t *if_info;
- int i, n_adapts;
+ int n_adapts;
AirpcapDeviceDescription *devsList, *adListEntry;
char errbuf[PCAP_ERRBUF_SIZE];
+ *err = 0;
+
if (!AirpcapLoaded)
{
*err = AIRPCAP_NOT_LOADED;
* Insert the adapters in our list
*/
adListEntry = devsList;
- for(i = 0; i < n_adapts; i++)
+ while(adListEntry)
{
if_info = airpcap_if_info_new(adListEntry->Name, adListEntry->Description);
- if (if_info != NULL){
- il = g_list_append(il, if_info);
- }
+ if (if_info != NULL){
+ il = g_list_append(il, if_info);
+ }
adListEntry = adListEntry->next;
}
g_PAirpcapFreeDeviceList(devsList);
- *err = 0;
return il;
}
*/
airpcap_if_info_t* get_airpcap_if_from_name(GList* if_list, const gchar* name)
{
- unsigned int ifn;
- GList* curr;
- airpcap_if_info_t* if_info;
+ GList* curr;
+ airpcap_if_info_t* if_info;
- ifn = 0;
- if(if_list != NULL)
- {
- while( ifn < g_list_length(if_list) )
- {
- curr = g_list_nth(if_list, ifn);
-
- if_info = NULL;
- if(curr != NULL)
- if_info = curr->data;
- if(if_info != NULL)
- {
- if ( g_ascii_strcasecmp(if_info->name,name) == 0)
- {
- return if_info;
+ for (curr = g_list_first(if_list); curr; curr = g_list_next(curr)) {
+ if_info = (airpcap_if_info_t *)curr->data;
+ if (if_info && (g_ascii_strcasecmp(if_info->name, name) == 0)) {
+ return (if_info);
}
- }
- ifn++;
}
- }
- return NULL;
+ return (NULL);
}
/*
airpcap_get_key_string(AirpcapKey key)
{
unsigned int j = 0;
- unsigned int l = 0;
gchar *dst,*src;
dst = NULL;
for(j = 0; j < key.KeyLen; j++)
{
- src = g_strdup_printf("%.2x\0", key.KeyData[j]);
+ src = g_strdup_printf("%.2x", key.KeyData[j]);
/*
* XXX - use g_strconcat() or GStrings instead ???
*/
- l = g_strlcat(dst,src,WEP_KEY_MAX_CHAR_SIZE+1);
+ g_strlcat(dst, src, WEP_KEY_MAX_CHAR_SIZE+1);
}
g_free(src);
}
*/
if(a == 0)
{
- if(g_strcasecmp(if_info->name,AIRPCAP_DEVICE_ANY_EXTRACT_STRING)!=0)
+ if(g_ascii_strcasecmp(if_info->name,AIRPCAP_DEVICE_ANY_EXTRACT_STRING)!=0)
number = g_strdup_printf("??");
else
number = g_strdup_printf(AIRPCAP_CHANNEL_ANY_NAME);
}
else
{
- number = g_strdup_printf("%.2u\0",n);
+ number = g_strdup_printf("%.2u",n);
}
return number;
airpcap_if_info_t*
airpcap_get_default_if(GList* airpcap_if_list)
{
- int ifn = 0;
- GList* popdown_if_list = NULL;
- GList* curr = NULL;
-
gchar* s;
airpcap_if_info_t* if_info = NULL;
if(ad)
{
- /* Stop blinking (if it was blinkig!)*/
+ /* Stop blinking (if it was blinking!)*/
if(if_info->blinking)
{
/* Turn on the light (if it was off) */
if(ad)
{
- /* Stop blinking (if it was blinkig!)*/
+ /* Stop blinking (if it was blinking!)*/
if(if_info->blinking)
{
/* Turn on the light (if it was off) */
g_free(tmp_key);
/* BITS */
- new_key->bits = new_key->key->len *4; /* every char is 4 bits in WEP keys (it is an exadecimal number) */
+ new_key->bits = (guint) new_key->key->len *4; /* every char is 4 bits in WEP keys (it is an hexadecimal number) */
/* SSID not used in WEP keys */
new_key->ssid = NULL;
* keys for the global AirPcap driver... returns NULL if no keys are found.
*/
GList*
-get_airpcap_driver_keys()
+get_airpcap_driver_keys(void)
{
/* tmp vars */
char* tmp_key = NULL;
if(tmp_key != NULL) g_free(tmp_key);
/* BITS */
- new_key->bits = new_key->key->len *4; /* every char is 4 bits in WEP keys (it is an exadecimal number) */
+ new_key->bits = (guint) new_key->key->len *4; /* every char is 4 bits in WEP keys (it is an hexadecimal number) */
/* SSID not used in WEP keys */
new_key->ssid = NULL;
* no key is found
*/
GList*
-get_wireshark_keys()
+get_wireshark_keys(void)
{
keys_cb_data_t* wep_user_data = NULL;
- gchar *tmp = NULL;
-
GList* final_list = NULL;
GList* wep_final_list = NULL;
/*
* XXX - START : Retrieve the aublists of WEP keys!!! This is needed only 'till Driver WPA decryption
- * is not implemented.
+ * is implemented.
*/
for(i=0;i<n1;i++)
{
}
static guint
-test_if_on(pref_t *pref, gpointer ud _U_)
+test_if_on(pref_t *pref, gpointer ud)
{
gboolean *is_on;
gboolean number;
is_on = (gboolean*)ud;
- if (g_strncasecmp(pref->name, "enable_decryption", 17) == 0 && pref->type == PREF_BOOL)
+ if (g_ascii_strncasecmp(pref->name, "enable_decryption", 17) == 0 && pref->type == PREF_BOOL)
{
number = *pref->varp.boolp;
/*
* Returns TRUE if the Wireshark decryption is active, false otherwise
+ * XXX - Should we just add a routine to packet-ieee80211.c to grab this directly?
*/
gboolean
-wireshark_decryption_on()
+wireshark_decryption_on(void)
{
gboolean is_on;
* Returns TRUE if the AirPcap decryption for the current adapter is active, false otherwise
*/
gboolean
-airpcap_decryption_on()
+airpcap_decryption_on(void)
{
gboolean is_on = FALSE;
}
static guint
-set_on_off(pref_t *pref, gpointer ud _U_)
+set_on_off(pref_t *pref, gpointer ud)
{
gboolean *is_on;
gboolean number;
/* Retrieve user data info */
is_on = (gboolean*)ud;
- if (g_strncasecmp(pref->name, "enable_decryption", 17) == 0 && pref->type == PREF_BOOL)
+ if (g_ascii_strncasecmp(pref->name, "enable_decryption", 17) == 0 && pref->type == PREF_BOOL)
{
number = *pref->varp.boolp;
- g_free((void *)*pref->varp.boolp);
if(*is_on)
*pref->varp.boolp = TRUE;
else
*/
int load_airpcap(void)
{
- BOOL base_functions = TRUE;
- BOOL eleven_n_functions = TRUE;
+#ifdef _WIN32
+ gboolean base_functions = TRUE;
+ gboolean eleven_n_functions = TRUE;
- if((AirpcapLib = LoadLibrary(TEXT("airpcap.dll"))) == NULL)
+ if((AirpcapLib = ws_load_library("airpcap.dll")) == NULL)
{
/* Report the error but go on */
- AirpcapVersion = AIRPCAP_DLL_NOT_FOUND;
+ AirpcapVersion = AIRPCAP_DLL_NOT_FOUND;
return AirpcapVersion;
}
else
if((g_PAirpcapGetDecryptionState = (AirpcapGetDecryptionStateHandler) GetProcAddress(AirpcapLib, "AirpcapGetDecryptionState")) == NULL) base_functions = FALSE;
if((g_PAirpcapSetDecryptionState = (AirpcapSetDecryptionStateHandler) GetProcAddress(AirpcapLib, "AirpcapSetDecryptionState")) == NULL) base_functions = FALSE;
if((g_PAirpcapStoreCurConfigAsAdapterDefault = (AirpcapStoreCurConfigAsAdapterDefaultHandler) GetProcAddress(AirpcapLib, "AirpcapStoreCurConfigAsAdapterDefault")) == NULL) base_functions = FALSE;
- if((g_PAirpcapGetVersion = (AirpcapGetVersionHandler) GetProcAddress(AirpcapLib, "AirpcapGetVersion")) == NULL) base_functions = FALSE;
- if((g_PAirpcapGetDriverDecryptionState = (AirpcapGetDriverDecryptionStateHandler) GetProcAddress(AirpcapLib, "AirpcapGetDriverDecryptionState")) == NULL) base_functions = FALSE;
+ if((g_PAirpcapGetVersion = (AirpcapGetVersionHandler) GetProcAddress(AirpcapLib, "AirpcapGetVersion")) == NULL) base_functions = FALSE;
+ if((g_PAirpcapGetDriverDecryptionState = (AirpcapGetDriverDecryptionStateHandler) GetProcAddress(AirpcapLib, "AirpcapGetDriverDecryptionState")) == NULL) base_functions = FALSE;
if((g_PAirpcapSetDriverDecryptionState = (AirpcapSetDriverDecryptionStateHandler) GetProcAddress(AirpcapLib, "AirpcapSetDriverDecryptionState")) == NULL) base_functions = FALSE;
- if((g_PAirpcapGetDriverKeys = (AirpcapGetDriverKeysHandler) GetProcAddress(AirpcapLib, "AirpcapGetDriverKeys")) == NULL) base_functions = FALSE;
+ if((g_PAirpcapGetDriverKeys = (AirpcapGetDriverKeysHandler) GetProcAddress(AirpcapLib, "AirpcapGetDriverKeys")) == NULL) base_functions = FALSE;
if((g_PAirpcapSetDriverKeys = (AirpcapSetDriverKeysHandler) GetProcAddress(AirpcapLib, "AirpcapSetDriverKeys")) == NULL) base_functions = FALSE;
/* TEST IF AIRPCAP SUPPORTS 11N */
if((g_PAirpcapSetDeviceChannelEx = (AirpcapSetDeviceChannelExHandler) GetProcAddress(AirpcapLib, "AirpcapSetDeviceChannelEx")) == NULL) eleven_n_functions = FALSE;
- if((g_PAirpcapGetDeviceChannelEx = (AirpcapGetDeviceChannelExHandler) GetProcAddress(AirpcapLib, "AirpcapGetDeviceChannelEx")) == NULL) eleven_n_functions = FALSE;
+ if((g_PAirpcapGetDeviceChannelEx = (AirpcapGetDeviceChannelExHandler) GetProcAddress(AirpcapLib, "AirpcapGetDeviceChannelEx")) == NULL) eleven_n_functions = FALSE;
if((g_PAirpcapGetDeviceSupportedChannels = (AirpcapGetDeviceSupportedChannelsHandler) GetProcAddress(AirpcapLib, "AirpcapGetDeviceSupportedChannels")) == NULL) eleven_n_functions = FALSE;
if(base_functions && eleven_n_functions){
AirpcapLoaded = TRUE;
- AirpcapVersion = AIRPCAP_DLL_OK;
+ AirpcapVersion = AIRPCAP_DLL_OK;
}else if(base_functions){
AirpcapLoaded = TRUE;
AirpcapVersion = AIRPCAP_DLL_OLD;
- return AIRPCAP_DLL_OK;
+ return AIRPCAP_DLL_OK;
}else{
AirpcapLoaded = FALSE;
AirpcapVersion = AIRPCAP_DLL_ERROR;
}
}
return AirpcapVersion;
+#else /* _WIN32 */
+ return AIRPCAP_DLL_NOT_FOUND;
+#endif /* _WIN32 */
}
/*
}
g_PAirpcapGetVersion(&vmaj, &vmin, &vrev, &build);
- g_string_sprintfa(str, "with AirPcap %d.%d.%d build %d", vmaj, vmin,
+ g_string_append_printf(str, "with AirPcap %d.%d.%d build %d", vmaj, vmin,
vrev, build);
}
#endif /* HAVE_AIRPCAP */
-#endif /* _WIN32 */