|
|
@ -1,53 +1,91 @@ |
|
|
|
#!/bin/sh /etc/rc.common |
|
|
|
# Copyright (C) 2013-2014 OpenWrt.org |
|
|
|
|
|
|
|
START=50 |
|
|
|
USE_PROCD=1 |
|
|
|
NAME=shairport |
|
|
|
START=94 |
|
|
|
|
|
|
|
config_shairport() { |
|
|
|
SERVICE_DAEMONIZE=1 |
|
|
|
SERVICE_WRITE_PID=1 |
|
|
|
|
|
|
|
AP_PIDDIR=/var/run |
|
|
|
AP_BIN=/usr/bin/shairport |
|
|
|
|
|
|
|
append_arg() { |
|
|
|
local cfg="$1" |
|
|
|
local var="$2" |
|
|
|
local opt="$3" |
|
|
|
local def="$4" |
|
|
|
local val |
|
|
|
|
|
|
|
config_get val "$cfg" "$var" |
|
|
|
[ -n "$val" -o -n "$def" ] && append AP_ARGS "$opt ${val:-$def}" |
|
|
|
} |
|
|
|
|
|
|
|
append_bool() { |
|
|
|
local cfg="$1" |
|
|
|
local var="$2" |
|
|
|
local opt="$3" |
|
|
|
local def="$4" |
|
|
|
local val |
|
|
|
|
|
|
|
config_get_bool val "$cfg" "$var" "$def" |
|
|
|
[ "$val" = 1 ] && append AP_ARGS "$opt" |
|
|
|
} |
|
|
|
|
|
|
|
start_instance() { |
|
|
|
AP_ARGS="" |
|
|
|
local cfg="$1" |
|
|
|
local ao dev |
|
|
|
|
|
|
|
append_arg "$cfg" bname "-a" "AirPort" |
|
|
|
append_arg "$cfg" log "-l" |
|
|
|
append_arg "$cfg" initbuf "-b" "256" |
|
|
|
append_arg "$cfg" port "-p" "5002" |
|
|
|
append_arg "$cfg" password "-k" |
|
|
|
append_arg "$cfg" mdns "-m" |
|
|
|
|
|
|
|
append_arg "$cfg" cmd_start "-B" |
|
|
|
append_arg "$cfg" cmd_stop "-E" |
|
|
|
append_bool "$cfg" cmd_wait "-w" |
|
|
|
|
|
|
|
append_arg "$cfg" audio_output "-o" |
|
|
|
|
|
|
|
config_get ao "$cfg" audio_output "" |
|
|
|
if [ "$ao" = "alsa" ]; then |
|
|
|
config_get dev "$cfg" output_device "" |
|
|
|
if [ -n "$dev" ]; then |
|
|
|
append AP_ARGS "--" |
|
|
|
append_arg "$cfg" output_device "-d" |
|
|
|
append_arg "$cfg" mixer_device "-m" |
|
|
|
append_arg "$cfg" mixer_type "-t" |
|
|
|
append_arg "$cfg" mixer-control "-c" |
|
|
|
append_arg "$cfg" mixer-index "-i" |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
SERVICE_PID_FILE=${AP_PIDDIR}/${NAME}_${cfg}.pid |
|
|
|
service_start $AP_BIN $AP_ARGS |
|
|
|
|
|
|
|
# Check if daemon is running, if not then |
|
|
|
# re-execute in foreground to display error. |
|
|
|
sleep 1 && service_check $AP_BIN || \ |
|
|
|
$AP_BIN $AP_ARGS |
|
|
|
} |
|
|
|
|
|
|
|
stop_instance() |
|
|
|
{ |
|
|
|
local cfg="$1" |
|
|
|
|
|
|
|
local cfg_name |
|
|
|
local cfg_password |
|
|
|
local cfg_port |
|
|
|
local cfg_buffer |
|
|
|
local cfg_log |
|
|
|
local cfg_cmd_start |
|
|
|
local cfg_cmd_stop |
|
|
|
local cfg_cmd_wait |
|
|
|
local cfg_audio_output |
|
|
|
local cfg_mdns |
|
|
|
|
|
|
|
config_get cfg_name $cfg 'name' 'AirPort' |
|
|
|
config_get cfg_password $cfg 'password' '' |
|
|
|
config_get cfg_port $cfg 'port' '5002' |
|
|
|
config_get cfg_buffer $cfg 'buffer' '256' |
|
|
|
config_get cfg_log $cfg 'log' '/var/log/shairport' |
|
|
|
config_get cfg_cmd_start $cfg 'cmd_start' '' |
|
|
|
config_get cfg_cmd_stop $cfg 'cmd_stop' '' |
|
|
|
config_get_bool cfg_cmd_wait $cfg 'cmd_wait' '0' |
|
|
|
config_get cfg_audio_output $cfg 'audio_output' '' |
|
|
|
config_get cfg_mdns $cfg 'mdns' '' |
|
|
|
|
|
|
|
procd_open_instance |
|
|
|
|
|
|
|
procd_set_param command /usr/sbin/shairport |
|
|
|
procd_append_param command -a "$cfg_name" |
|
|
|
[ ! -z "$cfg_password" ] && procd_append_param command -k "$cfg_password" |
|
|
|
procd_append_param command -p $cfg_port |
|
|
|
procd_append_param command -b $cfg_buffer |
|
|
|
procd_append_param command -l $cfg_log |
|
|
|
[ ! -z "$cfg_cmd_start" ] && procd_append_param command -B "$cfg_cmd_start" |
|
|
|
[ ! -z "$cfg_cmd_stop" ] && procd_append_param command -E "$cfg_cmd_stop" |
|
|
|
[ "$cfg_cmd_wait" -eq 1 ] && procd_append_param command -w |
|
|
|
[ ! -z "$cfg_audio_output" ] && procd_append_param command -o "$cfg_audio_output" |
|
|
|
[ ! -z "$cfg_mdns" ] && procd_append_param command -m "$cfg_mdns" |
|
|
|
|
|
|
|
procd_set_param respawn |
|
|
|
procd_close_instance |
|
|
|
SERVICE_PID_FILE=${AP_PIDDIR}/${NAME}_${cfg}.pid |
|
|
|
SERVICE_SIG_STOP="INT" |
|
|
|
service_stop $AP_BIN |
|
|
|
} |
|
|
|
|
|
|
|
start() { |
|
|
|
config_load shairport |
|
|
|
config_foreach start_instance shairport |
|
|
|
} |
|
|
|
|
|
|
|
start_service() { |
|
|
|
stop() { |
|
|
|
config_load shairport |
|
|
|
config_foreach config_shairport shairport |
|
|
|
config_foreach stop_instance shairport |
|
|
|
} |