aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/module.c6
-rw-r--r--core/module.h3
2 files changed, 9 insertions, 0 deletions
diff --git a/core/module.c b/core/module.c
index c03d188..45f67f7 100644
--- a/core/module.c
+++ b/core/module.c
@@ -2922,6 +2922,12 @@ PureResult pure_app_deliver(PureApp *app, uint32_t input, const char *source, ui
return saved == PURE_OK ? result : saved;
}
+uint64_t pure_app_heard(const PureApp *app, const char *source) {
+ for (unsigned i = 0; i < app->heard_count; ++i)
+ if (!strcmp(app->heard[i].source, source)) return app->heard[i].seq;
+ return 0;
+}
+
PureResult pure_app_reply(const PureApp *app, bool (*visit)(void *, PureSpan), void *context) {
if (!app->has_reply) return PURE_OK;
return visit_value(app, &app->arena, app->reply, visit, context);
diff --git a/core/module.h b/core/module.h
index e5556fe..e9e5dd3 100644
--- a/core/module.h
+++ b/core/module.h
@@ -428,6 +428,9 @@ void pure_app_trim(PureApp *, uint32_t output, uint64_t through);
* save fails. placed is as for pure_app_message_fields, or NULL. */
PureResult pure_app_deliver(PureApp *, uint32_t input, const char *source, uint64_t seq, PureSpan payload,
const uint32_t *placed);
+/* The last number heard from source (0 when none): a host that gets
+ * numbered messages out of order hands them over from the one after it. */
+uint64_t pure_app_heard(const PureApp *, const char *source);
/* Readers on other threads. Right after a save an app can make a snapshot of
* its saved states, for evaluating views anywhere while it keeps applying