1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#!/bin/bash
# SMS Server Tools 3.
# Sample script for using a regular run feature.
# See run.html for more details.
#--------------------------------------------------------------------------
# The first part is going to the eventhandler:
# The following code stores delivery timestamp to the sent message
if [ "$1" = "REPORT" ]; then
SENTDIR=/var/spool/sms/sent
if grep "Status: 0" $2 >/dev/null; then
FROM=`formail -zx From: < $2`
RECEIVED=`formail -zx Received: < $2`
TMPFILE=`mktemp /tmp/smsd_XXXXXX`
formail -I "" < $2 | sed -e"1,2d" > $TMPFILE
MESSAGE_ID=`formail -zX Message_id: < $TMPFILE`
grep -lx "$MESSAGE_ID" $SENTDIR/* > $TMPFILE
cat $TMPFILE | while read FNAME; do
OLDRECEIVED=`formail -zx Received: < ${FNAME}`
if [ "$OLDRECEIVED" = "" ]; then
TO=`formail -zx To: < ${FNAME}`
if [ "$TO" = "$FROM" ]; then
TMPFILE2=`mktemp /tmp/smsd_XXXXXX`
cp ${FNAME} $TMPFILE2
formail -f -I "Received: $RECEIVED" < $TMPFILE2 > ${FNAME}
unlink $TMPFILE2
fi
fi
done
unlink $TMPFILE
fi
fi
# The second part tries to find undelivered messages and sends them
# to the alternate number if it is described.
max_delay=600 #seconds, 1800 is 30 minutes.
SENTDIR=/var/spool/sms/sent
OUTGOINGDIR=/var/spool/sms/outgoing
TMPFILE=`mktemp /tmp/smsd_XXXXXX`
send2alternate=0
rename_alternate=0
grep -l ^Alternate_to: $SENTDIR/* > $TMPFILE
cat $TMPFILE | while read FNAME; do
if ! test -f "${FNAME}.LOCK" ; then
ALT_TO=`formail -zx Alternate_to: < ${FNAME}`
if [ "$ALT_TO" != "" ]; then
MSG_ID=`formail -zx Message_id: < ${FNAME}`
if [ "$MSG_ID" != "" ]; then
RECEIVED=`formail -zx Received: < ${FNAME}`
if [ "$RECEIVED" = "" ]; then
#This message is not yet received
SENT=`formail -zx Sent: < ${FNAME}`
if [ "$SENT" = "" ]; then
#Hmmm... No Sent: timestamp? Will resend now.
send2alternate=1
else
#How long this message has been waiting?
cur_timestamp=`date +%s`
msg_timestamp=`date +%s -d "$SENT"`
time_diff=`expr $cur_timestamp - $msg_timestamp`
if [ $time_diff -gt $max_delay ]; then
send2alternate=1
fi
fi
else
#This message is now received
rename_alternate=1
fi
fi
if [ $send2alternate -gt 0 ]; then
TMPFILE2=`mktemp /tmp/smsd_XXXXXX`
formail -f -I Alternate_to: -i "To: $ALT_TO" < ${FNAME} > $TMPFILE2
TMPFILE3=`mktemp $OUTGOINGDIR/regr_XXXXXX`
echo "$$" > $TMPFILE3.LOCK
mv $TMPFILE2 $TMPFILE3
rm $TMPFILE3.LOCK
rename_alternate=1
fi
if [ $rename_alternate -gt 0 ]; then
#Alternate number is not effective anymore:
TMPFILE2=`mktemp /tmp/smsd_XXXXXX`
cp ${FNAME} $TMPFILE2
formail -f -R Alternate_to: Old-Alternate_to: < $TMPFILE2 > ${FNAME}
unlink $TMPFILE2
fi
fi
fi
done
unlink $TMPFILE
############################################
SCHEDULEDDIR=/var/spool/sms/scheduled
OUTGOINGDIR=/var/spool/sms/outgoing
if [ "$(ls -A $SCHEDULEDDIR)" ]; then
TMPFILE=`mktemp /tmp/smsd_XXXXXX`
#grep -l ^Send: $SCHEDULEDDIR/* > $TMPFILE
grep -l ^To: $SCHEDULEDDIR/* > $TMPFILE
cat $TMPFILE | while read FNAME; do
schedule=`formail -zx Send: < ${FNAME}`
if [ "x$schedule" != "x" ]; then
cur_timestamp=`date +%s`
schedule_timestamp=`date +%s -d "$schedule"`
time_diff=$(($schedule_timestamp - $cur_timestamp))
if [ $time_diff -lt 0 ]; then
mv ${FNAME} $OUTGOINGDIR
fi
continue
fi
#
done
unlink $TMPFILE
fi
############################################
exit 0
|