summaryrefslogtreecommitdiffstats
path: root/net/rtpproxy/files/rtpproxy.init
blob: 4c94ba255be0cdcf0a54b78ccf8cd9b8d39b8849 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/sh /etc/rc.common
# Copyright (C) 2014 CESNET, z.s.p.o
# Copyright (C) 2018 OpenWrt.org

START=90

NAME=rtpproxy
COMMAND="/usr/bin/$NAME"

USE_PROCD=1

#PROCD_DEBUG=1

LOGGER="/usr/bin/logger -t $NAME"
LOG_ERR="$LOGGER -p user.err -s"

run_instance() {
	procd_open_instance
	procd_set_param command $COMMAND
	procd_append_param command \
		$1 \
		-p "/var/run/$NAME-$2.pid" \
		-f
	# forward stderr to logd
	procd_set_param stderr 1
	procd_close_instance

	$LOGGER instance $2 has started
}

check_ip() {
	local tmp_addr

	if [ "$1" = "ipaddr" ]; then
		network_get_ipaddr tmp_addr "$2" || tmp_addr="$2"
	else
		network_get_ipaddr6 tmp_addr "$2" || tmp_addr="$2"
	fi

	echo "$tmp_addr"
}

check_ipaddr() {
	local value="$1"
	local type="$2"
	local param="$3"
	local one two

	[ -z "$value" ] && {
		$LOG_ERR empty $type entry
		return 1
	}

	# Bail if more than 1 slash.
	[ $(echo "$value" | awk -F "/" '{print NF-1}') -gt 1 ] && {
		$LOG_ERR init script does not understand $type entry \""$value"\"
		return 1
	}

	IFS="/" read one two << EOF
$value
EOF

	one="$(check_ip "$type" "$one")"
	if [ -n "$two" ]; then
		two="$(check_ip "$type" "$two")"
		rtpproxy_options=$rtpproxy_options" $param $one/$two"
	else
		rtpproxy_options=$rtpproxy_options" $param $one"
	fi
}

check_param() {
	local param="$1"
	local value="$2"
	local default_value="$3"

	if [ "$value" != "" ]; then
		rtpproxy_options=$rtpproxy_options" $param $value"
	else
		if [ "$default_value" != "" ]; then
			rtpproxy_options=$rtpproxy_options" $param $default_value"
		fi
	fi
}

check_special_param() {
	local param="$1"

	if [ "$param" != "" ]; then
		rtpproxy_options=$rtpproxy_options" $param"
	fi
}

handle_instance() {
	local site="$1"
	local socket opts ipaddr ip6addr rtpproxy_options log_level

	config_get socket	"$site" socket
	config_get opts		"$site" opts
	config_get ipaddr	"$site" ipaddr
	config_get ip6addr	"$site" ip6addr
	config_get user		"$site" user
	config_get log_level	"$site" log_level

	check_param "-s" "$socket"
	check_param "-u" "$user"	"nobody"
	check_param "-d" "$log_level"	"DBUG"

	check_special_param "$opts"

	[ -n "$ipaddr" ]	&& check_ipaddr "$ipaddr"	ipaddr	'-l'
	[ -n "$ip6addr" ]	&& check_ipaddr "$ip6addr"	ip6addr	'-6'

	run_instance "$rtpproxy_options" "$site"
}

start_service() {
	local enabled

	config_load $NAME

	config_get_bool enabled global enabled 0

	if [ "$enabled" -eq 1 ]; then
		. /lib/functions/network.sh
		config_foreach handle_instance instance
	else
		$LOG_ERR service not enabled
		$LOG_ERR edit /etc/config/$NAME
	fi
}