#!/usr/bin/env bash

ADDR=$1
DNS_SERVER=$2

EXTRA_LINES_EXPR='(is an alias|has no|not found|^Using domain server:|^Name:|^Address:|^Aliases:|^$)'

function print_host() {
	local port=$2
	for ipv in A AAAA; do
		if [ "$ipv" = A ]; then
			local argn=4
			local wl=''
			local wr=''
		else
			local argn=5
			local wl='['
			local wr=']'
		fi
		host -t $ipv $1 $DNS_SERVER | grep -Ev "$EXTRA_LINES_EXPR" | awk "{ print \$$argn }" | while read server; do
			echo -n "$wl$server$wr:$port (${3-$ipv}"
			local response
			response=$( (echo '</>'; sleep 0.1) | nc -nw 2 $server $port 2>/dev/null)
			if [ $? -eq 0 ]; then
				local introduced_as=$(echo "$response" | grep -Eo "from=.[^\'\"]+." | cut -d= -f2)
				[ -n "$introduced_as" ] && echo -n " $introduced_as"
				echo ')'
			else
				echo ', unavailable)'
			fi
		done
	done
}

for role in client server; do
	echo "--- $role ---------------------------------------------"
	HOST_ANSWER=$(host -t SRV "_xmpp-$role._tcp.$ADDR" $DNS_SERVER | grep -Ev "$EXTRA_LINES_EXPR")
	if echo $HOST_ANSWER | grep -q 'has SRV'; then
		echo "$HOST_ANSWER" | awk '{ print $7, $8 }' | while read port server; do
			print_host $server $port SRV
		done
	else
		if [ "$role" = "server" ]; then
			port=5269
		else
			port=5222
		fi
		print_host $ADDR $port
	fi
done
