]> gitweb.factorcode.org Git - factor.git/blob - basis/io/sockets/secure/windows/windows.factor
Merge:
[factor.git] / basis / io / sockets / secure / windows / windows.factor
1 USING: accessors alien io.ports io.sockets.private io.sockets.secure
2 io.sockets.secure.openssl io.sockets.windows kernel locals openssl
3 openssl.libcrypto openssl.libssl windows.winsock ;
4 IN: io.sockets.secure.windows
5
6 M: openssl ssl-supported? t ;
7 M: openssl ssl-certificate-verification-supported? f ;
8
9 : <ssl-socket> ( winsock -- ssl )
10     [
11         handle>> alien-address BIO_NOCLOSE BIO_new_socket dup ssl-error
12     ] keep <ssl-handle>
13     [ handle>> swap dup SSL_set_bio ] keep ;
14
15 M: secure ((client)) ( addrspec -- handle )
16     addrspec>> ((client)) <ssl-socket> ;
17
18 M: secure (get-local-address) ( handle remote -- sockaddr )
19     [ file>> ] [ addrspec>> ] bi* (get-local-address) ;
20
21 M: secure parse-sockaddr addrspec>> parse-sockaddr <secure> ;
22
23 M:: secure establish-connection ( client-out addrspec -- )
24     client-out handle>> file>> :> socket
25     socket FIONBIO 1 set-ioctl-socket
26     socket <output-port> addrspec addrspec>> establish-connection
27     client-out addrspec secure-connection
28     socket FIONBIO 0 set-ioctl-socket ;