]> granicus.if.org Git - ejabberd/commitdiff
* src/web/ejabberd_http.erl: The web module now accepts HTTP
authorMickaël Rémond <mickael.remond@process-one.net>
Fri, 2 Jun 2006 15:02:39 +0000 (15:02 +0000)
committerMickaël Rémond <mickael.remond@process-one.net>
Fri, 2 Jun 2006 15:02:39 +0000 (15:02 +0000)
absolute URL (used behind a proxy). This apply to HTTP polling and to
the web interface (Thanks to Jean-Sebastien Pedron).

SVN Revision: 576

ChangeLog
src/web/ejabberd_http.erl

index 5a5ef4309c048f800cd43770048d95dc5fb072cb..8781a885e820e9d42a6e8dd0521834ec5130e04f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,13 @@
-2006-06-31  Mickael Remond  <mickael.remond@process-one.net>
+2006-06-02  Mickael Remond  <mickael.remond@process-one.net>
 
        * 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  <mickael.remond@process-one.net>
 
        * src/mod_roster.erl: According to RFC3921 section 9.2, outbound
index f51b02e65e5aef1fa4b7b222ab968447a872367e..5113f1afe1a55695f9447bc00740f1b08146af5a 100644 (file)
@@ -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
                        [] ->