static fr_table_num_ordered_t const subtype_table[] = {
{ L("dns_label"), FLAG_ENCODE_DNS_LABEL },
+ { L("uncompressed"), FLAG_ENCODE_DNS_LABEL_UNCOMPRESSED },
};
enum {
FLAG_ENCODE_NONE = 0, //!< no particular encoding for DNS strings
FLAG_ENCODE_DNS_LABEL, //!< encode as DNS label
+ FLAG_ENCODE_DNS_LABEL_UNCOMPRESSED, //!< encode as uncompressed DNS label
};
typedef struct {
/*
* DNS labels get a special encoder.
*/
- if (!da->flags.extra && (da->flags.subtype == FLAG_ENCODE_DNS_LABEL)) {
+ if (!da->flags.extra) {
fr_dbuff_marker_t last_byte, src;
+ fr_assert((da->flags.subtype == FLAG_ENCODE_DNS_LABEL) ||
+ (da->flags.subtype == FLAG_ENCODE_DNS_LABEL_UNCOMPRESSED));
+
fr_dbuff_marker(&last_byte, &work_dbuff);
fr_dbuff_marker(&src, &work_dbuff);
FR_PROTO_TRACE("encode DNS label %s", vp->vp_strvalue);
- slen = fr_dns_label_from_value_box_dbuff(&work_dbuff, true, &vp->data, packet_ctx->lb);
+ slen = fr_dns_label_from_value_box_dbuff(&work_dbuff, (da->flags.subtype == FLAG_ENCODE_DNS_LABEL),
+ &vp->data, packet_ctx->lb);
if (slen < 0) return slen;
break;
}