Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions async/gluten_async.ml
Original file line number Diff line number Diff line change
Expand Up @@ -208,11 +208,15 @@ module Server = struct
fun _client_addr socket -> make_ssl_server socket
end

(* module TLS = struct include Make_server (Tls_io.Io)
module TLS = struct
include Make_server (Tls_io.Io)

let create_default ?alpn_protocols ~certfile ~keyfile = let make_ssl_server
= Ssl_io.make_server ?alpn_protocols ~certfile ~keyfile in fun _client_addr
socket -> make_ssl_server socket end *)
let create_default ?alpn_protocols ~certfile ~keyfile =
let make_tls_server =
Tls_io.make_server ?alpn_protocols ~certfile ~keyfile
in
fun _client_addr socket -> make_tls_server socket
end
end

module Make_client (Io : Gluten_async_intf.IO) = struct
Expand Down
15 changes: 10 additions & 5 deletions async/gluten_async.mli
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,17 @@ module Server : sig
-> 'a socket Deferred.t
end

(* module TLS : sig include Gluten_async_intf.Server with type socket =
Tls_io.descriptor and type addr := Socket.Address.t
module TLS : sig
include Gluten_async_intf.Server with type 'a socket = 'a Tls_io.descriptor

val create_default : ?alpn_protocols:string list -> certfile:string ->
keyfile:string -> 'b -> ([ `Active ], 'a) Socket.t -> socket Deferred.t
end *)
val create_default :
?alpn_protocols:string list
-> certfile:string
-> keyfile:string
-> ([< Socket.Address.t ] as 'a)
-> ([ `Active ], 'a) Socket.t
-> 'a socket Deferred.t
end
end

module Client : sig
Expand Down
69 changes: 52 additions & 17 deletions async/tls_io.real.ml
Original file line number Diff line number Diff line change
Expand Up @@ -112,25 +112,60 @@ let make_default_client :
fun ?alpn_protocols ?host socket where_to_connect ->
let config =
Tls.Config.client ?alpn_protocols ~authenticator:null_auth ()
|> Result.ok
|> Option.value_exn
|> Result.map_error ~f:(fun (`Msg msg) -> msg)
|> Result.ok_or_failwith
in
connect ~config ~socket ~where_to_connect ~host

(* let make_server ?alpn_protocols ~certfile ~keyfile _socket =
Tls_async.X509_async.Certificate.of_pem_file certfile |>
Deferred.Or_error.ok_exn >>= fun certificate ->
Tls_async.X509_async.Private_key.of_pem_file keyfile |>
Deferred.Or_error.ok_exn >>= fun priv_key -> let _config = Tls.Config.(
server ?alpn_protocols ~version:(`TLS_1_0, `TLS_1_2) ~certificates:(`Single
(certificate, priv_key)) ~ciphers:Ciphers.supported ()) in failwithf
"Gluten_async.TLS.make_server: unimplemented" () *)
let reader_writer_of_sock
?buffer_age_limit
?reader_buffer_size
?writer_buffer_size
s
=
let fd = Socket.fd s in
( Reader.create ?buf_len:reader_buffer_size fd
, Writer.create ?buffer_age_limit ?buf_len:writer_buffer_size fd )

let[@ocaml.warning "-21"] make_server
?alpn_protocols:_
~certfile:_
~keyfile:_
_socket
let make_server :
?alpn_protocols:string list
-> certfile:string
-> keyfile:string
-> ([ `Active ], ([< Socket.Address.t ] as 'a)) Socket.t
-> 'a descriptor Deferred.t
=
failwith "Tls_async Server not implemented";
fun _socket -> Core.failwith "Tls_async Server not implemented"
fun ?alpn_protocols ~certfile ~keyfile socket ->
let outer_reader, outer_writer = reader_writer_of_sock socket in
Tls_async.X509_async.Certificate.of_pem_file certfile
|> Deferred.Or_error.ok_exn
>>= fun certificate ->
Tls_async.X509_async.Private_key.of_pem_file keyfile
|> Deferred.Or_error.ok_exn
>>= fun priv_key ->
let config =
Tls.Config.server
?alpn_protocols
~certificates:(`Single (certificate, priv_key))
()
|> Result.map_error ~f:(fun (`Msg msg) -> msg)
|> Result.ok_or_failwith
in
let descriptor_ivar = Ivar.create () in
don't_wait_for
(Tls_async.upgrade_server_handler
~config
(fun _session inner_reader inner_writer ->
let closed = Ivar.create () in
don't_wait_for
(Deferred.all_unit
[ Reader.close_finished inner_reader
; Writer.close_finished inner_writer
]
>>| fun () ->
(Ivar.fill [@ocaml.alert "-deprecated"]) closed ());
(Ivar.fill [@ocaml.alert "-deprecated"]) descriptor_ivar
(inner_reader, inner_writer, Ivar.read closed);
Ivar.read closed)
outer_reader
outer_writer);
Ivar.read descriptor_ivar
Loading