1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
(*
* nm_manager.ml
* -------------
* Copyright : (c) 2010, Pierre Chambart <chambart@crans.org>
* 2010, Jeremie Dimino <jeremie@dimino.org>
* Licence : BSD3
*
* This file is a part of obus, an ocaml implementation of D-Bus.
*)
open Lwt
let section = Lwt_log.Section.make "network-manager"
include OBus_peer.Private
let daemon () =
let%lwt bus = OBus_bus.system () in
Lwt.return (OBus_peer.make bus "org.freedesktop.NetworkManager")
(* +-----------------------------------------------------------------+
| Types |
+-----------------------------------------------------------------+ *)
type state =
[ `Unknown
| `Asleep
| `Connecting
| `Connected
| `Disconnected ]
let state_of_int32 = function
| 0l -> `Unknown
| 1l -> `Asleep
| 2l -> `Connecting
| 3l -> `Connected
| 4l -> `Disconnected
| i -> ignore (Lwt_log.warning_f ~section "Nm_manager.state_of_int32: unknown state: %ld" i); `Unknown
(* +-----------------------------------------------------------------+
| D-Bus definitions |
+-----------------------------------------------------------------+ *)
let proxy daemon = OBus_proxy.make daemon ["org"; "freedesktop"; "NetworkManager"]
open Nm_interfaces.Org_freedesktop_NetworkManager
let get_devices daemon =
let%lwt (context, devices) = OBus_method.call_with_context m_GetDevices (proxy daemon) () in
return (
List.map
(fun path ->
Nm_device.of_proxy
(OBus_proxy.make (OBus_context.sender context) path))
devices
)
let activate_connection daemon ~service_name ~connection ~device ~specific_object =
let connection = OBus_proxy.path (Nm_settings.Connection.to_proxy connection) in
let device = OBus_proxy.path (Nm_device.to_proxy device) in
let specific_object = OBus_proxy.path specific_object in
let%lwt (context, active_connection) =
OBus_method.call_with_context
m_ActivateConnection
(proxy daemon)
(service_name, connection, device, specific_object)
in
return (
Nm_connection.of_proxy
(OBus_proxy.make (OBus_context.sender context) active_connection)
)
let deactivate_connection daemon ~active_connection =
let active_connection = OBus_proxy.path (Nm_connection.to_proxy active_connection) in
OBus_method.call m_DeactivateConnection (proxy daemon) active_connection
let sleep daemon ~sleep =
OBus_method.call m_Sleep (proxy daemon) sleep
let wireless_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WirelessEnabled (proxy daemon)
let wireless_hardware_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WirelessHardwareEnabled (proxy daemon)
let wwan_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WwanEnabled (proxy daemon)
let wwan_hardware_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WwanHardwareEnabled (proxy daemon)
let active_connections daemon =
OBus_property.map_r_with_context
(fun context paths ->
List.map
(fun path ->
Nm_connection.of_proxy
(OBus_proxy.make (OBus_context.sender context) path))
paths)
(OBus_property.make ~monitor:Nm_monitor.monitor p_ActiveConnections (proxy daemon))
let state daemon =
OBus_property.map_r
state_of_int32
(OBus_property.make ~monitor:Nm_monitor.monitor p_State (proxy daemon))
let state_changed daemon =
OBus_signal.map
state_of_int32
(OBus_signal.make s_StateChanged (proxy daemon))
let properties_changed daemon =
OBus_signal.make s_PropertiesChanged (proxy daemon)
let device_added daemon =
OBus_signal.map_with_context
(fun context state ->
Nm_device.of_proxy (OBus_proxy.make (OBus_context.sender context) state))
(OBus_signal.make s_DeviceAdded (proxy daemon))
let device_removed daemon =
OBus_signal.map_with_context
(fun context state ->
Nm_device.of_proxy (OBus_proxy.make (OBus_context.sender context) state))
(OBus_signal.make s_DeviceRemoved (proxy daemon))
let properties daemon =
OBus_property.group ~monitor:Nm_monitor.monitor (proxy daemon) interface
|