12
12
from struct import pack
13
13
from subprocess import call # nosec
14
14
15
+ from six .moves import configparser , queue
16
+
15
17
import defaults
16
18
import helper_inbox
17
19
import helper_msgcoding
30
32
)
31
33
from bmconfigparser import BMConfigParser
32
34
from helper_sql import sqlExecute , sqlQuery
33
- from inventory import Inventory
34
35
from network import knownnodes , StoppableThread
35
- from six .moves import configparser , queue
36
36
37
37
38
38
def sizeof_fmt (num , suffix = 'h/s' ):
@@ -48,15 +48,17 @@ def sizeof_fmt(num, suffix='h/s'):
48
48
class singleWorker (StoppableThread ):
49
49
"""Thread for performing PoW"""
50
50
51
- def __init__ (self ):
51
+ def __init__ (self , queue , inventory ):
52
52
super (singleWorker , self ).__init__ (name = "singleWorker" )
53
+ self .inventory = inventory
54
+ self .queue = queue
53
55
proofofwork .init ()
54
56
55
57
def stopThread (self ):
56
58
"""Signal through the queue that the thread should be stopped"""
57
59
58
60
try :
59
- queues . workerQueue .put (("stopThread" , "data" ))
61
+ self . queue .put (("stopThread" , "data" ))
60
62
except queue .Full :
61
63
self .logger .error ('workerQueue is Full' )
62
64
super (singleWorker , self ).stopThread ()
@@ -119,7 +121,8 @@ def run(self):
119
121
# For the case if user deleted knownnodes
120
122
# but is still having onionpeer objects in inventory
121
123
if not knownnodes .knownNodesActual :
122
- for item in Inventory ().by_type_and_tag (protocol .OBJECT_ONIONPEER ):
124
+ for item in self .inventory .by_type_and_tag (
125
+ protocol .OBJECT_ONIONPEER ):
123
126
queues .objectProcessorQueue .put ((
124
127
protocol .OBJECT_ONIONPEER , item .payload
125
128
))
@@ -134,17 +137,17 @@ def run(self):
134
137
135
138
# just in case there are any pending tasks for msg
136
139
# messages that have yet to be sent.
137
- queues . workerQueue .put (('sendmessage' , '' ))
140
+ self . queue .put (('sendmessage' , '' ))
138
141
# just in case there are any tasks for Broadcasts
139
142
# that have yet to be sent.
140
- queues . workerQueue .put (('sendbroadcast' , '' ))
143
+ self . queue .put (('sendbroadcast' , '' ))
141
144
142
145
# send onionpeer object
143
- queues . workerQueue .put (('sendOnionPeerObj' , '' ))
146
+ self . queue .put (('sendOnionPeerObj' , '' ))
144
147
145
148
while state .shutdown == 0 :
146
149
self .busy = 0
147
- command , data = queues . workerQueue .get ()
150
+ command , data = self . queue .get ()
148
151
self .busy = 1
149
152
if command == 'sendmessage' :
150
153
try :
@@ -191,7 +194,7 @@ def run(self):
191
194
command
192
195
)
193
196
194
- queues . workerQueue .task_done ()
197
+ self . queue .task_done ()
195
198
self .logger .info ("Quitting..." )
196
199
197
200
def _getKeysForAddress (self , address ):
@@ -290,13 +293,12 @@ def doPOWForMyV2Pubkey(self, adressHash):
290
293
291
294
inventoryHash = calculateInventoryHash (payload )
292
295
objectType = 1
293
- Inventory ()[ inventoryHash ] = (
294
- objectType , streamNumber , payload , embeddedTime , '' )
296
+ self . inventory . put (
297
+ inventoryHash , objectType , streamNumber , payload , embeddedTime )
295
298
296
299
self .logger .info (
297
300
'broadcasting inv with hash: %s' , hexlify (inventoryHash ))
298
301
299
- queues .invQueue .put ((streamNumber , inventoryHash ))
300
302
queues .UISignalQueue .put (('updateStatusBar' , '' ))
301
303
try :
302
304
BMConfigParser ().set (
@@ -378,13 +380,11 @@ def sendOutOrStoreMyV3Pubkey(self, adressHash):
378
380
379
381
inventoryHash = calculateInventoryHash (payload )
380
382
objectType = 1
381
- Inventory ()[inventoryHash ] = (
382
- objectType , streamNumber , payload , embeddedTime , '' )
383
+ self .inventory .put (objectType , streamNumber , payload , embeddedTime )
383
384
384
385
self .logger .info (
385
386
'broadcasting inv with hash: %s' , hexlify (inventoryHash ))
386
387
387
- queues .invQueue .put ((streamNumber , inventoryHash ))
388
388
queues .UISignalQueue .put (('updateStatusBar' , '' ))
389
389
try :
390
390
BMConfigParser ().set (
@@ -471,15 +471,13 @@ def sendOutOrStoreMyV4Pubkey(self, myAddress):
471
471
472
472
inventoryHash = calculateInventoryHash (payload )
473
473
objectType = 1
474
- Inventory ()[ inventoryHash ] = (
474
+ self . inventory . put (
475
475
objectType , streamNumber , payload , embeddedTime ,
476
- doubleHashOfAddressData [32 :]
477
- )
476
+ doubleHashOfAddressData [32 :])
478
477
479
478
self .logger .info (
480
479
'broadcasting inv with hash: %s' , hexlify (inventoryHash ))
481
480
482
- queues .invQueue .put ((streamNumber , inventoryHash ))
483
481
queues .UISignalQueue .put (('updateStatusBar' , '' ))
484
482
try :
485
483
BMConfigParser ().set (
@@ -507,7 +505,7 @@ def sendOnionPeerObj(self, peer=None):
507
505
objectPayload = encodeVarint (peer .port ) + protocol .encodeHost (peer .host )
508
506
tag = calculateInventoryHash (objectPayload )
509
507
510
- if Inventory () .by_type_and_tag (objectType , tag ):
508
+ if self . inventory .by_type_and_tag (objectType , tag ):
511
509
return # not expired
512
510
513
511
payload = pack ('>Q' , embeddedTime )
@@ -520,14 +518,14 @@ def sendOnionPeerObj(self, peer=None):
520
518
payload , TTL , log_prefix = '(For onionpeer object)' )
521
519
522
520
inventoryHash = calculateInventoryHash (payload )
523
- Inventory ()[ inventoryHash ] = (
521
+ self . inventory . put (
524
522
objectType , streamNumber , buffer (payload ),
525
- embeddedTime , buffer (tag )
526
- )
523
+ embeddedTime , buffer (tag ))
524
+
527
525
self .logger .info (
528
526
'sending inv (within sendOnionPeerObj function) for object: %s' ,
529
527
hexlify (inventoryHash ))
530
- queues .invQueue .put ((streamNumber , inventoryHash ))
528
+ queues .UISignalQueue .put (('updateStatusBar' , '' ))
531
529
532
530
def sendBroadcast (self ):
533
531
"""Send a broadcast-type object (assemble the object, perform PoW and put it to the inv announcement queue)"""
@@ -688,14 +686,14 @@ def sendBroadcast(self):
688
686
689
687
inventoryHash = calculateInventoryHash (payload )
690
688
objectType = 3
691
- Inventory ()[ inventoryHash ] = (
689
+ self . inventory . put (
692
690
objectType , streamNumber , payload , embeddedTime , tag )
691
+
693
692
self .logger .info (
694
693
'sending inv (within sendBroadcast function)'
695
694
' for object: %s' ,
696
695
hexlify (inventoryHash )
697
696
)
698
- queues .invQueue .put ((streamNumber , inventoryHash ))
699
697
700
698
queues .UISignalQueue .put ((
701
699
'updateSentItemStatusByAckdata' , (
@@ -847,7 +845,8 @@ def sendMsg(self):
847
845
hexlify (privEncryptionKey ))
848
846
)
849
847
850
- for value in Inventory ().by_type_and_tag (1 , toTag ):
848
+ for value in self .inventory .by_type_and_tag (
849
+ 1 , toTag ):
851
850
# if valid, this function also puts it
852
851
# in the pubkeys table.
853
852
if protocol .decryptAndCheckPubkeyPayload (
@@ -1303,8 +1302,9 @@ def sendMsg(self):
1303
1302
1304
1303
inventoryHash = calculateInventoryHash (encryptedPayload )
1305
1304
objectType = 2
1306
- Inventory ()[inventoryHash ] = (
1307
- objectType , toStreamNumber , encryptedPayload , embeddedTime , '' )
1305
+ self .inventory .put (
1306
+ objectType , toStreamNumber , encryptedPayload , embeddedTime )
1307
+
1308
1308
if BMConfigParser ().has_section (toaddress ) or \
1309
1309
not protocol .checkBitfield (behaviorBitfield , protocol .BITFIELD_DOESACK ):
1310
1310
queues .UISignalQueue .put ((
@@ -1329,7 +1329,6 @@ def sendMsg(self):
1329
1329
'Broadcasting inv for my msg(within sendmsg function): %s' ,
1330
1330
hexlify (inventoryHash )
1331
1331
)
1332
- queues .invQueue .put ((toStreamNumber , inventoryHash ))
1333
1332
1334
1333
# Update the sent message in the sent table with the
1335
1334
# necessary information.
@@ -1461,10 +1460,10 @@ def requestPubKey(self, toAddress):
1461
1460
1462
1461
inventoryHash = calculateInventoryHash (payload )
1463
1462
objectType = 1
1464
- Inventory ()[inventoryHash ] = (
1465
- objectType , streamNumber , payload , embeddedTime , '' )
1463
+ self .inventory .put (
1464
+ objectType , streamNumber , payload , embeddedTime )
1465
+
1466
1466
self .logger .info ('sending inv (for the getpubkey message)' )
1467
- queues .invQueue .put ((streamNumber , inventoryHash ))
1468
1467
1469
1468
# wait 10% past expiration
1470
1469
sleeptill = int (time .time () + TTL * 1.1 )
0 commit comments