kibi-swipl-linux-x64-gnu 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/bin/swipl +0 -0
- package/bin/swipl-win +0 -0
- package/build-manifest.json +70 -0
- package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
- package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
- package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
- package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
- package/lib/swipl/ABI +1 -0
- package/lib/swipl/LICENSE +41 -0
- package/lib/swipl/README.md +116 -0
- package/lib/swipl/app/README.md +25 -0
- package/lib/swipl/app/app.pl +87 -0
- package/lib/swipl/app/pack.pl +350 -0
- package/lib/swipl/app/qlf.pl +521 -0
- package/lib/swipl/app/splfr.pl +177 -0
- package/lib/swipl/app/sys.pl +310 -0
- package/lib/swipl/bin/swipl.home +1 -0
- package/lib/swipl/boot/apply.pl +73 -0
- package/lib/swipl/boot/attvar.pl +344 -0
- package/lib/swipl/boot/autoload.pl +1226 -0
- package/lib/swipl/boot/bags.pl +283 -0
- package/lib/swipl/boot/dcg.pl +388 -0
- package/lib/swipl/boot/dicts.pl +193 -0
- package/lib/swipl/boot/dwim.pl +485 -0
- package/lib/swipl/boot/engines.pl +152 -0
- package/lib/swipl/boot/expand.pl +1628 -0
- package/lib/swipl/boot/gc.pl +65 -0
- package/lib/swipl/boot/history.pl +304 -0
- package/lib/swipl/boot/init.pl +4682 -0
- package/lib/swipl/boot/iri.pl +64 -0
- package/lib/swipl/boot/license.pl +390 -0
- package/lib/swipl/boot/load.pl +81 -0
- package/lib/swipl/boot/messages.pl +2521 -0
- package/lib/swipl/boot/packs.pl +306 -0
- package/lib/swipl/boot/predopts.pl +154 -0
- package/lib/swipl/boot/qlf.pl +141 -0
- package/lib/swipl/boot/rc.pl +263 -0
- package/lib/swipl/boot/syspred.pl +1634 -0
- package/lib/swipl/boot/tabling.pl +2321 -0
- package/lib/swipl/boot/threads.pl +42 -0
- package/lib/swipl/boot/toplevel.pl +2248 -0
- package/lib/swipl/boot/topvars.pl +261 -0
- package/lib/swipl/boot.prc +0 -0
- package/lib/swipl/cmake/swipl.cmake +131 -0
- package/lib/swipl/customize/README.md +23 -0
- package/lib/swipl/customize/edit +101 -0
- package/lib/swipl/customize/init.pl +164 -0
- package/lib/swipl/demo/README.md +33 -0
- package/lib/swipl/demo/likes.pl +44 -0
- package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
- package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
- package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
- package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
- package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
- package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
- package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
- package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
- package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
- package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
- package/lib/swipl/doc/packages/examples/http/README.md +98 -0
- package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
- package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
- package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
- package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
- package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
- package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
- package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
- package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
- package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
- package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
- package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
- package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
- package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
- package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
- package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
- package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
- package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
- package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
- package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
- package/lib/swipl/include/SWI-Prolog.h +1544 -0
- package/lib/swipl/include/SWI-Stream.h +537 -0
- package/lib/swipl/include/Yap/YapInterface.h +283 -0
- package/lib/swipl/include/sicstus/sicstus.h +452 -0
- package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
- package/lib/swipl/lib/x86_64-linux/files.so +0 -0
- package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
- package/lib/swipl/lib/x86_64-linux/json.so +0 -0
- package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
- package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
- package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
- package/lib/swipl/lib/x86_64-linux/process.so +0 -0
- package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
- package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
- package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
- package/lib/swipl/lib/x86_64-linux/time.so +0 -0
- package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
- package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
- package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
- package/lib/swipl/library/INDEX.pl +1020 -0
- package/lib/swipl/library/aggregate.pl +755 -0
- package/lib/swipl/library/ansi_term.pl +653 -0
- package/lib/swipl/library/apply.pl +426 -0
- package/lib/swipl/library/apply_macros.pl +497 -0
- package/lib/swipl/library/arithmetic.pl +320 -0
- package/lib/swipl/library/assoc.pl +522 -0
- package/lib/swipl/library/atom.pl +169 -0
- package/lib/swipl/library/backcomp.pl +688 -0
- package/lib/swipl/library/base32.pl +291 -0
- package/lib/swipl/library/base64.pl +441 -0
- package/lib/swipl/library/broadcast.pl +161 -0
- package/lib/swipl/library/build/cmake.pl +137 -0
- package/lib/swipl/library/build/conan.pl +232 -0
- package/lib/swipl/library/build/make.pl +168 -0
- package/lib/swipl/library/build/tools.pl +825 -0
- package/lib/swipl/library/charsio.pl +195 -0
- package/lib/swipl/library/check.pl +1097 -0
- package/lib/swipl/library/check_installation.pl +912 -0
- package/lib/swipl/library/clp/INDEX.pl +157 -0
- package/lib/swipl/library/clp/bounds.pl +2036 -0
- package/lib/swipl/library/clp/clp_distinct.pl +263 -0
- package/lib/swipl/library/clp/clp_events.pl +92 -0
- package/lib/swipl/library/clp/clpb.pl +1896 -0
- package/lib/swipl/library/clp/clpfd.pl +7906 -0
- package/lib/swipl/library/clp/simplex.pl +1580 -0
- package/lib/swipl/library/codesio.pl +182 -0
- package/lib/swipl/library/coinduction.pl +183 -0
- package/lib/swipl/library/console_input.pl +289 -0
- package/lib/swipl/library/csv.pl +611 -0
- package/lib/swipl/library/ctypes.pl +161 -0
- package/lib/swipl/library/date.pl +370 -0
- package/lib/swipl/library/dcg/INDEX.pl +35 -0
- package/lib/swipl/library/dcg/basics.pl +514 -0
- package/lib/swipl/library/dcg/high_order.pl +227 -0
- package/lib/swipl/library/debug.pl +499 -0
- package/lib/swipl/library/dialect/bim.pl +186 -0
- package/lib/swipl/library/dialect/commons.pl +77 -0
- package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
- package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
- package/lib/swipl/library/dialect/hprolog.pl +314 -0
- package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
- package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
- package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
- package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
- package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
- package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
- package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
- package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
- package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
- package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
- package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
- package/lib/swipl/library/dialect/sicstus.pl +582 -0
- package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
- package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
- package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
- package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
- package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
- package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
- package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
- package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
- package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
- package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
- package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
- package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
- package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
- package/lib/swipl/library/dialect/sicstus4.pl +200 -0
- package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
- package/lib/swipl/library/dialect/xsb/README.md +20 -0
- package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
- package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
- package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
- package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
- package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
- package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
- package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
- package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
- package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
- package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
- package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
- package/lib/swipl/library/dialect/xsb/source.pl +308 -0
- package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
- package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
- package/lib/swipl/library/dialect/xsb/string.pl +76 -0
- package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
- package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
- package/lib/swipl/library/dialect/xsb.pl +688 -0
- package/lib/swipl/library/dialect/yap/README.TXT +8 -0
- package/lib/swipl/library/dialect/yap.pl +283 -0
- package/lib/swipl/library/dialect.pl +123 -0
- package/lib/swipl/library/dicts.pl +399 -0
- package/lib/swipl/library/dif.pl +426 -0
- package/lib/swipl/library/edinburgh.pl +138 -0
- package/lib/swipl/library/edit.pl +783 -0
- package/lib/swipl/library/error.pl +495 -0
- package/lib/swipl/library/exceptions.pl +231 -0
- package/lib/swipl/library/explain.pl +543 -0
- package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
- package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
- package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
- package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
- package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
- package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
- package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
- package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
- package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
- package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
- package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
- package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
- package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
- package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
- package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
- package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
- package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
- package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
- package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
- package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
- package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
- package/lib/swipl/library/ext/chr/chr.pl +686 -0
- package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
- package/lib/swipl/library/ext/clib/cgi.pl +86 -0
- package/lib/swipl/library/ext/clib/crypt.pl +44 -0
- package/lib/swipl/library/ext/clib/filesex.pl +644 -0
- package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
- package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
- package/lib/swipl/library/ext/clib/md5.pl +68 -0
- package/lib/swipl/library/ext/clib/memfile.pl +61 -0
- package/lib/swipl/library/ext/clib/process.pl +573 -0
- package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
- package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
- package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
- package/lib/swipl/library/ext/clib/sched.pl +85 -0
- package/lib/swipl/library/ext/clib/sha.pl +162 -0
- package/lib/swipl/library/ext/clib/socket.pl +1102 -0
- package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
- package/lib/swipl/library/ext/clib/streampool.pl +136 -0
- package/lib/swipl/library/ext/clib/syslog.pl +180 -0
- package/lib/swipl/library/ext/clib/time.pl +194 -0
- package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
- package/lib/swipl/library/ext/clib/uid.pl +220 -0
- package/lib/swipl/library/ext/clib/unix.pl +317 -0
- package/lib/swipl/library/ext/clib/uri.pl +530 -0
- package/lib/swipl/library/ext/clib/uuid.pl +207 -0
- package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
- package/lib/swipl/library/ext/http/http/README.md +34 -0
- package/lib/swipl/library/ext/http/http/ax.pl +189 -0
- package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
- package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
- package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
- package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
- package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
- package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
- package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
- package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
- package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
- package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
- package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
- package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
- package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
- package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
- package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
- package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
- package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
- package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
- package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
- package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
- package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
- package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
- package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
- package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
- package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
- package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
- package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
- package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
- package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
- package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
- package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
- package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
- package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
- package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
- package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
- package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
- package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
- package/lib/swipl/library/ext/http/http/hub.pl +600 -0
- package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
- package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
- package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
- package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
- package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
- package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
- package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
- package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
- package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
- package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
- package/lib/swipl/library/ext/json/INDEX.pl +36 -0
- package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
- package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
- package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
- package/lib/swipl/library/ext/json/http/json.pl +48 -0
- package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
- package/lib/swipl/library/ext/json/json.pl +1215 -0
- package/lib/swipl/library/ext/json/json_convert.pl +681 -0
- package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
- package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
- package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
- package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
- package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
- package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
- package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
- package/lib/swipl/library/ext/nlp/isub.pl +162 -0
- package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
- package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
- package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
- package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
- package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
- package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
- package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
- package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
- package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
- package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
- package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
- package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
- package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
- package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
- package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
- package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
- package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
- package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
- package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
- package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
- package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
- package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
- package/lib/swipl/library/ext/ssl/saml.pl +609 -0
- package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
- package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
- package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
- package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
- package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
- package/lib/swipl/library/fastrw.pl +105 -0
- package/lib/swipl/library/files.pl +80 -0
- package/lib/swipl/library/gensym.pl +111 -0
- package/lib/swipl/library/git.pl +1027 -0
- package/lib/swipl/library/hashtable.pl +365 -0
- package/lib/swipl/library/heaps.pl +252 -0
- package/lib/swipl/library/hotfix.pl +239 -0
- package/lib/swipl/library/http/jquery.pl +103 -0
- package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
- package/lib/swipl/library/increval.pl +217 -0
- package/lib/swipl/library/intercept.pl +263 -0
- package/lib/swipl/library/iostream.pl +237 -0
- package/lib/swipl/library/iri_scheme/file.pl +70 -0
- package/lib/swipl/library/lazy_lists.pl +481 -0
- package/lib/swipl/library/listing.pl +1362 -0
- package/lib/swipl/library/lists.pl +860 -0
- package/lib/swipl/library/lynx/INDEX.pl +14 -0
- package/lib/swipl/library/lynx/format.pl +380 -0
- package/lib/swipl/library/lynx/html_style.pl +129 -0
- package/lib/swipl/library/lynx/html_text.pl +865 -0
- package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
- package/lib/swipl/library/macros.pl +451 -0
- package/lib/swipl/library/main.pl +1200 -0
- package/lib/swipl/library/make.pl +197 -0
- package/lib/swipl/library/modules.pl +129 -0
- package/lib/swipl/library/nb_rbtrees.pl +267 -0
- package/lib/swipl/library/nb_set.pl +203 -0
- package/lib/swipl/library/obfuscate.pl +115 -0
- package/lib/swipl/library/occurs.pl +241 -0
- package/lib/swipl/library/operators.pl +182 -0
- package/lib/swipl/library/option.pl +388 -0
- package/lib/swipl/library/optparse.pl +966 -0
- package/lib/swipl/library/ordsets.pl +518 -0
- package/lib/swipl/library/oset.pl +160 -0
- package/lib/swipl/library/pairs.pl +187 -0
- package/lib/swipl/library/persistency.pl +713 -0
- package/lib/swipl/library/pio.pl +47 -0
- package/lib/swipl/library/portray_text.pl +277 -0
- package/lib/swipl/library/pprint.pl +940 -0
- package/lib/swipl/library/predicate_options.pl +975 -0
- package/lib/swipl/library/prolog_autoload.pl +233 -0
- package/lib/swipl/library/prolog_breakpoints.pl +396 -0
- package/lib/swipl/library/prolog_clause.pl +1104 -0
- package/lib/swipl/library/prolog_code.pl +416 -0
- package/lib/swipl/library/prolog_codewalk.pl +1248 -0
- package/lib/swipl/library/prolog_colour.pl +3301 -0
- package/lib/swipl/library/prolog_colour.qlf +0 -0
- package/lib/swipl/library/prolog_config.pl +154 -0
- package/lib/swipl/library/prolog_coverage.pl +1333 -0
- package/lib/swipl/library/prolog_debug.pl +404 -0
- package/lib/swipl/library/prolog_deps.pl +675 -0
- package/lib/swipl/library/prolog_evaluable.pl +234 -0
- package/lib/swipl/library/prolog_format.pl +219 -0
- package/lib/swipl/library/prolog_history.pl +161 -0
- package/lib/swipl/library/prolog_jiti.pl +333 -0
- package/lib/swipl/library/prolog_locale.pl +61 -0
- package/lib/swipl/library/prolog_metainference.pl +307 -0
- package/lib/swipl/library/prolog_pack.pl +3906 -0
- package/lib/swipl/library/prolog_profile.pl +346 -0
- package/lib/swipl/library/prolog_qlfmake.pl +533 -0
- package/lib/swipl/library/prolog_source.pl +1188 -0
- package/lib/swipl/library/prolog_stack.pl +794 -0
- package/lib/swipl/library/prolog_trace.pl +365 -0
- package/lib/swipl/library/prolog_versions.pl +347 -0
- package/lib/swipl/library/prolog_wrap.pl +164 -0
- package/lib/swipl/library/prolog_xref.pl +3090 -0
- package/lib/swipl/library/prolog_xref.qlf +0 -0
- package/lib/swipl/library/pure_input.pl +266 -0
- package/lib/swipl/library/qpforeign.pl +695 -0
- package/lib/swipl/library/qsave.pl +1516 -0
- package/lib/swipl/library/quasi_quotations.pl +300 -0
- package/lib/swipl/library/quintus.pl +437 -0
- package/lib/swipl/library/random.pl +459 -0
- package/lib/swipl/library/rbtrees.pl +1153 -0
- package/lib/swipl/library/readln.pl +256 -0
- package/lib/swipl/library/readutil.pl +304 -0
- package/lib/swipl/library/record.pl +544 -0
- package/lib/swipl/library/rwlocks.pl +172 -0
- package/lib/swipl/library/sandbox.pl +1384 -0
- package/lib/swipl/library/semweb/dc.rdfs +198 -0
- package/lib/swipl/library/semweb/eor.rdfs +95 -0
- package/lib/swipl/library/semweb/owl.owl +287 -0
- package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
- package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
- package/lib/swipl/library/settings.pl +755 -0
- package/lib/swipl/library/shell.pl +462 -0
- package/lib/swipl/library/shlib.pl +670 -0
- package/lib/swipl/library/solution_sequences.pl +439 -0
- package/lib/swipl/library/sort.pl +119 -0
- package/lib/swipl/library/statistics.pl +541 -0
- package/lib/swipl/library/streams.pl +118 -0
- package/lib/swipl/library/strings.pl +469 -0
- package/lib/swipl/library/system.pl +95 -0
- package/lib/swipl/library/tables.pl +381 -0
- package/lib/swipl/library/tableutil.pl +771 -0
- package/lib/swipl/library/tabling.pl +42 -0
- package/lib/swipl/library/terms.pl +457 -0
- package/lib/swipl/library/theme/auto.pl +61 -0
- package/lib/swipl/library/theme/dark.pl +455 -0
- package/lib/swipl/library/theme/light.pl +45 -0
- package/lib/swipl/library/thread.pl +810 -0
- package/lib/swipl/library/thread_pool.pl +508 -0
- package/lib/swipl/library/threadutil.pl +574 -0
- package/lib/swipl/library/tty.pl +316 -0
- package/lib/swipl/library/ugraphs.pl +644 -0
- package/lib/swipl/library/unicode/INDEX.pl +6 -0
- package/lib/swipl/library/unicode/blocks.pl +414 -0
- package/lib/swipl/library/url.pl +1129 -0
- package/lib/swipl/library/utf8.pl +145 -0
- package/lib/swipl/library/varnumbers.pl +221 -0
- package/lib/swipl/library/vm.pl +251 -0
- package/lib/swipl/library/wfs.pl +205 -0
- package/lib/swipl/library/when.pl +263 -0
- package/lib/swipl/library/writef.pl +278 -0
- package/lib/swipl/library/www_browser.pl +251 -0
- package/lib/swipl/library/yall.pl +574 -0
- package/lib/swipl/library/zip.pl +211 -0
- package/lib/swipl/swipl.home +1 -0
- package/lib/vendor/libcrypto.so.3 +0 -0
- package/lib/vendor/libpcre2-8.so.0 +0 -0
- package/lib/vendor/libssl.so.3 +0 -0
- package/lib/vendor/libz.so.1 +0 -0
- package/licenses/OpenSSL-LICENSE.txt +177 -0
- package/licenses/PCRE2-COPYING +5 -0
- package/licenses/README.md +12 -0
- package/licenses/SWI-Prolog-LICENSE +41 -0
- package/licenses/zlib-LICENSE +22 -0
- package/package.json +27 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2002-2011, University of Amsterdam
|
|
7
|
+
All rights reserved.
|
|
8
|
+
|
|
9
|
+
Redistribution and use in source and binary forms, with or without
|
|
10
|
+
modification, are permitted provided that the following conditions
|
|
11
|
+
are met:
|
|
12
|
+
|
|
13
|
+
1. Redistributions of source code must retain the above copyright
|
|
14
|
+
notice, this list of conditions and the following disclaimer.
|
|
15
|
+
|
|
16
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
17
|
+
notice, this list of conditions and the following disclaimer in
|
|
18
|
+
the documentation and/or other materials provided with the
|
|
19
|
+
distribution.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
24
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
25
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
26
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
27
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
28
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
29
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
30
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
31
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
32
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
:- use_module(library('http/http_client')).
|
|
36
|
+
:- use_module(library(debug)).
|
|
37
|
+
:- use_module(library('http/http_sgml_plugin')).
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
% stress(+Times, +Threads, +URLOrAlias)
|
|
41
|
+
%
|
|
42
|
+
% Typical use: stress(1000, 3, 1): run the test 1000 times with
|
|
43
|
+
% 3 client threads on the /xml test from demo_body.pl and verify
|
|
44
|
+
% the parsed result.
|
|
45
|
+
|
|
46
|
+
stress(Times, Parallel, Alias) :-
|
|
47
|
+
answer(Alias, URL, _),
|
|
48
|
+
!,
|
|
49
|
+
stress(Times, Parallel, URL).
|
|
50
|
+
stress(Times, Parallel, URL) :-
|
|
51
|
+
( pool(pool, _)
|
|
52
|
+
-> delete_pool(pool)
|
|
53
|
+
; true
|
|
54
|
+
),
|
|
55
|
+
create_pool(pool, Parallel),
|
|
56
|
+
stress(Times, URL),
|
|
57
|
+
wait_done(Times),
|
|
58
|
+
delete_pool(pool).
|
|
59
|
+
|
|
60
|
+
wait_done(0) :- !.
|
|
61
|
+
wait_done(N) :-
|
|
62
|
+
thread_get_message(done, Result),
|
|
63
|
+
put(Result), flush,
|
|
64
|
+
N1 is N - 1,
|
|
65
|
+
wait_done(N1).
|
|
66
|
+
|
|
67
|
+
stress(0, _) :- !.
|
|
68
|
+
stress(N, URL) :-
|
|
69
|
+
thread_send_message(pool, stress_url(URL)),
|
|
70
|
+
NN is N - 1,
|
|
71
|
+
stress(NN, URL).
|
|
72
|
+
|
|
73
|
+
stress_url(URL) :-
|
|
74
|
+
thread_self(Me),
|
|
75
|
+
atom_number(N, Me),
|
|
76
|
+
( catch(http_get(URL, X, [connection(close)]), E, true)
|
|
77
|
+
-> ( var(E)
|
|
78
|
+
-> ( answer(_, URL, Correct)
|
|
79
|
+
-> ( X == Correct
|
|
80
|
+
-> thread_send_message(done, N)
|
|
81
|
+
; thread_send_message(done, !)
|
|
82
|
+
)
|
|
83
|
+
; thread_send_message(done, ?)
|
|
84
|
+
)
|
|
85
|
+
; print_message(error, E),
|
|
86
|
+
thread_send_message(done, 'E')
|
|
87
|
+
)
|
|
88
|
+
; thread_send_message(done, -)
|
|
89
|
+
).
|
|
90
|
+
|
|
91
|
+
:- dynamic
|
|
92
|
+
pool/2. % name, threads
|
|
93
|
+
|
|
94
|
+
create_pool(Name, N) :-
|
|
95
|
+
message_queue_create(Name),
|
|
96
|
+
findall(Id, (between(1, N, _),
|
|
97
|
+
thread_create(worker(Name), Id, [])), Threads),
|
|
98
|
+
assert(pool(Name, Threads)).
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
delete_pool(Name) :-
|
|
102
|
+
pool(Name, Threads),
|
|
103
|
+
forall(member(_, Threads), thread_send_message(Name, thread_exit(ok))),
|
|
104
|
+
forall(member(Id, Threads), thread_join(Id, _)),
|
|
105
|
+
message_queue_destroy(Name),
|
|
106
|
+
retract(pool(Name, Threads)).
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
worker(Queue) :-
|
|
113
|
+
repeat,
|
|
114
|
+
thread_get_message(Queue, Goal),
|
|
115
|
+
( catch(Goal, E, true)
|
|
116
|
+
-> ( var(E)
|
|
117
|
+
-> true
|
|
118
|
+
; print_message(error, E)
|
|
119
|
+
)
|
|
120
|
+
; print_message(error, goal_failed(Goal))
|
|
121
|
+
),
|
|
122
|
+
fail.
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
/*******************************
|
|
126
|
+
* CORRECT ANSWERS *
|
|
127
|
+
*******************************/
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
answer(1, 'http://localhost:3000/xml',
|
|
131
|
+
[ element(message,
|
|
132
|
+
[],
|
|
133
|
+
[ '\n ',
|
|
134
|
+
element(head,
|
|
135
|
+
[],
|
|
136
|
+
[ '\n ',
|
|
137
|
+
element(from,
|
|
138
|
+
[],
|
|
139
|
+
[ 'Jan Wielemaker'
|
|
140
|
+
]),
|
|
141
|
+
'\n ',
|
|
142
|
+
element(to,
|
|
143
|
+
[],
|
|
144
|
+
[ 'Prolog users'
|
|
145
|
+
]),
|
|
146
|
+
'\n ',
|
|
147
|
+
element(subject,
|
|
148
|
+
[],
|
|
149
|
+
[ 'The SWI-Prolog web-server'
|
|
150
|
+
]),
|
|
151
|
+
'\n '
|
|
152
|
+
]),
|
|
153
|
+
'\n ',
|
|
154
|
+
element(body,
|
|
155
|
+
[],
|
|
156
|
+
[ '\n',
|
|
157
|
+
element(p,
|
|
158
|
+
[],
|
|
159
|
+
[ '\nThis is the first demo of the web-server serving an XML message\n'
|
|
160
|
+
]),
|
|
161
|
+
'\n '
|
|
162
|
+
]),
|
|
163
|
+
'\n'
|
|
164
|
+
])
|
|
165
|
+
]).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog
|
|
6
|
+
Copying: This example is in the public domain
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
:- module(http_daemon, []).
|
|
10
|
+
:- use_module(library(http/http_unix_daemon)).
|
|
11
|
+
:- use_module(library(http/http_server)).
|
|
12
|
+
|
|
13
|
+
:- http_handler(/, hello, []).
|
|
14
|
+
|
|
15
|
+
/** <module> Demo running SWI-Prolog HTTP services as a Unix daemon process
|
|
16
|
+
|
|
17
|
+
The first example runs this service as a normal user. The server does
|
|
18
|
+
not produce any output. It is detached from the controlling terminal and
|
|
19
|
+
thus remains running if you logout. You can use library(http/http_log)
|
|
20
|
+
to enable logging of the HTTP requests.
|
|
21
|
+
|
|
22
|
+
swipl demo_daemon.pl --port=5000
|
|
23
|
+
|
|
24
|
+
The second example runs this server on a priviledged user on the default
|
|
25
|
+
port 80, avoiding the need for a proxy server. In addition, it sends
|
|
26
|
+
errors, warnings and debug (see debug/3) messages to syslog deamon. Note
|
|
27
|
+
that the =|-q|= suppresses informational messages such as loading Prolog
|
|
28
|
+
files.
|
|
29
|
+
|
|
30
|
+
sudo swipl demo_daemon.pl -- --syslog=swi-demo --user=www-data
|
|
31
|
+
|
|
32
|
+
@see library(http/http_unix_daemon) for more options to http_daemon/0.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
hello(_Request) :-
|
|
37
|
+
reply_html_page(title('Hello'),
|
|
38
|
+
p('Hello from SWI-Prolog!')).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
:- use_module(library(http/thread_httpd)).
|
|
2
|
+
:- use_module(library(http/html_write)).
|
|
3
|
+
:- use_module(library(http/http_dispatch)).
|
|
4
|
+
:- use_module(library(http/http_dirindex)).
|
|
5
|
+
|
|
6
|
+
:- http_handler(root(.), serve_files, [prefix]).
|
|
7
|
+
|
|
8
|
+
%! server(+Port, +DirSpec) is det.
|
|
9
|
+
%
|
|
10
|
+
% Start the server at port Port, serving directories below
|
|
11
|
+
% DirSpec. DirSpec may contain ~ and $var.
|
|
12
|
+
%
|
|
13
|
+
% This simple example defines a complete web-server for static
|
|
14
|
+
% pages. Note that more specific handlers than the bave (i.e.
|
|
15
|
+
% using a longer path) have priority over this handler and can
|
|
16
|
+
% thus be used to add dynamic parts to your server.
|
|
17
|
+
|
|
18
|
+
server(Port, DirSpec) :-
|
|
19
|
+
expand_file_name(DirSpec, [Dir]),
|
|
20
|
+
assert(user:file_search_path(document_root, Dir)),
|
|
21
|
+
http_server(http_dispatch, [port(Port)]).
|
|
22
|
+
|
|
23
|
+
%! serve_files(Request)
|
|
24
|
+
%
|
|
25
|
+
% Server a file or directory according to the path_info field,
|
|
26
|
+
% which contains the path *after* the http-location matched by the
|
|
27
|
+
% handler. If the handler is matched *exactly*, path_info is
|
|
28
|
+
% missing.
|
|
29
|
+
%
|
|
30
|
+
% http_safe_file/1 checks the path for attempts to escape from the
|
|
31
|
+
% hierarchy defined by the =document_root= alias. We find the path
|
|
32
|
+
% before calling one of the two reply functions because we want to
|
|
33
|
+
% know whether we are dealing with a directory or a file. After
|
|
34
|
+
% that, the path is absolute and we must pass unsafe(true) to
|
|
35
|
+
% avoid the path-checker in the reply-functions complaining.
|
|
36
|
+
|
|
37
|
+
serve_files(Request) :-
|
|
38
|
+
( memberchk(path_info(PathInfo), Request)
|
|
39
|
+
-> true
|
|
40
|
+
; PathInfo = './'
|
|
41
|
+
),
|
|
42
|
+
http_safe_file(document_root(PathInfo), []),
|
|
43
|
+
absolute_file_name(document_root(PathInfo), Path,
|
|
44
|
+
[ access(read)] ),
|
|
45
|
+
( exists_directory(Path)
|
|
46
|
+
-> http_reply_dirindex(Path, [unsafe(true)], Request)
|
|
47
|
+
; http_reply_file(Path, [unsafe(true)], Request)
|
|
48
|
+
).
|
|
49
|
+
|
|
50
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
:- use_module(library(http/http_server)).
|
|
2
|
+
|
|
3
|
+
:- initialization
|
|
4
|
+
http_server([port(8080)]).
|
|
5
|
+
|
|
6
|
+
:- http_handler(root(.),
|
|
7
|
+
http_redirect(moved, location_by_id(home_page)),
|
|
8
|
+
[]).
|
|
9
|
+
:- http_handler(root(home), home_page, []).
|
|
10
|
+
|
|
11
|
+
home_page(_Request) :-
|
|
12
|
+
reply_html_page(
|
|
13
|
+
title('Demo server'),
|
|
14
|
+
[ h1('Hello world!')
|
|
15
|
+
]).
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
:- module(http_login_demo,
|
|
2
|
+
[ server/1 % +Port
|
|
3
|
+
]).
|
|
4
|
+
:- use_module(library(http/thread_httpd)).
|
|
5
|
+
:- use_module(library(http/http_dispatch)).
|
|
6
|
+
:- use_module(library(http/http_parameters)).
|
|
7
|
+
:- use_module(library(http/http_session)).
|
|
8
|
+
:- use_module(library(http/html_write)).
|
|
9
|
+
|
|
10
|
+
/** <module> Login demo
|
|
11
|
+
|
|
12
|
+
This module provides a demonstration on how to use HTTP request
|
|
13
|
+
filtering to realise login using an login page and cookies.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
%! server(+Port)
|
|
17
|
+
%
|
|
18
|
+
% Start the server at http://localhost:Port
|
|
19
|
+
|
|
20
|
+
server(Port) :-
|
|
21
|
+
http_set_session_options(
|
|
22
|
+
[ create(noauto)
|
|
23
|
+
]),
|
|
24
|
+
http_server(http_dispatch,
|
|
25
|
+
[ port(Port)
|
|
26
|
+
]).
|
|
27
|
+
|
|
28
|
+
% handle declarations. All pretty standard, except the secret page that
|
|
29
|
+
% is protected using role(trusted). This is used by the RBAC request
|
|
30
|
+
% rewrite rule.
|
|
31
|
+
|
|
32
|
+
:- http_handler(root(.), http_redirect(moved, location_by_id(home)),
|
|
33
|
+
[]).
|
|
34
|
+
:- http_handler(root(home), home,
|
|
35
|
+
[]).
|
|
36
|
+
:- http_handler(root(secret), secret,
|
|
37
|
+
[role(trusted)]).
|
|
38
|
+
:- http_handler(root(login), login,
|
|
39
|
+
[]).
|
|
40
|
+
:- http_handler(root(do_login), do_login,
|
|
41
|
+
[ method(post) ]).
|
|
42
|
+
:- http_handler(root(logout), logout,
|
|
43
|
+
[]).
|
|
44
|
+
|
|
45
|
+
%! home(+Request)
|
|
46
|
+
%
|
|
47
|
+
% Send the home page. This uses the user(User) attribute of the
|
|
48
|
+
% request added by the `user` request rewrite rule to make some page
|
|
49
|
+
% elements depending on the login state.
|
|
50
|
+
|
|
51
|
+
home(Request) :-
|
|
52
|
+
reply_html_page(
|
|
53
|
+
title('Login demo'),
|
|
54
|
+
[ h1('Login demo'),
|
|
55
|
+
\logged_in(Request),
|
|
56
|
+
ul([ \login_or_logout(Request),
|
|
57
|
+
li(a(href(location_by_id(secret)), 'Secret page'))
|
|
58
|
+
])
|
|
59
|
+
]).
|
|
60
|
+
|
|
61
|
+
logged_in(Request) -->
|
|
62
|
+
{ memberchk(user(User), Request) },
|
|
63
|
+
!,
|
|
64
|
+
html(p('You are logged in as ~p'-[User])).
|
|
65
|
+
logged_in(_Request) -->
|
|
66
|
+
html(p('You are not logged in')).
|
|
67
|
+
|
|
68
|
+
login_or_logout(Request) -->
|
|
69
|
+
{ memberchk(user(_User), Request) },
|
|
70
|
+
!,
|
|
71
|
+
html(li(a(href(location_by_id(logout)), 'Logout'))).
|
|
72
|
+
login_or_logout(_Request) -->
|
|
73
|
+
html(li(a(href(location_by_id(login)), 'Login'))).
|
|
74
|
+
|
|
75
|
+
%! secret(+Request)
|
|
76
|
+
%
|
|
77
|
+
% The protected page. The handler is not special.
|
|
78
|
+
|
|
79
|
+
secret(_Request) :-
|
|
80
|
+
reply_html_page(
|
|
81
|
+
title('Secret page'),
|
|
82
|
+
[ h1('Psss ...'),
|
|
83
|
+
p('Prolog is a secret weapon!')
|
|
84
|
+
]).
|
|
85
|
+
|
|
86
|
+
%! login(+Request)
|
|
87
|
+
%
|
|
88
|
+
% The login page. This is a completely trivial page providing a form
|
|
89
|
+
% to enter name and password. It takes two optional parameters:
|
|
90
|
+
%
|
|
91
|
+
% - reason(String)
|
|
92
|
+
% The reason why the login page was opened. Deals with
|
|
93
|
+
% reopening due to wrong password and opening due to trying
|
|
94
|
+
% to access a protected page.
|
|
95
|
+
% - return_to(URL)
|
|
96
|
+
% After successfull login, return to the given page. Default
|
|
97
|
+
% is the referer. This is a little dubious as this may not
|
|
98
|
+
% be present. In that case it might be better to return to
|
|
99
|
+
% a dedicated welcome page.
|
|
100
|
+
|
|
101
|
+
login(Request) :-
|
|
102
|
+
http_parameters(
|
|
103
|
+
Request,
|
|
104
|
+
[ reason(Message, [optional(true)]),
|
|
105
|
+
return_to(Here, [optional(true)])
|
|
106
|
+
]),
|
|
107
|
+
( var(Here)
|
|
108
|
+
-> memberchk(referer(Here), Request)
|
|
109
|
+
; true
|
|
110
|
+
),
|
|
111
|
+
reply_html_page(
|
|
112
|
+
title('Login'),
|
|
113
|
+
[ \login_title(Message),
|
|
114
|
+
form([ action(location_by_id(do_login)),
|
|
115
|
+
method(post)
|
|
116
|
+
],
|
|
117
|
+
[ input([ type(hidden), name(return_to), value(Here) ]),
|
|
118
|
+
table([ tr([ th('Name'),
|
|
119
|
+
td(input([name(name)]))
|
|
120
|
+
]),
|
|
121
|
+
tr([ th('Password'),
|
|
122
|
+
td(input([name(passwd), type(password)]))
|
|
123
|
+
]),
|
|
124
|
+
tr([ td([ colspan(2),
|
|
125
|
+
align(right)
|
|
126
|
+
],
|
|
127
|
+
input([type(submit), value('Login')]))
|
|
128
|
+
])
|
|
129
|
+
])
|
|
130
|
+
])
|
|
131
|
+
]).
|
|
132
|
+
|
|
133
|
+
login_title(Message) -->
|
|
134
|
+
{ var(Message) },
|
|
135
|
+
!,
|
|
136
|
+
html(h1('Login')).
|
|
137
|
+
login_title(Message) -->
|
|
138
|
+
html([ h1('Login'),
|
|
139
|
+
p(class(message), Message)
|
|
140
|
+
]).
|
|
141
|
+
|
|
142
|
+
%! do_login(+Request)
|
|
143
|
+
%
|
|
144
|
+
% Handle the form data from the _login page_. Does one of these:
|
|
145
|
+
%
|
|
146
|
+
% - If login is ok, open a session, assert the user is logged on and
|
|
147
|
+
% redirect to `return_to`
|
|
148
|
+
% - Otherwise, go back to the login page, indicating the login
|
|
149
|
+
% failed.
|
|
150
|
+
|
|
151
|
+
do_login(Request) :-
|
|
152
|
+
http_parameters(
|
|
153
|
+
Request,
|
|
154
|
+
[ name(Name, []),
|
|
155
|
+
passwd(Passwd, []),
|
|
156
|
+
return_to(Return, [])
|
|
157
|
+
]),
|
|
158
|
+
( valid_passwd(Name, Passwd)
|
|
159
|
+
-> http_open_session(_SessionId, []),
|
|
160
|
+
http_session_assert(user(Name)),
|
|
161
|
+
http_redirect(see_other, Return, Request)
|
|
162
|
+
; http_link_to_id(login,
|
|
163
|
+
[ reason('Login failed'),
|
|
164
|
+
return_to(Return)
|
|
165
|
+
], HREF),
|
|
166
|
+
http_redirect(see_other, HREF, Request)
|
|
167
|
+
).
|
|
168
|
+
|
|
169
|
+
%! logout(+Request)
|
|
170
|
+
%
|
|
171
|
+
% Logout handler. Clears the login state and returns to the origin.
|
|
172
|
+
%
|
|
173
|
+
|
|
174
|
+
logout(Request) :-
|
|
175
|
+
http_parameters(
|
|
176
|
+
Request,
|
|
177
|
+
[ return_to(Return, [])
|
|
178
|
+
]),
|
|
179
|
+
( var(Return)
|
|
180
|
+
-> memberchk(referer(Return), Request)
|
|
181
|
+
; true
|
|
182
|
+
),
|
|
183
|
+
http_session_retractall(user(_User)),
|
|
184
|
+
http_redirect(see_other, Return, Request).
|
|
185
|
+
|
|
186
|
+
/*******************************
|
|
187
|
+
* USER DATA *
|
|
188
|
+
*******************************/
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
%! valid_passwd(+User, +Passwd) is semidet.
|
|
192
|
+
%
|
|
193
|
+
% True if Passwd is the correct password for User.
|
|
194
|
+
|
|
195
|
+
valid_passwd(User, Passwd) :-
|
|
196
|
+
user(User, password(Passwd)).
|
|
197
|
+
|
|
198
|
+
%! user(?User, ?Property) is nondet.
|
|
199
|
+
%
|
|
200
|
+
% True when Property is a property of user. In a real application this
|
|
201
|
+
% should of course be a proper persistent database and passwords
|
|
202
|
+
% should be properly hashed.
|
|
203
|
+
|
|
204
|
+
user(jan, password(geheim)).
|
|
205
|
+
user(jan, role(trusted)).
|
|
206
|
+
|
|
207
|
+
user(bob, password(secret)).
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
/*******************************
|
|
211
|
+
* EXPAND *
|
|
212
|
+
*******************************/
|
|
213
|
+
|
|
214
|
+
:- http_request_expansion(user, 100).
|
|
215
|
+
:- http_request_expansion(rbac, 200).
|
|
216
|
+
|
|
217
|
+
%! user(+Request0, -Request, +Options) is semidet.
|
|
218
|
+
%
|
|
219
|
+
% HTTP request rewriter that figures out whether someone is logged in.
|
|
220
|
+
% using this technique we can use different techniques to establish
|
|
221
|
+
% the logged in status.
|
|
222
|
+
|
|
223
|
+
user(Request0, Request, _Options) :-
|
|
224
|
+
http_in_session(_),
|
|
225
|
+
http_session_data(user(User)),
|
|
226
|
+
Request = [user(User)|Request0].
|
|
227
|
+
|
|
228
|
+
%! rbac(+Request0, -Request, +Options) is semidet.
|
|
229
|
+
%
|
|
230
|
+
% Establish whether the user may proceed if the handler options
|
|
231
|
+
% contain a term role(Role). Acts as follows:
|
|
232
|
+
%
|
|
233
|
+
% 1. If the user is logged in
|
|
234
|
+
% - If the user has the desired role, succeed.
|
|
235
|
+
% - Otherwise indicate the user is not authorized. The
|
|
236
|
+
% 3rd argument of the `http_reply` exception provides
|
|
237
|
+
% arbitrary context for the error page.
|
|
238
|
+
% 2. Otherwise redirect to the login page
|
|
239
|
+
|
|
240
|
+
rbac(Request, Request, Options) :-
|
|
241
|
+
memberchk(role(Role), Options),
|
|
242
|
+
( memberchk(user(User), Request)
|
|
243
|
+
-> ( user(User, role(Role))
|
|
244
|
+
-> true
|
|
245
|
+
; memberchk(path(Path), Request),
|
|
246
|
+
throw(http_reply(forbidden(Path), [], [no_role(User, Role)]))
|
|
247
|
+
)
|
|
248
|
+
; memberchk(request_uri(Return), Request),
|
|
249
|
+
http_link_to_id(login,
|
|
250
|
+
[ reason('The requested location requires login'),
|
|
251
|
+
return_to(Return)
|
|
252
|
+
], HREF),
|
|
253
|
+
http_redirect(see_other, HREF, Request)
|
|
254
|
+
).
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
/*******************************
|
|
258
|
+
* ERROR *
|
|
259
|
+
*******************************/
|
|
260
|
+
|
|
261
|
+
:- multifile
|
|
262
|
+
http:status_page/3.
|
|
263
|
+
|
|
264
|
+
%! http:status_page(+Term, +Context, -HTML)
|
|
265
|
+
%
|
|
266
|
+
% Provide a custom error page for the forbidden action.
|
|
267
|
+
|
|
268
|
+
http:status_page(forbidden(Path), Context, HTML) :-
|
|
269
|
+
phrase(page([ title('Access denied')
|
|
270
|
+
],
|
|
271
|
+
[ h1('Access denied'),
|
|
272
|
+
p(['You do not have sufficient privileges to access ',
|
|
273
|
+
Path]),
|
|
274
|
+
\forbidden_reason(Context)
|
|
275
|
+
]),
|
|
276
|
+
HTML).
|
|
277
|
+
|
|
278
|
+
forbidden_reason(Context) -->
|
|
279
|
+
{ memberchk(no_role(User, Role), Context) },
|
|
280
|
+
html(p('The user ~p does not have role ~p'-[User,Role])).
|