]> granicus.if.org Git - ejabberd/commitdiff
* src/web/ejabberd_http.erl: Support for binaries in ejabberd HTTP
authorMickaël Rémond <mickael.remond@process-one.net>
Sat, 10 Mar 2007 17:57:19 +0000 (17:57 +0000)
committerMickaël Rémond <mickael.remond@process-one.net>
Sat, 10 Mar 2007 17:57:19 +0000 (17:57 +0000)
server (Thanks to Massimiliano Mirra) (EJAB-197).

SVN Revision: 742

ChangeLog
src/web/ejabberd_http.erl

index 542e30529d7212b8208384852865093fc71334fa..043e746ed9aae148126a89cb8ef04b1d538deea1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2007-03-10  Mickael Remond  <mickael.remond@process-one.net>
 
+       * src/web/ejabberd_http.erl: Support for binaries in ejabberd HTTP
+       server (Thanks to Massimiliano Mirra) (EJAB-197).
+
        * src/configure.ac: autoconf improvements (thanks to Tony Finch) (EJAB-204).
        * src/aclocal.m4: Likewise.
                                         
index 52a95d1ccf5b26bf36b2440c514383eccf943c4b..0497e7726cc10498b6d08bb952a178a358a2b3d7 100644 (file)
@@ -234,15 +234,16 @@ process_header(State, Data) ->
 process([], _) ->
     ejabberd_web:error(not_found);
 process(Handlers, Request) ->
-    [{PathPattern, HandlerModule} | HandlersLeft] = Handlers,
-    
-    case lists:prefix(PathPattern, Request#request.path) of
+    [{HandlerPathPrefix, HandlerModule} | HandlersLeft] = Handlers,
+
+    case lists:prefix(HandlerPathPrefix, Request#request.path) of
        true ->
+            ?DEBUG("~p matches ~p", [Request#request.path, HandlerPathPrefix]),
             %% LocalPath is the path "local to the handler", i.e. if
             %% the handler was registered to handle "/test/" and the
             %% requested path is "/test/foo/bar", the local path is
             %% ["foo", "bar"]
-            LocalPath = lists:nthtail(length(PathPattern), Request#request.path),
+            LocalPath = lists:nthtail(length(HandlerPathPrefix), Request#request.path),
            HandlerModule:process(LocalPath, Request);
        false ->
            process(HandlersLeft, Request)
@@ -279,11 +280,10 @@ process_request(#state{request_method = 'GET',
                {Status, Headers, El} when
                element(1, El) == xmlelement ->
                    make_xhtml_output(State, Status, Headers, El);
-               Text when is_list(Text) ->
-                   make_text_output(State, 200, [], Text);
-               {Status, Headers, Text} when
-               is_list(Text) ->
-                   make_text_output(State, Status, Headers, Text)
+               Output when is_list(Output) or is_binary(Output) ->
+                   make_text_output(State, 200, [], Output);
+               {Status, Headers, Output} when is_list(Output) or is_binary(Output) ->
+                   make_text_output(State, Status, Headers, Output)
            end
     end;
 
@@ -327,10 +327,10 @@ process_request(#state{request_method = 'POST',
                {Status, Headers, El} when
                element(1, El) == xmlelement ->
                    make_xhtml_output(State, Status, Headers, El);
-               Text when is_list(Text) ->
-                   make_text_output(State, 200, [], Text);
-               {Status, Headers, Text} when is_list(Text) ->
-                   make_text_output(State, Status, Headers, Text)
+               Output when is_list(Output) or is_binary(Output) ->
+                   make_text_output(State, 200, [], Output);
+               {Status, Headers, Output} when is_list(Output) or is_binary(Output) ->
+                   make_text_output(State, Status, Headers, Output)
            end
     end;
 
@@ -405,8 +405,10 @@ make_xhtml_output(State, Status, Headers, XHTML) ->
          code_to_phrase(Status), "\r\n"],
     [SL, H, "\r\n", Data].
 
-make_text_output(State, Status, Headers, Text) ->
-    Data = list_to_binary(Text),
+make_text_output(State, Status, Headers, Text) when is_list(Text) ->
+    make_text_output(State, Status, Headers, list_to_binary(Text));
+
+make_text_output(State, Status, Headers, Data) when is_binary(Data) ->
     Headers1 = case lists:keysearch("Content-Type", 1, Headers) of
                   {value, _} ->
                       [{"Content-Length", integer_to_list(size(Data))} |