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
M http.c
M snac.h
+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 */