Mercurial > dovecot > core-2.2
annotate src/lib-http/http-client-private.h @ 19841:0101120789fb
lib-http: client: Gave request, connect and dns timeouts defaults that make more sense.
author | Stephan Bosch <stephan@rename-it.nl> |
---|---|
date | Fri, 26 Feb 2016 00:15:17 +0200 |
parents | 4487e5892f41 |
children | 3f6a74b9ce54 |
rev | line source |
---|---|
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1 #ifndef HTTP_CLIENT_PRIVATE_H |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
2 #define HTTP_CLIENT_PRIVATE_H |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
3 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
4 #include "connection.h" |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
5 |
16854
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
6 #include "http-url.h" |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
7 #include "http-client.h" |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
8 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
9 #define HTTP_DEFAULT_PORT 80 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
10 #define HTTPS_DEFAULT_PORT 443 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
11 |
17775
4412508cbc59
lib-http: client: Implemented support for connection failure backoff.
Stephan Bosch <stephan@rename-it.nl>
parents:
17774
diff
changeset
|
12 #define HTTP_CLIENT_CONTINUE_TIMEOUT_MSECS (1000*2) |
19841
0101120789fb
lib-http: client: Gave request, connect and dns timeouts defaults that make more sense.
Stephan Bosch <stephan@rename-it.nl>
parents:
19840
diff
changeset
|
13 #define HTTP_CLIENT_DEFAULT_REQUEST_TIMEOUT_MSECS (1000*60*1) |
0101120789fb
lib-http: client: Gave request, connect and dns timeouts defaults that make more sense.
Stephan Bosch <stephan@rename-it.nl>
parents:
19840
diff
changeset
|
14 #define HTTP_CLIENT_DEFAULT_DNS_LOOKUP_TIMEOUT_MSECS (1000*10) |
17775
4412508cbc59
lib-http: client: Implemented support for connection failure backoff.
Stephan Bosch <stephan@rename-it.nl>
parents:
17774
diff
changeset
|
15 #define HTTP_CLIENT_DEFAULT_BACKOFF_TIME_MSECS (100) |
17986
44fd142fac1e
lib-http: client: Implemented maximum for connection backoff time.
Stephan Bosch <stephan@rename-it.nl>
parents:
17972
diff
changeset
|
16 #define HTTP_CLIENT_DEFAULT_BACKOFF_MAX_TIME_MSECS (1000*60) |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
17 |
16855
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
18 enum http_response_payload_type; |
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
19 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
20 struct http_client_host; |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
21 struct http_client_queue; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
22 struct http_client_peer; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
23 struct http_client_connection; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
24 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
25 ARRAY_DEFINE_TYPE(http_client_host, struct http_client_host *); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
26 ARRAY_DEFINE_TYPE(http_client_queue, struct http_client_queue *); |
16733
bdc5d6dcfc53
lib-http: http-client: Fixed request scheduling and connection management.
Stephan Bosch <stephan@rename-it.nl>
parents:
16588
diff
changeset
|
27 ARRAY_DEFINE_TYPE(http_client_peer, struct http_client_peer *); |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
28 ARRAY_DEFINE_TYPE(http_client_connection, struct http_client_connection *); |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
29 ARRAY_DEFINE_TYPE(http_client_request, struct http_client_request *); |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
30 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
31 HASH_TABLE_DEFINE_TYPE(http_client_host, const char *, |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
32 struct http_client_host *); |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
33 HASH_TABLE_DEFINE_TYPE(http_client_peer, const struct http_client_peer_addr *, |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
34 struct http_client_peer *); |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
35 |
16855
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
36 enum http_client_peer_addr_type { |
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
37 HTTP_CLIENT_PEER_ADDR_HTTP = 0, |
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
38 HTTP_CLIENT_PEER_ADDR_HTTPS, |
16856
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
39 HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL, |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
40 HTTP_CLIENT_PEER_ADDR_RAW, |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
41 HTTP_CLIENT_PEER_ADDR_UNIX, |
16855
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
42 }; |
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
43 |
16733
bdc5d6dcfc53
lib-http: http-client: Fixed request scheduling and connection management.
Stephan Bosch <stephan@rename-it.nl>
parents:
16588
diff
changeset
|
44 struct http_client_peer_addr { |
16855
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
45 enum http_client_peer_addr_type type; |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
46 union { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
47 struct { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
48 const char *https_name; /* TLS SNI */ |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
49 struct ip_addr ip; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
50 in_port_t port; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
51 } tcp; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
52 struct { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
53 const char *path; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
54 } un; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
55 } a; |
16733
bdc5d6dcfc53
lib-http: http-client: Fixed request scheduling and connection management.
Stephan Bosch <stephan@rename-it.nl>
parents:
16588
diff
changeset
|
56 }; |
bdc5d6dcfc53
lib-http: http-client: Fixed request scheduling and connection management.
Stephan Bosch <stephan@rename-it.nl>
parents:
16588
diff
changeset
|
57 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
58 struct http_client_request { |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
59 pool_t pool; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
60 unsigned int refcount; |
16854
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
61 const char *label; |
19580
9703d0af2e3b
lib-http: Assign an ID for each HTTP request and log it in debug lines.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19039
diff
changeset
|
62 unsigned int id; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
63 |
17972
3a1d89b45c12
lib-http: client: Created list of all submitted requests.
Stephan Bosch <stephan@rename-it.nl>
parents:
17969
diff
changeset
|
64 struct http_client_request *prev, *next; |
3a1d89b45c12
lib-http: client: Created list of all submitted requests.
Stephan Bosch <stephan@rename-it.nl>
parents:
17969
diff
changeset
|
65 |
16854
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
66 const char *method, *target; |
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
67 struct http_url origin_url; |
18960
58694b53e730
lib-http client: Implemented simple authentication using Basic scheme.
Stephan Bosch <stephan@rename-it.nl>
parents:
18958
diff
changeset
|
68 const char *username, *password; |
16854
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
69 |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
70 const char *host_socket; |
16854
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
71 const struct http_url *host_url; |
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
72 const char *authority; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
73 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
74 struct http_client *client; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
75 struct http_client_host *host; |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
76 struct http_client_queue *queue; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
77 struct http_client_peer *peer; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
78 struct http_client_connection *conn; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
79 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
80 string_t *headers; |
16737
e83f3d16a31d
lib-http: http-client: Requests now automatically generate a Date header.
Stephan Bosch <stephan@rename-it.nl>
parents:
16736
diff
changeset
|
81 time_t date; |
e83f3d16a31d
lib-http: http-client: Requests now automatically generate a Date header.
Stephan Bosch <stephan@rename-it.nl>
parents:
16736
diff
changeset
|
82 |
15579 | 83 struct istream *payload_input; |
84 uoff_t payload_size, payload_offset; | |
85 struct ostream *payload_output; | |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
86 |
17005
d2f2423615d7
http: Implemented delayed requests scheduling.
Stephan Bosch <stephan@rename-it.nl>
parents:
17003
diff
changeset
|
87 struct timeval release_time; |
17625
b162e39909d7
lib-http: Debug log now includes where HTTP requests spent their time on.
Timo Sirainen <tss@iki.fi>
parents:
17005
diff
changeset
|
88 struct timeval submit_time; |
b162e39909d7
lib-http: Debug log now includes where HTTP requests spent their time on.
Timo Sirainen <tss@iki.fi>
parents:
17005
diff
changeset
|
89 struct timeval sent_time; |
b162e39909d7
lib-http: Debug log now includes where HTTP requests spent their time on.
Timo Sirainen <tss@iki.fi>
parents:
17005
diff
changeset
|
90 struct timeval response_time; |
17881
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
91 struct timeval timeout_time; |
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
92 unsigned int timeout_msecs; |
17005
d2f2423615d7
http: Implemented delayed requests scheduling.
Stephan Bosch <stephan@rename-it.nl>
parents:
17003
diff
changeset
|
93 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
94 unsigned int attempts; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
95 unsigned int redirects; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
96 |
16147
b4927eea33fd
lib-http: If http_client_request_submit() fails, don't immediately call the callback.
Timo Sirainen <tss@iki.fi>
parents:
16143
diff
changeset
|
97 unsigned int delayed_error_status; |
b4927eea33fd
lib-http: If http_client_request_submit() fails, don't immediately call the callback.
Timo Sirainen <tss@iki.fi>
parents:
16143
diff
changeset
|
98 const char *delayed_error; |
b4927eea33fd
lib-http: If http_client_request_submit() fails, don't immediately call the callback.
Timo Sirainen <tss@iki.fi>
parents:
16143
diff
changeset
|
99 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
100 http_client_request_callback_t *callback; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
101 void *context; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
102 |
15723
e11b9ba8b90a
lib-http: Added http_client_request_set_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
15710
diff
changeset
|
103 void (*destroy_callback)(void *); |
e11b9ba8b90a
lib-http: Added http_client_request_set_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
15710
diff
changeset
|
104 void *destroy_context; |
e11b9ba8b90a
lib-http: Added http_client_request_set_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
15710
diff
changeset
|
105 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
106 enum http_request_state state; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
107 |
18960
58694b53e730
lib-http client: Implemented simple authentication using Basic scheme.
Stephan Bosch <stephan@rename-it.nl>
parents:
18958
diff
changeset
|
108 unsigned int have_hdr_authorization:1; |
18958
5653b61d4c73
lib-http client: Minor whitespace cleanups in struct http_client_request.
Stephan Bosch <stephan@rename-it.nl>
parents:
18001
diff
changeset
|
109 unsigned int have_hdr_body_spec:1; |
5653b61d4c73
lib-http client: Minor whitespace cleanups in struct http_client_request.
Stephan Bosch <stephan@rename-it.nl>
parents:
18001
diff
changeset
|
110 unsigned int have_hdr_connection:1; |
5653b61d4c73
lib-http client: Minor whitespace cleanups in struct http_client_request.
Stephan Bosch <stephan@rename-it.nl>
parents:
18001
diff
changeset
|
111 unsigned int have_hdr_date:1; |
16758
145be4e876a8
lib-http: http-client: Allow overriding all implicitly generated special headers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16739
diff
changeset
|
112 unsigned int have_hdr_expect:1; |
18958
5653b61d4c73
lib-http client: Minor whitespace cleanups in struct http_client_request.
Stephan Bosch <stephan@rename-it.nl>
parents:
18001
diff
changeset
|
113 unsigned int have_hdr_host:1; |
16837
fe009d4ba4ed
lib-http: Added setting for User-Agent header.
Timo Sirainen <tss@iki.fi>
parents:
16758
diff
changeset
|
114 unsigned int have_hdr_user_agent:1; |
16758
145be4e876a8
lib-http: http-client: Allow overriding all implicitly generated special headers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16739
diff
changeset
|
115 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
116 unsigned int payload_sync:1; |
19727
8f72e4f0ed5d
lib-http: client: Fixed pipelining bug: client sometimes sent new request while still waiting for 100-continue.
Stephan Bosch <stephan@rename-it.nl>
parents:
19726
diff
changeset
|
117 unsigned int payload_sync_continue:1; |
15579 | 118 unsigned int payload_chunked:1; |
15710
c5230b8ffd40
lib-http: Various bugfixes
Stephan Bosch <stephan@rename-it.nl>
parents:
15579
diff
changeset
|
119 unsigned int payload_wait:1; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
120 unsigned int urgent:1; |
16147
b4927eea33fd
lib-http: If http_client_request_submit() fails, don't immediately call the callback.
Timo Sirainen <tss@iki.fi>
parents:
16143
diff
changeset
|
121 unsigned int submitted:1; |
16855
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
122 unsigned int connect_tunnel:1; |
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
123 unsigned int connect_direct:1; |
16856
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
124 unsigned int ssl_tunnel:1; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
125 }; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
126 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
127 struct http_client_connection { |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
128 struct connection conn; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
129 struct http_client_peer *peer; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
130 struct http_client *client; |
15710
c5230b8ffd40
lib-http: Various bugfixes
Stephan Bosch <stephan@rename-it.nl>
parents:
15579
diff
changeset
|
131 unsigned int refcount; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
132 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
133 const char *label; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
134 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
135 unsigned int id; // DEBUG: identify parallel connections |
16148
1bd5972eac0a
lib-http: Simplify error handling by delaying connect() failures.
Timo Sirainen <tss@iki.fi>
parents:
16147
diff
changeset
|
136 int connect_errno; |
16451
a551409911f9
lib-http: Added connect and request timeout settings.
Timo Sirainen <tss@iki.fi>
parents:
16158
diff
changeset
|
137 struct timeval connect_start_timestamp; |
a551409911f9
lib-http: Added connect and request timeout settings.
Timo Sirainen <tss@iki.fi>
parents:
16158
diff
changeset
|
138 struct timeval connected_timestamp; |
16856
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
139 struct http_client_request *connect_request; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
140 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
141 struct ssl_iostream *ssl_iostream; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
142 struct http_response_parser *http_parser; |
16451
a551409911f9
lib-http: Added connect and request timeout settings.
Timo Sirainen <tss@iki.fi>
parents:
16158
diff
changeset
|
143 struct timeout *to_connect, *to_input, *to_idle, *to_response; |
a551409911f9
lib-http: Added connect and request timeout settings.
Timo Sirainen <tss@iki.fi>
parents:
16158
diff
changeset
|
144 struct timeout *to_requests; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
145 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
146 struct http_client_request *pending_request; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
147 struct istream *incoming_payload; |
16739
a6ed95a30cb1
lib-http: Added support for asynchronous payload for requests.
Stephan Bosch <stephan@rename-it.nl>
parents:
16737
diff
changeset
|
148 struct io *io_req_payload; |
17882
77c4b78a4fa2
lib-http: Fixed detecting disconnection when ioloop is running only intermittently.
Stephan Bosch <stephan@rename-it.nl>
parents:
17881
diff
changeset
|
149 struct ioloop *last_ioloop; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
150 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
151 /* requests that have been sent, waiting for response */ |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
152 ARRAY_TYPE(http_client_request) request_wait_list; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
153 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
154 unsigned int connected:1; /* connection is connected */ |
16855
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
155 unsigned int tunneling:1; /* last sent request turns this |
c3884a6acde6
lib-http: Added support for creating CONNECT tunnels through HTTP.
Stephan Bosch <stephan@rename-it.nl>
parents:
16854
diff
changeset
|
156 connection into tunnel */ |
17987
43728039836c
lib-http: client: Fixed proxied client connect timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17986
diff
changeset
|
157 unsigned int connect_initialized:1; /* connection was initialized */ |
16580
4707096101a4
lib-http: Fix/cleanup to handling connect failures.
Timo Sirainen <tss@iki.fi>
parents:
16579
diff
changeset
|
158 unsigned int connect_succeeded:1; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
159 unsigned int closing:1; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
160 unsigned int close_indicated:1; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
161 unsigned int output_locked:1; /* output is locked; no pipelining */ |
18001
cffa8349f167
lib-http: client: Fixed handling of requests aborted while still sending payload to server.
Stephan Bosch <stephan@rename-it.nl>
parents:
18000
diff
changeset
|
162 unsigned int output_broken:1; /* output is broken; no more requests */ |
17876
ecb0ba0ce02f
lib-http: client: Fixed problem occuring when a nested ioloop was run inside a request callback using the same client.
Stephan Bosch <stephan@rename-it.nl>
parents:
17858
diff
changeset
|
163 unsigned int in_req_callback:1; /* performin request callback (busy) */ |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
164 }; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
165 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
166 struct http_client_peer { |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
167 struct http_client_peer_addr addr; |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
168 char *addr_name; |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
169 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
170 struct http_client *client; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
171 struct http_client_peer *prev, *next; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
172 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
173 /* queues using this peer */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
174 ARRAY_TYPE(http_client_queue) queues; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
175 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
176 /* active connections to this peer */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
177 ARRAY_TYPE(http_client_connection) conns; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
178 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
179 /* zero time-out for consolidating request handling */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
180 struct timeout *to_req_handling; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
181 |
17775
4412508cbc59
lib-http: client: Implemented support for connection failure backoff.
Stephan Bosch <stephan@rename-it.nl>
parents:
17774
diff
changeset
|
182 /* connection retry */ |
4412508cbc59
lib-http: client: Implemented support for connection failure backoff.
Stephan Bosch <stephan@rename-it.nl>
parents:
17774
diff
changeset
|
183 struct timeval last_failure; |
4412508cbc59
lib-http: client: Implemented support for connection failure backoff.
Stephan Bosch <stephan@rename-it.nl>
parents:
17774
diff
changeset
|
184 struct timeout *to_backoff; |
4412508cbc59
lib-http: client: Implemented support for connection failure backoff.
Stephan Bosch <stephan@rename-it.nl>
parents:
17774
diff
changeset
|
185 unsigned int backoff_time_msecs; |
4412508cbc59
lib-http: client: Implemented support for connection failure backoff.
Stephan Bosch <stephan@rename-it.nl>
parents:
17774
diff
changeset
|
186 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
187 unsigned int destroyed:1; /* peer is being destroyed */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
188 unsigned int no_payload_sync:1; /* expect: 100-continue failed before */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
189 unsigned int seen_100_response:1;/* expect: 100-continue succeeded before */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
190 unsigned int allows_pipelining:1;/* peer is known to allow persistent |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
191 connections */ |
19840
4487e5892f41
lib-http: client: Fixed crash happening when connection hits an error while handling a new request.
Stephan Bosch <stephan@rename-it.nl>
parents:
19817
diff
changeset
|
192 unsigned int handling_requests:1;/* currently running request handler */ |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
193 }; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
194 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
195 struct http_client_queue { |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
196 struct http_client *client; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
197 struct http_client_host *host; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
198 char *name; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
199 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
200 struct http_client_peer_addr addr; |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
201 char *addr_name; |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
202 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
203 /* current index in host->ips */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
204 unsigned int ips_connect_idx; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
205 /* the first IP that started the current round of connection attempts. |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
206 initially 0, and later set to the ip index of the last successful |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
207 connected IP */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
208 unsigned int ips_connect_start_idx; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
209 |
17774
650629de6a73
lib-http: client: Added support for attempting a single IP several times.
Stephan Bosch <stephan@rename-it.nl>
parents:
17625
diff
changeset
|
210 unsigned int connect_attempts; |
650629de6a73
lib-http: client: Added support for attempting a single IP several times.
Stephan Bosch <stephan@rename-it.nl>
parents:
17625
diff
changeset
|
211 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
212 /* peers we are trying to connect to; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
213 this can be more than one when soft connect timeouts are enabled */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
214 ARRAY_TYPE(http_client_peer) pending_peers; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
215 |
17881
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
216 /* all requests associated to this queue |
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
217 (ordered by earliest timeout first) */ |
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
218 ARRAY_TYPE(http_client_request) requests; |
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
219 |
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
220 /* delayed requests waiting to be released after delay */ |
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
221 ARRAY_TYPE(http_client_request) delayed_requests; |
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
222 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
223 /* requests pending in queue to be picked up by connections */ |
17881
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
224 ARRAY_TYPE(http_client_request) queued_requests, queued_urgent_requests; |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
225 |
17881
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
226 struct timeout *to_connect, *to_request, *to_delayed; |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
227 }; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
228 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
229 struct http_client_host { |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
230 struct http_client_host *prev, *next; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
231 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
232 struct http_client *client; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
233 char *name; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
234 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
235 /* the ip addresses DNS returned for this host */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
236 unsigned int ips_count; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
237 struct ip_addr *ips; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
238 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
239 /* requests are managed on a per-port basis */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
240 ARRAY_TYPE(http_client_queue) queues; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
241 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
242 /* active DNS lookup */ |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
243 struct dns_lookup *dns_lookup; |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
244 |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
245 unsigned int unix_local:1; |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
246 }; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
247 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
248 struct http_client { |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
249 pool_t pool; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
250 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
251 struct http_client_settings set; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
252 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
253 struct ioloop *ioloop; |
16143
cb4dc46f3327
lib-http: Each peer doesn't need a separate ssl context, enough to have one for http_client.
Timo Sirainen <tss@iki.fi>
parents:
16013
diff
changeset
|
254 struct ssl_iostream_context *ssl_ctx; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
255 |
17943
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
256 /* list of failed requests that are waiting for ioloop */ |
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
257 ARRAY(struct http_client_request *) delayed_failing_requests; |
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
258 struct timeout *to_failing_requests; |
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
259 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
260 struct connection_list *conn_list; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
261 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
262 HASH_TABLE_TYPE(http_client_host) hosts; |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
263 struct http_client_host *unix_host; |
15972
4655adf5affc
lib-http: Track list of hosts using a linked list also.
Timo Sirainen <tss@iki.fi>
parents:
15723
diff
changeset
|
264 struct http_client_host *hosts_list; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
265 HASH_TABLE_TYPE(http_client_peer) peers; |
15976
287e48607c96
lib-http: Track peers using a linked list also.
Timo Sirainen <tss@iki.fi>
parents:
15972
diff
changeset
|
266 struct http_client_peer *peers_list; |
17972
3a1d89b45c12
lib-http: client: Created list of all submitted requests.
Stephan Bosch <stephan@rename-it.nl>
parents:
17969
diff
changeset
|
267 struct http_client_request *requests_list; |
3a1d89b45c12
lib-http: client: Created list of all submitted requests.
Stephan Bosch <stephan@rename-it.nl>
parents:
17969
diff
changeset
|
268 unsigned int requests_count; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
269 }; |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
270 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
271 int http_client_init_ssl_ctx(struct http_client *client, const char **error_r); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
272 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
273 void http_client_request_ref(struct http_client_request *req); |
19817
fa23955f6028
lib-http: http_client_request_unref() now always sets *req=NULL
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19816
diff
changeset
|
274 /* Returns FALSE if unrefing destroyed the request entirely */ |
fa23955f6028
lib-http: http_client_request_unref() now always sets *req=NULL
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19816
diff
changeset
|
275 bool http_client_request_unref(struct http_client_request **_req); |
19726
f40f5e721744
lib-http: client: Make sure that any pending request is aborted and destroyed before connection FDs are closed.
Stephan Bosch <stephan@rename-it.nl>
parents:
19580
diff
changeset
|
276 void http_client_request_destroy(struct http_client_request **_req); |
f40f5e721744
lib-http: client: Make sure that any pending request is aborted and destroyed before connection FDs are closed.
Stephan Bosch <stephan@rename-it.nl>
parents:
19580
diff
changeset
|
277 |
17005
d2f2423615d7
http: Implemented delayed requests scheduling.
Stephan Bosch <stephan@rename-it.nl>
parents:
17003
diff
changeset
|
278 int http_client_request_delay_from_response(struct http_client_request *req, |
d2f2423615d7
http: Implemented delayed requests scheduling.
Stephan Bosch <stephan@rename-it.nl>
parents:
17003
diff
changeset
|
279 const struct http_response *response); |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
280 void http_client_request_get_peer_addr(const struct http_client_request *req, |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
281 struct http_client_peer_addr *addr); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
282 enum http_response_payload_type |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
283 http_client_request_get_payload_type(struct http_client_request *req); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
284 int http_client_request_send(struct http_client_request *req, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
285 const char **error_r); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
286 int http_client_request_send_more(struct http_client_request *req, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
287 const char **error_r); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
288 bool http_client_request_callback(struct http_client_request *req, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
289 struct http_response *response); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
290 void http_client_request_connect_callback(struct http_client_request *req, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
291 const struct http_client_tunnel *tunnel, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
292 struct http_response *response); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
293 void http_client_request_resubmit(struct http_client_request *req); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
294 void http_client_request_retry(struct http_client_request *req, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
295 unsigned int status, const char *error); |
17003
6b48a5675512
http-client: Improved handing of delayed request errors.
Stephan Bosch <stephan@rename-it.nl>
parents:
17002
diff
changeset
|
296 void http_client_request_error_delayed(struct http_client_request **_req); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
297 void http_client_request_error(struct http_client_request *req, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
298 unsigned int status, const char *error); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
299 void http_client_request_redirect(struct http_client_request *req, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
300 unsigned int status, const char *location); |
19817
fa23955f6028
lib-http: http_client_request_unref() now always sets *req=NULL
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19816
diff
changeset
|
301 void http_client_request_finish(struct http_client_request *req); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
302 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
303 struct connection_list *http_client_connection_list_init(void); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
304 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
305 struct http_client_connection * |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
306 http_client_connection_create(struct http_client_peer *peer); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
307 void http_client_connection_ref(struct http_client_connection *conn); |
19816
e2f9c117aef7
lib-http: http_client_connection_unref() now always sets *conn=NULL
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19727
diff
changeset
|
308 /* Returns FALSE if unrefing destroyed the connection entirely */ |
e2f9c117aef7
lib-http: http_client_connection_unref() now always sets *conn=NULL
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19727
diff
changeset
|
309 bool http_client_connection_unref(struct http_client_connection **_conn); |
17968
c5f81685571f
lib-http: client: Fixed handling of connection timeouts.
Stephan Bosch <stephan@rename-it.nl>
parents:
17943
diff
changeset
|
310 void http_client_connection_close(struct http_client_connection **_conn); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
311 int http_client_connection_output(struct http_client_connection *conn); |
18969
a08e79a3707f
lib-http: client: Fixed handling of request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
18961
diff
changeset
|
312 void http_client_connection_start_request_timeout( |
a08e79a3707f
lib-http: client: Fixed handling of request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
18961
diff
changeset
|
313 struct http_client_connection *conn); |
a08e79a3707f
lib-http: client: Fixed handling of request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
18961
diff
changeset
|
314 void http_client_connection_reset_request_timeout( |
a08e79a3707f
lib-http: client: Fixed handling of request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
18961
diff
changeset
|
315 struct http_client_connection *conn); |
a08e79a3707f
lib-http: client: Fixed handling of request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
18961
diff
changeset
|
316 void http_client_connection_stop_request_timeout( |
a08e79a3707f
lib-http: client: Fixed handling of request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
18961
diff
changeset
|
317 struct http_client_connection *conn); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
318 unsigned int |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
319 http_client_connection_count_pending(struct http_client_connection *conn); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
320 bool http_client_connection_is_ready(struct http_client_connection *conn); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
321 bool http_client_connection_is_idle(struct http_client_connection *conn); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
322 int http_client_connection_next_request(struct http_client_connection *conn); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
323 void http_client_connection_check_idle(struct http_client_connection *conn); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
324 void http_client_connection_switch_ioloop(struct http_client_connection *conn); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
325 void http_client_connection_start_tunnel(struct http_client_connection **_conn, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
326 struct http_client_tunnel *tunnel); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
327 |
18969
a08e79a3707f
lib-http: client: Fixed handling of request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
18961
diff
changeset
|
328 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
329 unsigned int http_client_peer_addr_hash |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
330 (const struct http_client_peer_addr *peer) ATTR_PURE; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
331 int http_client_peer_addr_cmp |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
332 (const struct http_client_peer_addr *peer1, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
333 const struct http_client_peer_addr *peer2) ATTR_PURE; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
334 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
335 struct http_client_peer * |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
336 http_client_peer_get(struct http_client *client, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
337 const struct http_client_peer_addr *addr); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
338 void http_client_peer_free(struct http_client_peer **_peer); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
339 bool http_client_peer_have_queue(struct http_client_peer *peer, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
340 struct http_client_queue *queue); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
341 void http_client_peer_link_queue(struct http_client_peer *peer, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
342 struct http_client_queue *queue); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
343 void http_client_peer_unlink_queue(struct http_client_peer *peer, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
344 struct http_client_queue *queue); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
345 struct http_client_request * |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
346 http_client_peer_claim_request(struct http_client_peer *peer, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
347 bool no_urgent); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
348 void http_client_peer_trigger_request_handler(struct http_client_peer *peer); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
349 void http_client_peer_connection_success(struct http_client_peer *peer); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
350 void http_client_peer_connection_failure(struct http_client_peer *peer, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
351 const char *reason); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
352 void http_client_peer_connection_lost(struct http_client_peer *peer); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
353 bool http_client_peer_is_connected(struct http_client_peer *peer); |
17858
548cb71d63da
lib-http: client: Fixed recovery after connection failure.
Stephan Bosch <stephan@rename-it.nl>
parents:
17775
diff
changeset
|
354 unsigned int |
548cb71d63da
lib-http: client: Fixed recovery after connection failure.
Stephan Bosch <stephan@rename-it.nl>
parents:
17775
diff
changeset
|
355 http_client_peer_idle_connections(struct http_client_peer *peer); |
548cb71d63da
lib-http: client: Fixed recovery after connection failure.
Stephan Bosch <stephan@rename-it.nl>
parents:
17775
diff
changeset
|
356 unsigned int |
548cb71d63da
lib-http: client: Fixed recovery after connection failure.
Stephan Bosch <stephan@rename-it.nl>
parents:
17775
diff
changeset
|
357 http_client_peer_pending_connections(struct http_client_peer *peer); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
358 void http_client_peer_switch_ioloop(struct http_client_peer *peer); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
359 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
360 struct http_client_queue * |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
361 http_client_queue_create(struct http_client_host *host, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
362 const struct http_client_peer_addr *addr); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
363 void http_client_queue_free(struct http_client_queue *queue); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
364 void http_client_queue_fail(struct http_client_queue *queue, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
365 unsigned int status, const char *error); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
366 void http_client_queue_connection_setup(struct http_client_queue *queue); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
367 void http_client_queue_submit_request(struct http_client_queue *queue, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
368 struct http_client_request *req); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
369 void |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
370 http_client_queue_drop_request(struct http_client_queue *queue, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
371 struct http_client_request *req); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
372 struct http_client_request * |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
373 http_client_queue_claim_request(struct http_client_queue *queue, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
374 const struct http_client_peer_addr *addr, bool no_urgent); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
375 unsigned int |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
376 http_client_queue_requests_pending(struct http_client_queue *queue, |
17881
4f175c27bea5
lib-http: client: Added support for absolute request timeout.
Stephan Bosch <stephan@rename-it.nl>
parents:
17876
diff
changeset
|
377 unsigned int *num_urgent_r) ATTR_NULL(2); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
378 void |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
379 http_client_queue_connection_success(struct http_client_queue *queue, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
380 const struct http_client_peer_addr *addr); |
17969
c9ea647cba87
lib-http: client: Fixed behavior for max_connect_attempts with fewer IPs than attempts.
Stephan Bosch <stephan@rename-it.nl>
parents:
17968
diff
changeset
|
381 void http_client_queue_connection_failure(struct http_client_queue *queue, |
c9ea647cba87
lib-http: client: Fixed behavior for max_connect_attempts with fewer IPs than attempts.
Stephan Bosch <stephan@rename-it.nl>
parents:
17968
diff
changeset
|
382 const struct http_client_peer_addr *addr, const char *reason); |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
383 void http_client_queue_switch_ioloop(struct http_client_queue *queue); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
384 |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
385 struct http_client_host * |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
386 http_client_host_get(struct http_client *client, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
387 const struct http_url *host_url); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
388 void http_client_host_free(struct http_client_host **_host); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
389 void http_client_host_submit_request(struct http_client_host *host, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
390 struct http_client_request *req); |
17943
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
391 void http_client_host_switch_ioloop(struct http_client_host *host); |
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
392 |
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
393 void http_client_delay_request_error(struct http_client *client, |
17003
6b48a5675512
http-client: Improved handing of delayed request errors.
Stephan Bosch <stephan@rename-it.nl>
parents:
17002
diff
changeset
|
394 struct http_client_request *req); |
17943
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
395 void http_client_remove_request_error(struct http_client *client, |
17003
6b48a5675512
http-client: Improved handing of delayed request errors.
Stephan Bosch <stephan@rename-it.nl>
parents:
17002
diff
changeset
|
396 struct http_client_request *req); |
17943
0086d1e38c7a
lib-http: client: Moved delayed failed requests from host to client object.
Stephan Bosch <stephan@rename-it.nl>
parents:
17882
diff
changeset
|
397 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
398 |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
399 static inline bool |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
400 http_client_peer_addr_is_https(const struct http_client_peer_addr *addr) |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
401 { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
402 switch (addr->type) { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
403 case HTTP_CLIENT_PEER_ADDR_HTTPS: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
404 case HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
405 return TRUE; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
406 default: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
407 break; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
408 } |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
409 return FALSE; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
410 } |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
411 |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
412 static inline const char * |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
413 http_client_peer_addr_get_https_name(const struct http_client_peer_addr *addr) |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
414 { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
415 switch (addr->type) { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
416 case HTTP_CLIENT_PEER_ADDR_HTTPS: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
417 case HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
418 return addr->a.tcp.https_name; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
419 default: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
420 break; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
421 } |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
422 return NULL; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
423 } |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
424 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
425 static inline const char * |
16736
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
426 http_client_peer_addr2str(const struct http_client_peer_addr *addr) |
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
427 { |
19039
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
428 switch (addr->type) { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
429 case HTTP_CLIENT_PEER_ADDR_HTTP: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
430 case HTTP_CLIENT_PEER_ADDR_HTTPS: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
431 case HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
432 case HTTP_CLIENT_PEER_ADDR_RAW: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
433 if (addr->a.tcp.ip.family == AF_INET6) { |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
434 return t_strdup_printf("[%s]:%u", |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
435 net_ip2addr(&addr->a.tcp.ip), addr->a.tcp.port); |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
436 } |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
437 return t_strdup_printf("%s:%u", |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
438 net_ip2addr(&addr->a.tcp.ip), addr->a.tcp.port); |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
439 case HTTP_CLIENT_PEER_ADDR_UNIX: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
440 return t_strdup_printf("unix:%s", addr->a.un.path); |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
441 default: |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
442 break; |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
443 } |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
444 i_unreached(); |
8f8f768937f5
http-client: Added support for using an HTTP proxy running on a unix socket.
Stephan Bosch <stephan@rename-it.nl>
parents:
18969
diff
changeset
|
445 return ""; |
16736
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
446 } |
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
447 |
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
448 static inline const char * |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
449 http_client_request_label(struct http_client_request *req) |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
450 { |
16854
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
451 if (req->label == NULL) { |
19580
9703d0af2e3b
lib-http: Assign an ID for each HTTP request and log it in debug lines.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19039
diff
changeset
|
452 return t_strdup_printf("[Req%u: %s %s%s]", req->id, |
16854
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
453 req->method, http_url_create(&req->origin_url), req->target); |
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
454 } |
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
455 return req->label; |
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
456 } |
462ae2cb8094
lib-http: http-client: Implemented proxy support.
Stephan Bosch <stephan@rename-it.nl>
parents:
16852
diff
changeset
|
457 |
18961
5c53d13a30ab
lib-http client: Added inline function to check whether request is directed at a proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
18960
diff
changeset
|
458 static inline bool |
5c53d13a30ab
lib-http client: Added inline function to check whether request is directed at a proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
18960
diff
changeset
|
459 http_client_request_to_proxy(const struct http_client_request *req) |
5c53d13a30ab
lib-http client: Added inline function to check whether request is directed at a proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
18960
diff
changeset
|
460 { |
5c53d13a30ab
lib-http client: Added inline function to check whether request is directed at a proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
18960
diff
changeset
|
461 return (req->host_url != &req->origin_url); |
5c53d13a30ab
lib-http client: Added inline function to check whether request is directed at a proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
18960
diff
changeset
|
462 } |
5c53d13a30ab
lib-http client: Added inline function to check whether request is directed at a proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
18960
diff
changeset
|
463 |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
464 static inline const char * |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
465 http_client_connection_label(struct http_client_connection *conn) |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
466 { |
16856
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
467 return t_strdup_printf("%s%s [%d]", |
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
468 http_client_peer_addr2str(&conn->peer->addr), |
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
469 (conn->peer->addr.type == HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL ? |
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
470 " (tunnel)" : ""), conn->id); |
16736
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
471 } |
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
472 |
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
473 static inline const char * |
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
474 http_client_peer_label(struct http_client_peer *peer) |
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
475 { |
16856
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
476 if (peer->addr.type == HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL) { |
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
477 return t_strconcat |
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
478 (http_client_peer_addr2str(&peer->addr), " (tunnel)", NULL); |
b9498573f0d0
lib-http: http-client: Added support for tunneling SSL conntections through proxy.
Stephan Bosch <stephan@rename-it.nl>
parents:
16855
diff
changeset
|
479 } |
16736
bb6506d2d084
lib-http: Fixed client connection and peer log labels to show proper IPv6 peers.
Stephan Bosch <stephan@rename-it.nl>
parents:
16735
diff
changeset
|
480 return http_client_peer_addr2str(&peer->addr); |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
481 } |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
482 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
483 static inline unsigned int |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
484 http_client_host_get_ip_idx(struct http_client_host *host, |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
485 const struct ip_addr *ip) |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
486 { |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
487 unsigned int i; |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
488 |
17002
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
489 for (i = 0; i < host->ips_count; i++) { |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
490 if (net_ip_compare(&host->ips[i], ip)) |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
491 return i; |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
492 } |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
493 i_unreached(); |
160e489d7c12
http-client: Changed struct http_client_host_port into a struct http_client_queue object.
Stephan Bosch <stephan@rename-it.nl>
parents:
16856
diff
changeset
|
494 } |
15394
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
495 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
496 |
107c8b2c9594
lib-http: Added initial HTTP client implementation.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
497 #endif |