diff --git a/sample/server.cpp b/sample/server.cpp index f0bd1e2..dda0f4b 100644 --- a/sample/server.cpp +++ b/sample/server.cpp @@ -1,5 +1,6 @@ #include "server.h" #include "packet_codes.h" +#include "attribute_types.h" #include #include @@ -33,7 +34,14 @@ RadProto::Packet Server::makeResponse(const RadProto::Packet& request) std::vector vendorValue {0, 0, 0, 3}; vendorSpecific.push_back(RadProto::VendorSpecific(m_dictionaries.vendorCode("Dlink"), m_dictionaries.vendorAttributeCode("Dlink", "Dlink-User-Level"), vendorValue)); - if (request.type() == RadProto::ACCESS_REQUEST) + std::string userName; + for (const auto& attribute : request.attributes()) + { + if (attribute->type() == RadProto::USER_NAME) + userName = attribute->toString(); + } + + if (request.type() == RadProto::ACCESS_REQUEST && userName == "test") return RadProto::Packet(RadProto::ACCESS_ACCEPT, request.id(), request.auth(), attributes, vendorSpecific); return RadProto::Packet(RadProto::ACCESS_REJECT, request.id(), request.auth(), attributes, vendorSpecific); diff --git a/src/packet.cpp b/src/packet.cpp index d80a024..1822511 100644 --- a/src/packet.cpp +++ b/src/packet.cpp @@ -76,7 +76,7 @@ Packet::Packet(const uint8_t* buffer, size_t size, const std::string& secret) Packet::Packet(uint8_t type, uint8_t id, const std::array& auth, const std::vector& attributes, const std::vector& vendorSpecific) : m_type(type), m_id(id), - m_recalcAuth(m_type == 2), + m_recalcAuth(m_type == 2 || m_type == 3 || m_type == 11), m_auth(auth), m_attributes(attributes), m_vendorSpecific(vendorSpecific)