Some minor fixes. Thanks to @triska for them!

This commit is contained in:
Adrián Arroyo Calle
2022-10-09 18:09:52 +02:00
committed by Mark Thom
parent 140149f051
commit f2940ddfcf
2 changed files with 26 additions and 17 deletions

View File

@@ -539,7 +539,7 @@ The modules that ship with Scryer Prolog are also called
Probabilistic predicates and random number generators. Probabilistic predicates and random number generators.
* [`http/http_open`](src/lib/http/http_open.pl) Open a stream to * [`http/http_open`](src/lib/http/http_open.pl) Open a stream to
read answers from web servers. HTTPS is also supported. read answers from web servers. HTTPS is also supported.
* [`http/http_server`](src/lib/http/http_server.pl) Runs a HTTP/1.0 web server. * [`http/http_server`](src/lib/http/http_server.pl) Runs a HTTP/1.1 and HTTP/2.0 web server. Uses [Hyper](https://hyper.rs) as a backend. Supports some query and form handling.
* [`sgml`](src/lib/sgml.pl) * [`sgml`](src/lib/sgml.pl)
`load_html/3` and `load_xml/3` represent HTML and XML documents `load_html/3` and `load_xml/3` represent HTML and XML documents
as Prolog terms for convenient and efficient reasoning. Use as Prolog terms for convenient and efficient reasoning. Use

View File

@@ -79,8 +79,7 @@ module_qualification(M, H0, H) :-
H =.. [Method, Path, M:Goal]. H =.. [Method, Path, M:Goal].
http_listen_(Port, Handlers) :- http_listen_(Port, Handlers) :-
number_chars(Port, CPort), phrase(format_("0.0.0.0:~d", [Port]), Addr),
append("0.0.0.0:", CPort, Addr),
'$http_listen'(Addr, HttpListener),!, '$http_listen'(Addr, HttpListener),!,
format("Listening at ~s\n", [Addr]), format("Listening at ~s\n", [Addr]),
http_loop(HttpListener, Handlers). http_loop(HttpListener, Handlers).
@@ -99,10 +98,14 @@ http_loop(HttpListener, Handlers) :-
HttpResponse = http_response(_, _, _), HttpResponse = http_response(_, _, _),
(call(Handler, HttpRequest, HttpResponse) -> (call(Handler, HttpRequest, HttpResponse) ->
send_response(ResponseHandle, HttpResponse) send_response(ResponseHandle, HttpResponse)
; '$http_answer'(ResponseHandle, 500, [], "Internal Server Error") ; (
'$http_answer'(ResponseHandle, 500, [], ResponseStream),
call_cleanup(format(ResponseStream, "Internal Server Error", []), close(ResponseStream)))
) )
) )
; '$http_answer'(ResponseHandle, 404, [], "Not Found") ; (
'$http_answer'(ResponseHandle, 404, [], ResponseStream),
call_cleanup(format(ResponseStream, "Not Found"), close(ResponseStream)))
), ),
http_loop(HttpListener, Handlers). http_loop(HttpListener, Handlers).
@@ -110,29 +113,35 @@ send_response(ResponseHandle, http_response(StatusCode0, text(ResponseText), Res
default(StatusCode0, 200, StatusCode), default(StatusCode0, 200, StatusCode),
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0), maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream), '$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
format(ResponseStream, "~s", [ResponseText]), call_cleanup(
close(ResponseStream). format(ResponseStream, "~s", [ResponseText]),
close(ResponseStream)
).
send_response(ResponseHandle, http_response(StatusCode0, bytes(ResponseBytes), ResponseHeaders0)) :- send_response(ResponseHandle, http_response(StatusCode0, bytes(ResponseBytes), ResponseHeaders0)) :-
default(StatusCode0, 200, StatusCode), default(StatusCode0, 200, StatusCode),
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0), maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream), '$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
format(ResponseStream, "~s", [ResponseBytes]), call_cleanup(
close(ResponseStream). format(ResponseStream, "~s", [ResponseBytes]),
close(ResponseStream)
).
send_response(ResponseHandle, http_response(StatusCode0, file(Filename), ResponseHeaders0)) :- send_response(ResponseHandle, http_response(StatusCode0, file(Filename), ResponseHeaders0)) :-
default(StatusCode0, 200, StatusCode), default(StatusCode0, 200, StatusCode),
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0), maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream), '$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
setup_call_cleanup( call_cleanup(
open(Filename, read, FileStream, [type(binary)]), setup_call_cleanup(
( open(Filename, read, FileStream, [type(binary)]),
get_n_chars(FileStream, _, FileCs), (
format(ResponseStream, "~s", [FileCs]) get_n_chars(FileStream, _, FileCs),
format(ResponseStream, "~s", [FileCs])
),
close(FileStream)
), ),
close(FileStream) close(ResponseStream)
), ).
close(ResponseStream).
default(Var, Default, Out) :- default(Var, Default, Out) :-