Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | added netstring lib |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
54b0f0d169876d9264c13caf32df7f8f |
User & Date: | aldo 2016-12-04 20:47:32 |
Context
2016-12-05
| ||
22:06 | added sxml check-in: 837939cf40 user: aldo tags: trunk | |
21:31 | added sxml from qothr/chez-sxml Closed-Leaf check-in: aa199cec70 user: aldo tags: trunk | |
2016-12-04
| ||
20:47 | added netstring lib check-in: 54b0f0d169 user: aldo tags: trunk | |
2016-11-08
| ||
16:17 | fixed bug in sdl-library-init check-in: af432e7ef4 user: aldo tags: trunk | |
Changes
Added netstring.sls.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
(library (netstring) (export read-netstring write-netstring read-netstring/string) (import (chezscheme)) (define (read-netstring port) (let loop ([len 0]) (let ([c (get-u8 port)] ) (when (eof-object? c) (errorf 'read-netstring "unexpected end of file while reading header")) (cond [(<= #x30 c #x39) (loop (fx+ (fx* 10 len) (fx- c #x30)))] [(fx= c (char->integer #\:)) (let ([r (get-bytevector-n port len)]) (when (or (eof-object? r) (< (bytevector-length r) len)) (errorf 'read-netstring "unexpected end of file while reading data")) (unless (eq? (get-u8 port) (char->integer #\,)) (errorf 'read-netstring "expected , at end of netstring" )) r)] [else (errorf 'read-netstring "unexpected character while reading header #x~x" c)])))) (define (read-netstring/string port) (utf8->string (read-netstring port))) (define (write-netstring port data) (let ([data (if (string? data) (string->utf8 data) data)]) (put-bytevector port (string->utf8 (number->string (bytevector-length data)))) (put-u8 port (char->integer #\:)) (put-bytevector port data) (put-u8 port (char->integer #\,))))) #| (define msg "abcdefghijkl") (define-values (pt bv) (open-bytevector-output-port)) (write-netstring pt msg) (define x (bv)) (if (equal? msg (read-netstring/string (open-bytevector-input-port x))) (printf "test OK~n") (printf "test FAILED~n")) |# |