Ceci est une ancienne révision du document !
Modules standards W
Fonctions communes
Tous les modules possèdent obligatoirement 4 fonctions :
init⇒ pour initialiser l'état interne du module (allocation mémoire si besoin, etc.). Appelé automatiquement au premier appel de fonction du moduleend⇒ pour libérer les ressources allouées dansinit. Appelé automatiquement à la terminaison du programmevers(version)⇒ renvoi la version en cours du module (variableversionNumber ou Dynamic)error(modError)⇒ renvoi la dernière erreur spécifique au module (variablemodErrorNumber)
Le pseudo module template permet de tester ces 4 fonctions.
cipher
Module de chiffrement et déchiffrement de données.
toAES128(key, plaintext, encrypted): chiffrement AES 128 bits deplaintexten utilisant la clékey(16 octets). Résultat chiffré dansencryptedfromAES128(key, encrypted, plaintext): déchiffrement AES 128 bits deencrypteden utilisant la clékey(16 octets). Résultat en clair dansplaintexttoAES192(key, plaintext, encrypted): chiffrement AES 192 bits deplaintexten utilisant la clékey(16 octets). Résultat chiffré dansencryptedfromAES192(key, encrypted, plaintext): déchiffrement AES 192 bits deencrypteden utilisant la clékey(24 octets). Résultat en clair dansplaintexttoAES256(key, plaintext, encrypted): chiffrement AES 256 bits deplaintexten utilisant la clékey(16 octets). Résultat chiffré dansencryptedfromAES256(key, encrypted, plaintext): déchiffrement AES 256 bits deencrypteden utilisant la clékey(32 octets). Résultat en clair dansplaintext
conv
Module permettant de faire des conversions de texte en hexadécimal et Base64.
toHexa(plaintext, hexadecimal): convertit le texte en clairplaintexten une chaine hexadécimalehexadecimalfromHexa(heaxdecimal, plaintext): convertit la chaine en hexadécimalhexadecimalen son équivalent en texte clairplaintexttoBase64(plaintext, base64encoded): convertit le texte en clairplaintexten une chaine codée en Base64base64encodedfromBase64(base64encoded, plaintext): convertit la chaine en Base64base64encodeden son équivalent en texte clairplaintext
file
Module permettant de gérer les fichiers de l'OS de l'hôte exécutant le programme en cours.
get(path, content): lit le fichier, dont le chemin complet est donné danspath, et renvoi son contenu danscontent. Renvoi vide si le fichier est inconnu.set(path, content): écrit la variable Dynamiccontentdans le fichier dont le chemin complet est donné danspath. Génère une exception si le chemin est inconnu, inaccessible, ou si les données ne peuvent pas être écrites (droits,…)size(path, lentgh): renvoi la taille, dans la variable Numberlengthdu fichier dont le chemin complet est donné parpathdelete(path): supprimer le fichier dont le chemin complet est donné danspath. Génère une exception si le fichier ne peut pas être supprimé.rename(oldPath, newPath): renomme/déplace le fichieroldPathennewPath. Génère une exception en cas d'erreur (droits, FS différents, chemin cible inexistant).append(path, content): écrit la variable Dynamiccontentà la fin du fichier dont le chemin complet est donné danspath. S'il n'existait pas, le fichier est créé. Génère une exception en cas d'erreur.dir(path, fileList): prend en compte le chemin donné parpathet renvoi, dans la variablefileList, la liste des fichiers et répertoires trouvés dans le répertoire indiqué, en multi-champs. Les fichiers spéciaux ne sont pas retournés (Unix seulement), ni les pseudo fichiers.et..
hash
Module permettant de calculer différents hash de données, selon divers algorithmes.
MD2(plaintext, hashedText): calcul le hash selon l'algorithme MD2 des données fournies dansplaintextet renvoi le résultat dans la variablehashedTextMD4(plaintext, hashedText): calcul le hash selon l'algorithme MD4 des données fournies dansplaintextet renvoi le résultat dans la variablehashedTextMD5(plaintext, hashedText): calcul le hash selon l'algorithme MD5 des données fournies dansplaintextet renvoi le résultat dans la variablehashedTextSha1(plaintext, hashedText): calcul le hash selon l'algorithme Sha1 des données fournies dansplaintextet renvoi le résultat dans la variablehashedText
json
NOTA : module/doc à revoir (treefetch et print)
decode(jsonText, extractedKey, extractedValue): réalise le décodage du contenu json présent dans la variable chaînejsonText, et renvoie l'ensemble des clés/valeurs décodées dans les chaînesextractedKeyetextractedValue. Les informations globales liées au contenu json qui vient d'être décodé restent mémorisées dans le module.print(extractedKey, extractedValue, prettyPrint): restitue de manière lisible dans la variable chaîneprettyPrintle contenu json déjà décodé dans les 2 chainesextractedKeyetextractedValue.treeFetch(fetchParameters, done): récupère une série de clés, en utilisant les informations données par la hashtablefetchParameters. La variable Numericdonerenvoie@truequand la récupération est terminée,@falsesinon. La hashtablefetchParametersdoit contenir en entrée les deux chaines issues du décodage json.fetchParameters.DecodedKeydoit recevoirextractedKeyetfetchParameters.DecodedValuedoit recevoirextractedValue.
lex
Module permettant de faire des analyses syntaxiques sur des chaines, selon des règles données en paramètre.
compile(lexRules, compiledRules, [rulesNameSet]): à partir des règles lex, paramètrelexRules, génère le format interne utilisé par le module, paramètrecompiledRules, pour les analyses de chaines en entrée. Si le paramètrerulesNameSetest présent, de type hashtable, il est rempli avec les constantes correspondant aux numéros de chaque règleanalyze(compiledRules, value, tokenList): à partir des règles au format interne, paramètrecompiledRulesfourni par la fonctioncompile, lit la chaine paramètrevalueet génère le résultat de l'analyse syntaxique dans le paramètretokenList. Le résultat contient les tokens trouvés, selon 3 champs en multi-champs ; chaque sous-champ donne l'élément trouvé, dans l'ordre :token{1, x}: valeur du token en hexa (à décoder avec conv&fromHexa)token{2, x}: numéro de la regle trouvée pour le token, à comparer avec les constantes créées suite à l'appel de la fonction // compile// (rulesNameSet)token{3, x}: position du token trouvé dans la chaine sourcevalue
getToken(tokenList, tokenIndex, tokenSet): renvoie dans la hashtable paramètretokenSetle token trouvé (.tokenNumber.tokenValue.tokenLocation), indice dans le paramètretokenIndex, à partir de la liste de tous les tokens trouvés depuis le dernier analyze (paramètretokenList). Si l'indice du token demandé n'est pas présent dans le résultat,.ruleNumberest renvoyé à 0.
lzw
Module permettant de compresser et décompresser des données, algorithme LZW compatible au format lzw utilisé dans les fichiers PDF.
set(plaintextThenCompressed): compresse les données contenues dans la variable DynamicplaintextThenCompressed, et renvoi dans la même variable les données compressées, compatibles Lzw-PDF.get(compressedThenPlaintext, reverse): décompresse les données fournies dans la variable DynamiccompressedThenPlaintext, et renvoi dans la même variable les données en clair. Mettre le paramètrereverseà@truepour décompresser des données spécifiquement au format GIF ; par défaut à@false(compatible Lzw-PDF).
NOTA : revoir la gestion des numéros des images (del_image change les numéros)
beginDoc(pdfParameterSet): démarre un nouveau document Pdf.parameterSetest une hashtable qui doit contenir les champs suivants, permettant d'initialiser le document :.Title: titre du document (string).Fonts: liste des fontes qui seront utilisées dans le document, chaîne contenant les noms des fontes en multi-champs (cf. tableau).Pages: nombre total de pages du document.Format: nombre donnant la taille de chaque page - A4P A4L A3P A3L (1 2 3 4)
endDoc(pdfContent): clôture le document Pdf en cours, et renvoie tout son contenu dans la chainepdfContentaddPage(): valide l'ajout d'une page au document Pdf en cours, à appeler après avoir ajouter les éléments de la page grâce aux fonctions qui suivent. Les pages sont toutes compactées avec l'algorithme Lzw.addText(pdfParameterSet, string): ajoute à la page courante la chainestringselon le formatage décrit dans la hashtablepdfParameterSetqui doit contenir les champs suivants :.X,.Y,.W,.H: position x,y et dimension w,h du cadre englobant la chaîne.Font: nombre donnant la police à utiliser pour le rendu de la chaîne, indice dans la liste des polices envoyée à la fonctionbeginDoc.Size: taille de la police pour la fonte.Color: couleur du texte, format RGB (R * 65536 + G * 256 + B)
addGraph(pdfParameterSet): ajoute à la page courante un élément graphique décrit dans la hashtable <input> qui doit contenir les champs suivants :.X,.Y,.W,.H: position x,y et dimension w,h du cadre englobant l'élément.StrokeColor: couleur des lignes, si affichées, de l'élément.FillColor: couleur de remplissage de l'élément.LineThickness: nombre donnant l'épaisseur des traits, de 0 à 9.Dotted: nombre indiquant le type de ligne pointillé à utiliser, ou aucun, de 0 à 9.Type: chaîne indiquant le type d'élément graphique à insérer :LligneCcadre sans remplissageRremplissage de la zone sans cadreDcadre avec remplissage
addCab128(pdfParameterSet, string): ajoute à la page la chaînestringtransformée en code à barre EAN128,pdfParameterSetdoit contenir les éléments suivants :.X,.Y,.H: position x,y et hauteur h des barres
addImage(input): ajoute à la page courante une image déjà chargée au préalable, selon les informations décrites dans la hashtablepdfParameterSetqui doit contenir les champs suivants :.X,.Y: coordonnées x,y du coin haut/gauche de l'image dans la page.Image: numéro de l'image
loadImage(image, format): charge dans le module, pour un usage ultérieur, l'image dont le contenu est passé dans la chaîneimage. La première image chargée porte le numéro 1, etc. Formats supportés, chaîneformat: BMP (32bpp) et GIF.delImage(image): supprime l'image numéro <image> du module ; elle ne pourra plus être utilisée par la suite (NOTA pbm de numéro avec suppression)listing(pdfParameterSet, textContentThenPdfContent): créé un document Pdf, de type listing, avec les données textuelle detextContentThenPdfContentet renvoie le contenu du Pdf généré danstextContentThenPdfContent. Les éléments permettant de créer le listing sont donnés par la hashtablepdfParameterSetqui doit contenir les champs suivants :.Title: titre du listing (texte).Format: nombre donnant le format de la page à utiliser : A4P A4L (1 2)
Liste des fontes ⇒
| Courier | 1 |
| Courier_Bold | 2 |
| Courier_BoldOblique | 3 |
| Courier_Oblique | 4 |
| Helvetica | 5 |
| Helvetica_Bold | 6 |
| Helvetica_BoldOblique | 7 |
| Helvetica_Oblique | 8 |
| Times_Roman | 9 |
| Times_Bold | 10 |
| Times_Italic | 11 |
| Times_BoldItalic | 12 |
| Symbol | 13 |
| ZapfDingbats | 14 |
random
Module permettant de générer des nombres pseudo-aléatoires, algorithme Mersenne twister.
setSeed(seedValue): utilise le nombreseedValuedonné, pour initialiser le générateur de nombres pseudo-aléatoiresget(nextRandomNumber): renvoi dansnextRandomNumberle prochain nombre pseudo-aléatoire calculé par le générateur (nombre entier)
shm
NOTA : module à finir, revoir doc (newprocessshmreader/writer) Module gérant la communication inter-processus, basée sur des messages textes. Chaque processus possède une queue qui permet de recevoir les messages émis par les autres processus.
get(content): renvoi danscontentle prochain message reçu depuis la queue interne du processus en cours. S'il n'y a pas de message à lire, renvoi vide.set(textMessage, processName): envoi le message textetextMessageau processus identifié parprocessName. L'identifiant d'un process est le nom donné au module principal dans l'instructionbeginoubackgrounddu programme W.
sock
Module gérant la communication sockets, côté serveur et côté client. Les données transitent en clair.
server(portNumber): créé un point d'entrée serveur sur le n° deportNumberindiqué (n° autorisés : 1024 à 65535 uniquement). Le module ne gère qu'un seul serveur actif au même moment.wait(timeout, clientSock): attend une demande de connexion entrante depuis un client. Si une demande de connexion est acceptée,clientSockcontient en retour un id de connexion, à mémoriser car il servira a identifier la connexion à utiliser lors des lecturesgetet écrituressetentre ce client et le serveur. Si aucune connexion n'est demandée au bout du délaitimeout(en secondes), l'id renvoyé dansclientSockest négatif, confirmant qu'aucune de demande de connexion n'est arrivée dans le délai indiqué. Le module gère plusieurs connexions entrantes simultanées.stopServer: supprime le point d'entrée serveur créé avecserver.connect(host, portNumber, socket): initie une connexion socket au serveurhostsur le n° deportNumber(sans limitation de numéro).hostpeut contenir un nom de serveur, mais aussi une adresse IP v4. Quand la demande est acceptée par le serveur,socketcontient en retour un id de connexion, à mémoriser car il servira a identifier la connexion à utiliser lors des lecturesget/ écrituressetentre ce client et le serveur. Quand la demande est refusée, une exception est générée. Le module gère plusieurs connexions sortantes simultanées.stop(socket): arrête la connexion identifiée par l'idsocket, que ce soit la partie cliente donnée parconnectaussi bien que la partie serveur donnée parwait.get(socket, data, timeout): lit les données venant de l'autre côté de la connexion identifiée par l'idsocket. Les données lues sont renvoyées dans la chaînedata. Si aucune donnée d'est disponible au bout du délaitimeoutdonné, (en secondes), la chaînedataest renvoyée vide.set(socket, data): écrit les données dedatasur la connexion identifiée par l'idsocket.
ssh
Module basé sur lib_ssh permettant l'accès sécurisé à un serveur.
openSession(host, username, password): ouvre une connexion sécurisée vers le serveurhost(nom ou adresse IP), en utilisant l'authentificationusername/passwordendSession: ferme la connexion couranteexecChannel(command, response, timeout): exécute la commandecommandsur le serveur distant, et lit la réponse dansresponse, en utilisant la paramètretimeoutcomme délai de lecture (en seconde).openChannel: ouvre un pseudo terminal sur le serveur distant.closeChannel: termine le pseudo terminal distant.readChannel(response, timeout): lit la réponse du serveur distant dansresponse, en utilisanttimeoutcomme délai de lecture (en seconde).writeChannel(command): exécute la commandecommandsur le serveur distant
Pour l'exécution de commandes ponctuelles, le worflow typique d'exécution est le suivant :
; invoke ssh&openSession(host, user, pwd) ; ; do something ; invoke ssh&execChannel(cmd, res, timeout) ; ; do another thing ; invoke ssh&execChannel(cmd, res, timeout) ; ; terminate invoke ssh&endSession ;
Pour l'exécution de plusieurs commandes à la suite les unes des autres, tel une émulation de terminal distant, voici le workflow à utiliser :
; invoke ssh&openSession(host, user, pwd) invoke ssh&openChannel ; ; read login information invoke ssh&readChannel(res, timeout) ; loop ; invoke ssh&writeChannel(cmd) ; invoke ssh&readChannel(res, timeout) ; endloop ; ; terminate invoke ssh&endSession ;
system
Module gérant les liens avec le shell et l'OS hôte.
execute(command, returnCode, [capturing]): execute la commande OScommanddans un shell. Renvoi le code retour de la commande dansreturnCode. SI le 3ème paramètrecapturingest fourni, il contient en retour la sortie générée par la commande dans le terminal (sortie standard)getEnv(varName, value): renvoi dansvaluele contenu de la variable d'environnement (dans la session courante) nomméevarName. Génère l'exception EXMOD_SYSTEM_UNKNOWNVARENV si la variable d'environnement est inconnuecreateEnv(varName, value): créé la variable d'environnement nomméevarNamedans la session courante, avec la valeurvalue. Génère l'exception EXMOD_SYSTEM_SETENV si la variable est déjà présente (utiliserupdateEnvdans ce cas)updateEnv(varName, value): met à jour la variable d'environnementvarNameavec la valeurvalue. Génère l'exception EXMOD_SYSTEM_SETENV si la variable est inconnue de la session en cours.deleteEnv(varName): supprime la variable d'environnement nomméevarNamede la session courante. Génère l'exception EXMOD_SYSTEM_SETENV si la variable est inconnuegetOS(OScode): renvoi un code, dans le paramètreOScode, indiquant le type de l'OS hôte du programme en cours : Windows, Linux…getHostname(name, ip): renvoi le nom (dansname) et l'addresse ip (dansip) de l'hôte qui exécute le programme en courssendSignal(pid, signalNumber): envoi le signal numérosignalNumberau processus identifié par son numéropid. Seuls les 3 signaux SIGTERM, SIGINT, SIGUSR1 sont pris en charge. Les autres sont ignorés. Fonction compatible Unix/Windows mais sous Windows, ce sont des évènements qui sont générés, pas des signaux ; SIGTERM et SIGINT génèrent un évènementGlobal\\wterm<pid>et SIGUSR1 génère un évènementGlobal\\wdebug<pid>sleep(duration): endort le process en cours, pour une durée dedurationsecondes
time
Module permettant de manipuler des horodates, en TU et temps local, de mesurer le temps passé (chrono) et de gérer des alarmes temporelles.
startChrono: démarre le chronomètre, pour mesurer une duréelapChrono(duration): donne le temps passé en secondes depuis le dernier appel de start ou lap (variable Numberduration)setUTC(timeParameterSet, format, date): mémorise dans la hashtabletimeParameterSetla date UTC passée dansdateselon le formatformat. Le résultat est stocké dans.timestampet.offsetsetLocal(timeParameterSet, format, date): idem setUTC ci-dessus mais sur une date fournie dans le fuseau localsetNowLocal(timeParameterSet): mémorise la date locale en cours, résultat dans la hashtabletimeParameterSetidem ci-dessussetNowUTC(timeParameterSet): idem setNowLocal ci-dessus maus sur une date fournie en UTCset(timeParameterSet, format, date): mémorise dans la hashtabletimeParameterSetla date passée dansdateselon le formatformat, format qui indique le fuseau de la date fournie, selon la norme ISO8601getUTC(timeParameterSet, format, date): renvoi dansdatela date mémorisée dans la hashtabletimeParameterSet, selon le format défini dansformatet en UTCgetLocal(timeParameterSet, format, date): idem getUTC ci-dessus mais renvoi la date dans le fuseau localget(timeParameterSet, format, date): idem ci-dessus, mais c'est le format qui indique si la date retournée est en UTC ou dans un fuseau local, format à la norme ISO8601alarmUTCHM(hhmm, endTime, duration): déclare une alarme quotidienne, à déclencher à l'heurehhmmen heure UTC. Renvoi le timestamp de fin dansendTimeet le delai entre chaque alarme dansdurationalarmLocalHM(hhmm, endTime, duration): idem alarmUTCHM ci-dessus, mais l'heure donnée est dans le fuseau local