(**************************************************************************) (* *) (* Copyright (c) 2014 - 2017. *) (* Dynamic Ledger Solutions, Inc. *) (* *) (* All rights reserved. No warranty, explicit or implicit, provided. *) (* *) (**************************************************************************) open P2p_types let (peer_id_arg : P2p_types.Peer_id.t RPC_arg.arg) = Crypto_box.Public_key_hash.rpc_arg let point_arg = RPC_arg.make ~name:"point" ~descr:"A network point (ipv4:port or [ipv6]:port)." ~destruct:Point.of_string ~construct:Point.to_string () let versions = RPC_service.post_service ~description:"Supported network layer versions." ~query: RPC_query.empty ~input: Data_encoding.empty ~output: (Data_encoding.list P2p_types.Version.encoding) ~error: Data_encoding.empty RPC_path.(root / "network" / "versions") let stat = RPC_service.post_service ~description:"Global network bandwidth statistics in B/s." ~query: RPC_query.empty ~input: Data_encoding.empty ~output: P2p_types.Stat.encoding ~error: Data_encoding.empty RPC_path.(root / "network" / "stat") let events = RPC_service.post_service ~description:"Stream of all network events" ~query: RPC_query.empty ~input: Data_encoding.empty ~output: P2p_types.Connection_pool_log_event.encoding ~error: Data_encoding.empty RPC_path.(root / "network" / "log") let connect = RPC_service.post_service ~description:"Connect to a peer" ~query: RPC_query.empty ~input: Data_encoding.(obj1 (dft "timeout" float 5.)) ~output: (RPC_error.wrap Data_encoding.empty) ~error: Data_encoding.empty RPC_path.(root / "network" / "connect" /: point_arg) let monitor_encoding = Data_encoding.(obj1 (dft "monitor" bool false)) module Connection = struct let list = RPC_service.post_service ~description:"List the running P2P connection." ~query: RPC_query.empty ~input: Data_encoding.empty ~output: (Data_encoding.list P2p_types.Connection_info.encoding) ~error: Data_encoding.empty RPC_path.(root / "network" / "connection") let info = RPC_service.post_service ~query: RPC_query.empty ~input: Data_encoding.empty ~output: (Data_encoding.option P2p_types.Connection_info.encoding) ~error: Data_encoding.empty ~description:"Details about the current P2P connection to the given peer." RPC_path.(root / "network" / "connection" /: peer_id_arg) let kick = RPC_service.post_service ~query: RPC_query.empty ~input: Data_encoding.(obj1 (req "wait" bool)) ~output: Data_encoding.empty ~error: Data_encoding.empty ~description:"Forced close of the current P2P connection to the given peer." RPC_path.(root / "network" / "connection" /: peer_id_arg / "kick") end module Point = struct let info = RPC_service.post_service ~query: RPC_query.empty ~input: Data_encoding.empty ~output: (Data_encoding.option P2p_types.Point_info.encoding) ~error: Data_encoding.empty ~description: "Details about a given `IP:addr`." RPC_path.(root / "network" / "point" /: point_arg) let events = RPC_service.post_service ~query: RPC_query.empty ~input: monitor_encoding ~output: (Data_encoding.list P2p_connection_pool_types.Point_info.Event.encoding) ~error: Data_encoding.empty ~description: "Monitor network events related to an `IP:addr`." RPC_path.(root / "network" / "point" /: point_arg / "log") let list = let filter = let open Data_encoding in obj1 (dft "filter" (list P2p_types.Point_state.encoding) []) in RPC_service.post_service ~query: RPC_query.empty ~input: filter ~output: Data_encoding.(list (tup2 P2p_types.Point.encoding P2p_types.Point_info.encoding)) ~error: Data_encoding.empty ~description:"List the pool of known `IP:port` \ used for establishing P2P connections ." RPC_path.(root / "network" / "point") end module Peer_id = struct let info = RPC_service.post_service ~query: RPC_query.empty ~input: Data_encoding.empty ~output: (Data_encoding.option P2p_types.Peer_info.encoding) ~error: Data_encoding.empty ~description:"Details about a given peer." RPC_path.(root / "network" / "peer_id" /: peer_id_arg) let events = RPC_service.post_service ~query: RPC_query.empty ~input: monitor_encoding ~output: (Data_encoding.list P2p_connection_pool_types.Peer_info.Event.encoding) ~error: Data_encoding.empty ~description:"Monitor network events related to a given peer." RPC_path.(root / "network" / "peer_id" /: peer_id_arg / "log") let list = let filter = let open Data_encoding in obj1 (dft "filter" (list P2p_types.Peer_state.encoding) []) in RPC_service.post_service ~query: RPC_query.empty ~input: filter ~output: Data_encoding.(list (tup2 P2p_types.Peer_id.encoding P2p_types.Peer_info.encoding)) ~error: Data_encoding.empty ~description:"List the peers the node ever met." RPC_path.(root / "network" / "peer_id") end