#!/bin/sh

# screen-ssh 0.2
#
# Mark Allman (mallman@icir.org)
# September 2009

PAUSE=$HOME/.scsh.pause
SDIR=.ssh/scsh
LOCKF=$HOME/$SDIR/scsh.lock
SSH_ARGS="-Y -t -o ServerAliveCountMax=2 -o ServerAliveInterval=10 -o ConnectTimeout=6"
SID=scsh.`hostname`.$UID.$$
ARGS=$*

if [ $# -eq 0 ]
then
    echo "usage: `basename $0` pause|unpause [ssh_args]"
    exit 1
fi

case $1 in
    pause)
        touch $PAUSE
        exit 0 
        ;;
    unpause)
        rm -f $PAUSE
        exit 0
        ;;
esac

mkdir -p $HOME/$SDIR

R=255
while [ $R = 255 ]
do
    while [ -f $PAUSE ]
    do
        sleep 15
    done
    CONTROL="-o ControlPath=none"
    lockfile -1 -r5 $LOCKF > /dev/null
    if [ $? -eq 0 ]
    then
        sleep 1
        ssh -O check $SSH_ARGS $ARGS > /dev/null 2>&1 || CONTROL="-M"
    fi  
    CMD="ssh $CONTROL $SSH_ARGS $ARGS \"export SCSH_AGENT=$SID; [ ! -d $SDIR ] && mkdir $SDIR; (set |grep ^SSH; set |grep ^DISPLAY) > $SDIR/$SID; [ -e $SDIR/$SID.pid ] && kill -10 \\\`cat $SDIR/$SID.pid\\\`; screen -d -R -S $SID\""
    echo "`date` ... connecting ..."
    rm -f $LOCKF
    eval $CMD
    R=$?
    sleep 1
done
exit 0
