blob: 1a03d9795733362603f4bd53384d83f389143c7c (
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
134
|
#!/bin/sh
# Converts a uci config file into an appropriate mosquitto.conf snippet
# expected to be used in an init file to generate a config file to run from
# Karl Palsson <karlp@remake.is> 2012.
# Considered to be released into the public domain
[ -f $IPKG_INSTROOT/lib/functions.sh ] && . $IPKG_INSTROOT/lib/functions.sh
TCONF=/tmp/mosquitto.generated.$$.conf
while getopts "f:" o; do
case $o in
f)
TCONF=$OPTARG
;;
esac
done
if [ -e $TCONF ]; then
echo "Odd, same temporary generated config file already existed: $TCONF"
exit 1
fi
echo "Generating mosquitto config file in $TCONF"
NOW=$(date)
echo "# mosquitto.conf file generated from UCI config." >>$TCONF
echo "# Config snippet generated by $0 on $NOW" >>$TCONF
echo "#" >> $TCONF
# Usage: append_if cfg uci_name output_name
# add a config line of the form "output_name <value>"
# if the "uci_name" was found.
# output_name defaults to uci_name if not specified.
append_if() {
local cfg="$1"
local uci_name="$2"
local out_name="$3"
if [ -z "$out_name" ]; then
out_name=$uci_name
fi
config_get val $cfg $uci_name
if [ -n "$val" ]; then
echo "$out_name $val" >> $TCONF
fi
}
# mosquitto uses true/false, uci uses 1/0
# note that this is not shell truthy, but equality with 1!
append_bool() {
if [ $2 -eq 1 ]; then
echo "$1 true" >> $TCONF
else
echo "$1 false" >> $TCONF
fi
}
# as per append_if, but gets the value as a uci bool, not raw
append_optional_bool() {
local cfg="$1"
local uci_name="$2"
local out_name="$3"
config_get val $cfg $uci_name
if [ -n "$val" ]; then
config_get_bool real $cfg $uci_name
append_bool $out_name $real
fi
}
mosq_general() {
config_get destinations "$1" log_dest
for dest in $destinations; do
echo "log_dest $dest" >> $TCONF
done
config_get_bool no_remote "$1" no_remote_access 0
if [ "$no_remote" -eq 1 ]; then
echo "bind_address 127.0.0.1" >> $TCONF
fi
config_get port "$1" port 1883
echo "port $port" >> $TCONF
append_if "$1" protocol
append_if "$1" max_inflight_messages
append_if "$1" max_queued_messages
}
add_listener() {
echo "" >> $TCONF
config_get port "$1" port
if [ -z "$port" ]; then
echo "Ignoring listener section without port"
return
fi
config_get_bool no_remote "$1" no_remote_access 0
if [ "$no_remote" -eq 1 ]; then
echo "listener $port 127.0.0.1" >> $TCONF
else
echo "listener $port" >> $TCONF
fi
append_if "$1" protocol
}
add_topic() {
echo "topic $1" >> $TCONF
}
add_bridge() {
config_get conn "$1" connection
config_get addr "$1" address
if [ -z "$conn" -o -z "$addr" ]; then
echo "Ignoring bridge section, misisng connection/address"
return
fi
echo "" >> $TCONF
echo "# Bridge connection from UCI section" >> $TCONF
append_if "$1" connection
append_if "$1" address
config_list_foreach "$1" topic add_topic
append_optional_bool "$1" cleansession cleansession
append_optional_bool "$1" try_private try_private
append_if "$1" clientid
append_if "$1" identity bridge_identity
append_if "$1" psk bridge_psk
append_if "$1" tls_version bridge_tls_version
}
config_load "mosquitto"
config_foreach mosq_general "mosquitto"
config_foreach add_listener "listener"
config_foreach add_bridge "bridge"
|