let remove_node name =
(* Remove child nodes as well. *)
- debug "Removing node \"%s\" and its children...\n%!" name;
+ debug "Removing node %S and its children..." name;
apis := List.filter (fun (n, _) -> not (String.startswith name n)) !apis
- let dispatch_get req node prop =
- let rval = (fst prop) req in
- match rval with
- | None -> ()
- | Some v ->
- let resp = DBus.Message.new_method_return req in
- DBus.Message.append resp [ v ];
- send_msg resp
-
- let dispatch_set req node prop to_val =
- let rval = (snd prop) req to_val in
- match rval with
- | None -> ()
- | Some v ->
- (* Send an empty Ack message. *)
- let resp = DBus.Message.new_method_return req in
- send_msg resp
-
let dispatch_getall req node props =
- let pvals, send_resp =
- List.fold_left (fun ((pvals, send_resp) as acc) prop ->
- if send_resp then
- match (fst prop) req with
- | None -> pvals, false
- | Some v -> (v :: pvals), true
- else
- acc
- ) ([], true) props
- in
- if send_resp then
- let resp = DBus.Message.new_method_return req in
- DBus.Message.append resp (List.rev pvals);
- send_msg resp
+ match Property.dispatch_getall node.properties props with
+ | Left ((err_name, err_msg, err_args) :: _) ->
+ send_error req err_name ~err_args err_msg
+ | Left [] ->
+ (* We should always have at least one error in error cases. *)
+ assert false
+ | Right rvals ->
+ send_response req rvals
+
+ let dispatch_setall req node prop_args =
+ match Property.dispatch_setall node.properties prop_args with
+ | Left ((err_name, err_msg, err_args) :: _) ->
+ send_error req err_name ~err_args err_msg
+ | Left [] ->
+ (* We should always have at least one error in error cases. *)
+ assert false
+ | Right rvals ->
+ send_response req rvals
let dispatch_property_interface req node m =
- let send_unknown_property_error pname =
- send_error req DBus.ERR_FAILED pname in
let send_invalid_property_arg_error () =
send_error req DBus.ERR_FAILED "Unexpected arg(s)" in
let send_unknown_method () =