Groupe de travail Réseau	David H. Crocker, Rand-ISD	
RFC : 735  (NIC : 42083)	(Dcrocker@Rand-Unix)	
RFC rendue obsolète : RFC 729 (NIC n° 40306)	Richard H. Gumpertz, Carnegie-Mellon University	
	(Gumpertz@CMU-10A)	
Traduction Claude Brière de L'Isle	3 novembre 1977	

Option TELNET macro Byte révisée

1.	Nom et code de la commande :
BM 19

2.	Signification de la commande
IAC WILL BM
Celui qui envoie cette commande DEMANDE ou ACCEPTE d'utiliser l'option BM, et va envoyer des caractères de données seuls qui sont à interpréter comme si des chaînes de données de remplacement avaient été envoyées.

IAC WON'T BM
Celui qui envoie cette option REFUSE d'envoyer des caractères de données seuls à interpréter comme si des chaînes de données de remplacement avaient été envoyées. Toute définition BM <macro byte> existante est éliminée (c'est à dire, réglée à nouveau à l'interprétation originelle des données).

IAC DO BM
Celui qui envoie DEMANDE ou ACCEPTE que l'autre côté (celui qui a envoyé WILL BM) envoie des caractères de données seuls qui sont à interpréter comme si des chaînes de données de remplacement avaient été envoyées.

IAC DON'T BM
Celui qui envoie REFUSE de permettre à l'autre côté d'envoyer des caractères de données seuls à interpréter comme si des chaînes de données de remplacement avaient été envoyées. Toute définition existante de BM <macro byte> est à éliminer.

IAC SB BM <DEFINE> <macro byte> <compte> <chaîne de remplacement> IAC SE

où :
<macro byte> est l'octet de données à envoyer réellement sur le réseau ; il NE PEUT PAS être Telnet IAC (255 en décimal, mais peut être n'importe quel autre caractère de 8 bits.

<compte> est un nombre binaire d'un octet (8 bits), indiquant combien de caractères <chaîne de remplacement> suivent, jusqu'à l'IAC SE terminal, non inclus. Noter que les IAC redoublés dans la définition ne devraient être comptés que comme un caractère par paire.

<chaîne de remplacement> est une chaîne de zéro, un ou plusieurs caractères ASCII et/ou commandes Telnet, que la <macro byte> est destinée à représenter ; tout caractère peut intervenir au sein d'une <chaîne de remplacement>. Noter cependant, qu'un IAC dans la chaîne doit être redoublé, pour qu'il soit ultérieurement interprété comme un IAC ; pour être interprété ultérieurement comme l'octet de données 255, il doit être quadruplé dans la <chaîne de remplacement> originelle.

La <macro byte> indiquée sera envoyée à la place de la <chaîne de remplacement> indiquée. Celui qui reçoit la <macro byte> (celui qui a envoyé le DO BM) doit se comporter EXACTEMENT comme si la chaîne d'octets <chaîne de remplacement> avait été reçue du réseau à la place de la macro. Cette interprétation doit se faire avant toute autre interprétation Telnet, sauf si la <macro byte> survient au titre d'une commande Telnet ; dans ce cas, aucune interprétation particulière n'est à faire. En particulier, une sous négociation Telnet entière (c'est à dire, d'un IAC SB à un IAC SE) est à considérer comme une commande Telnet dans laquelle AUCUN remplacement ne devrait être fait.

L'effet d'une <macro byte> particulière peut être renversé en la réglant pour qu'elle se remette dans son espace normal.

IAC SB BM <DEFINE> X <0> IAC SE peut être utilisé pour faire que X soit ignoré dans le flux des données.

<DEFINE> est le décimal 1.

IAC SB BM <ACCEPT> <macro byte> IAC SE

Celui qui reçoit <DEFINE> comme <macro byte> accepte la définition demandée  et va effectuer le remplacement demandé chaque fois qu'une <macro byte> est reçue et ne fait pas partie d'une séquence de commande IAC Telnet.

<ACCEPT> est le décimal 2.

IAC SB BM <REFUSE> <macro byte> <REASON> IAC SE

Celui qui reçoit <DEFINE> comme <macro byte> refuse d'effectuer la traduction indiquée de <macro byte> en <chaîne de remplacement> parce que cette <macro byte> particulière n'est pas un choix acceptable, parce que la longueur de la <chaîne de remplacement> excède la mémoire disponible, parce que la longueur de la <chaîne de remplacement> réelle ne correspondait pas à la longueur prédite dans le <compte>, ou pour quelque autre raison non spécifiée.

<REFUSE> est le décimal 3.

<REASON> peut être

	<BAD-CHOICE> (mauvais choix) qui est le décimal 1 ;

	<TOO-LONG> ((trop long) pour la mémoire de celui qui reçoit) qui est le décimal 2 ;

<WRONG-LENGTH> ((mauvaise longueur) de la chaîne réelle comparée avec la longueur promise dans <count>) qui est le décimal 3 ; ou

<OTHER-REASON> (destiné à n'être utilisé qu'en attendant la mise à jour de ce document pour inclure des raisons non anticipées par les auteurs) qui est le décimal zéro (0).

IAC SB BM <LITERAL> <macro byte> IAC SE

La <macro byte> est à traiter comme des données réelles, plutôt que comme représentant la <chaîne de remplacement>

Noter que cette sous commande ne peut pas être utilisée durant des sous commandes Telnet, car les sous commandes sont définies comme se terminant à la prochaine occurrence de "IAC SE". Inclure cette sous commande BM dans n'importe quelle sous commande Telnet mettrait donc un terme prématuré à la sous-commande contenante.

<LITERAL> est le décimal 4.

IAC SB BM <PLEASE CANCEL> <macro byte> <REASON> IAC SE

Le RECEVEUR de la <macro byte> définie (c'est-à-dire, celui qui envoie la IAC DO BM) demande à celui qui envoie la <macro byte> d'annuler sa définition. <REASON> est la même que pour la sous commande <REFUSE>.

Celui qui envoie la <macro byte> devrait (mais n'est pas obligé de) répondre en remettant <macro byte> en place (c'est à dire, en envoyant un IAC SB BM <DEFINE> <macro byte> <1> <macro byte> IAC SE).

Si le receveur insiste absolument pour annuler une macro donnée, le mieux qu'il puisse faire est de supprimer toute l'option, avec IAC DONT BM, attendre un IAC WONT BM d'accusé de réception, puis de redémarrer l'option, avec IAC DO BM. Cela va rétablir aussi les autre macros mais permettra au receveur de REFUSER avec le code BAD CHOICE si/lorsque le site étranger essayera de redéfinir la macro en question.

3.	Par défaut :
WON'T BM -- DON'T BM

Il n'est pas fait de réinterprétation des octets de données.

4.	Motifs de l'option :
Les sous commandes des options Telnet exigent actuellement un minimum de cinq caractères pour être envoyées sur le réseau (c'est à dire, IAC SB <nom d’option> IAC SE). Pour les sous commandes qui sont rarement employées, en grandeur absolue et en proportion des données normales, cette redondance est tolérable. Dans d'autres cas, cependant, ce ne l'est pas. Par exemple, les données qui sont envoyées en mode bloc peuvent avoir besoin d'une marque de "séparateur de bloc". Si les blocs sont ordinairement aussi petits que cinq à dix octets, la plupart des données qui vont traverser le réseau seront alors des informations de contrôle. L'option BM est destinée à être une simple technique de compression des données,pour retirer cette redondance du canal de communication.

5.	Description de l'option
L'option est activée par le processus de négociation standard d'option Telnet. Après cela, l'ENVOYEUR des données (le côté qui envoie le IAC WILL BM) est libre de définir et utiliser les transpositions entre caractères NVT seuls et de remplacement. Sauf la capacité à refuser des définitions particulières, le receveur des données n'a pas de contrôle sur la définition et l'utilisation des transpositions.

Il est interdit à l'envoyeur (du WILL BM) d'utiliser ou redéfinir une <macro byte> avant d'avoir reçu un <ACCEPT> <REFUSE>, ou DONT BM, en réplique à un <DEFINE>.

Note : Le caractère de commande Telnet IAC (255 en décimal) peut être un membre d'une <chaîne de remplacement> mais est LE SEUL caractère qui NE DOIT PAS être défini comme <macro byte>.

Dans toute commande Telnet (c'est à dire, toute séquence commençant par un IAC) le remplacement de macro NE DOIT PAS avoir lieu ; les données sont à interpréter seulement selon leurs valeurs normales de caractères. Cela évite le problème d'avoir à distinguer entre un caractère qui est à prendre comme une <macro byte>, et donc à interpréter comme sa <chaîne de remplacement> correspondante, et celui qui est à prendre comme sa valeur usuelle de NVT Telnet. Dans tous les autres cas cependant, les <macro byte> sont à interpréter immédiatement, comme si leurs <chaînes de remplacement>  correspondantes avaient été réellement envoyées à travers le réseau. Les chaînes développées ne sont pas sujettes à réinterprétation, de sorte que des définitions récurrentes ne peuvent être faites. Les commandes Telnet peuvent être incluses dans des <chaînes de remplacement> ; cependant, elles doivent être totalement contenues dans la macro ou doivent commencer au sein de la macro et se terminer à l'extérieur. En particulier, elles NE DOIVENT PAS commencer à l'extérieur d'une macro et continuer ou se terminer à l'intérieur, car aucun remplacement de macro n'a eu lieur pendant le traitement d'une commande Telnet quelconque.

Noter que lorsqu'on saute des données du fait d'un traitement Telnet SYNCH (INS/DM), le remplacement d'une macro BM devrait toujours avoir lieur, car (par exemple) "IAC DM" serait une <chaîne de remplacement> valide.

Le <compte> dans la sous commande <DEFINE> est destiné à permettre au receveur d'allouer de la capacité mémoire. L'interprétation d'IAC n'est pas subrogée durant les sous commande BM, de sorte que IAC SE continuera à terminer en toute sécurité les sous commande mal formées.

L'option BM est notablement inefficace à l'égard des problèmes survenant durant la définition de <macro byte> et l'utilisation des <macro byte> comme données réelles. On s'attend à ce que relativement peu de <macro byte> soient définies et qu'elles représenteront des chaînes relativement courtes. Comme l'espace des données Telnet entre le décimal 128 et le décimal 254 n'est normalement pas utilisé, sauf par les mises en œuvre qui emploient le protocole Telnet d'origine (obsolète), il est recommandé que les <macro byte> soient normalement tirées de cet espace.