* Decode EVERYTHING as a TLV.
*/
while (p < end) {
- slen = decode_tlv(child_ctx, child_list, fr_dict_by_da(child), child, p, end - p, decode_ctx);
+ slen = decode_tlv(child_ctx, child_list, child, p, end - p, decode_ctx);
if (slen < 0) {
FR_PROTO_TRACE("failed decoding TLV?");
goto unknown;
if (decode_value) {
ssize_t slen;
- slen = decode_value(child_ctx, child_list, fr_dict_by_da(child), child, p, child_length, decode_ctx);
+ slen = decode_value(child_ctx, child_list, child, p, child_length, decode_ctx);
if (slen < 0) {
FR_PROTO_TRACE("Failed decoding value");
goto unknown;
extern "C" {
#endif
-typedef ssize_t (*fr_decode_value_t)(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_dict_t const *dict,
+typedef ssize_t (*fr_decode_value_t)(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx);
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx, bool do_raw);
-static ssize_t decode_tlv_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out, UNUSED fr_dict_t const *dict,
+static ssize_t decode_tlv_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx)
{
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx);
-/** Handle arrays of DNS lavels for fr_struct_from_network()
+/** Handle arrays of DNS labels for fr_struct_from_network()
*
*/
-static ssize_t decode_value_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out, UNUSED fr_dict_t const *dict,
+static ssize_t decode_value_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx)
{
static ssize_t decode_dns_labels(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx);
-static ssize_t decode_tlvs(TALLOC_CTX *ctx, fr_pair_list_t *out,
- fr_dict_attr_t const *parent,
- uint8_t const *data, size_t const data_len, void *decode_ctx, bool do_raw);
-
-static ssize_t decode_tlv_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out, UNUSED fr_dict_t const *dict,
- fr_dict_attr_t const *parent,
- uint8_t const *data, size_t const data_len, void *decode_ctx)
-{
- return decode_tlvs(ctx, out, parent, data, data_len, decode_ctx, true);
-}
/** Handle arrays of DNS labels for fr_struct_from_network()
*
*/
-static ssize_t decode_value_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out, UNUSED fr_dict_t const *dict,
+static ssize_t decode_value_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
uint8_t const *data, size_t const data_len, void *decode_ctx)
{
*/
static ssize_t decode_tlvs(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
- uint8_t const *data, size_t const data_len, void *decode_ctx, bool do_raw)
+ uint8_t const *data, size_t const data_len, void *decode_ctx)
{
uint8_t const *p, *end;
fr_pair_t *vp;
slen = decode_option(vp, &vp->vp_group, parent, p, (end - p), decode_ctx);
if (slen <= 0) {
- if (!do_raw) return slen - (p - data);
-
slen = decode_raw(vp, &vp->vp_group, parent, p, (end - p), decode_ctx);
if (slen <= 0) return slen - (p - data);
}
}
slen = fr_struct_from_network(ctx, out, attr, p, end - p, true,
- packet_ctx, decode_value_trampoline, decode_tlv_trampoline);
+ packet_ctx, decode_value_trampoline, decode_tlvs);
if (slen < 0) return slen;
if (!slen) break;
p += slen;
}
slen = fr_struct_from_network(ctx, out, attr_dns_rr, data, data_len, true,
- decode_ctx, decode_value_trampoline, decode_tlv_trampoline);
+ decode_ctx, decode_value_trampoline, decode_tlvs);
if (slen < 0) return slen;
FR_PROTO_TRACE("decoding option complete, returning %zd byte(s)", slen);
* packet length. But when we're decoding values inside of a struct,
* we're not using extended attributes.
*/
-static ssize_t decode_value(TALLOC_CTX *ctx, fr_pair_list_t *out, UNUSED fr_dict_t const *dict,
+static ssize_t decode_value_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
uint8_t const *data, size_t data_len, void *decode_ctx)
{
/** Wrapper called by fr_struct_from_network()
*/
-static ssize_t decode_tlv(TALLOC_CTX *ctx, fr_pair_list_t *out, UNUSED fr_dict_t const *dict,
+static ssize_t decode_tlv_trampoline(TALLOC_CTX *ctx, fr_pair_list_t *out,
fr_dict_attr_t const *parent,
uint8_t const *data, size_t data_len, void *decode_ctx)
{
* into a contiguous memory buffer.
*/
ret = fr_struct_from_network(ctx, out, parent, p, attr_len, false,
- packet_ctx, decode_value, decode_tlv);
+ packet_ctx, decode_value_trampoline, decode_tlv_trampoline);
if (ret < 0) goto raw;
return attr_len;