]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Define fr_internal_encode_list() to internally encode a fr_pair_list_t
authorNick Porter <nick@portercomputing.co.uk>
Thu, 5 May 2022 10:46:04 +0000 (11:46 +0100)
committerNick Porter <nick@portercomputing.co.uk>
Wed, 17 Aug 2022 07:25:25 +0000 (08:25 +0100)
src/protocols/internal/encode.c
src/protocols/internal/internal.h

index 3fbb9238b3ecee47416c0d78dc58e2e61268c19b..fd8b0f5a6eba1b320b84269de01941911051d75a 100644 (file)
@@ -279,6 +279,32 @@ ssize_t fr_internal_encode_pair(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *e
        return internal_encode(dbuff, &da_stack, 0, cursor, encode_ctx);
 }
 
+/** Encode a list of pairs using the internal encoder
+ *
+ * @param[out] dbuff           Where to write encoded data.
+ * @param[in] list             List of attributes to encode.
+ * @param[in] encode_ctx       Additional data to be used by the encoder.
+ * @return
+ *     - length of encoded data on success
+ *     - < 0 on failure
+ */
+ssize_t fr_internal_encode_list(fr_dbuff_t *dbuff, fr_pair_list_t const *list, void *encode_ctx)
+{
+       fr_pair_t       *vp;
+       fr_dcursor_t    dcursor;
+       ssize_t         ret, len = 0;
+
+       for (vp = fr_pair_dcursor_init(&dcursor, list);
+            vp;
+            vp = fr_dcursor_current(&dcursor)) {
+               ret = fr_internal_encode_pair(dbuff, &dcursor, encode_ctx);
+               if (ret < 0) return ret;
+               len += ret;
+       }
+
+       return len;
+}
+
 /*
  *     Test points
  */
index 5b940a67adb2a9166e48051079475948e2f3f4b7..5622f42f37b39d8994c7578b38383572a457821e 100644 (file)
@@ -43,6 +43,8 @@
 
 ssize_t fr_internal_encode_pair(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *encode_ctx);
 
+ssize_t fr_internal_encode_list(fr_dbuff_t *dbuff, fr_pair_list_t const *list, void *encode_ctx);
+
 ssize_t fr_internal_decode_pair(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);