commit fd1e281
default
·
2023-01-24 14:06:58 +0000 UTC
parent 4baf56c
Use a shorter timeout for first output connections.
6 files changed,
+23,
-18
+6,
-6
1@@ -31,7 +31,7 @@ int activitypub_request(snac *snac, char *url, d_char **data)
2
3 /* get from the net */
4 response = http_signed_request(snac, "GET", url,
5- NULL, NULL, 0, &status, &payload, &p_size);
6+ NULL, NULL, 0, &status, &payload, &p_size, 0);
7
8 if (valid_status(status)) {
9 /* ensure it's ActivityPub data */
10@@ -131,7 +131,7 @@ int timeline_request(snac *snac, char **id, d_char **wrk)
11 }
12
13
14-int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size)
15+int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size, int timeout)
16 /* sends a message to an Inbox */
17 {
18 int status;
19@@ -139,7 +139,7 @@ int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_s
20 xs *j_msg = xs_json_dumps_pp(msg, 4);
21
22 response = http_signed_request(snac, "POST", inbox,
23- NULL, j_msg, strlen(j_msg), &status, payload, p_size);
24+ NULL, j_msg, strlen(j_msg), &status, payload, p_size, timeout);
25
26 xs_free(response);
27
28@@ -167,14 +167,14 @@ d_char *get_actor_inbox(snac *snac, char *actor)
29 }
30
31
32-int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size)
33+int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout)
34 /* sends a message to an actor */
35 {
36 int status = 400;
37 xs *inbox = get_actor_inbox(snac, actor);
38
39 if (!xs_is_null(inbox))
40- status = send_to_inbox(snac, inbox, msg, payload, p_size);
41+ status = send_to_inbox(snac, inbox, msg, payload, p_size, timeout);
42
43 return status;
44 }
45@@ -1084,7 +1084,7 @@ void process_queue(snac *snac)
46 continue;
47
48 /* deliver */
49- status = send_to_inbox(snac, inbox, msg, &payload, &p_size);
50+ status = send_to_inbox(snac, inbox, msg, &payload, &p_size, retries == 0 ? 3 : 8);
51
52 snac_log(snac, xs_fmt("process_queue sent to inbox %s %d", inbox, status));
53
M
http.c
+3,
-2
1@@ -14,7 +14,8 @@
2 d_char *http_signed_request(snac *snac, char *method, char *url,
3 d_char *headers,
4 d_char *body, int b_size,
5- int *status, d_char **payload, int *p_size)
6+ int *status, d_char **payload, int *p_size,
7+ int timeout)
8 /* does a signed HTTP request */
9 {
10 xs *l1;
11@@ -95,7 +96,7 @@ d_char *http_signed_request(snac *snac, char *method, char *url,
12 hdrs = xs_dict_append(hdrs, "user-agent", USER_AGENT);
13
14 response = xs_http_request(method, url, hdrs,
15- body, b_size, status, payload, p_size);
16+ body, b_size, status, payload, p_size, timeout);
17
18 srv_archive("SEND", hdrs, body, b_size, *status, response, *payload, *p_size);
19
M
snac.h
+4,
-3
1@@ -138,7 +138,8 @@ void purge_all(void);
2 d_char *http_signed_request(snac *snac, char *method, char *url,
3 d_char *headers,
4 d_char *body, int b_size,
5- int *status, d_char **payload, int *p_size);
6+ int *status, d_char **payload, int *p_size,
7+ int timeout);
8 int check_signature(snac *snac, char *req);
9
10 void httpd(void);
11@@ -158,9 +159,9 @@ d_char *msg_update(snac *snac, char *object);
12
13 int activitypub_request(snac *snac, char *url, d_char **data);
14 int actor_request(snac *snac, char *actor, d_char **data);
15-int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size);
16+int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size, int timeout);
17 d_char *get_actor_inbox(snac *snac, char *actor);
18-int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size);
19+int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout);
20 int is_msg_public(snac *snac, char *msg);
21 void process_queue(snac *snac);
22 void post(snac *snac, char *msg);
+1,
-1
1@@ -64,7 +64,7 @@ int webfinger_request(char *qs, char **actor, char **user)
2 else {
3 xs *url = xs_fmt("https:/" "/%s/.well-known/webfinger?resource=%s", host, resource);
4
5- xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size);
6+ xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size, 0);
7 }
8
9 if (valid_status(status)) {
+8,
-5
1@@ -5,8 +5,8 @@
2 #define _XS_CURL_H
3
4 d_char *xs_http_request(char *method, char *url, d_char *headers,
5- d_char *body, int b_size,
6- int *status, d_char **payload, int *p_size);
7+ d_char *body, int b_size, int *status,
8+ d_char **payload, int *p_size, int timeout);
9
10 #ifdef XS_IMPLEMENTATION
11
12@@ -84,8 +84,8 @@ static int _post_callback(char *buffer, size_t size,
13
14
15 d_char *xs_http_request(char *method, char *url, d_char *headers,
16- d_char *body, int b_size,
17- int *status, d_char **payload, int *p_size)
18+ d_char *body, int b_size, int *status,
19+ d_char **payload, int *p_size, int timeout)
20 /* does an HTTP request */
21 {
22 d_char *response;
23@@ -101,7 +101,10 @@ d_char *xs_http_request(char *method, char *url, d_char *headers,
24
25 curl_easy_setopt(curl, CURLOPT_URL, url);
26
27- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 8L);
28+ if (timeout <= 0)
29+ timeout = 8;
30+
31+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, (long) timeout);
32
33 #ifdef FORCE_HTTP_1_1
34 /* force HTTP/1.1 */
+1,
-1
1@@ -1 +1 @@
2-/* e8b70248081aa9086f64861bc85a67f390c41afb */
3+/* f64030f1449390169bd09bdcbb052b1a70f8002a */