ligo/src/lib_shell_services/p2p_errors.ml
2018-06-05 13:29:06 +02:00

239 lines
9.2 KiB
OCaml

(**************************************************************************)
(* *)
(* Copyright (c) 2014 - 2018. *)
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
(************************ p2p io scheduler ********************************)
type error += Connection_closed
let () =
(* Connection closed *)
register_error_kind
`Permanent
~id:"node.p2p_io_scheduler.connection_closed"
~title:"Connection closed"
~description:"IO error: connection with a peer is closed."
~pp:(fun ppf () -> Format.fprintf ppf "IO error: connection with a peer is closed.")
Data_encoding.empty
(function Connection_closed -> Some () | _ -> None)
(fun () -> Connection_closed)
(***************************** p2p socket *********************************)
type error += Decipher_error
type error += Invalid_message_size
type error += Encoding_error
type error += Rejected_socket_connection
type error += Decoding_error
type error += Myself of P2p_connection.Id.t
type error += Not_enough_proof_of_work of P2p_peer.Id.t
type error += Invalid_auth
type error += Invalid_chunks_size of { value: int ; min: int ; max: int }
let () =
(* Decipher error *)
register_error_kind
`Permanent
~id:"node.p2p_socket.decipher_error"
~title:"Decipher error"
~description:"An error occurred while deciphering."
~pp:(fun ppf () -> Format.fprintf ppf "An error occurred while deciphering.")
Data_encoding.empty
(function Decipher_error -> Some () | _ -> None)
(fun () -> Decipher_error) ;
(* Invalid message size *)
register_error_kind
`Permanent
~id:"node.p2p_socket.invalid_message_size"
~title:"Invalid message size"
~description:"The size of the message to be written is invalid."
~pp:(fun ppf () -> Format.fprintf ppf "The size of the message to be written is invalid.")
Data_encoding.empty
(function Invalid_message_size -> Some () | _ -> None)
(fun () -> Invalid_message_size) ;
(* Encoding error *)
register_error_kind
`Permanent
~id:"node.p2p_socket.encoding_error"
~title:"Encoding error"
~description:"An error occurred while encoding."
~pp:(fun ppf () -> Format.fprintf ppf "An error occurred while encoding.")
Data_encoding.empty
(function Encoding_error -> Some () | _ -> None)
(fun () -> Encoding_error) ;
(* Rejected socket connection *)
register_error_kind
`Permanent
~id:"node.p2p_socket.rejected_socket_connection"
~title:"Rejected socket connection"
~description:"Rejected peer connection: rejected socket connection."
~pp:(fun ppf () -> Format.fprintf ppf "Rejected peer connection: rejected socket connection.")
Data_encoding.empty
(function Rejected_socket_connection -> Some () | _ -> None)
(fun () -> Rejected_socket_connection) ;
(* Decoding error *)
register_error_kind
`Permanent
~id:"node.p2p_socket.decoding_error"
~title:"Decoding error"
~description:"An error occurred while decoding."
~pp:(fun ppf () -> Format.fprintf ppf "An error occurred while decoding.")
Data_encoding.empty
(function Decoding_error -> Some () | _ -> None)
(fun () -> Decoding_error) ;
(* Myself *)
register_error_kind
`Permanent
~id:"node.p2p_socket.myself"
~title:"Myself"
~description:"Remote peer is actually yourself."
~pp:(fun ppf id -> Format.fprintf ppf
"Remote peer %a cannot be authenticated: peer is actually yourself."
P2p_connection.Id.pp id)
Data_encoding.(obj1 (req "connection id" P2p_connection.Id.encoding))
(function Myself id -> Some id | _ -> None)
(fun id -> Myself id) ;
(* Not enough proof of work *)
register_error_kind
`Permanent
~id:"node.p2p_socket.not_enough_proof_of_work"
~title:"Not enough proof of work"
~description:"Remote peer cannot be authenticated: not enough proof of work."
~pp:(fun ppf id ->
Format.fprintf ppf
"Remote peer %a cannot be authenticated: not enough proof of work."
P2p_peer.Id.pp id)
Data_encoding.(obj1 (req "peer id" P2p_peer.Id.encoding))
(function Not_enough_proof_of_work id -> Some id | _ -> None)
(fun id -> Not_enough_proof_of_work id) ;
(* Invalid authentication *)
register_error_kind
`Permanent
~id:"node.p2p_socket.invalid_auth"
~title:"Invalid authentication"
~description:"Rejected peer connection: invalid authentication."
~pp:(fun ppf () -> Format.fprintf ppf "Rejected peer connection: invalid authentication.")
Data_encoding.empty
(function Invalid_auth -> Some () | _ -> None)
(fun () -> Invalid_auth) ;
(* Invalid chunks size *)
register_error_kind
`Permanent
~id:"node.p2p_socket.invalid_chunks_size"
~title:"Invalid chunks size"
~description:"Size of chunks is not valid."
~pp:(fun ppf (value, min, max) ->
Format.fprintf ppf "Size of chunks is invalid: should be between %d and %d but is %d" min max value)
Data_encoding.(obj3
(req "value" int31)
(req "min" int31)
(req "max" int31))
(function Invalid_chunks_size { value ; min ; max }
-> Some (value, min, max) | _ -> None)
(fun (value, min, max) -> Invalid_chunks_size { value ; min ; max })
(***************************** p2p pool ***********************************)
type error += Pending_connection
type error += Connected
type error += Connection_refused
type error += Rejected of P2p_peer.Id.t
type error += Too_many_connections
type error += Private_mode
type error += Point_banned of P2p_point.Id.t
type error += Peer_banned of P2p_peer.Id.t
let () =
(* Pending connection *)
register_error_kind
`Permanent
~id:"node.p2p_pool.pending_connection"
~title:"Pending connection"
~description:"Fail to connect with a peer: a connection is already pending."
~pp:(fun ppf () -> Format.fprintf ppf "Fail to connect with a peer: a connection is already pending.")
Data_encoding.empty
(function Pending_connection -> Some () | _ -> None)
(fun () -> Pending_connection) ;
(* Connected *)
register_error_kind
`Permanent
~id:"node.p2p_pool.connected"
~title:"Connected"
~description:"Fail to connect with a peer: a connection is already established."
~pp:(fun ppf () -> Format.fprintf ppf "Fail to connect with a peer: a connection is already established.")
Data_encoding.empty
(function Connected -> Some () | _ -> None)
(fun () -> Connected) ;
(* Connected refused *)
register_error_kind
`Permanent
~id:"node.p2p_pool.connection_refused"
~title:"Connection refused"
~description:"Connection was refused."
~pp:(fun ppf () -> Format.fprintf ppf "Connection was refused.")
Data_encoding.empty
(function Connection_refused -> Some () | _ -> None)
(fun () -> Connection_refused) ;
(* Rejected *)
register_error_kind
`Permanent
~id:"node.p2p_pool.rejected"
~title:"Rejected peer"
~description:"Connection to peer was rejected."
~pp:(fun ppf id ->
Format.fprintf ppf "Connection to peer %a was rejected." P2p_peer.Id.pp id)
Data_encoding.(obj1 (req "peer id" P2p_peer.Id.encoding))
(function Rejected id -> Some id | _ -> None)
(fun id -> Rejected id) ;
(* Too many connections *)
register_error_kind
`Permanent
~id:"node.p2p_pool.too_many_connections"
~title:"Too many connections"
~description:"Too many connections."
~pp:(fun ppf () -> Format.fprintf ppf "Too many connections.")
Data_encoding.empty
(function Too_many_connections -> Some () | _ -> None)
(fun () -> Too_many_connections) ;
(* Private mode *)
register_error_kind
`Permanent
~id:"node.p2p_pool.private_mode"
~title:"Private mode"
~description:"Node is in private mode."
~pp:(fun ppf () -> Format.fprintf ppf "Node is in private mode.")
Data_encoding.empty
(function Private_mode -> Some () | _ -> None)
(fun () -> Private_mode) ;
(* Point Banned *)
register_error_kind
`Permanent
~id:"node.p2p_pool.point_banned"
~title:"Point Banned"
~description:"The addr you tried to connect is banned."
~pp:(fun ppf (addr, _port) ->
Format.fprintf ppf
"The addr you tried to connect (%a) is banned."
P2p_addr.pp addr)
Data_encoding.(obj1 (req "point" P2p_point.Id.encoding))
(function Point_banned point -> Some point | _ -> None)
(fun point -> Point_banned point) ;
(* Peer Banned *)
register_error_kind
`Permanent
~id:"node.p2p_pool.peer_banned"
~title:"Peer Banned"
~description:"The peer identity you tried to connect is banned."
~pp:(fun ppf peer_id ->
Format.fprintf ppf
"The peer identity you tried to connect (%a) is banned."
P2p_peer.Id.pp peer_id)
Data_encoding.(obj1 (req "peer" P2p_peer.Id.encoding))
(function Peer_banned peer_id -> Some peer_id | _ -> None)
(fun peer_id -> Peer_banned peer_id)