From: Alan T. DeKok Date: Wed, 18 Jan 2017 19:31:43 +0000 (-0500) Subject: Add function to service control-plane messages X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e32c9cc184ccdcc83f534fcd2857f248d8d8f1c;p=thirdparty%2Ffreeradius-server.git Add function to service control-plane messages --- diff --git a/src/util/control.c b/src/util/control.c index 37a0fd5c8c5..ec3b8c87d86 100644 --- a/src/util/control.c +++ b/src/util/control.c @@ -438,3 +438,18 @@ int fr_control_callback_delete(fr_control_t *c, uint32_t id) return 0; } + +void fr_control_service(fr_control_t *c, void *data, size_t data_size, fr_time_t now) +{ + uint32_t id; + size_t message_size; + + while (true) { + message_size = fr_control_message_pop(c->aq, &id, data, data_size); + if (!message_size) return; + + if (!c->ident[id].callback) continue; + + c->ident[id].callback(c->ident[id].ctx, data, message_size, now); + } +} diff --git a/src/util/control.h b/src/util/control.h index c74f5130e6b..98a0911cb02 100644 --- a/src/util/control.h +++ b/src/util/control.h @@ -62,6 +62,8 @@ ssize_t fr_control_message_pop(fr_atomic_queue_t *aq, uint32_t *p_id, void *data int fr_control_callback_add(fr_control_t *c, uint32_t id, void *ctx, fr_control_callback_t callback) CC_HINT(nonnull(1,4)); int fr_control_callback_delete(fr_control_t *c, uint32_t id) CC_HINT(nonnull); +void fr_control_service(fr_control_t *c, void *data, size_t data_size, fr_time_t now) CC_HINT(nonnull); + #ifdef __cplusplus } #endif