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:
parent
3aea407a85
commit
b166d0744d
|
@ -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();
|
||||
};
|
||||
|
|
|
@ -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}
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue