freeswitch: use return in init script
[feed/telephony.git] / net / freeswitch / files / freeswitch.init
index 4476b47bd963f9ff14f950100eb5265d60ed3175..f2b0c9c1343d9ae8af80e90a960ceb820836a27d 100644 (file)
 #!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
-START=90 
+# Copyright (C) 2017 - 2018 OpenWrt.org
 
-DEFAULT=/etc/default/freeswitch
-OPTIONS=""
+START=90
+STOP=10
 
-boot() {
-       # Do nothing on boot
-       exit 0
-}
+USE_PROCD=1
 
-start() {
-       [ -f $DEFAULT ] && . $DEFAULT
-       mkdir -p $FS_DIR_DB
-       mkdir -p $FS_DIR_LOG
-       mkdir -p $FS_DIR_RECORDINGS
-       mkdir -p $FS_DIR_VM_STORAGE
-       ulimit -s 240
-       $FS_DIR/usr/bin/freeswitch $OPTIONS -nc
-}
+#PROCD_DEBUG=1
 
-stop() {
-       [ -f $DEFAULT ] && . $DEFAULT
-       $FS_DIR/usr/bin/freeswitch $OPTIONS -stop
-}
+NAME=freeswitch
+COMMAND=/usr/bin/$NAME
 
-restart() {
-       # stopping freeswitch is non-blocking, so we wait until freeswitch's 
-       # event socket is down, and then wait an additional ten seconds so that 
-       # freeswitch should be completely shutdown before we start it again
-       local retval
-       stop
-       fs_cli -x status >/dev/null 2>&1
-       retval=$?
-       while [ $retval -eq 0 ]; do sleep 1; fs_cli -x status >/dev/null 2>&1; retval=$?; done
-       sleep 10
-       start
-}
+LOGGER="/usr/bin/logger -s -t $NAME"
+LOG_ERR="$LOGGER -p daemon.err --"
+LOG_WARN="$LOGGER -p daemon.warn --"
+LOG_INFO="$LOGGER -p daemon.info --"
+
+start_service() {
+  dir_etc=/etc/$NAME
+  dir_localstate=/var/lib/$NAME
+  dir_run=/var/run/$NAME
+
+  config_load $NAME
+
+  config_get_bool enabled general enabled 0
+  if [ $enabled -eq 0 ]; then
+    $LOG_ERR service not enabled in /etc/config/$NAME
+    return 1
+  fi
 
+  config_get_bool log_stderr general log_stderr 1
+  config_get_bool log_stdout general log_stdout 1
+
+  config_get dir_cache      directories cache      /tmp/$NAME/cache
+  config_get dir_db         directories db         /tmp/$NAME/db
+  config_get dir_log        directories log        /tmp/$NAME/log
+  config_get dir_recordings directories recordings /tmp/$NAME/recordings
+  config_get dir_storage    directories storage    /tmp/$NAME/storage
+  config_get dir_temp       directories temp       /tmp/$NAME/temp
+
+  config_get options general options
+
+  config_get term_timeout general term_timeout default
+  if [ default = "$term_timeout" ]; then
+    $LOG_INFO using procd\'s default term_timeout
+  elif ! [ 0 -lt "$term_timeout" ] 2>/dev/null; then
+    $LOG_ERR invalid term_timeout in /etc/config/$NAME
+    return 1
+  fi
+
+  for i in "$dir_localstate" "$dir_run"; do
+    if ! [ -e "$i" ]; then
+      mkdir -m 0750 -p "$i"
+      [ -d "$i" ] && chown $NAME:$NAME "$i"
+    fi
+  done
+
+  command -v su >/dev/null
+  ret=$?
+  if [ 0 != "$ret" ]; then
+    $LOG_WARN utility \"su\" not available
+    $LOG_WARN will not attempt to create directories
+  else
+    for i in "$dir_cache" \
+             "$dir_db" \
+             "$dir_log" \
+             "$dir_recordings" \
+             "$dir_storage" \
+             "$dir_temp";
+    do
+      if ! [ -e "$i" ]; then
+        su -s /bin/sh -c "mkdir -m 0750 -p \"$i\"" $NAME
+      fi
+    done
+  fi
+
+  procd_open_instance
+  # starting with full path seems cleaner judging by 'ps' output
+  procd_set_param command $COMMAND
+  # need to specify all or none of -conf, -log, and -db
+  procd_append_param command \
+    -cache "$dir_cache" \
+    -conf "$dir_etc" \
+    -db "$dir_db" \
+    -log "$dir_log" \
+    -recordings "$dir_recordings" \
+    -run "$dir_run" \
+    -storage "$dir_storage" \
+    -temp "$dir_temp" \
+    -u "$NAME" \
+    $options \
+    -c
+  # forward stderr to logd
+  procd_set_param stderr $log_stderr
+  # same for stdout
+  procd_set_param stdout $log_stdout
+  if ! [ default = "$term_timeout" ]; then
+    procd_set_param term_timeout "$term_timeout"
+  fi
+  procd_close_instance
+}