parent
8083829c5e
commit
a9acd2b5a3
|
@ -1,6 +1,6 @@
|
||||||
(module cgi mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "cgi-sig.ss" "cgi-unit.ss")
|
(require scheme/unit "cgi-sig.ss" "cgi-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer cgi@)
|
(define-values/invoke-unit/infer cgi@)
|
||||||
|
|
||||||
(provide-signature-elements cgi^))
|
(provide-signature-elements cgi^)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(module cookie mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "cookie-sig.ss" "cookie-unit.ss")
|
(require scheme/unit "cookie-sig.ss" "cookie-unit.ss")
|
||||||
|
|
||||||
(provide-signature-elements cookie^)
|
(provide-signature-elements cookie^)
|
||||||
|
|
||||||
(define-values/invoke-unit/infer cookie@))
|
(define-values/invoke-unit/infer cookie@)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(module dns mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "dns-sig.ss" "dns-unit.ss")
|
(require scheme/unit "dns-sig.ss" "dns-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer dns@)
|
(define-values/invoke-unit/infer dns@)
|
||||||
|
|
||||||
(provide-signature-elements dns^))
|
(provide-signature-elements dns^)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(module ftp mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "ftp-sig.ss" "ftp-unit.ss")
|
(require scheme/unit "ftp-sig.ss" "ftp-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer ftp@)
|
(define-values/invoke-unit/infer ftp@)
|
||||||
|
|
||||||
(provide-signature-elements ftp^))
|
(provide-signature-elements ftp^)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
(module imap mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit mzlib/contract "imap-sig.ss" "imap-unit.ss")
|
(require scheme/unit scheme/contract "imap-sig.ss" "imap-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer imap@)
|
(define-values/invoke-unit/infer imap@)
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@
|
||||||
[imap-get-hierarchy-delimiter (imap-connection? . -> . bytes?)]
|
[imap-get-hierarchy-delimiter (imap-connection? . -> . bytes?)]
|
||||||
[imap-list-child-mailboxes
|
[imap-list-child-mailboxes
|
||||||
(case->
|
(case->
|
||||||
(imap-connection? (or/c false/c bytes?) . -> . (listof (list/c (listof symbol?) bytes?)))
|
(imap-connection? (or/c false/c bytes?)
|
||||||
|
. -> . (listof (list/c (listof symbol?) bytes?)))
|
||||||
(imap-connection? (or/c false/c bytes?) (or/c false/c bytes?)
|
(imap-connection? (or/c false/c bytes?) (or/c false/c bytes?)
|
||||||
. -> .
|
. -> .
|
||||||
(listof (list/c (listof symbol?) bytes?))))])
|
(listof (list/c (listof symbol?) bytes?))))])
|
||||||
|
@ -46,4 +47,4 @@
|
||||||
imap-mailbox-exists?
|
imap-mailbox-exists?
|
||||||
imap-create-mailbox
|
imap-create-mailbox
|
||||||
|
|
||||||
imap-mailbox-flags))
|
imap-mailbox-flags)
|
||||||
|
|
|
@ -26,8 +26,7 @@
|
||||||
;;
|
;;
|
||||||
;; Commentary:
|
;; Commentary:
|
||||||
|
|
||||||
(module mime-util mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/etc)
|
|
||||||
|
|
||||||
(provide string-tokenizer
|
(provide string-tokenizer
|
||||||
trim-all-spaces
|
trim-all-spaces
|
||||||
|
@ -52,8 +51,7 @@
|
||||||
(if (string=? s "") '()
|
(if (string=? s "") '()
|
||||||
(let ([i (string-index s c)])
|
(let ([i (string-index s c)])
|
||||||
(if i (cons (substring s 0 i)
|
(if i (cons (substring s 0 i)
|
||||||
(loop (substring s (+ i 1)
|
(loop (substring s (+ i 1) (string-length s))))
|
||||||
(string-length s))))
|
|
||||||
(list s))))))
|
(list s))))))
|
||||||
|
|
||||||
;; Trim all spaces, except those in quoted strings.
|
;; Trim all spaces, except those in quoted strings.
|
||||||
|
@ -129,13 +127,10 @@
|
||||||
|
|
||||||
;; Copies its input `in' to its ouput port if given, it uses
|
;; Copies its input `in' to its ouput port if given, it uses
|
||||||
;; current-output-port if out is not provided.
|
;; current-output-port if out is not provided.
|
||||||
(define cat
|
(define (cat in [out (current-output-port)])
|
||||||
(opt-lambda (in (out (current-output-port)))
|
|
||||||
(let loop ([ln (read-line in)])
|
(let loop ([ln (read-line in)])
|
||||||
(unless (eof-object? ln)
|
(unless (eof-object? ln)
|
||||||
(fprintf out "~a\n" ln)
|
(fprintf out "~a\n" ln)
|
||||||
(loop (read-line in))))))
|
(loop (read-line in)))))
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
;;; mime-util.ss ends here
|
;;; mime-util.ss ends here
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
;;
|
;;
|
||||||
;; Commentary:
|
;; Commentary:
|
||||||
|
|
||||||
(module mime mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit
|
(require scheme/unit
|
||||||
"mime-sig.ss"
|
"mime-sig.ss"
|
||||||
"mime-unit.ss"
|
"mime-unit.ss"
|
||||||
"qp-sig.ss"
|
"qp-sig.ss"
|
||||||
|
@ -46,6 +46,6 @@
|
||||||
|
|
||||||
(define-values/invoke-unit/infer mime@2)
|
(define-values/invoke-unit/infer mime@2)
|
||||||
|
|
||||||
(provide-signature-elements mime^))
|
(provide-signature-elements mime^)
|
||||||
|
|
||||||
;;; mime.ss ends here
|
;;; mime.ss ends here
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(module nntp mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "nntp-sig.ss" "nntp-unit.ss")
|
(require scheme/unit "nntp-sig.ss" "nntp-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer nntp@)
|
(define-values/invoke-unit/infer nntp@)
|
||||||
|
|
||||||
(provide-signature-elements nntp^))
|
(provide-signature-elements nntp^)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
(module pop3 mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "pop3-sig.ss" "pop3-unit.ss")
|
(require scheme/unit "pop3-sig.ss" "pop3-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer pop3@)
|
(define-values/invoke-unit/infer pop3@)
|
||||||
|
|
||||||
(provide-signature-elements pop3^))
|
(provide-signature-elements pop3^)
|
||||||
|
|
||||||
#|
|
#|
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,11 @@
|
||||||
;;
|
;;
|
||||||
;; Commentary:
|
;; Commentary:
|
||||||
|
|
||||||
(module qp mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "qp-sig.ss" "qp-unit.ss")
|
(require mzlib/unit "qp-sig.ss" "qp-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer qp@)
|
(define-values/invoke-unit/infer qp@)
|
||||||
|
|
||||||
(provide-signature-elements qp^))
|
(provide-signature-elements qp^)
|
||||||
|
|
||||||
;;; qp.ss ends here
|
;;; qp.ss ends here
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(module sendmail mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "sendmail-sig.ss" "sendmail-unit.ss")
|
(require scheme/unit "sendmail-sig.ss" "sendmail-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer sendmail@)
|
(define-values/invoke-unit/infer sendmail@)
|
||||||
|
|
||||||
(provide-signature-elements sendmail^))
|
(provide-signature-elements sendmail^)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(module smtp mzscheme
|
#lang scheme/base
|
||||||
(require mzlib/unit "smtp-sig.ss" "smtp-unit.ss")
|
(require scheme/unit "smtp-sig.ss" "smtp-unit.ss")
|
||||||
|
|
||||||
(define-values/invoke-unit/infer smtp@)
|
(define-values/invoke-unit/infer smtp@)
|
||||||
|
|
||||||
(provide-signature-elements smtp^))
|
(provide-signature-elements smtp^)
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
(module ssl-tcp-unit mzscheme
|
#lang scheme/base
|
||||||
(provide make-ssl-tcp@)
|
(provide make-ssl-tcp@)
|
||||||
(require mzlib/unit
|
(require scheme/unit
|
||||||
"tcp-sig.ss"
|
"tcp-sig.ss"
|
||||||
(lib "mzssl.ss" "openssl")
|
openssl/mzssl)
|
||||||
mzlib/etc)
|
|
||||||
|
|
||||||
(define (make-ssl-tcp@
|
(define (make-ssl-tcp@
|
||||||
server-cert-file server-key-file server-root-cert-files server-suggest-auth-file
|
server-cert-file server-key-file server-root-cert-files server-suggest-auth-file
|
||||||
|
@ -37,15 +36,12 @@
|
||||||
|
|
||||||
(define tcp-addresses ssl-addresses)
|
(define tcp-addresses ssl-addresses)
|
||||||
(define tcp-close ssl-close)
|
(define tcp-close ssl-close)
|
||||||
(define tcp-connect
|
(define (tcp-connect hostname port-k)
|
||||||
(opt-lambda (hostname port-k)
|
(ssl-connect hostname port-k ctx))
|
||||||
(ssl-connect hostname port-k ctx)))
|
(define (tcp-connect/enable-break hostname port-k)
|
||||||
(define tcp-connect/enable-break
|
(ssl-connect/enable-break hostname port-k ctx))
|
||||||
(opt-lambda (hostname port-k)
|
|
||||||
(ssl-connect/enable-break hostname port-k ctx)))
|
|
||||||
|
|
||||||
(define tcp-listen
|
(define (tcp-listen port [allow-k 4] [reuse? #f] [hostname #f])
|
||||||
(opt-lambda (port [allow-k 4] [reuse? #f] [hostname #f])
|
|
||||||
(let ([l (ssl-listen port allow-k reuse? hostname)])
|
(let ([l (ssl-listen port allow-k reuse? hostname)])
|
||||||
(when server-cert-file
|
(when server-cert-file
|
||||||
(ssl-load-certificate-chain! l server-cert-file))
|
(ssl-load-certificate-chain! l server-cert-file))
|
||||||
|
@ -58,6 +54,6 @@
|
||||||
server-root-cert-files))
|
server-root-cert-files))
|
||||||
(when server-suggest-auth-file
|
(when server-suggest-auth-file
|
||||||
(ssl-load-suggested-certificate-authorities! l server-suggest-auth-file))
|
(ssl-load-suggested-certificate-authorities! l server-suggest-auth-file))
|
||||||
l)))
|
l))
|
||||||
|
|
||||||
(define tcp-listener? ssl-listener?))))
|
(define tcp-listener? ssl-listener?)))
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
(module tcp-redirect mzscheme
|
#lang scheme/base
|
||||||
(provide tcp-redirect)
|
(provide tcp-redirect)
|
||||||
|
|
||||||
(require mzlib/unit
|
(require scheme/unit
|
||||||
mzlib/async-channel
|
scheme/tcp
|
||||||
mzlib/etc
|
scheme/async-channel
|
||||||
"tcp-sig.ss")
|
"tcp-sig.ss")
|
||||||
|
|
||||||
(define raw:tcp-abandon-port tcp-abandon-port)
|
(define raw:tcp-abandon-port tcp-abandon-port)
|
||||||
|
@ -17,25 +17,24 @@
|
||||||
(define raw:tcp-listen tcp-listen)
|
(define raw:tcp-listen tcp-listen)
|
||||||
(define raw:tcp-listener? tcp-listener?)
|
(define raw:tcp-listener? tcp-listener?)
|
||||||
|
|
||||||
; For tcp-listeners, we use an else branch in the conds since
|
;; For tcp-listeners, we use an else branch in the conds since
|
||||||
; (instead of a contract) I want the same error message as the raw
|
;; (instead of a contract) I want the same error message as the raw
|
||||||
; primitive for bad inputs.
|
;; primitive for bad inputs.
|
||||||
|
|
||||||
; : (listof nat) -> (unit/sig () -> net:tcp^)
|
;; : (listof nat) -> (unit/sig () -> net:tcp^)
|
||||||
(define tcp-redirect
|
(define (tcp-redirect redirected-ports [redirected-address "127.0.0.1"])
|
||||||
(opt-lambda (redirected-ports [redirected-address "127.0.0.1"])
|
|
||||||
(unit
|
(unit
|
||||||
(import)
|
(import)
|
||||||
(export tcp^)
|
(export tcp^)
|
||||||
; : (make-pipe-listener nat (channel (cons iport oport)))
|
;; : (make-pipe-listener nat (channel (cons iport oport)))
|
||||||
(define-struct pipe-listener (port channel))
|
(define-struct pipe-listener (port channel))
|
||||||
|
|
||||||
; : port -> void
|
;; : port -> void
|
||||||
(define (tcp-abandon-port tcp-port)
|
(define (tcp-abandon-port tcp-port)
|
||||||
(when (tcp-port? tcp-port)
|
(when (tcp-port? tcp-port)
|
||||||
(raw:tcp-abandon-port tcp-port)))
|
(raw:tcp-abandon-port tcp-port)))
|
||||||
|
|
||||||
; : listener -> iport oport
|
;; : listener -> iport oport
|
||||||
(define (tcp-accept tcp-listener)
|
(define (tcp-accept tcp-listener)
|
||||||
(cond
|
(cond
|
||||||
[(pipe-listener? tcp-listener)
|
[(pipe-listener? tcp-listener)
|
||||||
|
@ -43,11 +42,11 @@
|
||||||
(values (car in-out) (cdr in-out)))]
|
(values (car in-out) (cdr in-out)))]
|
||||||
[else (raw:tcp-accept tcp-listener)]))
|
[else (raw:tcp-accept tcp-listener)]))
|
||||||
|
|
||||||
; : listener -> iport oport
|
;; : listener -> iport oport
|
||||||
(define (tcp-accept/enable-break tcp-listener)
|
(define (tcp-accept/enable-break tcp-listener)
|
||||||
(cond
|
(cond
|
||||||
[(pipe-listener? tcp-listener)
|
[(pipe-listener? tcp-listener)
|
||||||
; XXX put this into async-channel.ss as async-channel-get/enable-break
|
;; XXX put this into async-channel.ss as async-channel-get/enable-break
|
||||||
(sync/enable-break
|
(sync/enable-break
|
||||||
(handle-evt
|
(handle-evt
|
||||||
(pipe-listener-channel tcp-listener)
|
(pipe-listener-channel tcp-listener)
|
||||||
|
@ -57,28 +56,26 @@
|
||||||
(values (car in-out) (cdr in-out)))
|
(values (car in-out) (cdr in-out)))
|
||||||
[else (raw:tcp-accept/enable-break tcp-listener)]))
|
[else (raw:tcp-accept/enable-break tcp-listener)]))
|
||||||
|
|
||||||
; : tcp-listener -> iport oport
|
;; : tcp-listener -> iport oport
|
||||||
; FIX - check channel queue size
|
;; FIX - check channel queue size
|
||||||
(define (tcp-accept-ready? tcp-listener)
|
(define (tcp-accept-ready? tcp-listener)
|
||||||
(cond
|
(cond
|
||||||
[(pipe-listener? tcp-listener) #t]
|
[(pipe-listener? tcp-listener) #t]
|
||||||
[else (raw:tcp-accept-ready? tcp-listener)]))
|
[else (raw:tcp-accept-ready? tcp-listener)]))
|
||||||
|
|
||||||
; : tcp-port -> str str
|
;; : tcp-port -> str str
|
||||||
(define (tcp-addresses tcp-port)
|
(define (tcp-addresses tcp-port)
|
||||||
(if (tcp-port? tcp-port)
|
(if (tcp-port? tcp-port)
|
||||||
(raw:tcp-addresses tcp-port)
|
(raw:tcp-addresses tcp-port)
|
||||||
(values redirected-address redirected-address)))
|
(values redirected-address redirected-address)))
|
||||||
|
|
||||||
; : port -> void
|
;; : port -> void
|
||||||
(define (tcp-close tcp-listener)
|
(define (tcp-close tcp-listener)
|
||||||
(if (tcp-listener? tcp-listener)
|
(if (tcp-listener? tcp-listener)
|
||||||
(raw:tcp-close tcp-listener)
|
(raw:tcp-close tcp-listener)
|
||||||
(hash-table-remove!
|
(hash-remove! port-table (pipe-listener-port tcp-listener))))
|
||||||
port-table
|
|
||||||
(pipe-listener-port tcp-listener))))
|
|
||||||
|
|
||||||
; : (str nat -> iport oport) -> str nat -> iport oport
|
;; : (str nat -> iport oport) -> str nat -> iport oport
|
||||||
(define (gen-tcp-connect raw)
|
(define (gen-tcp-connect raw)
|
||||||
(lambda (hostname-string port)
|
(lambda (hostname-string port)
|
||||||
(if (and (string=? redirected-address hostname-string)
|
(if (and (string=? redirected-address hostname-string)
|
||||||
|
@ -87,9 +84,7 @@
|
||||||
[(from-in to-out) (make-pipe)])
|
[(from-in to-out) (make-pipe)])
|
||||||
(async-channel-put
|
(async-channel-put
|
||||||
(pipe-listener-channel
|
(pipe-listener-channel
|
||||||
(hash-table-get
|
(hash-ref port-table port
|
||||||
port-table
|
|
||||||
port
|
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(raise (make-exn:fail:network
|
(raise (make-exn:fail:network
|
||||||
(format "tcp-connect: connection to ~a, port ~a failed (nobody is listening)"
|
(format "tcp-connect: connection to ~a, port ~a failed (nobody is listening)"
|
||||||
|
@ -99,40 +94,40 @@
|
||||||
(values from-in from-out))
|
(values from-in from-out))
|
||||||
(raw hostname-string port))))
|
(raw hostname-string port))))
|
||||||
|
|
||||||
; : str nat -> iport oport
|
;; : str nat -> iport oport
|
||||||
(define tcp-connect (gen-tcp-connect raw:tcp-connect))
|
(define tcp-connect (gen-tcp-connect raw:tcp-connect))
|
||||||
|
|
||||||
; : str nat -> iport oport
|
;; : str nat -> iport oport
|
||||||
(define tcp-connect/enable-break (gen-tcp-connect raw:tcp-connect/enable-break))
|
(define tcp-connect/enable-break
|
||||||
|
(gen-tcp-connect raw:tcp-connect/enable-break))
|
||||||
|
|
||||||
; FIX - support the reuse? flag.
|
;; FIX - support the reuse? flag.
|
||||||
(define tcp-listen
|
(define (tcp-listen port [max-allow-wait 4] [reuse? #f] [hostname-string #f])
|
||||||
(opt-lambda (port [max-allow-wait 4] [reuse? #f] [hostname-string #f])
|
(hash-ref port-table port
|
||||||
(hash-table-get
|
|
||||||
port-table
|
|
||||||
port
|
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(if (redirect? port)
|
(if (redirect? port)
|
||||||
(let ([listener (make-pipe-listener port (make-async-channel))])
|
(let ([listener (make-pipe-listener port (make-async-channel))])
|
||||||
(hash-table-put! port-table port listener)
|
(hash-set! port-table port listener)
|
||||||
listener)
|
listener)
|
||||||
(raw:tcp-listen port max-allow-wait reuse? hostname-string))))))
|
(raw:tcp-listen port max-allow-wait reuse? hostname-string)))))
|
||||||
|
|
||||||
; : tst -> bool
|
;; : tst -> bool
|
||||||
(define (tcp-listener? x)
|
(define (tcp-listener? x)
|
||||||
(or (pipe-listener? x) (raw:tcp-listener? x)))
|
(or (pipe-listener? x) (raw:tcp-listener? x)))
|
||||||
|
|
||||||
; ---------- private ----------
|
;; ---------- private ----------
|
||||||
|
|
||||||
; : (hash-table nat[port] -> tcp-listener)
|
;; : (hash nat[port] -> tcp-listener)
|
||||||
(define port-table (make-hash-table))
|
(define port-table (make-hasheq))
|
||||||
|
|
||||||
(define redirect-table
|
(define redirect-table
|
||||||
(let ([table (make-hash-table)])
|
(let ([table (make-hasheq)])
|
||||||
(for-each (lambda (x) (hash-table-put! table x #t))
|
(for-each (lambda (x) (hash-set! table x #t))
|
||||||
redirected-ports)
|
redirected-ports)
|
||||||
table))
|
table))
|
||||||
|
|
||||||
; : nat -> bool
|
;; : nat -> bool
|
||||||
(define (redirect? port)
|
(define (redirect? port)
|
||||||
(hash-table-get redirect-table port (lambda () #f)))))))
|
(hash-ref redirect-table port #f))
|
||||||
|
|
||||||
|
))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(module tcp-unit mzscheme
|
#lang scheme/base
|
||||||
(provide tcp@)
|
(provide tcp@)
|
||||||
|
|
||||||
(require mzlib/unit "tcp-sig.ss")
|
(require scheme/unit scheme/tcp "tcp-sig.ss")
|
||||||
|
|
||||||
(define-unit-from-context tcp@ tcp^))
|
(define-unit-from-context tcp@ tcp^)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
(module unihead mzscheme
|
#lang mzscheme
|
||||||
(require net/base64
|
(require net/base64
|
||||||
net/qp
|
net/qp
|
||||||
mzlib/string)
|
mzlib/string)
|
||||||
|
@ -115,4 +115,4 @@
|
||||||
(subbytes rest 3)
|
(subbytes rest 3)
|
||||||
rest)])
|
rest)])
|
||||||
(decode-for-header (bytes->string/latin-1 rest))))))
|
(decode-for-header (bytes->string/latin-1 rest))))))
|
||||||
s)))))
|
s))))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user