El Jueves, 7 de Mayo de 2009, Saúl Ibarra escribió:
Aupa ibc!
Porque es mas eficiente? En tu ejemplo haces 2 comparaciones y una operacion logica y ella solo hace una comparacion, no? Se me escapa algo?
Sí, me explico:
if ( $fd == "192.168.9.52" && $fU =~ "^1[0-9]+" )
Primero se hace una comprobación: $fd == "192.168.9.52"
Ésta es una comparación de igualdad "==" que siempre será más rápida que una comparación de expresión regular. Además, es muy muy posible que la mayor parte de los requests que lleguen no tenga From domain "192.168.9.52". Y si no se cumple la primera condición, no se hace la segunda (la de la expresión regular). Es decir, no es que mi sugerencia sea más rápida cuando el From coincide (que posiblemente sea incluso algo más lenta), sino que es más eficiente cuando el From no coincide (que entiendo será la mayor parte de las veces).
Por otra parte, la expresión que Laura proponía era:
if (from_uri=="sip:1[0-9]*@192.168.9.52")
Si el request lleva un From un poco puñetero (pero perfectamente válido) como:
From: SIP:123232323@192.168.9.52
entonces la expresión regular fallaría porque "SIP" aparece en minúsculas. Una solución es poner ls "i" de "case insensitive", lo que hace la comprobación más lenta, pero ¿para qué hacer eso si lo único que queremos comparar es el username (numérico) y el domain (una IP)?