#!/bin/sh

HOST=localhost
PORT=9191

ROOT=$(dirname `readlink $0` 2> /dev/null)
if [ -n "${ROOT}" ]; then
	cd "${ROOT}"
fi
r4cmd() {
	ARG=`jq -nr --arg x "$@" '$x|@uri'`
	curl "http://${HOST}:${PORT}/cmd/$ARG"
	rc=$?
	echo
	exit $rc
}

if [ -z "$R2PIPE_IN" ]; then
	if [ "$1" = cmd ]; then
		shift
		r4cmd "$@"
	fi
	echo "# You can run commands in the R4Ghidra webserver like this"
	echo
	echo "r4g cmd px"
	echo
	echo "# This program is experimental and requires r2pipe to run"
	echo
	echo "In the radare2 shell type: r2 -c '#!pipe r4g'"
	echo
	echo "# Alternatively you can connect with:"
	echo
	echo "r2 -C http://${HOST}:${PORT}/cmd/"
	echo "r2 -c '=+http://${HOST}:${PORT}/cmd/' --"
	exit 1
fi
if [ -z "$1" ]; then
	echo "Usage: r4g [command]"
	echo "Commands:"
	echo "  cmd [r4cmd]                     # run r4ghidra commands with curl"
	echo "  r2            .!r4g r2          # import r4ghidra into cmd.pdc"
	echo '  dec [addr]    !r4g dec `?v $$`  # decompile function at given address'
	echo "  pull                            # pull changes from ghidra into r2"
	echo "  push                            # push comments and functions names from r2 to ghidra"
	echo "  client [addr]                   # call the server to request the decompilation"
	echo "  server [file]"
#	exit 1
fi

TESTBIN=${R2_FILE}
FCNADDR=${R2_XOFFSET}

TESTBIN=/bin/ls
case "$1" in
r2)
	#echo '"(pdcg,!r4g client `?v $FB`>.a,. .a,rm .a)"'
	#echo 'e cmd.pdc=.(pdcg)'
	#echo 'e cmd.pdc=$ghidra-dec'
	echo '"$pddg*=#!pipe r4g pdd*"'
	echo '"$pddg=#!pipe r4g pdd"'
	echo 'e cmd.pdd=pddg'
	;;
headless)
	echo "Headless r4ghidra is WIP"
	TESTBIN="$2"
	if [ -z "${TESTBIN}" ]; then
		echo "Usage: r4g server /path/to/file"
	else
		rm -rf Test.*
		analyzeHeadless . Test.gpr -import ${TESTBIN} \
			-postScript GhidraDecompilerR2.java -deleteProject
	fi
	;;
dec)
	TESTBIN=/bin/ls
	FCNADDR=$2
	echo "FCNADDR=$2"
	echo
	rm -f decompiled.c
	rm -rf Test.*
	analyzeHeadless . Test.gpr -import ${TESTBIN} -postScript GhidraDecompiler.java ${FCNADDR} -deleteProject > /dev/null 2>&1
	indent decompiled.c
	cat decompiled.c
	;;
import|pull)
	TESTBIN=/bin/ls
	FCNADDR=$2
	echo "Assuming you have r2 http server on port 9090"
	echo "r2 -e http.port=9191 -c'& =h' /bin/ls"
	rm -rf Test.*
	analyzeHeadless . Test.gpr -import ${TESTBIN} -postScript ghidra2radare.py -deleteProject > /dev/null 2>&1
	cat ghidra-output.r2
	;;
cmd|*)
	r4cmd "$@"
	;;
esac

#analyzeHeadless . Test.gpr -import $(TESTBIN) -postScript ghidra/GhidraDecompiler.java $(FCNADDR) -deleteProject
exit 0
