rdata.h

Go to the documentation of this file.
00001 /*
00002  * rdata.h
00003  *
00004  * rdata definitions
00005  *
00006  * a Net::DNS like library for C
00007  *
00008  * (c) NLnet Labs, 2005-2006
00009  *
00010  * See the file LICENSE for the license
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 65535
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_8BYTES            8
00038 #define LDNS_RDF_SIZE_16BYTES           16
00039 
00040 #define LDNS_NSEC3_VARS_OPTOUT_MASK 0x01
00041 
00045 enum ldns_enum_rdf_type
00046 {
00048         LDNS_RDF_TYPE_NONE,
00050         LDNS_RDF_TYPE_DNAME,
00052         LDNS_RDF_TYPE_INT8,
00054         LDNS_RDF_TYPE_INT16,
00056         LDNS_RDF_TYPE_INT32,
00058         LDNS_RDF_TYPE_A,
00060         LDNS_RDF_TYPE_AAAA,
00062         LDNS_RDF_TYPE_STR,
00064         LDNS_RDF_TYPE_APL,
00066         LDNS_RDF_TYPE_B32_EXT,
00068         LDNS_RDF_TYPE_B64,
00070         LDNS_RDF_TYPE_HEX,
00072         LDNS_RDF_TYPE_NSEC,
00074         LDNS_RDF_TYPE_TYPE,
00076         LDNS_RDF_TYPE_CLASS,
00078         LDNS_RDF_TYPE_CERT_ALG,
00080         LDNS_RDF_TYPE_ALG,
00082         LDNS_RDF_TYPE_UNKNOWN,
00084         LDNS_RDF_TYPE_TIME,
00086         LDNS_RDF_TYPE_PERIOD,
00088         LDNS_RDF_TYPE_TSIGTIME,
00092         LDNS_RDF_TYPE_HIP,
00095         LDNS_RDF_TYPE_INT16_DATA,
00097         LDNS_RDF_TYPE_SERVICE,
00099         LDNS_RDF_TYPE_LOC,
00101         LDNS_RDF_TYPE_WKS,
00103         LDNS_RDF_TYPE_NSAP,
00105         LDNS_RDF_TYPE_ATMA,
00107         LDNS_RDF_TYPE_IPSECKEY,
00109         LDNS_RDF_TYPE_NSEC3_SALT,
00111         LDNS_RDF_TYPE_NSEC3_NEXT_OWNER,
00112 
00116         LDNS_RDF_TYPE_ILNP64,
00117 
00119         LDNS_RDF_TYPE_EUI48,
00121         LDNS_RDF_TYPE_EUI64,
00122 
00126         LDNS_RDF_TYPE_TAG,
00127 
00132         LDNS_RDF_TYPE_LONG_STR,
00133 
00134         /* Aliases */
00135         LDNS_RDF_TYPE_BITMAP = LDNS_RDF_TYPE_NSEC
00136 };
00137 typedef enum ldns_enum_rdf_type ldns_rdf_type;
00138 
00142 enum ldns_enum_cert_algorithm
00143 {
00144         LDNS_CERT_PKIX          = 1,
00145         LDNS_CERT_SPKI          = 2,
00146         LDNS_CERT_PGP           = 3,
00147         LDNS_CERT_IPKIX         = 4,
00148         LDNS_CERT_ISPKI         = 5,
00149         LDNS_CERT_IPGP          = 6,
00150         LDNS_CERT_ACPKIX        = 7,
00151         LDNS_CERT_IACPKIX       = 8,
00152         LDNS_CERT_URI           = 253,
00153         LDNS_CERT_OID           = 254
00154 };
00155 typedef enum ldns_enum_cert_algorithm ldns_cert_algorithm;
00156 
00157 
00158 
00166 struct ldns_struct_rdf
00167 {
00169         size_t _size;
00171         ldns_rdf_type _type;
00173         void  *_data;
00174 };
00175 typedef struct ldns_struct_rdf ldns_rdf;
00176 
00177 /* prototypes */
00178 
00179 /* write access functions */
00180 
00187 void ldns_rdf_set_size(ldns_rdf *rd, size_t size);
00188 
00195 void ldns_rdf_set_type(ldns_rdf *rd, ldns_rdf_type type);
00196 
00203 void ldns_rdf_set_data(ldns_rdf *rd, void *data);
00204 
00205 /* read access */
00206 
00212 size_t ldns_rdf_size(const ldns_rdf *rd);
00213 
00220 ldns_rdf_type ldns_rdf_get_type(const ldns_rdf *rd);
00221 
00228 uint8_t *ldns_rdf_data(const ldns_rdf *rd);
00229 
00230 /* creator functions */
00231 
00241 ldns_rdf *ldns_rdf_new(ldns_rdf_type type, size_t size, void *data);
00242 
00252 ldns_rdf *ldns_rdf_new_frm_data(ldns_rdf_type type, size_t size, const void *data);
00253 
00260 ldns_rdf *ldns_rdf_new_frm_str(ldns_rdf_type type, const char *str);
00261 
00269 ldns_status ldns_rdf_new_frm_fp(ldns_rdf **r, ldns_rdf_type type, FILE *fp);
00270 
00279 ldns_status ldns_rdf_new_frm_fp_l(ldns_rdf **r, ldns_rdf_type type, FILE *fp, int *line_nr);
00280 
00281 /* destroy functions */
00282 
00289 void ldns_rdf_free(ldns_rdf *rd);
00290 
00297 void ldns_rdf_deep_free(ldns_rdf *rd);
00298 
00299 /* conversion functions */
00300 
00307 ldns_rdf *ldns_native2rdf_int8(ldns_rdf_type type, uint8_t value);
00308 
00315 ldns_rdf *ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value);
00316 
00326 ldns_rdf *ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value);
00327 
00338 ldns_rdf *ldns_native2rdf_int16_data(size_t size, uint8_t *data);
00339 
00346 ldns_rdf *ldns_rdf_address_reverse(ldns_rdf *rd);
00347 
00353 uint8_t         ldns_rdf2native_int8(const ldns_rdf *rd);
00354 
00360 uint16_t        ldns_rdf2native_int16(const ldns_rdf *rd);
00361 
00367 uint32_t ldns_rdf2native_int32(const ldns_rdf *rd);
00368 
00374 time_t ldns_rdf2native_time_t(const ldns_rdf *rd);
00375 
00382 uint32_t ldns_str2period(const char *nptr, const char **endptr);
00383 
00391 ldns_status ldns_octet(char *word, size_t *length);
00392 
00398 ldns_rdf *ldns_rdf_clone(const ldns_rdf *rd);
00399 
00409 int ldns_rdf_compare(const ldns_rdf *rd1, const ldns_rdf *rd2);
00410 
00422 ldns_status ldns_rdf_hip_get_alg_hit_pk(ldns_rdf *rdf, uint8_t* alg,
00423                 uint8_t *hit_size, uint8_t** hit,
00424                 uint16_t *pk_size, uint8_t** pk);
00425 
00436 ldns_status ldns_rdf_hip_new_frm_alg_hit_pk(ldns_rdf** rdf, uint8_t alg,
00437                 uint8_t hit_size, uint8_t *hit, uint16_t pk_size, uint8_t *pk);
00438 
00439 #ifdef __cplusplus
00440 }
00441 #endif
00442 
00443 #endif  /* LDNS_RDATA_H */

Generated on 21 Apr 2016 for ldns by  doxygen 1.6.1