|
@ -178,7 +178,7 @@ handle_response(Req, Buffer, {file, ResponseCode, UserHeaders, |
|
|
|
|
|
|
|
|
ResponseHeaders = [connection(Req, UserHeaders) | UserHeaders], |
|
|
ResponseHeaders = [connection(Req, UserHeaders) | UserHeaders], |
|
|
|
|
|
|
|
|
case elli_util:file_size(Filename) of |
|
|
|
|
|
|
|
|
case wsUtil:file_size(Filename) of |
|
|
{error, FileError} -> |
|
|
{error, FileError} -> |
|
|
handle_event(Mod, file_error, [FileError], Args), |
|
|
handle_event(Mod, file_error, [FileError], Args), |
|
|
send_server_error(Req#req.socket), |
|
|
send_server_error(Req#req.socket), |
|
@ -186,21 +186,21 @@ handle_response(Req, Buffer, {file, ResponseCode, UserHeaders, |
|
|
exit(normal); |
|
|
exit(normal); |
|
|
Size -> |
|
|
Size -> |
|
|
t(send_start), |
|
|
t(send_start), |
|
|
case elli_util:normalize_range(Range, Size) of |
|
|
|
|
|
|
|
|
case wsUtil:normalize_range(Range, Size) of |
|
|
undefined -> |
|
|
undefined -> |
|
|
send_file(Req, ResponseCode, |
|
|
send_file(Req, ResponseCode, |
|
|
[{<<"Content-Length">>, Size} | |
|
|
[{<<"Content-Length">>, Size} | |
|
|
ResponseHeaders], |
|
|
ResponseHeaders], |
|
|
Filename, {0, 0}); |
|
|
Filename, {0, 0}); |
|
|
{Offset, Length} -> |
|
|
{Offset, Length} -> |
|
|
ERange = elli_util:encode_range({Offset, Length}, Size), |
|
|
|
|
|
|
|
|
ERange = wsUtil:encode_range({Offset, Length}, Size), |
|
|
send_file(Req, 206, |
|
|
send_file(Req, 206, |
|
|
lists:append(ResponseHeaders, |
|
|
lists:append(ResponseHeaders, |
|
|
[{<<"Content-Length">>, Length}, |
|
|
[{<<"Content-Length">>, Length}, |
|
|
{<<"Content-Range">>, ERange}]), |
|
|
{<<"Content-Range">>, ERange}]), |
|
|
Filename, {Offset, Length}); |
|
|
Filename, {Offset, Length}); |
|
|
invalid_range -> |
|
|
invalid_range -> |
|
|
ERange = elli_util:encode_range(invalid_range, Size), |
|
|
|
|
|
|
|
|
ERange = wsUtil:encode_range(invalid_range, Size), |
|
|
send_response(Req, 416, |
|
|
send_response(Req, 416, |
|
|
lists:append(ResponseHeaders, |
|
|
lists:append(ResponseHeaders, |
|
|
[{<<"Content-Length">>, 0}, |
|
|
[{<<"Content-Length">>, 0}, |
|
@ -251,7 +251,7 @@ send_response(Req, Code, Headers, UserBody) -> |
|
|
Code :: elli:response_code(), |
|
|
Code :: elli:response_code(), |
|
|
Headers :: elli:headers(), |
|
|
Headers :: elli:headers(), |
|
|
Filename :: file:filename(), |
|
|
Filename :: file:filename(), |
|
|
Range :: elli_util:range(). |
|
|
|
|
|
|
|
|
Range :: wsUtil:range(). |
|
|
send_file(#req{callback = {Mod, Args}} = Req, Code, Headers, Filename, Range) -> |
|
|
send_file(#req{callback = {Mod, Args}} = Req, Code, Headers, Filename, Range) -> |
|
|
ResponseHeaders = assemble_response_headers(Code, Headers), |
|
|
ResponseHeaders = assemble_response_headers(Code, Headers), |
|
|
|
|
|
|
|
@ -323,21 +323,15 @@ execute_callback(#req{callback = {Mod, Args}} = Req) -> |
|
|
catch |
|
|
catch |
|
|
throw:{ResponseCode, Headers, Body} when is_integer(ResponseCode) -> |
|
|
throw:{ResponseCode, Headers, Body} when is_integer(ResponseCode) -> |
|
|
{response, ResponseCode, Headers, Body}; |
|
|
{response, ResponseCode, Headers, Body}; |
|
|
?WITH_STACKTRACE(throw, Exc, Stacktrace) |
|
|
|
|
|
handle_event(Mod, request_throw, |
|
|
|
|
|
[Req, Exc, Stacktrace], |
|
|
|
|
|
Args), |
|
|
|
|
|
{response, 500, [], <<"Internal server error">>}; |
|
|
|
|
|
?WITH_STACKTRACE(error, Error, Stacktrace) |
|
|
|
|
|
handle_event(Mod, request_error, |
|
|
|
|
|
[Req, Error, Stacktrace], |
|
|
|
|
|
Args), |
|
|
|
|
|
{response, 500, [], <<"Internal server error">>}; |
|
|
|
|
|
?WITH_STACKTRACE(exit, Exit, Stacktrace) |
|
|
|
|
|
handle_event(Mod, request_exit, |
|
|
|
|
|
[Req, Exit, Stacktrace], |
|
|
|
|
|
Args), |
|
|
|
|
|
{response, 500, [], <<"Internal server error">>} |
|
|
|
|
|
|
|
|
throw:Exc:Stacktrace -> |
|
|
|
|
|
handle_event(Mod, request_throw, [Req, Exc, Stacktrace], Args), |
|
|
|
|
|
{response, 500, [], <<"Internal server error">>}; |
|
|
|
|
|
error:Error:Stacktrace -> |
|
|
|
|
|
handle_event(Mod, request_error, [Req, Error, Stacktrace], Args), |
|
|
|
|
|
{response, 500, [], <<"Internal server error">>}; |
|
|
|
|
|
exit:Exit:Stacktrace -> |
|
|
|
|
|
handle_event(Mod, request_exit, [Req, Exit, Stacktrace], Args), |
|
|
|
|
|
{response, 500, [], <<"Internal server error">>} |
|
|
end . |
|
|
end . |
|
|
|
|
|
|
|
|
%% |
|
|
%% |
|
@ -813,8 +807,8 @@ handle_event(Mod, Name, EventArgs, ElliArgs) -> |
|
|
try |
|
|
try |
|
|
Mod:handle_event(Name, EventArgs, ElliArgs) |
|
|
Mod:handle_event(Name, EventArgs, ElliArgs) |
|
|
catch |
|
|
catch |
|
|
?WITH_STACKTRACE(EvClass, EvError, Stacktrace) |
|
|
|
|
|
?LOG_ERROR("~p:handle_event/3 crashed ~p:~p~n~p", |
|
|
|
|
|
|
|
|
EvClass:EvError:Stacktrace -> |
|
|
|
|
|
?wsErr("~p:handle_event/3 crashed ~p:~p~n~p", |
|
|
[Mod, EvClass, EvError, Stacktrace]) |
|
|
[Mod, EvClass, EvError, Stacktrace]) |
|
|
end. |
|
|
end. |
|
|
|
|
|
|
|
@ -937,7 +931,7 @@ status(506) -> <<"506 Variant Also Negotiates">>; |
|
|
status(507) -> <<"507 Insufficient Storage">>; |
|
|
status(507) -> <<"507 Insufficient Storage">>; |
|
|
status(510) -> <<"510 Not Extended">>; |
|
|
status(510) -> <<"510 Not Extended">>; |
|
|
status(511) -> <<"511 Network Authentication Required">>; |
|
|
status(511) -> <<"511 Network Authentication Required">>; |
|
|
status(I) when is_integer(I), I >= 100, I < 1000 -> list_to_binary(io_lib:format("~B Status", [I])); |
|
|
|
|
|
|
|
|
status(I) when is_integer(I), I >= 100, I < 1000 -> <<(integer_to_binary(I))/binary, "Status">>; |
|
|
status(B) when is_binary(B) -> B. |
|
|
status(B) when is_binary(B) -> B. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|