Commit Graph

334 Commits

Author SHA1 Message Date
d9a4263083
Daemonising fixes
- change forking exit order as systemd expects (wait until child is
ready, then exit parent, then grandparent)
- fix signal handler if prctl not installed
- revert recent PID file changes
2018-01-01 13:08:12 +01:00
3cb9547389
Only write PID after last fork
- should fix systemd integration
2017-12-21 14:26:51 +01:00
2d34e73648
Dandelion updates
- fixes and feedback from @gfanti and @amiller
- addresses #1049
- minor refactoring
- two global child stems with fixed mapping between parent and
child stem
- allow child stems which don't support dandelion
- only allow outbound connections to be stems
- adjust stems if opening/closing outbound connections (should
allow partial dandelion functionality when not enough outbound
connections are available instead of breaking)
2017-10-20 01:21:49 +02:00
f97ada87
08748fa9ae
move config read inside main function 2017-09-27 00:36:43 +10:00
6ce86b1d0a
Dandelion++ implementation
- untested, some functionality may be missing, don't turn on
- also, it randomises upload of requested objects
- affects #1049
2017-09-25 01:17:04 +02:00
f97ada87
c89d86a779
use getopt parser for command-line arguments 2017-09-24 07:42:37 +10:00
aaa5e9d309
Windows daemon mode workaround 2017-09-23 18:25:41 +02:00
0150a35dd4
Change main thread name to PyBitmessage 2017-09-21 17:51:34 +02:00
660997b8f4
Code Quality 2017-08-22 13:49:27 +02:00
b886f935d4
Daemon Windows fix
- closing the filehandle isn't the correct approach, it causes more
bugs. Use os.devnull instead
2017-08-20 12:05:53 +02:00
314af0925f
Daemonize fix for Windows
- /dev/null isn't available on Windows so just close the console
sockets directly
2017-08-20 11:55:54 +02:00
58b47bc6de
Forking fixes 2017-08-15 12:22:24 +02:00
6c695c8ac7
Remove non-asyncore network code (partial) 2017-08-09 17:36:52 +02:00
cc955cd69d
Try new ports of binding fails
- API and BM protocol will try random ports for binding if those
configured are occupied
2017-08-09 17:29:23 +02:00
7a4551e1e7
Fix signal handler in daemon mode
- signal handler requires the main thread to run
2017-07-30 09:36:20 +02:00
501f07dd34
Setsid is not available on Windows
- wrap an error handler around it
2017-07-28 09:19:53 +02:00
20cbac9752
Fix daemonize for Windows
Fixes #1034
2017-07-28 08:54:34 +02:00
bdf61489ae
Allow multiple ReceiveQueue threads
- defaults to 3
2017-07-10 07:08:10 +02:00
4536e44b8c
Thread names propagate to system
- the thread names should now show up in the monitoring tools of
operating systems (tested on linux)
2017-07-06 19:35:40 +02:00
fc19e4119a
Download thread updates
- now tracks downloads globally too, so it doesn't request the same
object from multiple peers at the same time
- retries at the earliest every minute
- stops trying to download an object after an hour
- minor fixes in retrying downloading invalid objects
2017-07-05 09:25:49 +02:00
e00a02206b
AddrThread
- this thread is for spreading new/updated addresses in active
connections, analogous to the InvThread
- it doesn't do anything yet, this is just a dummy queue at the moment
2017-07-05 08:57:44 +02:00
2685fe29b1
Code quality improvements 2017-06-24 12:13:35 +02:00
618f3865c1
Main thread end
- instead of sleeping, it just ends
2017-06-21 12:16:56 +02:00
0cc8589b27
Asyncore updates
- should prevent the same object being re-requested indefinitely
- locking for object tracking
- move SSL-specific error handling to TLSDispatcher
- observe maximum connection limit when accepting a new connection
- stack depth test (for debugging purposes)
- separate download thread
- connection pool init moved to main thread
2017-06-21 12:16:33 +02:00
a5c1b0c529
Asyncore fixes
- better handling of WSA* checks on non-windows systems
- handle EBADF on Windows/select
- better timeouts / loop lengths in main asyncore loop and
spawning new connections
- remove InvThread prints
2017-05-29 12:56:59 +02:00
02a07e5119
Asyncore update
- default to true (original attempt didn't work correctly)
2017-05-29 03:16:14 +02:00
c85d52b8e8
Asyncore updates
- asyncore is now on by default
- inv announcements implemented
- bandwidth limit implemented / fixed
- stats on download / upload speed now work
- make prints into logger
- limit knownNodes to 20k as it was before
- green light fixed
- other minor fixes
2017-05-29 00:24:07 +02:00
f8b4b427fc
Asyncore update
- bugfixes
- UDP socket for local peer discovery
- new function assembleAddr to unify creating address command
- open port checker functionality (inactive)
- sendBigInv is done in a thread separate from the network IO
thread
2017-05-27 19:09:21 +02:00
d699a28e49
Add variables to errno and socket
- to make sure they work cross platform without having to do
complicated tests
2017-05-27 19:00:19 +02:00
e309a1edb3
Asyncore update
- separate queue for processing blocking stuff on reception
- rewrote write buffer as a queue
- some addr handling
- number of half open connections correct
2017-05-25 23:04:33 +02:00
51e52401fe
Windows plaform check pythonic
- moved to .startswith instead of 'in'
- thanks @Lvl4sword
2017-05-25 15:00:10 +02:00
d635e515b9
Big Asyncore update
- most of the stuff is done so it partially works
- disabled pollers other than select (debugging necessary)
- can switch in the settings, section network, option asyncore (defaults
to False)
2017-05-24 16:51:49 +02:00
34084bbc80
Total setup.py cleanup and simple script installation 2017-02-28 15:51:49 +02:00
6062277d60
Rename configparser.py to bmconfigparser.py
- it was causing problems with py2app because the source of python's own
  CongigParser is also configparser.py
2017-02-22 09:34:54 +01:00
e664746f04
More knownNodes init
- also init children if they are missing
2017-02-08 20:52:18 +01:00
35a712d11d
KnownNodes missing init
- init knownnodes when connecting to a stream
2017-02-08 20:48:22 +01:00
157881bc63
Cyclic import fix
- networkDefaultProofOfWorkNonceTrialsPerByte and
  networkDefaultPayloadLengthExtraBytes cyclic import fix
- PyBitmessage should launch now when there's no keys.dat
2017-02-08 20:37:42 +01:00
59f3a2fbe7
Reduce cyclic dependencies
- rearranged code to reduce cyclic dependencies
- doCleanShutdown is separated in shutdown.py
- shared queues are separated in queues.py
- some default values were moved to defaults.py
- knownnodes partially moved to knownnodes.py
2017-02-08 13:41:56 +01:00
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
4f70eaa01f
Fix curses mode 2017-02-02 15:48:56 +01:00
fa0a3135e7
Fixes pointed out by landscape.io
- missing/wrong/obsolete imports
- logger formatting
2017-01-11 17:26:25 +01:00
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
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
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
60c447f56b
Merge commit 'd3a0404274e5105b9d6279901246af8f7009eb6d' into v0.6
- "env python2.7.x" was causing problems
2016-08-14 12:44:18 +02:00
36a04fd7d9
Add SMTP server
- you can now use SMTP to send messages
- uses bmaddr.lan domain
- runs on 127.0.0.8425 if you set "smtpd" to True
- mandatory authentication with smtpdusername and smtpdpassword
2016-07-19 13:57:54 +02:00
ng0
d3a0404274 Fix python shebangs from #!/usr/bin/env python2.7*' to #!/usr/bin/python2.7'.
* src/bitmessagecli.py: fix it.
* src/bitmessagemain.py: same.

This fixes #887.
2016-07-16 15:42:19 +00:00
685ff6cecd
Startup fixes
- correctly test for "smtpdeliver" variable without crashing
- new method for safely getting values from config even if the option
  may be missing
2016-06-30 15:19:58 +02:00
d3e8771aed
Lock file fixes
- daemon mode lock file didn't work correctly in the last commit
2016-06-30 13:07:28 +02:00
4865659d72
Main process fixes
- handles old dialog versions better if using curses
- can spawn SMTP delivery thread if configured (only when in daemon
  mode)
- daemonized mode now works more like it's properly supposed to on unix
  (double fork etc). You may have to adjust your init scripts, when
  when using upstart for example you should now use "expect daemon"
- daemon mode now cleanly shuts down when TERM/INT signal is received
2016-06-30 12:30:05 +02:00