Commit Graph

1551 Commits

Author SHA1 Message Date
Peter Šurda 2c72b337c1
Typos and formatting 2017-02-07 20:09:11 +01:00
Peter Šurda 07722fb606
Node negotiation error handling
- complete the version and SSL handshake first, and only then feed
  errors into the stream and close connection
- this allows more accurate error handling on both sides
- also the timeOffset error trigger is now more accurate, but requires
  more nodes to upgrade
2017-02-07 19:38:52 +01:00
Peter Šurda 8515f9a9fc
Set SSL socket to blocking
- otherwise the error handling gets too complicated
2017-02-07 16:42:02 +01:00
Peter Šurda 6b65dfeeec
MarkAllUnread sqlite argument limit
- shouldn't crash anymore if there are too many messages to mark read
2017-02-07 16:38:02 +01:00
Peter Šurda 413419c858
Timeout handling and ping
- timeouts after the connection is established will trigger a ping
- previously they were handled as unrecoverable errors
2017-02-07 16:06:24 +01:00
Peter Šurda 15c620dcc2
SSL socket blocking error handling 2017-02-07 13:00:24 +01:00
Peter Šurda ddc0ca5ede
Retry for certain non-blocking operations
- sometimes on read, EWOULDBLOCK is returned. It should retry. A timeout
  is handled separately
2017-02-06 19:41:25 +01:00
Peter Šurda 61770ba89a
Typo 2017-02-06 19:34:38 +01:00
Peter Šurda f6bdad18a3
Improved stream handling
- version command sends list of all participating streams
- biginv sends lists of hosts for all streams the peer wants (plus
  immediate children)
- objects will spread to all peers that advertise the associated stream
- please note these are just network subsystem adjustments, streams
  aren't actually usable yet
2017-02-06 17:47:05 +01:00
Peter Šurda 79b566a907
Fix bitflags in version packet 2017-02-06 17:39:42 +01:00
Peter Šurda e434825bb2
Pending download counter fix
- handles expired objects better
- counts objects that failed download more accurately
2017-02-06 11:02:03 +01:00
Peter Šurda 23fcf2cdec
SSL handshake python version compatibility
- error handling should now work with < 2.7.9
2017-02-03 10:05:35 +01:00
Peter Šurda c979481564
Unhandled missing peer 2017-02-03 09:43:47 +01:00
Peter Šurda ba130e03e5
Network subsystem freezing fixes
- queues were too short
- some error handling was missing
- remove nonblocking repeats in receive data thread
- singleCleaner shouldn't wait unnecessarily
2017-02-02 15:52:32 +01:00
Peter Šurda 4f70eaa01f
Fix curses mode 2017-02-02 15:48:56 +01:00
Peter Šurda f3849eeb48
Unused imports, problematic variable names 2017-01-19 20:04:45 +01:00
Peter Šurda 01a9124b7d
Less verbose SSL handshake reporting
- if SSL handshake fails, we don't need to stack trace because we know
  where it's happening. Only report the error string.
2017-01-19 19:52:54 +01:00
Peter Šurda 5828021903
Fix false error about wrong stream
- sendinv and sendaddress are sometimes being sent to connections that
  haven't been established yet, resulting in complaints about stream
  mismatch. The error should only be displayed once the connection has
  been established and the remote node provides its stream number
2017-01-19 19:50:40 +01:00
Peter Šurda 5ae1327edc
Download/upload shutdown fixes
- Missing renamed to PendingDownload
- PendingDownload now only retries 3 times rather than 6 to dowload an
  object
- Added PendingUpload, replacing invQueueSize
- PendingUpload has both the "len" method (number of objects not
  uploaded) as well as "progress" method, which is a float from 0
  (nothing done) to 1 (all uploaded) which considers not only objects
  but also how many nodes they are uploaded to
- PendingUpload tracks when the object is successfully uploaded to the
  remote node instead of just adding an arbitrary time after they have
  been send the corresponding "inv"
- Network status tab's "Objects to be synced" shows the sum of
  PendingUpload and PendingDownload sizes
2017-01-19 19:48:12 +01:00
Peter Šurda 5708a38be0
Fix sending messages crashing 2017-01-17 01:07:39 +01:00
Peter Šurda 9197c425d2
Object requesting fix 2017-01-17 00:32:05 +01:00
Peter Šurda 9ed59dd825
Shutdown procedure cleanup 2017-01-16 23:38:18 +01:00
Peter Šurda ca8550a206
Don't send requests for 0 objects 2017-01-16 23:37:25 +01:00
Peter Šurda 749bb628c0
Typo 2017-01-16 23:37:03 +01:00
Peter Šurda 4f920fe641
Fix infinite loop 2017-01-16 23:17:56 +01:00
Peter Šurda d652dc864d
Downloading fixes
- able to request more objects with one command
- fixes to logic and error handling
2017-01-16 19:36:58 +01:00
Peter Šurda 9f89df6d1c
Expire objects that we're unable to receive
- sometimes a node would send an "inv" about an object but then not
  provide it when requested. This could be that it expired in the
  meantime or it was an attack or a bug. This patch will forget that the
  object exists if was requested too many times and not received.
2017-01-16 17:08:47 +01:00
Peter Šurda ca6bc9981c
Better tracking in downloading objects
- remember what was requested from which node
- remember if it was received
- re-request object if we haven't received any new object for more than
  a minute
2017-01-16 15:17:23 +01:00
Peter Šurda 8dfa0faca9
More objects to be downloaded fixes 2017-01-15 23:10:44 +01:00
Peter Šurda 12205ee7ba
More fixes in objects to be downloaded 2017-01-15 23:07:11 +01:00
Peter Šurda bd1aead46e
More fixes for objects to be downloaded 2017-01-15 22:41:12 +01:00
Peter Šurda d04c0e78e4
Better handling of pending downloading objects 2017-01-15 22:36:12 +01:00
Peter Šurda b750e67bfb
Handle exception in iterator 2017-01-15 22:25:09 +01:00
Peter Šurda 805f72e098
Make objects to be send stoppable if not empty 2017-01-15 22:21:19 +01:00
Peter Šurda 94f0bdc731
Objects to be downloaded optimising
- treat requested but never arrived objects as expired. This is how it
  worked before the refactoring. Without this, the list won't go to
  zero.
2017-01-15 22:01:10 +01:00
Peter Šurda 79893fdc23
Performance tuning objects to be downloaded
- rely on dict quasi-random order instead of an additional shuffle
- request an object once per minute
- stop check after count objects have been found
2017-01-15 20:47:33 +01:00
Peter Šurda dbe15d0b99
Objects to be downloaded fixes
- tries to avoid calling senddata it it would block receiveDataThread,
  allowing fore more asynchronous operation
- request objects in chunks of 100 (CPU performance optimisation)
2017-01-15 19:50:28 +01:00
Peter Šurda f079ff5b99
Refactor objects to be downloaded
- moved logic into a Missing singleton
- shouldn't try to download duplicates anymore, only requests a hash
  once every 5 minutes and not from the same host
- removed obsoleted variables
- the "Objects to be synced" in the Network tab should now be correct
- removed some checks which aren't necessary anymore in my opinion
- fix missing self in Throttle (thanks landscape.io)
2017-01-15 19:21:24 +01:00
Peter Šurda 6d2a75bfc9
Transfer speed improvements
- send buffer to send multiple commands in one TCP packet
- recv/send operation size now based on bandwith limit
- send queue limited to 100 entries
- buffer getdata commands to fill send queue, instead of waiting for the
  data packet to arrive first (i.e. allow getdata to work asynchronously)
2017-01-15 15:08:03 +01:00
Peter Šurda c3fef7bc4e
Syntax fix 2017-01-15 12:41:19 +01:00
Peter Šurda 9bf17b34d1
Remove obsolete imports and code
- landscape.io pointed out obsolete imports
- there is also an obsolete variable and lock in throttle.py
- add Exception type to BMConfigParser().save
2017-01-15 11:40:31 +01:00
Peter Šurda 8cb0953401
Moved writeKeysFile into configparser
- shared.writeKeysFile -> BMConfigParser().save
- makes it easier to get rid of circular imports
2017-01-15 10:50:02 +01:00
Peter Šurda 5ca8a52662
Typos, extra imports and similar
- pointed out by landscape.io
- also updated dev/ssltest.py to work the same way as the main program
2017-01-15 10:48:29 +01:00
Peter Šurda 689d697a40
Refactor bandwidth limit and speed calculator
- also fixes potential deadlocks
2017-01-14 23:21:00 +01:00
Peter Šurda ad75552b5c
Move shutdown from shared.py to state.py 2017-01-14 23:20:15 +01:00
Peter Šurda bcc7692e14
Add safeGetInt to BMConfigParser 2017-01-14 23:18:06 +01:00
Peter Šurda 02a7c59de8
OpenSSL 1.1.0 compatibility fixes
- part 2, continued from previous commit
2017-01-14 17:50:49 +01:00
Peter Šurda 59b5ac3a61
OpenSSL 1.1.0 compatibility fixes
- function check missed 1.1.0 release
- TLS didn't work with anonymous ciphers
2017-01-14 17:47:57 +01:00
Peter Šurda fa2f87743e
SSL handshake fix
- SSL handshake would often fail, because verack packet was being sent
  at the same time as the do_handshake was executed in a different
  thread. This makes it so that do_handshake waits until verack is done
  sending.
- also minor modifications in SSLContext initialisation
2017-01-14 13:22:46 +01:00
Peter Šurda cc4c07025b
Sending thread fix 2017-01-14 12:35:08 +01:00
Peter Šurda 8d278182a7
Indentation 2017-01-13 15:53:47 +01:00
Peter Šurda 93bdc3c800
Remove extra print 2017-01-13 12:32:26 +01:00
Peter Šurda d0b1cbfe1f
Add current git HEAD info to support request 2017-01-13 12:29:14 +01:00
Peter Šurda 5ae676f2ad
Minor support fix 2017-01-13 12:05:39 +01:00
Peter Šurda 6778d6046f
Add OpenSSL 1.1.0 compatibility
- thanks to Wolfgang Frisch <wfr@roembden.net>
2017-01-13 12:02:34 +01:00
Peter Šurda 59cf33c9a1
Remove obsolete import 2017-01-13 12:01:38 +01:00
Peter Šurda 65701e5997
neededPubkeys fix
- was still using shared.neededPubkeys
2017-01-13 09:30:23 +01:00
Peter Šurda ff8deebf60
Keep track of network protocol status 2017-01-12 19:18:56 +01:00
Peter Šurda 810e50a040
Fix minor issues
- landscape.io complained
- obsolete imports
- ciphers -> self.ciphers
2017-01-12 07:26:04 +01:00
Peter Šurda 2cf2188bc3
Object sending fix
- forgot to move broadcastToSendDataQueues in class_singleWorker.py
2017-01-12 07:22:34 +01:00
Peter Šurda bd520a340f
Trustedpeer fix and more refactoring
- fixed trustedPeer (thanks to anonymous bug reporter)
- moved trustedPeer and Peer into state.py
2017-01-12 06:58:35 +01:00
Peter Šurda e7470a4757
Remove leftover from debugging 2017-01-12 06:57:17 +01:00
Peter Šurda 5ceb920bd6
TLS tuning
- allow TLS > 1.0 with python >= 2.7.9
- tune ssl_context with python >= 2.7.9
2017-01-11 20:47:27 +01:00
Peter Šurda c738d93056
Assorted fixes
- landscape.io was complaining, this fixes most easily fixable errors
2017-01-11 18:13:00 +01:00
Peter Šurda cdcdf11d59
Missing import fix 2017-01-11 17:46:33 +01:00
Peter Šurda fa0a3135e7
Fixes pointed out by landscape.io
- missing/wrong/obsolete imports
- logger formatting
2017-01-11 17:26:25 +01:00
Peter Šurda ac348e4e6b
Fixes and refactoring
- fixes errors introduced in the earlier refactoring
- more variables moved to state.py
- path finding functions moved to paths.py
- remembers IPv6 network unreachable (in the future can be used to skip
  IPv6 for a while)
2017-01-11 17:00:00 +01:00
Peter Šurda 5d2bebae28
Add IPv4 multicast range to ignored addresses 2017-01-11 14:46:10 +01:00
Peter Šurda 8bcfe80ad0
Refactoring of config parser and shared.py
- got rid of shared config parser and made it into a singleton
- refactored safeConfigGetBoolean as a method of the config singleton
- refactored safeConfigGet as a method of the config singleton
- moved softwareVersion from shared.py into version.py
- moved some global variables from shared.py into state.py
- moved some protocol-specific functions from shared.py into protocol.py
2017-01-11 14:27:19 +01:00
Peter Šurda 085e335969
Proxy update (for the new network subsystem) 2017-01-10 21:22:22 +01:00
Peter Šurda 75090abaaf
Advanced dispatcher class
- generic class the new asyncore-based network subsystem that handles
  buffered data transfer
2017-01-10 21:20:49 +01:00
Peter Šurda b4703ec6ce
Make objectHashHolder into a list
- was a dict
2017-01-10 21:19:57 +01:00
Peter Šurda 9c214b4a24
Inventory refactoring #2
- forgot to add api.py
2017-01-10 21:17:25 +01:00
Peter Šurda e84b19613e
Inventory refactoring
- minor refactoring, made it into singleton instead of a shared global
  variable. This makes it a little bit cleaner and moves the class into
a separate file
- removed duplicate inventory locking
- renamed singleton.py to singleinstance.py (this is the code that
  ensures only one instance of PyBitmessage runs at the same time)
2017-01-10 21:15:35 +01:00
Peter Šurda 4f543e14c1
TLS handshake fix
- TLS handshake in python is apparently always asynchronous, so it needs
  proper handling of SSLWantReadError and SSLWantWriteError
- also adds a timeout and a proper shutdown if handshake fails
2017-01-07 23:42:07 +01:00
PyBitmessage Translations 541979a159
Auto-updated language fr from transifex 2017-01-05 19:24:45 +01:00
PyBitmessage Translations 9a26ce5be1
Auto-updated language ja from transifex 2016-12-16 10:18:29 +01:00
PyBitmessage Translations e92161650b
Auto-updated language pl from transifex 2016-12-15 19:57:09 +01:00
PyBitmessage Translations a87bfb8a82
Auto-updated language eo from transifex 2016-12-15 19:53:55 +01:00
PyBitmessage Translations 77d7dcbd2d
Auto-updated language sk from transifex 2016-12-15 16:33:21 +01:00
PyBitmessage Translations 3b896e69e7
Auto-updated language de from transifex 2016-12-15 16:26:50 +01:00
Peter Šurda fefb959338
Notify if C PoW missing
- Linux users often don't know that the C PoW is available and complain
  it's slow. This will try to build it, and adds availability
  notification in the status bar
- also, the updateStatusBar signal now allows emphasised notifications,
  which will remain visible for a longer period of time and also
  reappear if a status change happened in the meantime
2016-12-15 16:11:29 +01:00
PyBitmessage Translations 9d9052dda2
Auto-updated language zh_cn from transifex 2016-12-13 17:52:23 +01:00
PyBitmessage Translations 49832231ca
Auto-updated language de from transifex 2016-12-13 17:39:49 +01:00
Peter Šurda 025950c05e
Fix locale init
- date/time wasn't localised correctly on startup
2016-12-13 11:54:01 +01:00
PyBitmessage Translations dd777d6e43
Auto-updated language de from transifex 2016-12-12 00:44:09 +01:00
PyBitmessage Translations d8b8e0e9dd
Auto-updated language fr from transifex 2016-12-10 20:12:30 +01:00
Peter Šurda 114563ed2f
Default logger output UTF-8
- fixes errors when using locales other than EN
2016-12-06 16:15:37 +01:00
Peter Šurda 0dde976dec
Fix timeformat in configparser
- allow both raw (new) and non-raw (old) style timeformat for backwards
  compatibility
2016-12-06 13:04:52 +01:00
Peter Šurda df18f7b042
Switch configparser to raw mode 2016-12-06 11:01:17 +01:00
Peter Šurda e647d70bbc
New config parser class
- workaround for % in labels
- can be extended in the future
2016-12-06 10:47:39 +01:00
PyBitmessage Translations 9f89191742
Auto-updated language ja from transifex 2016-12-05 12:09:41 +01:00
Peter Šurda 9509552663
New network backend (WIP, not integrated)
- current snapshot of the new network backend code
- not working yet, just base classes and no integration
2016-12-01 16:48:04 +01:00
Peter Šurda 7ca6576dfc
Connection indicator for hidden service
- the number of connections as well as connection indicator was broken
  when running as a hidden service. This is a workaround
2016-11-16 19:36:50 +01:00
Peter Šurda 5cea1e04d1
SSL disconnect fix
- sometimes SSL connections unnecessarily disconnected on non-fatal
  errors. This should fix that. This is however a short term solution
  because of migrating to asyncore which has its own error handling
2016-11-16 15:18:09 +01:00
PyBitmessage Translations 1d3757ddc8
Auto-updated language pl from transifex 2016-11-15 22:07:40 +01:00
PyBitmessage Translations 3bafd597af
Auto-updated language eo from transifex 2016-11-15 21:36:16 +01:00
Peter Šurda 3f3774ff1f
Translation source update
- add extended encoding translation sources
2016-11-15 17:11:36 +01:00
Peter Šurda 7cc0f8fab0
Add extended encoding message validation
- validates variables of the "message" type
2016-11-15 17:10:33 +01:00
Peter Šurda e76b10a6ed
Logging fix 2016-11-15 17:10:14 +01:00