P2p: properly export connection metadata

This commit is contained in:
Grégoire Henry 2018-05-28 20:38:08 +02:00
parent 367cc4e916
commit 6faaeaf5e8
7 changed files with 59 additions and 41 deletions

View File

@ -204,6 +204,8 @@ module Real = struct
P2p_pool.disconnect ?wait conn P2p_pool.disconnect ?wait conn
let connection_info _net conn = let connection_info _net conn =
P2p_pool.Connection.info conn P2p_pool.Connection.info conn
let connection_metadata _net conn =
P2p_pool.Connection.meta conn
let connection_stat _net conn = let connection_stat _net conn =
P2p_pool.Connection.stat conn P2p_pool.Connection.stat conn
let global_stat { pool } () = let global_stat { pool } () =
@ -326,6 +328,8 @@ type ('msg, 'peer_meta, 'conn_meta) t = {
?wait:bool -> ('msg, 'peer_meta, 'conn_meta) connection -> unit Lwt.t ; ?wait:bool -> ('msg, 'peer_meta, 'conn_meta) connection -> unit Lwt.t ;
connection_info : connection_info :
('msg, 'peer_meta, 'conn_meta) connection -> P2p_connection.Info.t ; ('msg, 'peer_meta, 'conn_meta) connection -> P2p_connection.Info.t ;
connection_metadata :
('msg, 'peer_meta, 'conn_meta) connection -> 'conn_meta ;
connection_stat : ('msg, 'peer_meta, 'conn_meta) connection -> P2p_stat.t ; connection_stat : ('msg, 'peer_meta, 'conn_meta) connection -> P2p_stat.t ;
global_stat : unit -> P2p_stat.t ; global_stat : unit -> P2p_stat.t ;
get_peer_metadata : P2p_peer.Id.t -> 'peer_meta ; get_peer_metadata : P2p_peer.Id.t -> 'peer_meta ;
@ -401,6 +405,7 @@ let create ~config ~limits peer_cfg conn_cfg msg_cfg =
find_connection = Real.find_connection net ; find_connection = Real.find_connection net ;
disconnect = Real.disconnect ; disconnect = Real.disconnect ;
connection_info = Real.connection_info net ; connection_info = Real.connection_info net ;
connection_metadata = Real.connection_metadata net ;
connection_stat = Real.connection_stat net ; connection_stat = Real.connection_stat net ;
global_stat = Real.global_stat net ; global_stat = Real.global_stat net ;
get_peer_metadata = Real.get_peer_metadata net ; get_peer_metadata = Real.get_peer_metadata net ;
@ -426,6 +431,7 @@ let faked_network peer_cfg = {
find_connection = (fun _ -> None) ; find_connection = (fun _ -> None) ;
disconnect = (fun ?wait:_ _ -> Lwt.return_unit) ; disconnect = (fun ?wait:_ _ -> Lwt.return_unit) ;
connection_info = (fun _ -> Fake.connection_info) ; connection_info = (fun _ -> Fake.connection_info) ;
connection_metadata = (fun _ -> assert false) ;
connection_stat = (fun _ -> Fake.empty_stat) ; connection_stat = (fun _ -> Fake.empty_stat) ;
global_stat = (fun () -> Fake.empty_stat) ; global_stat = (fun () -> Fake.empty_stat) ;
get_peer_metadata = (fun _ -> peer_cfg.peer_meta_initial) ; get_peer_metadata = (fun _ -> peer_cfg.peer_meta_initial) ;
@ -449,6 +455,7 @@ let connections net = net.connections ()
let disconnect net = net.disconnect let disconnect net = net.disconnect
let find_connection net = net.find_connection let find_connection net = net.find_connection
let connection_info net = net.connection_info let connection_info net = net.connection_info
let connection_metadata net = net.connection_metadata
let connection_stat net = net.connection_stat let connection_stat net = net.connection_stat
let global_stat net = net.global_stat () let global_stat net = net.global_stat ()
let get_peer_metadata net = net.get_peer_metadata let get_peer_metadata net = net.get_peer_metadata

View File

@ -181,6 +181,10 @@ val connection_info :
('msg, 'peer_meta, 'conn_meta) net -> ('msg, 'peer_meta, 'conn_meta) net ->
('msg, 'peer_meta, 'conn_meta) connection -> ('msg, 'peer_meta, 'conn_meta) connection ->
P2p_connection.Info.t P2p_connection.Info.t
val connection_metadata :
('msg, 'peer_meta, 'conn_meta) net ->
('msg, 'peer_meta, 'conn_meta) connection ->
'conn_meta
val connection_stat : val connection_stat :
('msg, 'peer_meta, 'conn_meta) net -> ('msg, 'peer_meta, 'conn_meta) net ->
('msg, 'peer_meta, 'conn_meta) connection -> ('msg, 'peer_meta, 'conn_meta) connection ->

View File

@ -92,9 +92,9 @@ module Answerer = struct
swap_ack: P2p_point.Id.t -> P2p_peer.Id.t -> unit Lwt.t ; swap_ack: P2p_point.Id.t -> P2p_peer.Id.t -> unit Lwt.t ;
} }
type 'msg t = { type ('msg, 'meta) t = {
canceler: Lwt_canceler.t ; canceler: Lwt_canceler.t ;
conn: 'msg Message.t P2p_socket.t ; conn: ('msg Message.t, 'meta) P2p_socket.t ;
callback: 'msg callback ; callback: 'msg callback ;
mutable worker: unit Lwt.t ; mutable worker: unit Lwt.t ;
} }
@ -248,12 +248,12 @@ and events = {
and ('msg, 'peer_meta, 'conn_meta) connection = { and ('msg, 'peer_meta, 'conn_meta) connection = {
canceler : Lwt_canceler.t ; canceler : Lwt_canceler.t ;
messages : (int * 'msg) Lwt_pipe.t ; messages : (int * 'msg) Lwt_pipe.t ;
conn : 'msg Message.t P2p_socket.t ; conn : ('msg Message.t, 'conn_meta) P2p_socket.t ;
peer_info : peer_info :
(('msg, 'peer_meta, 'conn_meta) connection, 'peer_meta, 'conn_meta) P2p_peer_state.Info.t ; (('msg, 'peer_meta, 'conn_meta) connection, 'peer_meta, 'conn_meta) P2p_peer_state.Info.t ;
point_info : point_info :
('msg, 'peer_meta, 'conn_meta) connection P2p_point_state.Info.t option ; ('msg, 'peer_meta, 'conn_meta) connection P2p_point_state.Info.t option ;
answerer : 'msg Answerer.t Lazy.t ; answerer : ('msg, 'conn_meta) Answerer.t Lazy.t ;
mutable last_sent_swap_request : (Time.t * P2p_peer.Id.t) option ; mutable last_sent_swap_request : (Time.t * P2p_peer.Id.t) option ;
mutable wait_close : bool ; mutable wait_close : bool ;
} }
@ -584,6 +584,9 @@ module Connection = struct
let info { conn } = let info { conn } =
P2p_socket.info conn P2p_socket.info conn
let meta { conn } =
P2p_socket.meta conn
let find_by_peer_id pool peer_id = let find_by_peer_id pool peer_id =
Option.apply Option.apply
(Peers.info pool peer_id) (Peers.info pool peer_id)
@ -800,11 +803,11 @@ and authenticate pool ?point_info canceler fd point =
?binary_chunks_size:pool.config.binary_chunks_size ?binary_chunks_size:pool.config.binary_chunks_size
auth_fd auth_fd
(pool.conn_meta_config.conn_meta_value info.peer_id) (pool.conn_meta_config.conn_meta_value info.peer_id)
pool.encoding >>=? fun (conn, ack_cfg) -> pool.encoding >>=? fun conn ->
lwt_debug "authenticate: %a -> Connected %a" lwt_debug "authenticate: %a -> Connected %a"
P2p_point.Id.pp point P2p_point.Id.pp point
P2p_connection.Info.pp info >>= fun () -> P2p_connection.Info.pp info >>= fun () ->
return (conn, ack_cfg) return conn
end ~on_error: begin fun err -> end ~on_error: begin fun err ->
if incoming then if incoming then
log pool log pool
@ -816,7 +819,7 @@ and authenticate pool ?point_info canceler fd point =
~f:P2p_point_state.set_disconnected ; ~f:P2p_point_state.set_disconnected ;
P2p_peer_state.set_disconnected peer_info ; P2p_peer_state.set_disconnected peer_info ;
Lwt.return (Error err) Lwt.return (Error err)
end >>=? fun (conn, ack_cfg) -> end >>=? fun conn ->
let id_point = let id_point =
match info.id_point, Option.map ~f:P2p_point_state.Info.point point_info with match info.id_point, Option.map ~f:P2p_point_state.Info.point point_info with
| (addr, _), Some (_, port) -> addr, Some port | (addr, _), Some (_, port) -> addr, Some port
@ -824,7 +827,7 @@ and authenticate pool ?point_info canceler fd point =
return return
(create_connection (create_connection
pool conn pool conn
id_point connection_point_info peer_info version ack_cfg) id_point connection_point_info peer_info version)
end end
| _ -> begin | _ -> begin
log pool (Rejecting_request (point, info.id_point, info.peer_id)) ; log pool (Rejecting_request (point, info.id_point, info.peer_id)) ;
@ -840,7 +843,7 @@ and authenticate pool ?point_info canceler fd point =
fail (P2p_errors.Rejected info.peer_id) fail (P2p_errors.Rejected info.peer_id)
end end
and create_connection pool p2p_conn id_point point_info peer_info _version ack_cfg = and create_connection pool p2p_conn id_point point_info peer_info _version =
let peer_id = P2p_peer_state.Info.peer_id peer_info in let peer_id = P2p_peer_state.Info.peer_id peer_info in
let canceler = Lwt_canceler.create () in let canceler = Lwt_canceler.create () in
let size = let size =
@ -872,7 +875,7 @@ and create_connection pool p2p_conn id_point point_info peer_info _version ack_c
P2p_point.Table.add pool.connected_points point point_info ; P2p_point.Table.add pool.connected_points point point_info ;
end ; end ;
log pool (Connection_established (id_point, peer_id)) ; log pool (Connection_established (id_point, peer_id)) ;
P2p_peer_state.set_running peer_info id_point conn ack_cfg ; P2p_peer_state.set_running peer_info id_point conn (P2p_socket.meta conn.conn) ;
P2p_peer.Table.add pool.connected_peer_ids peer_id peer_info ; P2p_peer.Table.add pool.connected_peer_ids peer_id peer_info ;
Lwt_condition.broadcast pool.events.new_connection () ; Lwt_condition.broadcast pool.events.new_connection () ;
Lwt_canceler.on_cancel canceler begin fun () -> Lwt_canceler.on_cancel canceler begin fun () ->

View File

@ -219,6 +219,7 @@ val disconnect:
module Connection : sig module Connection : sig
val info: ('msg, 'peer_meta,'conn_meta) connection -> P2p_connection.Info.t val info: ('msg, 'peer_meta,'conn_meta) connection -> P2p_connection.Info.t
val meta: ('msg, 'peer_meta,'conn_meta) connection -> 'conn_meta
val stat: ('msg, 'peer_meta,'conn_meta) connection -> P2p_stat.t val stat: ('msg, 'peer_meta,'conn_meta) connection -> P2p_stat.t
(** [stat conn] is a snapshot of current bandwidth usage for (** [stat conn] is a snapshot of current bandwidth usage for

View File

@ -478,8 +478,9 @@ module Writer = struct
end end
type 'msg t = { type ('msg, 'meta) t = {
conn : connection ; conn : connection ;
meta : 'meta ;
reader : 'msg Reader.t ; reader : 'msg Reader.t ;
writer : 'msg Writer.t ; writer : 'msg Writer.t ;
} }
@ -488,6 +489,7 @@ let equal { conn = { id = id1 } } { conn = { id = id2 } } = id1 = id2
let pp ppf { conn } = P2p_connection.Info.pp ppf conn.info let pp ppf { conn } = P2p_connection.Info.pp ppf conn.info
let info { conn } = conn.info let info { conn } = conn.info
let meta { meta } = meta
let accept let accept
?incoming_message_queue_size ?outgoing_message_queue_size ?incoming_message_queue_size ?outgoing_message_queue_size
@ -505,7 +507,7 @@ let accept
| [ P2p_errors.Decipher_error ] -> fail P2p_errors.Invalid_auth | [ P2p_errors.Decipher_error ] -> fail P2p_errors.Invalid_auth
| err -> Lwt.return (Error err) | err -> Lwt.return (Error err)
end >>=? function end >>=? function
| Ack ack_cfg -> | Ack meta ->
let canceler = Lwt_canceler.create () in let canceler = Lwt_canceler.create () in
let conn = { id = next_conn_id () ; fd ; info ; cryptobox_data } in let conn = { id = next_conn_id () ; fd ; info ; cryptobox_data } in
let reader = let reader =
@ -515,12 +517,12 @@ let accept
?size:outgoing_message_queue_size ?binary_chunks_size ?size:outgoing_message_queue_size ?binary_chunks_size
conn encoding canceler conn encoding canceler
in in
let conn = { conn ; reader ; writer } in let conn = { conn ; reader ; writer ; meta } in
Lwt_canceler.on_cancel canceler begin fun () -> Lwt_canceler.on_cancel canceler begin fun () ->
P2p_io_scheduler.close fd >>= fun _ -> P2p_io_scheduler.close fd >>= fun _ ->
Lwt.return_unit Lwt.return_unit
end ; end ;
return (conn, ack_cfg) return conn
| Nack -> | Nack ->
fail P2p_errors.Rejected_socket_connection fail P2p_errors.Rejected_socket_connection

View File

@ -24,14 +24,15 @@ type 'conn_meta authenticated_fd
phase, but has not been accepted yet. Parametrized by the type phase, but has not been accepted yet. Parametrized by the type
of expected parameter in the `ack` message. *) of expected parameter in the `ack` message. *)
type 'msg t type ('msg, 'meta) t
(** Type of an accepted connection, parametrized by the type of (** Type of an accepted connection, parametrized by the type of
messages exchanged between peers. *) messages exchanged between peers. *)
val equal: 'mst t -> 'msg t -> bool val equal: ('mst, 'meta) t -> ('msg, 'meta) t -> bool
val pp: Format.formatter -> 'msg t -> unit val pp: Format.formatter -> ('msg, 'meta) t -> unit
val info: 'msg t -> P2p_connection.Info.t val info: ('msg, 'meta) t -> P2p_connection.Info.t
val meta: ('msg, 'meta) t -> 'meta
(** {1 Low-level functions (do not use directly)} *) (** {1 Low-level functions (do not use directly)} *)
@ -58,7 +59,7 @@ val accept:
?outgoing_message_queue_size:int -> ?outgoing_message_queue_size:int ->
?binary_chunks_size: int -> ?binary_chunks_size: int ->
'conn_meta authenticated_fd -> 'conn_meta -> 'conn_meta authenticated_fd -> 'conn_meta ->
'msg Data_encoding.t -> ('msg t * 'conn_meta) tzresult Lwt.t 'msg Data_encoding.t -> ('msg, 'conn_meta) t tzresult Lwt.t
(** (Low-level) (Cancelable) Accepts a remote peer given an (** (Low-level) (Cancelable) Accepts a remote peer given an
authenticated_fd. Used in [P2p_connection_pool], to promote an authenticated_fd. Used in [P2p_connection_pool], to promote an
[authenticated_fd] to the status of an active peer. *) [authenticated_fd] to the status of an active peer. *)
@ -70,47 +71,47 @@ val check_binary_chunks_size: int -> unit tzresult Lwt.t
(** {2 Output functions} *) (** {2 Output functions} *)
val write: 'msg t -> 'msg -> unit tzresult Lwt.t val write: ('msg, 'meta) t -> 'msg -> unit tzresult Lwt.t
(** [write conn msg] returns when [msg] has successfully been added to (** [write conn msg] returns when [msg] has successfully been added to
[conn]'s internal write queue or fails with a corresponding [conn]'s internal write queue or fails with a corresponding
error. *) error. *)
val write_now: 'msg t -> 'msg -> bool tzresult val write_now: ('msg, 'meta) t -> 'msg -> bool tzresult
(** [write_now conn msg] is [Ok true] if [msg] has been added to (** [write_now conn msg] is [Ok true] if [msg] has been added to
[conn]'s internal write queue, [Ok false] if [msg] has been [conn]'s internal write queue, [Ok false] if [msg] has been
dropped, or fails with a correponding error otherwise. *) dropped, or fails with a correponding error otherwise. *)
val write_sync: 'msg t -> 'msg -> unit tzresult Lwt.t val write_sync: ('msg, 'meta) t -> 'msg -> unit tzresult Lwt.t
(** [write_sync conn msg] returns when [msg] has been successfully (** [write_sync conn msg] returns when [msg] has been successfully
sent to the remote end of [conn], or fails accordingly. *) sent to the remote end of [conn], or fails accordingly. *)
(** {2 Input functions} *) (** {2 Input functions} *)
val is_readable: 'msg t -> bool val is_readable: ('msg, 'meta) t -> bool
(** [is_readable conn] is [true] iff [conn] internal read queue is not (** [is_readable conn] is [true] iff [conn] internal read queue is not
empty. *) empty. *)
val wait_readable: 'msg t -> unit tzresult Lwt.t val wait_readable: ('msg, 'meta) t -> unit tzresult Lwt.t
(** (Cancelable) [wait_readable conn] returns when [conn]'s internal (** (Cancelable) [wait_readable conn] returns when [conn]'s internal
read queue becomes readable (i.e. not empty). *) read queue becomes readable (i.e. not empty). *)
val read: 'msg t -> (int * 'msg) tzresult Lwt.t val read: ('msg, 'meta) t -> (int * 'msg) tzresult Lwt.t
(** [read conn msg] returns when [msg] has successfully been popped (** [read conn msg] returns when [msg] has successfully been popped
from [conn]'s internal read queue or fails with a corresponding from [conn]'s internal read queue or fails with a corresponding
error. *) error. *)
val read_now: 'msg t -> (int * 'msg) tzresult option val read_now: ('msg, 'meta) t -> (int * 'msg) tzresult option
(** [read_now conn msg] is [Some msg] if [conn]'s internal read queue (** [read_now conn msg] is [Some msg] if [conn]'s internal read queue
is not empty, [None] if it is empty, or fails with a correponding is not empty, [None] if it is empty, or fails with a correponding
error otherwise. *) error otherwise. *)
val stat: 'msg t -> P2p_stat.t val stat: ('msg, 'meta) t -> P2p_stat.t
(** [stat conn] is a snapshot of current bandwidth usage for (** [stat conn] is a snapshot of current bandwidth usage for
[conn]. *) [conn]. *)
val close: ?wait:bool -> 'msg t -> unit Lwt.t val close: ?wait:bool -> ('msg, 'meta) t -> unit Lwt.t
(**/**) (**/**)
(** for testing only *) (** for testing only *)
val raw_write_sync: 'msg t -> MBytes.t -> unit tzresult Lwt.t val raw_write_sync: ('msg, 'meta) t -> MBytes.t -> unit tzresult Lwt.t

View File

@ -208,7 +208,7 @@ module Simple_message = struct
let server ch sched socket = let server ch sched socket =
accept sched socket >>=? fun (_info, auth_fd) -> accept sched socket >>=? fun (_info, auth_fd) ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
P2p_socket.write_sync conn simple_msg >>=? fun () -> P2p_socket.write_sync conn simple_msg >>=? fun () ->
P2p_socket.read conn >>=? fun (_msg_size, msg) -> P2p_socket.read conn >>=? fun (_msg_size, msg) ->
_assert (MBytes.compare simple_msg2 msg = 0) __LOC__ "" >>=? fun () -> _assert (MBytes.compare simple_msg2 msg = 0) __LOC__ "" >>=? fun () ->
@ -218,7 +218,7 @@ module Simple_message = struct
let client ch sched addr port = let client ch sched addr port =
connect sched addr port id2 >>=? fun auth_fd -> connect sched addr port id2 >>=? fun auth_fd ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
P2p_socket.write_sync conn simple_msg2 >>=? fun () -> P2p_socket.write_sync conn simple_msg2 >>=? fun () ->
P2p_socket.read conn >>=? fun (_msg_size, msg) -> P2p_socket.read conn >>=? fun (_msg_size, msg) ->
_assert (MBytes.compare simple_msg msg = 0) __LOC__ "" >>=? fun () -> _assert (MBytes.compare simple_msg msg = 0) __LOC__ "" >>=? fun () ->
@ -240,7 +240,7 @@ module Chunked_message = struct
let server ch sched socket = let server ch sched socket =
accept sched socket >>=? fun (_info, auth_fd) -> accept sched socket >>=? fun (_info, auth_fd) ->
P2p_socket.accept P2p_socket.accept
~binary_chunks_size:21 auth_fd () encoding >>=? fun (conn, _ack_cfg) -> ~binary_chunks_size:21 auth_fd () encoding >>=? fun conn ->
P2p_socket.write_sync conn simple_msg >>=? fun () -> P2p_socket.write_sync conn simple_msg >>=? fun () ->
P2p_socket.read conn >>=? fun (_msg_size, msg) -> P2p_socket.read conn >>=? fun (_msg_size, msg) ->
_assert (MBytes.compare simple_msg2 msg = 0) __LOC__ "" >>=? fun () -> _assert (MBytes.compare simple_msg2 msg = 0) __LOC__ "" >>=? fun () ->
@ -251,7 +251,7 @@ module Chunked_message = struct
let client ch sched addr port = let client ch sched addr port =
connect sched addr port id2 >>=? fun auth_fd -> connect sched addr port id2 >>=? fun auth_fd ->
P2p_socket.accept P2p_socket.accept
~binary_chunks_size:21 auth_fd () encoding >>=? fun (conn, _ack_cfg) -> ~binary_chunks_size:21 auth_fd () encoding >>=? fun conn ->
P2p_socket.write_sync conn simple_msg2 >>=? fun () -> P2p_socket.write_sync conn simple_msg2 >>=? fun () ->
P2p_socket.read conn >>=? fun (_msg_size, msg) -> P2p_socket.read conn >>=? fun (_msg_size, msg) ->
_assert (MBytes.compare simple_msg msg = 0) __LOC__ "" >>=? fun () -> _assert (MBytes.compare simple_msg msg = 0) __LOC__ "" >>=? fun () ->
@ -272,7 +272,7 @@ module Oversized_message = struct
let server ch sched socket = let server ch sched socket =
accept sched socket >>=? fun (_info, auth_fd) -> accept sched socket >>=? fun (_info, auth_fd) ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
P2p_socket.write_sync conn simple_msg >>=? fun () -> P2p_socket.write_sync conn simple_msg >>=? fun () ->
P2p_socket.read conn >>=? fun (_msg_size, msg) -> P2p_socket.read conn >>=? fun (_msg_size, msg) ->
_assert (MBytes.compare simple_msg2 msg = 0) __LOC__ "" >>=? fun () -> _assert (MBytes.compare simple_msg2 msg = 0) __LOC__ "" >>=? fun () ->
@ -282,7 +282,7 @@ module Oversized_message = struct
let client ch sched addr port = let client ch sched addr port =
connect sched addr port id2 >>=? fun auth_fd -> connect sched addr port id2 >>=? fun auth_fd ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
P2p_socket.write_sync conn simple_msg2 >>=? fun () -> P2p_socket.write_sync conn simple_msg2 >>=? fun () ->
P2p_socket.read conn >>=? fun (_msg_size, msg) -> P2p_socket.read conn >>=? fun (_msg_size, msg) ->
_assert (MBytes.compare simple_msg msg = 0) __LOC__ "" >>=? fun () -> _assert (MBytes.compare simple_msg msg = 0) __LOC__ "" >>=? fun () ->
@ -302,14 +302,14 @@ module Close_on_read = struct
let server ch sched socket = let server ch sched socket =
accept sched socket >>=? fun (_info, auth_fd) -> accept sched socket >>=? fun (_info, auth_fd) ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
sync ch >>=? fun () -> sync ch >>=? fun () ->
P2p_socket.close conn >>= fun _stat -> P2p_socket.close conn >>= fun _stat ->
return () return ()
let client ch sched addr port = let client ch sched addr port =
connect sched addr port id2 >>=? fun auth_fd -> connect sched addr port id2 >>=? fun auth_fd ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
sync ch >>=? fun () -> sync ch >>=? fun () ->
P2p_socket.read conn >>= fun err -> P2p_socket.read conn >>= fun err ->
_assert (is_connection_closed err) __LOC__ "" >>=? fun () -> _assert (is_connection_closed err) __LOC__ "" >>=? fun () ->
@ -328,14 +328,14 @@ module Close_on_write = struct
let server ch sched socket = let server ch sched socket =
accept sched socket >>=? fun (_info, auth_fd) -> accept sched socket >>=? fun (_info, auth_fd) ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
P2p_socket.close conn >>= fun _stat -> P2p_socket.close conn >>= fun _stat ->
sync ch >>=? fun ()-> sync ch >>=? fun ()->
return () return ()
let client ch sched addr port = let client ch sched addr port =
connect sched addr port id2 >>=? fun auth_fd -> connect sched addr port id2 >>=? fun auth_fd ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
sync ch >>=? fun ()-> sync ch >>=? fun ()->
Lwt_unix.sleep 0.1 >>= fun () -> Lwt_unix.sleep 0.1 >>= fun () ->
P2p_socket.write_sync conn simple_msg >>= fun err -> P2p_socket.write_sync conn simple_msg >>= fun err ->
@ -365,7 +365,7 @@ module Garbled_data = struct
let server _ch sched socket = let server _ch sched socket =
accept sched socket >>=? fun (_info, auth_fd) -> accept sched socket >>=? fun (_info, auth_fd) ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
P2p_socket.raw_write_sync conn garbled_msg >>=? fun () -> P2p_socket.raw_write_sync conn garbled_msg >>=? fun () ->
P2p_socket.read conn >>= fun err -> P2p_socket.read conn >>= fun err ->
_assert (is_connection_closed err) __LOC__ "" >>=? fun () -> _assert (is_connection_closed err) __LOC__ "" >>=? fun () ->
@ -374,7 +374,7 @@ module Garbled_data = struct
let client _ch sched addr port = let client _ch sched addr port =
connect sched addr port id2 >>=? fun auth_fd -> connect sched addr port id2 >>=? fun auth_fd ->
P2p_socket.accept auth_fd () encoding >>=? fun (conn, _ack_cfg) -> P2p_socket.accept auth_fd () encoding >>=? fun conn ->
P2p_socket.read conn >>= fun err -> P2p_socket.read conn >>= fun err ->
_assert (is_decoding_error err) __LOC__ "" >>=? fun () -> _assert (is_decoding_error err) __LOC__ "" >>=? fun () ->
P2p_socket.close conn >>= fun _stat -> P2p_socket.close conn >>= fun _stat ->