#!/bin/sh

# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This script starts brltty in a minijail sandbox.
if [ $# -ne 0 ]; then
  echo "ERROR: $0 takes no arguments"
  exit 1
fi

BRLTTY_RUNDIR=/run/brltty
BRLAPI_SOCKETDIR="${BRLTTY_RUNDIR}"/BrlAPI
# The number (0) must be kept in sync with the Host api parameter in
# brltty.conf.
BRLAPI_SOCKETFILE="${BRLAPI_SOCKETDIR}/0"

log() {
  logger -t brltty_udev "$@"
}

# Kill any stale brltty processes that might be holding on to the
# BrlAPI socket.  We try hard, because failure to free up the socket will lock
# the braille user out from the machine!
kill_stale_brltty() {
  local SIGTERM_MAX_TRIES=5
  if fuser -s -k -TERM "${BRLAPI_SOCKETFILE}"; then
    log "Waiting for stale brltty process to terminate"
    local i=0
    while [ ${i} -lt ${SIGTERM_MAX_TRIES} ]; do
      sleep .1
      if ! fuser -s -k -TERM "${BRLAPI_SOCKETFILE}"; then
        return
      fi
      : $(( i += 1 ))
    done
    log "Sending SIGKILL to stale brltty process"
    fuser -s -k -KILL "${BRLAPI_SOCKET_FILE}"
  fi
}
kill_stale_brltty

# Ensure that the directories exist and have the right permissions.
# NOTE: Chrome is observing ${BRLAPI_SOCKETDIR} for changes.
# It is important to only remove world-readability *after* setting the
# group ownership so that the browser doesn't lose read access.
# This is a race that would cause chrome to stop observing the directory
# and therefore not get notified when a braille display is connected.
mkdir -p -m 0755 "${BRLTTY_RUNDIR}" "${BRLAPI_SOCKETDIR}"
chown -R brltty:brltty "${BRLTTY_RUNDIR}" "${BRLAPI_SOCKETDIR}"
chmod 750 "${BRLTTY_RUNDIR}" "${BRLAPI_SOCKETDIR}"

# Files created by the daemon shouldn't be accessible by users not in the
# brltty group.
umask 0007

log "Starting brltty, device: ${BRLTTY_BRAILLE_DEVICE}, " \
    "driver: ${BRLTTY_BRAILLE_DRIVER}"

# -d: device for accessing braille.
if [ -n "${ADDRESS}" ]; then
  set -- "$@" -d "bluetooth:${ADDRESS}"
fi

# Start brltty in the jail.
# The options used below are:
# - -q: No startup announcement of brltty's version on the braille display.
# - -E: Get some arguments (driver, device, etc) from the environment.
# - -n: makes Brltty run without forking (keeping this job started/stoppable).
exec /sbin/minijail0 -u brltty -g brltty -G -- /bin/brltty -q -E -n "$@"
