summaryrefslogtreecommitdiff
path: root/examples/network_manager.ml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/network_manager.ml')
-rw-r--r--examples/network_manager.ml49
1 files changed, 49 insertions, 0 deletions
diff --git a/examples/network_manager.ml b/examples/network_manager.ml
new file mode 100644
index 0000000..40fb957
--- /dev/null
+++ b/examples/network_manager.ml
@@ -0,0 +1,49 @@
+(*
+ * network_manager.ml
+ * ------------------
+ * Copyright : (c) 2011, Jeremie Dimino <jeremie@dimino.org>
+ * Licence : BSD3
+ *
+ * This file is a part of obus, an ocaml implementation of D-Bus.
+ *)
+
+(* This example illustrate the use of OBus to detect network-manager
+ connections. *)
+
+open Lwt_react
+open Lwt
+open Lwt_io
+open OBus_value
+
+let () = Lwt_main.run begin
+ (* Get the manager. *)
+ let%lwt manager = Nm_manager.daemon () in
+
+ (* Create a signal descriptor for listenning on signals comming from
+ any DHCP4 object. *)
+ let sig_desc =
+ OBus_signal.make_any
+ Nm_interfaces.Org_freedesktop_NetworkManager_DHCP4Config.s_PropertiesChanged
+ (Nm_manager.to_peer manager)
+ in
+
+ (* Connects to this signal. *)
+ let%lwt event = OBus_signal.connect sig_desc in
+
+ (* Prints all DHCP4 options when one configuration changes. *)
+ E.keep
+ (E.map_s
+ (fun (proxy, properties) ->
+ match try Some(List.assoc "Options" properties) with Not_found -> None with
+ | Some options ->
+ let%lwt () = printlf "DHCP options for %S:" (OBus_path.to_string (OBus_proxy.path proxy)) in
+ Lwt_list.iter_s
+ (fun (key, value) ->
+ printlf " %s = %s" key (V.string_of_single value))
+ (C.cast_single (C.dict C.string C.variant) options)
+ | None ->
+ return ())
+ event);
+
+ fst (wait ())
+end