View Source dns (dns_erlang v3.0.5)
Summary
Functions
Equivalent to add_tsig(Msg, Alg, Name, Secret, ErrCode, []).
Generates and then appends a TSIG RR to a message. Supports MD5, SHA1, SHA224, SHA256, SHA384 and SHA512 algorithms.
Returns the name of a DNS algorithm as a binary string.
Returns the name of the class as a binary string.
Compare two domain names insensitive of case.
Compares two equal sized binaries over their entire length. Returns immediately if sizes do not match.
Decode a binary DNS message.
Splits a dname into a list of labels and removes unneeded escapes.
Returns provided name with case-insensitive characters in lowercase.
Returns provided name with case-insensitive characters in uppercase.
Encode a dns_message record.
Encode a dns_message record - will truncate the message as needed.
Returns the name of an extended option as a binary string.
Returns the name of an extended rcode as a binary string.
Escapes dots in a DNS label
Joins a list of DNS labels, escaping where necessary.
Returns the name of an LLQ error code as a binary string.
Returns the name of an LLQ opcode as a binary string.
Returns the name of an opcode as a binary string.
Returns a random integer suitable for use as DNS message identifier.
Returns the name of an rcode as a binary string.
Returns the name of a TSIG error as a binary string.
Returns the name of the type as a binary string.
Return current unix time.
Return the unix time from a now or universal time.
Verifies a TSIG message signature.
Types
-type alg() :: 3 | 6 | 5 | 7 | 8 | 10.
-type answers() :: [rr()].
-type authority() :: [rr()].
-type class() :: uint16().
-type decode_error() :: formerr | truncated | trailing_garbage.
-type dname() :: binary().
-type encode_message_opt() :: {max_size, 512..65535} | {tc_mode, default | axfr | llq_event} | {tsig, [encode_message_tsig_opt()]}.
-type encode_message_tsig_opt() :: {msgid, message_id()} | {alg, tsig_alg()} | {name, dname()} | {secret, binary()} | {errcode, tsig_error()} | {other, binary()} | tsig_opt().
-type eoptcode() :: 0..65535.
-type ercode() :: 0 | 16.
-type label() :: binary().
-type llqerrcode() :: 0..6.
-type llqopcode() :: 1..3.
-type message() :: #dns_message{id :: dns:message_id(), qr :: boolean(), oc :: dns:opcode(), aa :: boolean(), tc :: boolean(), rd :: boolean(), ra :: boolean(), ad :: boolean(), cd :: boolean(), rc :: dns:rcode(), qc :: dns:uint16(), anc :: dns:uint16(), auc :: dns:uint16(), adc :: dns:uint16(), questions :: dns:questions(), answers :: dns:answers(), authority :: dns:authority(), additional :: dns:additional()}.
-type message_bin() :: <<_:64, _:_*8>>.
-type message_id() :: uint16().
-type opcode() :: uint4().
-type opt_ecs() :: #dns_opt_ecs{family :: dns:uint16(), source_prefix_length :: dns:uint8(), scope_prefix_length :: dns:uint8(), address :: binary()}.
-type opt_llq() :: #dns_opt_llq{opcode :: dns:uint16(), errorcode :: dns:uint16(), id :: dns:uint64(), leaselife :: dns:uint32()}.
-type opt_nsid() :: #dns_opt_nsid{data :: binary()}.
-type opt_owner() :: #dns_opt_owner{seq :: dns:uint8(), primary_mac :: <<_:(6 * 8)>>, wakeup_mac :: <<>> | <<_:(6 * 8)>>, password :: <<>> | <<_:(6 * 8)>>}.
-type opt_ul() :: #dns_opt_ul{lease :: dns:uint32()}.
-type optrr() :: #dns_optrr{udp_payload_size :: integer(), ext_rcode :: dns:rcode(), version :: dns:uint8(), dnssec :: boolean(), data :: [dns:opt_nsid() | dns:opt_ul() | dns:opt_unknown() | dns:opt_ecs() | dns:opt_llq() | dns:opt_owner()]}.
-type questions() :: [query()].
-type rcode() :: uint4().
-type rr() :: #dns_rr{name :: dns:dname(), type :: dns:type(), class :: dns:class(), ttl :: dns:ttl(), data :: dns:rrdata()}.
-type rrdata() :: binary() | #dns_rrdata_a{ip :: inet:ip4_address()} | #dns_rrdata_aaaa{ip :: inet:ip6_address()} | #dns_rrdata_afsdb{subtype :: dns:uint16(), hostname :: dns:dname()} | #dns_rrdata_caa{flags :: dns:uint8(), tag :: binary(), value :: binary()} | #dns_rrdata_cdnskey{flags :: dns:uint16(), protocol :: dns:uint8(), alg :: dns:uint8(), public_key :: iodata(), key_tag :: integer()} | #dns_rrdata_cds{keytag :: dns:uint16(), alg :: dns:uint8(), digest_type :: dns:uint8(), digest :: binary()} | #dns_rrdata_cert{type :: dns:uint16(), key_tag :: dns:uint16(), alg :: dns:uint8(), cert :: binary()} | #dns_rrdata_cname{dname :: dns:dname()} | #dns_rrdata_dhcid{data :: binary()} | #dns_rrdata_dlv{keytag :: dns:uint16(), alg :: dns:uint8(), digest_type :: dns:uint8(), digest :: binary()} | #dns_rrdata_dname{dname :: dns:dname()} | #dns_rrdata_dnskey{flags :: dns:uint16(), protocol :: dns:uint8(), alg :: dns:uint8(), public_key :: iodata(), key_tag :: integer()} | #dns_rrdata_ds{keytag :: dns:uint16(), alg :: dns:uint8(), digest_type :: dns:uint8(), digest :: binary()} | #dns_rrdata_hinfo{cpu :: binary(), os :: binary()} | #dns_rrdata_ipseckey{precedence :: dns:uint8(), alg :: dns:uint8(), gateway :: dns:dname() | inet:ip_address(), public_key :: binary()} | #dns_rrdata_key{type :: dns:uint2(), xt :: 0..1, name_type :: dns:uint2(), sig :: dns:uint4(), protocol :: dns:uint8(), alg :: dns:uint8(), public_key :: binary()} | #dns_rrdata_kx{preference :: dns:uint16(), exchange :: dns:dname()} | #dns_rrdata_loc{size :: integer(), horiz :: integer(), vert :: integer(), lat :: dns:uint32(), lon :: dns:uint32(), alt :: dns:uint32()} | #dns_rrdata_mb{madname :: dns:dname()} | #dns_rrdata_mg{madname :: dns:dname()} | #dns_rrdata_minfo{rmailbx :: dns:dname(), emailbx :: dns:dname()} | #dns_rrdata_mr{newname :: dns:dname()} | #dns_rrdata_mx{preference :: dns:uint16(), exchange :: dns:dname()} | #dns_rrdata_naptr{order :: dns:uint16(), preference :: dns:uint16(), flags :: binary(), services :: binary(), regexp :: binary(), replacement :: dns:dname()} | #dns_rrdata_ns{dname :: dns:dname()} | #dns_rrdata_nsec{next_dname :: dns:dname(), types :: [non_neg_integer()]} | #dns_rrdata_nsec3{hash_alg :: dns:uint8(), opt_out :: boolean(), iterations :: dns:uint16(), salt :: binary(), hash :: binary(), types :: [non_neg_integer()]} | #dns_rrdata_nsec3param{hash_alg :: dns:uint8(), flags :: dns:uint8(), iterations :: dns:uint16(), salt :: binary()} | #dns_rrdata_nxt{dname :: dns:dname(), types :: [non_neg_integer()]} | #dns_rrdata_ptr{dname :: dns:dname()} | #dns_rrdata_rp{mbox :: dns:dname(), txt :: dns:dname()} | #dns_rrdata_rrsig{type_covered :: dns:uint16(), alg :: 3 | 5 | 6 | 7 | 8 | 10, labels :: dns:uint8(), original_ttl :: dns:uint32(), expiration :: dns:uint32(), inception :: dns:uint32(), key_tag :: dns:uint16(), signers_name :: dns:dname(), signature :: binary()} | #dns_rrdata_rt{preference :: dns:uint16(), host :: dns:dname()} | #dns_rrdata_soa{mname :: dns:dname(), rname :: dns:dname(), serial :: dns:uint32(), refresh :: dns:uint32(), retry :: dns:uint32(), expire :: dns:uint32(), minimum :: dns:uint32()} | #dns_rrdata_spf{spf :: [binary()]} | #dns_rrdata_srv{priority :: dns:uint16(), weight :: dns:uint16(), port :: dns:uint16(), target :: dns:dname()} | #dns_rrdata_svcb{svc_priority :: dns:uint16(), target_name :: dns:dname(), svc_params :: dns:svcb_svc_params()} | #dns_rrdata_sshfp{alg :: dns:uint8(), fp_type :: dns:uint8(), fp :: binary()} | #dns_rrdata_tsig{alg :: dns:tsig_alg(), time :: dns:uint48(), fudge :: dns:uint16(), mac :: binary(), msgid :: dns:uint16(), err :: dns:uint16(), other :: binary()} | #dns_rrdata_txt{txt :: [binary()]}.
-type rrdata_rrsig() :: #dns_rrdata_rrsig{type_covered :: dns:uint16(), alg :: 3 | 5 | 6 | 7 | 8 | 10, labels :: dns:uint8(), original_ttl :: dns:uint32(), expiration :: dns:uint32(), inception :: dns:uint32(), key_tag :: dns:uint16(), signers_name :: dns:dname(), signature :: binary()}.
-type tsig_alg() :: binary().
-type tsig_error() :: 0 | 16..18.
-type tsig_mac() :: binary().
-type tsig_opt() :: {time, unix_time()} | {fudge, non_neg_integer()} | {mac, tsig_mac()} | {tail, boolean()}.
-type ttl() :: 0..1 bsl 31 - 1.
-type type() :: uint16().
-type uint2() :: 0..1.
-type uint4() :: 0..15.
-type uint8() :: 0..1 bsl 8 - 1.
-type uint16() :: 0..1 bsl 16 - 1.
-type uint32() :: 0..1 bsl 32 - 1.
-type uint48() :: 0..1 bsl 48 - 1.
-type uint64() :: 0..1 bsl 64 - 1.
-type unix_time() :: 0..4294967295.
Functions
Equivalent to add_tsig(Msg, Alg, Name, Secret, ErrCode, []).
Generates and then appends a TSIG RR to a message. Supports MD5, SHA1, SHA224, SHA256, SHA384 and SHA512 algorithms.
Generates and then appends a TSIG RR to a message. Supports MD5, SHA1, SHA224, SHA256, SHA384 and SHA512 algorithms.
Returns the name of a DNS algorithm as a binary string.
Returns the name of the class as a binary string.
Compare two domain names insensitive of case.
Compares two equal sized binaries over their entire length. Returns immediately if sizes do not match.
-spec decode_message(message_bin()) -> {decode_error(), message() | undefined, binary()} | message().
Decode a binary DNS message.
Splits a dname into a list of labels and removes unneeded escapes.
Returns provided name with case-insensitive characters in lowercase.
Returns provided name with case-insensitive characters in uppercase.
-spec encode_message(message()) -> message_bin().
Encode a dns_message record.
-spec encode_message(message(), [encode_message_opt()]) -> {false, message_bin()} | {true, message_bin(), message()} | {false, message_bin(), tsig_mac()} | {true, message_bin(), tsig_mac(), message()}.
Encode a dns_message record - will truncate the message as needed.
Returns the name of an extended option as a binary string.
Returns the name of an extended rcode as a binary string.
Escapes dots in a DNS label
Joins a list of DNS labels, escaping where necessary.
-spec llqerrcode_name(llqerrcode()) -> binary() | undefined.
Returns the name of an LLQ error code as a binary string.
Returns the name of an LLQ opcode as a binary string.
Returns the name of an opcode as a binary string.
-spec random_id() -> message_id().
Returns a random integer suitable for use as DNS message identifier.
Returns the name of an rcode as a binary string.
-spec tsigerr_name(tsig_error()) -> binary() | undefined.
Returns the name of a TSIG error as a binary string.
Returns the name of the type as a binary string.
-spec unix_time() -> unix_time().
Return current unix time.
-spec unix_time(erlang:timestamp() | calendar:datetime1970()) -> unix_time().
Return the unix time from a now or universal time.
-spec verify_tsig(message_bin(), dname(), binary()) -> {ok, tsig_mac()} | {error, tsig_error()}.
Equivalent to verify_tsig(MsgBin, Name, Secret, []).
-spec verify_tsig(message_bin(), dname(), binary(), [tsig_opt()]) -> {ok, tsig_mac()} | {error, tsig_error()}.
Verifies a TSIG message signature.