From 80ddd7a8b5d7bcf1ababe31f1bfde59da46c7a68 Mon Sep 17 00:00:00 2001 From: Nikolay Puzanov Date: Wed, 30 Nov 2022 20:21:21 +0300 Subject: [PATCH] Add max code size option --- _web_server/playground-server.scm | 39 ++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/_web_server/playground-server.scm b/_web_server/playground-server.scm index cf5c64f..d55d916 100755 --- a/_web_server/playground-server.scm +++ b/_web_server/playground-server.scm @@ -339,6 +339,7 @@ ;;; Web page handler ;;; (define (make-page-handler host root index-file + max-code-size vvp-exe iverilog-exe) (let* ((root-path (split-and-decode-uri-path root)) (root (encode-and-join-uri-path root-path)) @@ -357,32 +358,40 @@ (ref-stor (if ref (get-storage-path (cdr ref) root) "")) (ref-stor (if (and (valid-storage-path ref-stor) (storage-exists ref-stor)) - ref-stor #f))) + ref-stor #f)) + (code (if request-body (utf8->string request-body) "")) + (code (if (or (zero? max-code-size) + (<= (string-length code) max-code-size)) + code + (substring code 0 max-code-size)))) + (printlog "-- path: ~a" path) (printlog "-- ref-stor: ~a" ref-stor) + (printlog "-- length: ~a/~a" + (request-content-length request) + (string-length code)) (cond ;; Iverilog ((equal? path iverilog-path) (printlog "-- Request simulate") - (let ((code (utf8->string request-body))) - (when ref-stor - (save-to-storage ref-stor code)) + (when ref-stor + (save-to-storage ref-stor code)) - (make-response - (exec-sim 'iverilog - (sanitize-verilog code) - #:vvp-exe vvp-exe - #:iverilog-exe iverilog-exe) - #:type 'text/plain))) + (make-response + (exec-sim 'iverilog + (sanitize-verilog code) + #:vvp-exe vvp-exe + #:iverilog-exe iverilog-exe) + #:type 'text/plain)) ;; Save code ((equal? path savecode-path) (printlog "-- Request save code") (let ((storage (or ref-stor (mkdtemp (format "~a-XXXXXX" (current-time)))))) - (save-to-storage storage (utf8->string request-body)) + (save-to-storage storage code) (make-response (encode-and-join-uri-path (append root-path `(,storage)))))) @@ -435,6 +444,7 @@ (-> " -r, --root URN Service location root. Default: ''") (-> " --ivverilog-exe PATH Set Icarus Verilog compiler executable. Default: iverilog") (-> " --vvp-exe PATH Set Icarus Verilog interpreter executable. Default: vvp") + (-> " --max-len LEN Set maximum code size in symbols. Default: 0 (infinite)") (-> " -h, --help Print this message and exit") (-> "") (-> "Source code and issue tracker: "))))) @@ -450,6 +460,7 @@ '(("root" #\r) required) '(("vvp-exe") required) '(("iverilog-exe") required) + '(("max-len") required) '(("help" #\h) none)))) (let ((addr (string-trim (or (option-get opts "addr") "127.0.0.1"))) @@ -457,7 +468,8 @@ (host (string-trim (or (option-get opts "host") "http://127.0.0.1:8080"))) (root (string-trim (or (option-get opts "root") ""))) (vvp (string-trim (or (option-get opts "vvp-exe") "vvp"))) - (iverilog (string-trim (or (option-get opts "iverilog-exe") "iverilog")))) + (iverilog (string-trim (or (option-get opts "iverilog-exe") "iverilog"))) + (max-code-size (string->number (string-trim (or (option-get opts "max-len") "0"))))) (cond (err @@ -472,7 +484,8 @@ (else (printlog "Listen on '~a' port '~a'" addr port) (printlog "Server URL: '~a/~a'" host root) + (printlog "Max code size: ~a" max-code-size) (run-server - (make-page-handler host root INDEX-FILE vvp iverilog) + (make-page-handler host root INDEX-FILE max-code-size vvp iverilog) 'http `(#:host ,addr #:port ,port)))))))