Hola, tengo problemas utilizando opensips y expresiones regulares. Puede que sea problema de las expresiones regulares pero antes de usarlas he leido manuales pero no me ha ayudado mucho, ya que no hay manera de que funcione. No habrá que habilitar algún modulo en opensips para que trabaje con ellas?
Lo que quiero hacer es que la uri de fuente coincida con cualquier valor que empiece por sip:1 seguido por varios dígitos del 0 al 9 y que termine con @192.168.9.52. Para ello he probado varias cosas:
if (from_uri=="sip:1[0-9]*@192.168.9.52") if (from_uri=="^sip:1[0-9]*@192.168.9.52$") if (from_uri=="^sip:1[0-9]*@192.168.9.52")
Y algunas otras pero ninguna funciona.
Gracias
El día 7 de mayo de 2009 18:55, Laura10 leboillos@hotmail.com escribió:
Hola, tengo problemas utilizando opensips y expresiones regulares. Puede que sea problema de las expresiones regulares pero antes de usarlas he leido manuales pero no me ha ayudado mucho, ya que no hay manera de que funcione. No habrá que habilitar algún modulo en opensips para que trabaje con ellas?
Lo que quiero hacer es que la uri de fuente coincida con cualquier valor que empiece por sip:1 seguido por varios dígitos del 0 al 9 y que termine con @192.168.9.52. Para ello he probado varias cosas:
if (from_uri=="sip:1[0-9]*@192.168.9.52") if (from_uri=="^sip:1[0-9]*@192.168.9.52$") if (from_uri=="^sip:1[0-9]*@192.168.9.52")
Y algunas otras pero ninguna funciona.
"==" compara dos cadenas (igualdad) "=~" compara una cadena con una expresión regular.
Y tú estabas usando "==" ;)
De todas formas, yo lo haría así (es más eficiente):
if ( $fd == "192.168.9.52" && $fU =~ "^1[0-9]+" )
Saludos.
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?
El 7/05/09, Iñaki Baz Castillo ibc@aliax.net escribió:
El día 7 de mayo de 2009 18:55, Laura10 leboillos@hotmail.com escribió:
Hola, tengo problemas utilizando opensips y expresiones regulares. Puede que sea problema de las expresiones regulares pero antes de usarlas he leido manuales pero no me ha ayudado mucho, ya que no hay manera de que funcione. No habrá que habilitar algún modulo en opensips para que trabaje con ellas?
Lo que quiero hacer es que la uri de fuente coincida con cualquier valor que empiece por sip:1 seguido por varios dígitos del 0 al 9 y que termine con @192.168.9.52. Para ello he probado varias cosas:
if (from_uri=="sip:1[0-9]*@192.168.9.52") if (from_uri=="^sip:1[0-9]*@192.168.9.52$") if (from_uri=="^sip:1[0-9]*@192.168.9.52")
Y algunas otras pero ninguna funciona.
"==" compara dos cadenas (igualdad) "=~" compara una cadena con una expresión regular.
Y tú estabas usando "==" ;)
De todas formas, yo lo haría así (es más eficiente):
if ( $fd == "192.168.9.52" && $fU =~ "^1[0-9]+" )
Saludos.
-- Iñaki Baz Castillo ibc@aliax.net
SR-Users-ES mailing list SR-Users-ES@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users-es
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)?
Muchas gracias Iñaki, ya me podia romper yo la cabeza con las expresiones regulares, y resulta que el fallo era otra.
sr-users-es@lists.kamailio.org