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