+
+#ifdef USE_FEATURE_J1939
+ if(flags&J1939_PROTOCOL)
+ message->set_maxdlen(J1939_MAX_DLEN);
+#endif
+
+ if(message->get_length() > 0 && message->get_length() <= message->get_maxdlen())
+ {
+ std::vector<uint8_t> data;
+ for (int i = 0 ; i < message->get_length() ; i++)
+ {
+ struct json_object *one_can_data = json_object_array_get_idx(can_data, i);
+ data.push_back((json_object_is_type(one_can_data, json_type_int)) ?
+ (uint8_t)json_object_get_int(one_can_data) : 0);
+ }
+ message->set_data(data);
+ }
+ else
+ {
+ if(flags&CAN_PROTOCOL)
+ afb_req_fail(request, "Invalid", "Frame BCM");
+ else if(flags&J1939_PROTOCOL)
+ afb_req_fail(request, "Invalid", "Frame J1939");
+ else if(flags&ISOTP_PROTOCOL)
+ afb_req_fail(request, "Invalid", "Frame ISOTP");
+ else
+ afb_req_fail(request, "Invalid", "Frame");
+
+ return;
+ }
+
+ if(! send_message(message, application_t::instance().get_can_bus_manager().get_can_device_name(bus_name), flags, event_filter, sf.signals.front()))
+ afb_req_success(request, nullptr, "Message correctly sent");
+ else
+ afb_req_fail(request, "Error", "sending the message. See the log for more details.");