Changeset View
Changeset View
Standalone View
Standalone View
contrib/ldns/wire2host.c
Show First 20 Lines • Show All 266 Lines • ▼ Show 20 Lines | while (*pos < end && | ||||
case LDNS_RDF_TYPE_UNKNOWN: | case LDNS_RDF_TYPE_UNKNOWN: | ||||
case LDNS_RDF_TYPE_SERVICE: | case LDNS_RDF_TYPE_SERVICE: | ||||
case LDNS_RDF_TYPE_LOC: | case LDNS_RDF_TYPE_LOC: | ||||
case LDNS_RDF_TYPE_WKS: | case LDNS_RDF_TYPE_WKS: | ||||
case LDNS_RDF_TYPE_NSAP: | case LDNS_RDF_TYPE_NSAP: | ||||
case LDNS_RDF_TYPE_ATMA: | case LDNS_RDF_TYPE_ATMA: | ||||
case LDNS_RDF_TYPE_IPSECKEY: | case LDNS_RDF_TYPE_IPSECKEY: | ||||
case LDNS_RDF_TYPE_LONG_STR: | case LDNS_RDF_TYPE_LONG_STR: | ||||
case LDNS_RDF_TYPE_AMTRELAY: | |||||
case LDNS_RDF_TYPE_SVCPARAMS: | |||||
case LDNS_RDF_TYPE_NONE: | case LDNS_RDF_TYPE_NONE: | ||||
/* | /* | ||||
* Read to end of rr rdata | * Read to end of rr rdata | ||||
*/ | */ | ||||
cur_rdf_length = end - *pos; | cur_rdf_length = end - *pos; | ||||
break; | break; | ||||
} | } | ||||
Show All 21 Lines | while (*pos < end && | ||||
rdf_index++; | rdf_index++; | ||||
} /* while (rdf_index < ldns_rr_descriptor_maximum(descriptor)) */ | } /* while (rdf_index < ldns_rr_descriptor_maximum(descriptor)) */ | ||||
return LDNS_STATUS_OK; | return LDNS_STATUS_OK; | ||||
} | } | ||||
/* TODO: | /* TODO: | ||||
can *pos be incremented at READ_INT? or maybe use something like | can *pos be incremented at READ_INT? or maybe use something like | ||||
RR_CLASS(wire)? | RR_CLASS(wire)? | ||||
uhhm Jelte?? | uhhm Jelte?? | ||||
*/ | */ | ||||
ldns_status | ldns_status | ||||
ldns_wire2rr(ldns_rr **rr_p, const uint8_t *wire, size_t max, | ldns_wire2rr(ldns_rr **rr_p, const uint8_t *wire, size_t max, | ||||
size_t *pos, ldns_pkt_section section) | size_t *pos, ldns_pkt_section section) | ||||
▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | ldns_wire2pkt(ldns_pkt **packet_p, const uint8_t *wire, size_t max) | ||||
uint16_t i; | uint16_t i; | ||||
ldns_rr *rr; | ldns_rr *rr; | ||||
ldns_pkt *packet = ldns_pkt_new(); | ldns_pkt *packet = ldns_pkt_new(); | ||||
ldns_status status = LDNS_STATUS_OK; | ldns_status status = LDNS_STATUS_OK; | ||||
uint8_t have_edns = 0; | uint8_t have_edns = 0; | ||||
uint8_t data[4]; | uint8_t data[4]; | ||||
if (!packet) { | |||||
return LDNS_STATUS_MEM_ERR; | |||||
} | |||||
status = ldns_wire2pkt_hdr(packet, wire, max, &pos); | status = ldns_wire2pkt_hdr(packet, wire, max, &pos); | ||||
LDNS_STATUS_CHECK_GOTO(status, status_error); | LDNS_STATUS_CHECK_GOTO(status, status_error); | ||||
for (i = 0; i < ldns_pkt_qdcount(packet); i++) { | for (i = 0; i < ldns_pkt_qdcount(packet); i++) { | ||||
status = ldns_wire2rr(&rr, wire, max, &pos, LDNS_SECTION_QUESTION); | status = ldns_wire2rr(&rr, wire, max, &pos, LDNS_SECTION_QUESTION); | ||||
if (status == LDNS_STATUS_PACKET_OVERFLOW) { | if (status == LDNS_STATUS_PACKET_OVERFLOW) { | ||||
status = LDNS_STATUS_WIRE_INCOMPLETE_QUESTION; | status = LDNS_STATUS_WIRE_INCOMPLETE_QUESTION; | ||||
Show All 36 Lines | for (i = 0; i < ldns_pkt_arcount(packet); i++) { | ||||
if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_OPT) { | if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_OPT) { | ||||
ldns_pkt_set_edns_udp_size(packet, ldns_rr_get_class(rr)); | ldns_pkt_set_edns_udp_size(packet, ldns_rr_get_class(rr)); | ||||
ldns_write_uint32(data, ldns_rr_ttl(rr)); | ldns_write_uint32(data, ldns_rr_ttl(rr)); | ||||
ldns_pkt_set_edns_extended_rcode(packet, data[0]); | ldns_pkt_set_edns_extended_rcode(packet, data[0]); | ||||
ldns_pkt_set_edns_version(packet, data[1]); | ldns_pkt_set_edns_version(packet, data[1]); | ||||
ldns_pkt_set_edns_z(packet, ldns_read_uint16(&data[2])); | ldns_pkt_set_edns_z(packet, ldns_read_uint16(&data[2])); | ||||
/* edns might not have rdfs */ | /* edns might not have rdfs */ | ||||
if (ldns_rr_rdf(rr, 0)) { | if (ldns_rr_rdf(rr, 0)) { | ||||
ldns_rdf_deep_free(ldns_pkt_edns_data(packet)); | |||||
ldns_pkt_set_edns_data(packet, ldns_rdf_clone(ldns_rr_rdf(rr, 0))); | ldns_pkt_set_edns_data(packet, ldns_rdf_clone(ldns_rr_rdf(rr, 0))); | ||||
} | } | ||||
ldns_rr_free(rr); | ldns_rr_free(rr); | ||||
have_edns += 1; | have_edns += 1; | ||||
} else if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_TSIG) { | } else if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_TSIG) { | ||||
ldns_pkt_set_tsig(packet, rr); | ldns_pkt_set_tsig(packet, rr); | ||||
ldns_pkt_set_arcount(packet, ldns_pkt_arcount(packet) - 1); | ldns_pkt_set_arcount(packet, ldns_pkt_arcount(packet) - 1); | ||||
} else if (!ldns_rr_list_push_rr(ldns_pkt_additional(packet), rr)) { | } else if (!ldns_rr_list_push_rr(ldns_pkt_additional(packet), rr)) { | ||||
Show All 17 Lines |