summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--activitypub.c12
-rw-r--r--http.c5
-rw-r--r--snac.h7
-rw-r--r--webfinger.c2
-rw-r--r--xs_curl.h13
-rw-r--r--xs_version.h2
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
134int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size) 134int 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
170int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size) 170int 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
diff --git a/http.c b/http.c
index 54268e5..881a7e0 100644
--- a/http.c
+++ b/http.c
@@ -14,7 +14,8 @@
14d_char *http_signed_request(snac *snac, char *method, char *url, 14d_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
diff --git a/snac.h b/snac.h
index 2041855..c8ca4d4 100644
--- a/snac.h
+++ b/snac.h
@@ -138,7 +138,8 @@ void purge_all(void);
138d_char *http_signed_request(snac *snac, char *method, char *url, 138d_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);
142int check_signature(snac *snac, char *req); 143int check_signature(snac *snac, char *req);
143 144
144void httpd(void); 145void httpd(void);
@@ -158,9 +159,9 @@ d_char *msg_update(snac *snac, char *object);
158 159
159int activitypub_request(snac *snac, char *url, d_char **data); 160int activitypub_request(snac *snac, char *url, d_char **data);
160int actor_request(snac *snac, char *actor, d_char **data); 161int actor_request(snac *snac, char *actor, d_char **data);
161int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size); 162int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_size, int timeout);
162d_char *get_actor_inbox(snac *snac, char *actor); 163d_char *get_actor_inbox(snac *snac, char *actor);
163int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size); 164int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout);
164int is_msg_public(snac *snac, char *msg); 165int is_msg_public(snac *snac, char *msg);
165void process_queue(snac *snac); 166void process_queue(snac *snac);
166void post(snac *snac, char *msg); 167void 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)) {
diff --git a/xs_curl.h b/xs_curl.h
index bed643c..09f51d6 100644
--- a/xs_curl.h
+++ b/xs_curl.h
@@ -5,8 +5,8 @@
5#define _XS_CURL_H 5#define _XS_CURL_H
6 6
7d_char *xs_http_request(char *method, char *url, d_char *headers, 7d_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
86d_char *xs_http_request(char *method, char *url, d_char *headers, 86d_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 */