#!/bin/sh
FNM=$1
OPATH="/tmp/"
OFILE=`basename $FNM | sed -e "s/.smcap/.pcap/"`
#OFILE=`mktemp smcap2pcap.XXXXX --suffix .pcap`
O="${OPATH}${OFILE}"

TCPDUMP=''
PPLAYS=''
PORT="0"


(
#O=`echo "$FNM" | sed -e "s/\.smcap/\.pcap/"`
echo "output file: $O"

PPORT=`pplay --smcap $FNM --smprint dport 2>&1 | grep -v "^WARNING"`
echo "Detected destination port: $PPORT"


# detect colliding ports:
RGX=`netstat -nap | grep 'LISTEN ' | grep '\(0.0.0.0\|127.0.0.2\):[0-9]\+' | awk '{ print $4 }' | sed -e 's/::/0/g' | awk -F: '{ print $2 }' | sort -n | uniq | tr '\n' '|' | sed -e 's/|/\\|/g' | sed -e 's/|$//'`

PORT="$PPORT"
while :; do
    echo "$PORT" | egrep "$RGX"
    if [ "$?" = "0" ] 
    then
        echo "port $PORT is in collision with already opened port"
        PORT=$((1024 + `tr -cd 0-9 </dev/urandom | head -c 4`))
    else
        echo "using destination port '$PORT'"
        break
    fi
done

# to zeroize $?
echo 
/usr/bin/pplay --server 127.0.0.2:$PORT  --smcap $FNM  --auto 0.1  --exitoneot --nostdin & #> /dev/null 2>&1 &

PPLAYS=$!
PPLAYS_RET=$?
echo "PPLAY SERVER RET" $PPLAYS_RET
echo "PPLAY SERVER PID $PPLAYS"

sleep 0.5

tcpdump -i lo -n 'host 127.0.0.2' -s 20000 -w $O -U & #> /dev/null 2>&1 &
TCPDUMP=$!
echo "TCPDUMP PID $TCPDUMP"

sleep 2;

/usr/bin/pplay --client 127.0.0.2:$PORT  --smcap $FNM  --auto 0.1 --exitoneot --nostdin  #> /dev/null 2>&1
# wait for it to finish

sleep 2;

kill -2 $TCPDUMP
kill -9 $PPLAYS

) > /tmp/smcap2pcap.log 2>&1


echo -n $O
