]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add function to service control-plane messages
authorAlan T. DeKok <aland@freeradius.org>
Wed, 18 Jan 2017 19:31:43 +0000 (14:31 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 18 Jan 2017 19:31:43 +0000 (14:31 -0500)
src/util/control.c
src/util/control.h

index 37a0fd5c8c55911959bde0d8c9ddd45aa75faa0f..ec3b8c87d86dcc22d9d45d8025045c45baca72fa 100644 (file)
@@ -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);
+       }
+}
index c74f5130e6bc705f92c8b721b5d386760a16216b..98a0911cb02cdc4bfa648a642cfc7d0720632244 100644 (file)
@@ -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