0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-02 18:18:56 +02:00

ircd::rfc1035: Ensure record types default-construct the super with their type.

This commit is contained in:
Jason Volk 2018-03-01 23:34:59 -08:00
parent 3aea407a85
commit b166d0744d
2 changed files with 38 additions and 4 deletions

View file

@ -157,6 +157,7 @@ struct ircd::rfc1035::record
template<class T> const T &as() const;
record(const answer &);
record(const uint16_t &type);
record() = default;
virtual ~record() noexcept;
};
@ -182,7 +183,7 @@ struct ircd::rfc1035::record::A
uint32_t ip4 {0};
A(const answer &);
A() = default;
A();
};
/// IPv6 address record.
@ -193,7 +194,7 @@ struct ircd::rfc1035::record::AAAA
uint128_t ip6 {0};
AAAA(const answer &);
AAAA() = default;
AAAA();
};
/// Canonical name aliasing record
@ -204,7 +205,7 @@ struct ircd::rfc1035::record::CNAME
char namebuf[256];
CNAME(const answer &);
CNAME() = default;
CNAME();
};
/// Service record.
@ -219,5 +220,5 @@ struct ircd::rfc1035::record::SRV
char tgtbuf[256];
SRV(const answer &);
SRV() = default;
SRV();
};

View file

@ -178,6 +178,11 @@ ircd::rfc1035::answer::parse(const const_buffer &in)
// Record
//
ircd::rfc1035::record::record(const uint16_t &type)
:type{type}
{
}
ircd::rfc1035::record::record(const answer &answer)
:type{answer.qtype}
,ttl{answer.ttl}
@ -191,6 +196,15 @@ noexcept
{
}
//
// A
//
ircd::rfc1035::record::A::A()
:record{1}
{
}
ircd::rfc1035::record::A::A(const answer &answer)
:record{answer}
{
@ -204,6 +218,15 @@ ircd::rfc1035::record::A::A(const answer &answer)
ip4 = bswap(*(const uint32_t *)data(rdata));
}
//
// AAAA
//
ircd::rfc1035::record::AAAA::AAAA()
:record{28}
{
}
ircd::rfc1035::record::AAAA::AAAA(const answer &answer)
:record{answer}
{
@ -217,6 +240,11 @@ ircd::rfc1035::record::AAAA::AAAA(const answer &answer)
ip6 = bswap(*(const uint128_t *)data(rdata));
}
ircd::rfc1035::record::CNAME::CNAME()
:record{5}
{
}
ircd::rfc1035::record::CNAME::CNAME(const answer &answer)
:record{answer}
{
@ -230,6 +258,11 @@ ircd::rfc1035::record::CNAME::CNAME(const answer &answer)
name = string_view{namebuf, len - 1};
}
ircd::rfc1035::record::SRV::SRV()
:record{33}
{
}
ircd::rfc1035::record::SRV::SRV(const answer &answer)
:record{answer}
{