[pulseaudio-discuss] [PATCH 4/5] core: add message handler

Georg Chini georg at chini.tk
Thu Jan 11 18:06:12 UTC 2018


On 11.01.2018 16:28, Tanu Kaskinen wrote:
> On Sun, 2017-10-29 at 20:51 +0100, Georg Chini wrote:
>> This patch adds a small message handler to the core which enables
>> clients to list available handlers via the list-handlers message.
>> Command: pacmd send-message /core list-handlers
>> pactl can be used with the same parameters.
>>
>> The patch also introduces a convention for the return string.
>> It consists of a list of elements where curly braces are used
>> to separate elements. Each element can itself contain further
>> elements. For example consider a message that returns multiple
>> elements which each contain an integer and an array of float.
>> A response string would look like that:
>> {{Integer} {{1st float} {2nd float} ...}}{...}
>> ---
>>   doc/messaging_api.txt           | 20 +++++++++++++------
>>   src/pulsecore/core.c            | 43 +++++++++++++++++++++++++++++++++++++++++
>>   src/pulsecore/message-handler.c | 24 +++++++++++++++++++++++
>>   3 files changed, 81 insertions(+), 6 deletions(-)
>>
>> diff --git a/doc/messaging_api.txt b/doc/messaging_api.txt
>> index 11835cda..85a56d84 100644
>> --- a/doc/messaging_api.txt
>> +++ b/doc/messaging_api.txt
>> @@ -7,10 +7,18 @@ and a message command, both specified as strings. Additional parameters can
>>   be specified using a single string, but are not mandatory. The message handler
>>   returns an error number as defined in def.h and may also return a string in
>>   the "response" variable. If "response" is NULL, this should be treated like
>> -an empty string. The following reference lists available messages, their
>> -parameters and return values.
>> +an empty string. It it is not NULL, it consists of a list of elements. Curly
>> +braces are used to separate elements. Each element can itself contain further
>> +elements. For example consider a message that returns multiple elements which
>> +each contain an integer and an array of float. A response string would look
>> +like that:
>> +{{Integer} {{1st float} {2nd float} ...}}{...}
> As discussed earlier, escaping curly braces in strings should be
> defined and supported already in the first version.

I have a (still unsubmitted) patch which applies on top of the
messaging/signal patches which introduces escaping. Is that
OK for you? I would submit it immediately when the other
patches are pushed. Or do you want it in this patch?

>
> The use of whitespace needs to be defined in detail too. What
> characters are considered whitespace? Is the use of whitespace
> mandatory, and are there rules about the amount of whitespace?

Basically everything which is not enclosed in {} will be ignored.
I'll add that to the description.
(This could - if necessary - in the future be used to add a name
and a type to a field like {name.type{...} name.type{...} ...}
without breaking older parsing that does not expect such
information)

>
>> +/* Check if a string does not contain control characters. Currently these are
>> + * only "{" and "}". */
>> +static bool string_is_valid(const char *test_string) {
>> +    uint32_t i;
>> +
>> +    for (i = 0; i < strlen(test_string); i++) {
> This potentially calls strlen() once per character. Check
> test_string[i] instead.
>
> This function is probably not needed anyway once you add escaping
> support, though.
>
It's still needed to check the handler name.



More information about the pulseaudio-discuss mailing list