commit 545af94
default
·
2023-07-13 16:18:23 +0000 UTC
parent 137f775
New function post_message(), to send a message bypassing the output queue. This is used when accepting Follow requests; this way, follows are confirmed as fast as possible. If the message cannot be immediately sent, it's queued as always.
3 files changed,
+20,
-5
+17,
-2
1@@ -316,7 +316,7 @@ xs_str *get_actor_inbox(snac *snac, const char *actor)
2 }
3
4
5-int send_to_actor(snac *snac, const char *actor, const char *msg,
6+int send_to_actor(snac *snac, const char *actor, const xs_dict *msg,
7 xs_val **payload, int *p_size, int timeout)
8 /* sends a message to an actor */
9 {
10@@ -330,6 +330,21 @@ int send_to_actor(snac *snac, const char *actor, const char *msg,
11 }
12
13
14+void post_message(snac *snac, const char *actor, const xs_dict *msg)
15+/* posts a message immediately (bypassing the output queues) */
16+{
17+ xs *payload = NULL;
18+ int p_size;
19+ int status;
20+
21+ if (valid_status(status = send_to_actor(snac, actor, msg, &payload, &p_size, 3)))
22+ srv_log(xs_fmt("post_message to actor %s %d", actor, status));
23+ else
24+ /* cannot send right now, enqueue */
25+ enqueue_message(snac, msg);
26+}
27+
28+
29 xs_list *recipient_list(snac *snac, const xs_dict *msg, int expand_public)
30 /* returns the list of recipients for a message */
31 {
32@@ -1411,7 +1426,7 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req)
33 xs *f_msg = xs_dup(msg);
34 xs *reply = msg_accept(snac, f_msg, actor);
35
36- enqueue_message(snac, reply);
37+ post_message(snac, actor, reply);
38
39 if (xs_is_null(xs_dict_get(f_msg, "published"))) {
40 /* add a date if it doesn't include one (Mastodon) */
M
data.c
+1,
-1
1@@ -2092,7 +2092,7 @@ void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id)
2 }
3
4
5-void enqueue_message(snac *snac, xs_dict *msg)
6+void enqueue_message(snac *snac, const xs_dict *msg)
7 /* enqueues an output message */
8 {
9 xs *qmsg = _new_qmsg("message", msg, 0);
M
snac.h
+2,
-2
1@@ -173,7 +173,7 @@ void enqueue_output(snac *snac, xs_dict *msg, xs_str *inbox, int retries);
2 void enqueue_output_by_actor(snac *snac, xs_dict *msg, const xs_str *actor, int retries);
3 void enqueue_email(xs_str *msg, int retries);
4 void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id);
5-void enqueue_message(snac *snac, char *msg);
6+void enqueue_message(snac *snac, const xs_dict *msg);
7 void enqueue_close_question(snac *user, const char *id, int end_secs);
8 void enqueue_request_replies(snac *user, const char *id);
9 int was_question_voted(snac *user, const char *id);
10@@ -235,7 +235,7 @@ int send_to_inbox_raw(const char *keyid, const char *seckey,
11 int send_to_inbox(snac *snac, const xs_str *inbox, const xs_dict *msg,
12 xs_val **payload, int *p_size, int timeout);
13 xs_str *get_actor_inbox(snac *snac, const char *actor);
14-int send_to_actor(snac *snac, const char *actor, const char *msg,
15+int send_to_actor(snac *snac, const char *actor, const xs_dict *msg,
16 xs_val **payload, int *p_size, int timeout);
17 int is_msg_public(snac *snac, const xs_dict *msg);
18 int is_msg_for_me(snac *snac, const xs_dict *msg);