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
00038 enum ldns_enum_rdf_type
00039 {
00041 LDNS_RDF_TYPE_NONE,
00043 LDNS_RDF_TYPE_DNAME,
00045 LDNS_RDF_TYPE_INT8,
00047 LDNS_RDF_TYPE_INT16,
00049 LDNS_RDF_TYPE_INT32,
00051 LDNS_RDF_TYPE_A,
00053 LDNS_RDF_TYPE_AAAA,
00055 LDNS_RDF_TYPE_STR,
00057 LDNS_RDF_TYPE_APL,
00059 LDNS_RDF_TYPE_B64,
00061 LDNS_RDF_TYPE_HEX,
00063 LDNS_RDF_TYPE_NSEC,
00065 LDNS_RDF_TYPE_TYPE,
00067 LDNS_RDF_TYPE_CLASS,
00069 LDNS_RDF_TYPE_CERT_ALG,
00071 LDNS_RDF_TYPE_ALG,
00073 LDNS_RDF_TYPE_UNKNOWN,
00075 LDNS_RDF_TYPE_TIME,
00077 LDNS_RDF_TYPE_PERIOD,
00079 LDNS_RDF_TYPE_TSIGTIME,
00080 LDNS_RDF_TYPE_TSIG,
00083 LDNS_RDF_TYPE_INT16_DATA,
00085 LDNS_RDF_TYPE_SERVICE,
00087 LDNS_RDF_TYPE_LOC,
00089 LDNS_RDF_TYPE_WKS,
00091 LDNS_RDF_TYPE_NSAP,
00093 LDNS_RDF_TYPE_IPSECKEY
00094 };
00095 typedef enum ldns_enum_rdf_type ldns_rdf_type;
00096
00100 enum ldns_enum_cert_algorithm
00101 {
00102 LDNS_CERT_PKIX = 1,
00103 LDNS_CERT_SPKI = 2,
00104 LDNS_CERT_PGP = 3,
00105 LDNS_CERT_URI = 253,
00106 LDNS_CERT_OID = 254
00107 };
00108 typedef enum ldns_enum_cert_algorithm ldns_cert_algorithm;
00109
00110
00111
00119 struct ldns_struct_rdf
00120 {
00122 size_t _size;
00124 ldns_rdf_type _type;
00126 void *_data;
00127 };
00128 typedef struct ldns_struct_rdf ldns_rdf;
00129
00130
00131
00132
00139 void ldns_rdf_set_size(ldns_rdf *rd, size_t size);
00146 void ldns_rdf_set_type(ldns_rdf *rd, ldns_rdf_type type);
00153 void ldns_rdf_set_data(ldns_rdf *rd, void *data);
00154
00155
00161 size_t ldns_rdf_size(const ldns_rdf *rd);
00168 ldns_rdf_type ldns_rdf_get_type(const ldns_rdf *rd);
00174 uint8_t *ldns_rdf_data(const ldns_rdf *rd);
00175
00176
00177
00187 ldns_rdf *ldns_rdf_new(ldns_rdf_type type, size_t size, void *data);
00188
00198 ldns_rdf *ldns_rdf_new_frm_data(ldns_rdf_type type, size_t size, const void *data);
00199
00206 ldns_rdf *ldns_rdf_new_frm_str(ldns_rdf_type type, const char *str);
00207
00215 ldns_status ldns_rdf_new_frm_fp(ldns_rdf **r, ldns_rdf_type type, FILE *fp);
00216
00225 ldns_status ldns_rdf_new_frm_fp_l(ldns_rdf **r, ldns_rdf_type type, FILE *fp, int *line_nr);
00226
00227
00228
00235 void ldns_rdf_free(ldns_rdf *rd);
00236
00243 void ldns_rdf_deep_free(ldns_rdf *rd);
00244
00245
00246
00253 ldns_rdf *ldns_native2rdf_int8(ldns_rdf_type type, uint8_t value);
00254
00261 ldns_rdf *ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value);
00262
00272 ldns_rdf *ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value);
00273
00283 ldns_rdf *ldns_native2rdf_int16_data(size_t size, uint8_t *data);
00284
00291 ldns_rdf *ldns_rdf_address_reverse(ldns_rdf *rd);
00292
00298 uint8_t ldns_rdf2native_int8(const ldns_rdf *rd);
00299
00305 uint16_t ldns_rdf2native_int16(const ldns_rdf *rd);
00306
00312 uint32_t ldns_rdf2native_int32(const ldns_rdf *rd);
00313
00319 time_t ldns_rdf2native_time_t(const ldns_rdf *rd);
00320
00327 uint32_t ldns_str2period(const char *nptr, const char **endptr);
00328
00336 ldns_status ldns_octet(char *word, size_t *length);
00337
00343 ldns_rdf *ldns_rdf_clone(const ldns_rdf *rd);
00344
00354 int ldns_rdf_compare(const ldns_rdf *rd1, const ldns_rdf *rd2);
00355
00356 #endif