diff --git a/src/class_singleWorker.py b/src/class_singleWorker.py index bade2b90..6e4d29a2 100644 --- a/src/class_singleWorker.py +++ b/src/class_singleWorker.py @@ -31,6 +31,7 @@ from helper_sql import sqlExecute, sqlQuery from network import knownnodes, StoppableThread from six.moves import configparser, queue from six.moves.reprlib import repr +import six from dbcompat import dbstr @@ -518,9 +519,15 @@ class singleWorker(StoppableThread): payload, TTL, log_prefix='(For onionpeer object)') inventoryHash = highlevelcrypto.calculateInventoryHash(payload) + if six.PY2: + payload_buffer = buffer(payload) + tag_buffer = buffer(tag) + else: # assume six.PY3 + payload_buffer = memoryview(payload) + tag_buffer = memoryview(tag) state.Inventory[inventoryHash] = ( - objectType, streamNumber, buffer(payload), # noqa: F821 - embeddedTime, buffer(tag) # noqa: F821 + objectType, streamNumber, payload_buffer, # noqa: F821 + embeddedTime, tag_buffer # noqa: F821 ) self.logger.info( 'sending inv (within sendOnionPeerObj function) for object: %s', diff --git a/src/network/bmproto.py b/src/network/bmproto.py index 0d6261a4..a981ce0e 100644 --- a/src/network/bmproto.py +++ b/src/network/bmproto.py @@ -422,8 +422,12 @@ class BMProto(AdvancedDispatcher, ObjectTracker): try: self.object.checkObjectByType() + if six.PY2: + data_buffer = buffer(self.object.data) + else: # assume six.PY3 + data_buffer = memoryview(self.object.data) objectProcessorQueue.put(( - self.object.objectType, buffer(self.object.data))) # noqa: F821 + self.object.objectType, data_buffer)) # noqa: F821 except BMObjectInvalidError: BMProto.stopDownloadingObject(self.object.inventoryHash, True) else: @@ -437,10 +441,16 @@ class BMProto(AdvancedDispatcher, ObjectTracker): state.Dandelion.removeHash( self.object.inventoryHash, "cycle detection") + if six.PY2: + object_buffer = buffer(self.payload[objectOffset:]) + tag_buffer = buffer(self.object.tag) + else: # assume six.PY3 + object_buffer = memoryview(self.payload[objectOffset:]) + tag_buffer = memoryview(self.object.tag) state.Inventory[self.object.inventoryHash] = ( self.object.objectType, self.object.streamNumber, - buffer(self.payload[objectOffset:]), self.object.expiresTime, # noqa: F821 - buffer(self.object.tag) # noqa: F821 + object_buffer, self.object.expiresTime, # noqa: F821 + tag_buffer # noqa: F821 ) self.handleReceivedObject( self.object.streamNumber, self.object.inventoryHash)