89 lines
2.2 KiB
Erlang
89 lines
2.2 KiB
Erlang
|
-module(webserver_utils).
|
||
|
|
||
|
-compile(export_all).
|
||
|
|
||
|
-define(DEFAULT_STRING, "Great success!").
|
||
|
|
||
|
default_string() ->
|
||
|
?DEFAULT_STRING.
|
||
|
|
||
|
empty_body(Module, Socket, _, _, _) ->
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
"HTTP/1.1 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\nContent-length: 0\r\n\r\n"
|
||
|
).
|
||
|
|
||
|
copy_body_100_continue(Module, Socket, _, _, Body) ->
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
[
|
||
|
"HTTP/1.1 100 Continue\r\n\r\n"
|
||
|
"HTTP/1.1 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\nContent-length: "
|
||
|
++ integer_to_list(size(Body)) ++ "\r\n\r\n",
|
||
|
Body
|
||
|
]
|
||
|
).
|
||
|
|
||
|
pre_1_1_server(Module, Socket, _, _, Body) ->
|
||
|
Pid = list_to_pid(binary_to_list(Body)),
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
"HTTP/1.0 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\nContent-length: 14\r\n\r\n"
|
||
|
?DEFAULT_STRING
|
||
|
),
|
||
|
% We didn't signal a connection close, but we want the client to do that
|
||
|
% any way since we're 1.0 now
|
||
|
{error, closed} = Module:recv(Socket, 0),
|
||
|
Pid ! closed,
|
||
|
Module:close(Socket).
|
||
|
|
||
|
pre_1_1_server_keep_alive(Module, Socket, _, _, _) ->
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
"HTTP/1.0 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\n"
|
||
|
"Connection: Keep-Alive\r\n"
|
||
|
"Content-length: 14\r\n\r\n"
|
||
|
?DEFAULT_STRING
|
||
|
).
|
||
|
|
||
|
very_slow_response(Module, Socket, _, _, _) ->
|
||
|
timer:sleep(1000),
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
"HTTP/1.1 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\nContent-length: 14\r\n\r\n"
|
||
|
?DEFAULT_STRING
|
||
|
).
|
||
|
|
||
|
no_content_length(Module, Socket, _, _, _) ->
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
"HTTP/1.1 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\nConnection: close\r\n\r\n"
|
||
|
?DEFAULT_STRING
|
||
|
).
|
||
|
|
||
|
no_content_length_1_0(Module, Socket, _, _, _) ->
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
"HTTP/1.0 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\n\r\n"
|
||
|
?DEFAULT_STRING
|
||
|
).
|
||
|
|
||
|
trailing_space_header(Module, Socket, _, _, _) ->
|
||
|
Module:send(
|
||
|
Socket,
|
||
|
"HTTP/1.1 200 OK\r\n"
|
||
|
"Content-type: text/plain\r\n"
|
||
|
"Content-Length: 14 \r\n\r\n"
|
||
|
?DEFAULT_STRING
|
||
|
).
|
||
|
|
||
|
no_response(_, _, _, _, _) ->
|
||
|
ok.
|