From 5e3c50d6e1ea2105add614fa2eb45612e577ddac Mon Sep 17 00:00:00 2001 From: default Date: Thu, 2 Mar 2023 08:43:50 +0100 Subject: New inbox collection functions. --- data.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'data.c') diff --git a/data.c b/data.c index 8934f31..208c057 100644 --- a/data.c +++ b/data.c @@ -96,6 +96,9 @@ int srv_open(char *basedir, int auto_upgrade) xs *qdir = xs_fmt("%s/queue", srv_basedir); mkdirx(qdir); + xs *ibdir = xs_fmt("%s/inboxes", srv_basedir); + mkdirx(ibdir); + #ifdef __OpenBSD__ char *v = xs_dict_get(srv_config, "disable_openbsd_security"); @@ -1363,6 +1366,37 @@ d_char *history_list(snac *snac) } +/** inbox collection **/ + +void inbox_add(const char *inbox) +/* collects a shared inbox */ +{ + xs *md5 = xs_md5_hex(inbox, strlen(inbox)); + xs *fn = xs_fmt("%s/inboxes/%s", srv_basedir, md5); + FILE *f; + + if ((f = fopen(fn, "w")) != NULL) { + pthread_mutex_lock(&data_mutex); + + fprintf(f, "%s\n", inbox); + fclose(f); + + pthread_mutex_unlock(&data_mutex); + } +} + + +void inbox_add_by_actor(const xs_dict *actor) +/* collects an actor's shared inbox, if it has one */ +{ + char *v; + + if (!xs_is_null(v = xs_dict_get(actor, "endpoints")) && + !xs_is_null(v = xs_dict_get(v, "sharedInbox"))) + inbox_add(v); +} + + /** the queue **/ static xs_dict *_enqueue_put(const char *fn, xs_dict *msg) -- cgit v1.2.3