improve error messages

Send create_object error messages to the new resource id so that
the client can better know what proxy is failing.
Use resource_remove when create_object fails because the core will
already send a remove_id on failure.
Try to send other errors to the proxy that made the request if
possible.
This commit is contained in:
Wim Taymans 2020-02-25 16:38:13 +01:00
parent b96daabb2f
commit 65d72bb87c
9 changed files with 40 additions and 33 deletions

View file

@ -200,7 +200,7 @@ process_messages(struct client_data *data)
required = demarshal[msg->opcode].permissions | PW_PERM_X;
if ((required & permissions) != required) {
pw_resource_errorf(resource,
pw_resource_errorf_id(resource, msg->id,
-EACCES, "no permission to call method %u on %u (requires %08x, have %08x)",
msg->opcode, msg->id, required, permissions);
continue;
@ -215,17 +215,18 @@ done:
return res;
invalid_method:
pw_resource_errorf(resource, res, "invalid method id:%u op:%u",
pw_resource_errorf_id(resource, msg->id, res, "invalid method id:%u op:%u",
msg->id, msg->opcode);
goto done;
invalid_message:
pw_resource_errorf(resource, res, "invalid message received id:%u op:%u (%s)",
pw_resource_errorf_id(resource, msg->id, res, "invalid message id:%u op:%u (%s)",
msg->id, msg->opcode, spa_strerror(res));
debug_msg("*invalid message*", msg, true);
goto done;
error:
pw_resource_errorf(client->core_resource, res, "client error %d (%s)",
res, spa_strerror(res));
if (client->core_resource)
pw_resource_errorf(client->core_resource, res, "client error %d (%s)",
res, spa_strerror(res));
goto done;
}