diff --git a/activitypub.c b/activitypub.c index d22261d..1e4130c 100644 --- a/activitypub.c +++ b/activitypub.c @@ -9,6 +9,7 @@ #include "xs_openssl.h" #include "xs_regex.h" #include "xs_time.h" +#include "xs_set.h" #include "snac.h" @@ -169,11 +170,13 @@ int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_s d_char *recipient_list(snac *snac, char *msg, int expand_public) /* returns the list of recipients for a message */ { - d_char *list = xs_list_new(); char *to = xs_dict_get(msg, "to"); char *cc = xs_dict_get(msg, "cc"); + xs_set rcpts; int n; + xs_set_init(&rcpts); + char *lists[] = { to, cc, NULL }; for (n = 0; lists[n]; n++) { char *l = lists[n]; @@ -195,40 +198,38 @@ d_char *recipient_list(snac *snac, char *msg, int expand_public) char *actor; char *p = fwers; - while (xs_list_iter(&p, &actor)) { - if (xs_list_in(list, actor) == -1) - list = xs_list_append(list, actor); - } + while (xs_list_iter(&p, &actor)) + xs_set_add(&rcpts, actor); } else - if (xs_list_in(list, v) == -1) - list = xs_list_append(list, v); + xs_set_add(&rcpts, v); } } - return list; + return xs_set_result(&rcpts); } d_char *inbox_list(snac *snac, char *msg) /* returns the list of inboxes that are recipients of this message */ { - d_char *list = xs_list_new(); - xs *rcpts = recipient_list(snac, msg, 1); + xs *rcpts = recipient_list(snac, msg, 1); + xs_set inboxes; char *p, *v; + xs_set_init(&inboxes); + p = rcpts; while (xs_list_iter(&p, &v)) { xs *inbox; if ((inbox = get_actor_inbox(snac, v)) != NULL) { /* add the inbox if it's not already there */ - if (xs_list_in(list, inbox) == -1) - list = xs_list_append(list, inbox); + xs_set_add(&inboxes, inbox); } } - return list; + return xs_set_result(&inboxes); } diff --git a/xs_set.h b/xs_set.h index 5e26abb..f97eb20 100644 --- a/xs_set.h +++ b/xs_set.h @@ -12,6 +12,7 @@ typedef struct _xs_set { } xs_set; void xs_set_init(xs_set *s); +d_char *xs_set_result(xs_set *s); void xs_set_free(xs_set *s); int xs_set_add(xs_set *s, const char *data); diff --git a/xs_version.h b/xs_version.h index 50dd00a..baefcba 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* e9effd101e5ad45cc4209759ae25e4a6de9259e8 */ +/* c18371e1f1d3de0f872354f93024a736caebea4d */