From 4309cb3699d5e19248e8bd9a76b9494aec86dc76 Mon Sep 17 00:00:00 2001 From: Kashiko Koibumi Date: Sun, 26 May 2024 13:27:43 +0900 Subject: [PATCH] use buffer() in Python2 and use memoryview in Python3 --- src/class_singleWorker.py | 11 +++++++++-- src/network/bmproto.py | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/class_singleWorker.py b/src/class_singleWorker.py index f2821f65..bac660d5 100644 --- a/src/class_singleWorker.py +++ b/src/class_singleWorker.py @@ -30,6 +30,7 @@ from bmconfigparser import config from helper_sql import sqlExecute, sqlQuery from network import knownnodes, StoppableThread from six.moves import configparser, queue +import six def sizeof_fmt(num, suffix='h/s'): @@ -515,9 +516,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 ed1d48c4..5676abbf 100644 --- a/src/network/bmproto.py +++ b/src/network/bmproto.py @@ -9,6 +9,7 @@ import re import socket import struct import time +import six # magic imports! import addresses @@ -409,8 +410,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: @@ -424,10 +429,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)