eap::diameter_avp_append() set of functions introduced
This commit is contained in:
parent
0d8f243d31
commit
b054dcdc7a
@ -91,6 +91,40 @@ namespace eap
|
||||
///
|
||||
struct diameter_avp_header_ven;
|
||||
|
||||
///
|
||||
/// Appends Diameter AVP to response packet
|
||||
///
|
||||
/// \param[in ] code AVP code
|
||||
/// \param[in ] flags AVP flags
|
||||
/// \param[in ] data AVP data (<16777212B)
|
||||
/// \param[in ] size Size of \p data in bytes
|
||||
/// \param[inout] packet Response packet to append data to
|
||||
///
|
||||
void diameter_avp_append(
|
||||
_In_ unsigned int code,
|
||||
_In_ unsigned char flags,
|
||||
_In_bytecount_(size) const void *data,
|
||||
_In_ unsigned int size,
|
||||
_Inout_ sanitizing_blob &packet);
|
||||
|
||||
///
|
||||
/// Appends Diameter AVP to response packet
|
||||
///
|
||||
/// \param[in ] code AVP code
|
||||
/// \param[in ] vendor_id Vendor-ID
|
||||
/// \param[in ] flags AVP flags
|
||||
/// \param[in ] data AVP data (<16777212B)
|
||||
/// \param[in ] size Size of \p data in bytes
|
||||
/// \param[inout] packet Response packet to append data to
|
||||
///
|
||||
void diameter_avp_append(
|
||||
_In_ unsigned int code,
|
||||
_In_ unsigned int vendor_id,
|
||||
_In_ unsigned char flags,
|
||||
_In_bytecount_(size) const void *data,
|
||||
_In_ unsigned int size,
|
||||
_Inout_ sanitizing_blob &packet);
|
||||
|
||||
///
|
||||
/// EAP packet
|
||||
///
|
||||
|
@ -24,6 +24,78 @@ using namespace std;
|
||||
using namespace winstd;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// eap::diameter_avp_append
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
void eap::diameter_avp_append(
|
||||
_In_ unsigned int code,
|
||||
_In_ unsigned char flags,
|
||||
_In_bytecount_(size) const void *data,
|
||||
_In_ unsigned int size,
|
||||
_Inout_ sanitizing_blob &packet)
|
||||
{
|
||||
unsigned int
|
||||
padding = (unsigned int)((4 - size) % 4),
|
||||
size_outer;
|
||||
|
||||
packet.reserve(
|
||||
packet.size() +
|
||||
(size_outer =
|
||||
sizeof(diameter_avp_header) + // Diameter header
|
||||
size) + // Data
|
||||
padding); // Data padding
|
||||
|
||||
// Diameter AVP header
|
||||
diameter_avp_header hdr;
|
||||
*reinterpret_cast<unsigned int*>(hdr.code) = htonl(code);
|
||||
hdr.flags = flags;
|
||||
hton24(size_outer, hdr.length);
|
||||
packet.insert(packet.end(), reinterpret_cast<const unsigned char*>(&hdr), reinterpret_cast<const unsigned char*>(&hdr + 1));
|
||||
|
||||
// Data
|
||||
packet.insert(packet.end(), reinterpret_cast<const unsigned char*>(data), reinterpret_cast<const unsigned char*>(data) + size);
|
||||
packet.insert(packet.end(), padding, 0);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// eap::diameter_avp_append
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
void eap::diameter_avp_append(
|
||||
_In_ unsigned int code,
|
||||
_In_ unsigned int vendor_id,
|
||||
_In_ unsigned char flags,
|
||||
_In_bytecount_(size) const void *data,
|
||||
_In_ unsigned int size,
|
||||
_Inout_ sanitizing_blob &packet)
|
||||
{
|
||||
unsigned int
|
||||
padding = (unsigned int)((4 - size) % 4),
|
||||
size_outer;
|
||||
|
||||
packet.reserve(
|
||||
packet.size() +
|
||||
(size_outer =
|
||||
sizeof(diameter_avp_header_ven) + // Diameter header
|
||||
size) + // Data
|
||||
padding); // Data padding
|
||||
|
||||
// Diameter AVP header
|
||||
diameter_avp_header_ven hdr;
|
||||
*reinterpret_cast<unsigned int*>(hdr.code) = htonl(code);
|
||||
hdr.flags = flags | diameter_avp_flag_vendor;
|
||||
hton24(size_outer, hdr.length);
|
||||
*reinterpret_cast<unsigned int*>(hdr.vendor) = htonl(vendor_id);
|
||||
packet.insert(packet.end(), reinterpret_cast<const unsigned char*>(&hdr), reinterpret_cast<const unsigned char*>(&hdr + 1));
|
||||
|
||||
// Data
|
||||
packet.insert(packet.end(), reinterpret_cast<const unsigned char*>(data), reinterpret_cast<const unsigned char*>(data) + size);
|
||||
packet.insert(packet.end(), padding, 0);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// eap::packet
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
x
Reference in New Issue
Block a user