Browse Source

Use a shorter timeout for first output connections.

default 2 years ago
parent
commit
fd1e281cba
6 changed files with 23 additions and 18 deletions
  1. 6 6
      activitypub.c
  2. 3 2
      http.c
  3. 4 3
      snac.h
  4. 1 1
      webfinger.c
  5. 8 5
      xs_curl.h
  6. 1 1
      xs_version.h

+ 6 - 6
activitypub.c

@@ -31,7 +31,7 @@ int activitypub_request(snac *snac, char *url, d_char **data)
 
     /* get from the net */
     response = http_signed_request(snac, "GET", url,
-        NULL, NULL, 0, &status, &payload, &p_size);
+        NULL, NULL, 0, &status, &payload, &p_size, 0);
 
     if (valid_status(status)) {
         /* ensure it's ActivityPub data */
@@ -131,7 +131,7 @@ int timeline_request(snac *snac, char **id, d_char **wrk)
 }
 
 
-int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size)
+int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size, int timeout)
 /* sends a message to an Inbox */
 {
     int status;
@@ -139,7 +139,7 @@ int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_s
     xs *j_msg = xs_json_dumps_pp(msg, 4);
 
     response = http_signed_request(snac, "POST", inbox,
-        NULL, j_msg, strlen(j_msg), &status, payload, p_size);
+        NULL, j_msg, strlen(j_msg), &status, payload, p_size, timeout);
 
     xs_free(response);
 
@@ -167,14 +167,14 @@ d_char *get_actor_inbox(snac *snac, char *actor)
 }
 
 
-int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size)
+int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout)
 /* sends a message to an actor */
 {
     int status = 400;
     xs *inbox = get_actor_inbox(snac, actor);
 
     if (!xs_is_null(inbox))
-        status = send_to_inbox(snac, inbox, msg, payload, p_size);
+        status = send_to_inbox(snac, inbox, msg, payload, p_size, timeout);
 
     return status;
 }
@@ -1084,7 +1084,7 @@ void process_queue(snac *snac)
                 continue;
 
             /* deliver */
-            status = send_to_inbox(snac, inbox, msg, &payload, &p_size);
+            status = send_to_inbox(snac, inbox, msg, &payload, &p_size, retries == 0 ? 3 : 8);
 
             snac_log(snac, xs_fmt("process_queue sent to inbox %s %d", inbox, status));
 

+ 3 - 2
http.c

@@ -14,7 +14,8 @@
 d_char *http_signed_request(snac *snac, char *method, char *url,
                             d_char *headers,
                             d_char *body, int b_size,
-                            int *status, d_char **payload, int *p_size)
+                            int *status, d_char **payload, int *p_size,
+                            int timeout)
 /* does a signed HTTP request */
 {
     xs *l1;
@@ -95,7 +96,7 @@ d_char *http_signed_request(snac *snac, char *method, char *url,
     hdrs = xs_dict_append(hdrs, "user-agent",   USER_AGENT);
 
     response = xs_http_request(method, url, hdrs,
-                           body, b_size, status, payload, p_size);
+                           body, b_size, status, payload, p_size, timeout);
 
     srv_archive("SEND", hdrs, body, b_size, *status, response, *payload, *p_size);
 

+ 4 - 3
snac.h

@@ -138,7 +138,8 @@ void purge_all(void);
 d_char *http_signed_request(snac *snac, char *method, char *url,
                         d_char *headers,
                         d_char *body, int b_size,
-                        int *status, d_char **payload, int *p_size);
+                        int *status, d_char **payload, int *p_size,
+                        int timeout);
 int check_signature(snac *snac, char *req);
 
 void httpd(void);
@@ -158,9 +159,9 @@ d_char *msg_update(snac *snac, char *object);
 
 int activitypub_request(snac *snac, char *url, d_char **data);
 int actor_request(snac *snac, char *actor, d_char **data);
-int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size);
+int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size, int timeout);
 d_char *get_actor_inbox(snac *snac, char *actor);
-int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size);
+int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout);
 int is_msg_public(snac *snac, char *msg);
 void process_queue(snac *snac);
 void post(snac *snac, char *msg);

+ 1 - 1
webfinger.c

@@ -64,7 +64,7 @@ int webfinger_request(char *qs, char **actor, char **user)
     else {
         xs *url = xs_fmt("https:/" "/%s/.well-known/webfinger?resource=%s", host, resource);
 
-        xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size);
+        xs_http_request("GET", url, headers, NULL, 0, &status, &payload, &p_size, 0);
     }
 
     if (valid_status(status)) {

+ 8 - 5
xs_curl.h

@@ -5,8 +5,8 @@
 #define _XS_CURL_H
 
 d_char *xs_http_request(char *method, char *url, d_char *headers,
-                        d_char *body, int b_size,
-                        int *status, d_char **payload, int *p_size);
+                        d_char *body, int b_size, int *status,
+                        d_char **payload, int *p_size, int timeout);
 
 #ifdef XS_IMPLEMENTATION
 
@@ -84,8 +84,8 @@ static int _post_callback(char *buffer, size_t size,
 
 
 d_char *xs_http_request(char *method, char *url, d_char *headers,
-                        d_char *body, int b_size,
-                        int *status, d_char **payload, int *p_size)
+                        d_char *body, int b_size, int *status,
+                        d_char **payload, int *p_size, int timeout)
 /* does an HTTP request */
 {
     d_char *response;
@@ -101,7 +101,10 @@ d_char *xs_http_request(char *method, char *url, d_char *headers,
 
     curl_easy_setopt(curl, CURLOPT_URL, url);
 
-    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 8L);
+    if (timeout <= 0)
+        timeout = 8;
+
+    curl_easy_setopt(curl, CURLOPT_TIMEOUT, (long) timeout);
 
 #ifdef FORCE_HTTP_1_1
     /* force HTTP/1.1 */

+ 1 - 1
xs_version.h

@@ -1 +1 @@
-/* e8b70248081aa9086f64861bc85a67f390c41afb */
+/* f64030f1449390169bd09bdcbb052b1a70f8002a */