diff options
Diffstat (limited to 'activitypub.c')
| -rw-r--r-- | activitypub.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/activitypub.c b/activitypub.c index 091e4bf..2e11a82 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -194,18 +194,27 @@ d_char *msg_update(snac *snac, char *object) | |||
| 194 | d_char *msg_admiration(snac *snac, char *object, char *type) | 194 | d_char *msg_admiration(snac *snac, char *object, char *type) |
| 195 | /* creates a Like or Announce message */ | 195 | /* creates a Like or Announce message */ |
| 196 | { | 196 | { |
| 197 | xs *ntid = tid(0); | 197 | xs *a_msg = NULL; |
| 198 | xs *id = xs_fmt("%s/d/%d/%s", snac->actor, ntid, type); | 198 | d_char *msg = NULL; |
| 199 | d_char *msg = msg_base(snac, type, id, snac->actor, ""); | ||
| 200 | xs *rcpts = xs_list_new(); | ||
| 201 | 199 | ||
| 202 | /* call the object */ | 200 | /* call the object */ |
| 203 | timeline_request(snac, object, snac->actor); | 201 | timeline_request(snac, object, snac->actor); |
| 204 | 202 | ||
| 205 | rcpts = xs_list_append(rcpts, public_address); | 203 | if ((a_msg = timeline_find(snac, object)) != NULL) { |
| 204 | xs *ntid = tid(0); | ||
| 205 | xs *id = xs_fmt("%s/d/%d/%s", snac->actor, ntid, type); | ||
| 206 | xs *rcpts = xs_list_new(); | ||
| 206 | 207 | ||
| 207 | msg = xs_dict_append(msg, "to", rcpts); | 208 | msg = msg_base(snac, type, id, snac->actor, ""); |
| 208 | msg = xs_dict_append(msg, "object", object); | 209 | |
| 210 | rcpts = xs_list_append(rcpts, public_address); | ||
| 211 | rcpts = xs_list_append(rcpts, xs_dict_get(a_msg, "attributedTo")); | ||
| 212 | |||
| 213 | msg = xs_dict_append(msg, "to", rcpts); | ||
| 214 | msg = xs_dict_append(msg, "object", object); | ||
| 215 | } | ||
| 216 | else | ||
| 217 | snac_log(snac, xs_fmt("msg_admiration cannot retrieve object %s", object)); | ||
| 209 | 218 | ||
| 210 | return msg; | 219 | return msg; |
| 211 | } | 220 | } |
| @@ -372,9 +381,11 @@ void process_queue(snac *snac) | |||
| 372 | char *actor = xs_dict_get(q_item, "actor"); | 381 | char *actor = xs_dict_get(q_item, "actor"); |
| 373 | char *msg = xs_dict_get(q_item, "object"); | 382 | char *msg = xs_dict_get(q_item, "object"); |
| 374 | int retries = xs_number_get(xs_dict_get(q_item, "retries")); | 383 | int retries = xs_number_get(xs_dict_get(q_item, "retries")); |
| 384 | xs *payload = NULL; | ||
| 385 | int p_size = 0; | ||
| 375 | 386 | ||
| 376 | /* deliver */ | 387 | /* deliver */ |
| 377 | status = send_to_actor(snac, actor, msg, NULL, 0); | 388 | status = send_to_actor(snac, actor, msg, &payload, &p_size); |
| 378 | 389 | ||
| 379 | if (!valid_status(status)) { | 390 | if (!valid_status(status)) { |
| 380 | /* error sending; reenqueue? */ | 391 | /* error sending; reenqueue? */ |
| @@ -420,12 +431,14 @@ d_char *recipient_list(snac *snac, char *msg, int expand_public) | |||
| 420 | 431 | ||
| 421 | char *p = fwers; | 432 | char *p = fwers; |
| 422 | while (xs_list_iter(&p, &fw)) { | 433 | while (xs_list_iter(&p, &fw)) { |
| 423 | if (!xs_list_in(list, fw)) | 434 | char *actor = xs_dict_get(fw, "actor"); |
| 424 | list = xs_list_append(list, fw); | 435 | |
| 436 | if (xs_list_in(list, actor) == -1) | ||
| 437 | list = xs_list_append(list, actor); | ||
| 425 | } | 438 | } |
| 426 | } | 439 | } |
| 427 | else | 440 | else |
| 428 | if (!xs_list_in(list, v)) | 441 | if (xs_list_in(list, v) == -1) |
| 429 | list = xs_list_append(list, v); | 442 | list = xs_list_append(list, v); |
| 430 | } | 443 | } |
| 431 | } | 444 | } |