# HTTP response body handling for socket-based metadata clients
# vim:set filetype=sh:
# shellcheck shell=sh

_imds_copy_body() {
	local headers offset length size

	headers=$(LC_ALL=C awk '
		{
			bytes += length($0) + 1
			sub(/\r$/, "")
		}
		/^$/ { print bytes + 1, body_length; found = 1; exit }
		tolower($1) == "transfer-encoding:" { exit 1 }
		tolower($1) == "content-length:" {
			if (NF != 2 || $2 !~ /^[0-9]+$/ || seen++)
				exit 1
			body_length = $2
		}
		END { if (!found) exit 1 }
	' "$1") || return

	set -- "$1" "$2" $headers
	offset="$3"
	length="$4"
	tail -c "+$offset" "$1" > "$2" || return
	[ -n "$length" ] || return 0
	size=$(wc -c < "$2") || return
	[ "$size" -eq "$length" ]
}
