+_procd_send_signal() {
+ local service="$1"
+ local instance="$2"
+ local signal="$3"
+
+ json_init
+ json_add_string name "$service"
+ [ -n "$instance" -a "$instance" != "*" ] && json_add_string instance "$instance"
+ [ -n "$signal" ] && json_add_int signal "$signal"
+ _procd_ubus_call signal
+}
+
+procd_open_data() {
+ local name="$1"
+ json_set_namespace procd __procd_old_cb
+ json_add_object data
+}
+
+procd_close_data() {
+ json_close_object
+ json_set_namespace $__procd_old_cb
+}
+
+_procd_set_config_changed() {
+ local package="$1"
+
+ json_init
+ json_add_string type config.change
+ json_add_object data
+ json_add_string package "$package"
+ json_close_object
+
+ ubus call service event "$(json_dump)"
+}
+
+procd_add_mdns_service() {
+ local service proto port
+ service=$1; shift
+ proto=$1; shift
+ port=$1; shift
+ json_add_object "${service}_$port"
+ json_add_string "service" "_$service._$proto.local"
+ json_add_int port "$port"
+ [ -n "$1" ] && {
+ json_add_array txt
+ for txt in $@; do json_add_string "" $txt; done
+ json_select ..
+ }
+ json_select ..
+}
+
+procd_add_mdns() {
+ procd_open_data
+ json_add_object "mdns"
+ procd_add_mdns_service $@
+ json_close_object
+ procd_close_data
+}
+