json_t *w_json_buffer_next(w_jbuffer_t *jr, w_stm_t stm, json_error_t *jerr) { memset(jerr, 0, sizeof(*jerr)); if (!read_and_detect_pdu(jr, stm, jerr)) { return NULL; } return read_pdu_into_json(jr, stm, jerr); }
bool w_json_buffer_passthru(w_jbuffer_t *jr, enum w_pdu_type output_pdu, w_jbuffer_t *output_pdu_buf, w_stm_t stm) { json_t *j; json_error_t jerr; bool res; w_stm_set_nonblock(stm, false); if (!read_and_detect_pdu(jr, stm, &jerr)) { w_log(W_LOG_ERR, "failed to identify PDU: %s\n", jerr.text); return false; } if (jr->pdu_type == output_pdu) { // We can stream it through if (!stream_pdu(jr, stm, &jerr)) { w_log(W_LOG_ERR, "stream_pdu: %s\n", jerr.text); return false; } return true; } j = read_pdu_into_json(jr, stm, &jerr); if (!j) { w_log(W_LOG_ERR, "failed to parse response: %s\n", jerr.text); return false; } w_json_buffer_reset(output_pdu_buf); res = w_ser_write_pdu(output_pdu, output_pdu_buf, w_stm_stdout(), j); json_decref(j); return res; }
bool w_json_buffer_passthru(w_jbuffer_t *jr, enum w_pdu_type output_pdu, int fd) { json_t *j; json_error_t jerr; bool res; if (!read_and_detect_pdu(jr, fd, &jerr)) { w_log(W_LOG_ERR, "failed to identify PDU: %s\n", jerr.text); return false; } if (jr->pdu_type == output_pdu) { // We can stream it through if (!stream_pdu(jr, fd, &jerr)) { w_log(W_LOG_ERR, "stream_pdu: %s\n", jerr.text); return false; } return true; } j = read_pdu_into_json(jr, fd, &jerr); if (!j) { w_log(W_LOG_ERR, "failed to parse response: %s\n", jerr.text); return false; } w_json_buffer_reset(jr); res = w_ser_write_pdu(output_pdu, jr, STDOUT_FILENO, j); json_decref(j); return res; }