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 #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 /* prototypes */
00139 
00140 /* write access functions */
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 /* read access */
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 /* creator functions */
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 /* destroy functions */
00236 
00243 void            ldns_rdf_free(ldns_rdf *rd);
00244 
00251 void            ldns_rdf_deep_free(ldns_rdf *rd);
00252 
00253 /* conversion functions */
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  /* LDNS_RDATA_H */

Generated on Fri Aug 8 03:40:19 2008 for ldns by  doxygen 1.5.6