MCPcopy Create free account
hub / github.com/defold/defold / ParseDnsPacket

Function ParseDnsPacket

engine/dlib/src/test/test_mdns.cpp:662–778  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

660 }
661
662 static bool ParseDnsPacket(const uint8_t* data, uint32_t size, RawDnsPacket* packet)
663 {
664 packet->m_IsResponse = false;
665 packet->m_Questions.clear();
666 packet->m_Records.clear();
667
668 if (size < 12)
669 return false;
670
671 uint32_t offset = 0;
672 uint16_t id = 0;
673 uint16_t flags = 0;
674 uint16_t qdcount = 0;
675 uint16_t ancount = 0;
676 uint16_t nscount = 0;
677 uint16_t arcount = 0;
678 if (!ReadU16(data, size, &offset, &id)
679 || !ReadU16(data, size, &offset, &flags)
680 || !ReadU16(data, size, &offset, &qdcount)
681 || !ReadU16(data, size, &offset, &ancount)
682 || !ReadU16(data, size, &offset, &nscount)
683 || !ReadU16(data, size, &offset, &arcount))
684 {
685 return false;
686 }
687
688 packet->m_IsResponse = (flags & DNS_FLAG_RESPONSE) != 0;
689 for (uint16_t i = 0; i < qdcount; ++i)
690 {
691 RawDnsQuestion question;
692 if (!ReadName(data, size, &offset, &question.m_Name)
693 || !ReadU16(data, size, &offset, &question.m_Type)
694 || !ReadU16(data, size, &offset, &question.m_Class))
695 {
696 return false;
697 }
698 packet->m_Questions.push_back(question);
699 }
700
701 const uint32_t records = (uint32_t) ancount + (uint32_t) nscount + (uint32_t) arcount;
702 for (uint32_t i = 0; i < records; ++i)
703 {
704 RawDnsRecord record;
705 if (!ReadName(data, size, &offset, &record.m_Name)
706 || !ReadU16(data, size, &offset, &record.m_Type)
707 || !ReadU16(data, size, &offset, &record.m_Class)
708 || !ReadU32(data, size, &offset, &record.m_Ttl)
709 || !ReadU16(data, size, &offset, &record.m_Rdlength))
710 {
711 return false;
712 }
713
714 if (offset + record.m_Rdlength > size)
715 return false;
716
717 const uint32_t rdata_offset = offset;
718 switch (record.m_Type)
719 {

Callers 2

Calls 6

ReadU16Function · 0.70
ReadNameFunction · 0.70
ReadU32Function · 0.70
clearMethod · 0.45
push_backMethod · 0.45
findMethod · 0.45

Tested by

no test coverage detected