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 #ifdef __cplusplus
00028 extern "C" {
00029 #endif
00030
00031 #define LDNS_MAX_RDFLEN 8192
00032
00033 #define LDNS_RDF_SIZE_BYTE 1
00034 #define LDNS_RDF_SIZE_WORD 2
00035 #define LDNS_RDF_SIZE_DOUBLEWORD 4
00036 #define LDNS_RDF_SIZE_6BYTES 6
00037 #define LDNS_RDF_SIZE_16BYTES 16
00038
00039 #define LDNS_NSEC3_VARS_OPTOUT_MASK 0x01
00040
00044 enum ldns_enum_rdf_type
00045 {
00047 LDNS_RDF_TYPE_NONE,
00049 LDNS_RDF_TYPE_DNAME,
00051 LDNS_RDF_TYPE_INT8,
00053 LDNS_RDF_TYPE_INT16,
00055 LDNS_RDF_TYPE_INT32,
00057 LDNS_RDF_TYPE_A,
00059 LDNS_RDF_TYPE_AAAA,
00061 LDNS_RDF_TYPE_STR,
00063 LDNS_RDF_TYPE_APL,
00065 LDNS_RDF_TYPE_B32_EXT,
00067 LDNS_RDF_TYPE_B64,
00069 LDNS_RDF_TYPE_HEX,
00071 LDNS_RDF_TYPE_NSEC,
00073 LDNS_RDF_TYPE_TYPE,
00075 LDNS_RDF_TYPE_CLASS,
00077 LDNS_RDF_TYPE_CERT_ALG,
00079 LDNS_RDF_TYPE_ALG,
00081 LDNS_RDF_TYPE_UNKNOWN,
00083 LDNS_RDF_TYPE_TIME,
00085 LDNS_RDF_TYPE_PERIOD,
00087 LDNS_RDF_TYPE_TSIGTIME,
00088 LDNS_RDF_TYPE_TSIG,
00091 LDNS_RDF_TYPE_INT16_DATA,
00093 LDNS_RDF_TYPE_SERVICE,
00095 LDNS_RDF_TYPE_LOC,
00097 LDNS_RDF_TYPE_WKS,
00099 LDNS_RDF_TYPE_NSAP,
00101 LDNS_RDF_TYPE_ATMA,
00103 LDNS_RDF_TYPE_IPSECKEY,
00105 LDNS_RDF_TYPE_NSEC3_SALT,
00107 LDNS_RDF_TYPE_NSEC3_NEXT_OWNER
00108 };
00109 typedef enum ldns_enum_rdf_type ldns_rdf_type;
00110
00114 enum ldns_enum_cert_algorithm
00115 {
00116 LDNS_CERT_PKIX = 1,
00117 LDNS_CERT_SPKI = 2,
00118 LDNS_CERT_PGP = 3,
00119 LDNS_CERT_IPKIX = 4,
00120 LDNS_CERT_ISPKI = 5,
00121 LDNS_CERT_IPGP = 6,
00122 LDNS_CERT_ACPKIX = 7,
00123 LDNS_CERT_IACPKIX = 8,
00124 LDNS_CERT_URI = 253,
00125 LDNS_CERT_OID = 254
00126 };
00127 typedef enum ldns_enum_cert_algorithm ldns_cert_algorithm;
00128
00129
00130
00138 struct ldns_struct_rdf
00139 {
00141 size_t _size;
00143 ldns_rdf_type _type;
00145 void *_data;
00146 };
00147 typedef struct ldns_struct_rdf ldns_rdf;
00148
00149
00150
00151
00152
00159 void ldns_rdf_set_size(ldns_rdf *rd, size_t size);
00160
00167 void ldns_rdf_set_type(ldns_rdf *rd, ldns_rdf_type type);
00168
00175 void ldns_rdf_set_data(ldns_rdf *rd, void *data);
00176
00177
00178
00184 size_t ldns_rdf_size(const ldns_rdf *rd);
00185
00192 ldns_rdf_type ldns_rdf_get_type(const ldns_rdf *rd);
00193
00199 uint8_t *ldns_rdf_data(const ldns_rdf *rd);
00200
00201
00202
00212 ldns_rdf *ldns_rdf_new(ldns_rdf_type type, size_t size, void *data);
00213
00223 ldns_rdf *ldns_rdf_new_frm_data(ldns_rdf_type type, size_t size, const void *data);
00224
00231 ldns_rdf *ldns_rdf_new_frm_str(ldns_rdf_type type, const char *str);
00232
00240 ldns_status ldns_rdf_new_frm_fp(ldns_rdf **r, ldns_rdf_type type, FILE *fp);
00241
00250 ldns_status ldns_rdf_new_frm_fp_l(ldns_rdf **r, ldns_rdf_type type, FILE *fp, int *line_nr);
00251
00252
00253
00260 void ldns_rdf_free(ldns_rdf *rd);
00261
00268 void ldns_rdf_deep_free(ldns_rdf *rd);
00269
00270
00271
00278 ldns_rdf *ldns_native2rdf_int8(ldns_rdf_type type, uint8_t value);
00279
00286 ldns_rdf *ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value);
00287
00297 ldns_rdf *ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value);
00298
00308 ldns_rdf *ldns_native2rdf_int16_data(size_t size, uint8_t *data);
00309
00316 ldns_rdf *ldns_rdf_address_reverse(ldns_rdf *rd);
00317
00323 uint8_t ldns_rdf2native_int8(const ldns_rdf *rd);
00324
00330 uint16_t ldns_rdf2native_int16(const ldns_rdf *rd);
00331
00337 uint32_t ldns_rdf2native_int32(const ldns_rdf *rd);
00338
00344 time_t ldns_rdf2native_time_t(const ldns_rdf *rd);
00345
00352 uint32_t ldns_str2period(const char *nptr, const char **endptr);
00353
00361 ldns_status ldns_octet(char *word, size_t *length);
00362
00368 ldns_rdf *ldns_rdf_clone(const ldns_rdf *rd);
00369
00379 int ldns_rdf_compare(const ldns_rdf *rd1, const ldns_rdf *rd2);
00380
00381 #ifdef __cplusplus
00382 }
00383 #endif
00384
00385 #endif