123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #!/system/bin/sh
- # Set the main directory for things to run (if changed, also change in cjdctl and 99cjdroute)
- CJDPATH="/sdcard/cjdns"
- # Function to output status messages and log if configured to do so
- logmessage() {
- if [ -n "$CJDLOG" ]; then
- echo "`date` - $1" >> "$CJDPATH"/cjdaemon.log
- fi
- }
- # Create the daemon folder if it doesn't exist
- if [ ! -e "$CJDPATH" ]; then
- install -d "$CJDPATH" \
- || exit 1
- fi
- # Fail if the daemon is already running
- if [ -f "$CJDPATH"/.cjdaemon.pid ]; then
- if [ -d /proc/`cat "$CJDPATH"/.cjdaemon.pid` ]; then
- logmessage "Error! Daemon already running"
- exit 1
- fi
- fi
- # Set a pid file for the daemon so we know what to kill if it starts causing issues
- echo "$$" > "$CJDPATH"/.cjdaemon.pid
- # Create cjdaemon.conf if it's missing
- if [ ! -f "$CJDPATH"/cjdaemon.conf ]; then
- touch "$CJDPATH"/cjdaemon.conf \
- || exit 1
- echo -e 'CJDCFG="cjdroute.conf"\nCJDLOG=0' \
- > "$CJDPATH"/cjdaemon.conf
- fi
- # Source cjdaemon.conf to load user settings
- source "$CJDPATH"/cjdaemon.conf
- # Set $CJDCFG to the default if it wasn't set by cjdaemon.conf
- if [ -z "$CJDCFG" ]; then
- CJDCFG="cjdroute.conf"
- fi
- # Create the log if it doesn't exist, and if it can't be created disable logging
- if [ -n "$CJDLOG" ]; then
- if [ ! -f "$CJDPATH"/cjdaemon.log ]; then
- touch "$CJDPATH"/cjdaemon.log \
- || unset CJDLOG
- fi
- fi
- # Function used to start cjdroute
- cjdstart() {
- # Exit if the lock file is missing
- if [ ! -f "$CJDPATH"/.lock ]; then
- exit 0
- fi
- # Start cjdroute and output/log results
- if [ -f "${CJDPATH}/${CJDCFG}" ]; then
- if [ `pgrep cjdroute | wc -l` -eq 0 ]; then
- LOGMSG="Running: cjdroute < ${CJDPATH}/${CJDCFG}..."
- cjdroute < "${CJDPATH}/${CJDCFG}" &> /dev/null 2>&1
- sleep 1
- if [ `pgrep cjdroute | wc -l` -gt 0 ]; then
- LOGMSG="${LOGMSG} Success!"
- else
- LOGMSG="${LOGMSG} Error! Failed to start cjdroute"
- fi
- else
- LOGMSG="${LOGMSG} Error! Failed to start cjdroute, already running"
- fi
- else
- LOGMSG="${LOGMSG} Error! Failed to start cjdroute, config missing @ ${CJDPATH}/${CJDCFG}"
- fi
- logmessage "$LOGMSG"
- unset LOGMSG
- }
- # Function used to stop cjdroute
- cjdstop() {
- # Exit if the lock file is missing
- if [ ! -f "$CJDPATH"/.lock ]; then
- exit 0
- fi
- # Kill cjdroute and output/log results
- if [ `pgrep cjdroute | wc -l` -gt 0 ]; then
- LOGMSG="Running: killall cjdroute..."
- killall cjdroute
- sleep 1
- if [ `pgrep cjdroute | wc -l` -eq 0 ]; then
- LOGMSG="${LOGMSG} Success!"
- else
- LOGMSG="${LOGMSG} Error! Failed to stop cjdroute"
- fi
- else
- LOGMSG="${LOGMSG} Error! Failed to stop cjdroute, already stopped"
- fi
- logmessage "$LOGMSG"
- unset LOGMSG
- }
- # Run cjdstart when the phone wakes and cjdstop when it sleeps until the phone powers down
- while :; do
- # Wait until the phone is awake, then start cjdroute
- cat /sys/power/wait_for_fb_wake > /dev/null
- cjdstart
- sleep 1
- # Wait until the phone sleeps, then stop cjdns
- cat /sys/power/wait_for_fb_sleep > /dev/null
- cjdstop
- done
|