From b40db9cf4c84a4b5a0b753298d13616d9bd2b5f9 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Wed, 18 Jul 2012 22:10:34 +0000 Subject: Add to the 802.11 pseudo-header a "this is already decrypted" flag, set it as appropriate in the code to read Network Instruments Observer captures (rather than tweaking the "protected" flag in the packet data), and use that flag in the 802.11 dissector. Fix indentation while we're at it (tabs are not *ipso facto* 4 spaces). svn path=/trunk/; revision=43795 --- wiretap/network_instruments.c | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) (limited to 'wiretap/network_instruments.c') diff --git a/wiretap/network_instruments.c b/wiretap/network_instruments.c index 8984db543f..2bdf1e6a60 100644 --- a/wiretap/network_instruments.c +++ b/wiretap/network_instruments.c @@ -106,7 +106,7 @@ static gboolean observer_seek_read(wtap *wth, gint64 seek_off, union wtap_pseudo_header *pseudo_header, guint8 *pd, int length, int *err, gchar **err_info); static int read_packet_header(FILE_T fh, union wtap_pseudo_header *pseudo_header, - packet_entry_header *packet_header, gboolean *decrypted_wireless, int *err, gchar **err_info); + packet_entry_header *packet_header, int *err, gchar **err_info); static int read_packet_data(FILE_T fh, int offset_to_frame, int current_offset_from_packet_header, guint8 *pd, int length, int *err, char **err_info); static gboolean skip_to_next_packet(wtap *wth, int offset_to_next_packet, @@ -265,7 +265,6 @@ int network_instruments_open(wtap *wth, int *err, gchar **err_info) static gboolean observer_read(wtap *wth, int *err, gchar **err_info, gint64 *data_offset) { - gboolean decrypted_wireless; int header_bytes_consumed; int data_bytes_consumed; packet_entry_header packet_header; @@ -275,8 +274,8 @@ static gboolean observer_read(wtap *wth, int *err, gchar **err_info, *data_offset = file_tell(wth->fh); /* process the packet header, including TLVs */ - header_bytes_consumed = read_packet_header(wth->fh, &wth->pseudo_header, &packet_header, &decrypted_wireless, - err, err_info); + header_bytes_consumed = read_packet_header(wth->fh, &wth->pseudo_header, &packet_header, err, + err_info); if (header_bytes_consumed <= 0) return FALSE; /* EOF or error */ @@ -357,11 +356,6 @@ static gboolean observer_read(wtap *wth, int *err, gchar **err_info, return FALSE; } - /* clear the protected flag in the wireless header if needed */ - if (decrypted_wireless && data_bytes_consumed > 1) { - *(buffer_start_ptr(wth->frame_buffer)+1) = (*(buffer_start_ptr(wth->frame_buffer)+1) & 0xbf); - } - /* skip over any extra bytes following the frame data */ if (!skip_to_next_packet(wth, packet_header.offset_to_next_packet, header_bytes_consumed + data_bytes_consumed, err, err_info)) { @@ -376,17 +370,16 @@ static gboolean observer_seek_read(wtap *wth, gint64 seek_off, union wtap_pseudo_header *pseudo_header, guint8 *pd, int length, int *err, gchar **err_info) { - gboolean decrypted_wireless; packet_entry_header packet_header; int offset; - int data_bytes_consumed; + int data_bytes_consumed; if (file_seek(wth->random_fh, seek_off, SEEK_SET, err) == -1) return FALSE; /* process the packet header, including TLVs */ - offset = read_packet_header(wth->random_fh, pseudo_header, &packet_header, &decrypted_wireless, - err, err_info); + offset = read_packet_header(wth->random_fh, pseudo_header, &packet_header, err, + err_info); if (offset <= 0) return FALSE; /* EOF or error */ @@ -403,23 +396,18 @@ static gboolean observer_seek_read(wtap *wth, gint64 seek_off, } /* read the frame data */ - data_bytes_consumed = read_packet_data(wth->random_fh, packet_header.offset_to_frame, + data_bytes_consumed = read_packet_data(wth->random_fh, packet_header.offset_to_frame, offset, pd, length, err, err_info); if (data_bytes_consumed < 0) { return FALSE; } - /* clear the protected flag in the wireless header if needed */ - if (decrypted_wireless && data_bytes_consumed > 1) { - *(pd+1) = (*(pd+1) & 0xbf); - } - return TRUE; } static int read_packet_header(FILE_T fh, union wtap_pseudo_header *pseudo_header, - packet_entry_header *packet_header, gboolean *decrypted_wireless, int *err, gchar **err_info) + packet_entry_header *packet_header, int *err, gchar **err_info) { int offset; int bytes_read; @@ -498,11 +486,11 @@ read_packet_header(FILE_T fh, union wtap_pseudo_header *pseudo_header, } /* update the pseudo header */ pseudo_header->ieee_802_11.fcs_len = 0; + /* set decryption status */ + pseudo_header->ieee_802_11.decrypted = (wireless_header.conditions & WIRELESS_WEP_SUCCESS) != 0; pseudo_header->ieee_802_11.channel = wireless_header.frequency; pseudo_header->ieee_802_11.data_rate = wireless_header.rate; pseudo_header->ieee_802_11.signal_level = wireless_header.strengthPercent; - /* set decryption status */ - *decrypted_wireless = (wireless_header.conditions & WIRELESS_WEP_SUCCESS) > 0; offset += bytes_read; break; default: -- cgit v1.2.3