Expressions SIP
Le langage d’expressions de politique 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 politiques de tout protocole pris en charge qui fonctionne sur la base d’une 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 politiques de répondeur. Seules les actions DROP, NOOP ou RESPONDWITH sont autorisées sur un serveur virtuel d’équilibrage de charge SIP. Les politiques du 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 politique 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 |
---|---|
MÉTHODE SIP.REQ. | 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 type 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 requête SIP de type INVITE sip:16 @10 .102.84. 181:5060 ; transport=udp SIP/2.0, cette expression renvoie ssip:16 @10 .102.84. 181:5060 ; transport=udp. |
SIP.REQ.URL.PROTOCOL | Renvoie le protocole URL. Par exemple, pour une URL SIP de type 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 sip : 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.DOMAINE | 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.NOM D’UTILISATEUR | Renvoie le nom d’utilisateur qui précède le caractère @. Par exemple, pour une URL SIP de type 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 de type 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 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. <sip:16@sip_example.com>Par exemple, pour un en-tête SIP To de type To : « 16 » ; tag=00127f54ec85a6d90cc14f45-53cc0185, cette <sip:16@sip_example.com> expression renvoie « 16 » ; 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 type 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 type 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 type 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 de type From : « 12 » <sip:12@sip_example.com> ; tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie <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 de type From : « 12 » <sip:12@sip_example.com> ; tag=00127f54ec85a6d90cc14f45-53cc0185, cette expression renvoie <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 contenant la valeur From : « 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 contenant la valeur From : « 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 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 Via : SIP/2.0/UDP 10.102.84. 180:5060 ; Branch=Z9HG4BK03E76D0B ; rport=5060 ; received=10.102.84.160, cette expression renvoie 5060. |
SIP.REQ.VIA.RPORT | Renvoie la valeur de la paire nom/valeur du rapport. Par exemple, pour l’en-tête Via Via : SIP/2.0/UDP 10.102.84. 180:5060 ; Branch=Z9HG4BK03E76D0B ; rport=5060 ; received=10.102.84.160, cette expression renvoie 5060. |
SIP.REQ.VIA.BRANCH | Renvoie la valeur de la paire nom/valeur de la branche. Par exemple, pour l’en-tête Via 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 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.CALLLID | 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. |
|
Renvoie l’en-tête SIP spécifié. |
|
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 |
|
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, s’il est utilisé dans l’exemple d’en-tête SIP figurant dans l’entrée du tableau précédent, SIP.REQ.HEADER (« Via ») .VALUE (1) renvoie SIP/2.0/UDP 10.102.84. 180:5060 ; Branch=Z9HG4BK03E76D0B ; rport=5060. |
|
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. |
|
Renvoie une valeur booléenne vraie ou fausse, selon que l’en-tête spécifié existe ou non. Par exemple, s’il est utilisé dans l’exemple d’en-tête SIP ci-dessus, SIP.REQ.HEADER (« Expires ») .existsRenvoie la valeur true, tandis que SIP.REQ.HEADER (« Caller-ID ») .EXISTS renvoie la valeur false. |
|
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 ( |
|
|
|
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. |
|
Renvoie la valeur booléenne true si un modèle associé à \ |
|
Renvoie la valeur booléenne true si un modèle associé à \ |
|
Renvoie l’index du modèle correspondant associé à \ |
|
Renvoie l’index du modèle correspondant associé à \ |
|
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”) renvoie « rport=5060”. SIP.REQ.header (« Via ») .SUBSTR (« rport=5061”) renvoie une chaîne vide. |
|
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, l’expression SIP.REQ.HEADER (« Via ») .AFTER_STR (« rport= ») renvoie 5060. |
|
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é. |
|
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, l’expression SIP.REQ.HEADER (« Via ») .REGEX_SELECT (« received= [0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3} ») renvoie received=10.102.84,160. |
|
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, l’expression SIP.REQ.HEADER (« Via ») .AFTER_REGEX (« received= ») renvoie 10.102.84.160. |
|
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. 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}. [0-9] {1,3} ») renvoie 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. |
|
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. |
MÉTHODE SIP.RES | Renvoie la méthode de réponse extraite de la chaîne de méthode request dans l’en-tête CSeq. |