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