• Aucun résultat trouvé

Langage de script de GateScript

// le code de cette classe ...

... } }

Apr`es la compilation de cette classe, il suffit d’ajouter le nom ”JpegScale” dans le fichier de configuration des fonctions ”fonctions.conf” pour que l’environnementGateScript puisse l’ajouter dans sa librairie extensible des fonctions de traitement.

4.4 Langage de script de GateScript

L’environnement d’ex´ecution GateScript offre un langage de script permettant de pro-grammer un service actif. Ce langage (appel´e ”GateScript” par la suite) fournit des variables pr´ed´efinies concernant un protocole donn´e et une librairie extensible des fonctions travaillant sur le contenu des donn´ees. Comme c’est un langage de script, il permet aux utilisateurs d’´ecrire des programmes simples d’une mani`ere presque d´eclarative - c’est `a dire d´ecrire ce qu’il faut faire mais pas comment il faut le faire.

Nous verrons ci-dessous les structures principales du langage GateScript. Une description plus formelle est d´ecrite en annexe 8.4.

4.4. LANGAGE DE SCRIPT DE GATESCRIPT 69

4.4.1 Instructions

Un programme GateScript se compose d’instructions. Chaque instruction peut examiner les valeurs des variables et appeler des fonctions appropri´ees. On peut acc´eder `a la valeur d’une variable en pr´efixant son nom par le caract`ere dollar $.

Les variables d´efinies par le programmeur sont d´eclar´ees en utilisant l’instructionsetqui est utilis´ee aussi pour affecter une nouvelle valeur `a une variable.

Il y a plusieurs types d’instructions : – instruction d’affectation, e.g.

set State $AckState;

– appel de fonction, e.g.

WriteToCache $Ack_Number

La fonction WriteToCache enregistre le paquet en question dans un fichier de cache dont le nom est une valeur par d´efaut. Ceci est d´etaill´e dans l’exemple du serviceTCP snoop dans la section 4.6.

– instruction conditionnelle, e.g.

if ($destination_address = $Client) then WriteToCache;

endif

– instruction d’´ev´enementpour attendre une condition reli´ee `a un ´ev´enement et ex´ecuter une instruction quand l’´ev´enement est re¸cu, e.g.

onEvent $EventName = "Deconnexion" then InjectPacketFilter "-d $Hote"; endEvent

Quand un moniteur signale l’´ev´enement Deconnexion, le service ex´ecute la fonction

InsertPacketFilter qui injecte un filtre de paquet au noyau pour r´ecup´erer des pa-quets.

Le programme le plus simple de GateScript consiste seulement en un ensemble de fonc-tions ordonn´ees. Chaque fonction ´etant ex´ecut´ee pour un traitement sp´ecifique sur des donn´ees de PDU. Dans des cas plus complexes, le traitement de PDU peut d´ependre des variables.

4.4.2 Variables

Dans GateScript il y a quatre types de variables : les variables de protocole concernant le protocole, les variables d´efinies par le programmeur, les variables d’activation concernant les param`etres incluant la commande d’activation de service de l’utilisateur, et les variables repr´esentant l’´etat de l’environnement :

• Les variables de protocole sont reli´ees `a un protocole donn´e et repr´esentent les champs d’en-tˆete de protocole, les propri´et´es, les ´el´ements de contenu de PDU, ou des ´ev´enements

signal´es venant des moniteurs. Ces variables sont indiqu´ees dans le fichier de description de la structure des PDUs du protocole. Le fichier de description des PDUs est utilis´e pour g´en´erer l’analyseur et le g´en´erateur de ces PDUs. Ces variables de protocole sont automatiquement pass´ees aux programmes de script par le moteur d’ex´ecution de

GateScript. Par exemple, si un programme de script travaille sur un flot TCP, il peut acc´eder `a la variable$windowcorrespondant `a la fenˆetre annonc´ee par le r´ecepteur la va-riable$SYNrepr´esentant le drapeau de SYN TCP (voir l’annexe 8.5 pour la description des paquets TCP). Pour des protocoles textuels, consid´erons l’exemple du protocole de HTTP par lequel un programme de script aura l’acc`es aux variables $Content Type

et$Content Length permettant un traitement int´eressant bas´e sur le type et la taille d’un objet contenu, par exemple, dans une r´eponse de HTTP. L’analyseur de PDU assigne les valeurs identifi´ees dans une PDU `a ces variables chaque fois qu’une nouvelle PDU arrive.

• Les variables d´efinies par le programmeur doivent ˆetre d´eclar´ees avant leur utilisation. Par exemple la variable $State donn´ee dans l’exemple ci-dessus

• Les variables d’activation - quand l’utilisateur ou une application utilise le protocole d’activation de service de ProAN d´ecrit `a la section 3.3.6, la commande d’activation peut inclure des param`etres par d´efaut pour le service. Ces param`etres sont disponibles au programme deGateScript sous forme des variables. Par exemple la variable $Hote

du service de cache dans l’exemple `a la section 4.6.

• Les variables d’´etat - elle concerne l’´etat de l’environnement et sont d´efinies par les moniteurs de l’environnement. Les programmes de GateScript peuvent consulter les valeurs de ces variables pour surveiller l’environnement d’ex´ecution afin d’effectuer des actions appropri´ees. Par exemple la variable $Etat prendra la valeur ”D´econnexion” si l’hˆote surveill´e par le moniteur de d´econnexion devient d´econnect´e.

Des variables peuvent ˆetre combin´ees en employant des op´erateurs pour former des ex-pressions. Des appels de fonctions dans les expressions sont s´epar´es des op´erateurs par des crochets [ ] :

if ([CheckIfExistPacket $Ack_Number]) then ForwardFromCacheToClient $Ack_Number; return; endif

La fonction ”CheckIfExistPacket” v´erifie si le paquet demand´e existe d´ej`a dans le cache ou pas.

4.4.3 Ev´´ enements

Quand un moniteur d´etecte une modification dans l’´etat de l’environnement, il le signale `

a un service par un ´ev´enement. Chaque ´ev´enement a un nom unique et une liste des variables. Consid´erons l’exemple suivant : un service souscrit `a un moniteur de congestion qui d´etecte

4.5. MOTEUR D’EX ´ECUTION DE GATESCRIPT 71