net/win32-ssl: repairs for RacketCS
This commit is contained in:
parent
7fd6e07ad7
commit
1803e647e1
|
@ -276,8 +276,8 @@
|
||||||
|
|
||||||
;; To stream communication during protocol set-up:
|
;; To stream communication during protocol set-up:
|
||||||
(define buffer-size 4096)
|
(define buffer-size 4096)
|
||||||
(define buffer (make-sized-byte-string (malloc buffer-size 'atomic-interior)
|
(define buffer (malloc buffer-size 'atomic-interior))
|
||||||
buffer-size))
|
(define tmp-buffer (make-bytes buffer-size))
|
||||||
|
|
||||||
(call-as-atomic
|
(call-as-atomic
|
||||||
(lambda ()
|
(lambda ()
|
||||||
|
@ -355,8 +355,8 @@
|
||||||
(call-as-nonatomic
|
(call-as-nonatomic
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(log-win32-ssl-debug "init context: write ~a" (SecBuffer-cbBuffer out-sb0))
|
(log-win32-ssl-debug "init context: write ~a" (SecBuffer-cbBuffer out-sb0))
|
||||||
(write-bytes (make-sized-byte-string (SecBuffer-pvBuffer out-sb0)
|
(write-bytes (pointer->bytes (SecBuffer-pvBuffer out-sb0)
|
||||||
(SecBuffer-cbBuffer out-sb0))
|
(SecBuffer-cbBuffer out-sb0))
|
||||||
o)
|
o)
|
||||||
(flush-output o)))
|
(flush-output o)))
|
||||||
(FreeContextBuffer (SecBuffer-pvBuffer out-sb0))))
|
(FreeContextBuffer (SecBuffer-pvBuffer out-sb0))))
|
||||||
|
@ -376,7 +376,7 @@
|
||||||
(log-win32-ssl-debug "init context: done")
|
(log-win32-ssl-debug "init context: done")
|
||||||
(values ctx
|
(values ctx
|
||||||
(let ([n (get-leftover-bytes)])
|
(let ([n (get-leftover-bytes)])
|
||||||
(subbytes buffer 0 n)))]
|
(pointer->bytes buffer n)))]
|
||||||
[(or (= r SEC_I_CONTINUE_NEEDED)
|
[(or (= r SEC_I_CONTINUE_NEEDED)
|
||||||
(= r SEC_E_INCOMPLETE_MESSAGE))
|
(= r SEC_E_INCOMPLETE_MESSAGE))
|
||||||
;; Pull more data from the server
|
;; Pull more data from the server
|
||||||
|
@ -389,13 +389,15 @@
|
||||||
(define new-buffer (malloc (* 2 buffer-size) 'atomic-interior))
|
(define new-buffer (malloc (* 2 buffer-size) 'atomic-interior))
|
||||||
(memcpy new-buffer buffer buffer-size)
|
(memcpy new-buffer buffer buffer-size)
|
||||||
(set! buffer-size (* 2 buffer-size))
|
(set! buffer-size (* 2 buffer-size))
|
||||||
(set! buffer (make-sized-byte-string new-buffer buffer-size)))
|
(set! buffer new-buffer)
|
||||||
|
(set! tmp-buffer (make-bytes buffer-size)))
|
||||||
;; Go back to non-atomic mode for a potentially blocking read:
|
;; Go back to non-atomic mode for a potentially blocking read:
|
||||||
(define n (call-as-nonatomic
|
(define n (call-as-nonatomic
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(read-bytes-avail! buffer i new-data-len buffer-size))))
|
(read-bytes-avail! tmp-buffer i 0 (- buffer-size new-data-len)))))
|
||||||
(log-win32-ssl-debug "init context: read ~a" n)
|
(log-win32-ssl-debug "init context: read ~a" n)
|
||||||
(when (eof-object? n) (network-error "unexpected EOF"))
|
(when (eof-object? n) (network-error "unexpected EOF"))
|
||||||
|
(memcpy buffer new-data-len tmp-buffer n)
|
||||||
(loop (+ new-data-len n) (if (= r SEC_I_CONTINUE_NEEDED)
|
(loop (+ new-data-len n) (if (= r SEC_I_CONTINUE_NEEDED)
|
||||||
#f
|
#f
|
||||||
init?))]
|
init?))]
|
||||||
|
@ -441,8 +443,8 @@
|
||||||
sb)))
|
sb)))
|
||||||
(unless sb
|
(unless sb
|
||||||
(network-error "expected decrypted data"))
|
(network-error "expected decrypted data"))
|
||||||
(write-bytes (make-sized-byte-string (SecBuffer-pvBuffer sb)
|
(write-bytes (pointer->bytes (SecBuffer-pvBuffer sb)
|
||||||
(SecBuffer-cbBuffer sb))
|
(SecBuffer-cbBuffer sb))
|
||||||
in-post-w)
|
in-post-w)
|
||||||
(define remain (or (for/or ([i (in-range 1 4)])
|
(define remain (or (for/or ([i (in-range 1 4)])
|
||||||
(define sb (ptr-ref out-sb _SecBuffer i))
|
(define sb (ptr-ref out-sb _SecBuffer i))
|
||||||
|
@ -710,6 +712,13 @@
|
||||||
(define (win32-ssl-port? p)
|
(define (win32-ssl-port? p)
|
||||||
(hash-ref win32-ssl-ports p #f))
|
(hash-ref win32-ssl-ports p #f))
|
||||||
|
|
||||||
|
;; ----------------------------------------
|
||||||
|
|
||||||
|
(define (pointer->bytes p len)
|
||||||
|
(define bstr (make-bytes len))
|
||||||
|
(memcpy bstr p len)
|
||||||
|
bstr)
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
;; Initialization
|
;; Initialization
|
||||||
|
|
||||||
|
|
|
@ -377,9 +377,9 @@
|
||||||
(define-ctype _uint64 'unsigned-64 'uint64 (integer-checker who unsigned 64 exact-integer?))
|
(define-ctype _uint64 'unsigned-64 'uint64 (integer-checker who unsigned 64 exact-integer?))
|
||||||
(define-ctype _scheme 'scheme-object 'scheme)
|
(define-ctype _scheme 'scheme-object 'scheme)
|
||||||
(define-ctype _string/ucs-4 (if (system-big-endian?) 'utf-32be 'utf-32le) 'string/ucs-4
|
(define-ctype _string/ucs-4 (if (system-big-endian?) 'utf-32be 'utf-32le) 'string/ucs-4
|
||||||
(checker who string?))
|
(checker who (lambda (x) (or (not x) (string? x)))))
|
||||||
(define-ctype _string/utf-16 (if (system-big-endian?) 'utf-16be 'utf-16le) 'string/utf-16
|
(define-ctype _string/utf-16 (if (system-big-endian?) 'utf-16be 'utf-16le) 'string/utf-16
|
||||||
(checker who string?))
|
(checker who (lambda (x) (or (not x) (string? x)))))
|
||||||
(define-ctype _void 'void 'void (checker who void))
|
(define-ctype _void 'void 'void (checker who void))
|
||||||
|
|
||||||
(define (bad-ctype-value type-name v)
|
(define (bad-ctype-value type-name v)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user