| 1653 | } |
| 1654 | |
| 1655 | static void handle_rpc(cbm_http_conn_t *c, const cbm_http_req_t *req, cbm_mcp_server_t *mcp) { |
| 1656 | if (req->body_len == 0 || req->body_len > MAX_BODY_SIZE || !req->body) { |
| 1657 | cbm_http_replyf(c, 400, g_cors_json, |
| 1658 | "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32600," |
| 1659 | "\"message\":\"invalid request size\"},\"id\":null}"); |
| 1660 | return; |
| 1661 | } |
| 1662 | |
| 1663 | if (!rpc_is_allowed_for_ui(req->body, req->body_len)) { |
| 1664 | cbm_http_replyf(c, 403, g_cors_json, |
| 1665 | "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32601," |
| 1666 | "\"message\":\"UI RPC method is not allowed\"},\"id\":null}"); |
| 1667 | return; |
| 1668 | } |
| 1669 | |
| 1670 | /* req->body is NUL-terminated by the transport */ |
| 1671 | char *response = cbm_mcp_server_handle(mcp, req->body); |
| 1672 | |
| 1673 | if (response) { |
| 1674 | cbm_http_replyf(c, 200, g_cors_json, "%s", response); |
| 1675 | free(response); |
| 1676 | } else { |
| 1677 | cbm_http_replyf(c, 204, g_cors, "%s", ""); |
| 1678 | } |
| 1679 | } |
| 1680 | |
| 1681 | /* ── Request dispatch ─────────────────────────────────────────── */ |
| 1682 |
no test coverage detected