Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | added netstring lib |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
54b0f0d169876d9264c13caf32df7f8f |
| User & Date: | aldo 2016-12-04 20:47:32.505 |
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"))
|#
|