PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.2 » Internes » Protocole Frontend/Backend » Formats de message

55.7. Formats de message #

Cette section décrit le format détaillé de chaque message. Tous sont marqués pour indiquer qu'ils peuvent être envoyés par un client (F, pour frontend en anglais), par un backend (B) ou les deux (F & B). Notez que, bien que chaque message inclut un décompte d'octets au début, le format de message est défini pour que la fin du message puisse être trouvée sans faire référence au nombre d'octets. Ceci aide à vérifier la validité du message. (Le message CopyData est une exception car il fait partie d'un flux de données ; le contenu de tout message CopyData individuel ne peut pas être interprété indépendamment.)

AuthenticationOk (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32(8)

Longueur du contenu du message en octets, longueur inclue.

Int32(0)

Indique que l'authentification est réussie.

AuthenticationKerberosV5 (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32(8)

Longueur du contenu du message en octets, longueur inclue.

Int32(2)

Indique que l'authentification Kerberos V5 est requise.

AuthenticationCleartextPassword (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32(8)

Longueur du contenu du message en octets, longueur inclue.

Int32(3)

Indique que l'authentification par mot de passe en clair en requise.

AuthenticationMD5Password (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32(12)

Longueur du contenu du message en octets, longueur inclue.

Int32(5)

Indique que le mot de passe chiffré avec MD5 est requis.

Byte4

Le sel à utiliser lors du chiffrement du mot de passe.

AuthenticationGSS (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32(8)

Longueur du contenu du message en octets, longueur inclue.

Int32(7)

Indique qu'une authentification GSSAPI est requise.

AuthenticationGSSContinue (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32(8)

Indique que ce message contient des données GSSAPI ou SSPI.

Byten

Données d'authentification GSSAPI ou SSPI.

AuthenticationSSPI (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32(8)

Longueur du contenu du message en octets, longueur inclue.

Int32(9)

Indique que l'authentification SSPI est requise.

AuthenticationSASL (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32(10)

Indique que l'authentification SASL est requise.

Le corps du message est une liste de mécanismes d'authentification SASL, dans l'ordre de préférence du serveur. Un octet zéro est requis en fin après le nom du dernier mécanisme d'authentification. Pour chaque mécanisme, il y a ce qui suit :

String

Nom d'un mécanisme d'authentification SASL.

AuthenticationSASLContinue (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32(11)

Indique que ce message contient un challenge SASL.

Byten

Données SASL, spécifiques au mécanisme SASL utilisé.

AuthenticationSASLFinal (B) #
Byte1('R')

Identifie le message comme une demande d'authentification.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32(12)

Indique que l'authentification SASL s'est terminée.

Byten

Données supplémentaires SASL, spécifique au mécanisme SASL utilisé.

BackendKeyData (B) #
Byte1('K')

Identifie le message comme une donnée clé d'annulation. Le client doit conserver ces valeurs s'il souhaite être capable d'exécuter ultérieurement des messages CancelRequest.

Int32(12)

Longueur du contenu du message en octets, longueur inclue.

Int32

Identifiant du processus de ce backend.

Int32

Clé secrète de ce backend.

Bind (F) #
Byte1('B')

Identifie le message comme une commande Bind.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

Le nom du portail de destination (une chaîne vide sélectionne le portail non nommé).

String

Le nom de la requête préparée source (une chaîne vide sélectionne la requête préparée non nommée).

Int16

Le nombre de codes format des paramètres (dénoté C ci-dessous). Il peut valoir zéro pour indiquer qu'il n'y a pas de paramètres ou que les paramètres peuvent tous utiliser le format par défaut (text) ; ou un, auquel cas le code format spécifié est appliqué à tous les paramètres ; ou il peut être égal au nombre réel de paramètres.

Int16[C]

Les codes format des paramètres. Il n'y a que deux valeurs possibles : zéro pour texte, un pour binaire.

Int16

Le nombre de valeurs de paramètres (potentiellement zéro). Ce nombre doit correspondre au nombre de paramètres nécessaires pour la requête.

Ensuite, la paire suivante de champs apparaît pour chaque paramètre :

Int32

La longueur de la valeur du paramètre en octets (ce nombre ne s'inclut pas). Peut valoir zéro. En cas particulier, -1 indique une valeur NULL du paramètre.

Byten

La valeur du paramètre, dans le format indiqué par le code format associé. n est la longueur ci-dessus.

Après le dernier paramètre, les champs suivants apparaissent :

Int16

Le nombre de codes formats des colonnes de résultat (dénoté par R ci-dessous). Ce nombre peut valoir zéro pour indiquer qu'il n'y a pas de colonnes de résultats ou que les colonnes de résultats devraient toutes utiliser le format par défaut (texte) ; ou un, auquel cas le code format spécifié est appliqué à toutes les colonnes du résultat (s'il y en a) ; ou il peut être égal au nombre réel de colonnes résultats de la requête.

Int16[R]

Les codes format des colonnes du résultat. Il n'existe que deux possibilités : zéro pour texte, un pour binaire.

BindComplete (B) #
Byte1('2')

Identifie le message comme un indicateur de fin de Bind.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

CancelRequest (F) #
Int32(16)

Longueur du contenu du message en octets, longueur inclue.

Int32(80877102)

Le code de demande d'annulation. La valeur est choisie pour contenir 1234 sur les 16 bits les plus significatifs, et 5678 sur les 16 bits les moins significatifs. (Pour éviter la confusion, ce code ne doit pas être le même que tout numéro de version de protocole.)

Int32

L'identifiant de processus du backend cible.

Int32

La clé secrète du backend cible.

Close (F) #
Byte1('C')

Identifie le message comme une commande Close.

Int32

Longueur du contenu du message en octets, longueur inclue.

Byte1

'S' pour fermer une requête préparée ; ou 'P' pour fermer un portail.

String

Le nom de la requête préparée ou du portail à fermer (une chaîne vide sélectionne la requête préparée ou le portail non nommé).

CloseComplete (B) #
Byte1('3')

Identifie le message comme un indicateur de fin de Close.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

CommandComplete (B) #
Byte1('C')

Identifie le message comme une réponse de fin de commande.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

La balise de la commande. C'est habituellement un mot simple qui identifie la commande SQL terminée.

Pour une commande INSERT, la balise est INSERT oid lignes, où lignes correspond au nombre de lignes insérées. oid était l'identifiant d'objet de la ligne insérée si lignes valait 1 et que la table cible avait des OID, mais les colonnes systèmes OID ne sont plus supportées ; de ce fait, oid est toujours à 0.

Pour une commande DELETE, la balise est DELETE ligneslignes correspond au nombre de lignes supprimées.

Pour une commande UPDATE, la balise est UPDATE ligneslignes correspond au nombre de lignes mises à jour.

Pour une commande MERGE, la balise est MERGE ligneslignes correspond au nombre de lignes insérées, mises à jour ou supprimées.

Pour une commande SELECT ou CREATE TABLE AS, la balise est SELECT ligneslignes correspond au nombre de lignes récupérées.

Pour une commande MOVE, la balise est MOVE ligneslignes correspond au nombre de lignes de déplacement du curseur.

Pour une commande FETCH, la balise est FETCH ligneslignes est le nombre de lignes qui ont été récupérées du curseur.

Pour une commande COPY, la balise est COPY ligneslignes est le nombre de lignes copiées. (Note : le nombre de lignes apparaît seulement dans PostgreSQL 8.2 et les versions ultérieures.)

CopyData (F & B) #
Byte1('d')

Identifie le message comme des données COPY.

Int32

Longueur du contenu du message en octets, longueur inclue.

Byten

Données qui forment une partie d'un flux de données COPY. Les messages envoyés à partir du backend correspondront toujours à des lignes de données simples, mais les messages envoyés par les clients pourraient diviser le flux de données de façon arbitraire.

CopyDone (F & B) #
Byte1('c')

Identifie le message comme un indicateur de fin de COPY.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

CopyFail (F) #
Byte1('f')

Identifie le message comme un indicateur d'échec de COPY.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

Un message d'erreur à rapporter comme cause de l'échec.

CopyInResponse (B) #
Byte1('G')

Identifie le message comme une réponse Start Copy In. Le client doit maintenant envoyer des données copy-in (s'il n'est pas préparé à le faire, envoie un message CopyFail).

Int32

Longueur du contenu du message en octets, longueur inclue.

Int8

0 indique que le format global de COPY est du texte (lignes séparées par des retours à la ligne, colonnes séparées par des caractères séparateurs, etc.). 1 indique que le format global de copie est binaire (similaire au format DataRow). Voir COPY pour plus d'informations.

Int16

Le nombre de colonnes dans les données à copier (dénoté N ci-dessous).

Int16[N]

Les codes format à utiliser pour chaque colonne. Il n'y a que deux possibilités : zéro pour texte, un pour binaire. Tous doivent être à zéro pour que le format de copie global soit du texte.

CopyOutResponse (B) #
Byte1('H')

Identifie le message comme une réponse Start Copy Out. Ce message sera suivi par les données copy-out.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int8

0 indique que le format global de COPY est du texte (lignes séparées par des retours à la ligne, colonnes séparées par des caractères séparateurs, etc.). 1 indique que le format global de copie est binaire (similaire au format DataRow). Voir COPY pour plus d'informations.

Int16

Le nombre de colonnes des données à copier (dénoté N ci-dessous).

Int16[N]

Les codes format à utiliser pour chaque colonne. Il n'y a que deux possibilités : zéro pour texte, un pour binaire. Ils doivent être tous à zéro pour que le format global de copie soit du texte.

CopyBothResponse (B) #
Byte1('W')

Identifie le message comme une réponse Start Copy Both. Ce message est utilisé uniquement pour la réplication en flux.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int8

0 indique que le format global de COPY est du texte (lignes séparées par des retours à la ligne, colonnes séparées par des caractères séparateurs, etc.). 1 indique que le format global de copie est binaire (similaire au format DataRow). Voir COPY pour plus d'informations.

Int16

Le nombre de colonnes dans les données à copier (dénoté N ci-dessous).

Int16[N]

Les codes format à utiliser pour chaque colonne. Il n'y a que deux possibilités : zéro pour texte, un pour binaire. Ils doivent être tous à zéro pour que le format global de copie soit du texte.

DataRow (B) #
Byte1('D')

Identifie le message comme une ligne de données.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int16

Le nombre de valeurs de colonnes (potentiellement zéro).

Ensuite, la paire de champs suivants apparaît pour chaque colonne :

Int32

La longueur de la valeur de la colonne, en octets (ce décompte ne s'inclue pas lui-même). Peut valoir zéro. Cas particulier, -1 indique une valeur de colonne NULL.

Byten

La valeur de la colonne, dans le format indiqué par le code format associé. n est la longueur ci-dessus.

Describe (F) #
Byte1('D')

Identifie le message comme une commande Describe.

Int32

Longueur du contenu du message en octets, longueur inclue.

Byte1

'S' pour décrire une requête préparée ; ou 'P' pour décrire un portail.

String

Le nom de la requête préparée ou du portail à décrire (une chaîne vide sélectionne la requête préparée ou le portail non nommé).

EmptyQueryResponse (B) #
Byte1('I')

Identifie le message comme une réponse à une chaîne vide de requête. (Cela se substitue à CommandComplete.)

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

ErrorResponse (B) #
Byte1('E')

Identifie le message comme une erreur.

Int32

Longueur du contenu du message en octets, longueur inclue.

Le corps du message consiste en un ou plusieurs champs identifiés, suivi par un octet zéro comme terminaison. Les champs peuvent apparaître dans n'importe quel ordre. Pour chaque champ, il existe ce qui suit :

Byte1

Un code identifiant le type de champ ; si zéro, c'est le message de terminaison, et aucune chaîne ne suit. Les types de champs actuellement définis sont listés dans Section 55.8. Comme plus de types de champs pourraient être ajoutés dans le futur, les clients devraient ignorer silencieusement les champs dont le type n'est pas reconnu.

String

La valeur du champ.

Execute (F) #
Byte1('E')

Identifie le message comme une commande Execute.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

Le nom du portail à exécuter (une chaîne vide sélectionne le portail non nommé).

Int32

Nombre maximum de lignes à renvoyer si le portail contient une requête qui renvoie des lignes (ignoré sinon). Zéro indique « pas de limite ».

Flush (F) #
Byte1('H')

Identifie le message comme une commande Flush.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

FunctionCall (F) #
Byte1('F')

Identifie le message comme un appel de fonction.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32

Indique l'identifiant d'objet de la fonction à appeler.

Int16

Le nombre de codes format des arguments (dénoté C ci-dessous). Ce nombre peut valoir zéro pour indiquer qu'il n'y a pas d'arguments ou que tous les arguments utilisent le format par défaut (texte) ; ou un, auquel cas le code format spécifié est appliqué à tous les arguments ; ou être égal au nombre réel d'arguments.

Int16[C]

Les codes formats des arguments. Il n'existe que deux possibilités : zéro pour texte, un pour binaire.

Int16

Indique le nombre d'arguments à fournir à la fonction.

Ensuite, la paire suivant de champs apparaît pour chaque argument :

Int32

La longueur de la valeur de l'argument, en octets (ce décompte ne s'inclue pas lui-même). Peut valoir zéro. Cas particulier, -1 indique une valeur de colonne NULL.

Byten

La valeur de l'argument, dans le format indiqué par le code format associé. n est la longueur ci-dessus.

Après le dernier argument, le champ suivant apparaît :

Int16

Le code format pour le résultat de la fonction. Il n'existe que deux possibilités : 0 pour texte, 1 pour binaire.

FunctionCallResponse (B) #
Byte1('V')

Identifie le message comme un résultat d'appel de fonction.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32

La longueur du résultat de la fonction, en octets (ce décompte ne s'inclue pas lui-même). Peut valoir zéro. Cas particulier, -1 indique une valeur de colonne NULL.

Byten

La valeur du résultat de la fonction, dans le format indiqué par le code format associé. n est la longueur ci-dessus.

GSSENCRequest (F) #
Int32(8)

Longueur du contenu du message en octets, longueur inclue.

Int32(80877104)

Le code de demande de chiffrement GSSAPI. La valeur est choisie pour contenir 1234 sur les 16 bits les plus significatifs, et 5680 sur les 16 bits les moins significatifs. (Pour éviter de la confusion, ce code ne doit pas être le même que le numéro de version du protocole.)

GSSResponse (F) #
Byte1('p')

Identifie le message comme une réponse GSSAPI ou SSPI. Notez que ceci est aussi utilisé pour les messages de réponse SASL et mot de passe. Le type exact du message peut être déduit du contexte.

Int32

Longueur du contenu du message en octets, longueur inclue.

Byten

Données spécifiques du message GSSAPI/SSPI.

NegotiateProtocolVersion (B) #
Byte1('v')

Identifie le message comme un message de négociation de version du protocole.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32

Version mineure la plus récente supportée par le serveur pour la version majeure réclamée par le client.

Int32

Nombre d'options du protocole non reconnues par le serveur.

Puis, pour l'option de protocole non reconnue par le serveur, il y a ce qui suit :

String

Le nom de l'option.

NoData (B) #
Byte1('n')

Identifie le message comme un indicateur d'absence de données.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

NoticeResponse (B) #
Byte1('N')

Identifie le message comme une information.

Int32

Longueur du contenu du message en octets, longueur inclue.

Le corps du message consiste en un ou plusieurs champs identifiés, suivi par un octet zéro comme terminaison. Les champs peuvent apparaître dans n'importe quel ordre. Pour chaque champ, il existe ce qui suit :

Byte1

Un code identifiant le type de champs ; si zéro, ceci est le message de terminaison et aucune chaîne de caractères ne suit. Les types de champs actuellement définis sont listés dans Section 55.8. Comme plus de types de champs pourraient être ajoutés dans le futur, les clients devraient ignorer silencieusement les champs dont le type leur est inconnu.

String

La valeur du champ.

NotificationResponse (B) #
Byte1('A')

Identifie le message comme une réponse à une notification.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int32

L'identifiant du processus backend notifiant.

String

Le nom du canal où la notification a été levée.

String

La « charge » passée par le processus notifiant.

ParameterDescription (B) #
Byte1('t')

Identifie le message comme une description de paramètre.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int16

Le nombre de paramètres utilisés par la requête (peut valoir zéro).

Ensuite, pour chaque paramètre, il y a ce qui suit :

Int32

Indique l'identifiant d'objet du type de données du paramètre.

ParameterStatus (B) #
Byte1('S')

Identifie le message comme un rapport de statut d'un paramètre.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

Le nom du paramètre.

String

La valeur actuelle de ce paramètre.

Parse (F) #
Byte1('P')

Identifie le message comme une commande Parse.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

Le nom de la requête préparée de destination (une chaîne vide sélectionne la requête préparée non nommée).

String

La chaîne de requête à analyser.

Int16

Le nombre de types de données des paramètres (peut valoir zéro). Notez que cela n'est pas une indication du nombre de paramètres qui pourraient apparaître dans la requête de chaîne, seulement le nombre de types que le client souhaite pré-déclarer.

Ensuite, pour chaque paramètre, il y a ce qui suit :

Int32

Indique l'identifiant d'objet du type de données du paramètre. Placer un zéro ici est équivalent à laisser le type sans spécification.

ParseComplete (B) #
Byte1('1')

Identifie le message comme un indicateur de fin de Parse.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

PasswordMessage (F) #
Byte1('p')

Identifie le message comme une réponse de mot de passe. Notez que c'est aussi utilisé pour les messages de réponse pour GSSAPI, SSPI et SASL. Le type exact de message peut être déduit du contexte.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

Le mot de passe (chiffré si demandé).

PortalSuspended (B) #
Byte1('s')

Identifie le message comme un indicateur de portal-suspended. Notez que ceci survient uniquement si la limite de lignes a été atteint pour un message Execute.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

Query (F) #
Byte1('Q')

Identifie le message comme une simple requête.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

La requête elle-même.

ReadyForQuery (B) #
Byte1('Z')

Identifie le type de message. ReadyForQuery est envoyé quand le backend est prêt pour un nouveau cycle de requête.

Int32(5)

Longueur du contenu du message en octets, longueur inclue.

Byte1

Indicateur du statut de transaction du backend. Les valeurs possibles sont 'I' si inactif (et pas dans un bloc de transaction) ; 'T' si dans un bloc de transaction ; ou 'E' si dans un bloc de transaction en échec (les requêtes seront rejetées jusqu'à la fin du bloc).

RowDescription (B) #
Byte1('T')

Identifie le message comme une description de ligne.

Int32

Longueur du contenu du message en octets, longueur inclue.

Int16

Indique le nombre de champs dans une ligne (peut valoir zéro).

Ensuite, pour chaque champ, il y a ce qui suit :

String

Le nom du champ.

Int32

Si le champ peut être identifié comme une colonne d'une table précise, l'identifiant d'objet de la table ; sinon zéro.

Int16

Si le champ peut être identifié comme une colonne d'une table précise, le numéro de la colonne ; sinon zéro.

Int32

L'identifiant d'objet du type de données du champ.

Int16

La taille du type de données (voir pg_type.typlen). Notez que les valeurs négatives désignent des types à taille variable.

Int32

Le modifieur du type (voir pg_attribute.atttypmod). La signification du modifieur dépend du type.

Int16

Le code format en cours d'utilisation pour le champ. Actuellement, ce sera soit zéro (texte) soit un (binaire). Dans un RowDescription renvoyé à partir de la variante requête de Describe, le code format n'est pas encore connu et sera toujours zéro.

SASLInitialResponse (F) #
Byte1('p')

Identifie le message comme une réponse SASL initiale. Notez que ce message est aussi utilisé pour les messages de réponse de GSSAPI, SSPI et mot de passe. Le type exact de message est déduit du contexte.

Int32

Longueur du contenu du message en octets, longueur inclue.

String

Nom du mécanisme d'authentification SASL que le client a sélectionné.

Int32

Longueur du "Initial Client Response" spécifique au mécanisme SASL, ou -1 en cas d'absence de Initial Response.

Byten

"Initial Response" spécifique au mécanisme SASL.

SASLResponse (F) #
Byte1('p')

Identifie le message comme une réponse SASL. Notez que ce message est aussi utilisé par les messages réponses de GSSAPI, SSPI et mot de passe. Le type exact de message peut être déduit du contexte.

Int32

Longueur du contenu du message en octets, longueur inclue.

Byten

Données du message spécifique au mécanisme SASL.

SSLRequest (F) #
Int32(8)

Longueur du contenu du message en octets, longueur inclue.

Int32(80877103)

Le code de demande de chiffrement SSL. La valeur est choisie pour contenir 1234 sur les 16 bits les plus significatifs, et 5679 sur les 16 bits les moins significatifs. (Pour éviter de la confusion, ce code ne doit pas être le même que le numéro de version du protocole.)

StartupMessage (F) #
Int32

Longueur du contenu du message en octets, longueur inclue.

Int32(196608)

Le numéro de version du protocole. Les 16 bits les plus significatifs sont le numéro de version majeure (3 pour le protocole décrit ici). Les 16 bits les moins significatifs sont le numéro de version mineure (0 pour le protocole décrit ici).

Le numéro de version du protocole est suivi par une ou plusieurs paires de nom/valeur de paramètre. Un octet zéro est requis comme terminaison après la dernière paire nom/valeur. Les paramètres peuvent apparaître dans n'importe quel ordre. user est requis, les autres sont optionnels. Chaque paramètre est spécifié ainsi :

String

Le nom du paramètre. Actuellement, les noms reconnus sont :

user

Le nom de l'utilisateur pour la connexion à la base. Requis, pas de valeur par défaut.

database

La base de données où se connecter. Par défaut, le nom de l'utilisateur.

options

Arguments de la ligne de commande pour le backend. (C'est abandonné au profit de la configuration de paramètres individuels.) Les espaces dans cette chaîne permettent de séparer les arguments, à moins qu'ils ne soient échappés avec un caractère antislash (\) ; écrire \\ pour représenter un antislash litéral.

replication

Utilisé pour se connecter mode de réplication en flux, où un petit ensemble de commandes de réplication peuvent être exécutées au lieu de requêtes SQL. Les valeurs peuvent être true, false ou database, et la valeur par défaut est false. Voir Section 55.4 pour plus de détails.

En plus de tout cela, d'autres paramètres pourraient être listés. Les noms de paramètre commençant avec _pq_. sont réservés pour une utilisation en tant qu'extensions du protocole, alors que les autres sont traités comme des paramètres d'exécution à configurer au démarrage du backend. De telles configurations seront appliquées au démarrage du serveur (après analyse des arguments en ligne de commande s'il y en a) et agiront comme valeurs par défaut de la session.

String

La valeur du paramètre.

Sync (F) #
Byte1('S')

Identifie le message comme une commande Sync.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.

Terminate (F) #
Byte1('X')

Identifie le message comme une fin de session.

Int32(4)

Longueur du contenu du message en octets, longueur inclue.