From a86e0a860d89b1a713a993c8ad90a11a05f7a90b Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Fri, 14 Aug 2020 19:29:35 +0300 Subject: [PATCH] [*] Broadcasting for GDB debugged --- modules/net/dap_chain_net.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 945ed237ba..b7291269e7 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -262,27 +262,32 @@ static void s_gbd_history_callback_notify (void * a_arg, const char a_op_code, c } dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg; if (PVT(l_net)->state == NET_STATE_ONLINE) { - dap_global_db_obj_t l_obj = {}; - dap_store_obj_t *l_obj_cur = dap_chain_global_db_obj_gr_get(a_key, NULL, a_group); - if (!l_obj_cur) { - log_it(L_ERROR, "Notified GDB event does not exist"); + char *l_group; + if (a_op_code == 'd') { + l_group = dap_strdup_printf("%s.del", a_group); + } else { + l_group = (char *)a_group; + } + dap_store_obj_t *l_obj = (dap_store_obj_t *)dap_chain_global_db_obj_get(a_key, l_group); + if (a_op_code == 'd') { + DAP_DELETE(l_group); + } + if (!l_obj) { + log_it(L_DEBUG, "Notified GDB event does not exist"); return; } - l_obj.id = l_obj_cur->id; - l_obj.key = l_obj_cur->key; - l_obj.value = l_obj_cur->value; - l_obj.value_len = l_obj_cur->value_len; - size_t l_item_size_out = 0; - uint8_t *l_item = dap_db_log_pack(&l_obj, &l_item_size_out); + l_obj->type = (uint8_t)a_op_code; + dap_store_obj_pkt_t *l_data_out = dap_store_packet_multiple(l_obj, l_obj->timestamp, 1); + dap_store_obj_free(l_obj, 1); dap_chain_t *l_chain = dap_chain_net_get_chain_by_name(l_net, "gdb"); - dap_chain_id_t l_chain_id = l_chain ? l_chain->id : (dap_chain_id_t ) {}; + dap_chain_id_t l_chain_id = l_chain ? l_chain->id : (dap_chain_id_t) {}; for (dap_list_t *l_tmp = PVT(l_net)->links; l_tmp; l_tmp = dap_list_next(l_tmp)) { dap_chain_node_client_t *l_node_client = (dap_chain_node_client_t *)l_tmp->data; dap_stream_ch_t *l_ch_chain = dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id()); dap_stream_ch_chain_pkt_write(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_GLOBAL_DB, l_net->pub.id, - l_chain_id, l_net->pub.cell_id, l_item, l_item_size_out); + l_chain_id, l_net->pub.cell_id, l_data_out, sizeof(dap_store_obj_pkt_t) + l_data_out->data_size); } - DAP_DELETE(l_item); + DAP_DELETE(l_data_out); } if (s_srv_callback_notify) { s_srv_callback_notify(a_arg, a_op_code, a_prefix, a_group, a_key, a_value, a_value_len); -- GitLab