diff options
author | Loïc Hoguin <[email protected]> | 2012-12-22 21:02:55 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2012-12-22 21:14:20 +0100 |
commit | f7929d323cd448b9fedd4b6799f721eb5550882f (patch) | |
tree | 084f6897a7c5ca338404849909e3999f87c013f1 | |
parent | 31c7bf7234a7ec89f791fa8ec76ada6e89166d6d (diff) | |
parent | b63502e32e52e4f210b79b90a530495360abb8b3 (diff) | |
download | cowboy-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.erl | 18 |
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()}), |