diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index 9bb61177..e8d82521 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -216,7 +216,7 @@ class singleListener(threading.Thread): #The following code will, unfortunately, block an incoming connection if someone else on the same LAN is already connected because the two computers will share the same external IP. This is here to prevent connection flooding. while HOST in shared.connectedHostsList: shared.printLock.acquire() - print 'incoming connection is from a host in shared.connectedHostsList (we are already connected to it). Ignoring it.' + print 'We are already connected to', HOST+'. Ignoring connection.' shared.printLock.release() a.close() a,(HOST,PORT) = sock.accept() @@ -1667,10 +1667,7 @@ class receiveDataThread(threading.Thread): if data[28+lengthOfNumberOfAddresses+(34*i)] == '\x7F': print 'Ignoring IP address in loopback range:', hostFromAddrMessage continue - if data[28+lengthOfNumberOfAddresses+(34*i)] == '\x0A': - print 'Ignoring IP address in private range:', hostFromAddrMessage - continue - if data[28+lengthOfNumberOfAddresses+(34*i):30+lengthOfNumberOfAddresses+(34*i)] == '\xC0A8': + if isHostInPrivateIPRange(hostFromAddrMessage): print 'Ignoring IP address in private range:', hostFromAddrMessage continue timeSomeoneElseReceivedMessageFromThisNode, = unpack('>I',data[lengthOfNumberOfAddresses+(34*i):4+lengthOfNumberOfAddresses+(34*i)]) #This is the 'time' value in the received addr message. @@ -1836,21 +1833,21 @@ class receiveDataThread(threading.Thread): for i in range(500): random.seed() HOST, = random.sample(shared.knownNodes[self.streamNumber], 1) - if self.isHostInPrivateIPRange(HOST): + if isHostInPrivateIPRange(HOST): continue addrsInMyStream[HOST] = shared.knownNodes[self.streamNumber][HOST] if len(shared.knownNodes[self.streamNumber*2]) > 0: for i in range(250): random.seed() HOST, = random.sample(shared.knownNodes[self.streamNumber*2], 1) - if self.isHostInPrivateIPRange(HOST): + if isHostInPrivateIPRange(HOST): continue addrsInChildStreamLeft[HOST] = shared.knownNodes[self.streamNumber*2][HOST] if len(shared.knownNodes[(self.streamNumber*2)+1]) > 0: for i in range(250): random.seed() HOST, = random.sample(shared.knownNodes[(self.streamNumber*2)+1], 1) - if self.isHostInPrivateIPRange(HOST): + if isHostInPrivateIPRange(HOST): continue addrsInChildStreamRight[HOST] = shared.knownNodes[(self.streamNumber*2)+1][HOST] shared.knownNodesLock.release() @@ -1992,16 +1989,7 @@ class receiveDataThread(threading.Thread): if self.verackReceived == True: self.connectionFullyEstablished() - def isHostInPrivateIPRange(self,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 - return False + #Every connection to a peer has a sendDataThread (and also a receiveDataThread). class sendDataThread(threading.Thread): @@ -2294,6 +2282,17 @@ def assembleVersionMessage(remoteHost,remotePort,myStreamNumber): datatosend = datatosend + hashlib.sha512(payload).digest()[0:4] return datatosend + payload +def isHostInPrivateIPRange(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 + return False + #This thread exists because SQLITE3 is so un-threadsafe that we must submit queries to it and it puts results back in a different queue. They won't let us just use locks. class sqlThread(threading.Thread): def __init__(self): diff --git a/src/bitmessageui.py b/src/bitmessageui.py index a7c85206..ca2d8b0b 100644 --- a/src/bitmessageui.py +++ b/src/bitmessageui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'bitmessageui.ui' # -# Created: Mon Apr 22 16:34:47 2013 +# Created: Tue May 21 14:09:58 2013 # by: PyQt4 UI code generator 4.9.4 # # WARNING! All changes made in this file will be lost! @@ -428,6 +428,30 @@ class Ui_MainWindow(object): QtCore.QObject.connect(self.radioButtonSpecific, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.labelSendBroadcastWarning.hide) QtCore.QObject.connect(self.radioButtonBroadcast, QtCore.SIGNAL(_fromUtf8("clicked()")), self.labelSendBroadcastWarning.show) QtCore.QMetaObject.connectSlotsByName(MainWindow) + MainWindow.setTabOrder(self.tabWidget, self.tableWidgetInbox) + MainWindow.setTabOrder(self.tableWidgetInbox, self.textEditInboxMessage) + MainWindow.setTabOrder(self.textEditInboxMessage, self.radioButtonSpecific) + MainWindow.setTabOrder(self.radioButtonSpecific, self.radioButtonBroadcast) + MainWindow.setTabOrder(self.radioButtonBroadcast, self.comboBoxSendFrom) + MainWindow.setTabOrder(self.comboBoxSendFrom, self.lineEditTo) + MainWindow.setTabOrder(self.lineEditTo, self.pushButtonLoadFromAddressBook) + MainWindow.setTabOrder(self.pushButtonLoadFromAddressBook, self.lineEditSubject) + MainWindow.setTabOrder(self.lineEditSubject, self.textEditMessage) + MainWindow.setTabOrder(self.textEditMessage, self.pushButtonSend) + MainWindow.setTabOrder(self.pushButtonSend, self.tableWidgetSent) + MainWindow.setTabOrder(self.tableWidgetSent, self.textEditSentMessage) + MainWindow.setTabOrder(self.textEditSentMessage, self.pushButtonNewAddress) + MainWindow.setTabOrder(self.pushButtonNewAddress, self.tableWidgetYourIdentities) + MainWindow.setTabOrder(self.tableWidgetYourIdentities, self.pushButtonAddSubscription) + MainWindow.setTabOrder(self.pushButtonAddSubscription, self.tableWidgetSubscriptions) + MainWindow.setTabOrder(self.tableWidgetSubscriptions, self.pushButtonAddAddressBook) + MainWindow.setTabOrder(self.pushButtonAddAddressBook, self.tableWidgetAddressBook) + MainWindow.setTabOrder(self.tableWidgetAddressBook, self.radioButtonBlacklist) + MainWindow.setTabOrder(self.radioButtonBlacklist, self.radioButtonWhitelist) + MainWindow.setTabOrder(self.radioButtonWhitelist, self.pushButtonAddBlacklist) + MainWindow.setTabOrder(self.pushButtonAddBlacklist, self.tableWidgetBlacklist) + MainWindow.setTabOrder(self.tableWidgetBlacklist, self.tableWidgetConnectionCount) + MainWindow.setTabOrder(self.tableWidgetConnectionCount, self.pushButtonStatusIcon) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Bitmessage", None, QtGui.QApplication.UnicodeUTF8)) diff --git a/src/bitmessageui.ui b/src/bitmessageui.ui index cef8cd69..8487b673 100644 --- a/src/bitmessageui.ui +++ b/src/bitmessageui.ui @@ -1003,6 +1003,33 @@ p, li { white-space: pre-wrap; } + + tabWidget + tableWidgetInbox + textEditInboxMessage + radioButtonSpecific + radioButtonBroadcast + comboBoxSendFrom + lineEditTo + pushButtonLoadFromAddressBook + lineEditSubject + textEditMessage + pushButtonSend + tableWidgetSent + textEditSentMessage + pushButtonNewAddress + tableWidgetYourIdentities + pushButtonAddSubscription + tableWidgetSubscriptions + pushButtonAddAddressBook + tableWidgetAddressBook + radioButtonBlacklist + radioButtonWhitelist + pushButtonAddBlacklist + tableWidgetBlacklist + tableWidgetConnectionCount + pushButtonStatusIcon + diff --git a/src/images/can-icon-24px-green.png b/src/images/can-icon-24px-green.png index 5e7e52ec..247bebc7 100644 Binary files a/src/images/can-icon-24px-green.png and b/src/images/can-icon-24px-green.png differ diff --git a/src/images/can-icon-24px-red.png b/src/images/can-icon-24px-red.png index 942daa7e..ca32b9ae 100644 Binary files a/src/images/can-icon-24px-red.png and b/src/images/can-icon-24px-red.png differ diff --git a/src/images/can-icon-24px-yellow.png b/src/images/can-icon-24px-yellow.png index e7eb0589..6470b000 100644 Binary files a/src/images/can-icon-24px-yellow.png and b/src/images/can-icon-24px-yellow.png differ