Formatos de Mensajes

Esta seccion describe el formato detallado de cada mensaje. Cana uno puede ser enviado por un frontend (F), por un backend (B) o por ambos (F y B).

AsciiRow (B)

Byte1('D')

Identifica el mensaje como una fila de datos ASCII . (Un mensaje previo RowDescription define el n�mero de campos en la fila y sus tipos de datos).

Byten

Un mapa de bits con un bit para cada campo en la fila. El primer campo corresponde al bit 7 (MSB) del primer byte, el segundo campo corresponde al bit 6 del primer byte, el octavo campo corresponde al bit 0 (LSB) del primer byte, el noveno campo corresponde al bit 7 del segundo byte, y as� sucesivamente. Cada bit est� activo si el valor del campo correspondiente no es NULL. Si el n�mero de campos no es un m�ltiplo de 8, el resto del �ltimo byte en el mapa de bits no es utilizado.

Por lo tanto, para cada campo con un valor no NULL, tenemos lo siguiente:

Int32

Especifica el tama�o del valor del campo, incluyendo este tama�o.

Byten

Especifica el valor del campo mismo en caracteres ASCII. n es el anterior tama�o menos 4. No hay '\0' al final del campo de datos, el frontend debe a�adirlo si quiere uno.

AuthenticationOk (B)

Byte1('R')

Identifica el mensaje como una petici�n de autentificaci�n.

Int32(0)

Especifica que la autentificaci�n tuvo �xito.

AuthenticationKerberosV4 (B)

Byte1('R')

Identifica el mensaje como una petici�n de autentificaci�n.

Int32(1)

Especifica que se requiere autentificaci�n Kerberos V4.

AuthenticationKerberosV5 (B)

Byte1('R')

Identifica el mensaje como una petici�n de autentificaci�n.

Int32(2)

Especifica que se requiere autentificaci�n Kerberos V5.

AuthenticationUnencryptedPassword (B)

Byte1('R')

Identifica el mensaje como una petici�n de autentificaci�n.

Int32(3)

Especifica que se requiere una contrase�a no encriptada.

AuthenticationEncryptedPassword (B)

Byte1('R')

Identifica el mensaje como una petici�n de autentificaci�n.

Int32(4)

Especifica que se requiere una contrase�a encriptada.

Byte2

El salto a utilizar al encriptar la contrase�a.

BackendKeyData (B)

Byte1('K')

Identifica el mensaje como una clave de cancelaci�n. El frontend debe guardar estos valore se desea poder enviar mensajes CancelRequest posteriormente.

Int32

El ID de proceso del backend.

Int32

La clave secreta de este backend.

BinaryRow (B)

Byte1('B')

Identifica el mensaje como una fila de datos binarios. (Un mensaje RowDescription previo define el n�mero de campos en la fial y sus tipos de datos)

Byten

Un mapa de bits con un bit para cada campo en la fila. El primer campo corresponde al bit 7 (MSB) del primer byte, el segundo campo corresponde al bit 6 del primer byte, el octavo campo corresponde al bit 0 (LSB) del primer byte, el noveno campo corresponde al bit 7 del segundo byte, y as� sucesivamente. Cada bit est� activo si el valor del campo correspondiente no es NULL. Si el n�mero de campos no es un m�ltiplo de 8, el resto del �ltimo byte en el mapa de bits no es utilizado.

Para cada campo con un valor distinto de NULL, tenemos lo siguiente:

Int32

Especifica el tama�o del valor del campo, excluyendo este tama�o. **************************************************************************** *************************** Comprobar esto, por que aqu� dice _excluyendo_ y antes (l�nea 756) dice incluyendo??????????????***************** ****************************************************************************

Byten

Especifica el valor del campo mismo en formato binario. n es el tama�o previo.

CancelRequest (F)

Int32(16)

El tama�o del paquete en bytes.

Int32(80877102)

El c�digo de cancelaci�n de petici�n. El valor es elegido para que contenga "1234" el los 16 bits m�s significativos, y "5678" en los 16 bits menos significativos. Para evitar confisi�n, este c�digo no debe ser el mismo que ning�n n�mero de versi�n del protocolo.

Int32

El ID de proceso del backend objetivo.

Int32

La clave secreta para el backend objectivo.

CompletedResponse (B)

Byte1('C')

Identifica este mensaje como una petici�n completada.

String

El comando. Normalmente (pero no siempre) una palabra simple que identifica que comando SQL se complet�.

CopyDataRows (B y F)

Es un flujo de filas donde cada una est� terminada por un Byte1('\n'). Se completa con una secuencia Byte1('\\'), Byte1('.'), Byte1('\n').

CopyInResponse (B)

Byte1('G')

Identifica el mensaje como una respuesta Start Copy In. El frontend debe enviar un mensaje CopyDataRows.

CopyOutResponse (B)

Byte1('H')

Identifica el mensaje como una respuesta Start Copy Out. Este mensaje ser� seguido por un mensaje CopyDataRows.

CursorResponse (B)

Byte1('P')

Identifica el mensaje como un cursor.

String

El nombre del cursor. Ser� "blanco" si el cursor es impl�cito.

EmptyQueryResponse (B)

Byte1('I')

Identifica este mensaje como una respuesta a una sentencia vac�a.

String("")

Sin utilizar.

EncryptedPasswordPacket (F)

Int32

El tama�o del paquete en bytes.

String

La contrase�a encriptada (mediante crypt()).

ErrorResponse (B)

Byte1('E')

Identifica el mensaje como un error.

String

El mensaje de error mismo.

FunctionCall (F)

Byte1('F')

Identifica el mensaje como una llamada a funci�n.

String("")

Sin utilizar.

Int32

Especifica el ID de objeto de la funci�n a llamar.

Int32

Especifica el n�mero de argumentos que se suministran a la funci�n.

Para cada argumento, se tiene lo siguiente:

Int32

Especifica el tama�o del valor del argumento, excluyendo este tama�o.

Byten

Especifica el valor del campo mismo en formato binario. n es el tama�o anterior.

FunctionResultResponse (B)

Byte1('V')

Identifica el mensaje como un resultado de llamada a funci�n.

Byte1('G')

Especifica que se devolvi� un resultado no vac�o.

Int32

Especifica el tama�o del valor del resultado, excluyendo este tama�o.

Byten

Especifia el valor del resultado en formato binario. n Es el tama�o anterior.

Byte1('0')

Sin utilizar. (Hablando propiamente, FunctionResultResponse y FunctionVoidResponse son lo mismo pero con algunas partes opcionales en el mensaje).

FunctionVoidResponse (B)

Byte1('V')

Identifica el mensaje como un resultado de llamada a funci�n.

Byte1('0')

Especifica que se devolvi� un resultado vac�o.

NoticeResponse (B)

Byte1('N')

Identifica el mensaje como una advertencia.

String

El mensaje de advertencia mismo.

NotificationResponse (B)

Byte1('A')

Identifica el mansaje como una repuesta de notificaci�n.

Int32

El ID de proceso del proceso backend.

String

El nombre de la condici�n en la que se lanz� la notificaci�n.

Query (F)

Byte1('Q')

Identifica el mensaje como una petici�n.

String

La petici�n misma.

ReadyForQuery (B)

Byte1('Z')

Identifica el tipo de mensaje. ReadyForQuery es enviado cuando el backend est� listo para un nuevo ciclo de petici�n.

RowDescription (B)

Byte1('T')

Identifica el mensaje como una descripci�n de fila.

Int16

Especifica el n�mero de campos en una fila (puede ser cero).

Para cada campo tenemos lo siguiente:

String

Especifica el nombre del campo.

Int32

Especifica el ID de objeto del tipo de campo.

Int16

Especifica el tama�o del tipo.

Int32

Especifica el modificador del tipo.

StartupPacket (F)

Int32(296)

El tama�o del paquete en bytes.

Int32

El n�mero de versi�n del protocolo. Los 16 bits m�s significativos son el numero de versi�n mayor. Los 16 bits menos significativos son el n�mero de versi�n menor.

LimString64

El nombre de la base de datos, por defecto el nombre del usuario si no se especifica.

LimString32

El nombre del usuario.

LimString64

Cualquier linea de argumentos para pasar al backend por el postmaster.

LimString64

Sin utilizar.

LimString64

La tty opcional que el backen deber�a utilizar para mensajes de depuraci�n.

Terminate (F)

Byte1('X')

Identifica el mensaje como una terminaci�n.

UnencryptedPasswordPacket (F)

Int32

El tama�o del paquete en bytes.

String

La contrase�a sin encriptar.