diff options
| author | 2023-05-05 09:54:41 +0200 | |
|---|---|---|
| committer | 2023-05-05 09:54:41 +0200 | |
| commit | d3a36218a6ebfc951ff38c410ac1c29ec15c3c7f (patch) | |
| tree | 029f4a81193e739d8254db83699349a4983a9983 | |
| parent | Updated documentation. (diff) | |
| download | penes-snac2-d3a36218a6ebfc951ff38c410ac1c29ec15c3c7f.tar.gz penes-snac2-d3a36218a6ebfc951ff38c410ac1c29ec15c3c7f.tar.xz penes-snac2-d3a36218a6ebfc951ff38c410ac1c29ec15c3c7f.zip | |
Implemented 'Ping' and 'Pong' activities.
According to https://humungus.tedunangst.com/r/honk/v/tip/f/docs/ping.txt
| -rw-r--r-- | activitypub.c | 41 | ||||
| -rw-r--r-- | main.c | 14 | ||||
| -rw-r--r-- | snac.h | 2 |
3 files changed, 54 insertions, 3 deletions
diff --git a/activitypub.c b/activitypub.c index 0d5439d..6127dab 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -437,7 +437,8 @@ void process_tags(snac *snac, const char *content, d_char **n_content, d_char ** | |||
| 437 | 437 | ||
| 438 | /** messages **/ | 438 | /** messages **/ |
| 439 | 439 | ||
| 440 | d_char *msg_base(snac *snac, char *type, char *id, char *actor, char *date, char *object) | 440 | xs_dict *msg_base(snac *snac, const char *type, const char *id, |
| 441 | const char *actor, const char *date, const char *object) | ||
| 441 | /* creates a base ActivityPub message */ | 442 | /* creates a base ActivityPub message */ |
| 442 | { | 443 | { |
| 443 | xs *did = NULL; | 444 | xs *did = NULL; |
| @@ -467,7 +468,7 @@ d_char *msg_base(snac *snac, char *type, char *id, char *actor, char *date, char | |||
| 467 | } | 468 | } |
| 468 | } | 469 | } |
| 469 | 470 | ||
| 470 | d_char *msg = xs_dict_new(); | 471 | xs_dict *msg = xs_dict_new(); |
| 471 | 472 | ||
| 472 | msg = xs_dict_append(msg, "@context", "https:/" "/www.w3.org/ns/activitystreams"); | 473 | msg = xs_dict_append(msg, "@context", "https:/" "/www.w3.org/ns/activitystreams"); |
| 473 | msg = xs_dict_append(msg, "type", type); | 474 | msg = xs_dict_append(msg, "type", type); |
| @@ -845,6 +846,28 @@ xs_dict *msg_note(snac *snac, const xs_str *content, const xs_val *rcpts, | |||
| 845 | } | 846 | } |
| 846 | 847 | ||
| 847 | 848 | ||
| 849 | xs_dict *msg_ping(snac *user, const char *rcpt) | ||
| 850 | /* creates a Ping message (https://humungus.tedunangst.com/r/honk/v/tip/f/docs/ping.txt) */ | ||
| 851 | { | ||
| 852 | xs_dict *msg = msg_base(user, "Ping", "@dummy", user->actor, NULL, NULL); | ||
| 853 | |||
| 854 | msg = xs_dict_append(msg, "to", rcpt); | ||
| 855 | |||
| 856 | return msg; | ||
| 857 | } | ||
| 858 | |||
| 859 | |||
| 860 | xs_dict *msg_pong(snac *user, const char *rcpt, const char *object) | ||
| 861 | /* creates a Pong message (https://humungus.tedunangst.com/r/honk/v/tip/f/docs/ping.txt) */ | ||
| 862 | { | ||
| 863 | xs_dict *msg = msg_base(user, "Pong", "@dummy", user->actor, NULL, object); | ||
| 864 | |||
| 865 | msg = xs_dict_append(msg, "to", rcpt); | ||
| 866 | |||
| 867 | return msg; | ||
| 868 | } | ||
| 869 | |||
| 870 | |||
| 848 | void notify(snac *snac, xs_str *type, xs_str *utype, xs_str *actor, xs_dict *msg) | 871 | void notify(snac *snac, xs_str *type, xs_str *utype, xs_str *actor, xs_dict *msg) |
| 849 | /* notifies the user of relevant events */ | 872 | /* notifies the user of relevant events */ |
| 850 | { | 873 | { |
| @@ -1147,7 +1170,19 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req) | |||
| 1147 | snac_debug(snac, 1, xs_fmt("ignored 'Delete' for unknown object %s", object)); | 1170 | snac_debug(snac, 1, xs_fmt("ignored 'Delete' for unknown object %s", object)); |
| 1148 | } | 1171 | } |
| 1149 | else | 1172 | else |
| 1150 | snac_debug(snac, 1, xs_fmt("process_message type '%s' ignored", type)); | 1173 | if (strcmp(type, "Pong") == 0) { |
| 1174 | snac_log(snac, xs_fmt("'Pong' received from %s", actor)); | ||
| 1175 | } | ||
| 1176 | else | ||
| 1177 | if (strcmp(type, "Ping") == 0) { | ||
| 1178 | snac_log(snac, xs_fmt("'Ping' requested from %s", actor)); | ||
| 1179 | |||
| 1180 | xs *rsp = msg_pong(snac, actor, xs_dict_get(msg, "id")); | ||
| 1181 | |||
| 1182 | enqueue_output_by_actor(snac, rsp, actor, 0); | ||
| 1183 | } | ||
| 1184 | else | ||
| 1185 | snac_debug(snac, 1, xs_fmt("process_input_message type '%s' ignored", type)); | ||
| 1151 | 1186 | ||
| 1152 | if (do_notify) { | 1187 | if (do_notify) { |
| 1153 | notify(snac, type, utype, actor, msg); | 1188 | notify(snac, type, utype, actor, msg); |
| @@ -30,6 +30,7 @@ int usage(void) | |||
| 30 | printf("actor {basedir} {uid} {url} Requests an actor\n"); | 30 | printf("actor {basedir} {uid} {url} Requests an actor\n"); |
| 31 | printf("note {basedir} {uid} {'text'} Sends a note to followers\n"); | 31 | printf("note {basedir} {uid} {'text'} Sends a note to followers\n"); |
| 32 | printf("resetpwd {basedir} {uid} Resets the password of a user\n"); | 32 | printf("resetpwd {basedir} {uid} Resets the password of a user\n"); |
| 33 | printf("ping {basedir} {uid} {actor} Pings an actor\n"); | ||
| 33 | 34 | ||
| 34 | return 1; | 35 | return 1; |
| 35 | } | 36 | } |
| @@ -228,6 +229,19 @@ int main(int argc, char *argv[]) | |||
| 228 | return 0; | 229 | return 0; |
| 229 | } | 230 | } |
| 230 | 231 | ||
| 232 | if (strcmp(cmd, "ping") == 0) { | ||
| 233 | xs *msg = msg_ping(&snac, url); | ||
| 234 | |||
| 235 | enqueue_output_by_actor(&snac, msg, url, 0); | ||
| 236 | |||
| 237 | if (dbglevel) { | ||
| 238 | xs *j = xs_json_dumps_pp(msg, 4); | ||
| 239 | printf("%s\n", msg); | ||
| 240 | } | ||
| 241 | |||
| 242 | return 0; | ||
| 243 | } | ||
| 244 | |||
| 231 | if (strcmp(cmd, "request") == 0) { | 245 | if (strcmp(cmd, "request") == 0) { |
| 232 | int status; | 246 | int status; |
| 233 | xs *data = NULL; | 247 | xs *data = NULL; |
| @@ -203,6 +203,8 @@ d_char *msg_undo(snac *snac, char *object); | |||
| 203 | d_char *msg_delete(snac *snac, char *id); | 203 | d_char *msg_delete(snac *snac, char *id); |
| 204 | d_char *msg_actor(snac *snac); | 204 | d_char *msg_actor(snac *snac); |
| 205 | xs_dict *msg_update(snac *snac, xs_dict *object); | 205 | xs_dict *msg_update(snac *snac, xs_dict *object); |
| 206 | xs_dict *msg_ping(snac *user, const char *rcpt); | ||
| 207 | xs_dict *msg_pong(snac *user, const char *rcpt, const char *object); | ||
| 206 | 208 | ||
| 207 | int activitypub_request(snac *snac, const char *url, xs_dict **data); | 209 | int activitypub_request(snac *snac, const char *url, xs_dict **data); |
| 208 | int actor_request(snac *snac, const char *actor, xs_dict **data); | 210 | int actor_request(snac *snac, const char *actor, xs_dict **data); |