helper_generic is obsolete
This commit is contained in:
parent
87bf2ac1f5
commit
3ec798bcfb
|
@ -22,10 +22,13 @@ depends.check_dependencies()
|
||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import getopt
|
import getopt
|
||||||
|
import multiprocessing
|
||||||
# Used to capture a Ctrl-C keypress so that Bitmessage can shutdown gracefully.
|
# Used to capture a Ctrl-C keypress so that Bitmessage can shutdown gracefully.
|
||||||
import signal
|
import signal
|
||||||
import socket
|
import socket
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
from struct import pack
|
from struct import pack
|
||||||
|
|
||||||
from helper_startup import (
|
from helper_startup import (
|
||||||
|
@ -38,7 +41,7 @@ import shared
|
||||||
import knownnodes
|
import knownnodes
|
||||||
import state
|
import state
|
||||||
import shutdown
|
import shutdown
|
||||||
import threading
|
from debug import logger
|
||||||
|
|
||||||
# Classes
|
# Classes
|
||||||
from class_sqlThread import sqlThread
|
from class_sqlThread import sqlThread
|
||||||
|
@ -61,9 +64,9 @@ from network.downloadthread import DownloadThread
|
||||||
from network.uploadthread import UploadThread
|
from network.uploadthread import UploadThread
|
||||||
|
|
||||||
# Helper Functions
|
# Helper Functions
|
||||||
import helper_generic
|
|
||||||
import helper_threading
|
import helper_threading
|
||||||
|
|
||||||
|
|
||||||
def connectToStream(streamNumber):
|
def connectToStream(streamNumber):
|
||||||
state.streamsInWhichIAmParticipating.append(streamNumber)
|
state.streamsInWhichIAmParticipating.append(streamNumber)
|
||||||
selfInitiatedConnections[streamNumber] = {}
|
selfInitiatedConnections[streamNumber] = {}
|
||||||
|
@ -150,6 +153,43 @@ def _fixSocket():
|
||||||
socket.IPV6_V6ONLY = 27
|
socket.IPV6_V6ONLY = 27
|
||||||
|
|
||||||
|
|
||||||
|
def allThreadTraceback(frame):
|
||||||
|
id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
|
||||||
|
code = []
|
||||||
|
for threadId, stack in sys._current_frames().items():
|
||||||
|
code.append(
|
||||||
|
'\n# Thread: %s(%d)' % (id2name.get(threadId, ''), threadId))
|
||||||
|
for filename, lineno, name, line in traceback.extract_stack(stack):
|
||||||
|
code.append(
|
||||||
|
'File: "%s", line %d, in %s' % (filename, lineno, name))
|
||||||
|
if line:
|
||||||
|
code.append(' %s' % (line.strip()))
|
||||||
|
print('\n'.join(code))
|
||||||
|
|
||||||
|
|
||||||
|
def signal_handler(signal, frame):
|
||||||
|
process = multiprocessing.current_process()
|
||||||
|
logger.error(
|
||||||
|
'Got signal %i in %s/%s',
|
||||||
|
signal, process.name, threading.current_thread().name
|
||||||
|
)
|
||||||
|
if process.name == "RegExParser":
|
||||||
|
# on Windows this isn't triggered, but it's fine,
|
||||||
|
# it has its own process termination thing
|
||||||
|
raise SystemExit
|
||||||
|
if "PoolWorker" in process.name:
|
||||||
|
raise SystemExit
|
||||||
|
if threading.current_thread().name not in ("PyBitmessage", "MainThread"):
|
||||||
|
return
|
||||||
|
logger.error("Got signal %i", signal)
|
||||||
|
if shared.thisapp.daemon or not state.enableGUI: # FIXME redundant?
|
||||||
|
shutdown.doCleanShutdown()
|
||||||
|
else:
|
||||||
|
allThreadTraceback(frame)
|
||||||
|
print('Unfortunately you cannot use Ctrl+C when running the UI'
|
||||||
|
' because the UI captures the signal.')
|
||||||
|
|
||||||
|
|
||||||
# This is a list of current connections (the thread pointers at least)
|
# This is a list of current connections (the thread pointers at least)
|
||||||
selfInitiatedConnections = {}
|
selfInitiatedConnections = {}
|
||||||
|
|
||||||
|
@ -437,8 +477,8 @@ class Main:
|
||||||
os.kill(grandfatherPid, signal.SIGTERM)
|
os.kill(grandfatherPid, signal.SIGTERM)
|
||||||
|
|
||||||
def setSignalHandler(self):
|
def setSignalHandler(self):
|
||||||
signal.signal(signal.SIGINT, helper_generic.signal_handler)
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
signal.signal(signal.SIGTERM, helper_generic.signal_handler)
|
signal.signal(signal.SIGTERM, signal_handler)
|
||||||
# signal.signal(signal.SIGINT, signal.SIG_DFL)
|
# signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||||
|
|
||||||
def usage(self):
|
def usage(self):
|
||||||
|
|
|
@ -9,6 +9,7 @@ import random
|
||||||
import string
|
import string
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from sqlite3 import register_adapter
|
from sqlite3 import register_adapter
|
||||||
|
@ -44,7 +45,6 @@ from account import (
|
||||||
getSortedAccounts, getSortedSubscriptions, accountClass, BMAccount,
|
getSortedAccounts, getSortedSubscriptions, accountClass, BMAccount,
|
||||||
GatewayAccount, MailchuckAccount, AccountColor)
|
GatewayAccount, MailchuckAccount, AccountColor)
|
||||||
import dialogs
|
import dialogs
|
||||||
from helper_generic import powQueueSize
|
|
||||||
from network.stats import pendingDownload, pendingUpload
|
from network.stats import pendingDownload, pendingUpload
|
||||||
from uisignaler import UISignaler
|
from uisignaler import UISignaler
|
||||||
import knownnodes
|
import knownnodes
|
||||||
|
@ -107,6 +107,18 @@ def change_translation(newlocale):
|
||||||
logger.error("Failed to set locale to %s", lang, exc_info=True)
|
logger.error("Failed to set locale to %s", lang, exc_info=True)
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: rewrite
|
||||||
|
def powQueueSize():
|
||||||
|
curWorkerQueue = queues.workerQueue.qsize()
|
||||||
|
for thread in threading.enumerate():
|
||||||
|
try:
|
||||||
|
if thread.name == "singleWorker":
|
||||||
|
curWorkerQueue += thread.busy
|
||||||
|
except Exception as err:
|
||||||
|
logger.info('Thread error %s', err)
|
||||||
|
return curWorkerQueue
|
||||||
|
|
||||||
|
|
||||||
class MyForm(settingsmixin.SMainWindow):
|
class MyForm(settingsmixin.SMainWindow):
|
||||||
|
|
||||||
# the last time that a message arrival sound was played
|
# the last time that a message arrival sound was played
|
||||||
|
|
|
@ -1,109 +0,0 @@
|
||||||
"""
|
|
||||||
Helper Generic perform generic operations for threading.
|
|
||||||
|
|
||||||
Also perform some conversion operations.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
import socket
|
|
||||||
import sys
|
|
||||||
import threading
|
|
||||||
import traceback
|
|
||||||
import multiprocessing
|
|
||||||
from binascii import hexlify, unhexlify
|
|
||||||
|
|
||||||
import shared
|
|
||||||
import state
|
|
||||||
import queues
|
|
||||||
import shutdown
|
|
||||||
from debug import logger
|
|
||||||
|
|
||||||
|
|
||||||
def powQueueSize():
|
|
||||||
curWorkerQueue = queues.workerQueue.qsize()
|
|
||||||
for thread in threading.enumerate():
|
|
||||||
try:
|
|
||||||
if thread.name == "singleWorker":
|
|
||||||
curWorkerQueue += thread.busy
|
|
||||||
except Exception as err:
|
|
||||||
logger.info('Thread error %s', err)
|
|
||||||
return curWorkerQueue
|
|
||||||
|
|
||||||
|
|
||||||
def convertIntToString(n):
|
|
||||||
a = __builtins__.hex(n)
|
|
||||||
if a[-1:] == 'L':
|
|
||||||
a = a[:-1]
|
|
||||||
if (len(a) % 2) == 0:
|
|
||||||
return unhexlify(a[2:])
|
|
||||||
else:
|
|
||||||
return unhexlify('0' + a[2:])
|
|
||||||
|
|
||||||
|
|
||||||
def convertStringToInt(s):
|
|
||||||
return int(hexlify(s), 16)
|
|
||||||
|
|
||||||
|
|
||||||
def allThreadTraceback(frame):
|
|
||||||
id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
|
|
||||||
code = []
|
|
||||||
for threadId, stack in sys._current_frames().items():
|
|
||||||
code.append(
|
|
||||||
'\n# Thread: %s(%d)' % (id2name.get(threadId, ''), threadId))
|
|
||||||
for filename, lineno, name, line in traceback.extract_stack(stack):
|
|
||||||
code.append(
|
|
||||||
'File: "%s", line %d, in %s' % (filename, lineno, name))
|
|
||||||
if line:
|
|
||||||
code.append(' %s' % (line.strip()))
|
|
||||||
print('\n'.join(code))
|
|
||||||
|
|
||||||
|
|
||||||
def signal_handler(signal, frame):
|
|
||||||
process = multiprocessing.current_process()
|
|
||||||
logger.error(
|
|
||||||
'Got signal %i in %s/%s',
|
|
||||||
signal, process.name, threading.current_thread().name
|
|
||||||
)
|
|
||||||
if process.name == "RegExParser":
|
|
||||||
# on Windows this isn't triggered, but it's fine,
|
|
||||||
# it has its own process termination thing
|
|
||||||
raise SystemExit
|
|
||||||
if "PoolWorker" in process.name:
|
|
||||||
raise SystemExit
|
|
||||||
if threading.current_thread().name not in ("PyBitmessage", "MainThread"):
|
|
||||||
return
|
|
||||||
logger.error("Got signal %i", signal)
|
|
||||||
if shared.thisapp.daemon or not state.enableGUI: # FIXME redundant?
|
|
||||||
shutdown.doCleanShutdown()
|
|
||||||
else:
|
|
||||||
allThreadTraceback(frame)
|
|
||||||
print('Unfortunately you cannot use Ctrl+C when running the UI'
|
|
||||||
' because the UI captures the signal.')
|
|
||||||
|
|
||||||
|
|
||||||
def isHostInPrivateIPRange(host):
|
|
||||||
if ":" in host: # IPv6
|
|
||||||
hostAddr = socket.inet_pton(socket.AF_INET6, host)
|
|
||||||
if hostAddr == ('\x00' * 15) + '\x01':
|
|
||||||
return False
|
|
||||||
if hostAddr[0] == '\xFE' and (ord(hostAddr[1]) & 0xc0) == 0x80:
|
|
||||||
return False
|
|
||||||
if (ord(hostAddr[0]) & 0xfe) == 0xfc:
|
|
||||||
return False
|
|
||||||
elif ".onion" not in host:
|
|
||||||
if host[:3] == '10.':
|
|
||||||
return True
|
|
||||||
if host[:4] == '172.':
|
|
||||||
if host[6] == '.':
|
|
||||||
if int(host[4:6]) >= 16 and int(host[4:6]) <= 31:
|
|
||||||
return True
|
|
||||||
if host[:8] == '192.168.':
|
|
||||||
return True
|
|
||||||
# Multicast
|
|
||||||
if host[:3] >= 224 and host[:3] <= 239 and host[4] == '.':
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def addDataPadding(data, desiredMsgLength=12, paddingChar='\x00'):
|
|
||||||
return data + paddingChar * (desiredMsgLength - len(data))
|
|
Reference in New Issue
Block a user