summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--activitypub.c19
-rw-r--r--data.c2
-rw-r--r--snac.h4
3 files changed, 20 insertions, 5 deletions
diff --git a/activitypub.c b/activitypub.c
index e871c8d..c9cf066 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -316,7 +316,7 @@ xs_str *get_actor_inbox(snac *snac, const char *actor)
316} 316}
317 317
318 318
319int send_to_actor(snac *snac, const char *actor, const char *msg, 319int send_to_actor(snac *snac, const char *actor, const xs_dict *msg,
320 xs_val **payload, int *p_size, int timeout) 320 xs_val **payload, int *p_size, int timeout)
321/* sends a message to an actor */ 321/* sends a message to an actor */
322{ 322{
@@ -330,6 +330,21 @@ int send_to_actor(snac *snac, const char *actor, const char *msg,
330} 330}
331 331
332 332
333void post_message(snac *snac, const char *actor, const xs_dict *msg)
334/* posts a message immediately (bypassing the output queues) */
335{
336 xs *payload = NULL;
337 int p_size;
338 int status;
339
340 if (valid_status(status = send_to_actor(snac, actor, msg, &payload, &p_size, 3)))
341 srv_log(xs_fmt("post_message to actor %s %d", actor, status));
342 else
343 /* cannot send right now, enqueue */
344 enqueue_message(snac, msg);
345}
346
347
333xs_list *recipient_list(snac *snac, const xs_dict *msg, int expand_public) 348xs_list *recipient_list(snac *snac, const xs_dict *msg, int expand_public)
334/* returns the list of recipients for a message */ 349/* returns the list of recipients for a message */
335{ 350{
@@ -1411,7 +1426,7 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req)
1411 xs *f_msg = xs_dup(msg); 1426 xs *f_msg = xs_dup(msg);
1412 xs *reply = msg_accept(snac, f_msg, actor); 1427 xs *reply = msg_accept(snac, f_msg, actor);
1413 1428
1414 enqueue_message(snac, reply); 1429 post_message(snac, actor, reply);
1415 1430
1416 if (xs_is_null(xs_dict_get(f_msg, "published"))) { 1431 if (xs_is_null(xs_dict_get(f_msg, "published"))) {
1417 /* add a date if it doesn't include one (Mastodon) */ 1432 /* add a date if it doesn't include one (Mastodon) */
diff --git a/data.c b/data.c
index 2c2ff8b..24a0bc8 100644
--- a/data.c
+++ b/data.c
@@ -2092,7 +2092,7 @@ void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id)
2092} 2092}
2093 2093
2094 2094
2095void enqueue_message(snac *snac, xs_dict *msg) 2095void enqueue_message(snac *snac, const xs_dict *msg)
2096/* enqueues an output message */ 2096/* enqueues an output message */
2097{ 2097{
2098 xs *qmsg = _new_qmsg("message", msg, 0); 2098 xs *qmsg = _new_qmsg("message", msg, 0);
diff --git a/snac.h b/snac.h
index cee6470..e36a60b 100644
--- a/snac.h
+++ b/snac.h
@@ -173,7 +173,7 @@ void enqueue_output(snac *snac, xs_dict *msg, xs_str *inbox, int retries);
173void enqueue_output_by_actor(snac *snac, xs_dict *msg, const xs_str *actor, int retries); 173void enqueue_output_by_actor(snac *snac, xs_dict *msg, const xs_str *actor, int retries);
174void enqueue_email(xs_str *msg, int retries); 174void enqueue_email(xs_str *msg, int retries);
175void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id); 175void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id);
176void enqueue_message(snac *snac, char *msg); 176void enqueue_message(snac *snac, const xs_dict *msg);
177void enqueue_close_question(snac *user, const char *id, int end_secs); 177void enqueue_close_question(snac *user, const char *id, int end_secs);
178void enqueue_request_replies(snac *user, const char *id); 178void enqueue_request_replies(snac *user, const char *id);
179int was_question_voted(snac *user, const char *id); 179int was_question_voted(snac *user, const char *id);
@@ -235,7 +235,7 @@ int send_to_inbox_raw(const char *keyid, const char *seckey,
235int send_to_inbox(snac *snac, const xs_str *inbox, const xs_dict *msg, 235int send_to_inbox(snac *snac, const xs_str *inbox, const xs_dict *msg,
236 xs_val **payload, int *p_size, int timeout); 236 xs_val **payload, int *p_size, int timeout);
237xs_str *get_actor_inbox(snac *snac, const char *actor); 237xs_str *get_actor_inbox(snac *snac, const char *actor);
238int send_to_actor(snac *snac, const char *actor, const char *msg, 238int send_to_actor(snac *snac, const char *actor, const xs_dict *msg,
239 xs_val **payload, int *p_size, int timeout); 239 xs_val **payload, int *p_size, int timeout);
240int is_msg_public(snac *snac, const xs_dict *msg); 240int is_msg_public(snac *snac, const xs_dict *msg);
241int is_msg_for_me(snac *snac, const xs_dict *msg); 241int is_msg_for_me(snac *snac, const xs_dict *msg);