diff --git a/activitypub.c b/activitypub.c index fdccf1c..6c8c484 100644 --- a/activitypub.c +++ b/activitypub.c @@ -1430,8 +1430,8 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req) /* bring the actor */ a_status = actor_request(snac, actor, &actor_o); - /* if the actor does not explicitly exist, discard */ - if (a_status == 404 || a_status == 410) { + /* do not retry permanent failures */ + if (a_status == 404 || a_status == 410 || a_status < 0) { snac_debug(snac, 1, xs_fmt("dropping message due to actor error %s %d", actor, a_status)); diff --git a/xs_curl.h b/xs_curl.h index 9f9b63b..3caa8b1 100644 --- a/xs_curl.h +++ b/xs_curl.h @@ -169,8 +169,13 @@ xs_dict *xs_http_request(const char *method, const char *url, curl_slist_free_all(list); if (status != NULL) { - if (lstatus == 0) - lstatus = -cc; + if (lstatus == 0) { + /* set the timeout error to a fake HTTP status, or propagate as is */ + if (cc == CURLE_OPERATION_TIMEDOUT) + lstatus = 599; + else + lstatus = -cc; + } *status = (int) lstatus; } diff --git a/xs_version.h b/xs_version.h index 7da6c06..1cc950c 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* ac9fa6f1941aa3e701bbb1da50b4d5a07090eddb */ +/* 246a8bc9941850f68bf9034662a8a96bcd33926d */