%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2005-2011. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. %% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. %% %% %CopyrightEnd% %% %% -include("inets_internal.hrl"). -define(SERVICE, httpc). -define(hcri(Label, Data), ?report_important(Label, ?SERVICE, Data)). -define(hcrv(Label, Data), ?report_verbose(Label, ?SERVICE, Data)). -define(hcrd(Label, Data), ?report_debug(Label, ?SERVICE, Data)). -define(hcrt(Label, Data), ?report_trace(Label, ?SERVICE, Data)). -define(HTTP_REQUEST_TIMEOUT, infinity). -define(HTTP_REQUEST_CTIMEOUT, ?HTTP_REQUEST_TIMEOUT). -define(HTTP_PIPELINE_TIMEOUT, 0). -define(HTTP_PIPELINE_LENGTH, 2). -define(HTTP_MAX_TCP_SESSIONS, 2). -define(HTTP_MAX_REDIRECTS, 4). -define(HTTP_KEEP_ALIVE_TIMEOUT, 120000). -define(HTTP_KEEP_ALIVE_LENGTH, 5). %%% HTTP Client per request settings -record(http_options, { %% string() - "HTTP/1.1" | "HTTP/1.0" | "HTTP/0.9" version, %% integer() | infinity - ms before a request times out timeout = ?HTTP_REQUEST_TIMEOUT, %% bool() - true if auto redirect on 30x response autoredirect = true, %% ssl socket options ssl = [], %% {User, Password} = {string(), string()} proxy_auth, %% bool() - true if not strictly std compliant relaxed = false, %% integer() - ms before a connect times out connect_timeout = ?HTTP_REQUEST_CTIMEOUT, %% bool() - Use %-encoding rfc 2396 url_encode } ). %%% HTTP Client per profile setting. -record(options, { proxy = {undefined, []}, % {{ProxyHost, ProxyPort}, [NoProxy]}, %% 0 means persistent connections are used without pipelining pipeline_timeout = ?HTTP_PIPELINE_TIMEOUT, max_pipeline_length = ?HTTP_PIPELINE_LENGTH, max_keep_alive_length = ?HTTP_KEEP_ALIVE_LENGTH, keep_alive_timeout = ?HTTP_KEEP_ALIVE_TIMEOUT, % Used when pipeline_timeout = 0 max_sessions = ?HTTP_MAX_TCP_SESSIONS, cookies = disabled, % enabled | disabled | verify verbose = false, ipfamily = inet, % inet | inet6 | inet6fb4 ip = default, % specify local interface port = default, % specify local port socket_opts = [] % other socket options } ). %%% All data associated to a specific HTTP request -record(request, { id, % ref() - Request Id from, % pid() - Caller redircount = 0,% Number of redirects made for this request scheme, % http | https address, % ({Host,Port}) Destination Host and Port path, % string() - Path of parsed URL pquery, % string() - Rest of parsed URL method, % atom() - HTTP request Method headers, % #http_request_h{} content, % {ContentType, Body} - Current HTTP request settings, % #http_options{} - User defined settings abs_uri, % string() ex: "http://www.erlang.org" userinfo, % string() - optinal "@:" stream, % Boolean() - stream async reply? headers_as_is, % Boolean() - workaround for servers that does % not honor the http standard, can also be used for testing purposes. started, % integer() > 0 - When we started processing the request timer, % undefined | ref() socket_opts % undefined | [socket_option()] } ). -record(tcp_session, { id, % {{Host, Port}, HandlerPid} client_close, % true | false scheme, % http (HTTP/TCP) | https (HTTP/SSL/TCP) socket, % Open socket, used by connection queue_length = 1, % Current length of pipeline or keep alive queue type % pipeline | keep_alive (wait for response before sending new request) }). -record(http_cookie, { domain, domain_default = false, name, value, comment, max_age = session, path, path_default = false, secure = false, version = "0" }). %% -record(parsed_uri, %% { %% scheme, % http | https %% uinfo, % string() %% host, % string() %% port, % integer() %% path, % string() %% q % query: string() %% }).