00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef _LDNS_RDATA_H
00015 #define _LDNS_RDATA_H
00016
00017 #include <ldns/common.h>
00018 #include <ldns/error.h>
00019
00020 #define LDNS_MAX_RDFLEN 65535
00021
00022 #define LDNS_RDF_SIZE_BYTE 1
00023 #define LDNS_RDF_SIZE_WORD 2
00024 #define LDNS_RDF_SIZE_DOUBLEWORD 4
00025 #define LDNS_RDF_SIZE_6BYTES 6
00026 #define LDNS_RDF_SIZE_16BYTES 16
00027
00031 enum ldns_enum_rdf_type
00032 {
00034 LDNS_RDF_TYPE_NONE,
00036 LDNS_RDF_TYPE_DNAME,
00038 LDNS_RDF_TYPE_INT8,
00040 LDNS_RDF_TYPE_INT16,
00042 LDNS_RDF_TYPE_INT32,
00044 LDNS_RDF_TYPE_A,
00046 LDNS_RDF_TYPE_AAAA,
00048 LDNS_RDF_TYPE_STR,
00050 LDNS_RDF_TYPE_APL,
00052 LDNS_RDF_TYPE_B64,
00054 LDNS_RDF_TYPE_HEX,
00056 LDNS_RDF_TYPE_NSEC,
00058 LDNS_RDF_TYPE_TYPE,
00060 LDNS_RDF_TYPE_CLASS,
00062 LDNS_RDF_TYPE_CERT_ALG,
00064 LDNS_RDF_TYPE_ALG,
00066 LDNS_RDF_TYPE_UNKNOWN,
00068 LDNS_RDF_TYPE_TIME,
00070 LDNS_RDF_TYPE_PERIOD,
00072 LDNS_RDF_TYPE_TSIGTIME,
00073 LDNS_RDF_TYPE_TSIG,
00076 LDNS_RDF_TYPE_INT16_DATA,
00078 LDNS_RDF_TYPE_SERVICE,
00080 LDNS_RDF_TYPE_LOC,
00082 LDNS_RDF_TYPE_WKS,
00084 LDNS_RDF_TYPE_NSAP,
00086 LDNS_RDF_TYPE_IPSECKEY
00087 };
00088 typedef enum ldns_enum_rdf_type ldns_rdf_type;
00089
00093 enum ldns_enum_cert_algorithm
00094 {
00095 LDNS_CERT_PKIX = 1,
00096 LDNS_CERT_SPKI = 2,
00097 LDNS_CERT_PGP = 3,
00098 LDNS_CERT_URI = 253,
00099 LDNS_CERT_OID = 254
00100 };
00101 typedef enum ldns_enum_cert_algorithm ldns_cert_algorithm;
00102
00103
00104
00112 struct ldns_struct_rdf
00113 {
00115 size_t _size;
00117 ldns_rdf_type _type;
00119 void *_data;
00120 };
00121 typedef struct ldns_struct_rdf ldns_rdf;
00122
00123
00124
00125
00132 void ldns_rdf_set_size(ldns_rdf *rd, size_t size);
00139 void ldns_rdf_set_type(ldns_rdf *rd, ldns_rdf_type type);
00146 void ldns_rdf_set_data(ldns_rdf *rd, void *data);
00147
00148
00154 size_t ldns_rdf_size(const ldns_rdf *rd);
00161 ldns_rdf_type ldns_rdf_get_type(const ldns_rdf *rd);
00167 uint8_t *ldns_rdf_data(const ldns_rdf *rd);
00168
00169
00170
00180 ldns_rdf *ldns_rdf_new(ldns_rdf_type type, size_t size, void *data);
00181
00191 ldns_rdf *ldns_rdf_new_frm_data(ldns_rdf_type type, size_t size, const void *data);
00192
00199 ldns_rdf *ldns_rdf_new_frm_str(ldns_rdf_type type, const char *str);
00200
00207 ldns_rdf *ldns_rdf_new_frm_fp(ldns_rdf_type type, FILE *fp);
00208
00216 ldns_rdf *ldns_rdf_new_frm_fp_l(ldns_rdf_type type, FILE *fp, int *line_nr);
00217
00218
00219
00226 void ldns_rdf_free(ldns_rdf *rd);
00227
00234 void ldns_rdf_deep_free(ldns_rdf *rd);
00235
00236
00237
00244 ldns_rdf *ldns_native2rdf_int8(ldns_rdf_type type, uint8_t value);
00245
00252 ldns_rdf *ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value);
00253
00263 ldns_rdf *ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value);
00264
00274 ldns_rdf *ldns_native2rdf_int16_data(size_t size, uint8_t *data);
00275
00282 ldns_rdf *ldns_rdf_address_reverse(ldns_rdf *rd);
00283
00289 uint8_t ldns_rdf2native_int8(ldns_rdf *rd);
00290
00296 uint16_t ldns_rdf2native_int16(ldns_rdf *rd);
00297
00303 uint32_t ldns_rdf2native_int32(ldns_rdf *rd);
00304
00310 time_t ldns_rdf2native_time_t(ldns_rdf *rd);
00311
00318 uint32_t ldns_str2period(const char *nptr, const char **endptr);
00319
00328 struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port, size_t *size);
00329
00336 ldns_rdf * ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port);
00337
00345 ldns_status ldns_octet(char *word, size_t *length);
00346
00352 ldns_rdf *ldns_rdf_clone(const ldns_rdf *rd);
00353
00362 int ldns_rdf_compare(const ldns_rdf *rd1, const ldns_rdf *rd2);
00363
00364 #endif