diff --git a/ChangeLog b/ChangeLog index 5a5ef4309..8781a885e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,13 @@ -2006-06-31 Mickael Remond +2006-06-02 Mickael Remond * src/web/ejabberd_http_poll.erl: Messages polled between the the last client request and the polling timeout were lost. Those messages are now resent using ejabberd routing mechanisms. + * src/web/ejabberd_http.erl: The web module now accepts HTTP + absolute URL (used behind a proxy). This apply to HTTP polling and + to the web interface (Thanks to Jean-Sebastien Pedron). + 2006-05-29 Mickael Remond * src/mod_roster.erl: According to RFC3921 section 9.2, outbound diff --git a/src/web/ejabberd_http.erl b/src/web/ejabberd_http.erl index f51b02e65..5113f1afe 100644 --- a/src/web/ejabberd_http.erl +++ b/src/web/ejabberd_http.erl @@ -133,13 +133,17 @@ process_header(State, Data) -> SockMod = State#state.sockmod, Socket = State#state.socket, case Data of - {ok, {http_request, Method, Path, Version}} -> + {ok, {http_request, Method, Uri, Version}} -> KeepAlive = case Version of {1, 1} -> true; _ -> false end, + Path = case Uri of + {absoluteURI, _Scheme, _Host, _Port, P} -> {abs_path, P}; + _ -> Uri + end, State#state{request_method = Method, request_version = Version, request_path = Path, @@ -716,10 +720,27 @@ parse_req(Line) -> "*" -> % Is this correct? "*"; - P -> - % FIXME: Handle - % absolute URIs - {abs_path, P} + _ -> + case string:str(URI, "://") of + 0 -> + % Relative URI + % ex: /index.html + {abs_path, URI}; + N -> + % Absolute URI + % ex: http://localhost/index.html + + % Remove scheme + % ex: URI2 = localhost/index.html + URI2 = string:substr(URI, N + 3), + % Look for the start of the path + % (or the lack of a path thereof) + case string:chr(URI2, $/) of + 0 -> {abs_path, "/"}; + M -> {abs_path, + string:substr(URI2, M + 1)} + end + end end, case VersionStr of [] ->