diff options
Diffstat (limited to 'data.c')
| -rw-r--r-- | data.c | 34 |
1 files changed, 34 insertions, 0 deletions
| @@ -96,6 +96,9 @@ int srv_open(char *basedir, int auto_upgrade) | |||
| 96 | xs *qdir = xs_fmt("%s/queue", srv_basedir); | 96 | xs *qdir = xs_fmt("%s/queue", srv_basedir); |
| 97 | mkdirx(qdir); | 97 | mkdirx(qdir); |
| 98 | 98 | ||
| 99 | xs *ibdir = xs_fmt("%s/inboxes", srv_basedir); | ||
| 100 | mkdirx(ibdir); | ||
| 101 | |||
| 99 | #ifdef __OpenBSD__ | 102 | #ifdef __OpenBSD__ |
| 100 | char *v = xs_dict_get(srv_config, "disable_openbsd_security"); | 103 | char *v = xs_dict_get(srv_config, "disable_openbsd_security"); |
| 101 | 104 | ||
| @@ -1363,6 +1366,37 @@ d_char *history_list(snac *snac) | |||
| 1363 | } | 1366 | } |
| 1364 | 1367 | ||
| 1365 | 1368 | ||
| 1369 | /** inbox collection **/ | ||
| 1370 | |||
| 1371 | void inbox_add(const char *inbox) | ||
| 1372 | /* collects a shared inbox */ | ||
| 1373 | { | ||
| 1374 | xs *md5 = xs_md5_hex(inbox, strlen(inbox)); | ||
| 1375 | xs *fn = xs_fmt("%s/inboxes/%s", srv_basedir, md5); | ||
| 1376 | FILE *f; | ||
| 1377 | |||
| 1378 | if ((f = fopen(fn, "w")) != NULL) { | ||
| 1379 | pthread_mutex_lock(&data_mutex); | ||
| 1380 | |||
| 1381 | fprintf(f, "%s\n", inbox); | ||
| 1382 | fclose(f); | ||
| 1383 | |||
| 1384 | pthread_mutex_unlock(&data_mutex); | ||
| 1385 | } | ||
| 1386 | } | ||
| 1387 | |||
| 1388 | |||
| 1389 | void inbox_add_by_actor(const xs_dict *actor) | ||
| 1390 | /* collects an actor's shared inbox, if it has one */ | ||
| 1391 | { | ||
| 1392 | char *v; | ||
| 1393 | |||
| 1394 | if (!xs_is_null(v = xs_dict_get(actor, "endpoints")) && | ||
| 1395 | !xs_is_null(v = xs_dict_get(v, "sharedInbox"))) | ||
| 1396 | inbox_add(v); | ||
| 1397 | } | ||
| 1398 | |||
| 1399 | |||
| 1366 | /** the queue **/ | 1400 | /** the queue **/ |
| 1367 | 1401 | ||
| 1368 | static xs_dict *_enqueue_put(const char *fn, xs_dict *msg) | 1402 | static xs_dict *_enqueue_put(const char *fn, xs_dict *msg) |