transport: per-peer sleep callback (peer_sleep_cbk) fired from keepalive protocol
This commit is contained in:
1 parent
5628138d16
commit
e4e9fca243
5 files changed
+67
No files matched your search
@@ -645,6 +645,12 @@ void utun_instance_destroy(struct UTUN_INSTANCE *instance) {
|
||||
instance->activity_cbks = r->next; u_free(r);
|
||||
}
|
||||
|
||||
// Cleanup peer-sleep callback chain
|
||||
while (instance->peer_sleep_cbks) {
|
||||
struct peer_sleep_cbk_entry* r = instance->peer_sleep_cbks;
|
||||
instance->peer_sleep_cbks = r->next; u_free(r);
|
||||
}
|
||||
|
||||
// Shared SQLite DB закрываем в самом конце: routing/chat/media/db_sync
|
||||
// используют его во время всего teardown (см. topo_groups_destroy).
|
||||
if (instance->topo_sqlite_db) {
|
||||
@@ -1130,6 +1136,35 @@ static void utun_fire_activity_cbk(struct UTUN_INSTANCE* instance, int active) {
|
||||
}
|
||||
}
|
||||
|
||||
void utun_add_peer_sleep_cbk(struct UTUN_INSTANCE* instance, peer_sleep_cbk_fn fn, void* arg) {
|
||||
if (!instance || !fn) return;
|
||||
struct peer_sleep_cbk_entry* e = u_malloc(sizeof(*e));
|
||||
if (!e) return;
|
||||
e->fn = fn; e->arg = arg; e->next = instance->peer_sleep_cbks;
|
||||
instance->peer_sleep_cbks = e;
|
||||
}
|
||||
|
||||
void utun_remove_peer_sleep_cbk(struct UTUN_INSTANCE* instance, peer_sleep_cbk_fn fn, void* arg) {
|
||||
if (!instance || !fn) return;
|
||||
struct peer_sleep_cbk_entry** p = &instance->peer_sleep_cbks;
|
||||
while (*p) {
|
||||
if ((*p)->fn == fn && (*p)->arg == arg) {
|
||||
struct peer_sleep_cbk_entry* rm = *p;
|
||||
*p = rm->next; u_free(rm); return;
|
||||
}
|
||||
p = &(*p)->next;
|
||||
}
|
||||
}
|
||||
|
||||
void utun_fire_peer_sleep_cbk(struct UTUN_INSTANCE* instance, uint64_t peer_node_id, int sleeping) {
|
||||
struct peer_sleep_cbk_entry* e = instance ? instance->peer_sleep_cbks : NULL;
|
||||
while (e) {
|
||||
struct peer_sleep_cbk_entry* n = e->next;
|
||||
e->fn(instance, peer_node_id, sleeping, e->arg);
|
||||
e = n;
|
||||
}
|
||||
}
|
||||
|
||||
static void client_activity_timeout_cb(void* arg) {
|
||||
struct UTUN_INSTANCE* instance = (struct UTUN_INSTANCE*)arg;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_BGP, "client_activity_timer fired: node=%016llx type=%u -> standby",
|
||||
|
||||
Reference in new issue
Block a user