# Générateur d'expression de règle SIP

Le générateur de sous-expression permet de générer des conditions de règles complexes issues de sous-expressions en utilisant AND, OR, NOT et le regroupement mis entre parenthèses. Le générateur de règles valide la règle lorsque des modifications sont appliquées, il vous informe également de la non-concordance des parenthèses mais aussi des opérateurs logiques non pris en charge.

Pour afficher cette page de la console d'administration, cliquez sur Serveurs > Types de serveur > Routeurs On demand > nom_odr > SIP On demand router settings > Règles SIP de la stratégie de routage > Ajouter > Générateur de sous-expression.

Pour modifier des règles à l'aide du générateur de règles, vous devez disposer des privilèges d'administration Administrateur.

## Sélectionner un opérande

### Opérandes des stratégies de routage et de service

Selon le protocole que vous sélectionnez, plusieurs opérandes vous sont proposés. Le tableau ci-dessous présente les noms des opérandes tels qu'ils s'affichent dans la console, l'opérande réel tel qu'il apparaît dans l'expression, les protocoles valides par opérande et la description de chaque opérande.

Tableau 1. Opérandes. Le tableau suivant décrit les noms des opérandes affichés dans la console
Opérande | Syntaxe | Description
--- | --- | ---
Méthode SIP | `méthode.demande` | Méthode SIP de la demande. Les valeurs possibles sont INVITE, TRYING, RINGING, ACK, OK et BYE. Si le message n'est pas une demande, cette opérande renvoie la valeur null.
Code réponse SIP | `code.réponse` | Code de réponse de la réponse. Si le message n'est pas une réponse, cette opérande renvoie la valeur -1.
Schéma de l'en-tête de destination | `schéma.uri.destination` | Schéma de la zone d'en-tête de destination.
Schéma de l'URI | `schéma.uri.demande` | Schéma de l'URI.
Schéma de l'en-tête d'origine | `schéma.demande.uri.origine` | Schéma de la zone d'en-tête d'origine.
URI de la requête | `uri.demande` | URI de la demande.
URI de destination | `uri.demande.destination` | URI de la zone d'en-tête de destination.
URI d'origine | `uri.demande.origine` | URI de la zone d'en-tête d'origine.
En-tête d'origine | `demande.origine` | Zone d'en-tête d'origine.
En-tête de destination | `demande.destination` | Zone d'en-tête de destination.
Nom affiché d'en-tête de destination | `nom_d'affichage.demande.destination` | Nom affiché figurant dans la zone d'en-tête de destination.
Nom affiché d'en-tête d'origine | `nom_d'affichage.demande.origine` | Nom affiché de la zone d'en-tête d'origine.
Hôte URI de destination | `hôte.uri.demande.destination` | Port de l'URI de la zone d'en-tête de destination.
Hôte serveur | `serverhost` | Nom d'hôte qualifié complet du serveur. Cet opérande ne prend pas en charge les opérateurs numériques tels que `>, >=, <, <=`.
Port | `port` | Port d'écoute sur lequel la demande a été reçue.
En-tête de contact | `contact.demande` | Zone d'en-tête du contact.
Identificateur URI de contact | `uri.contact.demande` | URI de la zone d'en-tête du contact
Hôte client | `clienthost` | Nom d'hôte qualifié complet du client. Il s'agit de la valeur du nom d'hôte de la commande IP (Internet Protocol). Cet opérande ne prend pas en charge les opérateurs numériques tels que `>, >=, <, <=`.
ipv4_client | `clientipv4` | Adresse IP de l'ordinateur client utilisant le type d'adresse à quartet descripteur Internet Protocol version 4 (IPv4) `n.n.n.n`.
ipv6_client | `clientipv6` | Adresse Internet Protocol version 6 (IPv6) 128 bits du type `x:x:x:x:x:x:x:x` conforme au protocole RFC 1924 de l'ordinateur client.
ipv4_serveur | `serveripv4` | Adresse IP de l'ordinateur serveur au format IPv4 à quatre éléments séparés par des points `n.n.n.n`.
ipv6_serveur | `serveripv6` | Adresse IPv6 128 bits du type `x:x:x:x:x:x:x:x` conforme au document RFC 1924 de l'ordinateur serveur.
Transport demande | `transport.demande` | Transport de la demande.
Utilisateur de l'URI de la demande | `utilisateur.uri.demande` | Utilisateur de l'URI de la demande.
Utilisateur URI d'origine | `utilisateur.uri.demande.origine` | Utilisateur de la zone d'en-tête d'origine.
Utilisateur URI de destination | `utilisateur.uri.demande.destination` | Utilisateur figurant dans la zone d'en-tête de destination.
Hôte URI de la demande | `hôte.uri.demande` | Hôte de l'URI de la demande.
Hôte URI d'origine | `hôte.uri.demande.origine` | Hôte de la zone d'en-tête d'origine.
Port URI de la demande | `port.uri.demande` | Port de l'URI de la demande.
Port URI d'origine | `port.uri.demande.origine` | Port de l'URI de la zone d'en-tête d'origine.
Hôte URI de destination | `hôte.uri.demande.destination` | Hôte figurant dans la zone d'en-tête de destination.
Nom d'en-tête | `header$<nom>` | Nom et valeur d'en-tête. Par exemple, l'expression `header$Host='localhost'` teste une demande pour voir si elle contient un en-tête d'hôte HTTP associé à la valeur `localhost`. Pour vérifier la présence ou l'absence de l'en-tête d'hôte, utilisez l'une des expressions suivantes :
    header$Host IS NOT NULL
    header$Host IS NULL
Heure | `time` | Cet opérande permet de définir la date et l'heure du jour où une demande donnée doit être traitée. heure_de_début et heure_de_fin sont deux zones facultatives. Si une demande est reçue en dehors de la fenêtre définie, la demande ne sera pas traitée. Le format des zones Heure de début et Heure de fin est le suivant : `jour_de_la_semaine/jour_du_mois/mois/année::heure:minute:seconde`. Par exemple : le jeudi 11 avril 2007 à 13:03:45 est indiqué sous la forme : Thu/11/Apr/2007::13:03:45 Le caractère générique * peut être utilisé dans toutes les zones. Par exemple, le 1er de chaque mois est indiqué sous la forme */1. Les valeurs du jour_de_la_semaine sont Sun, Mon, Tue, Wed, Thu, Fri, Sat et les valeurs du jour_du_mois vont de 1 à 31. La valeur mois est une valeur non numérique représentant les douze mois : Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec. La valeur année est constituée des quatre chiffres de l'année. Par exemple : 2007. La valeur de l'heure est l'heure du jour au format 24 heures. Par exemple, 8 h est représenté par ::8. Les minutes et les secondes sont exprimées par des nombres compris entre 0 et 59. La barre oblique (/) est utilisée pour séparer les paramètres de la date, les deux points répétés (::) sont utilisés pour distinguer les valeurs de la date et de l'heure et les deux points (:) sont utilisés pour séparer les paramètres de l'heure du jour. Notez que le résultat booléen de la règle entière dans laquelle l'opérande time est utilisé détermine l'action de routage à entreprendre.
Pourcentage | `percentage$<val>` | L'opérande de pourcentage a pour valeur `true` pour un pourcentage fixe du temps. Par exemple, `percentage$50` a pour valeur `true` 50 % du temps.
Augmentation progressive | `rampup$<heure_début>` `$<heure_fin>` | L'opérande `rampup` renvoie la valeur `true` pendant un pourcentage de temps variable. Il est toujours associé à la valeur `false` avant `<heure_début>` et à la valeur `true` avant `<heure_fin>`. Au fur et à mesure que l'heure progresse de l'`<heure_de_début>` vers l'`<heure_de_fin>`, il prend la valeur `true`, un pourcentage augmentant de façon linéaire. Le format de `<heure_début>` et `<heure_fin>` est `jour/mois/année::heure:mn:s`. où `jour` correspond au jour du mois, `mois` à l'un des douze mois : Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec, `année` l'année représentée par 4 chiffres, `heure` l'heure exprimée par 2 chiffres sous le format 24 heures, et `min` et `sec` les valeurs d'heure et de secondes exprimées par 2 chiffres. Par exemple : `rampup$01/Jan/2007::08:00:00$01/Jan/2007::17:00:00` est parfois associé à la valeur `true` à 8 heures le 1er janvier 2007 et est toujours associé à la valeur `true` à 17 heures le même jour, une fois l'heure de fin atteinte progressivement.

## Opérateur

Tableau 2. Opérateurs de spécification de trace
Opérateur | Description
--- | ---
Egal à et ignorant la casse (EQUALSIGNORECASE) | Le signe Egal ignore l'opérateur de casse. La casse des chaînes est ignorée. `'ABC' EQUALSIGNORECASE 'abc'` renvoie true. `('ABC' = 'abc')` renvoie false.
N'est pas égal (< >) | L'opérateur N'est pas égal stipule que la valeur de l'opérande n'est pas égale à la valeur saisie.
Dans (IN) | `chaîne IN liste de chaînes` renvoie 'true' si la chaîne sur la gauche correspond exactement (avec respect de la casse) à une chaîne mentionnée à droite. Par exemple : ’adrian’ in `('keith','eric','kalyan','david', 'adrian and etc')` renvoie 'false'. `'adrian'` in `('tom','adrian')` renvoie 'true'. ’adrian’ in `('Tom','Adrian')` renvoie 'false'. `entier IN liste d'entiers` : `1` in `(1,2,3,4,5)` renvoie 'true'. `6` in `(1,2,3,4,5)` renvoie 'false'.
Similaire à (LIKE) | Canevas de recherche de valeurs d'opérande de chaîne. La valeur doit contenir le caractère générique (`%`) à la position où la correspondance de masque est censée commencer. Par exemple, l'expression :
    host LIKE %blanca
permet de rechercher les occurrences du terme `blanca` et de tout autre terme se terminant par `blanca`, alors que l'expression :
    host LIKE blanca%
permet de rechercher les occurrences du terme `blanca` et tout autre terme commençant par `blanca`. L'expression :
    host LIKE %blanca%
permet de rechercher les occurrences du terme `blanca` et de tout autre terme contenant la chaîne `blanca`.
Similaire à et ignorant la casse (LIKEIGNORECASE) | Cet opérateur exprime une recherche de correspondance de canevas pour des valeurs d'opérande de type chaîne. La casse des chaînes est ignorée.
N'est pas Null (IS NOT NULL) | Une validation de la requête indique que le paramètre demandé existe.
Concaténer (+) | Cet opérateur interprète `'abc'+'def'` comme `'abcdef'`.
Similaire et dans (LIKEIN) | Cet opérateur exprime `chaîne likein (chaîne1, chaîne2, chaîne3,...)`, renvoie 'true' si la chaîne à gauche de l'opérateur `likein` correspond à une ou plusieurs des chaînes (chaîneN).
Est Null (IS NULL) | Une validation de la requête indique que le paramètre demandé n'existe pas. Teste la présence d'un opérande avec une valeur `NULL`.
Egal à ( = ) | Cet opérateur d'égalité recherche une correspondance respectant la casse.
Supérieur à (>) | Prend la valeur du résultat logique standard.
Supérieur ou égal à (>=) | Prend la valeur du résultat logique standard.
Inférieur à (<) | Prend la valeur du résultat logique standard.
Inférieur ou égal à (<=) | Prend la valeur du résultat logique standard.
Compris entre (BETWEEN) | Utilisé avec `AND` pour sélectionner une plage de valeurs, la première valeur (la plus faible) et la dernière valeur (la plus élevée). Opèrent ensemble sur des nombres et des dates.

## Valeur

Selon l'opérateur que vous aurez choisi, saisissez une valeur pour la sous-expression que vous choisissez de créer.

## Générer une sous-expression

Générez la sous-expression issue de l'opérande, de l'opérateur et des valeurs que vous avez spécifiés.

## Ajouter à la fin

Cliquez pour ajouter à la case située dans le panneau des règles.

Informations connexes :
Règles SIP de la stratégie de routage
Règles SIP de la stratégie de service

Nom de fichier : sip_rulebuilder_detail.html