-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathChangeLog.txt
1144 lines (881 loc) · 41.2 KB
/
ChangeLog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Version 1.52 (Released 20150711)
Core:
* Allow torrent files to be up to 32MB in size
BitTorrent:
* Blacklisted ut_metadata support of Deluge
* Increase size of ut_metadata dummy-container
Version 1.51 (Released 20140302)
Core:
* Changed some code parts to avoid warnings if running under Perl >= 5.16
BitTorrent:
* Crashfix: Bitflu could panic if the last file in a download had
a size of zero bytes AND was hitting a piece boundary
Version 1.50 (Released 20120711)
Core:
* Implement 'vfs_datafsync' option:
Bitflu will call fsync() after writing metadata to disk (this is and was
enabled by default)
Setting it to '0' skips the fsync() call. This can speedup slow disks but
can cause data corruption during power outtages or kernel crashes
* Workaround for FreeBSD bug/feature in the socket implementation
BitTorrent:
* Support for uTorrent ratings (stars)
Version 1.43 (Released 20120501)
Core:
* Bugfix: Bitflu used to autopause all torrents if 'min_free_mb' was
set to > 0 on a system that does not support statfs()
* statfs (aka: 'df' and 'autopause') support for FreeBSD
BitTorrent:
* Bugfix: Fixed crashbug triggered by the 'verifiy' task:
The verify task used to mark 'lost' pieces as done, but this messed
up our internal have-state.
Kademlia:
* Workaround for perl 5.12 (?) bug - bitflu (ehr perl) could silently exit
Telnet:
* Bugfix: Escape 'tab' and 'grep' user input correctly: Bitflu could be
crashed if someone entered '[<TAB>' on the telnet prompt
Version 1.42 (Released 20120408)
BitTorrent:
* 'files $sha preview' has been replaced with 'files $sha priority'
Setting the priority flag on a download causes bitflu to download
the needed pieces as soon as possible. The command will still
favour the first+last few MB (just like the old command did)
* Bugfix: 'tracker $queueid set default' was broken
* Bitflu will now respect tracker urls in magnet links
* Autoadjust retry timeout for broken trackers
WebUI:
* Upgraded to YUI 2.9
* Autoresize tables in dialog windows while resizing
Version 1.41 (Released 20120211)
Core:
* The Bencoding decoder has been rewritten from scratch.
The new implementation is 3x faster :-)
Telnet:
* Fixed old authentication bug where bitflu would refuse to accept a login
if the input stream was sent too fast
* Variable length output in 'vd', 'peerlist' and 'files' output.
Also note that the 'telnet_view' configuration option has been removed.
BitTorrent:
* Drop connection if we have more than 512KB of unparsed data
* Establish less new (outgoing) connections if we are seeding
* Fixed two crashbugs while loading dht:// links
Version 1.40 (Released 20111218)
Core:
* Autopause faster if running out of space
* Allow completed_downloads == unshared_downloads
Bitflu will no longer add a .1 to canceled downloads if both directories
are the same
BitTorrent:
* 'Pessimistic' pipelining: only use pipelining if the client is
known to be 'fast'
Kademlia:
* Optimize blacklisting
* Be more sceptic while receiving sha+ip pairs from other nodes
(some clients seem to send outdated + unverified data to other
clients)
Version 1.39 (Released 20111022)
Core:
* Bitflu will not check for storage locks if BITFLU_FORCE_START is set in ENV
* The RSS-Plugin has been removed - bitflu will not startup if the file
plugins/Bitflu/99_Rss.pm is present. (just remove it)
* Tweaked bitflu's upload throttling: the new code should use less CPU
time and downloading via the Webinterface will be much faster.
BitTorrent:
* Fixed an off-by-one error that could have caused
bitflu to crash while importing a torrent with empty files
HTTP:
* The http client was rewritten from scratch.
HTTP is still a 2nd class protocol in Bitflu but the
new version of the plugin is able to handle downloads
with unknown size (up to 5MB)
Version 1.38 (Released 20110823)
Core:
* Complain at startup if we are started as root while
the configuration file is writable by other users
* New config option: pidfile
* Easier chroot: No need to copy .so files into bitflu's jail anymore.
However: You'll have to supply $chroot/etc/protocols if you are using IPv6
WebUI:
* Add 'hover' in /browse/ mode
Cron:
* Stop autoload if we blocked for more than 1 second.
(The default was to load 10 torrents at a time)
Version 1.37 (Released 20110626)
BitTorrent:
* Use more randomness in PeerID
Kademlia:
* Accept smaller token values
* Learn tockens faster due to more random node selection
* Tuning: Ping good (but failing) nodes more often and recover slowly
WebUI:
* Support for desktop notifications (currently only supported by google-chrome)
Note: chrome seems to 'forget' the desktop notification permission after a
restart if bitflu is not running on port 80. This means that you'll have to
re-click the permission button after each restart of chrome if you are running
bitflu on the default port 4081
Version 1.36 (Released 20110508)
Core:
* New feature: 'preview' download:
The command
> files queue_id preview 3 6
will instruct bitflu to download the first few
(and the last few) Megabytes of file 3 6 first.
Bitflu will still download other pieces (of these
or other files) but it will give the start and end
blocks a higher priority.
* Bencoding: Corretly encode negative integers
(bitflu never has to, but it's good to have)
* Do not load torrents > 8MB
BitTorrent:
* Added an workaround to 'create_torrent' for
'transmission'
Telnet:
* Better (readline-like) history handling
WebUI:
* Added Disk-Usage bar
Version 1.35 (Released 20110308)
Core:
* Setting upspeed to 0 now disables any upload
throttling (like 'downspeed' does it)
* Do not re-shuffle file-layout
BitTorrent:
* Tracker-Plugin: Be extra-picky while parsing the
announce list. (This fixes a crashbug)
Version 1.34 (Released 20110227)
Core:
* Workaround for perl 5.8.8 bug (1.33 will not
startup using perl 5.8.8)
Version 1.33 (Released 20110227)
StorageVFS:
* Improved detection (and auto-removal) of broken metadata
* Autodisable fallocate at creation time if we would run
out of space anyway (helps ext[34])
WebUI:
* Add UTF8-Hint to 'browse' view (helps Chrome)
* Fix scrolling problem in main window
Core:
* Optimize call to _GetAddrFoo somewhat for IPv4
* New option 'downspeed'
Use 'config set downspeed 0' to disable it (default)
'config set downspeed 300' would limit your download speed
to ~300 KB/s.
Cron:
* Commit completed downloads even if there are excluded
(but downloaded) files
* Fix broken 'df' output
Rss:
* Fixed a crashbug
Version 1.32 (Released 20110128)
Cron:
* Never autoload more than 10 files per run
BitTorrent:
* Support for dht:// links
* Fixed a crash-bug in the bt_connect command
Kademlia:
* Do not complain about 'vote' RPC calls
WebUI:
* Complete rewrite using YUI2 javascript library
Version 1.31 (Released 20101228)
Core:
* The 'StorageFarabDB' plugin has been removed and is not
supported anymore.
* The 'quota' command has been removed / replaced with min_free_mb
* New config option: min_free_mb :
Bitflu will stop all active downloads (using sparsefiles) if the
free disk space drops below 'min_free_mb', example:
bitflu> config set min_free_mb 8000
(Stop if free disk space drops below 8GiB)
Setting this option to 0 (default), disables this feature
BitTorrent:
* fixed a very stupid (and old) bug that caused bitflu
to misparse handshake messages.
* the tracker-plugin will now only do one auto-udp query
This should improve 'start-times' for trackers that still
do not support UDP.
StorageVFS:
* call fsync() on _WriteFile
* check if some other instance of bitflu is using the same
storage directory and refuse to startup if this is the case.
* run a 'background verify' if the old bitflu instance crashed
* the old allocator (vfs_use_allocator) has been replaced
with fallocate()
* support for fallocate (disabled by default, can be enabled
via config option 'vfs_use_fallocate').
Without fallocate, bitflu creates sparsefiles. While this
saves some space (unwritten data does not use up any diskspace),
it will also lead to fragmentation.
With fallocate() enabled, the filesystem will try to allocate
space for the full file in advance. This will help reducing
fragmentation. But keep in mind that fallocate() has a few
downsides:
- (currently) only i386 and x86_64 linux are supported
- only works on some filesystems (eg. ext4 and btrfs).
fallocate() is *not* supported on ext3!
- fallocate'd files are not sparsefiles: they will not grow.
Enabling vfs_use_fallocate should be safe even if your
operatingsystem or filesystem does not support fallocate():
In this case bitflu will silently continue using sparsefiles.
Version 1.30 (Released: 20101127)
Core:
* Convert :ffff:<ipv4> style IPs into old-style ASAP
* Internal support to disable IPv4 (See README_IPV6.txt)
* Refuse to startup if Danga::Socket is <= 1.51
Kademlia:
* Ping good nodes more often (even if they are 'unused')
BitTorrent:
* Workaround for broken trackers: do not send empty 'event'
values. (BEP-0003 allows this, but some trackers don't like
such requests)
* The tracker plugin failed to accept some (valid) tracker URIs
Telnet:
* Better UTF8-Support in 'vd' (Still has problems with CJK)
StorageVFS:
* Refuse to create filenames > 255 chars
* Refuse to create paths longer than 1024 chars
Version 1.22 (Released: 20101011)
Kademlia:
* Send plain version string (older versions used the packed APIVER)
* Bugfix: Refuse to add own id as a torrent
(this would cause some panics due to assert checks)
* Use larger and random transaction-id values
* Fix 'kdebug[46] -v $sha': older versions always used the
'own-id' instead of the provided argument
* Less noise: Remove the 'ignoring malformed query' message
BitTorrent:
* Disconnect from peers who ask for unadvertised data
* Smarter Endgame mode: dispatch freed pieces to faster clients
StorageVFS:
* Bugfix: ->OpenStorage might trigger an assert check
if the storage id was invalid
Version 1.21 (Released: 20100909)
Core:
* New feature: disk quotas
Use 'quota show' to display your current usage
Use 'quota set 4096' to set the quota to 4GB
Use 'quota set off' to disable it (default)
StorageVFS:
* Keep a copy of the 'clipboard' in Memory
(Kademlia uses the clipboard each X seconds, so it
doesn't make much sense to store->load->store it often)
WebUI:
* Create correct paths to /browse/ icons if we are
behind a reverse proxy
Version 1.20 (Released: 20100815)
BitTorrent:
* Refuse to connect to ports <= 1024
* Ask 'slow clients' less often for new data
* Ask for more metadata ASAP while downloading
ut_metadata
Core:
* Do not panic if socket() fails to create a new sock.
(Seems to be 'normal' while running in a Linux-VM)
* Added option to *remove* data for completed download:
Use as 'cancel --wipe queue_id'
..or hit the 'delete' button in the webui
HTTP:
* Accept malformed load command: 'load http:/single-slash.com/foo'
(Useful if we are running behind nginx)
WebUI:
* Relaxed parsing: Accept requests to //foo (instead of /foo)
* Support for file-list in JSON (needed for Transdroid)
* Fix some JSON errors (also for Transdroid)
Version 1.10 (Released: 20100615)
BitTorrent:
* Performance: return early if the buffer is empty (saves some cpu time)
* The torrent created by create_torrent includes the sha1-sum in its filename
* Changed piece selection: Bitflu will now try to finish partial completed
chunks faster
StorageVFS:
* Try to remove corrupted storages
* New options to the 'files' command:
files $sha list-included | list-excluded
Core:
* ETA: return seconds as integer (1.3521523 seconds doesn't make sense)
* API: The 'tempdir' setting got removed
Telnet:
* Implemented 'head' and 'tail' commands
Rss:
* Accept larger RSS feeds (> 256KB)
Version 1.00 (Released: 20100505)
Telnet:
* Change the 'details' output to use localtime (old version used gmtime)
* Added 'ETA' information
BitTorrent:
* Autoadjust torrent_gcpriority if we are under pressure (many clients)
* Fixed a very rare crash bug: Bitflu could panic if:
- there are less than 3 connected peers
- and a torrent is near completition...
- ..while the GC kicks in.
Version 0.99 (Released: 20100329)
BitTorrent:
* Do not complain if we receive old/invalid Metadata
Kademlia:
* Bugfix: An invalid getpeers reply could have caused bitflu to panic
WebUI:
* Add a close-button to the Notification!-Element
Version 0.98 (Released: 20100308)
Kademlia:
* Fixed broken node_id generator
Version 0.97 (Released: 20100222)
WebUI:
* Bugfix: Browsing a torrent with zero-sized files crashed
bitflu (division by zero)
Core:
* New configuration option: 'chdir':
If this option is set, bitflu will change into this
directory after loading all plugins.
An example:
plugins = ./plugins
chdir = /tmp/foo
incomplete_downloads = ./workdir/unfinished
- Bitflu will load all plugins from './plugins'
- change into /tmp/foo
-> incomplete_downloads would then be at /tmp/foo/workdir/unfinished
Kademlia:
* Use less CPU (about -15% on my 800Mhz PC!)
* Never use more than 5kbps for outgoing traffic
Version 0.96 (Released: 20100111)
Core:
* Complain if IO::Socket::INET6 version is < 2.56
* Do not even try to parse strings that appear to be
non-bencoded
BitTorrent
* Rewrote HuntPiece
* Printout tracker 'failure reason' message.
* Bugfix: Bitflu would panic (bugcheck) if a non-ut_meta peer
would send us a reject message. ouch!
Telnet interface:
* Line editing support (CTRL+A and CTRL+E also works!)
Version 0.95 (Released: 20091129)
Internal:
* Make use of 'fields' in some plugins to save memory + cpu
BitTorrent:
* Optimized magnet-links usage: Received metadata is now
swapped ASAP.
Kademlia:
* Support for BEP-32 (Kademlia over IPv6).
Bitflu <= 0.94 included experimental IPv6-Kademlia support and is
not compatible with BEP-32. Upgrading to 0.95 is recommended for
all people using bitflu with IPv6
BEP-32 specs are at: http://www.bittorrent.org/beps/bep_0032.html
* Fixed stupid ping-bug (introduced in 0.94). Bitflu would stop
pinging valid DHT-Nodes.
* General Kademlia optimizations
Version 0.94 (Released: 20091114)
WebUi:
* Added 'browse' button to view torrent in an apache-like dirlisting
(or just enter: http://localhost:4081/browse/ in your browser)
* Support for HTTP HEAD Requests (needed by crazy wget)
Internal:
* Moved all Bencoding stuff to Bitflu::Tools->Benc*
The bencoder isn't really bittorrent specific, so it can be used by other
plugins.
* Bugfix: Removing an SxTask could have crashed bitflu
* VeryInternal: Make _Runners a Hashref ( < 0.94 used to use an arrayref )
* Fixed rare socket leakage due to failed writes
(Only affected plugins that do not timeout established connections such as
AdminTelnet and AdminHTTP)
StorageVFS:
* Fixed filehandle leak: Bitflu forgot to flush its own filehandle cache while
removing a completed download from it's own queue.
BitTorrent:
* Added tracker editor: Bitlu can now edit/set/replace existing trackers.
Example 1: Set 2 trackers
bitflu> tracker df18859fa3c1840967523254e9d37cf1754aaef3 set http://tracker1.com/announce,http://tracker2.com/announce
(Note: ',' seperates trackers, '!' forms groups)
Example 2: Restore default
bitflu> tracker df18859fa3c1840967523254e9d37cf1754aaef3 set default
* Changed create_torrent syntax to be consistent with 'tracker set'
* Fixed perl warning (Use of uninitialized...) while running the 'peerlist' command.
(This bug was old, sorry! ;-) )
* Fixed a small memory leak in the torrent module
(Bitflu still used memory for unlocked piece. Not a big leak but it was still a bug)
* ENDGAME: Better 'endgame' detection. Before this release bitflu would enter the endgame mode
if $pieces_left was below 30.
Bitflu will now activate the endgame mode if it detects that all free pieces have
been queued/locked.
* ENDGAME: Kick locked pieces while entering endgame mode. Otherwise a slow peer could
queue up all remaining pieces for a long time
* Support for invalid (non-base32-encoded) magnet links
Kademlia:
* Fixed timing issue with bootstrap
* AliveHunter() should scale better even when working with big
routing tables. The old version used to re-shuffle a list of
nodes on each run. This list will now be keept in a cache.
* Improved kdebug output: Better statistics
Cron:
* Run 'history cleanup' each 5 hours to keep it 'small'
Version 0.93 (Released: 20091026)
WebUi:
* Some cosmetic fixes
Kademlia:
* Strict response checking: Do not accept a 'values' reply if we did not
ask for it.
BitTorrent:
* Bitflu understands the (unused but handy?) torrent://info_hash format. Example:
bitflu> load torrent://640fe84c613c17f663551d218689a64e8aebeabe
(Note: This is Slackware 12.2)
Magnet-Links are still supported (torrent:// links are actually converted
into a magnet link internally)
Version 0.92 (Released: 20090816)
Rss:
* Fixed help text ('see rss help' -> 'see help rss')
* Bugfix: Avoid stuck rss downloads
BitTorrent:
* Speedup verify command
* Added 'verify progress' command
Telnet:
* New Pipe-Command: sort
Example: vd | grep Foo | sort
* Removed compact-download-view command ('l' command)
* Added new option telnet_view
telnet_view can be used to alter the output of the 'vd' command.
The option takes a line in this format:
field1[=max_length],field2[=max_length]
The default value is:
type,name=25,hash,peers,pieces,bytes,percent,ratio,up,down,note
This means that 'vd' will display the download-type, the name (limited to 25 chars),
the queue_id, number of peers, etc...
The value of telnet_view can be altered at runtime. An example:
bitflu> config set telnet_view name=10,hash=10,pieces,percent,up,down
The default value can be restored by setting telnet_view to "" :
bitflu> config set telnet_view ""
Internal:
* Plugins can now create some sort of threads (Called SxTasks)
The API might (will?) change as this is a first bare-bones implementation
that doesn't do any cleanups (Killing an SxTask doesn't cleanup Sockets)
Currently this is only used by the verify command but might find use
for the Rss/Cron plugins (and maybe the BitTorrent GC?)
Version 0.91 (Released: 20090621)
Rss:
* This is a new plugin: Bitflu can handle RSS feeds and download all (whitelisted) content
Example:
bitflu> rss add http://rss.a.scarywater.net/
rss-job http://rss.a.scarywater.net/ has been added
bitflu> rss list
Registered RSS feeds:
rss-e0a453c7d0b483f7bfa2d52b0e5debfa0b18b7a2 : http://rss.a.scarywater.net/
bitflu> rss rss-e0a453c7d0b483f7bfa2d52b0e5debfa0b18b7a2 whitelist haruhi
rss-e0a453c7d0b483f7bfa2d52b0e5debfa0b18b7a2: whitelist set to 'haruhi'
WebUi:
* Limit download name to 180 chars in display
Telnet:
* New shortcuts:
CTRL+D quits the current session
CTRL+L clear screen
* Better tab-completion:
TAB will complete as much as possible
Bitflu will show multiple hits (if any)
StorageVFS:
* Try to re-create missing dataroot-directories
Internal:
* Reduced DNS-Lookup timeout (via RES_OPTIONS)
* Remember 'bad' DNS-Names and skip them for a while if resolving
failed
* Implemented ->GetCompletion and ->RegisterCompletion
The 'tab completion' isn't hardcoded anymore: plugins can
provide their own suggestions
Version 0.90 (Released: 20090501)
Core:
* Bitflu::Network has been rewritten and uses Danga::Socked instead of IO::Select
So this means that bitflu can use epoll() on Linux and kqueue on *BSD.
Please note that version >= 1.61 is highly recommended and even required if
you are using IPv6 (FreeBSD ports includes a very old version. Just use CPAN
and you are done :-) )
BitTorrent:
* Bugfix: Fixed IPv6-PEX bug
* Bugfix: Do not work-around bitflu's bandwith scheduler (->WriteDataNow misuse)
* Performance: Do not re-parse databuffers if we know that they are not yet
fully received
* Tracker: Accept broken HTTP-Responses (\n\n instead of \r\n)
* Tracker: Do not accept responses >~ 256Kb
Kademlia:
* Bugfix: Use correct handle while writing/reading to blacklists
HTTP
* Display download speed for each queue entry (Finally)
Version 0.81 (Released: 20090412)
Network:
* Fixed IPv6 resolver on FreeBSD (and others?)
* Increased network buffer-size to 32kb (old: 8kb on Linux, 1kb on FreeBSD)
This should fix speed issues on *BSD
BitTorrent:
* Bugfix: Fixed broken 'tracker show' output (broke in 0.80 due to IPv6)
Kademlia:
* IPv6 Support (Experimental: Bitflu is currently the only implementation
that supports IPv6-Kad)
StorageVFS:
* New configuration option vfs_use_allocator
Turns bitflus internal pre-allocator on or off
Setting this to 1 causes bitflu to pre-allocate data.
This results in more disc activity but can help to avoid fragmentation
on some filesystems. Setting this to 0 turns the pre-allocation off
The default is '0' (= Disabled).
(Note: Bitflu <= 0.80 had this on and you couldn't turn it off)
Version 0.80 (Released: 20090209)
This might be the worst or the best bitflu release ever: You decide (and i
don't care :-p )
Bitflu 0.80 brings you (almost) full IPv6 support. yeah!
Core:
* Support for binding an OUTGOING connection to a specific (non-standard)
Interface has been dropped.
* Network: IPv6 support!
* Network: API-Change: Use of IPv4 has been replaced by RemoteIp
* Config: Bitflu will now create a backup of your configuration file
while starting up
StorageVFS:
* Bugfix: _WriteFile failed to check the return code of print() and close(), this
could have caused a corrupted clipboard file if you ran out of diskspace
BitTorrent:
* Bugfix: analyze_torrent and verify would cause a panic if the specified
queue_id string did not exist. Oops.
* Outgoing connections are (again) established less aggressive.
Bitflu ~0.62 tried very hard to create outgoing connections but
this would only reward people who are unable to receive
incoming connections.
* Tracker: Support IPv6 responses (TCP and UDP!)
* PEX: Bitflu cann receive IPv6 Peers and will use them .. maybe :-)
* New command: seedprio: Tells bitflu to reserve X upload slots
for a specific torrent
* New command: seedhide: Tells bitflu to hide X % while seeding a
torrent. So bitflu will look like a normal
downloader and leechers won't be able to get the
full torrent from just a single peer.
Version 0.70 (Released: 20090102)
BitTorrent:
* The tracker plugin can now handle udp:// trackers
We also use auto-udp (= try to contact a tracker via
udp even if there is no udp:// uri for it)
New config options:
-> torrent_tracker_udpport (Port used for UDP, must not be forwarded)
-> torrent_tracker_autoudp ('Guess' udp capability)
* Disable 'pipelining' (reqq) if torrent is in 'AlmostDone' state.
This reduces the feasibility that a slow/broken peer can pile-up
all remaining piece requests.
* Bugfix: Bitflu will now always send NOT_INTERESTED messages
after completing the download (not a big problem but it was
still a bug)
* Disconnect from other seeders while seeding a torrent
(Bitflu used to wait until the connection times out due to
no activity)
* Internal: Removed multilock feature (Wasn't used anyway)
Core:
* Beautified 'config show' output (locked values are yellow)
* Added a '--quiet' option
* Beautified '--help' output
* Bitflu will not print anything to STDOUT if started with --daemon
Version 0.62 (Released: 20081222)
StorageVFS:
* Implemented a filedescriptor cache to reduce
the number of open()/close() calls.
Core:
* Removed the (unimplemented) echo command that caused
bitflu to panic. Uups...
Telnet:
* Added 'clear' command to clear the screen
* Added 'repeat' command that repeats a command each second.
Example:
foo@bitflu> repeat clear ; date ; vd
(Hit CTRL+C to stop)
BitTorrent:
* Remember received peers (via Tracker, Kademlia or ut_pex)
and try to contact them in small steps.
This will/should result in more peers
* Removed torrent_minpeers setting
* Do not blacklist peer if first chunk was bad (Added MIN_HASHFAILS)
WebUI:
* Bugfix: The upload function forgot to remove tempfiles. oops.
Version 0.61 (Released: 20081112)
StorageVFS:
* Bitflu 0.60 used to crash often on *bsd and OSX due to my
misuse of seek() :-) . This release fixes this annoying bug.
Core:
* The networking layer now detects fast senders and requeues
recv() calls if needed. This can reduce CPU load while increasing
the download speed.
* Implemented '--all' keyword for pause, resume, cancel and commit.
So you can type 'pause --all' to pause all downloads.
* Added 'history drop' to delete bitflus download history with
a single command.
BitTorrent:
* Delay writing 'piece request' results.
Bitflu used to respond to piece-requests ASAP. This caused some ugly
'buffer overrun' messages to appear if the remote client did ignore
the 'reqq' value sent during handshake.
Bitflu now has an internal buffer for all piece request and only writes
a response if the buffer won't get 'overflowed' by this.
WebUI:
* Implemented torrent-uploading via HTTP. Thanks to Pedro Melo for sending
me this patch.
Version 0.60 (Released: 20081009)
Cron:
* Added version check: Bitflu checks if your version is up-to-date and sends you
a note (via 'notify') if it isn't.
> Note: This 'phone home' check does NOT transmit any personal data
or/and replace any files itself!
The check just lookups the A-Record of 'version.bitflu.org'
> You can set 'checkversion = 0' in .bitflu.config to DISABLE this feature.
(default is: enabled)
> Implementation details:
- Bitflu does an A-Record lookup for 'version.bitflu.org' and
will receive something such as: '1.0.60.0'
1 = Unused
0 = Major version
60 = Minor version
0 = Unused
- Have a look at 'sub _VersionScan'
* Blacklisted IPs are now expired after 1 hour.
Kademlia:
* Removed 'own' blacklisting code: The kademlia plugin will
now use the Network-Blacklist API
BitTorrent:
* Include User-Agent string in Tracker requests
* Do not schedule/throttle tracker writes (avoiding some timeout issues)
* The tracker plugin no longer destroys bencoded data with linebreaks ("\n") .. d'uh!
Version 0.52
Core:
* Implemented 'log': This command returns the last X log messages from bitflu's
internal buffer
* Bugfix/Workaround:
Bitflu assumed that the system clock would never step backwards. This is true on systems
that use ntpd/chrony/clockspeed to adjust clock drifts. But if something such as
ntpdate is used we would run into much trouble. (The BitTorrent plugin could
even cause bitflu to crash due to a division by zero).
SetTime will now no longer accept timestamps from the past. This avoids
Possible crashes but calculations (Download speed) will still suffer.
BitTorrent:
* Blacklist 'own' IP if detected (connecting to ourself doesn't make any sense)
StorageVFS:
* Implemented a simple 'allocator' to avoid fragmentation
* Renamed default Storage-Directory names
Core:
* Moved the pause/resume commands into QueueMGR (This was implemented
by the BitTorrent plugin itself)
WebUI:
* Added History dialog
* Added a Notifications! button
Cron:
* Complain (via notify) if autoload failed for some reason
Version 0.51
BitTorrent:
* create_torrent will not create torrents with piece-size < 32kb (would confuse uTorrent)
* import_torrent: Skip incomplete files instead of panicing
* Removed the old ranking-system with a fairer version
(The old version discriminate fresh connections)
StorageVFS:
* Improved the 'cancel' command:
-> Canceling an unfished/uncommitted downloads removes all traces
-> Canceling a committed download moves it into $unshared_downloads
WebUI:
* Made the '/getfile' link relative to avoid problems behind an apache proxy
* Added Include/Exclude buttons
Version 0.50 (Released: 20080531)
BitTorrent:
* Replaced some substr() calls with unpack().
This is less ugly to read and might be somewhat faster.
* Fixed some import_torrent bugs:
- The imported data is now added to the uploaded counter to
keep your ratio 'in-sync'
- We'll disable autocommit/autocancel after importing
data
* Tracker-Plugin will now also bind to torrent_bind
* Added create_torrent command.
Kademlia:
* Bugfix: Flush _knownbad each hour
* Use torrent_bind (= Do not listen on all interfaces if set)
Cron:
* Bugfix: 100% completed downloads WITH excluded files would cause
cron to do an endless-autocommit.
Bitflu will now not try to autocommit files that have excluded
files. (Wouldn't make much sense anyway...)
Core:
* bind() outgoing TCP connections to the same interface as the
listening socket.
* New configuration option: 'default_bind'
bind outgoing/incoming connections to this interface if the
plugin doesn't have its own *_bind value.
default_bind is currently only used by the HTTP-Plugin.
* New configuration option: history
history = 1 : Use / update the download history (Default)
history = 0 : Do not use or write to the history
StorageFarabDb:
* _WriteFile will now use rename() to do an atomic write
StorageVFS:
* New storage plugin: The old/current FarabDb-Storage plugin
needs a lengthy commit after a download has been finished because
the whole 'stream' is stored within small chunks. This made it easy
to ensure integrity (because it can use rename() to change a pieces
state and it uses fsync() before moving a file into .done) but is very
unhandy because commiting a download requires a LOT of space (it doubles
the space usage). The new VFS plugin stores downloads the way it's done
by 'all other' clients such as Azureus or uTorrent.
Give it a try if you feel brave: (Note: This is alpha/beta code)
1: Stop bitflu
2: Edit .bitflu.config and set/replace 'storage = StorageVFS'
3: Start bitflu
The download list will now be empty because the VFS plugin is not
'compatible' with FarabDb.
-> Unfinished downloads are stored at ./workdir/unfinished/$SHA1
-> Finished downloads are stored at ./workdir/finished/$NAME
The plugin still has some known bugs/missing features:
-> Moving/deleting files within ./workdir/(un)finished will cause
bitflu to panic. You must 'cancel' a download before touching
any files
-> Canceling an unfinished download does not remove any files
-> The plugin does not try to 'repair' a 'broken' download directory
Btw: Switching back to the FarabDb plugin is easy: Just delete the
'storage = ...' line and start bitflu again.
Version 0.45 (Released: 20080421)
Core:
* Implemented download-history:
Bitflu will now remember what you've downloaded and refuses
to download the same item twice.
Use the 'history' command to view and edit the internal history
Cron:
* Implemented 'schedule' command:
The schedule command can be used to change configuration values
at a given time.
An example:
> schedule set upspeed 20 80@2200-2300 90@0100-0500
This would cause bitflu to set the value of 'upspeed' to:
80 from 22:00 until 23:00
90 from 01:00 until 05:00
20 otherwise (= Default value)
Note that there is no 'weekday' support yet. So you cannot
have a 'Sunday' rule. I'll implement it if there is demand for
such an option.
StorageFarabDb:
* Added 'sprofile' command (Storage 'Profiler', used for performance debugging)
* Fixed a typo that caused some unneeded printf() calls during startup
* Moved Config-Proto from Bitflu::Configuration to StorageFarabDb
Kademlia:
* Save good nodes each 15 min. and boot from them
at startup (if needed). The old behaviour was to boot using
router.utorrent.com:6881 and router.bittorrent.com:6881.
Both nodes will still be used if your routing table is
empty. If you are running bitflu on a static ip, feel free to
drop me a note and i'll add your ip/host to the hardcoded
bootstrap list :-)
Telnet:
* Added 'l' command: This command outputs a compact
(small screen) version of the 'vd' output
* Log ip of connecting peer instead of the sockref on console
WebUI:
* Added Pause/Resume buttons to each download
Version 0.44 (Released: 20080229)