From: Toby T. <qu...@us...> - 2006-12-24 19:41:31
|
Update of /cvsroot/jungerl/jungerl/lib/pico/src In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv10682/lib/pico/src Modified Files: pico_http_server.erl pico_test.erl pico_socket_server.erl pico_utils.erl Log Message: clarify README; fix typos; add sample htdocs directory; permit generation of error responses; add trivial POST handler to pico_test Index: pico_socket_server.erl =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/pico/src/pico_socket_server.erl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- pico_socket_server.erl 1 Mar 2003 11:14:10 -0000 1.1 +++ pico_socket_server.erl 24 Dec 2006 19:41:27 -0000 1.2 @@ -22,7 +22,7 @@ %% Internal imports (used by spawn) --export([cold_start/4, start_child/3]). +-export([cold_start/4, start_child/3]). %% Fun = fun(Socket, Binary) -> Fun' @@ -142,6 +142,6 @@ print_exit(done) -> true; print_exit(normal) -> - trie; + true; print_exit(Why) -> io:format("child exited ~p~n", [Why]). Index: pico_test.erl =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/pico/src/pico_test.erl,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- pico_test.erl 15 Aug 2005 14:41:13 -0000 1.2 +++ pico_test.erl 24 Dec 2006 19:41:27 -0000 1.3 @@ -14,36 +14,31 @@ start() -> pico_http_server:start(4999, 20, ?MODULE, [1,2,3]). stop() -> pico_http_server:stop(4999, foo1234). -start_handler(A) -> 1. +start_handler(_) -> 1. +% handler for GET method; return contents of named file event_handler({get,_,File,Args}, State) -> {get_file(File, Args), State+1}; +% dummy handler for POST method; just prints action URL and parameters +event_handler({post,_,File,Args}, State) -> + {[header({ok,text}),show({post_action,File,args,Args})], State+1}; event_handler(Event, State) -> io:format("callback event:~p State:~p~n",[Event, State]), - {show({pico_test,event, Event,state,State}), State+1}. + {show({pico_test,event,Event,state,State}), State+1}. stop_handler(Reason, State) -> io:format("Stopping:~p ~p~n", [Reason, State]), {stopoyyes, State}. -get_file(F,Args) -> - case file:read_file("." ++ F) of +get_file(F,_Args) -> + Path = "htdocs" ++ F, + case file:read_file(Path) of {ok, Bin} -> - io:format("found ~s\n", ["." ++ F]), - case classify(F) of - html -> - [header(html),Bin]; - jpg -> - [header(jpg),Bin]; - gif -> - [header(jpg),Bin]; - text -> - [header(text),body("white"),"<pre>",Bin,"</pre>"]; - _ -> - [header(binary),Bin] - end; + io:format("found ~s\n", [Path]), + [header({ok,classify(F)}),Bin]; _ -> - io:format("did not find ~s\n", ["." ++ F]), - show({no_such_file,F,args,Args,cwd,file:get_cwd()}) + io:format("did not find ~s\n", [Path]), + [header({error,"404 Not Found", + show({no_such_file,F,cwd,file:get_cwd()})})] end. Index: pico_utils.erl =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/pico/src/pico_utils.erl,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- pico_utils.erl 15 Aug 2005 14:41:13 -0000 1.2 +++ pico_utils.erl 24 Dec 2006 19:41:27 -0000 1.3 @@ -83,23 +83,22 @@ %%---------------------------------------------------------------------- show(X) -> - [header(text),body("white"),"<pre>", - quote_lt(lists:flatten(io_lib:format("~p~n",[X]))),"</pre>"]. + io_lib:format("~p~n",[X]). quote_lt([$<|T]) -> "<" ++ quote_lt(T); quote_lt([H|T]) -> [H|quote_lt(T)]; quote_lt([]) -> []. -header(text) -> - ["HTTP/1.0 200 Ok\r\n", powered_by(), content_type("text/html"),"\r\n"]; -header(html) -> - ["HTTP/1.0 200 Ok\r\n", powered_by(), content_type("text/html"),"\r\n"]; -header(jpg) -> - ["HTTP/1.0 200 Ok\r\n", powered_by(), content_type("image/jpeg"),"\r\n"]; -header(gif) -> - ["HTTP/1.0 200 Ok\r\n", powered_by(), content_type("image/gif"),"\r\n"]; -header(binary) -> - ["HTTP/1.0 200 Ok\r\n", powered_by(), "\r\n"]; +mime(text) -> "text/plain"; +mime(html) -> "text/html"; +mime(jpg) -> "image/jpeg"; +mime(gif) -> "image/gif"; +mime(_) -> unknown. + +header({ok,Type}) -> + ["HTTP/1.0 200 Ok\r\n", powered_by(), content_type(mime(Type)), "\r\n"]; +header({error,Code,Resp}) -> + ["HTTP/1.0 ", Code, "\r\n", powered_by(), content_type("text/plain"), "\r\n", Resp]; header({redirect,To}) -> ["HTTP/1.0 302 Come and get it!\r\n", powered_by(), "Location: " ++ To ++ "\r\n\r\n"]. @@ -107,6 +106,7 @@ powered_by() -> "X-Powered-By: Erlang (pico-11.0)\r\n". +content_type(unknown) -> []; content_type(X) -> ["Content-Type: ", X, "\r\n"]. @@ -134,7 +134,7 @@ ".htm" -> html; ".txt" -> text; ".TXT" -> text; - Other -> binary + _ -> binary end. content_length([{"content-length",Str}|T]) -> @@ -158,7 +158,7 @@ {ok, Args} = regexp:split(Str, " "), case Args of ["POST", URI, Vsn] -> - {post, parse_vsn(Vsn) ,parse_uri(URI)}; + {post, parse_vsn(Vsn), parse_uri(URI)}; ["GET", URI, Vsn] -> {get, parse_vsn(Vsn), parse_uri(URI)}; _ -> Index: pico_http_server.erl =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/pico/src/pico_http_server.erl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- pico_http_server.erl 1 Mar 2003 11:14:10 -0000 1.1 +++ pico_http_server.erl 24 Dec 2006 19:41:27 -0000 1.2 @@ -154,15 +154,12 @@ default_form_handler(X, Socket) -> Str = io_lib:format("~p", [X]), - gen_tcp:send(Socket, [header(text), - body("white"), - "Request was <p><pre>", Str, "</pre>"]), + gen_tcp:send(Socket, [header({ok,html}), + "<html> <body>Request was <p><pre>", Str, "</pre></body> </html>"]), gen_tcp:close(Socket). handler_error(X) -> - [header(text), - body("white"), - "Handler error\n", X]. + [header({error,"500 Handler error",X})]. scan_header([$\n|T], [$\r,$\n,$\r|L]) -> {yes, reverse(L), T}; |