Citrix ADC

Expressions SIP

Le langage des expressions de stratégie avancée Citrix ADC contient un certain nombre d’expressions qui fonctionnent sur des 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, donc beaucoup de nouvelles expressions ressemblent beaucoup à leurs analogues HTTP. Chaque en-tête SIP se compose d’une ligne qui inclut la méthode SIP, l’URL et la version, suivie d’une série de paires nom-valeur qui ressemblent à des en-têtes HTTP.

Voici un exemple d’en-tête SIP qui est référencé dans les tables d’expressions 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

Tableaux de référence SIP

Les tableaux suivants contiennent des listes d’expressions qui fonctionnent sur les en-têtes SIP. La première table contient des expressions qui s’appliquent aux en-têtes de requête. La plupart des expressions basées sur la réponse sont presque les mêmes que les expressions basées sur la requête 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 à SIP.RES et effectuez d’autres ajustements évidents. La deuxième table contient les expressions de réponse qui sont uniques aux réponses et n’ont pas d’équivalent de demande. Vous pouvez utiliser n’importe quel élément des tableaux suivants comme une expression complète seule, ou vous pouvez utiliser différents opérateurs pour combiner ces éléments d’expression avec d’autres pour former des expressions plus complexes.

Expressions de demande SIP

Expression. Description
SIP.REQ.METHOD Fonctionne sur la méthode de la demande SIP. Les méthodes de demande 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 qui sont 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 la demande SIP. Cette expression est une dérivée de la classe de texte, de sorte que toutes les opérations qui sont 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.NOM_HÔTE.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 de 192.168.43.15:5060, cette expression renvoie une erreur.
SIP.REQ.URL.NOMHOSTNAME.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 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 à gauche de la période). 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 mineur (le numéro à 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 une dérivée de la classe thesip_header_t, de sorte que toutes les opérations qui sont disponibles pour les en-têtes SIP peuvent être utilisées. Par exemple, pour un en-tête SIP Content-Length de 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 Retourne la valeur « tag » de la paire de valeurs de nom « 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 Retourne la valeur « tag » 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 complet Via. S’il y a plusieurs en-têtes Via dans la requête, 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 rport. 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 une dérivée de la classe thesip_header_t, de sorte que toutes les opérations qui sont disponibles pour les en-têtes SIP peuvent être utilisées. Par exemple, pour un en-tête SIP Callid deCall-ID : 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 du CSEQ, sous forme d’entier. Par exemple, pour un en-tête SIP CSEQ CSEQ : 101 INVITE, cette expression renvoie 101.
SIP.REQ.HEADER(<header_name>) Renvoie l’en-tête SIP spécifié. Pour <header_name>, 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 (« De »).
SIP.REQ.HEADER(<header_name>).INSTANCE(<line_number>) 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 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 tapant un nombre comme le <line_number>. Les instances d’en-tête sont appariées 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 mais l’un 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(<header_name>).VALUE(<line_number>) Renvoie le contenu de l’instance spécifiée de l’en-tête SIP spécifié. L’utilisation est presque la même que 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(<header_name>).COUNT Renvoie le nombre d’instances d’un en-tête particulier sous forme d’entier. Par exemple, si utilisé dans l’exemple d’en-tête SIP ci-dessus, SIP.REQ.HEADER (« Via ») .COUNT renvoie 2.
SIP.REQ.HEADER(<header_name>).EXISTS Renvoie une valeur booléenne true ou false, 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(<header_name>).LIST Renvoie la liste des paramètres séparés par des virgules dans l’en-tête spécifié. Par exemple, si utilisé sur 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 (<list_item_number>) 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 (« Autoriser ») .LIST.GET (0). Pour extraire le deuxième élément (BYE), vous devez taper SIP.REQ.HEADER (« Autoriser ») .LIST.GET (1). Remarque : Si l’en-tête spécifié contient une liste de paires nom/valeur, la paire nom/valeur entière est renvoyée.
SIP.REQ.HEADER(<header_name>).TYPECAST_SIP_HEADER_T(“<in_header_name>”) Typecasts <header_name> to <in_header_name>. Tout texte peut être typé dans la classe thesip_header_t, après quoi toutes les opérations basées sur l’en-tête peuvent être utilisées. Après avoir effectué cette opération, vous pouvez appliquer toutes les opérations qui peuvent être utilisées avec <in_header_name>. Par exemple, l’expression SIP.REQ.CONTENT_LENGTH.TYPECAST_SIP_HEADER_T compose 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(<header_name>).CONTAINS(<string>). 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 appariées de la dernière (0) à la première.
SIP.REQ.HEADER(<header_name>).EQUALS_ANY(<patset>) Renvoie la valeur booléenne true si un motif associé à <patset> correspond à n’importe quel contenu 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 appariées de la dernière (0) à la première.
SIP.REQ.HEADER(<header_name>).CONTAINS_ANY(<patset>) Renvoie Boolean true si un motif associé à <patset> correspond à n’importe quel contenu 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 appariées de la dernière (0) à la première.
SIP.REQ.HEADER(<header_name>).CONTAINS_INDEX(<patset>) Renvoie l’index du modèle correspondant associé à <patset> si ce modèle correspond à n’importe quel contenu 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 appariées de la dernière (0) à la première.
SIP.REQ.HEADER(<header_name>).EQUALS_INDEX(<patset>) Renvoie l’index du modèle correspondant associé à <patset> si ce modèle correspond à une 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 appariées de la dernière (0) à la première.
SIP.REQ.HEADER(<header_name>).SUBSTR(<string>) 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(<header_name>).AFTER_STR(<string>) 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(<header_name>).REGEX_MATCH(<regex>) 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 : re <delimiter> expression régulière <same delimiter>. L’expression régulière ne peut pas avoir une longueur supérieure à 1499 caractères. Il doit être conforme à la bibliothèque d’expressions régulières PCRE. Reportez-vous à http://www.pcre.org/pcre.txt pour 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 d’expression régulière prise en charge dans cette expression présente quelques différences par rapport à PCRE. Les références arrière ne sont pas autorisées. Vous devriez éviter les expressions régulières récursives ; bien que certaines fonctionnent, beaucoup ne le font pas. Le métacaractère point (.) correspond aux nouvelles lignes. Unicode n’est pas support.SET_TEXT_MODE (IGNORECASE) remplace le ( ? i) option interne spécifiée dans l’expression régulière.
SIP.REQ.HEADER(<header_name>).REGEX_SELECT(<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 le 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”).REGEX_SELECT(“received=[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}”) renvoie reçud=10.102.84.160.
SIP.REQ.HEADER(<header_name>).AFTER_REGEX(<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(<header_name>).BEFORE_REGEX(<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 avant 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, l’expression SIP.REQ.HEADER(“Via”).BEFORE_REGEX(“[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}”) renvoie received=.
SIP.REQ.FULL_HEADER Renvoie l’en-tête SIP entier, y compris le CR/LF de terminaison.
SIP.REQ.IS_VALID Renvoie la valeur booléenne true si le format de la requête est valide.
SIP.REQ.BODY(<length>) 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 sert la demande en cours.
SIP.REQ.CS_VSERVER Renvoie le nom du serveur virtuel de commutation de contenu (CS vserver) qui sert 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 Essai, 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 Essai, cette expression renvoie Essai.
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