- /* retrieve signals to subscribe */
- args = afb_req_json(request);
- if (args == NULL || !json_object_object_get_ex(args, "event", &a))
- {
- ret.push_back("*");
- }
- else if (json_object_get_type(a) != json_type_array)
- {
- ret.push_back(json_object_get_string(a));
- }
- else
+ std::lock_guard<std::mutex> subscribed_signals_lock(sm.get_subscribed_signals_mutex());
+ std::map<int, std::shared_ptr<low_can_subscription_t> >& s = sm.get_subscribed_signals();
+
+ rets += subscribe_unsubscribe_diagnostic_messages(request, subscribe, signals.diagnostic_messages, event_filter, s);
+ rets += subscribe_unsubscribe_can_signals(request, subscribe, signals.can_signals, event_filter, s);
+
+ return rets;
+}
+
+static int one_subscribe_unsubscribe(struct afb_req request, bool subscribe, const std::string& tag, json_object* args)
+{
+ int ret = 0;
+ struct event_filter_t event_filter;
+ struct json_object *filter, *obj;
+ struct utils::signals_found sf;
+
+ // computes the filter
+ if (json_object_object_get_ex(args, "filter", &filter))