#!/bin/sh # # sendmsg # Version 1.7b # Mar 20th, 2001 # # kermit paging script # SMM - moved Jacob's stuff here, 'cause real shells have no functions! # RAC - Delete temp file here # # Code by Jacob Lundqvist jaclu@ibk.se # # Updated 97-01-11 # # Modification by Robert-Andre Croteau robert@bb4.com # # Bugs: Mssages can be lost if several processes tries to access kermit # at the same second, I have tried to reduce this risk by # introducing some randomness in the sleeptimes. # However if one sleeps 22, and some other sleep 73 they might # still wake upp at the same second, if thats the case, one or # both messages might get lost. This is hopefully not all that serious, # If the error is still there the next time bb checks, a new message # will be sent, the risk that the same message would be lost twice, # can't be that high... # # A1=$1 # FIRST ARG shift; A2="$*" # ALL THE REST. DON'T ASK. REALLY. if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi #----------------------------------------------------------------------------- # Wait for device to be available #----------------------------------------------------------------------------- # Get the available devices TTYLINE=`$GREP "^ttyline:" $BBHOME/etc/bbwarnsetup.cfg 2>/dev/null` if [ "$?" -ne 0 ] then echo "ttyline token was not setup in bbwarnsetup.cfg" echo "Numeric paging will not work" exit 1 else set $TTYLINE >/dev/null 2>&1 if [ "$#" -eq 1 ] then echo "ttyline token does not have an entry in bbwarnsetup.cfg" echo "Numeric paging will not work" exit 1 else shift # remove token from line TTYLINE="" for ttyline in $* do if [ -c "$ttyline" ] then TTYLINE="$TTYLINE $ttyline" fi done if [ "$TTYLINE" = "" ] then echo "ttyline token does not have a valid entry in bbwarnsetup.cfg" echo "Numeric paging will not work" exit 1 fi fi fi # Get the pagemaster users PAGEMASTER=`$GREP "^pagemaster:" $BBHOME/etc/bbwarnsetup.cfg 2>/dev/null` if [ "$?" -eq 0 ] then set $PAGEMASTER >/dev/null 2>&1 PAGEMASTER="" if [ "$#" -gt 1 ] then shift # remove pagemaster token from line PAGEMASTER="$*" fi fi # # To separate page-requests arriving the same second, # we give sleep-times depending on PID # I=`$EXPR $$ % 10` # last digit of PID SLEEPTIME=`$EXPR $I + 1` # plus 1 second MAXSLEEPS=`$EXPR 60 / $SLEEPTIME + 2` # # always do one sleep, to separate processes # starting same second in time # # echo initial sleep of:$SLEEPTIME sleep $SLEEPTIME foundtty=FALSE while [ "$foundtty" = "FALSE" ] do for ttyline in $TTYLINE do TTYDEV=`echo "$ttyline" | $SED "s/\/dev\///"` if test -f ${LOCKPREFIX}${TTYDEV} || test -f ${PAGINGLOCK}_${TTYDEV} then # echo "page: line busy, sleeping $SLEEPTIME" sleep $SLEEPTIME MAXSLEEPS=`$EXPR $MAXSLEEPS - 1` if [ "$MAXSLEEPS" -lt 0 ] then if [ "$PAGEMASTER" != "" ] then echo "Couldn't send page, locks weren't freed: $A1 $ttyline $A2" | $MAIL "BB Pager problem" $PAGEMASTER fi echo "Couldn't send page, locks weren't freed: $A1 $ttyline $A2" exit 1 fi # Try next modem line in TTYLINE else foundtty=TRUE break; fi done done $BBHOME/bin/touchtime ${PAGINGLOCK}_${TTYDEV} # prevent race-conditions #----------------------------------------------------------------------------- # Send a message using a kermit script, multiple attempts #----------------------------------------------------------------------------- # I=1 while test $I -le 10 do # echo "page; trying to send, attempt: $I" I=`$EXPR $I + 1` $KERMIT $A1 $ttyline $A2 > /dev/null if test "$?" = "0" then I=999 # make sure loop ends... fi done $RM -f ${PAGINGLOCK}_${TTYDEV} # Debuging... # if test "$I" = "999" # then # echo "msg delivered" # else # echo "msg failed" # fi if [ "$I" -ne 999 ] then exit 1 else exit 0 fi