Use protocol.decodeObjectParameters() for sending ACK - put it in the inventory
This commit is contained in:
parent
2a93b04332
commit
13d090e344
|
@ -31,7 +31,8 @@ from bmconfigparser import config
|
|||
from fallback import RIPEMD160Hash
|
||||
from helper_sql import (
|
||||
sql_ready, sql_timeout, SqlBulkExecute, sqlExecute, sqlQuery)
|
||||
from network import bmproto, knownnodes
|
||||
from inventory import Inventory
|
||||
from network import knownnodes
|
||||
from network.node import Peer
|
||||
from tr import _translate
|
||||
|
||||
|
@ -64,7 +65,6 @@ class objectProcessor(threading.Thread):
|
|||
logger.debug(
|
||||
'Loaded %s objects from disk into the objectProcessorQueue.',
|
||||
len(queryreturn))
|
||||
self._ack_obj = bmproto.BMStringParser()
|
||||
self.successfullyDecryptMessageTimings = []
|
||||
|
||||
def run(self):
|
||||
|
@ -733,7 +733,13 @@ class objectProcessor(threading.Thread):
|
|||
and not config.safeGetBoolean(toAddress, 'dontsendack')
|
||||
and not config.safeGetBoolean(toAddress, 'chan')
|
||||
):
|
||||
self._ack_obj.send_data(ackData[24:])
|
||||
ackPayload = ackData[24:]
|
||||
objectType, toStreamNumber, expiresTime = \
|
||||
protocol.decodeObjectParameters(ackPayload)
|
||||
inventoryHash = calculateInventoryHash(ackPayload)
|
||||
Inventory()[inventoryHash] = (
|
||||
objectType, toStreamNumber, ackPayload, expiresTime, b'')
|
||||
queues.invQueue.put((toStreamNumber, inventoryHash))
|
||||
|
||||
# Display timing data
|
||||
timeRequiredToAttemptToDecryptMessage = time.time(
|
||||
|
|
|
@ -9,7 +9,6 @@ import re
|
|||
import socket
|
||||
import struct
|
||||
import time
|
||||
from binascii import hexlify
|
||||
|
||||
# magic imports!
|
||||
import addresses
|
||||
|
@ -678,32 +677,3 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
|||
except AttributeError:
|
||||
logger.debug('Disconnected socket closing')
|
||||
AdvancedDispatcher.handle_close(self)
|
||||
|
||||
|
||||
class BMStringParser(BMProto):
|
||||
"""
|
||||
A special case of BMProto used by objectProcessor to send ACK
|
||||
"""
|
||||
def __init__(self):
|
||||
super(BMStringParser, self).__init__()
|
||||
self.destination = Peer('127.0.0.1', 8444)
|
||||
self.payload = None
|
||||
ObjectTracker.__init__(self)
|
||||
|
||||
def send_data(self, data):
|
||||
"""Send object given by the data string"""
|
||||
# This class is introduced specially for ACK sending, please
|
||||
# change log strings if you are going to use it for something else
|
||||
self.bm_proto_reset()
|
||||
self.payload = data
|
||||
try:
|
||||
self.bm_command_object()
|
||||
except BMObjectAlreadyHaveError:
|
||||
pass # maybe the same msg received on different nodes
|
||||
except BMObjectExpiredError:
|
||||
logger.debug(
|
||||
'Sending ACK failure (expired): %s', hexlify(data))
|
||||
except Exception as e:
|
||||
logger.debug(
|
||||
'Exception of type %s while sending ACK',
|
||||
type(e), exc_info=True)
|
||||
|
|
Reference in New Issue
Block a user