El 21/08/07, Ramona Modroiu ramona@openser.org escribió:
Iñaki Baz Castillo wrote:
Vaya, no había caído yo en la cuenta de que también se pueden aplicar expresiones regulares sin AVP's.
Por cierto, de cara a la eficiencia ¿existe alguna diferencia entre usar AVPs de texto y variables? Quiero decir, ¿qué es más costoso computacionalmente?:
a) $avp(s:texto) = "XXXXXXXX"; if ( avp_check("$avp(s:texto)", "re/^xxx[0-8]$/i") ) { ...
b) $var(texto) = "XXXXXXXX"; if ( $var(texto) =~" ^XXX") { ...
¿O tal vez sean igual de eficientes?
La variante b) es mas eficiente. Las variables suponen referencia directa a la memoria privada. Sobre los AVPs ... hay una lista de AVPs en la memoria compartida y significa mas busqueda dentro de esa lista.
avp_check() te hace falta si hay mas de un avp y quieres verificar las todas. En el ejemplo anterior vale escribir if($avp(s:texto)) =~"^XXX") {....}.
En caso de que sean igualmente costosas: ¿qué sentido tienen entonces los AVP's de texto existiendo variables (las cuáles son más "digestibles")?
Las variables viven dentro de un proceso. Las AVPs viven dentro de una transaccion ... estan accesible dentro de la failure_route donde hay otro proceso que el que habia procesado el mensaje original. Tambien, las AVPs permiten valores multiples.
Te agradezco enormemente tan buena explicación, ya que además creo que lo que me has explicado no viene documentado en ninguna parte.
Un saludo y de nuevo muchas gracias :)