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.
* [`http/http_open`](src/lib/http/http_open.pl) Open a stream to
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)
`load_html/3` and `load_xml/3` represent HTML and XML documents
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].
http_listen_(Port, Handlers) :-
number_chars(Port, CPort),
append("0.0.0.0:", CPort, Addr),
phrase(format_("0.0.0.0:~d", [Port]), Addr),
'$http_listen'(Addr, HttpListener),!,
format("Listening at ~s\n", [Addr]),
http_loop(HttpListener, Handlers).
@@ -99,10 +98,14 @@ http_loop(HttpListener, Handlers) :-
HttpResponse = http_response(_, _, _),
(call(Handler, HttpRequest, 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).
@@ -110,29 +113,35 @@ send_response(ResponseHandle, http_response(StatusCode0, text(ResponseText), Res
default(StatusCode0, 200, StatusCode),
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
format(ResponseStream, "~s", [ResponseText]),
close(ResponseStream).
call_cleanup(
format(ResponseStream, "~s", [ResponseText]),
close(ResponseStream)
).
send_response(ResponseHandle, http_response(StatusCode0, bytes(ResponseBytes), ResponseHeaders0)) :-
default(StatusCode0, 200, StatusCode),
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
format(ResponseStream, "~s", [ResponseBytes]),
close(ResponseStream).
call_cleanup(
format(ResponseStream, "~s", [ResponseBytes]),
close(ResponseStream)
).
send_response(ResponseHandle, http_response(StatusCode0, file(Filename), ResponseHeaders0)) :-
default(StatusCode0, 200, StatusCode),
maplist(map_header_kv_2, ResponseHeaders, ResponseHeaders0),
'$http_answer'(ResponseHandle, StatusCode, ResponseHeaders, ResponseStream),
setup_call_cleanup(
open(Filename, read, FileStream, [type(binary)]),
(
get_n_chars(FileStream, _, FileCs),
format(ResponseStream, "~s", [FileCs])
call_cleanup(
setup_call_cleanup(
open(Filename, read, FileStream, [type(binary)]),
(
get_n_chars(FileStream, _, FileCs),
format(ResponseStream, "~s", [FileCs])
),
close(FileStream)
),
close(FileStream)
),
close(ResponseStream).
close(ResponseStream)
).
default(Var, Default, Out) :-