method_defrag: Simplify data length calculation
Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
a18fb7826c
commit
4af1bdc935
@ -59,18 +59,12 @@ EapPeerMethodResponseAction eap::method_defrag::process_request_packet(
|
|||||||
assert(dwReceivedPacketSize >= 1); // Request packet should contain flags at least.
|
assert(dwReceivedPacketSize >= 1); // Request packet should contain flags at least.
|
||||||
auto data_packet = reinterpret_cast<const unsigned char*>(pReceivedPacket);
|
auto data_packet = reinterpret_cast<const unsigned char*>(pReceivedPacket);
|
||||||
|
|
||||||
// Get packet content pointer and size for more readable code later on.
|
// Get packet content pointers for more readable code later on.
|
||||||
const unsigned char *data_content;
|
auto
|
||||||
size_t size_content;
|
data_content = data_packet + (data_packet[0] & flags_req_length_incl ? 5 : 1),
|
||||||
if (data_packet[0] & flags_req_length_incl) {
|
data_content_end = data_packet + dwReceivedPacketSize;
|
||||||
// Length field is included.
|
if (data_content > data_content_end)
|
||||||
data_content = data_packet + 5;
|
throw win_runtime_error(EAP_E_EAPHOST_METHOD_INVALID_PACKET, __FUNCTION__ " Incomplete data.");
|
||||||
size_content = dwReceivedPacketSize - 5;
|
|
||||||
} else {
|
|
||||||
// Length field not included.
|
|
||||||
data_content = data_packet + 1;
|
|
||||||
size_content = dwReceivedPacketSize - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the defragmentation.
|
// Do the defragmentation.
|
||||||
if (data_packet[0] & flags_req_more_frag) {
|
if (data_packet[0] & flags_req_more_frag) {
|
||||||
@ -81,7 +75,7 @@ EapPeerMethodResponseAction eap::method_defrag::process_request_packet(
|
|||||||
m_data_req.reserve(ntohl(*reinterpret_cast<const unsigned int*>(data_packet + 1)));
|
m_data_req.reserve(ntohl(*reinterpret_cast<const unsigned int*>(data_packet + 1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_data_req.insert(m_data_req.end(), data_content, data_content + size_content);
|
m_data_req.insert(m_data_req.end(), data_content, data_content_end);
|
||||||
|
|
||||||
// Respond with ACK packet (empty packet).
|
// Respond with ACK packet (empty packet).
|
||||||
m_data_res.clear();
|
m_data_res.clear();
|
||||||
@ -89,10 +83,10 @@ EapPeerMethodResponseAction eap::method_defrag::process_request_packet(
|
|||||||
return EapPeerMethodResponseActionSend;
|
return EapPeerMethodResponseActionSend;
|
||||||
} else if (!m_data_req.empty()) {
|
} else if (!m_data_req.empty()) {
|
||||||
// Last fragment received. Append data.
|
// Last fragment received. Append data.
|
||||||
m_data_req.insert(m_data_req.end(), data_content, data_content + size_content);
|
m_data_req.insert(m_data_req.end(), data_content, data_content_end);
|
||||||
} else {
|
} else {
|
||||||
// This is a complete non-fragmented packet.
|
// This is a complete non-fragmented packet.
|
||||||
m_data_req.assign(data_content, data_content + size_content);
|
m_data_req.assign(data_content, data_content_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_send_res) {
|
if (m_send_res) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user