aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeudin Kasumovic <[email protected]>2018-05-04 21:10:44 +0200
committerLoïc Hoguin <[email protected]>2018-05-15 13:55:15 +0200
commit0cbdd2fc95e58b197909e313748d0870c05a8da7 (patch)
treee081868e3b3e756fdf4e4bcc23d462fd30e6a519
parent6d5710c509548dfe0965d3c279b119978a3fc19d (diff)
downloadgun-0cbdd2fc95e58b197909e313748d0870c05a8da7.tar.gz
gun-0cbdd2fc95e58b197909e313748d0870c05a8da7.tar.bz2
gun-0cbdd2fc95e58b197909e313748d0870c05a8da7.zip
Allow IP tuple for host #152
-rw-r--r--doc/src/manual/gun.asciidoc2
-rw-r--r--src/gun.erl6
-rw-r--r--src/gun_http.erl12
-rw-r--r--src/gun_http2.erl6
4 files changed, 19 insertions, 7 deletions
diff --git a/doc/src/manual/gun.asciidoc b/doc/src/manual/gun.asciidoc
index 0c6dd08..98fbabe 100644
--- a/doc/src/manual/gun.asciidoc
+++ b/doc/src/manual/gun.asciidoc
@@ -235,7 +235,7 @@ Alias of `gun:open/3`.
=== open(Host, Port, Opts) -> {ok, ConnPid} | {error, Reason}
-Host = inet:hostname():: Host to connect to.
+Host = inet:hostname() | inet:ipaddress():: Host or IP to connect to.
Port = inet:port_number():: Port to connect to.
Opts = opts():: Options for this connection.
ConnPid = pid():: The pid of the Gun connection process.
diff --git a/src/gun.erl b/src/gun.erl
index f628199..a4ef417 100644
--- a/src/gun.erl
+++ b/src/gun.erl
@@ -125,14 +125,14 @@
%% Connection.
--spec open(inet:hostname(), inet:port_number())
+-spec open(inet:hostname() | inet:ipaddress(), inet:port_number())
-> {ok, pid()} | {error, any()}.
open(Host, Port) ->
open(Host, Port, #{}).
--spec open(inet:hostname(), inet:port_number(), opts())
+-spec open(inet:hostname() | inet:ipaddress(), inet:port_number(), opts())
-> {ok, pid()} | {error, any()}.
-open(Host, Port, Opts) when is_list(Host); is_atom(Host) ->
+open(Host, Port, Opts) when is_list(Host); is_atom(Host); is_tuple(Host) ->
do_open(Host, Port, Opts).
-spec open_unix(Path::string(), opts())
diff --git a/src/gun_http.erl b/src/gun_http.erl
index 6546df9..d6b3f0d 100644
--- a/src/gun_http.erl
+++ b/src/gun_http.erl
@@ -280,9 +280,13 @@ keepalive(State) ->
request(State=#http_state{socket=Socket, transport=Transport, version=Version,
out=head}, StreamRef, ReplyTo, Method, Host, Port, Path, Headers) ->
+ Host2 = case Host of
+ Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple);
+ _ -> Host
+ end,
Headers2 = lists:keydelete(<<"transfer-encoding">>, 1, Headers),
Headers3 = case lists:keymember(<<"host">>, 1, Headers) of
- false -> [{<<"host">>, [Host, $:, integer_to_binary(Port)]}|Headers2];
+ false -> [{<<"host">>, [Host2, $:, integer_to_binary(Port)]}|Headers2];
true -> Headers2
end,
%% We use Headers2 because this is the smallest list.
@@ -299,10 +303,14 @@ request(State=#http_state{socket=Socket, transport=Transport, version=Version,
request(State=#http_state{socket=Socket, transport=Transport, version=Version,
out=head}, StreamRef, ReplyTo, Method, Host, Port, Path, Headers, Body) ->
+ Host2 = case Host of
+ Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple);
+ _ -> Host
+ end,
Headers2 = lists:keydelete(<<"content-length">>, 1,
lists:keydelete(<<"transfer-encoding">>, 1, Headers)),
Headers3 = case lists:keymember(<<"host">>, 1, Headers) of
- false -> [{<<"host">>, [Host, $:, integer_to_binary(Port)]}|Headers2];
+ false -> [{<<"host">>, [Host2, $:, integer_to_binary(Port)]}|Headers2];
true -> Headers2
end,
Headers4 = transform_header_names(State, Headers3),
diff --git a/src/gun_http2.erl b/src/gun_http2.erl
index 28b64eb..c48e07e 100644
--- a/src/gun_http2.erl
+++ b/src/gun_http2.erl
@@ -351,9 +351,13 @@ request(State0=#http2_state{socket=Socket, transport=Transport, encode_state=Enc
State#http2_state{streams=[Stream|Streams], stream_id=StreamID + 2, encode_state=EncodeState}.
prepare_headers(EncodeState, Transport, Method, Host0, Port, Path, Headers0) ->
+ Host2 = case Host0 of
+ Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple);
+ _ -> Host0
+ end,
Authority = case lists:keyfind(<<"host">>, 1, Headers0) of
{_, Host} -> Host;
- _ -> [Host0, $:, integer_to_binary(Port)]
+ _ -> [Host2, $:, integer_to_binary(Port)]
end,
%% @todo We also must remove any header found in the connection header.
Headers1 =