/** Encode a Dns option and any sub-options.
+ *
+ * This function is only used by the test harness.
*
* @param[out] dbuff Where to write encoded DHCP attributes.
* @param[in] cursor with current VP set to the option to be encoded.
{
ssize_t slen;
fr_pair_t *vp;
+ fr_dcursor_t child_cursor;
fr_da_stack_t da_stack;
fr_dbuff_t work_dbuff = FR_DBUFF_MAX(dbuff, UINT16_MAX);
FR_PROTO_TRACE("encode_rr -- remaining %zd", fr_dbuff_remaining(&work_dbuff));
vp = fr_dcursor_current(cursor);
- if (vp->vp_type == FR_TYPE_STRUCT) {
- fr_dcursor_t child_cursor;
+ if (!vp) return 0;
- fr_pair_dcursor_child_iter_init(&child_cursor, &vp->vp_group, cursor);
+ fr_assert(vp->vp_type == FR_TYPE_STRUCT);
- slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &child_cursor, encode_ctx, encode_value, encode_child);
- if (slen <= 0) return slen;
- (void) fr_dcursor_next(cursor);
+ fr_pair_dcursor_child_iter_init(&child_cursor, &vp->vp_group, cursor);
- } else {
- slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, cursor, encode_ctx, encode_value, encode_child);
- if (slen <= 0) return slen;
- }
+ slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &child_cursor, encode_ctx, encode_value, encode_child);
+ if (slen <= 0) return slen;
+ (void) fr_dcursor_next(cursor);
FR_PROTO_TRACE("Complete rr is %zu byte(s)", fr_dbuff_used(&work_dbuff));
FR_PROTO_HEX_DUMP(fr_dbuff_start(&work_dbuff), fr_dbuff_used(&work_dbuff), NULL);