diff options
author | Andy Wingo <wingo@pobox.com> | 2017-02-08 08:58:46 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2017-02-08 15:09:14 +0100 |
commit | ecdff904cb9eb7b29d1b4f73d4ec744d1502c725 (patch) | |
tree | 31b25bf15a25d8dd8d93ab97161fc3bf9b532198 /module | |
parent | 96b994b6f815747ce2548123cc996d8132bd4781 (diff) |
Remove remaining "display" uses in (web http)
* module/web/http.scm (header-writer): Default to calling put-string.
(put-list): Rename from write-list, take the port first, and call the
put-item function with port then value. Adapt all callers.
(write-date): Rename display-digits to put-digits.
(put-challenge): Rename from write-challenge, adapt arguments to put
convention, and adapt callers.
(declare-symbol-list-header!): Use put-symbol.
(declare-integer-header!): Use put-non-negative-integer.o
(declare-entity-tag-list-header!): Use put-entity-tag-list.
("If-Range", "Etag"): Adapt to put-entity-tag.
(make-chunked-output-port): Use put-char.
Diffstat (limited to 'module')
-rw-r--r-- | module/web/http.scm | 121 |
1 files changed, 62 insertions, 59 deletions
diff --git a/module/web/http.scm b/module/web/http.scm index c3fbf6f41..41e429ce3 100644 --- a/module/web/http.scm +++ b/module/web/http.scm @@ -145,11 +145,12 @@ is ‘string?’." (define (header-writer sym) "Return a procedure that writes values for headers named SYM to a port. The resulting procedure takes two arguments: a value and a port. -The default writer is ‘display’." +The default writer will call ‘put-string’." (let ((decl (lookup-header-decl sym))) (if decl (header-decl-writer decl) - display))) + (lambda (val port) + (put-string port val))))) (define (read-header-line port) "Read an HTTP header line and return it without its final CRLF or LF. @@ -308,7 +309,7 @@ as an ordered alist." (list-of? val string?)) (define (write-list-of-strings val port) - (write-list val port display ", ")) + (put-list port val put-string ", ")) (define (split-header-names str) (map string->header (split-and-trim str))) @@ -317,10 +318,10 @@ as an ordered alist." (list-of? val symbol?)) (define (write-header-list val port) - (write-list val port - (lambda (x port) - (put-string port (header->string x))) - ", ")) + (put-list port val + (lambda (port x) + (put-string port (header->string x))) + ", ")) (define (collect-escaped-string from start len escapes) (let ((to (make-string len))) @@ -357,24 +358,24 @@ as an ordered alist." (lp (1+ i) (1+ qi) escapes))) (bad-header-component 'qstring str)))) -(define (write-list items port write-item delim) +(define (put-list port items put-item delim) (match items (() (values)) ((item . items) - (write-item item port) + (put-item port item) (let lp ((items items)) (match items (() (values)) ((item . items) (put-string port delim) - (write-item item port) + (put-item port item) (lp items))))))) (define (write-qstring str port) (put-char port #\") (if (string-index str #\") ;; optimize me - (write-list (string-split str #\") port display "\\\"") + (put-list port (string-split str #\") put-string "\\\"") (put-string port str)) (put-char port #\")) @@ -460,15 +461,15 @@ as an ordered alist." (_ #f))) (define (write-quality-list l port) - (write-list l port - (lambda (x port) - (let ((q (car x)) - (str (cdr x))) - (put-string port str) - (when (< q 1000) - (put-string port ";q=") - (write-quality q port)))) - ",")) + (put-list port l + (lambda (port x) + (let ((q (car x)) + (str (cdr x))) + (put-string port str) + (when (< q 1000) + (put-string port ";q=") + (write-quality q port)))) + ",")) (define* (parse-non-negative-integer val #:optional (start 0) (end (string-length val))) @@ -544,9 +545,9 @@ as an ordered alist." (define* (write-key-value-list list port #:optional (val-writer default-val-writer) (delim ", ")) - (write-list - list port - (lambda (x port) + (put-list + port list + (lambda (port x) (match x ((k . #f) (put-symbol port k)) @@ -630,9 +631,9 @@ as an ordered alist." (define* (write-param-list list port #:optional (val-writer default-val-writer)) - (write-list - list port - (lambda (item port) + (put-list + port list + (lambda (port item) (write-key-value-list item port val-writer ";")) ",")) @@ -840,7 +841,7 @@ as an ordered alist." (parse-asctime-date str))))) (define (write-date date port) - (define (display-digits n digits port) + (define (put-digits port n digits) (define zero (char->integer #\0)) (let lp ((tens (expt 10 (1- digits)))) (when (> tens 0) @@ -855,7 +856,7 @@ as an ordered alist." ((0) "Sun, ") ((1) "Mon, ") ((2) "Tue, ") ((3) "Wed, ") ((4) "Thu, ") ((5) "Fri, ") ((6) "Sat, ") (else (error "bad date" date)))) - (display-digits (date-day date) 2 port) + (put-digits port (date-day date) 2) (put-string port (case (date-month date) ((1) " Jan ") ((2) " Feb ") ((3) " Mar ") @@ -863,13 +864,13 @@ as an ordered alist." ((7) " Jul ") ((8) " Aug ") ((9) " Sep ") ((10) " Oct ") ((11) " Nov ") ((12) " Dec ") (else (error "bad date" date)))) - (display-digits (date-year date) 4 port) + (put-digits port (date-year date) 4) (put-char port #\space) - (display-digits (date-hour date) 2 port) + (put-digits port (date-hour date) 2) (put-char port #\:) - (display-digits (date-minute date) 2 port) + (put-digits port (date-minute date) 2) (put-char port #\:) - (display-digits (date-second date) 2 port) + (put-digits port (date-second date) 2) (put-string port " GMT"))) ;; Following https://tools.ietf.org/html/rfc7232#section-2.3, an entity @@ -903,7 +904,7 @@ as an ordered alist." (((? string?) . _) #t) (_ #f))) -(define (write-entity-tag val port) +(define (put-entity-tag port val) (match val ((tag . strong?) (unless strong? (put-string port "W/")) @@ -928,8 +929,8 @@ as an ordered alist." (define (entity-tag-list? val) (list-of? val entity-tag?)) -(define (write-entity-tag-list val port) - (write-list val port write-entity-tag ", ")) +(define (put-entity-tag-list port val) + (put-list port val put-entity-tag ", ")) ;; credentials = auth-scheme #auth-param ;; auth-scheme = token @@ -1030,7 +1031,7 @@ as an ordered alist." ((((? symbol?) . (? key-value-list?)) ...) #t) (_ #f))) -(define (write-challenge val port) +(define (put-challenge port val) (match val ((scheme . params) (put-symbol port scheme) @@ -1038,7 +1039,7 @@ as an ordered alist." (write-key-value-list params port)))) (define (write-challenges val port) - (write-list val port write-challenge ", ")) + (put-list port val put-challenge ", ")) @@ -1258,7 +1259,7 @@ treated specially, and is just returned as a plain string." (lambda (v) (list-of? v symbol?)) (lambda (v port) - (write-list v port display ", ")))) + (put-list port v put-symbol ", ")))) ;; emacs: (put 'declare-header-list-header! 'scheme-indent-function 1) (define (declare-header-list-header! name) @@ -1268,7 +1269,8 @@ treated specially, and is just returned as a plain string." ;; emacs: (put 'declare-integer-header! 'scheme-indent-function 1) (define (declare-integer-header! name) (declare-header! name - parse-non-negative-integer non-negative-integer? display)) + parse-non-negative-integer non-negative-integer? + (lambda (val port) (put-non-negative-integer port val)))) ;; emacs: (put 'declare-uri-header! 'scheme-indent-function 1) (define (declare-uri-header! name) @@ -1319,7 +1321,7 @@ treated specially, and is just returned as a plain string." (lambda (val port) (if (eq? val '*) (put-string port "*") - (write-entity-tag-list val port))))) + (put-entity-tag-list port val))))) ;; emacs: (put 'declare-credentials-header! 'scheme-indent-function 1) (define (declare-credentials-header! name) @@ -1405,13 +1407,13 @@ treated specially, and is just returned as a plain string." split-header-names list-of-header-names? (lambda (val port) - (write-list val port - (lambda (x port) - (put-string port - (if (eq? x 'close) - "close" - (header->string x)))) - ", "))) + (put-list port val + (lambda (port x) + (put-string port + (if (eq? x 'close) + "close" + (header->string x)))) + ", "))) ;; Date = "Date" ":" HTTP-date ;; e.g. @@ -1504,9 +1506,9 @@ treated specially, and is just returned as a plain string." (or (not date) (date? date)))) (_ #f))))) (lambda (val port) - (write-list - val port - (lambda (w port) + (put-list + port val + (lambda (port w) (match w ((code host text date) (put-non-negative-integer port code) @@ -1652,9 +1654,9 @@ treated specially, and is just returned as a plain string." (() (values)) (args (put-string port ";") - (write-list - args port - (lambda (pair port) + (put-list + port args + (lambda (port pair) (match pair ((k . v) (put-symbol port k) @@ -1806,7 +1808,7 @@ treated specially, and is just returned as a plain string." (lambda (val port) (if (date? val) (write-date val port) - (write-entity-tag val port)))) + (put-entity-tag port val)))) ;; If-Unmodified-Since = HTTP-date ;; @@ -1862,9 +1864,9 @@ treated specially, and is just returned as a plain string." ((unit . ranges) (put-symbol port unit) (put-char port #\=) - (write-list - ranges port - (lambda (range port) + (put-list + port ranges + (lambda (port range) (match range ((start . end) (when start (put-non-negative-integer port start)) @@ -1907,7 +1909,8 @@ treated specially, and is just returned as a plain string." (declare-header! "ETag" parse-entity-tag entity-tag? - write-entity-tag) + (lambda (val port) + (put-entity-tag port val))) ;; Location = URI-reference ;; @@ -2051,7 +2054,7 @@ KEEP-ALIVE? is true." (let ((len (q-length queue))) (put-string port (number->string len 16)) (put-string port "\r\n") - (q-for-each (lambda (elem) (write-char elem port)) + (q-for-each (lambda (elem) (put-char port elem)) queue) (put-string port "\r\n")))) (define (close) |