summaryrefslogtreecommitdiffstats
path: root/network/t38modem/rc.t38modem
diff options
context:
space:
mode:
Diffstat (limited to 'network/t38modem/rc.t38modem')
-rw-r--r--network/t38modem/rc.t38modem152
1 files changed, 152 insertions, 0 deletions
diff --git a/network/t38modem/rc.t38modem b/network/t38modem/rc.t38modem
new file mode 100644
index 0000000000..158debc2ef
--- /dev/null
+++ b/network/t38modem/rc.t38modem
@@ -0,0 +1,152 @@
+#!/bin/sh
+
+#############################
+# READ T38MODEM CONFIG FILE #
+#############################
+
+# Get the configuration information from /etc/rc.d/rc.t38modem.conf:
+. /etc/rc.d/rc.t38modem.conf
+
+###########
+# LOGGING #
+###########
+
+# If possible, log events in /var/log/messages:
+if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then
+ LOGGER=/usr/bin/logger
+else # output to stdout/stderr:
+ LOGGER=/bin/cat
+fi
+
+MAXMODEMS=6
+
+# Function to return PID of modem instance:
+modem_pid() {
+ PID=$(ps -C t38modem -o pid,cmd | grep ${1} | grep -v grep | awk '{print $1}')
+ echo "$PID"
+}
+
+# Function to start modem interface:
+modem_up() {
+ i=0
+ while [ $i -lt $MAXMODEMS ]; do
+ if [ "${MODEMNAME[$i]}" = "${1}" ]; then
+ PID=$(modem_pid "${1}")
+ if [ -n "$PID" ]; then
+ echo "Modem "${1}" already up..."
+ else
+ echo "Starting t38modem on ${1}..."
+ # Build PTTY name
+ PTTY=${PTTY[$i]}
+ if [ -z "${PTTY}" ]; then
+ PTTY="+/dev/${MODEMNAME[$i]}"
+ fi
+ # Start t38modem
+ nohup \
+ /usr/bin/t38modem \
+ --no-h323 \
+ --sip-t38-udptl-redundancy ${T38_REDUNDANCY[$i]} \
+ --sip-listen udp\$*:${LISTEN_PORT[$i]} \
+ --sip-register ${SIP_ACCOUNT[$i]}@${SIP_SERVER[$i]},${SIP_PASSWORD[$i]} \
+ --ptty ${PTTY} \
+ --force-fax-mode \
+ --route "modem:.*=sip:<dn>@${SIP_SERVER[$i]}" \
+ --route "sip:.*=modem:<dn>" \
+ > /dev/null 2>&1 &
+ fi
+ break
+ fi
+ i=$(($i+1))
+ done
+}
+
+# Function to stop modem interface:
+modem_down() {
+ PID=$(modem_pid "${1}")
+ if [ -n "$PID" ]; then
+ echo "Stopping t38modem for modem ${1}..."
+ kill $PID
+ fi
+}
+
+# Function to report status on modem interface:
+modem_status() {
+ PID=$(modem_pid "${1}")
+ echo -n "Modem ${1}: "
+ if [ -n "$PID" ]; then
+ echo "up"
+ else
+ echo "down"
+ fi
+}
+
+# Function to bring modems up:
+start() {
+ for i in ${MODEMNAME[@]} ; do
+ modem_up $i
+ done
+}
+
+# Function to take modems down:
+stop() {
+ for i in ${MODEMNAME[@]} ; do
+ modem_down $i
+ done
+}
+
+# Function to query modem states:
+status() {
+ for i in ${MODEMNAME[@]} ; do
+ modem_status $i
+ done
+}
+
+############
+### MAIN ###
+############
+
+case "$1" in
+'start')
+ start
+ ;;
+'stop')
+ stop
+ ;;
+'restart')
+ stop
+ sleep 5
+ start
+ ;;
+'status')
+ status
+ ;;
+*_start)
+ MODEM=$(echo $1 | /bin/cut -d '_' -f 1)
+ modem_up $MODEM
+ ;;
+*_stop)
+ MODEM=$(echo $1 | /bin/cut -d '_' -f 1)
+ modem_down $MODEM
+ ;;
+*_restart)
+ MODEM=$(echo $1 | /bin/cut -d '_' -f 1)
+ modem_down $MODEM
+ sleep 5
+ modem_up $MODEM
+ ;;
+*_status)
+ MODEM=$(echo $1 | /bin/cut -d '_' -f 1)
+ modem_status $MODEM
+ ;;
+*_up)
+ MODEM=$(echo $1 | /bin/cut -d '_' -f 1)
+ modem_up $MODEM
+ ;;
+*_down)
+ MODEM=$(echo $1 | /bin/cut -d '_' -f 1)
+ modem_down $MODEM
+ ;;
+*)
+ echo "usage: $0 start|stop|restart|status"
+esac
+