working commit

main
Brett 2023-10-26 16:12:03 -04:00
parent 705c775c27
commit 5392059465
6 changed files with 16 additions and 14 deletions

Binary file not shown.

View File

@ -61,3 +61,5 @@
7369 7621 1698284653283151767 insane_dns ff5ae500893d0be1 7369 7621 1698284653283151767 insane_dns ff5ae500893d0be1
2 2997 1698338548693635693 CMakeFiles/insane_dns.dir/src/main.cpp.o 727da43cdbc82421 2 2997 1698338548693635693 CMakeFiles/insane_dns.dir/src/main.cpp.o 727da43cdbc82421
2997 3087 1698338548789636298 insane_dns ff5ae500893d0be1 2997 3087 1698338548789636298 insane_dns ff5ae500893d0be1
5 7590 1698350638277966894 CMakeFiles/insane_dns.dir/src/main.cpp.o 727da43cdbc82421
7590 7806 1698350638505965615 insane_dns ff5ae500893d0be1

View File

@ -1,3 +1,3 @@
Start testing: Oct 26 12:42 EDT Start testing: Oct 26 16:04 EDT
---------------------------------------------------------- ----------------------------------------------------------
End testing: Oct 26 12:42 EDT End testing: Oct 26 16:04 EDT

Binary file not shown.

View File

@ -46,7 +46,6 @@ static inline constexpr IPAddress REPLACEMENT_IP()
*/ */
static const std::unordered_set<std::string> DISALLOWED_DOMAINS{ static const std::unordered_set<std::string> DISALLOWED_DOMAINS{
"en.wikipedia.org", "en.wikipedia.org",
"tpgc.me",
"zombo.com" "zombo.com"
}; };
@ -107,7 +106,7 @@ class question
uint16_t QTYPE; uint16_t QTYPE;
uint16_t QCLASS; uint16_t QCLASS;
public: public:
explicit question(const byte_reader& reader) explicit question(const blt::byte_reader& reader)
{ {
// process the full question // process the full question
while (true) while (true)
@ -144,7 +143,7 @@ class answer
bool requires_reset = false; bool requires_reset = false;
unsigned char* RDATA = nullptr; unsigned char* RDATA = nullptr;
public: public:
explicit answer(const byte_reader& reader) explicit answer(const blt::byte_reader& reader)
{ {
reader.to(NAME); reader.to(NAME);
reader.to(TYPE); reader.to(TYPE);
@ -186,6 +185,10 @@ class answer
inline void reset(size_t offset) const inline void reset(size_t offset) const
{ {
if (!requires_reset)
return;
// like I said not 100 on how to construct the ptr
// seems to be causing issues. I've stopped working on this as it's not required.
auto i16 = static_cast<uint16_t>(offset) & (~(0b11 << 14)); auto i16 = static_cast<uint16_t>(offset) & (~(0b11 << 14));
NAME |= i16; NAME |= i16;
} }
@ -195,7 +198,7 @@ class answer
answer& operator=(const answer& answer) = delete; answer& operator=(const answer& answer) = delete;
answer(answer&& move) answer(answer&& move) noexcept
{ {
NAME = move.NAME; NAME = move.NAME;
TYPE = move.TYPE; TYPE = move.TYPE;
@ -206,7 +209,7 @@ class answer
move.RDATA = nullptr; move.RDATA = nullptr;
} }
answer& operator=(answer&& move) answer& operator=(answer&& move) noexcept
{ {
NAME = 0; NAME = 0;
NAME = move.NAME; NAME = move.NAME;
@ -246,9 +249,6 @@ class send_buffer
{ {
blt::mem::toBytes(t, &internal_data[write_index]); blt::mem::toBytes(t, &internal_data[write_index]);
write_index += sizeof(T); write_index += sizeof(T);
} else if constexpr (std::is_same_v<T, std::string>)
{
static_assert("No");
} else if constexpr (std::is_same_v<T, answer>) } else if constexpr (std::is_same_v<T, answer>)
{ {
write(t.NAME); write(t.NAME);
@ -351,18 +351,18 @@ int main()
uint16_t num_of_answers; uint16_t num_of_answers;
blt::mem::fromBytes(&mod_recv_buf[6], num_of_answers); blt::mem::fromBytes(&mod_recv_buf[6], num_of_answers);
byte_reader reader2(mod_recv_buf.data(), mod_recv_buf.size()); blt::byte_reader reader(mod_recv_buf.data(), mod_recv_buf.size());
BLT_INFO("Bytes answered %d with %d answers", out_bytes, num_of_answers); BLT_INFO("Bytes answered %d with %d answers", out_bytes, num_of_answers);
// no one actually does multiple questions. trying to do it in dig is not easy // no one actually does multiple questions. trying to do it in dig is not easy
// and the standard isn't really designed for this (how do we handle if one question errors but the other doesn't? there is only // and the standard isn't really designed for this (how do we handle if one question errors but the other doesn't? there is only
// one return code.) // one return code.)
question q(reader2); question q(reader);
std::vector<answer> answers; std::vector<answer> answers;
for (int i = 0; i < num_of_answers; i++) for (int i = 0; i < num_of_answers; i++)
{ {
answer a(reader2); answer a(reader);
answers.push_back(std::move(a)); answers.push_back(std::move(a));
} }
@ -387,7 +387,7 @@ int main()
a.reset(question_offset); a.reset(question_offset);
send.write(a); send.write(a);
} }
send.write(reader2.from(), out_bytes - reader2.last()); send.write(reader.from(), out_bytes - reader.last());
asio::error_code ignored_error; asio::error_code ignored_error;
socket.send_to(send.buffer(), remote_endpoint, 0, ignored_error); socket.send_to(send.buffer(), remote_endpoint, 0, ignored_error);