No subject
Fri Sep 2 03:59:05 CDT 2011
h sensitive to case and insensitive to case has got to be unexpected. The =
proposal is to make it consistent - which probably means matching the docum=
entation on wiki.asterisk.org and making it case sensitive. If done in 1.8=
, this needs to be noted in the UPGRADE file.
At the minimum, the would entail making the code in ast_str_retrieve_variab=
le should be made to be case sensitive:
{noformat}
=09/* if not found, look into chanvars or global vars */
=09for (i =3D 0; s =3D=3D ¬_found && i < ARRAY_LEN(places); i++) {
=09=09struct ast_var_t *variables;
=09=09if (!places[i])
=09=09=09continue;
=09=09if (places[i] =3D=3D &globals)
=09=09=09ast_rwlock_rdlock(&globalslock);
=09=09AST_LIST_TRAVERSE(places[i], variables, entries) {
=09=09=09if (!strcasecmp(ast_var_name(variables), var)) {
=09=09=09=09s =3D ast_var_value(variables);
=09=09=09=09break;
=09=09=09}
=09=09}
=09=09if (places[i] =3D=3D &globals)
=09=09=09ast_rwlock_unlock(&globalslock);
=09}
{noformat}
There are potentially other areas where variables are evaluated however, an=
d all of those should be checked.
was:
We were all a little taken aback by this one.
Variables are documented on wiki.asterisk.org as being case sensitive. Som=
e ancient documentation on voip-info makes the following note:
"A variable name may be any alphanumeric string beginning with a letter. Us=
er-defined variable names are not case sensitive =E2=80=94 ${FOO} and ${Foo=
} refer to the same variable =E2=80=94 but Asterisk-defined variables are c=
ase-sensitive =E2=80=94 ${EXTEN} works, but ${exten} doesn't."
That seems... odd? And yet, it is somewhat accidentally correct, per the c=
urrent implementation. Consider a user defined variable "FOO". Evaluating=
${Foo} will yield the same value as evaluating ${FOO}. So will ${FoO}. T=
his works for both channel variables, as well as global variables.
On the other hand, if that variable is something known to an application or=
is evaluated outside of dialplan execution, then that variable is treated =
as case sensitive. So if a user sets variable ${MiXMONITOR_FILENAME}, the =
MixMonitor application won't see anything in that variable. If a user late=
r checks variable ${MIXMONITOR_FILENAME} in the dialplan, it will evaluate =
to the same variable name as ${MiXMONITOR_FILENAME}.
More information about the asterisk-bugs
mailing list