Adding parameter and removing unnecessary base64

svn: r11361
This commit is contained in:
Jay McCarthy 2008-08-20 21:10:24 +00:00
parent 5b0da0948a
commit afe17e511c

View File

@ -8,20 +8,25 @@
"../private/mod-map.ss") "../private/mod-map.ss")
(provide/contract (provide/contract
[max-url-length (parameter/c number?)]
[url-too-big? (url? . -> . boolean?)] [url-too-big? (url? . -> . boolean?)]
[stuff-url (serializable? url? . -> . url?)] [stuff-url (serializable? url? . -> . url?)]
[stuffed-url? (url? . -> . boolean?)] [stuffed-url? (url? . -> . boolean?)]
[unstuff-url (url? . -> . serializable?)]) [unstuff-url (url? . -> . serializable?)])
; http://www.boutell.com/newfaq/misc/urllength.html
(define max-url-length
(make-parameter 2048))
(define (url-too-big? uri) (define (url-too-big? uri)
((string-length (url->string uri)) . > . 1024)) ((string-length (url->string uri)) . > . (max-url-length)))
;; stuff-url: serial url -> url ;; stuff-url: serial url -> url
;; encode in the url ;; encode in the url
(require net/base64) (require net/base64)
(define (stuff-url c uri) (define (stuff-url c uri)
(let* ([cb (c->bytes c)] (let* ([cb (c->bytes c)]
[cb-uri (insert-param uri "c" (bytes->string/utf-8 (base64-encode cb)))]) [cb-uri (insert-param uri "c" (bytes->string/utf-8 cb))])
(if (url-too-big? cb-uri) (if (url-too-big? cb-uri)
(let* ([cc (gzip/bytes cb)] (let* ([cc (gzip/bytes cb)]
[cc-uri (insert-param uri "cc" (bytes->string/utf-8 (base64-encode cc)))]) [cc-uri (insert-param uri "cc" (bytes->string/utf-8 (base64-encode cc)))])
@ -50,7 +55,7 @@
(define (unstuff-url uri) (define (unstuff-url uri)
(cond (cond
[(extract-param uri "c") [(extract-param uri "c")
=> (compose bytes->c base64-decode string->bytes/utf-8)] => (compose bytes->c string->bytes/utf-8)]
[(extract-param uri "cc") [(extract-param uri "cc")
=> (compose bytes->c gunzip/bytes base64-decode string->bytes/utf-8)] => (compose bytes->c gunzip/bytes base64-decode string->bytes/utf-8)]
[(extract-param uri "hc") [(extract-param uri "hc")