| 371 | |
| 372 | |
| 373 | class _Frame(object): |
| 374 | def __init__(self, version, flags, stream, opcode, body_offset, end_pos): |
| 375 | self.version = version |
| 376 | self.flags = flags |
| 377 | self.stream = stream |
| 378 | self.opcode = opcode |
| 379 | self.body_offset = body_offset |
| 380 | self.end_pos = end_pos |
| 381 | |
| 382 | def __eq__(self, other): # facilitates testing |
| 383 | if isinstance(other, _Frame): |
| 384 | return (self.version == other.version and |
| 385 | self.flags == other.flags and |
| 386 | self.stream == other.stream and |
| 387 | self.opcode == other.opcode and |
| 388 | self.body_offset == other.body_offset and |
| 389 | self.end_pos == other.end_pos) |
| 390 | return NotImplemented |
| 391 | |
| 392 | def __str__(self): |
| 393 | return "ver({0}); flags({1:04b}); stream({2}); op({3}); offset({4}); len({5})".format(self.version, self.flags, self.stream, self.opcode, self.body_offset, self.end_pos - self.body_offset) |
| 394 | |
| 395 | |
| 396 | NONBLOCKING = (errno.EAGAIN, errno.EWOULDBLOCK) |
no outgoing calls