mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 21:59:17 +02:00
48 lines
1.7 KiB
Scheme
48 lines
1.7 KiB
Scheme
|
|
(define-library (chibi net http)
|
|
(export http-get http-get/headers http-get-to-file
|
|
http-head http-post http-put http-delete
|
|
call-with-input-url call-with-input-url/headers
|
|
with-input-from-url
|
|
http-parse-request http-parse-form)
|
|
(import (scheme base) (scheme write) (scheme char) (scheme file)
|
|
(srfi 27)
|
|
(chibi uri) (chibi mime))
|
|
(cond-expand
|
|
(chicken
|
|
(import (only (chicken) parameterize))
|
|
(import (only (ports) make-input-port))
|
|
(import (only (tcp) tcp-connect))
|
|
(begin
|
|
(define (make-custom-binary-input-port read-bv)
|
|
(let ((bv (make-bytevector 1024))
|
|
(off 0)
|
|
(fill 0))
|
|
(define (refill!)
|
|
(set! off 0)
|
|
(set! fill (read-bv bv 0 1024)))
|
|
(make-input-port
|
|
(lambda ()
|
|
(if (>= off fill)
|
|
(refill!))
|
|
(if (< off fill)
|
|
(read-char (open-input-string ""))
|
|
(let ((res (integer->char (bytevector-u8-ref bv off))))
|
|
(set! off (+ 1 off))
|
|
res)))
|
|
(lambda ()
|
|
(or (< off fill)
|
|
(begin (refill!) (< off fill))))
|
|
(lambda () #f))))
|
|
(define (open-net-io host port . o)
|
|
(call-with-values (lambda () (tcp-connect host port))
|
|
(lambda (in out)
|
|
(list #f in out))))
|
|
(define (port->bytevector in)
|
|
(let ((out (open-output-bytevector)))
|
|
(do ((c (read-u8 in) (read-u8 in)))
|
|
((eof-object? c) (get-output-bytevector out))
|
|
(write-u8 c out))))))
|
|
(else
|
|
(import (srfi 39) (chibi io) (chibi net))))
|
|
(include "http.scm"))
|