#!/bin/bash

print_usage() {
cat >&2 <<USAGE
Usage: $0 vmname
Connects to another VM console using the admin.vm.Console RPC service.
USAGE
}

if [ $# -lt 1 ] ; then
    print_usage
    exit 1
fi

QREXEC_REQUESTED_TARGET="$1"

qrexec_console() {
    QREXEC_REQUESTED_TARGET="$1"

    qrexec-client-vm "$QREXEC_REQUESTED_TARGET" admin.vm.Console

    # exit code 200 is flock exit code in admin.vm.Console
    exit_code=$?
    if [ $exit_code -gt 0 ]; then
        if [ $exit_code -ne 200 ]; then
            printf "Cannot connect to %s" "$QREXEC_REQUESTED_TARGET"
        else
            printf "A qube is already connected to %s" "$QREXEC_REQUESTED_TARGET"
        fi
        exit 1
    fi
}

export -f qrexec_console

printf "Use '^]' to exit remote console\n"
socat file:/dev/tty,rawer,escape=0x1d EXEC:"/bin/bash -c \'qrexec_console $QREXEC_REQUESTED_TARGET 2>/dev/null\'"
printf '\n'