diff options
| author | grunfink <grunfink@comam.es> | 2025-09-28 14:40:24 +0200 |
|---|---|---|
| committer | grunfink <grunfink@comam.es> | 2025-09-28 14:40:24 +0200 |
| commit | cddb2724d56ce8e1d80d4eec3c13702634704022 (patch) | |
| tree | e3d9099cd43b0370a976155371e91cff68d97b20 | |
| parent | 5d95ffa9f6605fcabdf4bd0e7ac2614cde637127 (diff) | |
New function actor_failure() (again, but much better).
| -rw-r--r-- | data.c | 39 | ||||
| -rw-r--r-- | snac.h | 1 |
2 files changed, 40 insertions, 0 deletions
@@ -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 */ { @@ -278,6 +278,7 @@ int content_match(const char *file, const xs_dict *msg); xs_list *content_search(snac *user, const char *regex, int priv, int skip, int show, int max_secs, int *timeout); +int actor_failure(const char *actor, int op); int instance_failure(const char *url, int op); void enqueue_input(snac *snac, const xs_dict *msg, const xs_dict *req, int retries); |