aboutsummaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authorgrunfink <grunfink@comam.es>2025-09-28 14:40:24 +0200
committergrunfink <grunfink@comam.es>2025-09-28 14:40:24 +0200
commitcddb2724d56ce8e1d80d4eec3c13702634704022 (patch)
treee3d9099cd43b0370a976155371e91cff68d97b20 /data.c
parent5d95ffa9f6605fcabdf4bd0e7ac2614cde637127 (diff)
New function actor_failure() (again, but much better).
Diffstat (limited to 'data.c')
-rw-r--r--data.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/data.c b/data.c
index 4a16a82..3b45665 100644
--- a/data.c
+++ b/data.c
@@ -3042,6 +3042,45 @@ xs_list *content_search(snac *user, const char *regex,
}
+int actor_failure(const char *actor, int op)
+/* actor failure maintenance */
+{
+ int ret = 0;
+
+ xs *md5 = xs_md5_hex(actor, strlen(actor));
+ xs *fn = xs_fmt("%s/failure/%s", srv_basedir, md5);
+
+ switch (op) {
+ case 0: /** check **/
+ if (mtime(fn))
+ ret = -1;
+
+ break;
+
+ case 1: /** register a failure **/
+ if (mtime(fn) == 0.0) {
+ FILE *f;
+
+ /* only create once, as the date will be used */
+ if ((f = fopen(fn, "w")) != NULL) {
+ fprintf(f, "%s\n", actor);
+ fclose(f);
+ }
+ }
+
+ break;
+
+ case 2: /** clear a failure **/
+ /* called whenever a message comes from this instance */
+ unlink(fn);
+
+ break;
+ }
+
+ return ret;
+}
+
+
int instance_failure(const char *url, int op)
/* do some checks and accounting on instance failures */
{