diff options
| -rw-r--r-- | activitypub.c | 19 | ||||
| -rw-r--r-- | data.c | 2 | ||||
| -rw-r--r-- | snac.h | 4 |
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 | ||
| 319 | int send_to_actor(snac *snac, const char *actor, const char *msg, | 319 | int 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 | ||
| 333 | void 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 | |||
| 333 | xs_list *recipient_list(snac *snac, const xs_dict *msg, int expand_public) | 348 | xs_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) */ |
| @@ -2092,7 +2092,7 @@ void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id) | |||
| 2092 | } | 2092 | } |
| 2093 | 2093 | ||
| 2094 | 2094 | ||
| 2095 | void enqueue_message(snac *snac, xs_dict *msg) | 2095 | void 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); |
| @@ -173,7 +173,7 @@ void enqueue_output(snac *snac, xs_dict *msg, xs_str *inbox, int retries); | |||
| 173 | void enqueue_output_by_actor(snac *snac, xs_dict *msg, const xs_str *actor, int retries); | 173 | void enqueue_output_by_actor(snac *snac, xs_dict *msg, const xs_str *actor, int retries); |
| 174 | void enqueue_email(xs_str *msg, int retries); | 174 | void enqueue_email(xs_str *msg, int retries); |
| 175 | void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id); | 175 | void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id); |
| 176 | void enqueue_message(snac *snac, char *msg); | 176 | void enqueue_message(snac *snac, const xs_dict *msg); |
| 177 | void enqueue_close_question(snac *user, const char *id, int end_secs); | 177 | void enqueue_close_question(snac *user, const char *id, int end_secs); |
| 178 | void enqueue_request_replies(snac *user, const char *id); | 178 | void enqueue_request_replies(snac *user, const char *id); |
| 179 | int was_question_voted(snac *user, const char *id); | 179 | int was_question_voted(snac *user, const char *id); |
| @@ -235,7 +235,7 @@ int send_to_inbox_raw(const char *keyid, const char *seckey, | |||
| 235 | int send_to_inbox(snac *snac, const xs_str *inbox, const xs_dict *msg, | 235 | int 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); |
| 237 | xs_str *get_actor_inbox(snac *snac, const char *actor); | 237 | xs_str *get_actor_inbox(snac *snac, const char *actor); |
| 238 | int send_to_actor(snac *snac, const char *actor, const char *msg, | 238 | int 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); |
| 240 | int is_msg_public(snac *snac, const xs_dict *msg); | 240 | int is_msg_public(snac *snac, const xs_dict *msg); |
| 241 | int is_msg_for_me(snac *snac, const xs_dict *msg); | 241 | int is_msg_for_me(snac *snac, const xs_dict *msg); |