Chapter 5.  L'interface de contrôle HTTP

Table of Contents

Introduction
L'évaluateur RPN
Les macros

Introduction

Ce page n'est pas complet .

Présentation

VLC inclut un petit serveur HTTP, qui lui permet de diffuser en HTTP, mais également de proposer une interface de contrôle à distance utilisant HTTP .

Pour démarrer VLC avec l'interface HTTP, faites :

% vlc -I http (--http-src /directory/ --http-host host:port)

L'interface HTTP se mettra en écoute sur host:port (localhost:8080 par défaut), et reproduira la structure de /directory sur http://host:port/ ( rép_source_vlc/share/http par défaut) .

VLC est fourni avec un certain nombre de fichiers qui devraient suffire pour des besoins génériques. La suite de ce chapitre explique comment personnaliser ces pages .

Certains fichiers sont traités spécialement :

  • Les fichiers commençant par '.' ne sont pas exportés .

  • Le fichier '.access' sera ouvert. L'interface HTTP va chercher dans la première ligne un login/mot de passe (écrit sous la forme login:mot_de_passe). Ce couple sera utilisé pour protéger tous les fichiers de ce répertoire. Attention: seuls les fichiers du répertoire seront protégés (les fichiers des sous-répertoires ne le seront pas.).

  • Le fichier <rép> sera exporté en tant que <rep> et <rep>/ mais pas en tant que index.html .

Le type MIME est choisi selon l'extension du fichier et ne peut pas être forcé ou modifié pour un fichier particulier. Les fichiers d'extension inconnue seront servis avec le type MIME "application/octet-stream" .

Essayez d'éviter l'export de gros fichiers. En effet, chaque page est tout d'abord chargée en mémoire avant l'envoi, donc soyez prudents...

Macros VLC

Tous les fichiers .html/.htm sont lus par VLC avant d'être envoyés. Les macros VLC sont alors exécutées ou substituées. De plus, les arguments de l'URL, obtenus par un GET, peuvent être interprétés .

Une macro VLC est de la forme : <vlc id="nom" param1="parametre1" param2="parametre2" /> .

Seul le champ "id" est obligatoire, param1 et param2 peuvent ne pas être présent selon la valeur de "id".

Veuillez faire attention de bien respecter cette syntaxe, car VLC n'aime pas les syntaxes invalides. (Il pourrait crasher facilement) .

Exemples :

Correct :<vlc id="value" param1="version" />

Incorrect :<vlc id="value" param1="version" > (mauvaise fin de tag), <vlc id=value param1="version" /> ("" manquants)

Les macros valides sont :

  • control (1 paramètre facultatif)

  • get (2 paramètres)

  • set (2 paramètres)

  • rpn (1 paramètre)

  • if (1 paramètre facultatif)

  • else (pas de paramètre)

  • end (pas de paramètre)

  • value (1 paramètre facultatif)

  • foreach (2 paramètres)

Pour des utilisations avancées, ces outils sont à votre disposition :

  • Evaluateur RPN (voir la partie 2)

  • Piles: La pile est un endroit dans lequel vous pouvez mettre des nombres et des chaînes de caractère et les récupérer. Elle est utilisée en conjonction de l'évaluateur RPN.

  • Variables locales: Vous pouvez créer dynamiquement de nouvelles variables et modifier leurs valeurs. Un certain nombre de variables locales sont prédéfinies:

    • url_value : paramètre de l'URL

    • url_param : 1 si url_value n'est pas vide, 0 sinon

    • version : la version de VLC

    • copyright : Copyright de VLC

Remarque: les piles et les variables locales sont remises à zéro avant l'exécution de la page .

L'évaluateur RPN

RPN signifie Notation Polonaise Inversée (Reverse Polish Notation)

Introduction

RPN peut sembler assez étrange au premier abord, mais c'est en fait un moyen simple et rapide d'écrire des expressions. Il permet également d'éviter l'utilisation des parenthèses.

Au lieu d'écrire ( 1 + 2 ) * 5, vous devrez écrire 1 2 + 5 *.

L'idée derrière cela est : si on a un nombre ou une chaine de caractères, on l'empile. Si on a un opérateur (tel que +), on prend les arguments sur la pile, on exécute l'opérateur, et on remet le résultat sur la pile. Le résultat du calcul RPN est la valeur sur le sommet de la pile .

 stack:      Word processed
 empty      1                   1 is pushed on the stack
 1          2                   2 same things
 1 | 2      +                   + : remove 1 and 2 and write 3 on the stack
 3          5                   5 is pushed on the stack
 3 | 5      *                   * : remove 3 and 5 and write 15
 15                             <- result

Les opérateurs

Notation : ST(1) signifie le premier élément de la pile, ST(2) le second, ... et op l'opérateur.

Vous avez accès à :

  • Les opérateurs arithmétiques standards: +, -, *, /, % : ils mettent le résultat de ST(1) op ST(2) sur la pile

  • Opérateur binaires: ! (place !ST(1)); ^, &, | : place le résultat de ST(1) op ST(2)

  • tests: =, <, <=, >, >= : exécute ST(1) op ST(2), place -1 si vrai, 0 sinon

  • chaines de caractères: strcat place le résultat de 'ST(1)ST(2)', strcmp compare ST(1) et ST(2), place -1 si ST(1)<ST(2), 0 en cas d'égalité et 1 sinon, strlen place la taille de ST(1).

  • manipulation de la pile: dup duplique ST(1), drop enlève ST(1) de la pile, swap échange ST(1) et ST(2), et flush vide la pile.

  • manipulation de variables: store stocke ST(2) dans une variable locale dont le nom est la valeur de ST(1), value place la valeur de la variable dont le nom est ST(1), et url_extract place la valeur de la partie contenue de ST(1) des paramètres d'URL

Les macros

La macro control

Lors de la requête d'une page, vous pouvez lui passer des arguments à travers l'URL. (par exemple, en utilisant un <form>). Exemple: http://host:port/page.html?var=value&var2=value2&... La macro "control" dit à la page de lire ces arguments, et d'exécuter les commandes autorisées qu'ils contiennent. Le param1 contient la liste des commandes autorisées. S'il est vide, toutes les commandes sont autorisées.

Certaines commandes requièrent des arguments qui doivent être passés dans l'URL .

Table 5.1.  Commandes d'URL

NameArgument Description
play item (integer) Play the specified playlist item
stop  Stop
pause Pause
next  Go to next playlist item
previous  Go to previous playlist item
add mrl (string) Add a MRL (Media Resource Locator) to the playlist
delete item (integer) Delete the specified playlist item or list of playlist items
empty  Empty the playlist
close id (hexa) Close a specific connection
shutdown  Quit VLC

Vous pouvez par exemple restreindre l'exécution de la commande shutdown à une page protégée (par un fichier .access) en utilisant la macro control dans toutes les pages non protégées.

La macro get

Cette macro sera remplacée par la variable de configuration dont le nom est donné en param1 et dont le type es donné en param2.

param1 doit être le nom d'une variable de configuration existente, et param2 doit Ãtre son type, qui peut être int, float, ou string.

Exemple: lt;vlc id="get" param1="sout" param2="string" /> sera remplacée dans la page de sortie par la valeur de sout.

La macro set

Cette macro permet de rÃgler la valeur d'une variable de configuration. Le nom est donnépar param1 et le type par param2, comme pour get. La valeur est recopiÃe depuis l'URL en utilisant le nom donnéen param1.

Par exemple, si player.html contient <vlc id="set" param1="sout" param2="string" /> et si vous allez à l'adresse http://host:ip/pl ayer.html?sout=sout_value, la variable sout prendra comme valeur sout_value. Si l'URL ne contient pas sout, rien ne se passera.

La macro rpn

Cette macro vous permet d'interpréter des commandes RPN (voir II).

La macro if,else,end

Cette macro vous permet de controler la lecture de la page HTML.

Si param1 n'est pas vide, il est exécuté par l'évaluateur RPN. Si le premier élément de la pile n'est pas nul, la valeur du test est vraie, sinon, elle est fausse .

 <vlc id="if" param1="1 2 =" />
    <!-- Jamais atteint -->
 <vlc id="else" />
    <p> Le test à réussi: 1 n'est pas égal à 2 </p>
 <vlc id="end" />

Vous pouvez aussi utiliser "if" et "end" seulement .

La macro value

Si param1 n'est pas vide, il est exécuté par l'évaluateur RPN. La macro est ensuite remplacée par la valeur du premier élément de la pile.

Si l'élément est le nom d'une variable locale, la valeur sera affichée et non le nom

La macro foreach,end

param1 est le nom de la variable utilisée pour la boucle, param2 est le nom de la plage de valeurs à utiliser :

  • integer : prend le premier élément de la pile pour construire une plage d'entiers. L'élément doit etre une chaine de caractères du type: premier:dernier[:pas][,premier2:dernier2[:pas2]][,...] (Exemple: 1:5:2 ,6:8:1 deviendra 1,3,5,6,7,8)

  • directory : prend le premier élément de la pile comme répertoire et construit un ensemble de noms de fichiers contenus dans ce répertoire. Chaque élément comporte les champs suivants:

    • name : nom du fichier/répertoire

    • type : "directory" ou "file" ou "unknown"

    • size : taille du fichier

    • date

  • Construit un ensemble basé sur la liste de lecture. Les champs sont: current qui vaut 1 si l'élément est sélectionné, 0 sinon. index est la valeur de l'index à utiliser dans les commandes delete ou play. name est le nom de l'élément .

  • "informations" : crée des informations sur la lecture en cours. name est le nom de la catégorie, value est sa valeur, info est un nouvel ensemble sur lequel vous pouvez à nouveau appliquer foreach, et qui contient deux champs name et value) .

  • "hosts" : Crée une liste des hotes en écoute. Contient les champs "id" (identifiant interne), host, ip et port.

  • "urls" : Crée une liste des urls disponibles. Les champs sont id, stream (1 si c'est un flux, 0 sinon), url, mime, protected (1 si le fichier est protégé, 0 sinon), utilisé (1 si utilisé actuellement).

  • "connections" : Crée la liste des connections en cours. Les champs sont: id, un identifiant utilisé par la commande close, ip, url et status (Code de retour HTTP).

  • Le nom d'une variable de foreach, si c'est un sous-ensemble.

    ;<vlc id="foreach" param1="cat" param2="informations" />
                    <p> <vlc id="value" param1="cat.name" />
                    <ul>
                    <vlc id="foreach" param1="info" param2="cat.info" />
                        <li>
                        <vlc id="value" param1="info.name" /> :
                                <vlc id="value" param1="info.value" />
                        </li>
                    <vlc id="end" />
                    </ul>
                <vlc id="end" />
    

Pour plus de détails, voyez le répertoire share/http des sources de VLC...