rr.h
Go to the documentation of this file.
1 /*
2  * rr.h - resource record definitions
3  *
4  * a Net::DNS like library for C
5  *
6  * (c) NLnet Labs, 2005-2006
7  *
8  * See the file LICENSE for the license
9  */
10 
18 #ifndef LDNS_RR_H
19 #define LDNS_RR_H
20 
21 #include <ldns/common.h>
22 #include <ldns/rdata.h>
23 #include <ldns/buffer.h>
24 #include <ldns/error.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
31 #define LDNS_MAX_LABELLEN 63
32 
33 #define LDNS_MAX_DOMAINLEN 255
34 
35 #define LDNS_MAX_POINTERS 65535
36 
37 #define LDNS_RR_OVERHEAD 10
38 
39 /* The first fields are 'common' and can be referenced instantly */
40 #define LDNS_RDATA_FIELD_DESCRIPTORS_COMMON 53
41 
42 
43 
48 {
59 
63 };
65 
70 {
74 };
76 
81 {
169  LDNS_RR_TYPE_SSHFP = 44, /* RFC 4255 */
171  LDNS_RR_TYPE_IPSECKEY = 45, /* RFC 4025 */
173  LDNS_RR_TYPE_RRSIG = 46, /* RFC 4034 */
174  LDNS_RR_TYPE_NSEC = 47, /* RFC 4034 */
175  LDNS_RR_TYPE_DNSKEY = 48, /* RFC 4034 */
176 
177  LDNS_RR_TYPE_DHCID = 49, /* RFC 4701 */
178  /* NSEC3 */
179  LDNS_RR_TYPE_NSEC3 = 50, /* RFC 5155 */
180  LDNS_RR_TYPE_NSEC3PARAM = 51, /* RFC 5155 */
184 
187 
189 
194 
204 
205  /* RFC 4431, 5074, DNSSEC Lookaside Validation */
207 
208  /* type codes from nsec3 experimental phase
209  LDNS_RR_TYPE_NSEC3 = 65324,
210  LDNS_RR_TYPE_NSEC3PARAMS = 65325, */
214 };
216 
279 {
283  uint32_t _ttl;
285  size_t _rd_count;
287  ldns_rr_type _rr_type;
289  ldns_rr_class _rr_class;
290  /* everything in the rdata is in network order */
297 };
298 typedef struct ldns_struct_rr ldns_rr;
299 
307 {
308  size_t _rr_count;
309  size_t _rr_capacity;
311 };
313 
320 {
322  ldns_rr_type _type;
324  const char *_name;
326  uint8_t _minimum;
328  uint8_t _maximum;
334  ldns_rr_compress _compress;
336  uint8_t _dname_count;
337 };
339 
344 ldns_rr* ldns_rr_new(void);
345 
350 ldns_rr* ldns_rr_new_frm_type(ldns_rr_type t);
351 
357 void ldns_rr_free(ldns_rr *rr);
358 
375 ldns_status ldns_rr_new_frm_str(ldns_rr **n, const char *str,
376  uint32_t default_ttl, ldns_rdf *origin,
377  ldns_rdf **prev);
378 
393  ldns_rdf *origin, ldns_rdf **prev);
394 
409 ldns_status ldns_rr_new_frm_fp(ldns_rr **rr, FILE *fp, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev);
410 
426 ldns_status ldns_rr_new_frm_fp_l(ldns_rr **rr, FILE *fp, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev, int *line_nr);
427 
434 void ldns_rr_set_owner(ldns_rr *rr, ldns_rdf *owner);
435 
442 void ldns_rr_set_question(ldns_rr *rr, bool question);
443 
450 void ldns_rr_set_ttl(ldns_rr *rr, uint32_t ttl);
451 
458 void ldns_rr_set_rd_count(ldns_rr *rr, size_t count);
459 
466 void ldns_rr_set_type(ldns_rr *rr, ldns_rr_type rr_type);
467 
474 void ldns_rr_set_class(ldns_rr *rr, ldns_rr_class rr_class);
475 
484 ldns_rdf* ldns_rr_set_rdf(ldns_rr *rr, const ldns_rdf *f, size_t position);
485 
493 bool ldns_rr_push_rdf(ldns_rr *rr, const ldns_rdf *f);
494 
502 
509 ldns_rdf* ldns_rr_rdf(const ldns_rr *rr, size_t nr);
510 
516 ldns_rdf* ldns_rr_owner(const ldns_rr *rr);
517 
523 bool ldns_rr_is_question(const ldns_rr *rr);
524 
530 uint32_t ldns_rr_ttl(const ldns_rr *rr);
531 
537 size_t ldns_rr_rd_count(const ldns_rr *rr);
538 
544 ldns_rr_type ldns_rr_get_type(const ldns_rr *rr);
545 
551 ldns_rr_class ldns_rr_get_class(const ldns_rr *rr);
552 
553 /* rr_lists */
554 
560 size_t ldns_rr_list_rr_count(const ldns_rr_list *rr_list);
561 
568 void ldns_rr_list_set_rr_count(ldns_rr_list *rr_list, size_t count);
569 
578 ldns_rr * ldns_rr_list_set_rr(ldns_rr_list *rr_list, const ldns_rr *r, size_t count);
579 
586 ldns_rr* ldns_rr_list_rr(const ldns_rr_list *rr_list, size_t nr);
587 
593 
598 void ldns_rr_list_free(ldns_rr_list *rr_list);
599 
604 void ldns_rr_list_deep_free(ldns_rr_list *rr_list);
605 
613 bool ldns_rr_list_cat(ldns_rr_list *left, ldns_rr_list *right);
614 
623 
630 bool ldns_rr_list_push_rr(ldns_rr_list *rr_list, const ldns_rr *rr);
631 
638 bool ldns_rr_list_push_rr_list(ldns_rr_list *rr_list, const ldns_rr_list *push_list);
639 
646 
653 ldns_rr_list* ldns_rr_list_pop_rr_list(ldns_rr_list *rr_list, size_t size);
654 
662 bool ldns_rr_list_contains_rr(const ldns_rr_list *rr_list, ldns_rr *rr);
663 
669 bool ldns_is_rrset(ldns_rr_list *rr_list);
670 
677 bool ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr);
678 
687 
694 
695 
701 ldns_rr_type ldns_get_rr_type_by_name(const char *name);
702 
708 ldns_rr_class ldns_get_rr_class_by_name(const char *name);
709 
715 ldns_rr* ldns_rr_clone(const ldns_rr *rr);
716 
723 
729 void ldns_rr_list_sort(ldns_rr_list *unsorted);
730 
739 int ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2);
740 
749 int ldns_rr_compare_no_rdata(const ldns_rr *rr1, const ldns_rr *rr2);
750 
759 int ldns_rr_compare_wire(ldns_buffer *rr1_buf, ldns_buffer *rr2_buf);
760 
769 bool ldns_rr_compare_ds(const ldns_rr *rr1, const ldns_rr *rr2);
770 
779 int ldns_rr_list_compare(const ldns_rr_list *rrl1, const ldns_rr_list *rrl2);
780 
786 size_t ldns_rr_uncompressed_size(const ldns_rr *r);
787 
793 void ldns_rr2canonical(ldns_rr *rr);
794 
800 void ldns_rr_list2canonical(ldns_rr_list *rr_list);
801 
807 uint8_t ldns_rr_label_count(ldns_rr *rr);
808 
815 const ldns_rr_descriptor *ldns_rr_descript(uint16_t type);
816 
823 size_t ldns_rr_descriptor_minimum(const ldns_rr_descriptor *descriptor);
824 
831 size_t ldns_rr_descriptor_maximum(const ldns_rr_descriptor *descriptor);
832 
840 ldns_rdf_type ldns_rr_descriptor_field_type(const ldns_rr_descriptor *descriptor, size_t field);
841 
854 
863 ldns_rr_type ldns_rdf2rr_type(const ldns_rdf *rd);
864 
872 ldns_rr_type
873 ldns_rr_list_type(const ldns_rr_list *rr_list);
874 
882 ldns_rdf *
883 ldns_rr_list_owner(const ldns_rr_list *rr_list);
884 
885 #ifdef __cplusplus
886 }
887 #endif
888 
889 #endif /* LDNS_RR_H */