diff options
Diffstat (limited to 'server.sh')
-rwxr-xr-x | server.sh | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/server.sh b/server.sh new file mode 100755 index 000000000000..011c40d0eec2 --- /dev/null +++ b/server.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env sh +tmpdir=$(mktemp -d) + +mkfifo "${tmpdir}/response" + +handle() { + while read line; do + trline=$(echo "$line" | tr -d '[\r\n]') + [ -z "$trline" ] && break + + echo $trline + MAC_REGEX='.*\s.*mac=(.{17})\sHTTP.*' + [[ "$trline" =~ $MAC_REGEX ]] && + MAC=$(echo $trline | sed -E "s/$MAC_REGEX/\1/") + done + + domain=$(for name in $(virsh list --name); do virsh domiflist "${name}" | grep -i -q "${MAC}" && echo "${name}" && break; done) + echo "${domain}" + ([[ -z "${MAC}" ]] || [[ -z "${domain}" ]]) && + domain="-" + + RESPONSE="$(cat <<EOF +HTTP/1.1 200 +Content-Type: text/plain + +${domain} +EOF +)" + + echo -e "$RESPONSE" > "${tmpdir}/response" +} + +while true; do + cat "${tmpdir}/response" | nc -lN "${PORT:-3000}" | handle +done |