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:
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user