diff --git a/src/chat/chat_member.c b/src/chat/chat_member.c index 113cb439..174d78e1 100644 --- a/src/chat/chat_member.c +++ b/src/chat/chat_member.c @@ -410,10 +410,16 @@ static void on_member_route_changed(struct TOPO_GROUP* group, struct TOPO_GROUP_ on_member_props_changed(node->node_id, NULL, group->channel_id, arg); } -void chat_member_init(struct UTUN_INSTANCE* inst) { - member_sync_add_props_cbk(inst, on_member_props_changed, inst); - utun_add_nodeinfo_cbk(inst, on_member_route_changed, inst); +int chat_member_init(struct UTUN_INSTANCE* inst) { + if (member_sync_add_props_cbk(inst, on_member_props_changed, inst) < 0) { + DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: properties subscription failed"); return -1; + } + if (utun_add_nodeinfo_cbk(inst, on_member_route_changed, inst) < 0) { + DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: routes subscription failed"); + member_sync_remove_props_cbk(inst, on_member_props_changed, inst); return -1; + } DEBUG_INFO(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: initialized (group properties/routes -> complete MEMBER_UPDATED)"); + return 0; } void chat_member_destroy(struct UTUN_INSTANCE* inst) { diff --git a/src/chat/chat_member.h b/src/chat/chat_member.h index a461a848..33af7cd4 100644 --- a/src/chat/chat_member.h +++ b/src/chat/chat_member.h @@ -110,7 +110,8 @@ struct chat_member_radio_mute_req { struct UTUN_INSTANCE* inst; char ch_id[64]; void chat_core_toggle_member_radio_mute_trampoline(void* arg); /* Подписки свойств/маршрутов → MEMBER_UPDATED; вызываются в uasync при init/destroy чата. */ -void chat_member_init(struct UTUN_INSTANCE* inst); +/* Установить обе подписки0/-1;при отказе частичная регистрация снята. Вызывается один раз из chat_core_init. */ +int chat_member_init(struct UTUN_INSTANCE* inst); void chat_member_destroy(struct UTUN_INSTANCE* inst); /* Дополнительная диагностика карточки; online/RTT берутся только из chat_member_display.