summaryrefslogtreecommitdiff
path: root/lib/inets/src/http_lib/http_transport.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/inets/src/http_lib/http_transport.erl')
-rw-r--r--lib/inets/src/http_lib/http_transport.erl235
1 files changed, 30 insertions, 205 deletions
diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl
index 0eb0cc2684..2a51529621 100644
--- a/lib/inets/src/http_lib/http_transport.erl
+++ b/lib/inets/src/http_lib/http_transport.erl
@@ -36,29 +36,19 @@
resolve/0
]).
-export([negotiate/3]).
--export([ipv4_name/1, ipv6_name/1]).
-include_lib("inets/src/inets_app/inets_internal.hrl").
-include("http_internal.hrl").
-
%%%=========================================================================
%%% Internal application API
%%%=========================================================================
-%%-------------------------------------------------------------------------
-%% start(SocketType) -> ok | {error, Reason}
-%% SocketType = ip_comm | {ssl, _}
-%%
-%% Description: Makes sure ssl is started.
-%%-------------------------------------------------------------------------
start(ip_comm) ->
ok;
start({ip_comm, _}) ->
ok;
start({ssl, _}) ->
- do_start_ssl();
-start({essl, _}) ->
do_start_ssl().
do_start_ssl() ->
@@ -70,25 +60,11 @@ do_start_ssl() ->
_:Reason ->
{error, Reason}
end.
-
-
-%%-------------------------------------------------------------------------
-%% connect(SocketType, Address, Options, Timeout) ->
-%% {ok, Socket} | {error, Reason}
-%% SocketType = ip_comm | {ssl, SslConfig}
-%% Address = {Host, Port}
-%% Options = [option()]
-%% Socket = socket()
-%% option() = ipfamily() | {ip, ip_address()} | {port, integer()}
-%% ipfamily() = inet | inet6
-%%
-%% Description: Connects to the Host and Port specified in HTTPRequest.
-%%-------------------------------------------------------------------------
connect(SocketType, Address, Opts) ->
connect(SocketType, Address, Opts, infinity).
connect(ip_comm, {Host, Port}, Opts0, Timeout) ->
- Opts = [binary, {packet, 0}, {active, false}, {reuseaddr, true} | Opts0 ],
+ Opts = [binary, {packet, 0}, {active, false} | Opts0],
try gen_tcp:connect(Host, Port, Opts, Timeout) of
{ok, _} = OK ->
OK;
@@ -101,12 +77,8 @@ connect(ip_comm, {Host, Port}, Opts0, Timeout) ->
{error, {eoptions, Opts}}
end;
-%% Wrapper for backaward compatibillity
-connect({ssl, SslConfig}, Address, Opts, Timeout) ->
- connect({?HTTP_DEFAULT_SSL_KIND, SslConfig}, Address, Opts, Timeout);
-
-connect({essl, SslConfig}, {Host, Port}, Opts0, Timeout) ->
- Opts = [binary, {active, false}, {ssl_imp, new} | Opts0] ++ SslConfig,
+connect({ssl, SslConfig}, {Host, Port}, Opts0, Timeout) ->
+ Opts = [binary, {packet, 0}, {active, false} | Opts0] ++ SslConfig,
case (catch ssl:connect(Host, Port, Opts, Timeout)) of
{'EXIT', Reason} ->
{error, {eoptions, Reason}};
@@ -116,38 +88,19 @@ connect({essl, SslConfig}, {Host, Port}, Opts0, Timeout) ->
ERROR
end.
-
-%%-------------------------------------------------------------------------
-%% listen(SocketType, Addr, Port, Fd) -> {ok, Socket} | {error, Reason}
-%% SocketType = ip_comm | {ssl, SSLConfig}
-%% Port = integer()
-%% Socket = socket()
-%% Fd = undefined | fd()
-%%
-%% Description: Sets up socket to listen on the port Port on the local
-%% host using either gen_tcp or ssl. In the gen_tcp case the port
-%% might already have been initiated by a wrapper-program and is
-%% given as an Fd that can be retrieved by init:get_argument. The
-%% reason for this to enable a HTTP-server not running as root to use
-%% port 80.
-%%-------------------------------------------------------------------------
listen(ip_comm, Addr, Port, Fd, IpFamily) ->
listen_ip_comm(Addr, Port, [], Fd, IpFamily);
listen({ip_comm, SockOpts}, Addr, Port, Fd, IpFamily) ->
listen_ip_comm(Addr, Port, SockOpts, Fd, IpFamily);
-listen({essl, SSLConfig}, Addr, Port, Fd, IpFamily) ->
+listen({ssl, SSLConfig}, Addr, Port, Fd, IpFamily) ->
listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily, []).
listen(ip_comm, Addr, Port, IpFamily) ->
listen_ip_comm(Addr, Port, [], undefined, IpFamily);
-%% Wrapper for backaward compatibillity
listen({ssl, SSLConfig}, Addr, Port, IpFamily) ->
- listen({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Addr, Port, IpFamily);
-
-listen({essl, SSLConfig}, Addr, Port, IpFamily) ->
{SSLConfig2, ExtraOpts} = case proplists:get_value(log_alert, SSLConfig, undefined) of
undefined ->
{SSLConfig, []};
@@ -187,18 +140,7 @@ get_socket_info(Addr, Port, Fd, BaseOpts) ->
Fd ->
{0, sock_opts([{fd, Fd} | BaseOpts])}
end.
-
-%%-------------------------------------------------------------------------
-%% accept(SocketType, ListenSocket) -> {ok, Socket} | {error, Reason}
-%% accept(SocketType, ListenSocket, Timeout) -> ok | {error, Reason}
-%% SocketType = ip_comm | {ssl, SSLConfig}
-%% ListenSocket = socket()
-%% Timeout = infinity | integer() >= 0
-%% Socket = socket()
-%%
-%% Description: Accepts an incoming connection request on a listen socket,
-%% using either gen_tcp or ssl.
-%%-------------------------------------------------------------------------
+
-spec accept(SocketType, ListenSocket) -> {ok, Socket} | {error, Reason} when
SocketType :: ip_comm | {ssl, SSLConfig},
SSLConfig :: term(),
@@ -209,7 +151,7 @@ accept(SocketType, ListenSocket) ->
accept(SocketType, ListenSocket, infinity).
-spec accept(SocketType, ListenSocket, Timeout) -> {ok, Socket} | {error, Reason} when
- SocketType :: ip_comm | {ssl | essl, SSLConfig},
+ SocketType :: ip_comm | {ssl, SSLConfig},
SSLConfig :: term(),
Timeout :: timeout(),
ListenSocket :: gen_tcp:socket(),
@@ -220,19 +162,14 @@ accept(ip_comm, ListenSocket, Timeout) ->
accept({ip_comm, _}, ListenSocket, Timeout) ->
gen_tcp:accept(ListenSocket, Timeout);
-%% Wrapper for backaward compatibillity
-accept({ssl, SSLConfig}, ListenSocket, Timeout) ->
- accept({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, ListenSocket, Timeout);
-
-accept({essl, _SSLConfig}, ListenSocket, Timeout) ->
+accept({ssl, _SSLConfig}, ListenSocket, Timeout) ->
ssl:transport_accept(ListenSocket, Timeout).
-
%%-------------------------------------------------------------------------
%% Description: Assigns a new controlling process to Socket.
%%-------------------------------------------------------------------------
-spec controlling_process(SocketType, Socket, NewOwner) -> Object when
- SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig},
+ SocketType :: ip_comm | {ip_comm | ssl, _Config},
Socket :: gen_tcp:socket(),
NewOwner :: pid(),
Object :: ok | {error, Reason},
@@ -242,11 +179,7 @@ controlling_process(ip_comm, Socket, NewOwner) ->
controlling_process({ip_comm, _}, Socket, NewOwner) ->
gen_tcp:controlling_process(Socket, NewOwner);
-%% Wrapper for backaward compatibillity
-controlling_process({ssl, SSLConfig}, Socket, NewOwner) ->
- controlling_process({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, NewOwner);
-
-controlling_process({essl, _}, Socket, NewOwner) ->
+controlling_process({ssl, _}, Socket, NewOwner) ->
ssl:controlling_process(Socket, NewOwner).
@@ -255,7 +188,7 @@ controlling_process({essl, _}, Socket, NewOwner) ->
%% gen_tcp or ssl.
%%-------------------------------------------------------------------------
-spec setopts(SocketType, Socket, Options) -> ok | {error, inet:posix()} when
- SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig},
+ SocketType :: ip_comm | {ip_comm | ssl, _Config},
Socket :: inet:socket() | ssl:sslsocket(),
Options :: [inet:socket_setopt()] | [gen_tcp:option()].
setopts(ip_comm, Socket, Options) ->
@@ -263,11 +196,7 @@ setopts(ip_comm, Socket, Options) ->
setopts({ip_comm, _}, Socket, Options) ->
inet:setopts(Socket, Options);
-%% Wrapper for backaward compatibillity
-setopts({ssl, SSLConfig}, Socket, Options) ->
- setopts({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Options);
-
-setopts({essl, _}, Socket, Options) ->
+setopts({ssl, _}, Socket, Options) ->
(catch ssl:setopts(Socket, Options)).
@@ -275,7 +204,7 @@ setopts({essl, _}, Socket, Options) ->
%% Description: Gets the values for some options.
%%-------------------------------------------------------------------------
-spec getopts(SocketType, Socket) -> Object when
- SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig},
+ SocketType :: ip_comm | {ip_comm | ssl, _Conf},
Socket :: ssl:sslsocket() | inet:socket(),
Object :: [gen_tcp:option()] | [inet:socket_setopt() | gen_tcp:pktoptions_value()] | [].
getopts(SocketType, Socket) ->
@@ -283,13 +212,10 @@ getopts(SocketType, Socket) ->
getopts(SocketType, Socket, Opts).
-spec getopts(SocketType, Socket, Options) -> Object when
- SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig},
+ SocketType :: ip_comm | {ip_comm | ssl, _Conf},
Socket :: ssl:sslsocket() | inet:socket(),
Options :: [gen_tcp:option_name()],
Object :: [gen_tcp:option()] | [inet:socket_setopt() | gen_tcp:pktoptions_value()] | [].
-getopts({ip_comm, _}, Socket, Options) ->
- getopts(ip_comm, Socket, Options);
-
getopts(ip_comm, Socket, Options) ->
case inet:getopts(Socket, Options) of
{ok, SocketOpts} ->
@@ -297,12 +223,9 @@ getopts(ip_comm, Socket, Options) ->
{error, _} ->
[]
end;
-
-%% Wrapper for backaward compatibillity
-getopts({ssl, SSLConfig}, Socket, Options) ->
- getopts({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Options);
-
-getopts({essl, _}, Socket, Options) ->
+getopts({ip_comm, _}, Socket, Options) ->
+ getopts(ip_comm, Socket, Options);
+getopts({ssl, _}, Socket, Options) ->
getopts_ssl(Socket, Options).
-spec getopts_ssl(SslSocket, Options) ->
@@ -316,15 +239,7 @@ getopts_ssl(Socket, Options) ->
{error, _} ->
[]
end.
-
-%%-------------------------------------------------------------------------
-%% getstat(SocketType, Socket) -> socket_stats()
-%% SocketType = ip_comm | {ssl, _}
-%% Socket = socket()
-%% socket_stats() = list()
-%% Description: Gets the socket stats values for the socket
-%%-------------------------------------------------------------------------
getstat(ip_comm = _SocketType, Socket) ->
case inet:getstat(Socket) of
{ok, Stats} ->
@@ -333,155 +248,67 @@ getstat(ip_comm = _SocketType, Socket) ->
[]
end;
-%% Wrapper for backaward compatibillity
-getstat({ssl, SSLConfig}, Socket) ->
- getstat({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket);
-
-getstat({essl, _} = _SocketType, _Socket) ->
+getstat({ssl, _} = _SocketType, _Socket) ->
[].
-%%-------------------------------------------------------------------------
-%% send(RequestOrSocketType, Socket, Message) -> ok | {error, Reason}
-%% SocketType = ip_comm | {ssl, _}
-%% Socket = socket()
-%% Message = list() | binary()
-%% Description: Sends a packet on a socket, using either gen_tcp or ssl.
-%%-------------------------------------------------------------------------
send(ip_comm, Socket, Message) ->
gen_tcp:send(Socket, Message);
send({ip_comm, _}, Socket, Message) ->
gen_tcp:send(Socket, Message);
-%% Wrapper for backaward compatibillity
-send({ssl, SSLConfig}, Socket, Message) ->
- send({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Message);
-
-send({essl, _}, Socket, Message) ->
+send({ssl, _}, Socket, Message) ->
ssl:send(Socket, Message).
-%%-------------------------------------------------------------------------
-%% close(SocketType, Socket) -> ok | {error, Reason}
-%% SocketType = ip_comm | {ssl, _}
-%% Socket = socket()
-%%
-%% Description: Closes a socket, using either gen_tcp or ssl.
-%%-------------------------------------------------------------------------
close(ip_comm, Socket) ->
gen_tcp:close(Socket);
close({ip_comm, []}, Socket) ->
gen_tcp:close(Socket);
-
-%% Wrapper for backaward compatibillity
-close({ssl, SSLConfig}, Socket) ->
- close({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket);
-
-close({essl, _}, Socket) ->
+close({ssl, _}, Socket) ->
ssl:close(Socket).
-
-%%-------------------------------------------------------------------------
-%% peername(SocketType, Socket) -> {Port, SockName}
-%% SocketType = ip_comm | {ssl, _}
-%% Socket = socket()
-%% Port = integer() (-1 if error occurred)
-%% PeerName = string()
-%%
-%% Description: Returns the address and port for the other end of a
-%% connection, usning either gen_tcp or ssl.
-%%-------------------------------------------------------------------------
peername(ip_comm, Socket) ->
do_peername(inet:peername(Socket));
-peername({ip_comm, _}, Socket) ->
+peername({ip_comm,_}, Socket) ->
do_peername(inet:peername(Socket));
-
-%% Wrapper for backaward compatibillity
-peername({ssl, SSLConfig}, Socket) ->
- peername({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket);
-
-peername({essl, _}, Socket) ->
+peername({ssl, _}, Socket) ->
do_peername(ssl:peername(Socket)).
do_peername({ok, {Addr, Port}})
when tuple_size(Addr) =:= 4 ->
- PeerName = ipv4_name(Addr),
+ PeerName = ip_name(Addr),
{Port, PeerName};
do_peername({ok, {Addr, Port}})
when tuple_size(Addr) =:= 8 ->
- PeerName = ipv6_name(Addr),
+ PeerName = ip_name(Addr),
{Port, PeerName};
do_peername({error, _}) ->
{-1, "unknown"}.
-
-%%-------------------------------------------------------------------------
-%% sockname(SocketType, Socket) -> {Port, SockName}
-%% SocketType = ip_comm | {ssl, _}
-%% Socket = socket()
-%% Port = integer() (-1 if error occurred)
-%% SockName = string()
-%%
-%% Description: Returns the address and port for the local (our) end
-%% other end of connection, using either gen_tcp or ssl.
-%%-------------------------------------------------------------------------
sockname(ip_comm, Socket) ->
do_sockname(inet:sockname(Socket));
-sockname({ip_comm, _}, Socket) ->
+sockname({ip_comm,_}, Socket) ->
do_sockname(inet:sockname(Socket));
-%% Wrapper for backaward compatibillity
-sockname({ssl, SSLConfig}, Socket) ->
- sockname({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket);
-
-sockname({essl, _}, Socket) ->
+sockname({ssl, _}, Socket) ->
do_sockname(ssl:sockname(Socket)).
do_sockname({ok, {Addr, Port}})
when tuple_size(Addr) =:= 4 ->
- SockName = ipv4_name(Addr),
+ SockName = ip_name(Addr),
{Port, SockName};
do_sockname({ok, {Addr, Port}})
when tuple_size(Addr) =:= 8 ->
- SockName = ipv6_name(Addr),
+ SockName = ip_name(Addr),
{Port, SockName};
do_sockname({error, _}) ->
{-1, "unknown"}.
-
-%%-------------------------------------------------------------------------
-%% resolve() -> HostName
-%% HostName = string()
-%%
-%% Description: Returns the local hostname.
-%%-------------------------------------------------------------------------
resolve() ->
{ok, Name} = inet:gethostname(),
Name.
-
-%%-------------------------------------------------------------------------
-%% ipv4_name(Ipv4Addr) -> string()
-%% ipv6_name(Ipv6Addr) -> string()
-%% Ipv4Addr = ip4_address()
-%% Ipv6Addr = ip6_address()
-%%
-%% Description: Returns the local hostname.
-%%-------------------------------------------------------------------------
-ipv4_name({A, B, C, D}) ->
- integer_to_list(A) ++ "." ++
- integer_to_list(B) ++ "." ++
- integer_to_list(C) ++ "." ++
- integer_to_list(D).
-
-ipv6_name({A, B, C, D, E, F, G, H}) ->
- http_util:integer_to_hexlist(A) ++ ":"++
- http_util:integer_to_hexlist(B) ++ ":" ++
- http_util:integer_to_hexlist(C) ++ ":" ++
- http_util:integer_to_hexlist(D) ++ ":" ++
- http_util:integer_to_hexlist(E) ++ ":" ++
- http_util:integer_to_hexlist(F) ++ ":" ++
- http_util:integer_to_hexlist(G) ++ ":" ++
- http_util:integer_to_hexlist(H).
-
+ip_name(Ip) ->
+ inet:ntoa(Ip).
close_tag(ip_comm) ->
tcp_closed;
@@ -510,9 +337,7 @@ negotiate(ip_comm,_,_) ->
ok;
negotiate({ip_comm, _},_,_) ->
ok;
-negotiate({ssl, SSLConfig}, Socket, Timeout) ->
- negotiate({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Timeout);
-negotiate({essl, _}, Socket, Timeout) ->
+negotiate({ssl, _}, Socket, Timeout) ->
negotiate_ssl(Socket, Timeout).
negotiate_ssl(Socket, Timeout) ->