+ if(sf.signals.front()->get_message()->is_fd())
+ {
+ AFB_DEBUG("CANFD_MAX_DLEN");
+ message->set_flags(CAN_PROTOCOL_WITH_FD_FRAME);
+ message->set_maxdlen(CANFD_MAX_DLEN);
+ }
+ else
+ {
+ AFB_DEBUG("CAN_MAX_DLEN");
+ message->set_maxdlen(CAN_MAX_DLEN);
+ }
+
+ if(sf.signals.front()->get_message()->is_isotp())
+ {
+ flags = ISOTP_PROTOCOL;
+ message->set_maxdlen(MAX_ISOTP_FRAMES * message->get_maxdlen());
+ }
+ }
+
+#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() &&
+ json_object_get_type(can_data) == json_type_array)
+ {
+ 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;