forked from kieselsteini/delve
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathhttp.c
More file actions
58 lines (43 loc) · 1.9 KB
/
Copy pathhttp.c
File metadata and controls
58 lines (43 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
================================================================================
gplaces - a simple terminal Gemini client
Copyright (C) 2025 Dima Krasner
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
================================================================================
*/
static void *http_download(const Selector *sel, URL *url, char **mime, Parser *parser, unsigned int redirs, int ask) {
const char *http_proxy;
const Protocol *oldproto = url->proto;
const URL *oldproxy = url->proxy;
SSL *ssl = NULL;
URL proxy = {0};
(void)sel;
if ((http_proxy = set_var(&variables, "HTTP_PROXY", NULL)) == NULL || *http_proxy == '\0') {
error(0, "no proxy for `%s`", url->url);
return NULL;
}
if (!parse_url(&proxy, http_proxy, NULL, NULL)) {
free_url(&proxy);
error(0, "invalid proxy for `%s`", url->url);
return NULL;
}
fprintf(stderr, "proxying %s through %s\n", url->url, http_proxy);
url->proxy = &proxy;
url->proto = &gemini;
ssl = gemini_download(sel, url, mime, parser, redirs, ask);
url->proxy = oldproxy;
url->proto = oldproto;
free_url(&proxy);
return ssl;
}
const Protocol http = {"http", "80", ssl_read, ssl_peek, ssl_error, ssl_close, http_download, set_query};
const Protocol https = {"https", "443", ssl_read, ssl_peek, ssl_error, ssl_close, http_download, set_query};