| 667 | } |
| 668 | |
| 669 | static void plugin_response_handle(struct plugin *plugin, |
| 670 | const char *buffer, |
| 671 | const jsmntok_t *toks, |
| 672 | const jsmntok_t *idtok) |
| 673 | { |
| 674 | struct jsonrpc_request *request; |
| 675 | const tal_t *ctx; |
| 676 | |
| 677 | request = strmap_getn(&plugin->pending_requests, |
| 678 | json_tok_full(buffer, idtok), |
| 679 | json_tok_full_len(idtok)); |
| 680 | /* Can happen if request was freed before plugin responded */ |
| 681 | if (!request) { |
| 682 | return; |
| 683 | } |
| 684 | |
| 685 | |
| 686 | /* Request callback often frees request: if not, we do. */ |
| 687 | ctx = tal(tmpctx, char); |
| 688 | tal_steal(ctx, request); |
| 689 | /* Don't keep track of this request; we will terminate it */ |
| 690 | tal_del_destructor2(request, destroy_request, plugin); |
| 691 | destroy_request(request, plugin); |
| 692 | request->response_cb(buffer, toks, idtok, request->response_cb_arg); |
| 693 | tal_free(ctx); |
| 694 | } |
| 695 | |
| 696 | /* Try to parse complete messages from the plugin's buffer. */ |
| 697 | static struct io_plan *plugin_read_json(struct io_conn *conn, |
no test coverage detected