# `Pyro5.protocol` — Pyro wire protocol

The pyro wire protocol structures.

Pyro - Python Remote Objects. Copyright by Irmen de Jong (irmen@razorvine.net).

Wire messages contains of a fixed size header, an optional set of annotation chunks, and then the payload data. This class doesn’t deal with the payload data: (de)serialization and handling of that data is done elsewhere. Annotation chunks are only parsed.

The header format is:

    0x00   4s  4   'PYRO' (message identifier)
    0x04   H   2   protocol version
    0x06   B   1   message type
    0x07   B   1   serializer id
    0x08   H   2   message flags
    0x0a   H   2   sequence number   (to identify proper request-reply sequencing)
    0x0c   I   4   data length   (max 4 Gb)
    0x10   I   4   annotations length (max 4 Gb, total of all chunks, 0 if no annotation chunks present)
    0x14   16s 16  correlation uuid
    0x24   H   2   (reserved)
    0x26   H   2   magic number 0x4dc5
    total size: 0x28 (40 bytes)

After the header, zero or more annotation chunks may follow, of the format:

    4s  4   annotation id (4 ASCII letters)
    I   4   chunk length  (max 4 Gb)
    B   x   annotation chunk databytes

class Pyro5.protocol.ReceivingMessage(header, payload=None)

  Wire protocol message that was received.

  add_payload(payload)

    Parses (annotations processing) and adds payload data to a received message.

  static validate(data)

    Checks if the message data looks like a valid Pyro message, if not, raise an error.

class Pyro5.protocol.SendingMessage(msgtype, flags, seq, serializer_id, payload, annotations=None)

  Wire protocol message that will be sent.

  static ping(pyroConnection)

    Convenience method to send a ‘ping’ message and wait for the ‘pong’ response

Pyro5.protocol.log_wiredata(logger, text, msg)

  logs all the given properties of the wire message in the given logger

Pyro5.protocol.recv_stub(connection, accepted_msgtypes=None)

  Receives a pyro message from a given connection. Accepts the given message types (None=any, or pass a sequence). Also reads annotation chunks and the actual payload data.

MSG_*

  (int) The various message type identifiers

FLAGS_*

  (int) Various bitflags that specify the characteristics of the message, can be bitwise or-ed together