aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2012-12-22 21:02:55 +0100
committerLoïc Hoguin <[email protected]>2012-12-22 21:14:20 +0100
commitf7929d323cd448b9fedd4b6799f721eb5550882f (patch)
tree084f6897a7c5ca338404849909e3999f87c013f1
parent31c7bf7234a7ec89f791fa8ec76ada6e89166d6d (diff)
parentb63502e32e52e4f210b79b90a530495360abb8b3 (diff)
downloadcowboy-f7929d323cd448b9fedd4b6799f721eb5550882f.tar.gz
cowboy-f7929d323cd448b9fedd4b6799f721eb5550882f.tar.bz2
cowboy-f7929d323cd448b9fedd4b6799f721eb5550882f.zip
Merge branch 'undefined_url' of git://github.com/treetopllc/cowboy
-rw-r--r--src/cowboy_req.erl18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl
index 8525247..7f3b566 100644
--- a/src/cowboy_req.erl
+++ b/src/cowboy_req.erl
@@ -317,7 +317,9 @@ fragment(Req) ->
%%
%% The URL includes the scheme, host and port only.
%% @see cowboy_req:url/1
--spec host_url(Req) -> {binary(), Req} when Req::req().
+-spec host_url(Req) -> {undefined | binary(), Req} when Req::req().
+host_url(Req=#http_req{port=undefined}) ->
+ {undefined, Req};
host_url(Req=#http_req{transport=Transport, host=Host, port=Port}) ->
TransportName = Transport:name(),
Secure = case TransportName of
@@ -334,9 +336,14 @@ host_url(Req=#http_req{transport=Transport, host=Host, port=Port}) ->
%% @doc Return the full request URL as a binary.
%%
%% The URL includes the scheme, host, port, path, query string and fragment.
--spec url(Req) -> {binary(), Req} when Req::req().
-url(Req=#http_req{path=Path, qs=QS, fragment=Fragment}) ->
+-spec url(Req) -> {undefined | binary(), Req} when Req::req().
+url(Req=#http_req{}) ->
{HostURL, Req2} = host_url(Req),
+ url(HostURL, Req2).
+
+url(undefined, Req=#http_req{}) ->
+ {undefined, Req};
+url(HostURL, Req=#http_req{path=Path, qs=QS, fragment=Fragment}) ->
QS2 = case QS of
<<>> -> <<>>;
_ -> << "?", QS/binary >>
@@ -345,7 +352,7 @@ url(Req=#http_req{path=Path, qs=QS, fragment=Fragment}) ->
<<>> -> <<>>;
_ -> << "#", Fragment/binary >>
end,
- {<< HostURL/binary, Path/binary, QS2/binary, Fragment2/binary >>, Req2}.
+ {<< HostURL/binary, Path/binary, QS2/binary, Fragment2/binary >>, Req}.
%% @equiv binding(Name, Req, undefined)
-spec binding(atom(), Req) -> {binary() | undefined, Req} when Req::req().
@@ -1299,6 +1306,9 @@ status(B) when is_binary(B) -> B.
-ifdef(TEST).
url_test() ->
+ {undefined, _} =
+ url(#http_req{transport=ranch_tcp, host= <<>>, port= undefined,
+ path= <<>>, qs= <<>>, fragment= <<>>, pid=self()}),
{<<"http://localhost/path">>, _ } =
url(#http_req{transport=ranch_tcp, host= <<"localhost">>, port=80,
path= <<"/path">>, qs= <<>>, fragment= <<>>, pid=self()}),