00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00021 #ifndef LDNS_RDATA_H
00022 #define LDNS_RDATA_H
00023
00024 #include <ldns/common.h>
00025 #include <ldns/error.h>
00026
00027 #define LDNS_MAX_RDFLEN 65535
00028
00029 #define LDNS_RDF_SIZE_BYTE 1
00030 #define LDNS_RDF_SIZE_WORD 2
00031 #define LDNS_RDF_SIZE_DOUBLEWORD 4
00032 #define LDNS_RDF_SIZE_6BYTES 6
00033 #define LDNS_RDF_SIZE_16BYTES 16
00034
00035 #define LDNS_NSEC3_VARS_OPTOUT_MASK 0x01
00036
00040 enum ldns_enum_rdf_type
00041 {
00043 LDNS_RDF_TYPE_NONE,
00045 LDNS_RDF_TYPE_DNAME,
00047 LDNS_RDF_TYPE_INT8,
00049 LDNS_RDF_TYPE_INT16,
00051 LDNS_RDF_TYPE_INT32,
00053 LDNS_RDF_TYPE_A,
00055 LDNS_RDF_TYPE_AAAA,
00057 LDNS_RDF_TYPE_STR,
00059 LDNS_RDF_TYPE_APL,
00061 LDNS_RDF_TYPE_B32_EXT,
00063 LDNS_RDF_TYPE_B64,
00065 LDNS_RDF_TYPE_HEX,
00067 LDNS_RDF_TYPE_NSEC,
00069 LDNS_RDF_TYPE_TYPE,
00071 LDNS_RDF_TYPE_CLASS,
00073 LDNS_RDF_TYPE_CERT_ALG,
00075 LDNS_RDF_TYPE_ALG,
00077 LDNS_RDF_TYPE_UNKNOWN,
00079 LDNS_RDF_TYPE_TIME,
00081 LDNS_RDF_TYPE_PERIOD,
00083 LDNS_RDF_TYPE_TSIGTIME,
00084 LDNS_RDF_TYPE_TSIG,
00087 LDNS_RDF_TYPE_INT16_DATA,
00089 LDNS_RDF_TYPE_SERVICE,
00091 LDNS_RDF_TYPE_LOC,
00093 LDNS_RDF_TYPE_WKS,
00095 LDNS_RDF_TYPE_NSAP,
00097 LDNS_RDF_TYPE_IPSECKEY,
00099 LDNS_RDF_TYPE_NSEC3_SALT,
00101 LDNS_RDF_TYPE_NSEC3_NEXT_OWNER
00102 };
00103 typedef enum ldns_enum_rdf_type ldns_rdf_type;
00104
00108 enum ldns_enum_cert_algorithm
00109 {
00110 LDNS_CERT_PKIX = 1,
00111 LDNS_CERT_SPKI = 2,
00112 LDNS_CERT_PGP = 3,
00113 LDNS_CERT_URI = 253,
00114 LDNS_CERT_OID = 254
00115 };
00116 typedef enum ldns_enum_cert_algorithm ldns_cert_algorithm;
00117
00118
00119
00127 struct ldns_struct_rdf
00128 {
00130 size_t _size;
00132 ldns_rdf_type _type;
00134 void *_data;
00135 };
00136 typedef struct ldns_struct_rdf ldns_rdf;
00137
00138
00139
00140
00147 void ldns_rdf_set_size(ldns_rdf *rd, size_t size);
00154 void ldns_rdf_set_type(ldns_rdf *rd, ldns_rdf_type type);
00161 void ldns_rdf_set_data(ldns_rdf *rd, void *data);
00162
00163
00169 size_t ldns_rdf_size(const ldns_rdf *rd);
00176 ldns_rdf_type ldns_rdf_get_type(const ldns_rdf *rd);
00182 uint8_t *ldns_rdf_data(const ldns_rdf *rd);
00183
00184
00185
00195 ldns_rdf *ldns_rdf_new(ldns_rdf_type type, size_t size, void *data);
00196
00206 ldns_rdf *ldns_rdf_new_frm_data(ldns_rdf_type type, size_t size, const void *data);
00207
00214 ldns_rdf *ldns_rdf_new_frm_str(ldns_rdf_type type, const char *str);
00215
00223 ldns_status ldns_rdf_new_frm_fp(ldns_rdf **r, ldns_rdf_type type, FILE *fp);
00224
00233 ldns_status ldns_rdf_new_frm_fp_l(ldns_rdf **r, ldns_rdf_type type, FILE *fp, int *line_nr);
00234
00235
00236
00243 void ldns_rdf_free(ldns_rdf *rd);
00244
00251 void ldns_rdf_deep_free(ldns_rdf *rd);
00252
00253
00254
00261 ldns_rdf *ldns_native2rdf_int8(ldns_rdf_type type, uint8_t value);
00262
00269 ldns_rdf *ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value);
00270
00280 ldns_rdf *ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value);
00281
00291 ldns_rdf *ldns_native2rdf_int16_data(size_t size, uint8_t *data);
00292
00299 ldns_rdf *ldns_rdf_address_reverse(ldns_rdf *rd);
00300
00306 uint8_t ldns_rdf2native_int8(const ldns_rdf *rd);
00307
00313 uint16_t ldns_rdf2native_int16(const ldns_rdf *rd);
00314
00320 uint32_t ldns_rdf2native_int32(const ldns_rdf *rd);
00321
00327 time_t ldns_rdf2native_time_t(const ldns_rdf *rd);
00328
00335 uint32_t ldns_str2period(const char *nptr, const char **endptr);
00336
00344 ldns_status ldns_octet(char *word, size_t *length);
00345
00351 ldns_rdf *ldns_rdf_clone(const ldns_rdf *rd);
00352
00362 int ldns_rdf_compare(const ldns_rdf *rd1, const ldns_rdf *rd2);
00363
00364 #endif