Keep track of network protocol status
This commit is contained in:
parent
810e50a040
commit
ff8deebf60
|
@ -2364,6 +2364,7 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
"MainWindow", "Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any)."))
|
"MainWindow", "Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any)."))
|
||||||
if BMConfigParser().get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS' and self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] != 'SOCKS':
|
if BMConfigParser().get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS' and self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] != 'SOCKS':
|
||||||
self.statusBar().clearMessage()
|
self.statusBar().clearMessage()
|
||||||
|
state.resetNetworkProtocolAvailability() # just in case we changed something in the network connectivity
|
||||||
if self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] == 'SOCKS':
|
if self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] == 'SOCKS':
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksproxytype', str(
|
BMConfigParser().set('bitmessagesettings', 'socksproxytype', str(
|
||||||
self.settingsDialogInstance.ui.comboBoxProxyType.currentText()))
|
self.settingsDialogInstance.ui.comboBoxProxyType.currentText()))
|
||||||
|
|
|
@ -255,15 +255,15 @@ class outgoingSynSender(threading.Thread, StoppableThread):
|
||||||
else:
|
else:
|
||||||
logger.error('SOCKS5 error: %s', str(err))
|
logger.error('SOCKS5 error: %s', str(err))
|
||||||
if err[0][0] == 4 or err[0][0] == 2:
|
if err[0][0] == 4 or err[0][0] == 2:
|
||||||
state.networkProtocolLastFailed['IPv6'] = time.time()
|
state.networkProtocolAvailability[protocol.networkType(peer.host)] = False
|
||||||
except socks.Socks4Error as err:
|
except socks.Socks4Error as err:
|
||||||
logger.error('Socks4Error: ' + str(err))
|
logger.error('Socks4Error: ' + str(err))
|
||||||
except socket.error as err:
|
except socket.error as err:
|
||||||
if BMConfigParser().get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS':
|
if BMConfigParser().get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS':
|
||||||
logger.error('Bitmessage MIGHT be having trouble connecting to the SOCKS server. ' + str(err))
|
logger.error('Bitmessage MIGHT be having trouble connecting to the SOCKS server. ' + str(err))
|
||||||
else:
|
else:
|
||||||
if ":" in peer.host and err[0] == errno.ENETUNREACH:
|
if err[0] == errno.ENETUNREACH:
|
||||||
state.networkProtocolLastFailed['IPv6'] = time.time()
|
state.networkProtocolAvailability[protocol.networkType(peer.host)] = False
|
||||||
if shared.verbose >= 1:
|
if shared.verbose >= 1:
|
||||||
logger.debug('Could NOT connect to ' + str(peer) + 'during outgoing attempt. ' + str(err))
|
logger.debug('Could NOT connect to ' + str(peer) + 'during outgoing attempt. ' + str(err))
|
||||||
|
|
||||||
|
|
|
@ -333,6 +333,9 @@ class receiveDataThread(threading.Thread):
|
||||||
'The length of sendDataQueues is now: ' + str(len(state.sendDataQueues)) + "\n" + \
|
'The length of sendDataQueues is now: ' + str(len(state.sendDataQueues)) + "\n" + \
|
||||||
'broadcasting addr from within connectionFullyEstablished function.')
|
'broadcasting addr from within connectionFullyEstablished function.')
|
||||||
|
|
||||||
|
if self.initiatedConnection:
|
||||||
|
state.networkProtocolAvailability[protocol.networkType(self.peer.host)] = True
|
||||||
|
|
||||||
# Let all of our peers know about this new node.
|
# Let all of our peers know about this new node.
|
||||||
dataToSend = (int(time.time()), self.streamNumber, 1, self.peer.host, self.remoteNodeIncomingPort)
|
dataToSend = (int(time.time()), self.streamNumber, 1, self.peer.host, self.remoteNodeIncomingPort)
|
||||||
protocol.broadcastToSendDataQueues((
|
protocol.broadcastToSendDataQueues((
|
||||||
|
|
|
@ -67,6 +67,14 @@ def encodeHost(host):
|
||||||
else:
|
else:
|
||||||
return socket.inet_pton(socket.AF_INET6, host)
|
return socket.inet_pton(socket.AF_INET6, host)
|
||||||
|
|
||||||
|
def networkType(host):
|
||||||
|
if host.find('.onion') > -1:
|
||||||
|
return 'onion'
|
||||||
|
elif host.find(':') == -1:
|
||||||
|
return 'IPv4'
|
||||||
|
else:
|
||||||
|
return 'IPv6'
|
||||||
|
|
||||||
# checks
|
# checks
|
||||||
|
|
||||||
def haveSSL(server = False):
|
def haveSSL(server = False):
|
||||||
|
|
10
src/state.py
10
src/state.py
|
@ -10,8 +10,8 @@ extPort = None
|
||||||
# for Tor hidden service
|
# for Tor hidden service
|
||||||
socksIP = None
|
socksIP = None
|
||||||
|
|
||||||
# Network protocols last check failed
|
# Network protocols availability, initialised below
|
||||||
networkProtocolLastFailed = {'IPv4': 0, 'IPv6': 0, 'onion': 0}
|
networkProtocolAvailability = None
|
||||||
|
|
||||||
appdata = '' #holds the location of the application data storage directory
|
appdata = '' #holds the location of the application data storage directory
|
||||||
|
|
||||||
|
@ -28,3 +28,9 @@ appdata = '' #holds the location of the application data storage directory
|
||||||
trustedPeer = None
|
trustedPeer = None
|
||||||
|
|
||||||
Peer = collections.namedtuple('Peer', ['host', 'port'])
|
Peer = collections.namedtuple('Peer', ['host', 'port'])
|
||||||
|
|
||||||
|
def resetNetworkProtocolAvailability():
|
||||||
|
global networkProtocolAvailability
|
||||||
|
networkProtocolAvailability = {'IPv4': None, 'IPv6': None, 'onion': None}
|
||||||
|
|
||||||
|
resetNetworkProtocolAvailability()
|
||||||
|
|
Reference in New Issue
Block a user