mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-06 06:48:07 +02:00
dispatcher: refactor building the result
Introduce request_dbus_method_return() and call it whenever we need to return a result. Don't collect the list of scripts in case the parameters can't be parsed.
This commit is contained in:
parent
98b73e88e6
commit
703efdfbbf
1 changed files with 42 additions and 39 deletions
|
|
@ -280,28 +280,12 @@ next_request(Request *request)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* complete_request:
|
|
||||||
* @request: the request
|
|
||||||
*
|
|
||||||
* Checks if all the scripts for the request have terminated and in such case
|
|
||||||
* it sends the D-Bus response and releases the request resources.
|
|
||||||
*
|
|
||||||
* It also decreases @num_requests_pending and possibly does _idle_timeout_restart().
|
|
||||||
*/
|
|
||||||
static void
|
static void
|
||||||
complete_request(Request *request)
|
request_dbus_method_return(Request *request)
|
||||||
{
|
{
|
||||||
GVariantBuilder results;
|
GVariantBuilder results;
|
||||||
GVariant *ret;
|
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
nm_assert(request);
|
|
||||||
|
|
||||||
/* Are there still pending scripts? Then do nothing (for now). */
|
|
||||||
if (request->num_scripts_done < request->scripts->len)
|
|
||||||
return;
|
|
||||||
|
|
||||||
g_variant_builder_init(&results, G_VARIANT_TYPE("a(sus)"));
|
g_variant_builder_init(&results, G_VARIANT_TYPE("a(sus)"));
|
||||||
for (i = 0; i < request->scripts->len; i++) {
|
for (i = 0; i < request->scripts->len; i++) {
|
||||||
ScriptInfo *script = g_ptr_array_index(request->scripts, i);
|
ScriptInfo *script = g_ptr_array_index(request->scripts, i);
|
||||||
|
|
@ -313,8 +297,28 @@ complete_request(Request *request)
|
||||||
script->error ?: "");
|
script->error ?: "");
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = g_variant_new("(a(sus))", &results);
|
g_dbus_method_invocation_return_value(request->context, g_variant_new("(a(sus))", &results));
|
||||||
g_dbus_method_invocation_return_value(request->context, ret);
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* complete_request:
|
||||||
|
* @request: the request
|
||||||
|
*
|
||||||
|
* Checks if all the scripts for the request have terminated and in such case
|
||||||
|
* it sends the D-Bus response and releases the request resources.
|
||||||
|
*
|
||||||
|
* It also decreases @num_requests_pending and possibly does _idle_timeout_restart().
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
complete_request(Request *request)
|
||||||
|
{
|
||||||
|
nm_assert(request);
|
||||||
|
|
||||||
|
/* Are there still pending scripts? Then do nothing (for now). */
|
||||||
|
if (request->num_scripts_done < request->scripts->len)
|
||||||
|
return;
|
||||||
|
|
||||||
|
request_dbus_method_return(request);
|
||||||
|
|
||||||
_LOG_R_T(request, "completed (%u scripts)", request->scripts->len);
|
_LOG_R_T(request, "completed (%u scripts)", request->scripts->len);
|
||||||
|
|
||||||
|
|
@ -785,36 +789,35 @@ _handle_action(GDBusMethodInvocation *invocation, GVariant *parameters)
|
||||||
&request->iface,
|
&request->iface,
|
||||||
&error_message);
|
&error_message);
|
||||||
|
|
||||||
request->scripts = g_ptr_array_new_full(5, script_info_free);
|
if (!error_message) {
|
||||||
|
request->scripts = g_ptr_array_new_full(5, script_info_free);
|
||||||
|
|
||||||
sorted_scripts = find_scripts(request);
|
sorted_scripts = find_scripts(request);
|
||||||
for (iter = sorted_scripts; iter; iter = g_slist_next(iter)) {
|
for (iter = sorted_scripts; iter; iter = g_slist_next(iter)) {
|
||||||
ScriptInfo *s;
|
ScriptInfo *s;
|
||||||
|
|
||||||
s = g_slice_new0(ScriptInfo);
|
s = g_slice_new0(ScriptInfo);
|
||||||
s->request = request;
|
s->request = request;
|
||||||
s->script = iter->data;
|
s->script = iter->data;
|
||||||
s->wait = script_must_wait(s->script);
|
s->wait = script_must_wait(s->script);
|
||||||
g_ptr_array_add(request->scripts, s);
|
g_ptr_array_add(request->scripts, s);
|
||||||
}
|
}
|
||||||
g_slist_free(sorted_scripts);
|
g_slist_free(sorted_scripts);
|
||||||
|
|
||||||
_LOG_R_D(request, "new request (%u scripts)", request->scripts->len);
|
_LOG_R_D(request, "new request (%u scripts)", request->scripts->len);
|
||||||
if (_LOG_R_T_enabled(request) && request->envp) {
|
if (_LOG_R_T_enabled(request) && request->envp) {
|
||||||
for (p = request->envp; *p; p++)
|
for (p = request->envp; *p; p++)
|
||||||
_LOG_R_T(request, "environment: %s", *p);
|
_LOG_R_T(request, "environment: %s", *p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error_message || request->scripts->len == 0) {
|
if (request->scripts->len == 0) {
|
||||||
GVariant *results;
|
|
||||||
|
|
||||||
if (error_message)
|
if (error_message)
|
||||||
_LOG_R_W(request, "completed: invalid request: %s", error_message);
|
_LOG_R_W(request, "completed: invalid request: %s", error_message);
|
||||||
else
|
else
|
||||||
_LOG_R_D(request, "completed: no scripts");
|
_LOG_R_D(request, "completed: no scripts");
|
||||||
|
|
||||||
results = g_variant_new_array(G_VARIANT_TYPE("(sus)"), NULL, 0);
|
request_dbus_method_return(request);
|
||||||
g_dbus_method_invocation_return_value(invocation, g_variant_new("(@a(sus))", results));
|
|
||||||
request->num_scripts_done = request->scripts->len;
|
request->num_scripts_done = request->scripts->len;
|
||||||
request_free(request);
|
request_free(request);
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue