Citrix ADC

Expresiones SIP

El lenguaje de expresiones de directivas avanzadas de Citrix ADC contiene varias expresiones que operan en conexiones SIP (Protocolo de inicio de sesión). Estas expresiones están pensadas para ser utilizadas en directivas para cualquier protocolo compatible que funcione sobre una base de solicitud/respuesta. Estas expresiones se pueden utilizar en directivas de conmutación de contenido, limitación de velocidad, respuesta y reescritura.

Ciertas limitaciones se aplican a las expresiones SIP utilizadas con las directivas de respuesta. Solo se permiten las acciones DROP, NOOP o RESPONDWITH en un servidor virtual de equilibrio de carga SIP. Las directivas de respuesta pueden vincularse a un servidor virtual de equilibrio de carga, a un punto de enlace global de anulación, a un punto de enlace global predeterminado o a una etiqueta de directiva sip_udp.

El formato de encabezado utilizado por el protocolo SIP es similar al utilizado por el protocolo HTTP, por lo que muchas de las nuevas expresiones se ven y funcionan muy parecido a sus análogos HTTP. Cada encabezado SIP consta de una línea que incluye el método SIP, la URL y la versión, seguido de una serie de pares nombre-valor que parecen encabezados HTTP.

A continuación se presenta un encabezado SIP de ejemplo que se hace referencia en las tablas de expresiones debajo de él:

INVITE sip:16@www.sip.com:5060;transport=udp SIP/2.0
Record-Route: <sip:200.200.100.22;lr=on>
Via: SIP/2.0/UDP 200.200.100.22;branch=z9hG4bK444b.c8e103d1.0;rport=5060;
    received=10.102.84.18
Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;
    received=10.102.84.160
From: "12" <sip:12@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185
To: "16" <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185
Call-ID: 00127f54-ec850017-0e46f5b9-5ec149c2@10.102.84.180
Max-Forwards: 69CSeq: 101 INVITE
User-Agent: Cisco-CP7940G/8.0
Contact: <sip:12@10.102.84.180:5060;transport=udp>
Expires: 180
Accept: application/sdp
Allow: ACK,BYE,CANCEL,INVITE,NOTIFY,OPTIONS,REFER,REGISTER,UPDATE
Supported: replaces,join,norefersub
Content-Length: 277
Content-Type: application/sdp
Content-Disposition: session;handling=optiona

Tablas de referencia SIP

Las tablas siguientes contienen listas de expresiones que operan en encabezados SIP. La primera tabla contiene expresiones que se aplican a los encabezados de solicitud. La mayoría de las expresiones basadas en respuesta son casi las mismas que las expresiones basadas en solicitudes correspondientes. Para crear una expresión de respuesta a partir de la expresión de solicitud correspondiente, cambie las dos primeras secciones de la expresión de SIP.REQ a SIP.RES y realice otros ajustes obvios. La segunda tabla contiene aquellas expresiones de respuesta que son exclusivas de las respuestas y no tienen equivalentes de solicitud. Puede utilizar cualquier elemento de las tablas siguientes como expresión completa por sí mismo, o puede utilizar varios operadores para combinar estos elementos de expresión con otros para formar expresiones más complejas.

Expresiones de solicitud SIP

Expresión Descripción
SIP.REQ.METHOD Funciona en el método de la solicitud SIP. Los métodos de solicitud SIP admitidos son ACK, BYE, CANCEL, INFO, INVITE, MESSAGE, NOTIFY, OPTIONS, PRACK, PUBLISH, REFER, REGISTER, SUBSCRIBE y UPDATE. Esta expresión es una derivada de la clase de texto, por lo que todas las operaciones que son aplicables al texto son aplicables a este método. Por ejemplo, para una solicitud SIP de INVITE sip:16@10.102.84.181:5060;transport=udp SIP/2.0, esta expresión devuelve INVITE.
SIP.REQ.URL Funciona en la URL de solicitud SIP. Esta expresión es una derivada de la clase de texto, por lo que todas las operaciones que son aplicables al texto son aplicables a este método. Por ejemplo, para una solicitud SIP de INVITE sip:16@10.102.84.181:5060;transport=udp SIP/2.0, esta expresión devuelve: 16@10.102.84.181:5060;transport=udp.
SIP.REQ.URL.PROTOCOL Devuelve el protocolo URL. Por ejemplo, para una URL SIP ofsip:16@www.sip.com:5060;transport=udp, esta expresión devuelve sip.
SIP.REQ.URL.HOSTNAME Devuelve la parte del nombre de host de la URL SIP. Por ejemplo, para una URL SIP ofsip:16@www.sip.com:5060;transport=udp, esta expresión devuelve www.sip.com:5060.
SIP.REQ.URL.HOSTNAME.PORT Devuelve la parte del puerto del nombre de host de la URL SIP. Si no se especifica ningún puerto, esta expresión devuelve el puerto SIP predeterminado, 5060. Por ejemplo, para un nombre de host SIP de www.sip.com:5060, esta expresión devuelve 5060.
SIP.REQ.URL.HOSTNAME.DOMAIN Devuelve la parte del nombre de dominio del nombre de host de la URL SIP. Si el host es una dirección IP, esta expresión devuelve un resultado incorrecto. Por ejemplo, para un nombre de host SIP de www.sip.com:5060, esta expresión devuelve sip.com. Para un nombre de host SIP 192.168.43.15:5060, esta expresión devuelve un error.
SIP.REQ.URL.HOSTNAME.SERVER Devuelve la parte del servidor del host. Por ejemplo, para un nombre de host SIP de www.sip.com:5060, esta expresión devuelve www.
SIP.REQ.URL.USERNAME Devuelve el nombre de usuario que precede al carácter @. Por ejemplo, para una URL SIP de sip:16@www.sip.com:5060;transport=udp, esta expresión devuelve 16.
SIP.REQ.VERSION Devuelve el número de versión SIP en la solicitud. Por ejemplo, para una solicitud SIP de INVITE sip:16@10.102.84.181:5060;transport=udp SIP/2.0, esta expresión devuelve SIP/2.0.
SIP.REQ.VERSION.MAJOR Devuelve el número de versión principal (el número a la izquierda del punto). Por ejemplo, para un número de versión SIP de SIP/2.0, esta expresión devuelve 2.
SIP.REQ.VERSION.MINOR Devuelve el número de versión secundaria (el número a la derecha del punto). Por ejemplo, para un número de versión SIP de SIP/2.0, esta expresión devuelve 0.
SIP.REQ.CONTENT_LENGTH Devuelve el contenido del encabezado Content-Length. Esta expresión es una derivada de la clase sip_header_t, por lo que se pueden utilizar todas las operaciones disponibles para encabezados SIP. Por ejemplo, para un encabezado SIP Content-Length de Content-Length: 277, esta expresión devuelve 277.
SIP.REQ.TO Devuelve el contenido del encabezado To. Por ejemplo, para un encabezado SIP To de A: “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185.
SIP.REQ.TO.DIRECCIÓN Devuelve el URI SIP, que se encuentra en el objeto sip_url. Se pueden utilizar todas las operaciones disponibles para los URI SIP. Por ejemplo, para un encabezado SIP To de: “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve sip:16@sip_example.com.
SIP.REQ.A.DISPLAY_NAME Devuelve la parte del nombre para mostrar del encabezado To. Por ejemplo, para un encabezado SIP To de: “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve 16.
SIP.REQ.TO.TAG Devuelve el valor “tag” del par de valores de nombre “tag” en el encabezado TO. Por ejemplo, para un encabezado SIP To: “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve 00127f54ec85a6d90cc14f45-53cc0185.
SIP.REQ.DE Devuelve el contenido del encabezado From. Por ejemplo, para un encabezado SIP From de: “12” <sip: 12@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve sip: 12@sip_example.com.
SIP.REQ.FROM.ADDRESS Devuelve el URI SIP, que se encuentra en el objeto sip_url. Se pueden utilizar todas las operaciones disponibles para los URI SIP. Por ejemplo, para un encabezado SIP From de: “12” <sip: 12@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve sip: 12@sip_example.com.
SIP.REQ.FROM.DISPLAY_NAME Devuelve la parte del nombre para mostrar del encabezado To. Por ejemplo, para un encabezado SIP From de: “12” <sip: 12@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve 12.
SIP.REQ.FROM.TAG Devuelve el valor “tag” del par nombre/valor “tag” en el encabezado To. Por ejemplo, para un encabezado SIP From de: “12”<sip:12@sip_example.com>; tag=00127f54ec85a6d90cc14f45-53cc0185, esta expresión devuelve 00127f54ec85a6d90cc14f45-53cc0185.
SIP.REQ.VIA Devuelve el encabezado Via completo. Si hay varios encabezados Via en la solicitud, devuelve el último encabezado Via. Por ejemplo, para los dos encabezados Via del encabezado SIP de ejemplo, esta expresión devuelve Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160.
SIP.REQ.VIA.SENTBY_ADDRESS Devuelve la dirección que envió la solicitud. Por ejemplo, para el encabezado Via a través de: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, esta expresión devuelve 10.102.84.180.
SIP.REQ.VIA.SENTBY_PORT Devuelve el puerto que envió la solicitud. Por ejemplo, para el encabezado Via a través de: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, esta expresión devuelve 5060.
SIP.REQ.VIA.RPORT Devuelve el valor del par nombre/valor rport. Por ejemplo, para el encabezado Via a través de: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, esta expresión devuelve 5060.
SIP.REQ.VIA.BRANCH Devuelve el valor del par nombre/valor de la rama. Por ejemplo, para el encabezado Via a través de: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, esta expresión devuelve z9hG4bK03e76d0b.
SIP.REQ.VIA.RECEIVED Devuelve el valor del par nombre/valor recibido. Por ejemplo, para el encabezado Via a través de: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, esta expresión devuelve 10.102.84.160.
SIP.REQ.CALLID Devuelve el contenido del encabezado Callid. Esta expresión es una derivada de la clase sip_header_t, por lo que se pueden utilizar todas las operaciones disponibles para encabezados SIP. Por ejemplo, para un encabezado SIP Callid Ofcall-ID: 00127f54-ec850017-0e46f5b9-5ec149c2@10.102.84.180, esta expresión devuelve 00127f54-ec850017-0e46f5b9-5ec149c2@10.102.84.180.
SIP.REQ.CSEQ Devuelve el número CSEQ del CSEQ, como un entero. Por ejemplo, para un encabezado CSEQ SIP de CSeq: 101 INVITE, esta expresión devuelve 101.
SIP.REQ.HEADER(<header_name>) Devuelve el encabezado SIP especificado. Para <header_name>, sustituya el nombre del encabezado que quiera. Por ejemplo, para devolver el encabezado SIP From, escriba SIP.REQ.HEADER(“From”).
SIP.REQ.HEADER(<header_name>).INSTANCE(<line_number>) Devuelve la instancia especificada del encabezado SIP especificado. Pueden producirse varias instancias del mismo encabezado SIP. Si quiere una instancia específica de dicho encabezado SIP (por ejemplo, un encabezado Via específico), puede especificar ese encabezado escribiendo un número como <line_number>. Las instancias de encabezado se emparejan desde el último (0) hasta el primero. En otras palabras, SIP.REQ.HEADER (“Via”).INSTANCE (0) devuelve la última instancia del encabezado Via, mientras que SIP.REQ.HEADER (“Via”).INSTANCE (1) devuelve la última instancia pero una de la cabecera Via, y así sucesivamente. Por ejemplo, si se utiliza en el encabezado SIP de ejemplo, SIP.REQ.HEADER (“Via”).INSTANCE (1) ReturnsVia: SIP/2.0/UDP 10.102.84. 180:5060; branch=z9hG4bK03e76d0b;rport=5060.
SIP.REQ.HEADER(<header_name>).VALUE(<line_number>) Devuelve el contenido de la instancia especificada del encabezado SIP especificado. El uso es casi el mismo que la expresión anterior. Por ejemplo, si se utiliza en el ejemplo de encabezado SIP de la entrada de tabla anterior, SIP.REQ.HEADER (“Via”).VALUE (1) devuelve SIP/2.0/UDP 10.102.84. 180:5060; branch=z9hG4bK03e76d0b;rport=5060.
SIP.REQ.HEADER(<header_name>).COUNT Devuelve el número de instancias de un encabezado particular como un entero. Por ejemplo, si se utiliza en el ejemplo de encabezado SIP anterior, SIP.REQ.HEADER (“Via”).COUNT devuelve 2.
SIP.REQ.HEADER (<header_name>).EXISTS Devuelve un valor booleano de true o false, en función de si el encabezado especificado existe o no. Por ejemplo, si se utiliza en el ejemplo de encabezado SIP anterior, SIP.REQ.HEADER (“Expira”).ExistsReturns true, mientras que SIP.REQ.HEADER (“Caller-ID”).EXISTS devuelve false.
SIP.REQ.HEADER (<header_name>).LIST Devuelve la lista de parámetros separados por comas en el encabezado especificado. Por ejemplo, si se utiliza en el ejemplo de encabezado SIP anterior, SIP.REQ.HEADER (“Permitir”).LIST devuelve ACK, BYE, CANCEL, INVITE, NOTIFICAR, OPTIONS, REFER, REGISTRAR, UPDATE. Puede anexar la cadena.GET (<list_item_number>) para seleccionar un elemento de lista específico. Por ejemplo, para obtener el primer elemento (ACK) de la lista anterior, escriba SIP.REQ.HEADER (“Permitir”).LIST.GET (0). Para extraer el segundo elemento (BYE), escriba SIP.REQ.HEADER (“Permitir”).LIST.GET (1). Nota: Si el encabezado especificado contiene una lista de pares nombre/valor, se devuelve el par nombre/valor completo.
SIP.REQ.HEADER (<header_name>).TYPECAST_SIP_HEADER_T (“ <in_header_name> “) Convierte el tipo <header_name> en <in_header_name>. Cualquier texto se puede convertir en la clase sip_header_t, después de lo cual se pueden usar todas las operaciones basadas en encabezado. Después de realizar esta operación, puede aplicar todas las operaciones que se pueden utilizar con <in_header_name>. Por ejemplo, la expresión SIP.REQ.CONTENT_LENGTH.TYPECAST_SIP_HEADER_T escribe todas las instancias del encabezado Content-Length. Después de realizar esta operación, puede aplicar todas las operaciones de encabezado a todas las instancias del encabezado especificado.
SIP.REQ.HEADER(<header_name>).CONTAINS(<string>). Devuelve booleano true si la cadena de texto especificada está presente en cualquier instancia del encabezado especificado. Funciona en todas las instancias del encabezado especificado. Las instancias de encabezado se emparejan desde el último (0) hasta el primero.
SIP.REQ.HEADER(<header_name>).EQUALS_ANY(<patset>) Devuelve un booleano true si cualquier patrón asociado con <patset> coincide con cualquier contenido en cualquier instancia del encabezado especificado. Funciona en todas las instancias del encabezado especificado. Las instancias de encabezado se emparejan desde el último (0) hasta el primero.
SIP.REQ.HEADER(<header_name>).CONTAINS_ANY(<patset>) Devuelve un booleano true si cualquier patrón asociado con <patset> coincide con cualquier contenido en cualquier instancia del encabezado especificado. Funciona en todas las instancias del encabezado especificado. Las instancias de encabezado se emparejan desde el último (0) hasta el primero.
SIP.REQ.HEADER(<header_name>).CONTAINS_INDEX(<patset>) Devuelve el índice del patrón coincidente asociado con <patset> si ese patrón coincide con cualquier contenido en cualquier instancia del encabezado especificado. Funciona en todas las instancias del encabezado especificado. Las instancias de encabezado se emparejan desde el último (0) hasta el primero.
SIP.REQ.HEADER(<header_name>).EQUALS_INDEX(<patset>) Devuelve el índice del patrón coincidente asociado con <patset> si ese patrón coincide con cualquier instancia del encabezado especificado. Funciona en todas las instancias del encabezado especificado. Las instancias de encabezado se emparejan desde el último (0) hasta el primero.
SIP.REQ.HEADER(<header_name>).SUBSTR(<string>) Si la cadena especificada está presente en cualquier instancia del encabezado especificado, esta expresión devuelve esa cadena. Por ejemplo, para el encabezado SIP Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=z9hG4bK03e76d0b;rport=5060; recibido=10.102.84.160”, SIP.REQ.HEADER (“Via”).SUBSTR (“rSUBport=5060”) devuelve “rport=5060”.sip.req.header (“Vía”).header (“Via”).header R (“rport=5061”) devuelve una cadena vacía.
SIP.REQ.HEADER(<header_name>).AFTER_STR(<string>) Si la cadena especificada está presente en cualquier instancia del encabezado especificado, esta expresión devuelve la cadena inmediatamente después de esa cadena. Por ejemplo, para el encabezado SIP Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=z9hG4bK03e76d0b;rport=5060; recibido=10.102.84.160, la expresión SIP.REQ.HEADER (“Via”).AFTER_STR (“rport=”) devuelve 5060.
SIP.REQ.HEADER(<header_name>).REGEX_MATCH(<regex>) Devuelve booleano verdadero si la expresión regular especificada (expresión regular) coincide con cualquier instancia del encabezado especificado. Debe especificar la expresión regular en el siguiente formato: Re <delimiter> expresión regular <same delimiter>. La expresión regular no puede tener más de 1499 caracteres de longitud. Debe ajustarse a la biblioteca de expresiones regulares PCRE. Consulte http://www.pcre.org/pcre.txt para obtener documentación sobre la sintaxis de expresiones regulares PCRE. La página de comando man pcrepattern también tiene información útil sobre la especificación de patrones mediante expresiones regulares PCRE. La sintaxis de expresión regular admitida en esta expresión tiene algunas diferencias con respecto a PCRE. No se permiten referencias anteriores. Debe evitar las expresiones regulares recursivas; aunque algunas funcionan, muchas no lo hacen. El metacaractero punto (.) coincide con las líneas nuevas. No se admite Unicode. SET_TEXT_MODE (IGNORECASE) anula el (? i) opción interna especificada en la expresión regular.
SIP.REQ.HEADER(<header_name>).REGEX_SELECT(<regex>) Si la expresión regular especificada coincide con cualquier texto de cualquier instancia del encabezado especificado, esta expresión devuelve el texto. Por ejemplo, para el encabezado SIP Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=z9hG4bK03e76d0b;rport=5060; recibido=10.102.84.160, la expresión SIP.REQ.HEADER (“Via”).REGEX_SELECT (“recibido=[0-9]{1,3}. [0-9]{ 1,3}. [0-9]{ 1,3}. [0-9]{ 1,3}”) devuelve recibido=10.102.84.160.
SIP.REQ.HEADER(<header_name>).AFTER_REGEX(<regex>) Si la expresión regular especificada coincide con cualquier texto de cualquier instancia del encabezado especificado, esta expresión devuelve la cadena inmediatamente después de ese texto. Por ejemplo, para el encabezado SIP Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=z9hG4bK03e76d0b;rport=5060; recibido=10.102.84.160, la expresión SIP.REQ.HEADER (“Via”).AFTER_REGEX (“recibido=”) devuelve 10.102.84.160.
SIP.REQ.HEADER(<header_name>).BEFORE_REGEX(<regex>) Si la expresión regular especificada coincide con cualquier texto de cualquier instancia del encabezado especificado, esta expresión devuelve la cadena inmediatamente antes de ese texto. Por ejemplo, para el encabezado SIP Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=z9hG4bK03e76d0b;rport=5060; recibido=10.102.84.160, la expresión SIP.REQ.HEADER (“Via”).BEEFER_REGEX (“[0-9]{1,3}. [0-9]{ 1,3}. [0-9]{ 1,3}. [0-9]{ 1,3}”) devuelve recibido=.
SIP.REQ.FULL_HEADER Devuelve todo el encabezado SIP, incluido el CR/LF de terminación.
SIP.REQ.IS_VALID Devuelve booleano true si el formato de solicitud es válido.
SIP.REQ.BODY (<length>) Devuelve el cuerpo de la solicitud, hasta la longitud especificada. Si la longitud especificada es mayor que la longitud del cuerpo de la solicitud, esta expresión devuelve todo el cuerpo de la solicitud.
SIP.REQ.LB_VSERVER Devuelve el nombre del servidor virtual de equilibrio de carga (LB vserver) que está sirviendo la solicitud actual.
SIP.REQ.CS_VSERVER Devuelve el nombre del servidor virtual de conmutación de contenido (CS vserver) que está sirviendo la solicitud actual.

Expresiones de respuesta SIP

Expresión Descripción
SIP.RES.STATUS Devuelve el código de estado de respuesta SIP. Por ejemplo, si la primera línea de la respuesta es SIP/2.0 100 Tratando, esta expresión devuelve 100.
SIP.RES.STATUS_MSG Devuelve el mensaje de estado de respuesta SIP. Por ejemplo, si la primera línea de la respuesta es SIP/2.0 100 Intentar, esta expresión devuelve Intentar.
SIP.RES.IS_REDIRECT Devuelve booleano verdadero si el código de respuesta es una redirección.
SIP.RES.METHOD Devuelve el método de respuesta extraído de la cadena del método de solicitud en el encabezado CSeQ.

Expresiones SIP