summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--activitypub.c27
-rw-r--r--xs_set.h1
-rw-r--r--xs_version.h2
3 files changed, 16 insertions, 14 deletions
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 */