diff options
| author | 2023-01-24 15:06:58 +0100 | |
|---|---|---|
| committer | 2023-01-24 15:06:58 +0100 | |
| commit | fd1e281cbae03ced989631abd400062af81c48c2 (patch) | |
| tree | 6ad8e8fca29c57af3ece6b470868df6c8607fb76 | |
| parent | Backport from xs. (diff) | |
| download | penes-snac2-fd1e281cbae03ced989631abd400062af81c48c2.tar.gz penes-snac2-fd1e281cbae03ced989631abd400062af81c48c2.tar.xz penes-snac2-fd1e281cbae03ced989631abd400062af81c48c2.zip | |
Use a shorter timeout for first output connections.
Diffstat (limited to '')
| -rw-r--r-- | activitypub.c | 12 | ||||
| -rw-r--r-- | http.c | 5 | ||||
| -rw-r--r-- | snac.h | 7 | ||||
| -rw-r--r-- | webfinger.c | 2 | ||||
| -rw-r--r-- | xs_curl.h | 13 | ||||
| -rw-r--r-- | xs_version.h | 2 |
6 files changed, 23 insertions, 18 deletions
diff --git a/activitypub.c b/activitypub.c index aab81a9..1394235 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -31,7 +31,7 @@ int activitypub_request(snac *snac, char *url, d_char **data) | |||
| 31 | 31 | ||
| 32 | /* get from the net */ | 32 | /* get from the net */ |
| 33 | response = http_signed_request(snac, "GET", url, | 33 | response = http_signed_request(snac, "GET", url, |
| 34 | NULL, NULL, 0, &status, &payload, &p_size); | 34 | NULL, NULL, 0, &status, &payload, &p_size, 0); |
| 35 | 35 | ||
| 36 | if (valid_status(status)) { | 36 | if (valid_status(status)) { |
| 37 | /* ensure it's ActivityPub data */ | 37 | /* ensure it's ActivityPub data */ |
| @@ -131,7 +131,7 @@ int timeline_request(snac *snac, char **id, d_char **wrk) | |||
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | 133 | ||
| 134 | int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size) | 134 | int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size, int timeout) |
| 135 | /* sends a message to an Inbox */ | 135 | /* sends a message to an Inbox */ |
| 136 | { | 136 | { |
| 137 | int status; | 137 | int status; |
| @@ -139,7 +139,7 @@ int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_s | |||
| 139 | xs *j_msg = xs_json_dumps_pp(msg, 4); | 139 | xs *j_msg = xs_json_dumps_pp(msg, 4); |
| 140 | 140 | ||
| 141 | response = http_signed_request(snac, "POST", inbox, | 141 | response = http_signed_request(snac, "POST", inbox, |
| 142 | NULL, j_msg, strlen(j_msg), &status, payload, p_size); | 142 | NULL, j_msg, strlen(j_msg), &status, payload, p_size, timeout); |
| 143 | 143 | ||
| 144 | xs_free(response); | 144 | xs_free(response); |
| 145 | 145 | ||
| @@ -167,14 +167,14 @@ d_char *get_actor_inbox(snac *snac, char *actor) | |||
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | 169 | ||
| 170 | int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size) | 170 | int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout) |
| 171 | /* sends a message to an actor */ | 171 | /* sends a message to an actor */ |
| 172 | { | 172 | { |
| 173 | int status = 400; | 173 | int status = 400; |
| 174 | xs *inbox = get_actor_inbox(snac, actor); | 174 | xs *inbox = get_actor_inbox(snac, actor); |
| 175 | 175 | ||
| 176 | if (!xs_is_null(inbox)) | 176 | if (!xs_is_null(inbox)) |
| 177 | status = send_to_inbox(snac, inbox, msg, payload, p_size); | 177 | status = send_to_inbox(snac, inbox, msg, payload, p_size, timeout); |
| 178 | 178 | ||
| 179 | return status; | 179 | return status; |
| 180 | } | 180 | } |
| @@ -1084,7 +1084,7 @@ void process_queue(snac *snac) | |||
| 1084 | continue; | 1084 | continue; |
| 1085 | 1085 | ||
| 1086 | /* deliver */ | 1086 | /* deliver */ |
| 1087 | status = send_to_inbox(snac, inbox, msg, &payload, &p_size); | 1087 | status = send_to_inbox(snac, inbox, msg, &payload, &p_size, retries == 0 ? 3 : 8); |
| 1088 | 1088 | ||
| 1089 | snac_log(snac, xs_fmt("process_queue sent to inbox %s %d", inbox, status)); | 1089 | snac_log(snac, xs_fmt("process_queue sent to inbox %s %d", inbox, status)); |
| 1090 | 1090 | ||
| @@ -14,7 +14,8 @@ | |||
| 14 | d_char *http_signed_request(snac *snac, char *method, char *url, | 14 | d_char *http_signed_request(snac *snac, char *method, char *url, |
| 15 | d_char *headers, | 15 | d_char *headers, |
| 16 | d_char *body, int b_size, | 16 | d_char *body, int b_size, |
| 17 | int *status, d_char **payload, int *p_size) | 17 | int *status, d_char **payload, int *p_size, |
| 18 | int timeout) | ||
| 18 | /* does a signed HTTP request */ | 19 | /* does a signed HTTP request */ |
| 19 | { | 20 | { |
| 20 | xs *l1; | 21 | xs *l1; |
| @@ -95,7 +96,7 @@ d_char *http_signed_request(snac *snac, char *method, char *url, | |||
| 95 | hdrs = xs_dict_append(hdrs, "user-agent", USER_AGENT); | 96 | hdrs = xs_dict_append(hdrs, "user-agent", USER_AGENT); |
| 96 | 97 | ||
| 97 | response = xs_http_request(method, url, hdrs, | 98 | response = xs_http_request(method, url, hdrs, |
| 98 | body, b_size, status, payload, p_size); | 99 | body, b_size, status, payload, p_size, timeout); |
| 99 | 100 | ||
| 100 | srv_archive("SEND", hdrs, body, b_size, *status, response, *payload, *p_size); | 101 | srv_archive("SEND", hdrs, body, b_size, *status, response, *payload, *p_size); |
| 101 | 102 | ||
| @@ -138,7 +138,8 @@ void purge_all(void); | |||
| 138 | d_char *http_signed_request(snac *snac, char *method, char *url, | 138 | d_char *http_signed_request(snac *snac, char *method, char *url, |
| 139 | d_char *headers, | 139 | d_char *headers, |
| 140 | d_char *body, int b_size, | 140 | d_char *body, int b_size, |
| 141 | int *status, d_char **payload, int *p_size); | 141 | int *status, d_char **payload, int *p_size, |
| 142 | int timeout); | ||
| 142 | int check_signature(snac *snac, char *req); | 143 | int check_signature(snac *snac, char *req); |
| 143 | 144 | ||
| 144 | void httpd(void); | 145 | void httpd(void); |
| @@ -158,9 +159,9 @@ d_char *msg_update(snac *snac, char *object); | |||
| 158 | 159 | ||
| 159 | int activitypub_request(snac *snac, char *url, d_char **data); | 160 | int activitypub_request(snac *snac, char *url, d_char **data); |
| 160 | int actor_request(snac *snac, char *actor, d_char **data); | 161 | int actor_request(snac *snac, char *actor, d_char **data); |
| 161 | int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size); | 162 | int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size, int timeout); |
| 162 | d_char *get_actor_inbox(snac *snac, char *actor); | 163 | d_char *get_actor_inbox(snac *snac, char *actor); |
| 163 | int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size); | 164 | int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout); |
| 164 | int is_msg_public(snac *snac, char *msg); | 165 | int is_msg_public(snac *snac, char *msg); |
| 165 | void process_queue(snac *snac); | 166 | void process_queue(snac *snac); |
| 166 | void post(snac *snac, char *msg); | 167 | void post(snac *snac, char *msg); |
diff --git a/webfinger.c b/webfinger.c index 0811bca..4d1abe6 100644 --- a/webfinger.c +++ b/webfinger.c | |||
| @@ -64,7 +64,7 @@ int webfinger_request(char *qs, char **actor, char **user) | |||
| 64 | else { | 64 | else { |
| 65 | xs *url = xs_fmt("https:/" "/%s/.well-known/webfinger?resource=%s", host, resource); | 65 | xs *url = xs_fmt("https:/" "/%s/.well-known/webfinger?resource=%s", host, resource); |
| 66 | 66 | ||
| 67 | xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size); | 67 | xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size, 0); |
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | if (valid_status(status)) { | 70 | if (valid_status(status)) { |
| @@ -5,8 +5,8 @@ | |||
| 5 | #define _XS_CURL_H | 5 | #define _XS_CURL_H |
| 6 | 6 | ||
| 7 | d_char *xs_http_request(char *method, char *url, d_char *headers, | 7 | d_char *xs_http_request(char *method, char *url, d_char *headers, |
| 8 | d_char *body, int b_size, | 8 | d_char *body, int b_size, int *status, |
| 9 | int *status, d_char **payload, int *p_size); | 9 | d_char **payload, int *p_size, int timeout); |
| 10 | 10 | ||
| 11 | #ifdef XS_IMPLEMENTATION | 11 | #ifdef XS_IMPLEMENTATION |
| 12 | 12 | ||
| @@ -84,8 +84,8 @@ static int _post_callback(char *buffer, size_t size, | |||
| 84 | 84 | ||
| 85 | 85 | ||
| 86 | d_char *xs_http_request(char *method, char *url, d_char *headers, | 86 | d_char *xs_http_request(char *method, char *url, d_char *headers, |
| 87 | d_char *body, int b_size, | 87 | d_char *body, int b_size, int *status, |
| 88 | int *status, d_char **payload, int *p_size) | 88 | d_char **payload, int *p_size, int timeout) |
| 89 | /* does an HTTP request */ | 89 | /* does an HTTP request */ |
| 90 | { | 90 | { |
| 91 | d_char *response; | 91 | d_char *response; |
| @@ -101,7 +101,10 @@ d_char *xs_http_request(char *method, char *url, d_char *headers, | |||
| 101 | 101 | ||
| 102 | curl_easy_setopt(curl, CURLOPT_URL, url); | 102 | curl_easy_setopt(curl, CURLOPT_URL, url); |
| 103 | 103 | ||
| 104 | curl_easy_setopt(curl, CURLOPT_TIMEOUT, 8L); | 104 | if (timeout <= 0) |
| 105 | timeout = 8; | ||
| 106 | |||
| 107 | curl_easy_setopt(curl, CURLOPT_TIMEOUT, (long) timeout); | ||
| 105 | 108 | ||
| 106 | #ifdef FORCE_HTTP_1_1 | 109 | #ifdef FORCE_HTTP_1_1 |
| 107 | /* force HTTP/1.1 */ | 110 | /* force HTTP/1.1 */ |
diff --git a/xs_version.h b/xs_version.h index 87a8874..1475b6f 100644 --- a/xs_version.h +++ b/xs_version.h | |||
| @@ -1 +1 @@ | |||
| /* e8b70248081aa9086f64861bc85a67f390c41afb */ | /* f64030f1449390169bd09bdcbb052b1a70f8002a */ | ||