1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-23 02:35:57 +01:00

Fix Dot11/RSNInformation big endian issues.

This commit is contained in:
Matias Fontanini
2015-04-02 22:59:47 -07:00
parent bb683c9f79
commit 40a8354125
3 changed files with 11 additions and 6 deletions

View File

@@ -153,13 +153,13 @@ public:
* \brief Getter for the version field.
* \return The version field.
*/
uint16_t version() const { return Endian::le_to_host(_version); }
uint16_t version() const { return _version; }
/**
* \brief Getter for the capabilities field.
* \return The version field.
*/
uint16_t capabilities() const { return Endian::le_to_host(_capabilities); }
uint16_t capabilities() const { return _capabilities; }
/**
* \brief Getter for the pairwise cypher suite list.

View File

@@ -497,6 +497,7 @@ Dot11ManagementFrame::fh_params_set Dot11ManagementFrame::fh_params_set::from_op
throw malformed_option();
fh_params_set output;
std::memcpy(&output.dwell_time, opt.data_ptr(), sizeof(uint16_t));
output.dwell_time = Endian::le_to_host(output.dwell_time);
output.hop_set = opt.data_ptr()[2];
output.hop_pattern = opt.data_ptr()[3];
output.hop_index = opt.data_ptr()[4];
@@ -512,6 +513,8 @@ Dot11ManagementFrame::cf_params_set Dot11ManagementFrame::cf_params_set::from_op
output.cfp_period = opt.data_ptr()[1];
std::memcpy(&output.cfp_max_duration, &opt.data_ptr()[2], sizeof(uint16_t));
std::memcpy(&output.cfp_dur_remaining, &opt.data_ptr()[4], sizeof(uint16_t));
output.cfp_max_duration = Endian::le_to_host(output.cfp_max_duration);
output.cfp_dur_remaining = Endian::le_to_host(output.cfp_dur_remaining);
return output;
}
@@ -602,8 +605,9 @@ Dot11ManagementFrame::bss_load_type Dot11ManagementFrame::bss_load_type::from_op
const uint8_t *ptr = opt.data_ptr();
std::memcpy(&output.station_count, ptr, sizeof(uint16_t));
output.channel_utilization = ptr[2];
std::memcpy(&output.available_capacity, ptr + 3, sizeof(uint16_t));
output.channel_utilization = ptr[2];
output.station_count = Endian::le_to_host(output.station_count);
output.available_capacity = Endian::le_to_host(output.available_capacity);
return output;
}

View File

@@ -116,11 +116,11 @@ void RSNInformation::group_suite(CypherSuites group) {
}
void RSNInformation::version(uint16_t ver) {
_version = Endian::host_to_le(ver);
_version = ver;
}
void RSNInformation::capabilities(uint16_t cap) {
_capabilities = Endian::host_to_le(cap);
_capabilities = cap;
}
RSNInformation::serialization_type RSNInformation::serialize() const {
@@ -131,10 +131,11 @@ RSNInformation::serialization_type RSNInformation::serialize() const {
uint16_t pairwise_cyphers_size = _pairwise_cyphers.size();
uint16_t akm_cyphers_size = _akm_cyphers.size();
uint16_t capabilities = Endian::host_to_le(_capabilities);
uint16_t version = Endian::host_to_le(_version);
serialization_type buffer(size);
serialization_type::value_type *ptr = &buffer[0];
std::memcpy(ptr, &_version, sizeof(_version));
std::memcpy(ptr, &version, sizeof(version));
ptr += sizeof(uint16_t);
std::memcpy(ptr, &_group_suite, sizeof(uint32_t));
ptr += sizeof(uint32_t);