class Protocol(p2protocol.Protocol):
def __init__(self, net):
- p2protocol.Protocol.__init__(self, net.P2P_PREFIX, 1000000)
+ p2protocol.Protocol.__init__(self, net.P2P_PREFIX, 1000000, ignore_trailing_payload=True)
def connectionMade(self):
self.send_version(
pass
class Protocol(protocol.Protocol):
- def __init__(self, message_prefix, max_payload_length, traffic_happened=variable.Event()):
+ def __init__(self, message_prefix, max_payload_length, traffic_happened=variable.Event(), ignore_trailing_payload=False):
self._message_prefix = message_prefix
self._max_payload_length = max_payload_length
self.dataReceived2 = datachunker.DataChunker(self.dataReceiver())
self.traffic_happened = traffic_happened
+ self.ignore_trailing_payload = ignore_trailing_payload
def dataReceived(self, data):
self.traffic_happened.happened('p2p/in', len(data))
continue
try:
- self.packetReceived(command, type_.unpack(payload))
+ self.packetReceived(command, type_.unpack(payload, self.ignore_trailing_payload))
except:
print 'RECV', command, payload[:100].encode('hex') + ('...' if len(payload) > 100 else '')
log.err(None, 'Error handling message: (see RECV line)')
def __ne__(self, other):
return not (self == other)
- def _unpack(self, data):
+ def _unpack(self, data, ignore_trailing=False):
obj, (data2, pos) = self.read((data, 0))
assert data2 is data
- if pos != len(data):
+ if pos != len(data) and not ignore_trailing:
raise LateEnd()
return obj
return ''.join(res)
- def unpack(self, data):
- obj = self._unpack(data)
+ def unpack(self, data, ignore_trailing=False):
+ obj = self._unpack(data, ignore_trailing)
if p2pool.DEBUG:
if self._pack(obj) != data: