[pulseaudio-discuss] [PATCH v6 05/37] raop: Parse server capabilities on discovery

Hajime Fujita crisp.fujita at nifty.com
Wed Feb 10 05:55:07 UTC 2016


Arun Raghavan wrote:
> On Sun, 2016-01-31 at 22:16 -0600, Hajime Fujita wrote:
>> From: Martin Blanchard <tinram at gmx.fr>
>>
>> During the discovery phase, raop servers send theirs capabilities
>> (supported encryption, audio codec...). These should be passed to the
>> raop sink via module's arguments.
>> ---
>>  src/modules/raop/module-raop-discover.c | 100
>> ++++++++++++++++++++++++++++----
>>  1 file changed, 90 insertions(+), 10 deletions(-)
>>
>> diff --git a/src/modules/raop/module-raop-discover.c
>> b/src/modules/raop/module-raop-discover.c
>> index 1ced777..f174da3 100644
>> --- a/src/modules/raop/module-raop-discover.c
>> +++ b/src/modules/raop/module-raop-discover.c
>> @@ -138,7 +138,10 @@ static void resolver_cb(
>>          void *userdata) {
>>      struct userdata *u = userdata;
>>      struct tunnel *tnl;
>> -    char *device = NULL, *nicename, *dname, *vname, *args;
>> +    char *nicename, *dname, *vname, *args;
>> +    char *tp = NULL, *et = NULL, *cn = NULL;
>> +    char *ch = NULL, *ss = NULL, *sr = NULL;
>> +    char *t = NULL;
>>      char at[AVAHI_ADDRESS_STR_MAX];
>>      AvahiStringList *l;
>>      pa_module *m;
>> @@ -166,8 +169,54 @@ static void resolver_cb(
>>          pa_assert_se(avahi_string_list_get_pair(l, &key, &value,
>> NULL) == 0);
>>  
>>          pa_log_debug("Found key: '%s' with value: '%s'", key,
>> value);
>> -        if (pa_streq(key, "device")) {
>> -            device = value;
> 
> Is there a reason the device is dropped here. Ideally this should be a
> separate commit, but for now, if we have a reason we can put in the
> commit message, that'd be fine too.

Hmm actually I'm not sure why device was dropped here.
At least I'll make it a separate patch.


Thanks,
Hajime

> 
> -- Arun
> 
>> +
>> +        if (pa_streq(key, "tp")) {
>> +            /* Transport protocol:
>> +             *  - TCP = only TCP,
>> +             *  - UDP = only UDP,
>> +             *  - TCP,UDP = both supported (UDP should be prefered)
>> */
>> +             if (pa_str_in_list(value, ",", "UDP"))
>> +                 tp = strdup("UDP");
>> +            else if (pa_str_in_list(value, ",", "TCP"))
>> +                tp = strdup("TCP");
>> +            else
>> +                tp = strdup(value);
>> +        } else if (pa_streq(key, "et")) {
>> +            /* Supported encryption types:
>> +             *  - 0 = none,
>> +             *  - 1 = RSA,
>> +             *  - 2 = FairPlay,
>> +             *  - 3 = MFiSAP,
>> +             *  - 4 = FairPlay SAPv2.5. */
>> +             if (pa_str_in_list(value, ",", "1"))
>> +                 et = strdup("RSA");
>> +             else
>> +                 et = strdup("none");
>> +        } else if (pa_streq(key, "cn")) {
>> +            /* Suported audio codecs:
>> +             *  - 0 = PCM,
>> +             *  - 1 = ALAC,
>> +             *  - 2 = AAC,
>> +             *  - 3 = AAC ELD. */
>> +            cn = strdup("PCM");
>> +        } else if (pa_streq(key, "md")) {
>> +            /* Supported metadata types:
>> +             *  - 0 = text,
>> +             *  - 1 = artwork,
>> +             *  - 2 = progress. */
>> +        } else if (pa_streq(key, "pw")) {
>> +            /* Requires password ? (true/false) */
>> +        } else if (pa_streq(key, "ch")) {
>> +            /* Number of channels */
>> +            ch = value;
>> +            value = NULL;
>> +        } else if (pa_streq(key, "ss")) {
>> +            /* Sample size */
>> +            ss = value;
>> +            value = NULL;
>> +        } else if (pa_streq(key, "sr")) {
>> +            /* Sample rate */
>> +            sr = value;
>>              value = NULL;
>>          }
>>  
>> @@ -175,19 +224,13 @@ static void resolver_cb(
>>          avahi_free(value);
>>      }
>>  
>> -    if (device)
>> -        dname = pa_sprintf_malloc("raop.%s.%s", host_name, device);
>> -    else
>> -        dname = pa_sprintf_malloc("raop.%s", host_name);
>> -
>> +    dname = pa_sprintf_malloc("raop_output.%s", host_name);
>>      if (!(vname = pa_namereg_make_valid_name(dname))) {
>>          pa_log("Cannot construct valid device name from '%s'.",
>> dname);
>> -        avahi_free(device);
>>          pa_xfree(dname);
>>          goto finish;
>>      }
>>  
>> -    avahi_free(device);
>>      pa_xfree(dname);
>>  
>>      if (nicename) {
>> @@ -205,6 +248,43 @@ static void resolver_cb(
>>                                   vname);
>>      }
>>  
>> +    if (tp != NULL) {
>> +        t = args;
>> +        args = pa_sprintf_malloc("%s protocol=%s", args, tp);
>> +        avahi_free(tp);
>> +        pa_xfree(t);
>> +    }
>> +    if (et != NULL) {
>> +        t = args;
>> +        args = pa_sprintf_malloc("%s encryption=%s", args, et);
>> +        pa_xfree(et);
>> +        pa_xfree(t);
>> +    }
>> +    if (cn != NULL) {
>> +        t = args;
>> +        args = pa_sprintf_malloc("%s codec=%s", args, cn);
>> +        pa_xfree(cn);
>> +        pa_xfree(t);
>> +    }
>> +    if (ch != NULL) {
>> +        t = args;
>> +        args = pa_sprintf_malloc("%s channels=%s", args, ch);
>> +        avahi_free(ch);
>> +        pa_xfree(t);
>> +    }
>> +    if (ss != NULL) {
>> +        t = args;
>> +        args = pa_sprintf_malloc("%s format=%s", args, ss);
>> +        avahi_free(ss);
>> +        pa_xfree(t);
>> +    }
>> +    if (sr != NULL) {
>> +        t = args;
>> +        args = pa_sprintf_malloc("%s rate=%s", args, sr);
>> +        avahi_free(sr);
>> +        pa_xfree(t);
>> +    }
>> +
>>      pa_log_debug("Loading module-raop-sink with arguments '%s'",
>> args);
>>  
>>      if ((m = pa_module_load(u->core, "module-raop-sink", args))) {
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
> 



More information about the pulseaudio-discuss mailing list