|
|
|
|
@ -24,6 +24,7 @@
|
|
|
|
|
#include "../routing_layer/topo_group.h" |
|
|
|
|
#include "../routing_layer/topo_node_sqlite.h" |
|
|
|
|
#include "../chat/chat_event.h" |
|
|
|
|
#include "../stream/stream.h" |
|
|
|
|
#include "radio.h" |
|
|
|
|
#include "radio_proto.h" |
|
|
|
|
|
|
|
|
|
@ -492,6 +493,15 @@ int radio_member_muted(struct UTUN_INSTANCE* inst, uint64_t group_id, uint64_t n
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int radio_member_silenced(struct UTUN_INSTANCE* inst, uint64_t group_id, uint64_t node_id) { |
|
|
|
|
return radio_member_muted(inst, group_id, node_id) || stream_radio_muted(inst, group_id, node_id); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void radio_refresh_member_mute(struct UTUN_INSTANCE* inst, uint64_t group_id, uint64_t node_id) { |
|
|
|
|
struct radio_instance* ri = radio_inst(inst); |
|
|
|
|
if (ri && ri->mute_fn) ri->mute_fn(inst, group_id, node_id, radio_member_silenced(inst, group_id, node_id), ri->mute_arg); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void radio_forget_member_mute(struct UTUN_INSTANCE* inst, uint64_t group_id, uint64_t node_id) { |
|
|
|
|
if (!inst || !inst->topo_groups) return; |
|
|
|
|
struct radio_ctx* ctx = radio_of(topo_groups_find(inst->topo_groups, group_id)); |
|
|
|
|
@ -535,8 +545,7 @@ int radio_set_member_muted(struct UTUN_INSTANCE* inst, uint64_t group_id, uint64
|
|
|
|
|
} |
|
|
|
|
if (muted && slot < 0) ctx->muted_members[ctx->muted_count++] = node_id; |
|
|
|
|
else if (!muted && slot >= 0) ctx->muted_members[slot] = ctx->muted_members[--ctx->muted_count]; |
|
|
|
|
struct radio_instance* ri = radio_inst(inst); |
|
|
|
|
if (ri && ri->mute_fn) ri->mute_fn(inst, group_id, node_id, muted, ri->mute_arg); |
|
|
|
|
radio_refresh_member_mute(inst, group_id, node_id); |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_RADIO, "radio: local member mute grp=%016llx node=%016llx muted=%d", |
|
|
|
|
(unsigned long long)group_id, (unsigned long long)node_id, muted); |
|
|
|
|
return 0; |
|
|
|
|
|