package mnet-tls
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=07233e57f836eadd9566dbc2c7e81a0da058c52c40e8cf38eb9b2f178a9fa537
sha512=e190d793c9950a85e3fc8865f26a222c2763ad8f2c2972cfb5fe10926f2ecc39d75b4f970065cafa9526c4d1edb8b3574dd4b37893fca6de144fe7ced4a23bb0
doc/mnet-tls/Mnet_tls/index.html
Module Mnet_tlsSource
TLS sessions over Mnet TCP connections.
This module wraps ocaml-tls (a pure OCaml TLS implementation) with the effectful I/O provided by Mnet.TCP. It provides the same read/write/close interface as Mnet.TCP but with transparent encryption.
A TLS session is created from an existing Mnet.TCP.flow using either client_of_fd (for outgoing connections) or server_of_fd (for incoming connections). The TLS handshake is performed during creation.
let flow = Mnet.TCP.connect tcp (Ipaddr.V4 server, 443) in
let tls_config = Tls.Config.client ~authenticator () in
let tls = Mnet_tls.client_of_fd tls_config flow in
Mnet_tls.write tls "GET / HTTP/1.1\r\n\r\n";
let buf = Bytes.create 4096 in
let len = Mnet_tls.read tls buf in
Mnet_tls.close tlsAbstract type of a session.
file_descr returns the underlying file-descriptor used by the given TLS socket.
read t buf ~off ~len reads up to len bytes (defaults to Bytes.length buf - off) from the given TLS session t, storing them in byte sequence buf, starting at position off in buf (defaults to 0). It returns the actual number of characters read, between 0 and len (inclusive).
really_read fd buf ~off ~len reads len bytes (defaults to Bytes.length buf - off) from the given TLS socket fd, storing them in byte sequence buf, starting at position off in buf (defaults to 0). If len = 0, really_read does nothing.
write t str ~off ~len writes len bytes (defaults to String.length str - off) from byte sequence str, starting at offset off (defaults to 0), to the given TLS socket fd.
shutdown t direction closes the direction of the TLS session t. If `read_write or `write is closed, a TLS close-notify is sent to the other endpoint. If this results in a fully-closed session (or an errorneous session), the underlying file descriptor is closed.
val client_of_fd :
Tls.Config.client ->
?host:[ `host ] Domain_name.t ->
?ip:Ipaddr.t ->
Mnet.TCP.direct Mnet.TCP.flow ->
tclient_of_flow client ~host ~ip fd is t, after client-side TLS handshake of fd using client configuration and host or ip.
server_of_fd server fd is t, after server-side TLS handshake of fd using server configuration.
epoch t returns epoch, which contains information of the active session.