ADC

Expressions SIP

Le langage d’expressions de stratégie NetScaler Advanced contient un certain nombre d’expressions qui fonctionnent sur les connexions SIP (Session Initiation Protocol). Ces expressions sont destinées à être utilisées dans les stratégies pour tout protocole pris en charge qui fonctionne sur une base de demande/réponse. Ces expressions peuvent être utilisées dans les stratégies de commutation de contenu, de limitation de débit, de répondeur et de réécriture.

Certaines limitations s’appliquent aux expressions SIP utilisées avec les stratégies de répondeur. Seules les actions DROP, NOOP ou RESPONDWITH sont autorisées sur un serveur virtuel d’équilibrage de charge SIP. Les stratégies de répondeur peuvent être liées à un serveur virtuel d’équilibrage de charge, à un point de liaison global de remplacement, à un point de liaison global par défaut ou à une étiquette de stratégie sip_udp.

Le format d’en-tête utilisé par le protocole SIP est similaire à celui utilisé par le protocole HTTP, de sorte que la plupart des nouvelles expressions ressemblent et fonctionnent de manière très similaire à leurs analogues HTTP. Chaque en-tête SIP se compose d’une ligne qui inclut la méthode SIP, l’URL et la version, suivies d’une série de paires nom-valeur qui ressemblent à des en-têtes HTTP.

Voici un exemple d’en-tête SIP auquel il est fait référence dans les tableaux d’expressions situés en dessous :

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
<!--NeedCopy-->

Tableaux de référence SIP

Les tableaux suivants contiennent des listes d’expressions qui fonctionnent sur les en-têtes SIP. Le premier tableau contient des expressions qui s’appliquent aux en-têtes de requête. La plupart des expressions basées sur les réponses sont quasiment identiques aux expressions basées sur les requêtes correspondantes. Pour créer une expression de réponse à partir de l’expression de demande correspondante, vous modifiez les deux premières sections de l’expression de SIP.REQ en SIP.RES, et vous apportez d’autres ajustements évidents. Le deuxième tableau contient les expressions de réponse qui sont uniques aux réponses et qui n’ont aucun équivalent de demande. Vous pouvez utiliser n’importe quel élément des tableaux suivants comme expression complète à part entière, ou vous pouvez utiliser différents opérateurs pour combiner ces éléments d’expression avec d’autres afin de créer des expressions plus complexes.

Expressions de requête SIP

Expression Description
SIP.REQ.METHOD Fonctionne selon la méthode de la requête SIP. Les méthodes de requête SIP prises en charge sont ACK, BYE, CANCEL, INFO, INVITE, MESSAGE, NOTIFY, OPTIONS, PRACK, PUBLISH, REFER, REGISTER, SUBSCRIBE et UPDATE. Cette expression est une dérivée de la classe de texte, de sorte que toutes les opérations applicables au texte sont applicables à cette méthode. Par exemple, pour une requête SIP de INVITE sip:16@10.102.84.181:5060;transport=udp SIP/2.0, cette expression renvoie INVITE.
SIP.REQ.URL Fonctionne sur l’URL de requête SIP. Cette expression est une dérivée de la classe de texte, de sorte que toutes les opérations applicables au texte sont applicables à cette méthode. Par exemple, pour une demande SIP de INVITE sip:16@10.102.84.181:5060;transport=udp SIP/2.0, cette expression renvoie sip:16@10.102.84.181:5060;transport=udp.
SIP.REQ.URL.PROTOCOL Renvoie le protocole URL. Par exemple, pour une URL SIP de sip : 16@www.sip.com:5060;transport=udp, cette expression renvoie sip.
SIP.REQ.URL.HOSTNAME Renvoie la partie nom d’hôte de l’URL SIP. Par exemple, pour une URL SIP desip : 16@www.sip.com:5060 ; transport=udp, cette expression renvoie www.sip.com:5060.
SIP.REQ.URL.HOSTNAME.PORT Renvoie la partie port du nom d’hôte de l’URL SIP. Si aucun port n’est spécifié, cette expression renvoie le port SIP par défaut, 5060. Par exemple, pour un nom d’hôte SIP www.sip.com:5060, cette expression renvoie 5060.
SIP.REQ.URL.HOSTNAME.DOMAIN Renvoie la partie nom de domaine du nom d’hôte de l’URL SIP. Si l’hôte est une adresse IP, cette expression renvoie un résultat incorrect. Par exemple, pour un nom d’hôte SIP www.sip.com:5060, cette expression renvoie sip.com. Pour un nom d’hôte SIP 192.168.43. 15:5060, cette expression renvoie une erreur.
SIP.REQ.URL.HOSTNAME.SERVER Renvoie la partie serveur de l’hôte. Par exemple, pour un nom d’hôte SIP www.sip.com:5060, cette expression renvoie www.
SIP.REQ.URL.USERNAME Renvoie le nom d’utilisateur qui précède le caractère @. Par exemple, pour une URL SIP de sip : 16@www.sip.com:5060 ; transport=udp, cette expression renvoie 16.
SIP.REQ.VERSION Renvoie le numéro de version SIP figurant dans la demande. Par exemple, pour une requête SIP INVITE sip:16@10.102.84.181:5060;transport=udp SIP/2.0, cette expression renvoie SIP/2.0.
SIP.REQ.VERSION.MAJOR Renvoie le numéro de version principal (le numéro situé à gauche du point). Par exemple, pour un numéro de version SIP de SIP/2.0, cette expression renvoie 2.
SIP.REQ.VERSION.MINOR Renvoie le numéro de version secondaire (le numéro situé à droite du point). Par exemple, pour un numéro de version SIP SIP/2.0, cette expression renvoie 0.
SIP.REQ.CONTENT_LENGTH Renvoie le contenu de l’en-tête Content-Length. Cette expression est un dérivé de la classe thesip_header_t, de sorte que toutes les opérations disponibles pour les en-têtes SIP peuvent être utilisées. Par exemple, pour un en-tête SIP Content-Length de type Content-Length : 277, cette expression renvoie 277.
SIP.REQ.TO Renvoie le contenu de l’en-tête To. Par exemple, pour un en-tête SIP To de : “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185.
SIP.REQ.TO.ADDRESS Renvoie l’URI SIP qui se trouve dans l’objet sip_url. Toutes les opérations disponibles pour les URI SIP peuvent être utilisées. Par exemple, pour un en-tête SIP To de To : “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie sip:16@sip_example.com.
SIP.REQ.TO.DISPLAY_NAME Renvoie la partie du nom d’affichage de l’en-tête To. Par exemple, pour un en-tête SIP To de To : “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie 16.
SIP.REQ.TO.TAG Renvoie la valeur « tag » issue de la paire nom-valeur « tag » dans l’en-tête TO. Par exemple, pour un en-tête SIP To de To: “16” <sip:16@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie 00127f54ec85a6d90cc14f45-53cc0185.
SIP.REQ.FROM Renvoie le contenu de l’en-tête From. Par exemple, pour un en-tête SIP From header of From: “12” <sip:12@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, this expression returns sip:12@sip_example.com.
SIP.REQ.FROM.ADDRESS Renvoie l’URI SIP qui se trouve dans l’objet sip_url. Toutes les opérations disponibles pour les URI SIP peuvent être utilisées. Par exemple, pour un en-tête SIP From header of From: “12” <sip:12@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185, this expression returns sip:12@sip_example.com.
SIP.REQ.FROM.DISPLAY_NAME Renvoie la partie du nom d’affichage de l’en-tête To. Par exemple, pour un en-tête SIP From de : “12” <sip:12@sip_example.com> ; tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie 12.
SIP.REQ.FROM.TAG Renvoie la valeur « tag » issue de la paire nom/valeur « tag » dans l’en-tête TO. Par exemple, pour un en-tête SIP From de : « 12”<sip:12@sip_example.com> ; tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie 00127f54ec85a6d90cc14f45-53cc0185.
SIP.REQ.VIA Renvoie l’en-tête Via complet. Si la requête contient plusieurs en-têtes Via, renvoie le dernier en-tête Via. Par exemple, pour les deux en-têtes Via de l’exemple d’en-tête SIP, cette expression renvoie Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160.
SIP.REQ.VIA.SENTBY_ADDRESS Renvoie l’adresse qui a envoyé la demande. Par exemple, pour l’en-tête Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, cette expression renvoie 10.102.84.180.
SIP.REQ.VIA.SENTBY_PORT Renvoie le port qui a envoyé la demande. Par exemple, pour l’en-tête Via header Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, this expression returns 5060.
SIP.REQ.VIA.RPORT Renvoie la valeur de la paire nom/valeur du rapport. Par exemple, pour l’en-tête Via header Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, this expression returns 5060.
SIP.REQ.VIA.BRANCH Renvoie la valeur de la paire nom/valeur de la branche. Par exemple, pour l’en-tête Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, cette expression renvoie z9hg4bk03e76d0b.
SIP.REQ.VIA.RECEIVED Renvoie la valeur de la paire nom/valeur reçue. Par exemple, pour l’en-tête Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, cette expression renvoie 10.102.84.160.
SIP.REQ.CALLID Renvoie le contenu de l’en-tête Callid. Cette expression est un dérivé de la classe thesip_header_t, de sorte que toutes les opérations disponibles pour les en-têtes SIP peuvent être utilisées. Par exemple, pour un en-tête SIP Callid dont l’ID d’appel est 00127f54-ec850017-0e46f5b9-5ec149c2 @10 .102.84.180, cette expression renvoie 00127f54-ec850017-0e46f5b9-5ec149c2 @10 .102.84.180.
SIP.REQ.CSEQ Renvoie le numéro CSEQ à partir du CSEQ, sous la forme d’un entier. Par exemple, pour un en-tête SIP CSEQ de type CSeq : 101 INVITE, cette expression renvoie 101.
SIP.REQ.HEADER() Renvoie l’en-tête SIP spécifié. Pour , remplacez le nom de l’en-tête souhaité. Par exemple, pour renvoyer l’en-tête SIP From, vous devez taper SIP.REQ.HEADER (« From »).
SIP.REQ.HEADER().INSTANCE() Renvoie l’instance spécifiée de l’en-tête SIP spécifié. Plusieurs instances du même en-tête SIP peuvent se produire. Lorsque vous souhaitez obtenir une instance spécifique d’un tel en-tête SIP (par exemple, un en-tête Via spécifique), vous pouvez spécifier cet en-tête en saisissant un nombre sous la forme du. Les instances d’en-tête sont mises en correspondance de la dernière (0) à la première. En d’autres termes, SIP.REQ.HEADER (« Via ») .INSTANCE (0) renvoie la dernière instance de l’en-tête Via, tandis que SIP.REQ.HEADER (« Via ») .INSTANCE (1) renvoie la dernière instance sauf une de l’en-tête Via, et ainsi de suite. Par exemple, si utilisé sur l’exemple d’en-tête SIP, SIP.REQ.HEADER("Via").INSTANCE(1) returnsVia: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060.
SIP.REQ.HEADER().VALUE() Renvoie le contenu de l’instance spécifiée de l’en-tête SIP spécifié. L’utilisation est presque identique à celle de l’expression précédente. Par exemple, si utilisé dans l’exemple d’en-tête SIP dans l’entrée de table précédente, SIP.REQ.HEADER(“Via”).VALUE(1) renvoie SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060.
SIP.REQ.HEADER().COUNT Renvoie le nombre d’instances d’un en-tête particulier sous forme d’entier. Par exemple, s’il est utilisé dans l’exemple d’en-tête SIP ci-dessus, SIP.REQ.HEADER (« Via ») .COUNT renvoie 2.
SIP.REQ.HEADER().EXISTS Renvoie une valeur booléenne vraie ou fausse, selon que l’en-tête spécifié existe ou non. Par exemple, si utilisé dans l’exemple d’en-tête SIP ci-dessus, SIP.REQ.HEADER (« Expires ») .ExistsRetourne true, tandis que SIP.REQ.HEADER (« Call-id ») .EXISTS renvoie false.
SIP.REQ.HEADER().LIST Renvoie la liste des paramètres séparés par des virgules dans l’en-tête spécifié. Par exemple, s’il est utilisé dans l’exemple d’en-tête SIP ci-dessus, SIP.REQ.HEADER (« Allow ») .LIST renvoie ACK, BYE, CANCEL, INVITE, NOTIFY, OPTIONS, REFER, REGISTER, UPDATE. Vous pouvez ajouter la chaîne .GET () pour sélectionner un élément de liste spécifique. Par exemple, pour obtenir le premier élément (ACK) de la liste ci-dessus, vous devez taper SIP.REQ.HEADER (« Allow ») .LIST.GET (0). Pour extraire le second élément (BYE), tapez SIP.REQ.HEADER (« Allow ») .LIST.GET (1). Remarque : Si l’en-tête spécifié contient une liste de paires nom/valeur, la paire nom/valeur complète est renvoyée.
SIP.REQ.HEADER().TYPECAST_SIP_HEADER_T("") Typecast vers. N’importe quel texte peut être typé dans la classe sip_header_t, après quoi toutes les opérations basées sur les en-têtes peuvent être utilisées. Après avoir effectué cette opération, vous pouvez appliquer toutes les opérations pouvant être utilisées avec. Par exemple, l’expression SIP.REQ.CONTENT_LENGTH.TYPECAST_SIP_HEADER_T classe toutes les instances de l’en-tête Content-Length. Après avoir effectué cette opération, vous pouvez appliquer toutes les opérations d’en-tête à toutes les instances de l’en-tête spécifié.
SIP.REQ.HEADER().CONTAINS(). Renvoie la valeur booléenne true si la chaîne de texte spécifiée est présente dans n’importe quelle instance de l’en-tête spécifié. Fonctionne sur toutes les instances de l’en-tête spécifié. Les instances d’en-tête sont mises en correspondance de la dernière (0) à la première.
SIP.REQ.HEADER().EQUALS_ANY() Returns boolean true if any pattern associated with matches any content in any instance of the specified header. Fonctionne sur toutes les instances de l’en-tête spécifié. Les instances d’en-tête sont mises en correspondance de la dernière (0) à la première.
SIP.REQ.HEADER().CONTAINS_ANY() Returns Boolean true if any pattern associated with matches any content in any instance of the specified header. Fonctionne sur toutes les instances de l’en-tête spécifié. Les instances d’en-tête sont mises en correspondance de la dernière (0) à la première.
SIP.REQ.HEADER().CONTAINS_INDEX() Returns the index of the matching pattern associated with if that pattern matches any content in any instance of the specified header. Fonctionne sur toutes les instances de l’en-tête spécifié. Les instances d’en-tête sont mises en correspondance de la dernière (0) à la première.
SIP.REQ.HEADER().EQUALS_INDEX() Returns the index of the matching pattern associated with if that pattern matches any instance of the specified header. Fonctionne sur toutes les instances de l’en-tête spécifié. Les instances d’en-tête sont mises en correspondance de la dernière (0) à la première.
SIP.REQ.HEADER().SUBSTR() Si la chaîne spécifiée est présente dans n’importe quelle instance de l’en-tête spécifié, cette expression renvoie cette chaîne. Par exemple, pour l’en-tête SIP Via : SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160”,SIP.REQ.HEADER(“Via”).SUBSTR(“rport=5060”) returns “rport=5060”.SIP.REQ.HEADER(“Via”).SUBSTR(“rport=5061”) renvoie une chaîne vide.
SIP.REQ.HEADER().AFTER_STR() Si la chaîne spécifiée est présente dans n’importe quelle instance de l’en-tête spécifié, cette expression renvoie la chaîne immédiatement après cette chaîne. Par exemple, pour l’en-tête SIP Via : SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, the expression SIP.REQ.HEADER(“Via”).AFTER_STR(“rport=”) renvoie 5060.
SIP.REQ.HEADER().REGEX_MATCH() Renvoie la valeur booléenne true si l’expression régulière spécifiée (regex) correspond à n’importe quelle instance de l’en-tête spécifié. Vous devez spécifier l’expression régulière au format suivant : reregular expression. La longueur de l’expression régulière ne peut pas dépasser 1 499 caractères. Il doit être conforme à la bibliothèque d’expressions régulières PCRE. Consultez http://www.pcre.org/pcre.txt la documentation sur la syntaxe des expressions régulières PCRE. La page de manuel pcrepattern contient également des informations utiles sur la spécification de modèles à l’aide d’expressions régulières PCRE. La syntaxe des expressions régulières prise en charge dans cette expression présente certaines différences par rapport au PCRE. Les références rétrospectivement ne sont pas autorisées. Vous devez éviter les expressions régulières récursives ; bien que certaines fonctionnent, d’autres ne le font pas. Le métacaractère point (.) correspond aux sauts de ligne. L’Unicode n’est pas pris en charge. set_text_mode (IGNORECASE) remplace le (? i) option interne spécifiée dans l’expression régulière.
SIP.REQ.HEADER().REGEX_SELECT() Si la regex spécifiée correspond à n’importe quel texte dans n’importe quelle instance de l’en-tête spécifié, cette expression renvoie le texte. For example, for the SIP header Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, the expression SIP.REQ.HEADER(“Via”).REGEX_SELECT(“received=[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}”) returns received=10.102.84.160.
SIP.REQ.HEADER().AFTER_REGEX() Si la regex spécifiée correspond à n’importe quel texte dans n’importe quelle instance de l’en-tête spécifié, cette expression renvoie la chaîne immédiatement après ce texte. Par exemple, pour l’en-tête SIP Via : SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, the expression SIP.REQ.HEADER(“Via”).AFTER_REGEX(“received=”) renvoie 10.102.84.160.
SIP.REQ.HEADER().BEFORE_REGEX() Si la regex spécifiée correspond à n’importe quel texte dans n’importe quelle instance de l’en-tête spécifié, cette expression renvoie la chaîne juste avant ce texte. For example, for the SIP header Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, the expression SIP.REQ.HEADER(“Via”).BEFORE_REGEX(“[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}”) returns received=.
SIP.REQ.FULL_HEADER Renvoie l’en-tête SIP complet, y compris le CR/LF de terminaison.
SIP.REQ.IS_VALID Renvoie la valeur booléenne true si le format de demande est valide.
SIP.REQ.BODY() Renvoie le corps de la requête, jusqu’à la longueur spécifiée. Si la longueur spécifiée est supérieure à la longueur du corps de la requête, cette expression renvoie le corps entier de la requête.
SIP.REQ.LB_VSERVER Renvoie le nom du serveur virtuel d’équilibrage de charge (LB vserver) qui traite la demande en cours.
SIP.REQ.CS_VSERVER Renvoie le nom du serveur virtuel de commutation de contenu (CS vserver) qui traite la demande en cours.

Expressions de réponse SIP

Expression Description
SIP.RES.STATUS Renvoie le code d’état de la réponse SIP. Par exemple, si la première ligne de la réponse est SIP/2.0 100 Trying, cette expression renvoie 100.
SIP.RES.STATUS_MSG Renvoie le message d’état de la réponse SIP. Par exemple, si la première ligne de la réponse est SIP/2.0 100 Trying, cette expression renvoie Trying.
SIP.RES.IS_REDIRECT Renvoie la valeur booléenne true si le code de réponse est une redirection.
SIP.RES.METHOD Renvoie la méthode de réponse extraite de la chaîne de méthode request dans l’en-tête CSeq.
Expressions SIP