X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=scratchy.git;a=blobdiff_plain;f=burrower.scm;h=a042e582687f07cb00094ff4d5d7f91c48dacf5c;hp=a03c266c7c55fc7ae6b4dc0e9b827f51f6de0cd8;hb=4e168d456f8ba1d7d3b94073a05814d431bc2808;hpb=882fc8361b2d9cfe1d5c72b137a8474f902f36a0 diff --git a/burrower.scm b/burrower.scm index a03c266..a042e58 100644 --- a/burrower.scm +++ b/burrower.scm @@ -28,7 +28,6 @@ "This gopher hole was dug using Burrower v" burrower-version "\n" "Powered by Chicken Scheme!")) - ;;; Server loop ;; We don't yet use worker threads here to handle requests, @@ -55,7 +54,7 @@ (serve-selector (if (= (string-length selector) 0) "/" selector) - remote-ip config))) + config))) (print "... served selector '" selector "'. Closing connection.")) (o (exn) (print-error-message o out-port) @@ -88,14 +87,14 @@ ;;; Selector retrieval -(define (serve-selector raw-selector remote-ip config) +(define (serve-selector raw-selector config) (let* ((selector-list (string-split raw-selector "\t")) (selector (car selector-list)) (arguments (cdr selector-list))) (case (infer-selector-type selector) ((1) (serve-directory selector config)) ((0) (serve-text-file selector config)) - ((7) (serve-query selector arguments remote-ip config)) + ((7) (serve-query selector arguments config)) (else (serve-binary-file selector config))))) (define (serve-directory selector config) @@ -144,7 +143,7 @@ (loop (read-byte))))))) (error "File not found." file-name)))) -(define (serve-query selector arguments remote-ip config) +(define (serve-query selector arguments config) (let ((file-name (make-pathname (config-root-dir config) selector))) (if (and (regular-file? file-name) (= (length arguments) 1)) @@ -154,9 +153,8 @@ (with-selector-dir selector config (lambda () - (apply (eval (read)) - (list (car arguments) remote-ip))))))) - (error "Invalid query.")))) + (apply (eval (read)) arguments)))))) + (error "Invalid query." selector arguments)))) ;;; Index rendering @@ -178,7 +176,9 @@ (('shell command) (serve-shell-command command dir-selector config)) (('eval expression) (serve-expression expression dir-selector config)) (('url display-string url) - (print #\h display-string "\tURL:" url "\tfake\t80\r")) + (print #\h display-string "\tURL:" url + "\t" (config-host config) + "\t" (config-port config) "\r")) ((type display-string selector host port) (print type display-string "\t" selector "\t" host "\t" port "\r")) ((type display-string selector host) @@ -202,7 +202,10 @@ dir-selector config (lambda () (let-values (((in-port out-port id) (process command))) - (serve-info-records (string-chomp (read-string #f in-port) "\n")))))) + (let ((string (read-string #f in-port))) + (if (and (not (eof-object? string)) + (> (string-length string) 0)) + (serve-info-records (string-chomp string "\n")))))))) (define (serve-expression expression dir-selector config) (with-selector-dir