%%% ---------------------------------------------------------------------------- %%% Copyright (c) 2009, Erlang Training and Consulting Ltd. %%% All rights reserved. %%% %%% Redistribution and use in source and binary forms, with or without %%% modification, are permitted provided that the following conditions are met: %%% * Redistributions of source code must retain the above copyright %%% notice, this list of conditions and the following disclaimer. %%% * Redistributions in binary form must reproduce the above copyright %%% notice, this list of conditions and the following disclaimer in the %%% documentation and/or other materials provided with the distribution. %%% * Neither the name of Erlang Training and Consulting Ltd. nor the %%% names of its contributors may be used to endorse or promote products %%% derived from this software without specific prior written permission. %%% %%% THIS SOFTWARE IS PROVIDED BY Erlang Training and Consulting Ltd. ''AS IS'' %%% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE %%% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE %%% ARE DISCLAIMED. IN NO EVENT SHALL Erlang Training and Consulting Ltd. BE %%% LIABLE SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR %%% BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, %%% WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR %%% OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF %%% ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. %%% ---------------------------------------------------------------------------- -type header() :: 'Cache-Control' | 'Connection' | 'Date' | 'Pragma'| 'Transfer-Encoding' | 'Upgrade' | 'Via' | 'Accept' | 'Accept-Charset'| 'Accept-Encoding' | 'Accept-Language' | 'Authorization' | 'From' | 'Host' | 'If-Modified-Since' | 'If-Match' | 'If-None-Match' | 'If-Range'| 'If-Unmodified-Since' | 'Max-Forwards' | 'Proxy-Authorization' | 'Range'| 'Referer' | 'User-Agent' | 'Age' | 'Location' | 'Proxy-Authenticate'| 'Public' | 'Retry-After' | 'Server' | 'Vary' | 'Warning'| 'Www-Authenticate' | 'Allow' | 'Content-Base' | 'Content-Encoding'| 'Content-Language' | 'Content-Length' | 'Content-Location'| 'Content-Md5' | 'Content-Range' | 'Content-Type' | 'Etag'| 'Expires' | 'Last-Modified' | 'Accept-Ranges' | 'Set-Cookie'| 'Set-Cookie2' | 'X-Forwarded-For' | 'Cookie' | 'Keep-Alive' | 'Proxy-Connection' | binary() | string(). -type headers() :: [{header(), iodata()}]. -type method() :: string() | atom(). -type pos_timeout() :: pos_integer() | 'infinity'. -type bodypart() :: iodata() | 'http_eob'. -type socket() :: _. -type port_num() :: 1..65535. -type poolsize() :: non_neg_integer() | atom(). -type invalid_option() :: any(). -type pool_id() :: pid() | atom(). -type destination() :: {string(), pos_integer(), boolean()}. -type raw_headers() :: [{atom() | binary() | string(), binary() | string()}]. -type partial_download_option() :: {'window_size', window_size()} | {'part_size', non_neg_integer() | 'infinity'} | invalid_option(). -type option() :: {'connect_timeout', timeout()} | {'send_retry', non_neg_integer()} | {'partial_upload', non_neg_integer() | 'infinity'} | {'partial_download', [partial_download_option()]} | {'connect_options', socket_options()} | {'proxy', string()} | {'proxy_ssl_options', socket_options()} | {'pool', pid() | atom()} | invalid_option(). -type options() :: [option()]. -type host() :: string() | {integer(), integer(), integer(), integer()}. -type http_status() :: {integer(), string() | binary()} | {'nil', 'nil'}. -type socket_options() :: [{atom(), term()} | atom()]. -type window_size() :: non_neg_integer() | 'infinity'. -type upload_state() :: {pid(), window_size()}. -type body() :: binary() | 'undefined' | % HEAD request. pid(). % When partial_download option is used. -type result() :: {ok, {{pos_integer(), string()}, headers(), body()}} | {ok, upload_state()} | {error, atom()}.