Références des fonctions
Cette page énumère les différentes fonctions disponibles dans la
bibliothèque
trthtml et détaille la liste des paramètres à
fournir à chaque fonction pour l'utiliser.
Vous pouvez aller directement à la section qui vous intéresse à partir de
ce menu.
Réception d'une demande sur le port éthernet
Une seule fonction permet de récupérer la demande d'une page web ou d'un
autre fichier effectuée par le navigateur web connecté au port éthernet
de la carte Arduino.
C'est la fonction
lire_trame_client
Prototype :
void lire_trame_client (EthernetClient client, char *url=0, int taille=14,
char *post=0, int tailpost=0, char *cookie=0, int tailcook=0);
Cette fonction comporte un paramètre obligatoire et 6 paramètres optionnels.
Selon les informations qu'on souhaite pouvoir récupérer du navigateur web,
on peut appeler
lire_trame_client avec 1, 3, 5 ou 7 paramètres.
Paramètre obligatoire :
- client : Descripteur de connexion éthernet. C'est la variable
qui a été initialisée dans l'instruction :
client = serveur.available ();
Paramètres optionnels :
- url :
|
Tableau de caractères destiné à récupérer le nom du fichier
utilisé pour générer la page web ou le nom d'un autre fichier
à envoyer au navigateur, et éventuellement la liste des paramètres
passés dans l'URL par la méthode GET ou par l'utilisateur.
|
- taille :
|
Nombre de caractères de la variable url précédente. |
- post :
|
Tableau de caractères destiné à récupérer la liste des
paramètres passés par la méthodes POST via un formulaire. |
- tailpost :
|
Nombre de caractères de la variable post. |
- cookie :
|
Tableau de caractères destiné à récupérer la liste des
cookies avec leur valeur. |
- tailcook :
|
Nombre de caractères de la variable cookie. |
La liste des paramètres à utiliser dépend de la nature du site web supporté
par la carte Arduino.
Site web constitué d'une page unique
Si le site web est constitué d'une seule page destinée seulement à être
consultée, et que cette page ne fait pas appel à un fichier CSS distinct
du fichier HTML, le programme serveur n'a pas besoin d'analyser la demande
du navigateur client pour fournir l'information demandée.
Dans ce cas, l'utilisation de la fonction
lire_trame_client est
très simple :
lire_trame_client (client);
Ce mode d'utilisation de la fonction
lire_trame_client est employé
dans le programme
Compteur de passages et
des 2 exemples de station météo.
Site web multi-page sans formulaire de saisie
Si le site web comporte plusieurs pages (ou même une page unique avec un
fichier CSS séparé), il est nécessaire d'analyser la demande du navigateur
web pour lui fournir l'information demandée.
Pour cela, on va récupérer le nom du fichier que le navigateur web a
demandé dans l'url :
lire_trame_client (client, url, sizeof (url));
Au préalable, on aura déclaré un tableau de caractères comme ceci :
char url [14];
Comme on n'a besoin de récupérer qu'un nom de fichier (implanté dans le
répertoire racine de la carte micro SD avec un nom supporté par le système
de fichier FAT de MS-DOS), la taille optimale pour la variable
url
est de 12 + 2 = 14 caractères.
Ce mode d'utilisation de la fonction
lire_trame_client est employé
dans les programmes de la série
Site statique
multi pages
Site web interactif avec formulaire utilisant la méthode GET
Si le site web est interactif, avec des formulaires qui utilisent seulement
la méthode GET, l'appel de la fonction
lire_trame_client est le
même que dans le cas précédent :
lire_trame_client (client, url, sizeof (url));
Cependant, le tableau de caractères
url devra être plus grand, afin
de mémoriser aussi la liste des paramètres passés par la méthode GET.
Dans la pratique, le nombre de caractères nécessaires pour le tableau sera
le nombre de caractères compris entre le / qui suit l'adresse IP et la fin
de l'URL la plus longue que le navigateur peut transmettre en réponse à la
validation d'un formulaire du site.
Site web interactif avec formulaire utilisant la méthode POST
Dans le cas où le site web transmet des données par la méthode POST, une
autre variable devra être utilisée pour récupérer et mémoriser ces données.
Dans ce cas, l'appel de la fonction
lire_trame_client sera le
suivant :
lire_trame_client (client, url, sizeof (url), post, sizeof (post));
La taille du tableau de caractères
url (14 caractères ou plus)
dépend de l'utilisation ou non de la méthode GET pour certains formulaires.
La taille du tableau de caractères
post devra être suffisante pour
mémoriser la totalité des données de la forme :
avec un caractère de plus pour chaque variable passée par la méthode POST.
Site web avec cookies
Enfin, si le site web utilise des cookies (ça risque d'être rare sur
un site hébergé par une carte Arduino), l'appel de la fonction
lire_trame_client se fera de l'une des 2 manières suivantes :
lire_trame_client (client, url, sizeof (url), 0, 0, cookie, sizeof (cookie));
lire_trame_client (client, url, sizeof (url), post, sizeof (post), cookie, sizeof (cookie));
Dans la première syntaxe, on ne récupère pas de variable par la méthode
POST, dans la deuxième, on le fait.
La taille du tableau de caractères
cookie devra être suffisante
pour mémoriser la totalité des données de la forme :
avec un caractère de plus pour chaque cookie.
Envoi sur le port éthernet
4 fonctions sont disponibles pour envoyer des données au navigateur web
via le port éthernet :
Envoi d'un caractère
Prototype :
void envoie_car (char car, EthernetClient client);
Cette fonction comporte 2 paramètres obligatoires :
- car :
|
Caractère à envoyer. |
- client :
|
Descripteur de connexion éthernet (le même que pour la fonction
lire_trame_client). |
Exemples d'appel :
envoie_car (car, client);
envoie_car ('A', client);
Dans le premier cas, le caractère à envoyer est mémorisé dans une variable,
dans le 2ème cas, il est précisé directement.
Envoi d'une série de caractères
Prototype :
void envoie_trame (String trame, EthernetClient client);
Cette fonction comporte 2 paramètres obligatoires :
- trame :
|
Chaine de caractères à envoyer. |
- client :
|
Descripteur de connexion éthernet. |
Exemples d'appel :
envoie_trame (message, client);
envoie_trame ("Bonjour", client);
Dans le premier cas, la chaine de caractères à envoyer est mémorisée dans
une variable, dans le 2ème cas, elle est précisée directement.
Envoi d'une série de caractères suivi d'un passage à la ligne
Prototype :
void envoieln_trame (String trame, EthernetClient client);
Cette fonction comporte 2 paramètres obligatoires :
- trame :
|
Chaine de caractères à envoyer. |
- client :
|
Descripteur de connexion éthernet. |
Cette fonction s'utilise exactement comme la fonction
envoie_trame
Envoi de l'entête d'une page web acceptée par le serveur
Cette fonction envoie au navigateur web le début de la réponse suite à
une demande de page.
Le code de retour envoyé au navigateur est toujours 200 (requête acceptée)
et après avoir appelé cette fonction, il faudra envoyer le contenu du
fichier demandé.
Prototype :
void envoie_entete_reponse (EthernetClient client, char *url=0);
Paramètre obligatoire :
- client : Descripteur de connexion éthernet.
Paramètre optionnel mais souhaitable :
- url : Nom du fichier demandé par
le navigateur.
Si le paramètre
url n'est pas précisé, cette fonction envoie la
bonne entête pour une page html.
En indiquant le nom de fichier demandé dans le paramètre
url,
cette fonction fonctionne aussi pour un fichier css.
L'envoi d'autres catégories de fichiers, par exemple des images ne
nécessiterait pas forcément une grosse adaptation de cette fonction,
mais ce type d'envoi n'a pas été testé.
Traitement des chaines de caractères
Les 2 fonctions qui suivent existent en PHP et dans d'autres langages de
programmation, mais pas en langage C.
Elles ont été rajoutées.
Recherche de la position d'une sous-chaine dans une chaine de caractères
Prototype :
int strpos (char *chaine, char *rech);
Cette fonction comporte 2 paramètres obligatoires :
- chaine :
|
Chaine de caractères dans laquelle on cherche une sous-chaine. |
- rech :
|
Sous-chaine de caractères recherchée. |
Code de retour :
Si la sous-chaine
rech a été trouvée dans la chaine de caractères
chaine, la fonction retourne le nombre de caractères dans
chaine avant le début de la sous-chaine
rech.
En particulier, si la chaine de caractères
chaine commence par
la sous-chaine
rech, la valeur retournée sera 0.
Si la sous-chaine
rech n'est pas trouvée dans la chaine de
caractères
chaine, la fonction retourne la valeur -1
Extraction d'une sous-chaine de caractères
Prototype :
void substr (char *orig, char *dest, int debut, int fin);
Cette fonction comporte 4 paramètres obligatoires :
- orig :
|
Chaine de caractères dont on extrait une sous-chaine. |
- dest :
|
Tableau de caractères destiné à récupérer la sous-chaine de
caractères obtenue. |
- debut :
|
Numéro du premier caractère à recopier dans dest.
Le premier caractère de la chaine orig porte le
numéro 0. |
- fin :
|
Numéro du dernier caractère de la chaine orig à
recopier dans dest. |
Récupération de la valeur de variables
3 fonctions sont disponibles pour récupérer la valeur d'une variable d'un
formulaire passée par la méthode GET ou POST ou la valeur d'un cookie.
Récupération de la valeur d'une variable passée par la méthode GET
Prototype :
int lecvar_get (char *nom, char *liste, char *result);
Cette fonction comporte 3 paramètres obligatoires :
- nom :
|
Nom de la variable dont on cherche la valeur. |
- liste :
|
Tableau contenant la liste des variables présentes dans
l'URL et passées par la méthode GET.
C'est la variable url qui a été récupérée lors de
l'appel de la fonction lire_trame_client. |
- result :
|
Tableau de caractères destiné à récupérer la valeur de
la variable cherchée. |
Code de retour :
- 1 si la variable dont on veut la valeur a
été trouvée,
- 0 dans le cas contraire.
Récupération de la valeur d'une variable passée par la méthode POST
Prototype :
int lecvar_post (char *nom, char *liste, char *result);
Cette fonction comporte 3 paramètres obligatoires :
- nom :
|
Nom de la variable dont on cherche la valeur. |
- liste :
|
Tableau contenant la liste des variables passées par la
méthode POST.
C'est la variable post qui a été récupérée lors de
l'appel de la fonction lire_trame_client. |
- result :
|
Tableau de caractères destiné à récupérer la valeur de
la variable cherchée. |
Code de retour :
- 1 si la variable dont on veut la valeur a
été trouvée,
- 0 dans le cas contraire.
Récupération de la valeur d'un cookie
Prototype :
int lecval_cookie (char *nom, char *liste, char *result);
Cette fonction comporte 3 paramètres obligatoires :
- nom :
|
Nom du cookie dont on cherche la valeur. |
- liste :
|
Tableau contenant la liste des cookies.
C'est la variable cookie qui a été récupérée lors
de l'appel de la fonction lire_trame_client. |
- result :
|
Tableau de caractères destiné à récupérer la valeur du
cookie cherché. |
Code de retour :
- 1 si le cookie dont on veut la valeur a
été trouvé,
- 0 dans le cas contraire.
Utilisation d'un fichier HTML présent sur la carte SD
Cette série de fonction lit ligne par ligne le contenu du fichier html
qui a été ouvert en lecture par
SD.open et envoie éventuellement
les lignes lues au navigateur web jusqu'à ce qu'une condition d'arrêt soit
réalisée.
Dans le cas d'un site web dynamique, plusieurs appels des fonctions qui
suivent seront nécessaire.
Lors du premier appel d'une de ces fonctions, la lecture du fichier html
commencera à la première ligne. Lors des appels suivants, elle commencera
à la ligne qui suit celle où on s'était arrêté lors de l'utilisation de
la fonction précédente.
Lecture d'une ligne du fichier html
Prototype :
void lire_ligne (File descfic);
Paramètre obligatoire :
- descfic : Descripteur du fichier html. C"est la variable
qui a été initialisée dans l'instruction SD.open .
Remarque : Le rôle principal de cette fonction est de permettre le
fonctionnement des 3 fonctions qui suivent ci-dessous. Toutefois, elle
est mise à la disposition des utilisateurs. La ligne lue est stockée
dans la variable
ligne du fichier
trthtml.cpp .
Lecture et envoi vers le navigateur du fichier html jusqu'à la
ligne contenant la chaine de caractères cherchée
Prototype :
void copie_jusque_chaine (File descfic, EthernetClient client,
char *chaine, int cop_derlig = 0);
Paramètres obligatoires :
- descfic :
|
Descripteur du fichier html obtenu lors de l'utilisation
de l'instruction SD.open . |
- client :
|
Descripteur de connexion éthernet. |
- chaine :
|
Chaine de caractères cherchée. |
Paramètre optionnel :
- cop_derlig :
|
Indique si on doit aussi envoyer au navigateur la ligne
contenant la de caractères cherchée. |
Par défaut, ou si
cop_derlig = 0, la ligne contenant la de
caractères cherchée n'est pas envoyée au navigateur web.
Si on veut envoyer cette ligne, le paramètre
cop_derlig
devra être mis à
1 (ou tout autre valeur non nulle).
Lecture du fichier html jusqu'à la ligne contenant la chaine de
caractères cherchée, sans rien envoyer au navigateur
Prototype :
void sauter_jusque_chaine (File descfic, char *chaine);
Paramètres obligatoires :
- descfic :
|
Descripteur du fichier html. |
- chaine :
|
Chaine de caractères cherchée. |
Lecture et envoi vers le navigateur du fichier html jusqu'à la
ligne contenant la chaine de caractères cherchée et remplacement
de cette chaine par une autre
Prototype :
void coprep_chaine (File descfic, EthernetClient client,
char *chaineorig, char *chainedest);
Paramètres obligatoires :
- descfic :
|
Descripteur du fichier html. |
- client :
|
Descripteur de connexion éthernet. |
- chaineorig :
|
Chaine de caractères cherchée. |
- chainedest :
|
Chaine de caractères à envoyer au navigateur à la place
de la chaine de caractères cherchée. |
Lecture et envoi vers le navigateur de la fin du fichier html
Prototype :
void copie_jusque_fin (File descfic, EthernetClient client);
Paramètres obligatoires :
- descfic :
|
Descripteur du fichier html. |
- client :
|
Descripteur de connexion éthernet. |
Génération du menu d'une page à partir d'un fichier texte
Génération d'une indentation en début de ligne
Prototype :
void indente (EthernetClient client, int indent=4);
Paramètre obligatoire :
- client : Descripteur de connexion éthernet.
Paramètre optionnel :
- indent : Nombre d'espaces à générer.
Le rôle de cette fonction est essentiellement de permettre à la fonction
ajoute_menu de générer du code html bien présenté.
Cette fonction est appelée pour générer des espaces en début de ligne dans
le code html. Par défaut, elle génère 4 espaces, mais on peut changer cette
valeur grâce au paramètre
indent.
Génération du menu de la page html à partir d'un fichier texte
Prototype :
void ajoute_menu (char *ficmenu, char *url, EthernetClient client,
int indent=4, char *couleur="#FF8000");
Paramètres obligatoires :
- ficmenu :
|
Fichier texte contenant le menu. |
- client :
|
Descripteur de connexion éthernet. |
Paramètres optionnels :
- indent :
|
Nombre d'espaces à générer en début de ligne. |
- couleur :
|
Couleur de l'élément du menu dont on visualise la page. |
Cette fonction génère un menu qui sera commun à toutes les pages du site
(ou plusieurs d'entre elles, s'il y a plusieurs menus). Les différents
liens du menu sont présentés sur une colonne, comme sur la partie gauche
de cette page.
Le fichier
ficmenu est un fichier texte. Chaque ligne non vide
correspond à un élément du menu.
Chaque ligne du menu commence en colonne 1 par le nom de la page html
à afficher. Ensuite, après un ou plusieurs espaces, il y a le texte à
afficher dans le menu. Un exemple de fichier est visible dans la deuxième
partie de
cette
page (Version 2 : menu dans un fichier texte).
Le paramètre optionnel
indent permet d'indiquer le nombre
d'espaces à générer en début de ligne pour une bonne présentation du
code html. Par défaut, 4 espaces sont générés au début de chaque ligne
du menu.
Pour la page du site qu'on est en train de visualiser, le texte dans le
menu apparaît par défaut en orange. Le paramètre optionnel
couleur
permet de fixer une autre couleur sous la forme d'un code hexadécimal de
6 caractères précédé d'un #.