sig
  type t
  val compare : OBus_connection.t -> OBus_connection.t -> int
  val of_addresses :
    ?switch:Lwt_switch.t ->
    ?shared:bool -> OBus_address.t list -> OBus_connection.t Lwt.t
  val loopback : unit -> OBus_connection.t
  val close : OBus_connection.t -> unit Lwt.t
  val active : OBus_connection.t -> bool React.signal
  exception Connection_closed
  exception Connection_lost
  exception Transport_error of exn
  val name : OBus_connection.t -> OBus_name.bus
  val set_name : OBus_connection.t -> OBus_name.bus -> unit
  val transport : OBus_connection.t -> OBus_transport.t
  val can_send_basic_type : OBus_connection.t -> OBus_value.T.basic -> bool
  val can_send_single_type : OBus_connection.t -> OBus_value.T.single -> bool
  val can_send_sequence_type :
    OBus_connection.t -> OBus_value.T.sequence -> bool
  val send_message : OBus_connection.t -> OBus_message.t -> unit Lwt.t
  val send_message_with_reply :
    OBus_connection.t -> OBus_message.t -> OBus_message.t Lwt.t
  val send_message_keep_serial :
    OBus_connection.t -> OBus_message.t -> unit Lwt.t
  val send_message_keep_serial_with_reply :
    OBus_connection.t -> OBus_message.t -> OBus_message.t Lwt.t
  val method_call :
    connection:OBus_connection.t ->
    ?destination:OBus_name.bus ->
    path:OBus_path.t ->
    ?interface:OBus_name.interface ->
    member:OBus_name.member ->
    i_args:'OBus_value.C.sequence ->
    o_args:'OBus_value.C.sequence -> '-> 'Lwt.t
  val method_call_with_message :
    connection:OBus_connection.t ->
    ?destination:OBus_name.bus ->
    path:OBus_path.t ->
    ?interface:OBus_name.interface ->
    member:OBus_name.member ->
    i_args:'OBus_value.C.sequence ->
    o_args:'OBus_value.C.sequence -> '-> (OBus_message.t * 'b) Lwt.t
  val method_call_no_reply :
    connection:OBus_connection.t ->
    ?destination:OBus_name.bus ->
    path:OBus_path.t ->
    ?interface:OBus_name.interface ->
    member:OBus_name.member ->
    i_args:'OBus_value.C.sequence -> '-> unit Lwt.t
  type filter = OBus_message.t -> OBus_message.t option
  val incoming_filters :
    OBus_connection.t -> OBus_connection.filter Lwt_sequence.t
  val outgoing_filters :
    OBus_connection.t -> OBus_connection.filter Lwt_sequence.t
  type 'a key
  val new_key : unit -> 'OBus_connection.key
  val get : OBus_connection.t -> 'OBus_connection.key -> 'a option
  val set : OBus_connection.t -> 'OBus_connection.key -> 'a option -> unit
  val set_on_disconnect : OBus_connection.t -> (exn -> unit Lwt.t) -> unit
  val of_transport :
    ?switch:Lwt_switch.t ->
    ?guid:OBus_address.guid ->
    ?up:bool -> OBus_transport.t -> OBus_connection.t
  val state : OBus_connection.t -> [ `Down | `Up ] React.signal
  val set_up : OBus_connection.t -> unit
  val set_down : OBus_connection.t -> unit
end