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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
d1eaa348482f lib-http: Various fixes
Timo Sirainen <tss@iki.fi>
parents: 15460
diff changeset
83 struct istream *payload_input;
d1eaa348482f lib-http: Various fixes
Timo Sirainen <tss@iki.fi>
parents: 15460
diff changeset
84 uoff_t payload_size, payload_offset;
d1eaa348482f lib-http: Various fixes
Timo Sirainen <tss@iki.fi>
parents: 15460
diff changeset
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
d1eaa348482f lib-http: Various fixes
Timo Sirainen <tss@iki.fi>
parents: 15460
diff changeset
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