diff --git a/basis/io/sockets/secure/openssl/openssl.factor b/basis/io/sockets/secure/openssl/openssl.factor index 9768162320..2944d31f81 100644 --- a/basis/io/sockets/secure/openssl/openssl.factor +++ b/basis/io/sockets/secure/openssl/openssl.factor @@ -4,7 +4,8 @@ USING: accessors alien alien.c-types alien.data alien.strings assocs byte-arrays classes.struct combinators destructors fry io io.backend io.buffers io.encodings.8-bit.latin1 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 openssl.libcrypto openssl.libssl random sequences splitting unicode.case ; @@ -175,6 +176,12 @@ SYMBOL: default-secure-context swap >>file ] with-destructors ; +: ( winsock -- ssl ) + [ + socket-handle BIO_NOCLOSE BIO_new_socket dup ssl-error + ] keep + [ handle>> swap dup SSL_set_bio ] keep ; + ! Error handling : syscall-error ( r -- event ) ERR_get_error [ diff --git a/basis/io/sockets/secure/secure.factor b/basis/io/sockets/secure/secure.factor index 28aa1ec45f..eba08909b4 100644 --- a/basis/io/sockets/secure/secure.factor +++ b/basis/io/sockets/secure/secure.factor @@ -104,6 +104,8 @@ M: upgrade-buffers-full summary HOOK: non-ssl-socket? os ( obj -- ? ) +HOOK: socket-handle os ( obj -- ? ) + HOOK: send-secure-handshake secure-socket-backend ( -- ) HOOK: accept-secure-handshake secure-socket-backend ( -- ) diff --git a/basis/io/sockets/secure/unix/unix.factor b/basis/io/sockets/secure/unix/unix.factor index 128a8742df..6b6ba6da8e 100644 --- a/basis/io/sockets/secure/unix/unix.factor +++ b/basis/io/sockets/secure/unix/unix.factor @@ -16,10 +16,7 @@ M: openssl ssl-certificate-verification-supported? t ; M: ssl-handle handle-fd file>> handle-fd ; -! Client sockets -: ( fd -- ssl ) - [ fd>> BIO_NOCLOSE BIO_new_socket dup ssl-error ] keep - [ handle>> swap dup SSL_set_bio ] keep ; +M: unix socket-handle fd>> ; M: secure ((client)) ( addrspec -- handle ) addrspec>> ((client)) ; diff --git a/basis/io/sockets/secure/windows/windows.factor b/basis/io/sockets/secure/windows/windows.factor index abe571f9f2..e7309e3d06 100644 --- a/basis/io/sockets/secure/windows/windows.factor +++ b/basis/io/sockets/secure/windows/windows.factor @@ -6,6 +6,8 @@ IN: io.sockets.secure.windows M: openssl ssl-supported? t ; M: openssl ssl-certificate-verification-supported? f ; +M: windows socket-handle handle>> alien-address ; + : ( winsock -- ssl ) [ handle>> alien-address BIO_NOCLOSE BIO_new_socket dup ssl-error