http-client.h revision 30f35cf5d1e1374d7fab4231e86144fc106a8e79
c13fce16374a6fa8d127742c527498d38e777789Timo Sirainenextern const char *http_request_state_names[];
c13fce16374a6fa8d127742c527498d38e777789Timo Sirainen /* a) If dns_client is set, all lookups are done via it.
c13fce16374a6fa8d127742c527498d38e777789Timo Sirainen b) If dns_client_socket_path is set, each DNS lookup does its own
c13fce16374a6fa8d127742c527498d38e777789Timo Sirainen dns-lookup UNIX socket connection.
c13fce16374a6fa8d127742c527498d38e777789Timo Sirainen c) Otherwise, blocking gethostbyname() lookups are used. */
c3a2a487e23a282e59254b82deb9344ed0306bb2Timo Sirainen const char *ssl_ca_dir, *ssl_ca_file, *ssl_ca;
c3a2a487e23a282e59254b82deb9344ed0306bb2Timo Sirainen /* user cert */
c3a2a487e23a282e59254b82deb9344ed0306bb2Timo Sirainen const char *ssl_cert, *ssl_key, *ssl_key_password;
c3a2a487e23a282e59254b82deb9344ed0306bb2Timo Sirainen /* User-Agent: header (default: none) */
cf7857bce68a33cdabe88bb15568e21921eb5ac7Aki Tuomi /* configuration for using a proxy */
cf7857bce68a33cdabe88bb15568e21921eb5ac7Aki Tuomi const char *proxy_socket_path; /* FIXME: implement */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen const char *proxy_username; /* FIXME: implement */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* maximum number of parallel connections per peer (default = 1) */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* maximum number of pipelined requests per connection (default = 1) */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* don't automatically act upon redirect responses */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* if we use a proxy, delegate SSL negotiation to proxy, rather than
a356c4736fe6041142c6096045bc00c15a80af4eTimo Sirainen creating a CONNECT tunnel through the proxy for the SSL link */
a356c4736fe6041142c6096045bc00c15a80af4eTimo Sirainen /* maximum number of redirects for a request
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen (default = 0; redirects refused)
c4900d31385344bfadaee53a897daeafdb3063d8Timo Sirainen /* maximum number of attempts for a request */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* maximum number of connection attempts to a host before all associated
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen requests fail.
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen if > 1, the maximum will be enforced across all IPs for that host,
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen meaning that IPs may be tried more than once eventually if the number
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen of IPs is smaller than the specified maximum attempts. If the number of IPs
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen is higher than the maximum attempts, not all IPs are tried. If <= 1, all
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen IPs are tried at most once.
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* Initial backoff time; doubled at each connection failure */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* Maximum backoff time */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* response header limits */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen struct http_header_limits response_hdr_limits;
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* max total time to wait for HTTP request to finish
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen this can be overridden/reset for individual requests using
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen http_client_request_set_timeout() and friends.
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen (default is no timeout)
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* max time to wait for HTTP request to finish before retrying
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen (default = unlimited) */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* max time to wait for connect() (and SSL handshake) to finish before
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen retrying (default = request_timeout_msecs) */
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen /* time to wait for connect() (and SSL handshake) to finish for the first
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen connection before trying the next IP in parallel
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen (default = 0; wait until current connection attempt finishes) */
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen /* maximum acceptable delay in seconds for automatically
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen retrying/redirecting requests. if a server sends a response with a
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen Retry-After header that causes a delay longer than this, the request
caae18c876f81e261350e4957471efa453c0ea9fTimo Sirainen is not automatically retried and the response is returned */
e9d302dceba09ceefa0aaddf7eafafd760cd1736Timo Sirainenhttp_client_request_callback_t(const struct http_response *response,
e9d302dceba09ceefa0aaddf7eafafd760cd1736Timo Sirainenstruct http_client *http_client_init(const struct http_client_settings *set);
e9d302dceba09ceefa0aaddf7eafafd760cd1736Timo Sirainenvoid http_client_deinit(struct http_client **_client);
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainen/* create new HTTP request */
e9d302dceba09ceefa0aaddf7eafafd760cd1736Timo Sirainenhttp_client_request(struct http_client *client,
e9d302dceba09ceefa0aaddf7eafafd760cd1736Timo Sirainen const char *method, const char *host, const char *target,
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainen http_client_request_callback_t *callback, void *context);
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainen#define http_client_request(client, method, host, target, callback, context) \
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen http_client_request(client, method, host, target + \
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen const struct http_response *response, typeof(context))), \
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen (http_client_request_callback_t *)callback, context)
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenhttp_client_request_url(struct http_client *client,
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainen const char *method, const struct http_url *target_url,
00e7c3010f7da4a49881a7feb05e413af353af0aTimo Sirainen http_client_request_callback_t *callback, void *context);
00e7c3010f7da4a49881a7feb05e413af353af0aTimo Sirainen#define http_client_request_url(client, method, target_url, callback, context) \
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen http_client_request_url(client, method, target_url + \
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen const struct http_response *response, typeof(context))), \
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen (http_client_request_callback_t *)callback, context)
4c20178a7f70bfe43d252e50796013aac1d8c74aTimo Sirainen/* create new HTTP CONNECT request. If this HTTP is configured to use a proxy,
4c20178a7f70bfe43d252e50796013aac1d8c74aTimo Sirainen a CONNECT request will be submitted at that proxy, otherwise the connection
8c2b4a45f17a5cb13bb01058ca37798cf48d91baTimo Sirainen is created directly. Call http_client_request_start_tunnel() to
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen to take over the connection.
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenhttp_client_request_connect(struct http_client *client,
0a53eb0283d7ec28c6105f61e118b96fce8ecb95Timo Sirainen#define http_client_request_connect(client, host, port, callback, context) \
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainen http_client_request_connect(client, host, port + \
0a53eb0283d7ec28c6105f61e118b96fce8ecb95Timo Sirainen const struct http_response *response, typeof(context))), \
0a53eb0283d7ec28c6105f61e118b96fce8ecb95Timo Sirainen (http_client_request_callback_t *)callback, context)
42401be443f96c91a20fc976d66ca626fa6e14ecTimo Sirainenhttp_client_request_connect_ip(struct http_client *client,
0a53eb0283d7ec28c6105f61e118b96fce8ecb95Timo Sirainen#define http_client_request_connect_ip(client, ip, port, callback, context) \
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainen http_client_request_connect_ip(client, ip, port + \
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainen const struct http_response *response, typeof(context))), \
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainen (http_client_request_callback_t *)callback, context)
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainenvoid http_client_request_set_port(struct http_client_request *req,
0a53eb0283d7ec28c6105f61e118b96fce8ecb95Timo Sirainenvoid http_client_request_set_ssl(struct http_client_request *req,
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainenvoid http_client_request_set_urgent(struct http_client_request *req);
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainenvoid http_client_request_add_header(struct http_client_request *req,
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainenvoid http_client_request_remove_header(struct http_client_request *req,
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainen const char *key);
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainenvoid http_client_request_set_date(struct http_client_request *req,
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainenvoid http_client_request_set_payload(struct http_client_request *req,
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainenvoid http_client_request_set_timeout_msecs(struct http_client_request *req,
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainen unsigned int msecs);
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainenvoid http_client_request_set_timeout(struct http_client_request *req,
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainenvoid http_client_request_set_auth_simple(struct http_client_request *req,
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainenvoid http_client_request_delay_until(struct http_client_request *req,
0d1b8b6bec79746c5d89d57dd8c1688946bd9237Josef 'Jeff' Sipekvoid http_client_request_delay(struct http_client_request *req,
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainenvoid http_client_request_delay_msecs(struct http_client_request *req,
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainen unsigned int msecs);
89d6cd658eabf46e07e40037b0e641ed9be1a2a3Timo Sirainenconst char *http_client_request_get_method(struct http_client_request *req);
e2fdcdb4ee53ab769123e27997713aaea34910e1Timo Sirainenconst char *http_client_request_get_target(struct http_client_request *req);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenhttp_client_request_get_state(struct http_client_request *req);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenvoid http_client_request_submit(struct http_client_request *req);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenbool http_client_request_try_retry(struct http_client_request *req);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenvoid http_client_request_abort(struct http_client_request **req);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen/* Call the specified callback when HTTP request is destroyed. */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenvoid http_client_request_set_destroy_callback(struct http_client_request *req,
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen void (*callback)(void *),
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainen/* submits request and blocks until provided payload is sent. Multiple calls
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainen are allowed; payload transmission is ended with
e4194f4703eeec32b432371ae30fc8f25ab720d8Timo Sirainen http_client_request_finish_payload(). */
8c2b4a45f17a5cb13bb01058ca37798cf48d91baTimo Sirainenint http_client_request_send_payload(struct http_client_request **req,
8c2b4a45f17a5cb13bb01058ca37798cf48d91baTimo Sirainenint http_client_request_finish_payload(struct http_client_request **req);
8c2b4a45f17a5cb13bb01058ca37798cf48d91baTimo Sirainenvoid http_client_request_start_tunnel(struct http_client_request *req,
8c2b4a45f17a5cb13bb01058ca37798cf48d91baTimo Sirainenvoid http_client_switch_ioloop(struct http_client *client);
8e1ecc6542da1e14c14e2e59d39dbccdbf68e2b5Timo Sirainen/* blocks until all currently submitted requests are handled */
8e1ecc6542da1e14c14e2e59d39dbccdbf68e2b5Timo Sirainenvoid http_client_wait(struct http_client *client);
8e1ecc6542da1e14c14e2e59d39dbccdbf68e2b5Timo Sirainen/* Returns number of pending HTTP requests. */