xref: /freebsd/contrib/ldns/ldns/rr_functions.h (revision 5afab0e5)
17b5038d7SDag-Erling Smørgrav /*
27b5038d7SDag-Erling Smørgrav  * rr_functions.h
37b5038d7SDag-Erling Smørgrav  *
47b5038d7SDag-Erling Smørgrav  * the .h file with defs for the per rr
57b5038d7SDag-Erling Smørgrav  * functions
67b5038d7SDag-Erling Smørgrav  *
77b5038d7SDag-Erling Smørgrav  * a Net::DNS like library for C
87b5038d7SDag-Erling Smørgrav  *
97b5038d7SDag-Erling Smørgrav  * (c) NLnet Labs, 2005-2006
107b5038d7SDag-Erling Smørgrav  *
117b5038d7SDag-Erling Smørgrav  * See the file LICENSE for the license
127b5038d7SDag-Erling Smørgrav  */
137b5038d7SDag-Erling Smørgrav #ifndef LDNS_RR_FUNCTIONS_H
147b5038d7SDag-Erling Smørgrav #define LDNS_RR_FUNCTIONS_H
157b5038d7SDag-Erling Smørgrav 
167b5038d7SDag-Erling Smørgrav #ifdef __cplusplus
177b5038d7SDag-Erling Smørgrav extern "C" {
187b5038d7SDag-Erling Smørgrav #endif
197b5038d7SDag-Erling Smørgrav 
207b5038d7SDag-Erling Smørgrav /**
217b5038d7SDag-Erling Smørgrav  * \file
227b5038d7SDag-Erling Smørgrav  *
237b5038d7SDag-Erling Smørgrav  * Defines some extra convenience functions for ldns_rr structures
247b5038d7SDag-Erling Smørgrav  */
257b5038d7SDag-Erling Smørgrav 
267b5038d7SDag-Erling Smørgrav /* A / AAAA */
277b5038d7SDag-Erling Smørgrav /**
287b5038d7SDag-Erling Smørgrav  * returns the address of a LDNS_RR_TYPE_A rr
297b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
307b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the address or NULL on failure
317b5038d7SDag-Erling Smørgrav  */
327b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_a_address(const ldns_rr *r);
337b5038d7SDag-Erling Smørgrav 
347b5038d7SDag-Erling Smørgrav /**
357b5038d7SDag-Erling Smørgrav  * sets the address of a LDNS_RR_TYPE_A rr
367b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
377b5038d7SDag-Erling Smørgrav  * \param[in] f the address to set
387b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
397b5038d7SDag-Erling Smørgrav  */
407b5038d7SDag-Erling Smørgrav bool ldns_rr_a_set_address(ldns_rr *r, ldns_rdf *f);
417b5038d7SDag-Erling Smørgrav 
427b5038d7SDag-Erling Smørgrav /* NS */
437b5038d7SDag-Erling Smørgrav /**
447b5038d7SDag-Erling Smørgrav  * returns the name of a LDNS_RR_TYPE_NS rr
457b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
467b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the name or NULL on failure
477b5038d7SDag-Erling Smørgrav  */
487b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_ns_nsdname(const ldns_rr *r);
497b5038d7SDag-Erling Smørgrav 
507b5038d7SDag-Erling Smørgrav /* MX */
517b5038d7SDag-Erling Smørgrav /**
527b5038d7SDag-Erling Smørgrav  * returns the mx pref. of a LDNS_RR_TYPE_MX rr
537b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
547b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the preference or NULL on failure
557b5038d7SDag-Erling Smørgrav  */
567b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_mx_preference(const ldns_rr *r);
577b5038d7SDag-Erling Smørgrav /**
587b5038d7SDag-Erling Smørgrav  * returns the mx host of a LDNS_RR_TYPE_MX rr
597b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
607b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the name of the MX host or NULL on failure
617b5038d7SDag-Erling Smørgrav  */
627b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_mx_exchange(const ldns_rr *r);
637b5038d7SDag-Erling Smørgrav 
647b5038d7SDag-Erling Smørgrav /* RRSIG */
657b5038d7SDag-Erling Smørgrav /**
667b5038d7SDag-Erling Smørgrav  * returns the type covered of a LDNS_RR_TYPE_RRSIG rr
677b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
687b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the type covered or NULL on failure
697b5038d7SDag-Erling Smørgrav  */
707b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_typecovered(const ldns_rr *r);
717b5038d7SDag-Erling Smørgrav /**
727b5038d7SDag-Erling Smørgrav  * sets the typecovered of a LDNS_RR_TYPE_RRSIG rr
737b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
747b5038d7SDag-Erling Smørgrav  * \param[in] f the typecovered to set
757b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
767b5038d7SDag-Erling Smørgrav  */
777b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_typecovered(ldns_rr *r, ldns_rdf *f);
787b5038d7SDag-Erling Smørgrav /**
797b5038d7SDag-Erling Smørgrav  * returns the algorithm of a LDNS_RR_TYPE_RRSIG RR
807b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
817b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the algorithm or NULL on failure
827b5038d7SDag-Erling Smørgrav  */
837b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_algorithm(const ldns_rr *r);
847b5038d7SDag-Erling Smørgrav /**
857b5038d7SDag-Erling Smørgrav  * sets the algorithm of a LDNS_RR_TYPE_RRSIG rr
867b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
877b5038d7SDag-Erling Smørgrav  * \param[in] f the algorithm to set
887b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
897b5038d7SDag-Erling Smørgrav  */
907b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_algorithm(ldns_rr *r, ldns_rdf *f);
917b5038d7SDag-Erling Smørgrav /**
927b5038d7SDag-Erling Smørgrav  * returns the number of labels of a LDNS_RR_TYPE_RRSIG RR
937b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
947b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the number of labels or NULL on failure
957b5038d7SDag-Erling Smørgrav  */
967b5038d7SDag-Erling Smørgrav ldns_rdf *ldns_rr_rrsig_labels(const ldns_rr *r);
977b5038d7SDag-Erling Smørgrav /**
987b5038d7SDag-Erling Smørgrav  * sets the number of labels of a LDNS_RR_TYPE_RRSIG rr
997b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
1007b5038d7SDag-Erling Smørgrav  * \param[in] f the number of labels to set
1017b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1027b5038d7SDag-Erling Smørgrav  */
1037b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_labels(ldns_rr *r, ldns_rdf *f);
1047b5038d7SDag-Erling Smørgrav /**
1057b5038d7SDag-Erling Smørgrav  * returns the original TTL of a LDNS_RR_TYPE_RRSIG RR
1067b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
1077b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the original TTL or NULL on failure
1087b5038d7SDag-Erling Smørgrav  */
1097b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_origttl(const ldns_rr *r);
1107b5038d7SDag-Erling Smørgrav /**
1117b5038d7SDag-Erling Smørgrav  * sets the original TTL of a LDNS_RR_TYPE_RRSIG rr
1127b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
1137b5038d7SDag-Erling Smørgrav  * \param[in] f the original TTL to set
1147b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1157b5038d7SDag-Erling Smørgrav  */
1167b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_origttl(ldns_rr *r, ldns_rdf *f);
1177b5038d7SDag-Erling Smørgrav /**
1187b5038d7SDag-Erling Smørgrav  * returns the expiration time of a LDNS_RR_TYPE_RRSIG RR
1197b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
1207b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the expiration time or NULL on failure
1217b5038d7SDag-Erling Smørgrav  */
1227b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_expiration(const ldns_rr *r);
1237b5038d7SDag-Erling Smørgrav /**
124*5afab0e5SDag-Erling Smørgrav  * sets the expiration date of a LDNS_RR_TYPE_RRSIG rr
1257b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
126*5afab0e5SDag-Erling Smørgrav  * \param[in] f the expiration date to set
1277b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1287b5038d7SDag-Erling Smørgrav  */
1297b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_expiration(ldns_rr *r, ldns_rdf *f);
1307b5038d7SDag-Erling Smørgrav /**
1317b5038d7SDag-Erling Smørgrav  * returns the inception time of a LDNS_RR_TYPE_RRSIG RR
1327b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
1337b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the inception time or NULL on failure
1347b5038d7SDag-Erling Smørgrav  */
1357b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_inception(const ldns_rr *r);
1367b5038d7SDag-Erling Smørgrav /**
1377b5038d7SDag-Erling Smørgrav  * sets the inception date of a LDNS_RR_TYPE_RRSIG rr
1387b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
1397b5038d7SDag-Erling Smørgrav  * \param[in] f the inception date to set
1407b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1417b5038d7SDag-Erling Smørgrav  */
1427b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_inception(ldns_rr *r, ldns_rdf *f);
1437b5038d7SDag-Erling Smørgrav /**
1447b5038d7SDag-Erling Smørgrav  * returns the keytag of a LDNS_RR_TYPE_RRSIG RR
1457b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
1467b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the keytag or NULL on failure
1477b5038d7SDag-Erling Smørgrav  */
1487b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_keytag(const ldns_rr *r);
1497b5038d7SDag-Erling Smørgrav /**
1507b5038d7SDag-Erling Smørgrav  * sets the keytag of a LDNS_RR_TYPE_RRSIG rr
1517b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
1527b5038d7SDag-Erling Smørgrav  * \param[in] f the keytag to set
1537b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1547b5038d7SDag-Erling Smørgrav  */
1557b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_keytag(ldns_rr *r, ldns_rdf *f);
1567b5038d7SDag-Erling Smørgrav /**
1577b5038d7SDag-Erling Smørgrav  * returns the signers name of a LDNS_RR_TYPE_RRSIG RR
1587b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
1597b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the signers name or NULL on failure
1607b5038d7SDag-Erling Smørgrav  */
1617b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_signame(const ldns_rr *r);
1627b5038d7SDag-Erling Smørgrav /**
1637b5038d7SDag-Erling Smørgrav  * sets the signers name of a LDNS_RR_TYPE_RRSIG rr
1647b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
1657b5038d7SDag-Erling Smørgrav  * \param[in] f the signers name to set
1667b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1677b5038d7SDag-Erling Smørgrav  */
1687b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_signame(ldns_rr *r, ldns_rdf *f);
1697b5038d7SDag-Erling Smørgrav /**
1707b5038d7SDag-Erling Smørgrav  * returns the signature data of a LDNS_RR_TYPE_RRSIG RR
1717b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
1727b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the signature data or NULL on failure
1737b5038d7SDag-Erling Smørgrav  */
1747b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_rrsig_sig(const ldns_rr *r);
1757b5038d7SDag-Erling Smørgrav /**
1767b5038d7SDag-Erling Smørgrav  * sets the signature data of a LDNS_RR_TYPE_RRSIG rr
1777b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
1787b5038d7SDag-Erling Smørgrav  * \param[in] f the signature data to set
1797b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1807b5038d7SDag-Erling Smørgrav  */
1817b5038d7SDag-Erling Smørgrav bool ldns_rr_rrsig_set_sig(ldns_rr *r, ldns_rdf *f);
1827b5038d7SDag-Erling Smørgrav 
1837b5038d7SDag-Erling Smørgrav /* DNSKEY */
1847b5038d7SDag-Erling Smørgrav /**
1857b5038d7SDag-Erling Smørgrav  * returns the flags of a LDNS_RR_TYPE_DNSKEY rr
1867b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
1877b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the flags or NULL on failure
1887b5038d7SDag-Erling Smørgrav  */
1897b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_dnskey_flags(const ldns_rr *r);
1907b5038d7SDag-Erling Smørgrav /**
1917b5038d7SDag-Erling Smørgrav  * sets the flags of a LDNS_RR_TYPE_DNSKEY rr
1927b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
1937b5038d7SDag-Erling Smørgrav  * \param[in] f the flags to set
1947b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
1957b5038d7SDag-Erling Smørgrav  */
1967b5038d7SDag-Erling Smørgrav bool ldns_rr_dnskey_set_flags(ldns_rr *r, ldns_rdf *f);
1977b5038d7SDag-Erling Smørgrav /**
1987b5038d7SDag-Erling Smørgrav  * returns the protocol of a LDNS_RR_TYPE_DNSKEY rr
1997b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
2007b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the protocol or NULL on failure
2017b5038d7SDag-Erling Smørgrav  */
2027b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_dnskey_protocol(const ldns_rr *r);
2037b5038d7SDag-Erling Smørgrav /**
2047b5038d7SDag-Erling Smørgrav  * sets the protocol of a LDNS_RR_TYPE_DNSKEY rr
2057b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
2067b5038d7SDag-Erling Smørgrav  * \param[in] f the protocol to set
2077b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
2087b5038d7SDag-Erling Smørgrav  */
2097b5038d7SDag-Erling Smørgrav bool ldns_rr_dnskey_set_protocol(ldns_rr *r, ldns_rdf *f);
2107b5038d7SDag-Erling Smørgrav /**
2117b5038d7SDag-Erling Smørgrav  * returns the algorithm of a LDNS_RR_TYPE_DNSKEY rr
2127b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
2137b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the algorithm or NULL on failure
2147b5038d7SDag-Erling Smørgrav  */
2157b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_dnskey_algorithm(const ldns_rr *r);
2167b5038d7SDag-Erling Smørgrav /**
2177b5038d7SDag-Erling Smørgrav  * sets the algorithm of a LDNS_RR_TYPE_DNSKEY rr
2187b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
2197b5038d7SDag-Erling Smørgrav  * \param[in] f the algorithm to set
2207b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
2217b5038d7SDag-Erling Smørgrav  */
2227b5038d7SDag-Erling Smørgrav bool ldns_rr_dnskey_set_algorithm(ldns_rr *r, ldns_rdf *f);
2237b5038d7SDag-Erling Smørgrav /**
2247b5038d7SDag-Erling Smørgrav  * returns the key data of a LDNS_RR_TYPE_DNSKEY rr
2257b5038d7SDag-Erling Smørgrav  * \param[in] r the resource record
2267b5038d7SDag-Erling Smørgrav  * \return a ldns_rdf* with the key data or NULL on failure
2277b5038d7SDag-Erling Smørgrav  */
2287b5038d7SDag-Erling Smørgrav ldns_rdf* ldns_rr_dnskey_key(const ldns_rr *r);
2297b5038d7SDag-Erling Smørgrav /**
2307b5038d7SDag-Erling Smørgrav  * sets the key data of a LDNS_RR_TYPE_DNSKEY rr
2317b5038d7SDag-Erling Smørgrav  * \param[in] r the rr to use
2327b5038d7SDag-Erling Smørgrav  * \param[in] f the key data to set
2337b5038d7SDag-Erling Smørgrav  * \return true on success, false otherwise
2347b5038d7SDag-Erling Smørgrav  */
2357b5038d7SDag-Erling Smørgrav bool ldns_rr_dnskey_set_key(ldns_rr *r, ldns_rdf *f);
2367b5038d7SDag-Erling Smørgrav 
2377b5038d7SDag-Erling Smørgrav /**
2387b5038d7SDag-Erling Smørgrav  * get the length of the keydata in bits
2397b5038d7SDag-Erling Smørgrav  * \param[in] keydata the raw key data
2407b5038d7SDag-Erling Smørgrav  * \param[in] len the length of the keydata
2417b5038d7SDag-Erling Smørgrav  * \param[in] alg the cryptographic algorithm this is a key for
2427b5038d7SDag-Erling Smørgrav  * \return the keysize in bits, or 0 on error
2437b5038d7SDag-Erling Smørgrav  */
2447b5038d7SDag-Erling Smørgrav size_t ldns_rr_dnskey_key_size_raw(const unsigned char *keydata,
2457b5038d7SDag-Erling Smørgrav                                    const size_t len,
2467b5038d7SDag-Erling Smørgrav                                    const ldns_algorithm alg);
2477b5038d7SDag-Erling Smørgrav 
2487b5038d7SDag-Erling Smørgrav /**
2497b5038d7SDag-Erling Smørgrav  * get the length of the keydata in bits
2507b5038d7SDag-Erling Smørgrav  * \param[in] key the key rr to use
2517b5038d7SDag-Erling Smørgrav  * \return the keysize in bits
2527b5038d7SDag-Erling Smørgrav  */
2537b5038d7SDag-Erling Smørgrav size_t ldns_rr_dnskey_key_size(const ldns_rr *key);
2547b5038d7SDag-Erling Smørgrav 
2557b5038d7SDag-Erling Smørgrav /**
2567b5038d7SDag-Erling Smørgrav  * The type of function to be passed to ldns_rr_soa_increment_func,
2577b5038d7SDag-Erling Smørgrav  * ldns_rr_soa_increment_func_data or ldns_rr_soa_increment_int.
2587b5038d7SDag-Erling Smørgrav  * The function will be called with as the first argument the current serial
2597b5038d7SDag-Erling Smørgrav  * number of the SOA RR to be updated, and as the second argument a value
2607b5038d7SDag-Erling Smørgrav  * given when calling ldns_rr_soa_increment_func_data or
2617b5038d7SDag-Erling Smørgrav  * ldns_rr_soa_increment_int. With ldns_rr_soa_increment_int the pointer
2627b5038d7SDag-Erling Smørgrav  * value holds the integer value passed to ldns_rr_soa_increment_int,
2637b5038d7SDag-Erling Smørgrav  * and it should be cast to intptr_t to be used as an integer by the
2647b5038d7SDag-Erling Smørgrav  * serial modifying function.
2657b5038d7SDag-Erling Smørgrav  */
2667b5038d7SDag-Erling Smørgrav typedef uint32_t (*ldns_soa_serial_increment_func_t)(uint32_t, void*);
2677b5038d7SDag-Erling Smørgrav 
2687b5038d7SDag-Erling Smørgrav /**
2697b5038d7SDag-Erling Smørgrav  * Function to be used with dns_rr_soa_increment_func_int, to set the soa
2707b5038d7SDag-Erling Smørgrav  * serial number.
2717b5038d7SDag-Erling Smørgrav  * \param[in] unused the (unused) current serial number.
2727b5038d7SDag-Erling Smørgrav  * \param[in] data the serial number to be set.
2737b5038d7SDag-Erling Smørgrav  */
2747b5038d7SDag-Erling Smørgrav uint32_t ldns_soa_serial_identity(uint32_t unused, void *data);
2757b5038d7SDag-Erling Smørgrav 
2767b5038d7SDag-Erling Smørgrav /**
2777b5038d7SDag-Erling Smørgrav  * Function to be used with dns_rr_soa_increment_func, to increment the soa
2787b5038d7SDag-Erling Smørgrav  * serial number with one.
2797b5038d7SDag-Erling Smørgrav  * \param[in] s the current serial number.
2807b5038d7SDag-Erling Smørgrav  * \param[in] unused unused.
2817b5038d7SDag-Erling Smørgrav  */
2827b5038d7SDag-Erling Smørgrav uint32_t ldns_soa_serial_increment(uint32_t s, void *unused);
2837b5038d7SDag-Erling Smørgrav 
2847b5038d7SDag-Erling Smørgrav /**
2857b5038d7SDag-Erling Smørgrav  * Function to be used with dns_rr_soa_increment_func_int, to increment the soa
2867b5038d7SDag-Erling Smørgrav  * serial number with a certain amount.
2877b5038d7SDag-Erling Smørgrav  * \param[in] s the current serial number.
2887b5038d7SDag-Erling Smørgrav  * \param[in] data the amount to add to the current serial number.
2897b5038d7SDag-Erling Smørgrav  */
2907b5038d7SDag-Erling Smørgrav uint32_t ldns_soa_serial_increment_by(uint32_t s, void *data);
2917b5038d7SDag-Erling Smørgrav 
2927b5038d7SDag-Erling Smørgrav /**
2937b5038d7SDag-Erling Smørgrav  * Function to be used with ldns_rr_soa_increment_func or
2947b5038d7SDag-Erling Smørgrav  * ldns_rr_soa_increment_func_int to set the soa serial to the number of
2957b5038d7SDag-Erling Smørgrav  * seconds since unix epoch (1-1-1970 00:00).
2967b5038d7SDag-Erling Smørgrav  * When data is given (i.e. the function is called via
2977b5038d7SDag-Erling Smørgrav  * ldns_rr_soa_increment_func_int), it is used as the current time.
2987b5038d7SDag-Erling Smørgrav  * When the resulting serial number is smaller than the current serial number,
2997b5038d7SDag-Erling Smørgrav  * the current serial number is increased by one.
3007b5038d7SDag-Erling Smørgrav  * \param[in] s the current serial number.
3017b5038d7SDag-Erling Smørgrav  * \param[in] data the time in seconds since 1-1-1970 00:00
3027b5038d7SDag-Erling Smørgrav  */
3037b5038d7SDag-Erling Smørgrav uint32_t ldns_soa_serial_unixtime(uint32_t s, void *data);
3047b5038d7SDag-Erling Smørgrav 
3057b5038d7SDag-Erling Smørgrav /**
3067b5038d7SDag-Erling Smørgrav  * Function to be used with ldns_rr_soa_increment_func or
3077b5038d7SDag-Erling Smørgrav  * ldns_rr_soa_increment_func_int to set the soa serial to the current date
3087b5038d7SDag-Erling Smørgrav  * succeeded by a two digit iteration (datecounter).
3097b5038d7SDag-Erling Smørgrav  * When data is given (i.e. the function is called via
3107b5038d7SDag-Erling Smørgrav  * ldns_rr_soa_increment_func_int), it is used as the current time.
3117b5038d7SDag-Erling Smørgrav  * When the resulting serial number is smaller than the current serial number,
3127b5038d7SDag-Erling Smørgrav  * the current serial number is increased by one.
3137b5038d7SDag-Erling Smørgrav  * \param[in] s the current serial number.
3147b5038d7SDag-Erling Smørgrav  * \param[in] data the time in seconds since 1-1-1970 00:00
3157b5038d7SDag-Erling Smørgrav  */
3167b5038d7SDag-Erling Smørgrav uint32_t ldns_soa_serial_datecounter(uint32_t s, void *data);
3177b5038d7SDag-Erling Smørgrav 
3187b5038d7SDag-Erling Smørgrav /**
3197b5038d7SDag-Erling Smørgrav  * Increment the serial number of the given SOA by one.
3207b5038d7SDag-Erling Smørgrav  * \param[in] soa The soa rr to be incremented
3217b5038d7SDag-Erling Smørgrav  */
3227b5038d7SDag-Erling Smørgrav void ldns_rr_soa_increment(
3237b5038d7SDag-Erling Smørgrav 		ldns_rr *soa);
3247b5038d7SDag-Erling Smørgrav 
3257b5038d7SDag-Erling Smørgrav /**
3267b5038d7SDag-Erling Smørgrav  * Increment the serial number of the given SOA with the given function.
3277b5038d7SDag-Erling Smørgrav  * Included functions to be used here are: ldns_rr_soa_increment,
3287b5038d7SDag-Erling Smørgrav  * ldns_soa_serial_unixtime and ldns_soa_serial_datecounter.
3297b5038d7SDag-Erling Smørgrav  * \param[in] soa The soa rr to be incremented
3307b5038d7SDag-Erling Smørgrav  * \param[in] f the function to use to increment the soa rr.
3317b5038d7SDag-Erling Smørgrav  */
3327b5038d7SDag-Erling Smørgrav void ldns_rr_soa_increment_func(
3337b5038d7SDag-Erling Smørgrav 		ldns_rr *soa, ldns_soa_serial_increment_func_t f);
3347b5038d7SDag-Erling Smørgrav 
3357b5038d7SDag-Erling Smørgrav /**
3367b5038d7SDag-Erling Smørgrav  * Increment the serial number of the given SOA with the given function
3377b5038d7SDag-Erling Smørgrav  * passing it the given data argument.
3387b5038d7SDag-Erling Smørgrav  * \param[in] soa The soa rr to be incremented
3397b5038d7SDag-Erling Smørgrav  * \param[in] f the function to use to increment the soa rr.
3407b5038d7SDag-Erling Smørgrav  * \param[in] data this argument will be passed to f as the second argument.
3417b5038d7SDag-Erling Smørgrav  */
3427b5038d7SDag-Erling Smørgrav void ldns_rr_soa_increment_func_data(
3437b5038d7SDag-Erling Smørgrav 		ldns_rr *soa, ldns_soa_serial_increment_func_t f, void *data);
3447b5038d7SDag-Erling Smørgrav 
3457b5038d7SDag-Erling Smørgrav /**
3467b5038d7SDag-Erling Smørgrav  * Increment the serial number of the given SOA with the given function
3477b5038d7SDag-Erling Smørgrav  * using data as an argument for the function.
3487b5038d7SDag-Erling Smørgrav  * Included functions to be used here are: ldns_soa_serial_identity,
3497b5038d7SDag-Erling Smørgrav  * ldns_rr_soa_increment_by, ldns_soa_serial_unixtime and
3507b5038d7SDag-Erling Smørgrav  * ldns_soa_serial_datecounter.
3517b5038d7SDag-Erling Smørgrav  * \param[in] soa The soa rr to be incremented
3527b5038d7SDag-Erling Smørgrav  * \param[in] f the function to use to increment the soa rr.
3537b5038d7SDag-Erling Smørgrav  * \param[in] data this argument will be passed to f as the second argument
3547b5038d7SDag-Erling Smørgrav  *                 (by casting it to void*).
3557b5038d7SDag-Erling Smørgrav  */
3567b5038d7SDag-Erling Smørgrav void ldns_rr_soa_increment_func_int(
3577b5038d7SDag-Erling Smørgrav 		ldns_rr *soa, ldns_soa_serial_increment_func_t f, int data);
3587b5038d7SDag-Erling Smørgrav 
3597b5038d7SDag-Erling Smørgrav #ifdef __cplusplus
3607b5038d7SDag-Erling Smørgrav }
3617b5038d7SDag-Erling Smørgrav #endif
3627b5038d7SDag-Erling Smørgrav 
3637b5038d7SDag-Erling Smørgrav #endif /* LDNS_RR_FUNCTIONS_H */
364