1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-24 02:03:54 +03:00

bus: convert a couple of calls over to new convenience functions

This commit is contained in:
Lennart Poettering 2013-04-05 14:49:45 +02:00
parent f10dda3b82
commit d4100e2444
2 changed files with 76 additions and 154 deletions

View File

@ -46,7 +46,7 @@ int sd_bus_get_unique_name(sd_bus *bus, const char **unique) {
} }
int sd_bus_request_name(sd_bus *bus, const char *name, int flags) { int sd_bus_request_name(sd_bus *bus, const char *name, int flags) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL; _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
uint32_t ret; uint32_t ret;
int r; int r;
@ -55,21 +55,17 @@ int sd_bus_request_name(sd_bus *bus, const char *name, int flags) {
if (!name) if (!name)
return -EINVAL; return -EINVAL;
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"RequestName", "RequestName",
&m); NULL,
if (r < 0) &reply,
return r; "su",
name,
r = sd_bus_message_append(m, "su", name, flags); flags);
if (r < 0)
return r;
r = sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
if (r < 0) if (r < 0)
return r; return r;
@ -81,7 +77,7 @@ int sd_bus_request_name(sd_bus *bus, const char *name, int flags) {
} }
int sd_bus_release_name(sd_bus *bus, const char *name) { int sd_bus_release_name(sd_bus *bus, const char *name) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL; _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
uint32_t ret; uint32_t ret;
int r; int r;
@ -90,21 +86,16 @@ int sd_bus_release_name(sd_bus *bus, const char *name) {
if (!name) if (!name)
return -EINVAL; return -EINVAL;
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"ReleaseName", "ReleaseName",
&m); NULL,
if (r < 0) &reply,
return r; "s",
name);
r = sd_bus_message_append(m, "s", name);
if (r < 0)
return r;
r = sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
if (r < 0) if (r < 0)
return r; return r;
@ -116,7 +107,7 @@ int sd_bus_release_name(sd_bus *bus, const char *name) {
} }
int sd_bus_list_names(sd_bus *bus, char ***l) { int sd_bus_list_names(sd_bus *bus, char ***l) {
_cleanup_bus_message_unref_ sd_bus_message *m1 = NULL, *reply1 = NULL, *m2 = NULL, *reply2 = NULL; _cleanup_bus_message_unref_ sd_bus_message *reply1 = NULL, *reply2 = NULL;
char **x = NULL; char **x = NULL;
int r; int r;
@ -125,31 +116,27 @@ int sd_bus_list_names(sd_bus *bus, char ***l) {
if (!l) if (!l)
return -EINVAL; return -EINVAL;
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"ListNames", "ListNames",
&m1); NULL,
&reply1,
NULL);
if (r < 0) if (r < 0)
return r; return r;
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"ListActivatableNames", "ListActivatableNames",
&m2); NULL,
if (r < 0) &reply2,
return r; NULL);
r = sd_bus_send_with_reply_and_block(bus, m1, 0, NULL, &reply1);
if (r < 0)
return r;
r = sd_bus_send_with_reply_and_block(bus, m2, 0, NULL, &reply2);
if (r < 0) if (r < 0)
return r; return r;
@ -170,7 +157,7 @@ int sd_bus_list_names(sd_bus *bus, char ***l) {
} }
int sd_bus_get_owner(sd_bus *bus, const char *name, char **owner) { int sd_bus_get_owner(sd_bus *bus, const char *name, char **owner) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL; _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
const char *found; const char *found;
int r; int r;
@ -179,21 +166,16 @@ int sd_bus_get_owner(sd_bus *bus, const char *name, char **owner) {
if (!name) if (!name)
return -EINVAL; return -EINVAL;
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"GetNameOwner", "GetNameOwner",
&m); NULL,
if (r < 0) &reply,
return r; "s",
name);
r = sd_bus_message_append(m, "s", name);
if (r < 0)
return r;
r = sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
if (r < 0) if (r < 0)
return r; return r;
@ -215,7 +197,7 @@ int sd_bus_get_owner(sd_bus *bus, const char *name, char **owner) {
} }
int sd_bus_get_owner_uid(sd_bus *bus, const char *name, uid_t *uid) { int sd_bus_get_owner_uid(sd_bus *bus, const char *name, uid_t *uid) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL; _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
uint32_t u; uint32_t u;
int r; int r;
@ -226,21 +208,16 @@ int sd_bus_get_owner_uid(sd_bus *bus, const char *name, uid_t *uid) {
if (!uid) if (!uid)
return -EINVAL; return -EINVAL;
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"GetConnectionUnixUser", "GetConnectionUnixUser",
&m); NULL,
if (r < 0) &reply,
return r; "s",
name);
r = sd_bus_message_append(m, "s", name);
if (r < 0)
return r;
r = sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
if (r < 0) if (r < 0)
return r; return r;
@ -253,7 +230,7 @@ int sd_bus_get_owner_uid(sd_bus *bus, const char *name, uid_t *uid) {
} }
int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid) { int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL; _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
uint32_t u; uint32_t u;
int r; int r;
@ -264,21 +241,16 @@ int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid) {
if (!pid) if (!pid)
return -EINVAL; return -EINVAL;
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"GetConnectionUnixProcessID", "GetConnectionUnixProcessID",
&m); NULL,
if (r < 0) &reply,
return r; "s",
name);
r = sd_bus_message_append(m, "s", name);
if (r < 0)
return r;
r = sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
if (r < 0) if (r < 0)
return r; return r;
@ -294,49 +266,33 @@ int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid) {
} }
int bus_add_match_internal(sd_bus *bus, const char *match) { int bus_add_match_internal(sd_bus *bus, const char *match) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
int r;
assert(bus); assert(bus);
assert(match); assert(match);
r = sd_bus_message_new_method_call( return sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"AddMatch", "AddMatch",
&m); NULL,
if (r < 0) NULL,
return r; "s",
match);
r = sd_bus_message_append(m, "s", match);
if (r < 0)
return r;
return sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
} }
int bus_remove_match_internal(sd_bus *bus, const char *match) { int bus_remove_match_internal(sd_bus *bus, const char *match) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
int r;
assert(bus); assert(bus);
assert(match); assert(match);
r = sd_bus_message_new_method_call( return sd_bus_call_method(
bus, bus,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"/", "/",
"org.freedesktop.DBus", "org.freedesktop.DBus",
"RemoveMatch", "RemoveMatch",
&m); NULL,
if (r < 0) NULL,
return r; "s",
match);
r = sd_bus_message_append(m, "s", match);
if (r < 0)
return r;
return sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
} }

View File

@ -53,13 +53,7 @@ static int object_callback(sd_bus *bus, int error, sd_bus_message *m, void *user
log_info("Invoked Foobar() on %s", sd_bus_message_get_path(m)); log_info("Invoked Foobar() on %s", sd_bus_message_get_path(m));
r = sd_bus_message_new_method_return(bus, m, &reply); r = sd_bus_reply_method_return(bus, m, NULL);
if (r < 0) {
log_error("Failed to allocate return: %s", strerror(-r));
return r;
}
r = sd_bus_send(bus, reply, NULL);
if (r < 0) { if (r < 0) {
log_error("Failed to send reply: %s", strerror(-r)); log_error("Failed to send reply: %s", strerror(-r));
return r; return r;
@ -142,7 +136,7 @@ static int server(sd_bus *bus) {
bool client1_gone = false, client2_gone = false; bool client1_gone = false, client2_gone = false;
while (!client1_gone || !client2_gone) { while (!client1_gone || !client2_gone) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL; _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
pid_t pid = 0; pid_t pid = 0;
r = sd_bus_process(bus, &m); r = sd_bus_process(bus, &m);
@ -179,12 +173,6 @@ static int server(sd_bus *bus) {
goto fail; goto fail;
} }
r = sd_bus_message_new_method_return(bus, m, &reply);
if (r < 0) {
log_error("Failed to allocate return: %s", strerror(-r));
goto fail;
}
lowercase = strdup(hello); lowercase = strdup(hello);
if (!lowercase) { if (!lowercase) {
r = log_oom(); r = log_oom();
@ -193,34 +181,34 @@ static int server(sd_bus *bus) {
ascii_strlower(lowercase); ascii_strlower(lowercase);
r = sd_bus_message_append(reply, "s", lowercase); r = sd_bus_reply_method_return(bus, m, "s", lowercase);
if (r < 0) { if (r < 0) {
log_error("Failed to append message: %s", strerror(-r)); log_error("Failed to send reply: %s", strerror(-r));
goto fail; goto fail;
} }
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "ExitClient1")) { } else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "ExitClient1")) {
r = sd_bus_message_new_method_return(bus, m, &reply); r = sd_bus_reply_method_return(bus, m, NULL);
if (r < 0) { if (r < 0) {
log_error("Failed to allocate return: %s", strerror(-r)); log_error("Failed to send reply: %s", strerror(-r));
goto fail; goto fail;
} }
client1_gone = true; client1_gone = true;
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "ExitClient2")) { } else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "ExitClient2")) {
r = sd_bus_message_new_method_return(bus, m, &reply); r = sd_bus_reply_method_return(bus, m, NULL);
if (r < 0) { if (r < 0) {
log_error("Failed to allocate return: %s", strerror(-r)); log_error("Failed to send reply: %s", strerror(-r));
goto fail; goto fail;
} }
client2_gone = true; client2_gone = true;
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "Slow")) { } else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "Slow")) {
r = sd_bus_message_new_method_return(bus, m, &reply); r = sd_bus_reply_method_return(bus, m, NULL);
if (r < 0) { if (r < 0) {
log_error("Failed to allocate return: %s", strerror(-r)); log_error("Failed to send reply: %s", strerror(-r));
goto fail; goto fail;
} }
@ -244,34 +232,21 @@ static int server(sd_bus *bus) {
close_nointr_nofail(fd); close_nointr_nofail(fd);
r = sd_bus_message_new_method_return(bus, m, &reply); r = sd_bus_reply_method_return(bus, m, NULL);
if (r < 0) {
log_error("Failed to allocate return: %s", strerror(-r));
goto fail;
}
} else if (sd_bus_message_is_method_call(m, NULL, NULL)) {
r = sd_bus_message_new_method_error(
bus, m,
&SD_BUS_ERROR_MAKE("org.freedesktop.DBus.Error.UnknownMethod", "Unknown method."),
&reply);
if (r < 0) {
log_error("Failed to allocate return: %s", strerror(-r));
goto fail;
}
}
if (reply) {
r = sd_bus_send(bus, reply, NULL);
if (r < 0) { if (r < 0) {
log_error("Failed to send reply: %s", strerror(-r)); log_error("Failed to send reply: %s", strerror(-r));
goto fail; goto fail;
} }
/* log_info("Sent"); */ } else if (sd_bus_message_is_method_call(m, NULL, NULL)) {
/* bus_message_dump(reply); */
/* sd_bus_message_rewind(reply, true); */ r = sd_bus_reply_method_error(
bus, m,
&SD_BUS_ERROR_MAKE("org.freedesktop.DBus.Error.UnknownMethod", "Unknown method."));
if (r < 0) {
log_error("Failed to send reply: %s", strerror(-r));
goto fail;
}
} }
} }
@ -301,27 +276,18 @@ static void* client1(void*p) {
goto finish; goto finish;
} }
r = sd_bus_message_new_method_call( r = sd_bus_call_method(
bus, bus,
"org.freedesktop.systemd.test", "org.freedesktop.systemd.test",
"/", "/",
"org.freedesktop.systemd.test", "org.freedesktop.systemd.test",
"LowerCase", "LowerCase",
&m); &error,
&reply,
"s",
"HELLO");
if (r < 0) { if (r < 0) {
log_error("Failed to allocate method call: %s", strerror(-r)); log_error("Failed to issue method call: %s", strerror(-r));
goto finish;
}
r = sd_bus_message_append(m, "s", "HELLO");
if (r < 0) {
log_error("Failed to append string: %s", strerror(-r));
goto finish;
}
r = sd_bus_send_with_reply_and_block(bus, m, 0, &error, &reply);
if (r < 0) {
log_error("Failed to issue method call: %s", bus_error_message(&error, -r));
goto finish; goto finish;
} }