| 47 | HEADER_STRUCT_SIZE = struct.calcsize(HEADER_STRUCT_FORMAT) |
| 48 | |
| 49 | def decode(self, data, offset): |
| 50 | data_len = len(data) |
| 51 | |
| 52 | if data_len < offset + self.HEADER_STRUCT_SIZE: |
| 53 | # Not enough data for decoding |
| 54 | return 0 |
| 55 | |
| 56 | self.reset() |
| 57 | length = struct.unpack(self.HEADER_STRUCT_FORMAT, data[offset:offset+self.HEADER_STRUCT_SIZE])[0] |
| 58 | |
| 59 | if length >> 24 != 0: |
| 60 | raise NMBError("Invalid protocol header for Direct TCP session message") |
| 61 | |
| 62 | if data_len < offset + self.HEADER_STRUCT_SIZE + length: |
| 63 | return 0 |
| 64 | |
| 65 | self.data = data[offset+self.HEADER_STRUCT_SIZE:offset+self.HEADER_STRUCT_SIZE+length] |
| 66 | return self.HEADER_STRUCT_SIZE + length |