io.sockets.secure: Another fix for cross-platform openssl.
parent
075a86f5d9
commit
59c5373263
|
@ -4,7 +4,8 @@ USING: accessors alien alien.c-types alien.data alien.strings
|
||||||
assocs byte-arrays classes.struct combinators destructors fry io
|
assocs byte-arrays classes.struct combinators destructors fry io
|
||||||
io.backend io.buffers io.encodings.8-bit.latin1
|
io.backend io.buffers io.encodings.8-bit.latin1
|
||||||
io.encodings.utf8 io.files io.pathnames io.ports io.sockets
|
io.encodings.utf8 io.files io.pathnames io.ports io.sockets
|
||||||
io.sockets.secure io.sockets.secure.unix io.timeouts kernel libc
|
io.sockets.secure io.timeouts kernel libc
|
||||||
|
|
||||||
locals math math.order math.parser namespaces openssl
|
locals math math.order math.parser namespaces openssl
|
||||||
openssl.libcrypto openssl.libssl random sequences splitting
|
openssl.libcrypto openssl.libssl random sequences splitting
|
||||||
unicode.case ;
|
unicode.case ;
|
||||||
|
@ -175,6 +176,12 @@ SYMBOL: default-secure-context
|
||||||
swap >>file
|
swap >>file
|
||||||
] with-destructors ;
|
] with-destructors ;
|
||||||
|
|
||||||
|
: <ssl-socket> ( winsock -- ssl )
|
||||||
|
[
|
||||||
|
socket-handle BIO_NOCLOSE BIO_new_socket dup ssl-error
|
||||||
|
] keep <ssl-handle>
|
||||||
|
[ handle>> swap dup SSL_set_bio ] keep ;
|
||||||
|
|
||||||
! Error handling
|
! Error handling
|
||||||
: syscall-error ( r -- event )
|
: syscall-error ( r -- event )
|
||||||
ERR_get_error [
|
ERR_get_error [
|
||||||
|
|
|
@ -104,6 +104,8 @@ M: upgrade-buffers-full summary
|
||||||
|
|
||||||
HOOK: non-ssl-socket? os ( obj -- ? )
|
HOOK: non-ssl-socket? os ( obj -- ? )
|
||||||
|
|
||||||
|
HOOK: socket-handle os ( obj -- ? )
|
||||||
|
|
||||||
HOOK: send-secure-handshake secure-socket-backend ( -- )
|
HOOK: send-secure-handshake secure-socket-backend ( -- )
|
||||||
|
|
||||||
HOOK: accept-secure-handshake secure-socket-backend ( -- )
|
HOOK: accept-secure-handshake secure-socket-backend ( -- )
|
||||||
|
|
|
@ -16,10 +16,7 @@ M: openssl ssl-certificate-verification-supported? t ;
|
||||||
|
|
||||||
M: ssl-handle handle-fd file>> handle-fd ;
|
M: ssl-handle handle-fd file>> handle-fd ;
|
||||||
|
|
||||||
! Client sockets
|
M: unix socket-handle fd>> ;
|
||||||
: <ssl-socket> ( fd -- ssl )
|
|
||||||
[ fd>> BIO_NOCLOSE BIO_new_socket dup ssl-error ] keep <ssl-handle>
|
|
||||||
[ handle>> swap dup SSL_set_bio ] keep ;
|
|
||||||
|
|
||||||
M: secure ((client)) ( addrspec -- handle )
|
M: secure ((client)) ( addrspec -- handle )
|
||||||
addrspec>> ((client)) <ssl-socket> ;
|
addrspec>> ((client)) <ssl-socket> ;
|
||||||
|
|
|
@ -6,6 +6,8 @@ IN: io.sockets.secure.windows
|
||||||
M: openssl ssl-supported? t ;
|
M: openssl ssl-supported? t ;
|
||||||
M: openssl ssl-certificate-verification-supported? f ;
|
M: openssl ssl-certificate-verification-supported? f ;
|
||||||
|
|
||||||
|
M: windows socket-handle handle>> alien-address ;
|
||||||
|
|
||||||
: <ssl-socket> ( winsock -- ssl )
|
: <ssl-socket> ( winsock -- ssl )
|
||||||
[
|
[
|
||||||
handle>> alien-address BIO_NOCLOSE BIO_new_socket dup ssl-error
|
handle>> alien-address BIO_NOCLOSE BIO_new_socket dup ssl-error
|
||||||
|
|
Loading…
Reference in New Issue