diff options
Diffstat (limited to 'host2str.c')
| -rw-r--r-- | host2str.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/host2str.c b/host2str.c index deeeaf634e63..9f2795afadba 100644 --- a/host2str.c +++ b/host2str.c @@ -410,6 +410,14 @@ ldns_rdf2buffer_str_int32(ldns_buffer *output, const ldns_rdf *rdf) } ldns_status +ldns_rdf2buffer_str_int64(ldns_buffer *output, const ldns_rdf *rdf) +{ + uint64_t data = ldns_read_uint64(ldns_rdf_data(rdf)); + ldns_buffer_printf(output, "%llu", (unsigned long long) data); + return ldns_buffer_status(output); +} + +ldns_status ldns_rdf2buffer_str_time(ldns_buffer *output, const ldns_rdf *rdf) { /* create a YYYYMMDDHHMMSS string if possible */ @@ -1225,6 +1233,34 @@ ldns_rdf2buffer_str_eui64(ldns_buffer *output, const ldns_rdf *rdf) } ldns_status +ldns_rdf2buffer_str_unquoted(ldns_buffer *output, const ldns_rdf *rdf) +{ + size_t amount, i; + uint8_t ch; + if(ldns_rdf_size(rdf) < 1) { + return LDNS_STATUS_WIRE_RDATA_ERR; + } + if((int)ldns_rdf_size(rdf) < (int)ldns_rdf_data(rdf)[0] + 1) { + return LDNS_STATUS_WIRE_RDATA_ERR; + } + amount = ldns_rdf_data(rdf)[0]; + for(i=0; i<amount; i++) { + ch = ldns_rdf_data(rdf)[1+i]; + if (isprint((int)ch) || ch == '\t') { + if (ch == '\"' || ch == '\\' || ch == '\'' || + ch == '(' || ch == ')' || isspace((int)ch)) + ldns_buffer_printf(output, "\\%c", ch); + else + ldns_buffer_printf(output, "%c", ch); + } else { + ldns_buffer_printf(output, "\\%03u", + (unsigned)(uint8_t) ch); + } + } + return ldns_buffer_status(output); +} + +ldns_status ldns_rdf2buffer_str_tag(ldns_buffer *output, const ldns_rdf *rdf) { size_t nchars; @@ -1386,6 +1422,8 @@ ldns_rdf2buffer_str_amtrelay(ldns_buffer *output, const ldns_rdf *rdf) precedence, discovery_optional, relay_type); if (relay) (void) ldns_rdf2buffer_str(output, relay); + else + ldns_buffer_printf(output, "."); ldns_rdf_deep_free(relay); return ldns_buffer_status(output); @@ -1644,6 +1682,10 @@ ldns_rdf2buffer_str_fmt(ldns_buffer *buffer, case LDNS_RDF_TYPE_INT32: res = ldns_rdf2buffer_str_int32(buffer, rdf); break; + case LDNS_RDF_TYPE_INT64: + case LDNS_RDF_TYPE_IPN: + res = ldns_rdf2buffer_str_int64(buffer, rdf); + break; case LDNS_RDF_TYPE_PERIOD: res = ldns_rdf2buffer_str_period(buffer, rdf); break; @@ -1726,6 +1768,9 @@ ldns_rdf2buffer_str_fmt(ldns_buffer *buffer, case LDNS_RDF_TYPE_EUI64: res = ldns_rdf2buffer_str_eui64(buffer, rdf); break; + case LDNS_RDF_TYPE_UNQUOTED: + res = ldns_rdf2buffer_str_unquoted(buffer, rdf); + break; case LDNS_RDF_TYPE_TAG: res = ldns_rdf2buffer_str_tag(buffer, rdf); break; @@ -2545,6 +2590,18 @@ ldns_edns_ede2buffer_str(ldns_buffer* output, uint8_t* data, size_t len) case LDNS_EDE_TOO_EARLY: ldns_buffer_printf(output, " 26 (Too Early)"); break; + case LDNS_EDE_UNSUPPORTED_NSEC3_ITERATIONS_VALUE: + ldns_buffer_printf(output, " 27 (Unsupported NSEC3 Iterations Value)"); + break; + case LDNS_EDE_UNABLE_TO_CONFORM_TO_POLICY: + ldns_buffer_printf(output, " 28 (Unable to conform to policy)"); + break; + case LDNS_EDE_SYNTHESIZED: + ldns_buffer_printf(output, " 29 (Synthesized)"); + break; + case LDNS_EDE_INVALID_QUERY_TYPE: + ldns_buffer_printf(output, " 30 (Invalid Query Type)"); + break; default: ldns_buffer_printf(output, " %02x", data[0]); ldns_buffer_printf(output, " %02x", data[1]); @@ -2773,6 +2830,9 @@ ldns_pkt2buffer_str_fmt(ldns_buffer *output, if (ldns_pkt_edns_do(pkt)) { ldns_buffer_printf(output, " do"); } + if (ldns_pkt_edns_co(pkt)) { + ldns_buffer_printf(output, " co"); + } /* the extended rcode is the value set, shifted four bits, * and or'd with the original rcode */ if (ldns_pkt_edns_extended_rcode(pkt)) { |
