#!/bin/sh

ROOTER=/usr/lib/rooter

log() {
	logger -t "sms process" "$@"
}

log "SMS Supported"

CURRMODEM=$1
COMMPORT="/dev/ttyUSB"$(uci get modem.modem$CURRMODEM.commport)

LOCKDIR="/tmp/smslock$CURRMODEM"
PIDFILE="${LOCKDIR}/PID"
rm -rf "${LOCKDIR}"

ATCMDD="AT+CMGF=0"
OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
sleep 1
ATCMDD="AT+CPMS=\"SM\",\"SM\",\"SM\""
OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
sleep 1
uci set modem.modem$CURRMODEM.smsnum=999
uci commit modem
ATCMDD="AT+CPMS=\"ME\""
OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
MESC=$(echo "$OX" | grep -o "+CPMS:.*" | awk -F, '{print $1}' | grep -o "[0-9]\{1,3\}")
METC=$(echo "$OX" | grep -o "+CPMS:.*" | awk -F, '{print $2}' | grep -o "[0-9]\{1,3\}")
MESLOT="0"
if [ "x$MESC" = "x" ]; then
	MESC="0"
fi
if [ "x$METC" = "x" ]; then
	METC="0"
	MESC="0"
fi
uci set modem.sms.slots=$MESC
uci commit modem
sleep 1

rm -f /tmp/smsresult$CURRMODEM".at"
> /tmp/smsslots$CURRMODEM

while true; do
	SLEEP="20"
	while true; do
		if mkdir "${LOCKDIR}" &>/dev/null; then
			echo "$$" > "${PIDFILE}"
			ATCMDD="AT+CPMS=\"SM\""
			SX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
			M2=$(echo "$SX" | sed -e "s/+CPMS:/+CPMS: /")
			SX=$(echo "$M2" | sed -e "s/  / /g")
			USED=$(echo "$SX" | awk -F[,\ ] '/^\+CPMS:/ {print $2}')
			MAXED=$(echo "$SX" | awk -F[,\ ] '/^\+CPMS:/ {print $3}')
			if [ $USED -eq $(uci get modem.modem$CURRMODEM.smsnum) ]; then
				if [ $(uci get modem.sms.menable) -eq 1 ]; then
					RSRV=2
				else
					RSRV=99999
				fi
				if [ $MESC -gt 0 ] && [ $(($USED + $RSRV)) -lt $MAXED ] && [ $MESLOT -lt $METC ]; then
					ATCMDD="AT+CPMS=\"ME\";+CMGR=$MESLOT;+CPMS=\"SM\""
					OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
					PDU=$(echo "$OX" | grep -o "[0-9A-F]\{30,\}")
					PDUL=$(echo "$OX" | grep -o "+CMGR:.*" | grep -o ",[0-9]\{1,\}" | \
						grep -o "[0-9]\{1,3\}")
					if [ ${#PDU} -gt 0 ] && [ ${#PDUL} -gt 0 ]; then
						if [ ${#PDUL} -eq 2 ]; then
							PDUL="0$PDUL"
						fi
						ATCMDD="$PDUL,SM,1,$PDU"
						OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "smswrite.gcom" \
							"$CURRMODEM" "$ATCMDD")
						MREF=$(echo "$OX" | grep -o "[0-9]\{1,3\}")
						if [ ${#MREF} -gt 0 ]; then
							echo "$MREF" >> /tmp/smsslots$CURRMODEM
							ATCMDD="AT+CPMS=\"ME\";+CMGD=$MESLOT;+CPMS=\"SM\""
							OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" \
								"$CURRMODEM" "$ATCMDD")
						fi
						MESC=$(($MESC - 1))
						uci set modem.sms.slots=$MESC
						uci commit modem
						SLEEP="5"
					fi
					MESLOT=$(($MESLOT + 1))
				fi
			else
				log "Reread SMS Messages on Modem $CURRMODEM"
				echo "$SX" > /tmp/smstemp$CURRMODEM
				ATCMDD="AT+CMGL=4"
				SX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
				SX=$(echo "$SX" | sed -e "s/+CMGL:/+CMGL: /g")
				echo "$SX" >> /tmp/smstemp$CURRMODEM
				uci set modem.modem$CURRMODEM.smsnum=$USED
				uci commit modem
				mv /tmp/smstemp$CURRMODEM /tmp/smsresult$CURRMODEM.at
				lua /usr/lib/sms/smsread.lua $CURRMODEM
				SLEEP="5"
			fi
			break
		else
			OTHERPID="$(cat "${PIDFILE}")"
			if [ $? = 0 ]; then
				if ! kill -0 $OTHERPID &>/dev/null; then
 					rm -rf "${LOCKDIR}"
				fi
			fi
			sleep 1
		fi
	done
	rm -rf "${LOCKDIR}"
	n=1
	until [ $n -ge $SLEEP ]
	do
		sleep 1
		if [ -e /tmp/smswakeup$CURRMODEM ]; then
			rm /tmp/smswakeup$CURRMODEM
			n=$(( $n + $SLEEP ))
		else
			n=$(( $n + 1 ))
		fi
	done
done

