#!/bin/bash
# IBM(c) 2013  EPL license http://www.eclipse.org/legal/epl-v10.html
# This routine when called, contacts xcatd.  It will return to the caller when xcatd is
# ready to process the request
# It is called by xcatdsklspost before calling getpostscripts.awk
# it is called by remoteshell before calling getcredentials.awk
#
# check bash version, if < 4 then cannot use autodetect of next FD
bashversion=$BASH_VERSION
bashversionnum=`echo $bashversion | cut -d. -f1`
if [[ $bashversionnum > 3 ]]; then
    exec {REMOTEFD}<>/dev/udp/$1/$2
else
    exec 50<>/dev/udp/$1/$2
    echo "resourcerequest: xcatd" >&50
    REMOTEFD=50
fi
echo "resourcerequest: xcatd" >&$REMOTEFD
parpid=$$
touch /tmp/goahead.$parpid
touch /tmp/killme.$parpid
exec 2> /dev/null
while ! grep 'resourcerequest: ok' /tmp/goahead.$parpid > /dev/null; do
	(
      echo "resourcerequest: xcatd" >&$REMOTEFD
      if [[ $bashversionnum > 3 ]]; then
         exec {LOCALFD}<>/proc/self/stat
      else
        exec 51<>/proc/self/stat
        LOCALFD=51
      fi
      read mystat<&$LOCALFD
      mypid=$(echo $mystat|cut -d " " -f 4)
	  (sleep $(((RANDOM%60)+120)).$((RANDOM%50)); if [ -f /tmp/killme.$parpid ]; then kill -TERM $mypid; fi) &
      echo $! > /tmp/sleeperpid.$parpid
	  exec awk '{print $0 > "/tmp/goahead.'$parpid'";exit}' <&$REMOTEFD
      exec {LOCALFD}>&-
	)	
done
sleeper=$(cat /tmp/sleeperpid.$parpid)
sleeper=$(ps -ef|awk "\$3==$sleeper"|awk '{print $2}')
rm /tmp/goahead.$parpid
rm /tmp/sleeperpid.$parpid
rm /tmp/killme.$parpid
if [[ $bashversionnum > 3 ]]; then
  exec {REMOTEFD}>&-
else
  exec 50>&-
fi
kill -TERM $sleeper
