]> xenbits.xen.org Git - xenclient/toolstack.git/commitdiff
add a xenvm check function that known how to check on dbus too.
authorVincent Hanquez <vincent.hanquez@eu.citrix.com>
Mon, 17 Aug 2009 12:11:18 +0000 (13:11 +0100)
committerVincent Hanquez <vincent.hanquez@eu.citrix.com>
Mon, 17 Aug 2009 12:11:18 +0000 (13:11 +0100)
xenvm/xenvmlib.ml

index 29158310642612e3c5e1c8c5c503e458f557faa1..57a95ec5d22261ea5dadbe24e2cff9fc03e1647e 100644 (file)
@@ -145,13 +145,28 @@ let request ?timeout id query =
                send_query ?timeout fd query;
                recv_resp ?timeout fd
        ) (fun () -> Unix.close fd)
+
+let check ?timeout id =
+       try
+               let reply = request ?timeout id ("status", []) in
+               begin match reply with
+               | Msg _ -> ()
+               | _     -> ()
+               end;
+               true
+       with Connect_refused s ->
+               false
+
 end
 
 module Bus = struct
 
-let request ?timeout id query =
+let connect () =
        let using_session = try bool_of_string (Sys.getenv "XENVMLIB_DBUS_SESSION") with _ -> false in
-       let bus = DBus.Bus.get (if using_session then DBus.Bus.Session else DBus.Bus.System) in
+       DBus.Bus.get (if using_session then DBus.Bus.Session else DBus.Bus.System)
+
+let request ?timeout id query =
+       let bus = connect () in
        let timeout = match timeout with None -> 0 | Some t -> int_of_float (t *. 1000.) in
 
        let intf = Printf.sprintf "org.xen.vm.%s" (String.replace "-" "_" id) in
@@ -170,6 +185,10 @@ let request ?timeout id query =
        | DBus.Message.Method_return, [ DBus.String s ] -> Msg s
        | _                          -> assert false
 
+let check ?timeout id =
+       let bus = connect () in
+       let intf = Printf.sprintf "org.xen.vm.%s" (String.replace "-" "_" id) in
+       DBus.Bus.has_owner bus intf
 end
 
 let request ?(using_socket=false) ?timeout id query =
@@ -177,6 +196,11 @@ let request ?(using_socket=false) ?timeout id query =
        then Socket.request ?timeout id query
        else Bus.request ?timeout id query
 
+let check ?(using_socket=false) ?timeout id =
+       if using_socket
+       then Socket.check ?timeout id
+       else Bus.check ?timeout id
+
 let code_ping = 0x0000
 let code_hup = 0x0001
 let code_error = 0x0002