forked from arvidn/libtorrent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChangeLog
1715 lines (1577 loc) · 79.6 KB
/
ChangeLog
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
* update plugin interface functions for improved type-safety
* implemented support magnet URI extension, select specific file indices
for download, BEP53
* make tracker keys multi-homed. remove set_key() function on session.
* add API to query whether alerts have been dropped or not
* add flags()/set_flags()/unset_flags() to torrent_handle, deprecate individual functions
* added alert for block being sent to the send buffer
* drop support for windows compilers without std::wstring
* implemented support for DHT infohash indexing, BEP51
* removed deprecated support for file_base in file_storage
* added support for running separate DHT nodes on each network interface
* added support for establishing UTP connections on any network interface
* added support for sending tracker announces on every network interface
* introduce "lt" namespace alias
* need_save_resume_data() will no longer return true every 15 minutes
* make the file_status interface explicitly public types
* added resolver_cache_timeout setting for internal host name resolver
* make parse_magnet_uri take a string_view instead of std::string
* deprecate add_torrent_params::url field. use parse_magnet_uri instead
* optimize download queue management
* deprecated (undocumented) file:// urls
* add limit for number of web seed connections
* added support for retrieval of DHT live nodes
* complete UNC path support
* add packets pool allocator
* remove disk buffer pool allocator
* fix last_upload and last_download overflow after 9 hours in past
* python binding add more add_torrent_params fields and an invalid key check
* introduce introduce distinct types for peer_class_t, piece_index_t and
file_index_t.
* fix crash caused by empty bitfield
* removed disk-access-log build configuration
* removed mmap_cache feature
* strengthened type safety in handling of piece and file indices
* deprecate identify_client() and fingerprint type
* make sequence number for mutable DHT items backed by std::int64_t
* tweaked storage_interface to have stronger type safety
* deprecate relative times in torrent_status, replaced by std::chrono::time_point
* refactor in alert types to use more const fields and more clear API
* changed session_stats_alert counters type to signed (std::int64_t)
* remove torrent eviction/ghost torrent feature
* include target in DHT lookups, when queried from the session
* improve support for HTTP redirects for web seeds
* use string_view in entry interface
* deprecate "send_stats" property on trackers (since lt_tracker extension has
been removed)
* remove deprecate session_settings API (use settings_pack instead)
* improve file layout optimization when creating torrents with padfiles
* remove remote_dl_rate feature
* source code migration from boost::shared_ptr to std::shared_ptr
* storage_interface API changed to use span and references
* changes in public API to work with std::shared_ptr<torrent_info>
* extensions API changed to use span and std::shared_ptr
* plugin API changed to handle DHT requests using string_view
* removed support for lt_trackers and metadata_transfer extensions
(pre-dating ut_metadata)
* support windows' CryptoAPI for SHA-1
* separated ssl and crypto options in build
* remove lazy-bitfield feature
* simplified suggest-read-cache feature to not depend on disk threads
* removed option to disable contiguous receive buffers
* deprecated public to_hex() and from_hex() functions
* separated address and port fields in listen alerts
* added support for parsing new x.pe parameter from BEP 9
* peer_blocked_alert now derives from peer_alert
* transitioned exception types to system_error
* made alerts move-only
* move files one-by-one when moving storage for a torrent
* removed RSS support
* removed feature to resolve country for peers
* added support for BEP 32, "IPv6 extension for DHT"
* overhauled listen socket and UDP socket handling, improving multi-home
support and bind-to-device
* resume data is now communicated via add_torrent_params objects
* added new read_resume_data()/write_resume_data functions to write bencoded,
backwards compatible resume files
* removed deprecated fields from add_torrent_params
* deprecate "resume_data" field in add_torrent_params
* improved support for bind-to-device
* deprecated ssl_listen, SSL sockets are specified in listen_interfaces now
* improved support for listening on multiple sockets and interfaces
* resume data no longer has timestamps of files
* require C++11 to build libtorrent
* fix tie-break in duplicate peer connection disconnect logic
* fix issue with SSL tracker connections left in CLOSE_WAIT state
* defer truncating existing files until the first time we write to them
* fix issue when receiving a torrent with 0-sized padfiles as magnet link
* fix issue resuming 1.0.x downloads with a file priority 0
* fix torrent_status::next_announce
* fix pad-file scalability issue
* made coalesce_reads/coalesce_writes settings take effect on linux and windows
* use unique peer_ids per connection
* fix iOS build on recent SDK
* fix tracker connection bind issue for IPv6 trackers
* fix error handling of some merkle torrents
* fix error handling of unsupported hard-links
1.1.6 release
* deprecate save_encryption_settings (they are part of the normal settings)
* add getters for peer_class_filter and peer_class_type_filter
* make torrent_handler::set_priority() to use peer_classes
* fix support for boost-1.66 (requires C++11)
* fix i2p support
* fix loading resume data when in seed mode
* fix part-file creation race condition
* fix issue with initializing settings on session construction
* fix issue with receiving interested before metadata
* fix IPv6 tracker announce issue
* restore path sanitization behavior of ":"
* fix listen socket issue when disabling "force_proxy" mode
* fix full allocation failure on APFS
1.1.5 release
* fix infinite loop when parsing certain invalid magnet links
* fix parsing of torrents with certain invalid filenames
* fix leak of torrent_peer objecs (entries in peer_list)
* fix leak of peer_class objects (when setting per-torrent rate limits)
* expose peer_class API to python binding
* fix integer overflow in whole_pieces_threshold logic
* fix uTP path MTU discovery issue on windows (DF bit was not set correctly)
* fix python binding for torrent_handle, to be hashable
* fix IPv6 tracker support by performing the second announce in more cases
* fix utf-8 encoding check in torrent parser
* fix infinite loop when parsing maliciously crafted torrents
* fix invalid read in parse_int in bdecoder
* fix issue with very long tracker- and web seed URLs
* don't attempt to create empty files on startup, if they already exist
* fix force-recheck issue (new files would not be picked up)
* fix inconsistency in file_priorities and override_resume_data behavior
* fix paused torrents not generating a state update when their ul/dl rate
transitions to zero
1.1.4 release
* corrected missing const qualifiers on bdecode_node
* fix changing queue position of paused torrents (1.1.3 regression)
* fix re-check issue after move_storage
* handle invalid arguments to set_piece_deadline()
* move_storage did not work for torrents without metadata
* improve shutdown time by only announcing to trackers whose IP we know
* fix python3 portability issue in python binding
* delay 5 seconds before reconnecting socks5 proxy for UDP ASSOCIATE
* fix NAT-PMP crash when removing a mapping at the wrong time
* improve path sanitization (filter unicode text direction characters)
* deprecate partial_piece_info::piece_state
* bind upnp requests to correct local address
* save resume data when removing web seeds
* fix proxying of https connections
* fix race condition in disk I/O storage class
* fix http connection timeout on multi-homed hosts
* removed depdendency on boost::uintptr_t for better compatibility
* fix memory leak in the disk cache
* fix double free in disk cache
* forward declaring libtorrent types is discouraged. a new fwd.hpp header is provided
1.1.3 release
* removed (broken) support for incoming connections over socks5
* restore announce_entry's timestamp fields to posix time in python binding
* deprecate torrent_added_alert (in favor of add_torrent_alert)
* fix python binding for parse_magnet_uri
* fix minor robustness issue in DHT bootstrap logic
* fix issue where torrent_status::num_seeds could be negative
* document deprecation of dynamic loading/unloading of torrents
* include user-agent in tracker announces in anonymous_mode for private torrents
* add support for IPv6 peers from udp trackers
* correctly URL encode the IPv6 argument to trackers
* fix default file pool size on windows
* fix bug where settings_pack::file_pool_size setting was not being honored
* add feature to periodically close files (to make windows clear disk cache)
* fix bug in torrent_handle::file_status
* fix issue with peers not updated on metadata from magnet links
1.1.2 release
* default TOS marking to 0x20
* fix invalid access when leaving seed-mode with outstanding hash jobs
* fix ABI compatibility issue introduced with preformatted entry type
* add web_seed_name_lookup_retry to session_settings
* slightly improve proxy settings backwards compatibility
* add function to get default settings
* updating super seeding would include the torrent in state_update_alert
* fix issue where num_seeds could be greater than num_peers in torrent_status
* finished non-seed torrents can also be in super-seeding mode
* fix issue related to unloading torrents
* fixed finished-time calculation
* add missing min_memory_usage() and high_performance_seed() settings presets to python
* fix stat cache issue that sometimes would produce incorrect resume data
* storage optimization to peer classes
* fix torrent name in alerts of builds with deprecated functions
* make torrent_info::is_valid() return false if torrent failed to load
* fix per-torrent rate limits for >256 peer classes
* don't load user_agent and peer_fingerprint from session_state
* fix file rename issue with name prefix matching torrent name
* fix division by zero when setting tick_interval > 1000
* fix move_storage() to its own directory (would delete the files)
* fix socks5 support for UDP
* add setting urlseed_max_request_bytes to handle large web seed requests
* fix python build with CC/CXX environment
* add trackers from add_torrent_params/magnet links to separate tiers
* fix resumedata check issue with files with priority 0
* deprecated mmap_cache feature
* add utility function for generating peer ID fingerprint
* fix bug in last-seen-complete
* remove file size limit in torrent_info filename constructor
* fix tail-padding for last file in create_torrent
* don't send user-agent in metadata http downloads or UPnP requests when
in anonymous mode
* fix internal resolve links lookup for mutable torrents
* hint DHT bootstrap nodes of actual bootstrap request
1.1.1 release
* update puff.c for gzip inflation
* add dht_bootstrap_node a setting in settings_pack (and add default)
* make pad-file and symlink support conform to BEP47
* fix piece picker bug that could result in division by zero
* fix value of current_tracker when all tracker failed
* deprecate lt_trackers extension
* remove load_asnum_db and load_country_db from python bindings
* fix crash in session::get_ip_filter when not having set one
* fix filename escaping when repairing torrents with broken web seeds
* fix bug where file_completed_alert would not be posted unless file_progress
had been queries by the client
* move files one-by-one when moving storage for a torrent
* fix bug in enum_net() for BSD and Mac
* fix bug in python binding of announce_entry
* fixed bug related to flag_merge_resume_http_seeds flag in add_torrent_params
* fixed inverted priority of incoming piece suggestions
* optimize allow-fast logic
* fix issue where FAST extension messages were not used during handshake
* fixed crash on invalid input in http_parser
* upgraded to libtommath 1.0
* fixed parsing of IPv6 endpoint with invalid port character separator
* added limited support for new x.pe parameter from BEP 9
* fixed dht stats counters that weren't being updated
* make sure add_torrent_alert is always posted before other alerts for
the torrent
* fixed peer-class leak when settings per-torrent rate limits
* added a new "preformatted" type to bencode entry variant type
* improved Socks5 support and test coverage
* fix set_settings in python binding
* Added missing alert categories in python binding
* Added dht_get_peers_reply_alert alert in python binding
* fixed updating the node id reported to peers after changing IPs
1.1.0 release
* improve robustness and performance of uTP PMTU discovery
* fix duplicate ACK issue in uTP
* support filtering which parts of session state are loaded by load_state()
* deprecate support for adding torrents by HTTP URL
* allow specifying which tracker to scrape in scrape_tracker
* tracker response alerts from user initiated announces/scrapes are now
posted regardless of alert mask
* improve DHT performance when changing external IP (primarily affects
bootstrapping).
* add feature to stop torrents immediately after checking files is done
* make all non-auto managed torrents exempt from queuing logic, including
checking torrents.
* add option to not proxy tracker connections through proxy
* removed sparse-regions feature
* support using 0 disk threads (to perform disk I/O in network thread)
* removed deprecated handle_alert template
* enable logging build config by default (but alert mask disabled by default)
* deprecated RSS API
* experimental support for BEP 38, "mutable torrents"
* replaced lazy_bdecode with a new bdecoder that's a lot more efficient
* deprecate time functions, expose typedefs of boost::chrono in the
libtorrent namespace instead
* deprecate file_base feature in file_storage/torrent_info
* changed default piece and file priority to 4 (previously 1)
* improve piece picker support for reverse picking (used for snubbed peers)
to not cause priority inversion for regular peers
* improve piece picker to better support torrents with very large pieces
and web seeds. (request large contiguous ranges, but not necessarily a
whole piece).
* deprecated session_status and session::status() in favor of performance
counters.
* improve support for HTTP where one direction of the socket is shut down.
* remove internal fields from web_seed_entry
* separate crypto library configuration <crypto> and whether to support
bittorrent protocol encryption <encryption>
* simplify bittorrent protocol encryption by just using internal RC4
implementation.
* optimize copying torrent_info and file_storage objects
* cancel non-critical DNS lookups when shutting down, to cut down on
shutdown delay.
* greatly simplify the debug logging infrastructure. logs are now delivered
as alerts, and log level is controlled by the alert mask.
* removed auto_expand_choker. use rate_based_choker instead
* optimize UDP tracker packet handling
* support SSL over uTP connections
* support web seeds that resolve to multiple IPs
* added auto-sequential feature. download well-seeded torrents in-order
* removed built-in GeoIP support (this functionality is orthogonal to
libtorrent)
* deprecate proxy settings in favor of regular settings
* deprecate separate settings for peer protocol encryption
* support specifying listen interfaces and outgoing interfaces as device
names (eth0, en2, tun0 etc.)
* support for using purgrable memory as disk cache on Mac OS.
* be more aggressive in corking sockets, to coalesce messages into larger
packets.
* pre-emptively unchoke peers to save one round-trip at connection start-up.
* add session constructor overload that takes a settings_pack
* torrent_info is no longer an intrusive_ptr type. It is held by shared_ptr.
This is a non-backwards compatible change
* move listen interface and port to the settings
* move use_interfaces() to be a setting
* extend storage interface to allow deferred flushing and flush the part-file
metadata periodically
* make statistics propagate instantly rather than on the second tick
* support for partfiles, where partial pieces belonging to skipped files are
put
* support using multiple threads for socket operations (especially useful for
high performance SSL connections)
* allow setting rate limits for arbitrary peer groups. Generalizes
per-torrent rate limits, and local peer limits
* improved disk cache complexity O(1) instead of O(log(n))
* add feature to allow storing disk cache blocks in an mmapped file
(presumably on an SSD)
* optimize peer connection distribution logic across torrents to scale
better with many torrents
* replaced std::map with boost::unordered_map for torrent list, to scale
better with many torrents
* optimized piece picker
* optimized disk cache
* optimized .torrent file parsing
* optimized initialization of storage when adding a torrent
* added support for adding torrents asynchronously (for improved startup
performance)
* added support for asynchronous disk I/O
* almost completely changed the storage interface (for custom storage)
* added support for hashing pieces in multiple threads
* fix padfile issue
* fix PMTUd bug
* update puff to fix gzip crash
1.0.10 release
* fixed inverted priority of incoming piece suggestions
* fixed crash on invalid input in http_parser
* added a new "preformatted" type to bencode entry variant type
* fix division by zero in super-seeding logic
1.0.9 release
* fix issue in checking outgoing interfaces (when that option is enabled)
* python binding fix for boost-1.60.0
* optimize enumeration of network interfaces on windows
* improve reliability of binding listen sockets
* support SNI in https web seeds and trackers
* fix unhandled exception in DHT when receiving a DHT packet over IPv6
1.0.8 release
* fix bug where web seeds were not used for torrents added by URL
* fix support for symlinks on windows
* fix long filename issue (on unixes)
* fixed performance bug in DHT torrent eviction
* fixed win64 build (GetFileAttributesEx)
* fixed bug when deleting files for magnet links before they had metadata
1.0.7 release
* fix bug where loading settings via load_state() would not trigger all
appropriate actions
* fix bug where 32 bit builds could use more disk cache than the virtual
address space (when set to automatic)
* fix support for torrents with > 500'000 pieces
* fix ip filter bug when banning peers
* fix IPv6 IP address resolution in URLs
* introduce run-time check for torrent info-sections beeing too large
* fix web seed bug when using proxy and proxy-peer-connections=false
* fix bug in magnet link parser
* introduce add_torrent_params flags to merge web seeds with resume data
(similar to trackers)
* fix bug where dont_count_slow_torrents could not be disabled
* fix fallocate hack on linux (fixes corruption on some architectures)
* fix auto-manage bug with announce to tracker/lsd/dht limits
* improve DHT routing table to not create an unbalanced tree
* fix bug in uTP that would cause any connection taking more than one second
to connect be timed out (introduced in the vulnerability path)
* fixed falling back to sending UDP packets direct when socks proxy fails
* fixed total_wanted bug (when setting file priorities in add_torrent_params)
* fix python3 compatibility with sha1_hash
1.0.6 release
* fixed uTP vulnerability
* make utf8 conversions more lenient
* fix loading of piece priorities from resume data
* improved seed-mode handling (seed-mode will now automatically be left when
performing operations implying it's not a seed)
* fixed issue with file priorities and override resume data
* fix request queue size performance issue
* slightly improve UDP tracker performance
* fix http scrape
* add missing port mapping functions to python binding
* fix bound-checking issue in bdecoder
* expose missing dht_settings fields to python
* add function to query the DHT settings
* fix bug in 'dont_count_slow_torrents' feature, which would start too many
torrents
1.0.5 release
* improve ip_voter to avoid flapping
* fixed bug when max_peerlist_size was set to 0
* fix issues with missing exported symbols when building dll
* fix division by zero bug in edge case while connecting peers
1.0.4 release
* fix bug in python binding for file_progress on torrents with no metadata
* fix assert when removing a connected web seed
* fix bug in tracker timeout logic
* switch UPnP post back to HTTP 1.1
* support conditional DHT get
* OpenSSL build fixes
* fix DHT scrape bug
1.0.3 release
* python binding build fix for boost-1.57.0
* add --enable-export-all option to configure script, to export all symbols
from libtorrent
* fix if_nametoindex build error on windows
* handle overlong utf-8 sequences
* fix link order bug in makefile for python binding
* fix bug in interest calculation, causing premature disconnects
* tweak flag_override_resume_data semantics to make more sense (breaks
backwards compatibility of edge-cases)
* improve DHT bootstrapping and periodic refresh
* improve DHT maintanence performance (by pinging instead of full lookups)
* fix bug in DHT routing table node-id prefix optimization
* fix incorrect behavior of flag_use_resume_save_path
* fix protocol race-condition in super seeding mode
* support read-only DHT nodes
* remove unused partial hash DHT lookups
* remove potentially privacy leaking extension (non-anonymous mode)
* peer-id connection ordering fix in anonymous mode
* mingw fixes
1.0.2 release
* added missing force_proxy to python binding
* anonymous_mode defaults to false
* make DHT DOS detection more forgiving to bursts
* support IPv6 multicast in local service discovery
* simplify CAS function in DHT put
* support IPv6 traffic class (via the TOS setting)
* made uTP re-enter slow-start after time-out
* fixed uTP upload performance issue
* fix missing support for DHT put salt
1.0.1 release
* fix alignment issue in bitfield
* improved error handling of gzip
* fixed crash when web seeds redirect
* fix compiler warnings
1.0 release
* fix bugs in convert_to/from_native() on windows
* fix support for web servers not supporting keepalive
* support storing save_path in resume data
* don't use full allocation on network drives (on windows)
* added clear_piece_deadlines() to remove all piece deadlines
* improve queuing logic of inactive torrents (dont_count_slow_torrents)
* expose optimistic unchoke logic to plugins
* fix issue with large UDP packets on windows
* remove set_ratio() feature
* improve piece_deadline/streaming
* honor pieces with priority 7 in sequential download mode
* simplified building python bindings
* make ignore_non_routers more forgiving in the case there are no UPnP
devices at a known router. Should improve UPnP compatibility.
* include reason in peer_blocked_alert
* support magnet links wrapped in .torrent files
* rate limiter optimization
* rate limiter overflow fix (for very high limits)
* non-auto-managed torrents no longer count against the torrent limits
* handle DHT error responses correctly
* allow force_announce to only affect a single tracker
* add moving_storage field to torrent_status
* expose UPnP and NAT-PMP mapping in session object
* DHT refactoring and support for storing arbitrary data with put and get
* support building on android
* improved support for web seeds that don't support keep-alive
* improve DHT routing table to return better nodes (lower RTT and closer
to target)
* don't use pointers to resume_data and file_priorities in
add_torrent_params
* allow moving files to absolute paths, out of the download directory
* make move_storage more generic to allow both overwriting files as well
as taking existing ones
* fix choking issue at high upload rates
* optimized rate limiter
* make disk cache pool allocator configurable
* fix library ABI to not depend on logging being enabled
* use hex encoding instead of base32 in create_magnet_uri
* include name, save_path and torrent_file in torrent_status, for
improved performance
* separate anonymous mode and force-proxy mode, and tighten it up a bit
* add per-tracker scrape information to announce_entry
* report errors in read_piece_alert
* DHT memory optimization
* improve DHT lookup speed
* improve support for windows XP and earlier
* introduce global connection priority for improved swarm performance
* make files deleted alert non-discardable
* make built-in sha functions not conflict with libcrypto
* improve web seed hash failure case
* improve DHT lookup times
* uTP path MTU discovery improvements
* optimized the torrent creator optimizer to scale significantly better
with more files
* fix uTP edge case where udp socket buffer fills up
* fix nagle implementation in uTP
* fix bug in error handling in protocol encryption
0.16.18 release
* fix uninitialized values in DHT DOS mitigation
* fix error handling in file::phys_offset
* fix bug in HTTP scrape response parsing
* enable TCP keepalive for socks5 connection for UDP associate
* fix python3 support
* fix bug in lt_donthave extension
* expose i2p_alert to python. cleaning up of i2p connection code
* fixed overflow and download performance issue when downloading at high rates
* fixed bug in add_torrent_alert::message for magnet links
* disable optimistic disconnects when connection limit is low
* improved error handling of session::listen_on
* suppress initial 'completed' announce to trackers added with replace_trackers
after becoming a seed
* SOCKS4 fix for trying to connect over IPv6
* fix saving resume data when removing all trackers
* fix bug in udp_socket when changing socks5 proxy quickly
0.16.17 release
* don't fall back on wildcard port in UPnP
* fix local service discovery for magnet links
* fix bitfield issue in file_storage
* added work-around for MingW issue in file I/O
* fixed sparse file detection on windows
* fixed bug in gunzip
* fix to use proxy settings when adding .torrent file from URL
* fix resume file issue related to daylight savings time on windows
* improve error checking in lazy_bdecode
0.16.16 release
* add missing add_files overload to the python bindings
* improve error handling in http gunzip
* fix debug logging for banning web seeds
* improve support for de-selected files in full allocation mode
* fix dht_bootstrap_alert being posted
* SetFileValidData fix on windows (prevents zero-fill)
* fix minor lock_files issue on unix
0.16.15 release
* fix mingw time_t 64 bit issue
* fix use of SetFileValidData on windows
* fix crash when using full allocation storage mode
* improve error_code and error_category support in python bindings
* fix python binding for external_ip_alert
0.16.14 release
* make lt_tex more robust against bugs and malicious behavior
* HTTP chunked encoding fix
* expose file_granularity flag to python bindings
* fix DHT memory error
* change semantics of storage allocation to allocate on first write rather
than on startup (behaves better with changing file priorities)
* fix resend logic in response to uTP SACK messages
* only act on uTP RST packets with correct ack_nr
* make uTP errors log in normal log mode (not require verbose)
* deduplicate web seed entries from torrent files
* improve error reporting from lazy_decode()
0.16.13 release
* fix auto-manage issue when pausing session
* fix bug in non-sparse mode on windows, causing incorrect file errors to
be generated
* fix set_name() on file_storage actually affecting save paths
* fix large file support issue on mingw
* add some error handling to set_piece_hashes()
* fix completed-on timestamp to not be clobbered on each startup
* fix deadlock caused by some UDP tracker failures
* fix potential integer overflow issue in timers on windows
* minor fix to peer_proportional mixed_mode algorithm (TCP limit could go
too low)
* graceful pause fix
* i2p fixes
* fix issue when loading certain malformed .torrent files
* pass along host header with http proxy requests and possible
http_connection shutdown hang
0.16.12 release
* fix building with C++11
* fix IPv6 support in UDP socket (uTP)
* fix mingw build issues
* increase max allowed outstanding piece requests from peers
* uTP performance improvement. only fast retransmit one packet at a time
* improve error message for 'file too short'
* fix piece-picker stat bug when only selecting some files for download
* fix bug in async_add_torrent when settings file_priorities
* fix boost-1.42 support for python bindings
* fix memory allocation issue (virtual addres space waste) on windows
0.16.11 release
* fix web seed URL double escape issue
* fix string encoding issue in alert messages
* fix SSL authentication issue
* deprecate std::wstring overloads. long live utf-8
* improve time-critical pieces feature (streaming)
* introduce bandwidth exhaustion attack-mitigation in allowed-fast pieces
* python binding fix issue where torrent_info objects where destructing when
their torrents were deleted
* added missing field to scrape_failed_alert in python bindings
* GCC 4.8 fix
* fix proxy failure semantics with regards to anonymous mode
* fix round-robin seed-unchoke algorithm
* add bootstrap.sh to generage configure script and run configure
* fix bug in SOCK5 UDP support
* fix issue where torrents added by URL would not be started immediately
0.16.10 release
* fix encryption level handle invalid values
* add a number of missing functions to the python binding
* fix typo in Jamfile for building shared libraries
* prevent tracker exchange for magnet links before metadata is received
* fix crash in make_magnet_uri when generating links longer than 1024
characters
* fix hanging issue when closing files on windows (completing a download)
* fix piece picking edge case that could cause torrents to get stuck at
hash failure
* try unencrypted connections first, and fall back to encryption if it
fails (performance improvement)
* add missing functions to python binding (flush_cache(), remap_files()
and orig_files())
* improve handling of filenames that are invalid on windows
* support 'implied_port' in DHT announce_peer
* don't use pool allocator for disk blocks (cache may now return pages
to the kernel)
0.16.9 release
* fix long filename truncation on windows
* distinguish file open mode when checking files and downloading/seeding
with bittorrent. updates storage interface
* improve file_storage::map_file when dealing with invalid input
* improve handling of invalid utf-8 sequences in strings in torrent files
* handle more cases of broken .torrent files
* fix bug filename collision resolver
* fix bug in filename utf-8 verification
* make need_save_resume() a bit more robust
* fixed sparse flag manipulation on windows
* fixed streaming piece picking issue
0.16.8 release
* make rename_file create missing directories for new filename
* added missing python function: parse_magnet_uri
* fix alerts.all_categories in python binding
* fix torrent-abort issue which would cancel name lookups of other torrents
* make torrent file parser reject invalid path elements earlier
* fixed piece picker bug when using pad-files
* fix read-piece response for cancelled deadline-pieces
* fixed file priority vector-overrun
* fix potential packet allocation alignment issue in utp
* make 'close_redudnant_connections' cover more cases
* set_piece_deadline() also unfilters the piece (if its priority is 0)
* add work-around for bug in windows vista and earlier in
GetOverlappedResult
* fix traversal algorithm leak in DHT
* fix string encoding conversions on windows
* take torrent_handle::query_pieces into account in torrent_handle::statue()
* honor trackers responding with 410
* fixed merkle tree torrent creation bug
* fixed crash with empty url-lists in torrent files
* added missing max_connections() function to python bindings
0.16.7 release
* fix string encoding in error messages
* handle error in read_piece and set_piece_deadline when torrent is removed
* DHT performance improvement
* attempt to handle ERROR_CANT_WAIT disk error on windows
* improve peers exchanged over PEX
* fixed rare crash in ut_metadata extension
* fixed files checking issue
* added missing pop_alerts() to python bindings
* fixed typos in configure script, inversing some feature-enable/disable flags
* added missing flag_update_subscribe to python bindings
* active_dht_limit, active_tracker_limit and active_lsd_limit now
interpret -1 as infinite
0.16.6 release
* fixed verbose log error for NAT holepunching
* fix a bunch of typos in python bindings
* make get_settings available in the python binding regardless of
deprecated functions
* fix typo in python settings binding
* fix possible dangling pointer use in peer list
* fix support for storing arbitrary data in the DHT
* fixed bug in uTP packet circle buffer
* fix potential crash when using torrent_handle::add_piece
* added missing add_torrent_alert to python binding
0.16.5 release
* udp socket refcounter fix
* added missing async_add_torrent to python bindings
* raised the limit for bottled http downloads to 2 MiB
* add support for magnet links and URLs in python example client
* fixed typo in python bindings' add_torrent_params
* introduce a way to add built-in plugins from python
* consistently disconnect the same peer when two peers simultaneously connect
* fix local endpoint queries for uTP connections
* small optimization to local peer discovery to ignore our own broadcasts
* try harder to bind the udp socket (uTP, DHT, UDP-trackers, LSD) to the
same port as TCP
* relax file timestamp requirements for accepting resume data
* fix performance issue in web seed downloader (coalescing of blocks
sometimes wouldn't work)
* web seed fixes (better support for torrents without trailing / in
web seeds)
* fix some issues with SSL over uTP connections
* fix UDP trackers trying all endpoints behind the hostname
0.16.4 release
* raise the default number of torrents allowed to announce to trackers
to 1600
* improve uTP slow start behavior
* fixed UDP socket error causing it to fail on Win7
* update use of boost.system to not use deprecated functions
* fix GIL issue in python bindings. Deprecated extension support in python
* fixed bug where setting upload slots to -1 would not mean infinite
* extend the UDP tracker protocol to include the request string from the
tracker URL
* fix mingw build for linux crosscompiler
0.16.3 release
* fix python binding backwards compatibility in replace_trackers
* fix possible starvation in metadata extension
* fix crash when creating torrents and optimizing file order with pad files
* disable support for large MTUs in uTP until it is more reliable
* expose post_torrent_updates and state_update_alert to python bindings
* fix incorrect SSL error messages
* fix windows build of shared library with openssl
* fix race condition causing shutdown hang
0.16.2 release
* fix permissions issue on linux with noatime enabled for non-owned files
* use random peer IDs in anonymous mode
* fix move_storage bugs
* fix unnecessary dependency on boost.date_time when building boost.asio as separate compilation
* always use SO_REUSEADDR and deprecate the flag to turn it on
* add python bindings for SSL support
* minor uTP tweaks
* fix end-game mode issue when some files are selected to not be downloaded
* improve uTP slow start
* make uTP less aggressive resetting cwnd when idle
0.16.1 release
* fixed crash when providing corrupt resume data
* fixed support for boost-1.44
* fixed reversed semantics of queue_up() and queue_down()
* added missing functions to python bindings (file_priority(), set_dht_settings())
* fixed low_prio_disk support on linux
* fixed time critical piece accounting in the request queue
* fixed semantics of rate_limit_utp to also ignore per-torrent limits
* fixed piece sorting bug of deadline pieces
* fixed python binding build on Mac OS and BSD
* fixed UNC path normalization (on windows, unless UNC paths are disabled)
* fixed possible crash when enabling multiple connections per IP
* fixed typo in win vista specific code, breaking the build
* change default of rate_limit_utp to true
* fixed DLL export issue on windows (when building a shared library linking statically against boost)
* fixed FreeBSD build
* fixed web seed performance issue with pieces > 1 MiB
* fixed unchoke logic when using web seeds
* fixed compatibility with older versions of boost (down to boost 1.40)
0.16 release
* support torrents with more than 262000 pieces
* make tracker back-off configurable
* don't restart the swarm after downloading metadata from magnet links
* lower the default tracker retry intervals
* support banning web seeds sending corrupt data
* don't let hung outgoing connection attempts block incoming connections
* improve SSL torrent support by using SNI and a single SSL listen socket
* improved peer exchange performance by sharing incoming connections which advertize listen port
* deprecate set_ratio(), and per-peer rate limits
* add web seed support for torrents with pad files
* introduced a more scalable API for torrent status updates (post_torrent_updates()) and updated client_test to use it
* updated the API to add_torrent_params turning all bools into flags of a flags field
* added async_add_torrent() function to significantly improve performance when
adding many torrents
* change peer_states to be a bitmask (bw_limit, bw_network, bw_disk)
* changed semantics of send_buffer_watermark_factor to be specified as a percentage
* add incoming_connection_alert for logging all successful incoming connections
* feature to encrypt peer connections with a secret AES-256 key stored in .torrent file
* deprecated compact storage allocation
* close files in separate thread on systems where close() may block (Mac OS X for instance)
* don't create all directories up front when adding torrents
* support DHT scrape
* added support for fadvise/F_RDADVISE for improved disk read performance
* introduced pop_alerts() which pops the entire alert queue in a single call
* support saving metadata in resume file, enable it by default for magnet links
* support for receiving multi announce messages for local peer discovery
* added session::listen_no_system_port flag to prevent libtorrent from ever binding the listen socket to port 0
* added option to not recheck on missing or incomplete resume data
* extended stats logging with statistics=on builds
* added new session functions to more efficiently query torrent status
* added alerts for added and removed torrents
* expanded plugin interface to support session wide states
* made the metadata block requesting algorithm more robust against hash check failures
* support a separate option to use proxies for peers or not
* pausing the session now also pauses checking torrents
* moved alert queue size limit into session_settings
* added support for DHT rss feeds (storing only)
* added support for RSS feeds
* fixed up some edge cases in DHT routing table and improved unit test of it
* added error category and error codes for HTTP errors
* made the DHT implementation slightly more robust against routing table poisoning and node ID spoofing
* support chunked encoding in http downloads (http_connection)
* support adding torrents by url to the .torrent file
* support CDATA tags in xml parser
* use a python python dictionary for settings instead of session_settings object (in python bindings)
* optimized metadata transfer (magnet link) startup time (shaved off about 1 second)
* optimized swarm startup time (shaved off about 1 second)
* support DHT name lookup
* optimized memory usage of torrent_info and file_storage, forcing some API changes
around file_storage and file_entry
* support trackerid tracker extension
* graceful peer disconnect mode which finishes transactions before disconnecting peers
* support chunked encoding for web seeds
* uTP protocol support
* resistance towards certain flood attacks
* support chunked encoding for web seeds (only for BEP 19, web seeds)
* optimized session startup time
* support SSL for web seeds, through all proxies
* support extending web seeds with custom authorization and extra headers
* settings that are not changed from the default values are not saved
in the session state
* made seeding choking algorithm configurable
* deprecated setters for max connections, max half-open, upload and download
rates and unchoke slots. These are now set through session_settings
* added functions to query an individual peer's upload and download limit
* full support for BEP 21 (event=paused)
* added share-mode feature for improving share ratios
* merged all proxy settings into a single one
* improved SOCKS5 support by proxying hostname lookups
* improved support for multi-homed clients
* added feature to not count downloaded bytes from web seeds in stats
* added alert for incoming local service discovery messages
* added option to set file priorities when adding torrents
* removed the session mutex for improved performance
* added upload and download activity timer stats for torrents
* made the reuse-address flag configurable on the listen socket
* moved UDP trackers over to use a single socket
* added feature to make asserts log to a file instead of breaking the process
(production asserts)
* optimized disk I/O cache clearing
* added feature to ask a torrent if it needs to save its resume data or not
* added setting to ignore file modification time when loading resume files
* support more fine-grained torrent states between which peer sources it
announces to
* supports calculating sha1 file-hashes when creating torrents
* made the send_buffer_watermark performance warning more meaningful
* supports complete_ago extension
* dropped zlib as a dependency and builds using puff.c instead
* made the default cache size depend on available physical RAM
* added flags to torrent::status() that can filter which values are calculated
* support 'explicit read cache' which keeps a specific set of pieces
in the read cache, without implicitly caching other pieces
* support sending suggest messages based on what's in the read cache
* clear sparse flag on files that complete on windows
* support retry-after header for web seeds
* replaced boost.filesystem with custom functions
* replaced dependency on boost.thread by asio's internal thread primitives
* added support for i2p torrents
* cleaned up usage of MAX_PATH and related macros
* made it possible to build libtorrent without RTTI support
* added support to build with libgcrypt and a shipped version of libtommath
* optimized DHT routing table memory usage
* optimized disk cache to work with large caches
* support variable number of optimistic unchoke slots and to dynamically
adjust based on the total number of unchoke slots
* support for BitTyrant choker algorithm
* support for automatically start torrents when they receive an
incoming connection
* added more detailed instrumentation of the disk I/O thread
0.15.11 release
* fixed web seed bug, sometimes causing infinite loops
* fixed race condition when setting session_settings immediately after creating session
* give up immediately when failing to open a listen socket (report the actual error)
* restored ABI compatibility with 0.15.9
* added missing python bindings for create_torrent and torrent_info
0.15.10 release
* fix 'parameter incorrect' issue when using unbuffered IO on windows
* fixed UDP socket error handling on windows
* fixed peer_tos (type of service) setting
* fixed crash when loading resume file with more files than the torrent in it
* fix invalid-parameter error on windows when disabling filesystem disk cache
* fix connection queue issue causing shutdown delays
* fixed mingw build
* fix overflow bug in progress_ppm field
* don't filter local peers received from a non-local tracker
* fix python deadlock when using python extensions
* fixed small memory leak in DHT
0.15.9 release
* added some functions missing from the python binding
* fixed rare piece picker bug
* fixed invalid torrent_status::finished_time
* fixed bugs in dont-have and upload-only extension messages
* don't open files in random-access mode (speeds up hashing)
0.15.8 release
* allow NULL to be passed to create_torrent::set_comment and create_torrent::set_creator
* fix UPnP issue for routers with multiple PPPoE connections
* fix issue where event=stopped announces wouldn't be sent when closing session
* fix possible hang in file::readv() on windows
* fix CPU busy loop issue in tracker announce logic
* honor IOV_MAX when using writev and readv
* don't post 'operation aborted' UDP errors when changing listen port
* fix tracker retry logic, where in some configurations the next tier would not be tried
* fixed bug in http seeding logic (introduced in 0.15.7)
* add support for dont-have extension message
* fix for set_piece_deadline
* add reset_piece_deadline function
* fix merkle tree torrent assert
0.15.7 release
* exposed set_peer_id to python binding
* improve support for merkle tree torrent creation
* exposed comparison operators on torrent_handle to python
* exposed alert error_codes to python
* fixed bug in announce_entry::next_announce_in and min_announce_in
* fixed sign issue in set_alert_mask signature
* fixed unaligned disk access for unbuffered I/O in windows
* support torrents whose name is empty
* fixed connection limit to take web seeds into account as well
* fixed bug when receiving a have message before having the metadata
* fixed python bindings build with disabled DHT support
* fixed BSD file allocation issue
* fixed bug in session::delete_files option to remove_torrent
0.15.6 release
* fixed crash in udp trackers when using SOCKS5 proxy
* fixed reconnect delay when leaving upload only mode
* fixed default values being set incorrectly in add_torrent_params through add_magnet_uri in python bindings
* implemented unaligned write (for unbuffered I/O)
* fixed broadcast_lsd option
* fixed udp-socket race condition when using a proxy
* end-game mode optimizations
* fixed bug in udp_socket causing it to issue two simultaneous async. read operations
* fixed mingw build
* fixed minor bug in metadata block requester (for magnet links)
* fixed race condition in iconv string converter
* fixed error handling in torrent_info constructor
* fixed bug in torrent_info::remap_files
* fix python binding for wait_for_alert
* only apply privileged port filter to DHT-only peers
0.15.5 release