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
<!--NeedCopy-->
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.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 de 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 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 | Renvoie 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( |
Renvoie l’en-tête SIP spécifié. Pour |
SIP.REQ.HEADER( |
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 |
SIP.REQ.HEADER( |
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( |
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( |
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( |
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 ( |
SIP.REQ.HEADER( |
Typecasts |
SIP.REQ.HEADER( |
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( |
Renvoie la valeur booléenne true si un motif associé à |
SIP.REQ.HEADER( |
Renvoie Boolean true si un motif associé à |
SIP.REQ.HEADER( |
Renvoie l’index du modèle correspondant associé à |
SIP.REQ.HEADER( |
Renvoie l’index du modèle correspondant associé à |
SIP.REQ.HEADER( |
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( |
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( |
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 |
SIP.REQ.HEADER( |
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 ; reçu = 10.102.84.160, l’expression SIP.REQ.HEADER (« Via ») .REGEX_SELECT (« reçu =[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} ») retours reçus = 10.102.84.160. |
SIP.REQ.HEADER( |
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( |
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( |
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. |