Commit Graph

220 Commits

Author SHA1 Message Date
Jordan Lee b46d3a2713 (trunk libT) #117 "UDP tracker protocol support (BEP #15)" -- refactor announcer.c so that alternate tracker protocols can be supported.
This commit adds a set of package-visible structs and functions to allow delegating announces and scrapes to different protocol handlers. (Examples: struct tr_announce_request, struct tr_announce_response, struct tr_scrape_request, struct tr_scrape_response.) HTTP is the only protocol handler currently implemented; however, this provides a clean API for other protocol handlers, and having this in trunk will help shake out any bugs in this refactoring.

In addition, logging via the TR_DEBUG_FD environment variable is vastly improved in the announcer module now.
2011-03-11 04:19:01 +00:00
Jordan Lee b38466323b (trunk libT) use a hex key for tracker announces. 2011-03-10 11:46:22 +00:00
Jordan Lee 9bf2434e14 (trunk) copyediting: remove trailing spaces from source code lines in daemon/ gtk/ libtransmission/ and utils/ 2011-03-04 23:26:10 +00:00
Jordan Lee 9024cb29f9 (trunk libT) #3208 "Local Peer Discovery idea: prioritize LPD requests for downloads" -- add patch from Eszet 2011-03-04 17:33:29 +00:00
Jordan Lee 716a3c90c2 (trunk) #4032 "Better error detection / reporting in http announces" -- added to trunk.
This patch adds two new flags to the callback function -- did_connect and did_timeout -- that are calculated inside of web.c using information from libcurl. This allows the announcer to detect timeouts more accurately and also to distinguish between unresponsive peers (which get the preexisting "Tracker did not respond" error message) and unconnectable peers (which get a new error message, "Could not connect to tracker").
2011-02-17 02:26:24 +00:00
Jordan Lee 2b905bdbcc (trunk libT) silence minor "unused function argument" compiler warning 2011-02-07 23:09:36 +00:00
Jordan Lee 11c0517cc8 (trunk libT) #3931 "'Announce is Queued' but doesn't get announced" -- remove the 'unresponsive tracker' penalty from torrents whose announce time has been reached.
The 'bad tracker' penalty was introduced in 2009 after a top tier trackers went down. Announces to it would hang, tying up an announce slot in libcurl for minutes at a time. If a user had enough torrents from that tracker, it could bottleneck all announce slots. The workaround was to deprioritize failing trackers so that they wouldn't obstruct other trackers.

Its implementation could be better, however. There are two parts:

  1. Deciding how frequently to retry unresponsive trackers

  2. Once an unresponsive tracker announce was ready to go, it would be bumped down the queue if other announces were ready too.

Part 2 probably contributes to #3931. If there are enough torrents loaded, there will always be good tracker announces that get pushed ahead of a bad one in the queue. Modifying 2's heuristics would be one option, but it seems simpler to remove it altogether now that getRetryInterval() grades more hashly for consecutive failures. Altering the retry interval also gives better visual feedback to users than Part 2 did.

This commit removes "Part 2" as described above.
2011-02-05 18:46:10 +00:00
Jordan Lee ddfb113f70 (trunk libT) announcer.c cleanup, part 1
Separating this commit into a few different stages. This one is superficial/readability changes, such as grouping related functions together.
2011-02-05 16:45:06 +00:00
Jordan Lee a9e104d591 (trunk libT) #3931 "announce is queued" -- minor revision for uClibc compatibility
jusid reports that powl() doesn't exist on uClibc, so getRetryInterval() needs to work without it. A simple left-bit shifting would be fine, but since we max out after a handful of cases, a switch statement seems slightly more readable than shifting or powl().
2011-01-30 16:23:53 +00:00
Jordan Lee e492bcf7d0 (trunk libT) "Announce is Queued" but torrent doesn't announce itself to trackers -- simplify http response code handling 2011-01-29 19:04:02 +00:00
Jordan Lee f36fc1246c (trunk libT) #3934 "manual reannounce doesn't work if the initial announce failed" -- fixed.
Use tor->isRunning, rather than tier->isRunning, when testing to see if a torrent can manual announce or not.  tor->isRunning means we're inbetween the user pressing "start" and "stop." tier->isRunning means we're inbetween successful "started" and "stopped" announcements. (This is deliberately out-of-sync from tor->isRunning because it can take awhile to for tracker announces to finish.)

Under the old code (using tier->isRunning), it was impossible to manually reannounce unless there had been a successful event=started announce first. It was also possible to manually announce after the "stop" button had been pressed if the "event=stopped" announcement hadn't finished yet.
2011-01-22 19:56:01 +00:00
Jordan Lee 75ffe999d4 (trunk libT) #3933 "announcer.c peer parsing could be simpler" -- fixed.
Remove redundant code by using tr_peerMgrCompactToPex() and tr_peerMgrCompact6ToPex() to parse compact ipv4 and ipv6 peer lists. Simplify the old-style benc peer list parsing and fix a bug that returned too few bytes in the old-style peer array.
2011-01-22 17:45:54 +00:00
Jordan Lee 5b382d203e (trunk libT) #3870 "transmission doesn't recheck after getting initial 404" -- fixed.
The exponentially-growing interval between retries had a bug that caused intervals to be too long if no successful announce had ever been made. This commit fixes the code that calculates the interval.
2011-01-20 22:51:05 +00:00
Jordan Lee bca543dc8e (trunk libT) #3923 "remove redundant announcer.c debug message" -- done. 2011-01-20 20:49:09 +00:00
Jordan Lee 879a2afcbd Update the copyright year in the source code comments.
The Berne Convention says that the copyright year is moot, so instead of adding another year to each file as in previous years, I've removed the year altogether from the source code comments in libtransmission, gtk, qt, utils, daemon, and cli.

Juliusz's copyright notice in tr-dht and Johannes' copyright notice in tr-lpd have been left alone; it didn't seem appropriate to modify them.
2011-01-19 13:48:47 +00:00
Jordan Lee 8aa0f36a37 cleanup of who calls the libtransmission thread locking functions.
In some cases we were calling them from deep inside libtransmission, when they should have been called directly from the public-visible API functions: tr_torrentWebSpeeds_KBps(), tr_torrentPeers(), tr_torrentTrackers().
2011-01-18 23:44:36 +00:00
Jordan Lee e12788c626 (trunk libT) fix formatting error in a couple of old calls to dbgmsg() 2011-01-12 05:05:48 +00:00
Charles Kerr e5bb3205a1 (trunk) Join the 21st century and use only 1 space at the end sentences. This commit is nearly as important as the semi-annual ones that remove trailing spaces from the ends of lines of code... :) 2010-12-27 19:18:17 +00:00
Charles Kerr ae84dc70dd (trunk libT) #3836 "libevent2 support" -- finish moving to the libevent2 API mode. don't include the backwards-compatable API headers. 2010-12-24 08:58:41 +00:00
Charles Kerr 345b14adbc (trunk) #3836 "libevent2 support" -- bump libevent2 requirement to 2.0.10. This will break the Mac build for a minute intil BMW applies his Mac patch 2010-12-20 02:07:51 +00:00
Charles Kerr e8ba22fc11 fix irrelevant text formatting error. :/ 2010-12-03 23:14:04 +00:00
Charles Kerr e957353a85 (trunk libT) r11448 seems to have been a red herring, so undo that commit. 2010-12-03 23:10:24 +00:00
Charles Kerr 11b34daea2 (trunk libT) possibly fix the "no announce scheduled" issue reported in the forums 2010-12-03 21:53:37 +00:00
Charles Kerr 498452fba4 (trunk libT) #3689 "libtransmission/announcer.c's announceURLIsSupported() function is redundant" -- removed. 2010-10-30 16:19:27 +00:00
Charles Kerr 82781cf2a7 (trunk libT) #3666 "byteCount stored on a 32bits integer" -- fixed. 2010-10-24 21:35:23 +00:00
Charles Kerr ad613b05f7 (trunk libT) #3638 "fewer crypto calls when creating peer-ids, session ids, announcer keys, etc" -- fixed. 2010-10-17 18:32:55 +00:00
Charles Kerr 80f69ee7d3 (trunk) fix svn properties on several files. Thanks ot Elbandi for suggesting this 2010-10-01 13:33:39 +00:00
Charles Kerr c86b87a511 (trunk) revert the RPC behavior of rateUpload, rateDownload, rateToClient, and rateToPeer as discussed with Longinus00 2010-09-03 04:30:43 +00:00
Charles Kerr 92e06acf74 (trunk) RPC: add "scrape" to the trackerStats array, making it a proper superset of the "trackers" array. Also, very minor tweaks to the RPC spec 2010-09-01 20:54:04 +00:00
Charles Kerr 841be713d1 (trunk libT) #3383 "When port forwarding, check to see if the public port matches the private port" -- fixed 2010-07-05 21:04:17 +00:00
Charles Kerr a5a1f38393 (trunk libT) fix more issues found by -Wconversion 2010-07-01 05:14:34 +00:00
Charles Kerr db44d81b24 (trunk) #3256 "libtransmission/publish.[ch] should be replaced" -- apply publish.diff for 2.10 2010-06-19 14:33:10 +00:00
Charles Kerr 462e473410 (trunk libT) when TR_CURL_VERBOSE is set, also log the benc announce response 2010-06-10 15:18:02 +00:00
Charles Kerr 60ce7e5263 (trunk libT) #3258 "Transmission 1.93 sends 'stopped'+'started' announce instead of 'completed' if the incomplete-dir is enabled" -- probable fix 2010-06-03 16:37:50 +00:00
Charles Kerr 37f90426c1 (trunk libT) revert r10661 s.t. DHT peers are preferred slightly over PEX peers. This reversion comes after reading "Understanding the Properties of the BitTorrent Overlay" (2007, Al-Hamra) @ http://arxiv.org/pdf/0707.1820 at Juliusz's suggestion. Also tweak the announce's 'numwant' threshold based on findings from the same paper. 2010-05-28 01:41:30 +00:00
Charles Kerr 5ca8d41816 (trunk libT) #2929 "persistent tracker error messages in main window" -- experimental fix 2010-05-19 19:02:25 +00:00
Charles Kerr fcc56ddcd5 (trunkn libT) #3192 "crash in most recent nightlies" -- fixed in trunk for 2.00 2010-05-18 15:14:54 +00:00
Charles Kerr 1aef6e1a03 (trunk libT) code tweak 2010-05-18 13:07:37 +00:00
Charles Kerr ad27c9d58e (trunk libT) #3203 "torrents halted after 'Tracker returned a 4xx message'" -- fixed in trunk for 2.00 2010-05-11 13:32:29 +00:00
Charles Kerr 2b9ab542cb (trunk) #3060 "Local Peer Discovery" -- in the code, rename LDS as LPD for Local Peer Discovery 2010-05-08 08:42:45 +00:00
Charles Kerr 5a34347f4f (trunk) #3060 -- Local Peer Discovery patch from Eszet 2010-05-01 16:04:00 +00:00
Charles Kerr 546bca723b (trunk libT) #3159 "better decision-making when choosing which peers to initiate new connections with" -- experimental commit 2010-04-20 21:54:03 +00:00
Charles Kerr fe3d9ed95a (trunk) one of the least interesting commits ever: remove trailing spaces from source code lines... 2010-03-17 17:07:40 +00:00
Mitchell Livingston bd635f22d0 for scrapes: add a new field to distinguish from error messages returned from the tracker, and scrape timeouts, so that they can be displayed differently 2010-02-25 23:06:05 +00:00
Charles Kerr d0e5e68ac1 (trunk libT) when calling tr_torrentSetAnnounceList(), reset the tracker IDs to new, but unique, numbers synchronized between tr_info and the torrent stats 2010-02-22 00:11:19 +00:00
Charles Kerr 71ed8193b8 (trunk libT) (1) reduce the default tracker announce timeout from 120 to 90 seconds. (2) for partial seeds, send an event=paused when we transition from being leeches to partial seeds, just as you would send an event=completed when becoming a seed 2010-02-20 21:03:49 +00:00
Charles Kerr 7a33a9170e (trunk libT) revise r10238 to be a little more readable 2010-02-20 17:17:57 +00:00
Charles Kerr 9b68c1ec97 (trunk libT) comment out a couple of console debug messages 2010-02-20 16:33:20 +00:00
Charles Kerr 5a9a07b71e (trunk) #2938 "crash when adding a torrent by URL from an ftp source over RPC" -- fixed in trunk for 1.91 2010-02-20 15:57:05 +00:00
Charles Kerr a973e38bb5 (trunk libT) #2922 "announce's 'download' field should follow the de facto standard" -- added to trunk for 1.91 2010-02-20 15:36:25 +00:00
Charles Kerr be80f3bbde (trunk libT) more improvements to tr_announcerResetTorrent() 2010-02-14 05:34:03 +00:00
Charles Kerr 586602a13a (trunk libT) annother announcer tweak, this time to resolve a problem reported by Longinus00 in #transmission on freenode that 404 responses incorrectly caused Transmission to announce again 2010-02-14 05:16:04 +00:00
Mitchell Livingston 26ccf12b3e #2902 New tracker addition field obscured when trackers vertically fill inspector view 2010-02-14 04:48:12 +00:00
Charles Kerr cf95714968 (trunk libT) handle 404 errors more gracefully. error reported by Longinus00 in #transmission on freenode 2010-02-14 03:54:35 +00:00
Charles Kerr 617e80d767 (trunk libT) #2850 "tr_torrentSetAnnounceList() should not trigger reannounces to trackers" -- further revision to get newly-added tiers to announce 2010-02-14 03:40:39 +00:00
Charles Kerr 2ad6e06ea6 (trunk libT) #2850 "tr_torrentSetAnnounceList() should not trigger reannounces to trackers" -- tweak to r10193 2010-02-14 03:28:54 +00:00
Charles Kerr 057b80a9f9 (trunk libT) "tr_torrentSetAnnounceList() should not trigger reannounces to trackers" -- implemented in trunk for 1.90 2010-02-13 21:58:38 +00:00
Charles Kerr 5c9cd2c2db (trunk libT) revert part of r10064 at livings' request 2010-02-11 03:12:03 +00:00
Mitchell Livingston 9407b5f0f0 chop off a bit of text in an announce error message 2010-02-11 02:52:54 +00:00
Charles Kerr c35d4696ee (trunk libT) re-add the supportcrypto, requirecrypto announce arguments that were removed during announce testing in r10090 2010-02-11 00:43:47 +00:00
Charles Kerr 42fcfbe804 (trunk libT) try to fix the mac build. This commit still has the announce logging code. 2010-02-10 04:42:34 +00:00
Charles Kerr 7efdd92f86 (trunk libT) oops, a couple of debugging printf()s snuck into the commit 2010-02-10 03:57:41 +00:00
Charles Kerr 2472970c53 (trunk libT) fix 1.82 memory corruption error reported by john doe 2010-02-10 02:59:15 +00:00
Charles Kerr 8ba3442408 (trunk libT) fix the &event= key when telling the tracker that a partial seed is being stopped 2010-02-09 21:51:11 +00:00
Charles Kerr 1724553212 (trunk) per-tier up/down/corrupt byte counts for announcing to trackers 2010-02-08 16:47:30 +00:00
Charles Kerr 74e3484e75 (trunk) add a new field to distinguish from error messages returned from the tracker, and announce timeouts, so that they can be displayed differently 2010-02-05 05:16:18 +00:00
Charles Kerr 7519f51fe9 (trunk libT) #2854 "Tracker did not respond" -- when calculating the interval to wait before retrying a failed announce or scrape, take into account that tracker's responses to other torrents' announces/scrapes 2010-02-05 01:47:33 +00:00
Charles Kerr b3d0309034 (trunk libT) #2854 "tracker did not respond" -- when both scrapes and announces are vying for a turn, give announces a higher priority 2010-02-05 01:16:30 +00:00
Charles Kerr d118db0f37 (trunk libT) remove dead announce fields like supportscrypto and requirescrypto. these don't appear to be supported by any of the major clients so why waste the announce bandwidth... 2010-02-03 06:32:14 +00:00
Charles Kerr 5014319622 (trunk libT) experimental commit for faster tracker announces 2010-02-03 03:38:13 +00:00
Charles Kerr e62be48baa (trunk libT) don't scrape paused torrents 2010-02-02 02:59:40 +00:00
Charles Kerr dd9da625d1 (trunk libT) a better way to ignore peerCount from `stopped' responses 2010-02-01 03:49:59 +00:00
Charles Kerr 13179c5363 (trunk libT) ignore the peer count from `stopped' responses when calculating lastAnnouncePeerCount 2010-02-01 03:39:54 +00:00
Charles Kerr 7cb57b8480 (trunk libT) don't reset lastAnnouncePeerCount when stopping a torrent. 2010-02-01 01:13:25 +00:00
Charles Kerr f071f0ccea (trunk libT) another announcer tweak related to #2828 -- keep the last known good value of lastAnnouncePeerCount even if subsequent announces fail 2010-02-01 00:35:38 +00:00
Charles Kerr 9423821e7a (trunk libT) #2828 "Better reporting of announce timeouts in tr_tracker_stat" -- implemented in trunk for 1.90 2010-02-01 00:28:04 +00:00
Charles Kerr 73deb80e77 (trunk libT) if a tracker doesn't respond during an announce, instead of automatically reannouncing in 120 seconds, add some fuzz to the interval. Rationale: if a bunch of torrents announce at once, overloading the router or server, they'll still be overloading it if we do the exact same thing the second time around... 2010-01-28 19:33:48 +00:00
Charles Kerr 38fdcd5835 (trunk libT) (1) on startup, stagger new torrents' scrapes. (2) reduce the minimum number of block requests to peers. 2010-01-25 02:19:20 +00:00
Charles Kerr ae966e0725 (trunk libT) increase the announce timeout from 30 seconds to 45 seconds. 2010-01-24 23:32:49 +00:00
Charles Kerr 9eb07e9b16 (trunk) No code changes here... filling in some of the blanks in the "peers" and "utils" doxygen groups' documentation. 2010-01-19 19:37:00 +00:00
Charles Kerr de82e235af (trunk) second half of r9927.... :/ 2010-01-13 22:46:22 +00:00
Charles Kerr a77770a51a (trunk) add tr_torrent_stat.id to RPC documentation. Rename tr_tracker_stat.identifier as tr_tracker_stat.id for consistency with tr_torrent.id 2010-01-13 22:40:07 +00:00
Mitchell Livingston 6138daec3f add an identifier to trackers, for use by the ui's (this should hopefully fix the problem for removing trackers with "invisible" trackers) 2010-01-10 02:34:00 +00:00
Charles Kerr 5c26afdb52 happy new year! 2010-01-04 21:00:47 +00:00
Charles Kerr 59c10a3dc8 (trunk libT) #2722 "crash when removing/modifying trackers" -- fixed 2010-01-04 09:11:27 +00:00
Charles Kerr 87aefaf5ff (trunk libT) #1699 "announce to multiple trackers at once" -- fix minor bug in reporting scrape results when an announce returns enough information that a separate scrape isn't necessary. 2009-12-14 17:17:05 +00:00
Charles Kerr 5f1f2b1e85 (trunk libT) use curl_multi_socket_action(), even on OS X. 2009-12-10 19:05:21 +00:00
Charles Kerr 02f4038f67 (trunk libT) #2641 "a magnetic-induced crash because of malformed url" -- fixed in trunk for 1.80b2 2009-12-09 04:28:53 +00:00
Charles Kerr 78ead8c3dd (trunk) update the copyright notices 2009-12-05 02:19:24 +00:00
Charles Kerr 6d008257c8 (trunk libT) minor tweaks: make bencode's int parser code more consistent; make some comments more readable 2009-12-02 15:16:29 +00:00
Charles Kerr 6eec59008c (trunk libT) experimental: Reduce SO_SNDBUF and SO_RCVBUF for tracker announce/scrape messages. Reduce SO_RCVBUF for outgoing peer connections on seeding torrents. 2009-12-02 05:30:46 +00:00
Charles Kerr 63027e1d5a (trunk libT) resolve "noslashes" vs "keep_slashes" variable name inconsistency between the declaration and the definition of tr_http_escape() 2009-11-29 08:05:47 +00:00
Charles Kerr e1c6b792aa (trunk libT) #2610 "avoid unnecessary calls to time(NULL)" 2009-11-26 18:47:08 +00:00
Charles Kerr 1cbbcf9fa1 (trunk libT) jch's patches 0001 through 0004 for ticket #2576, IPv6 support for DHT (BEP #32) 2009-11-24 01:59:51 +00:00
Mitchell Livingston 9dc679ab58 Display the proper seeder/leecher/download count for backup trackers, instead of all zeros. 2009-11-21 03:13:27 +00:00
Charles Kerr 44df1d5548 (trunk libT) #2112: provide "ipv6=" parameter to trackers 2009-11-10 17:03:23 +00:00
Charles Kerr c9b071015f (trunk libT) #2530: Announce attempt to invalid tracker occurs too often 2009-10-28 04:53:39 +00:00
Charles Kerr 087f75e1ce (trunk libT) #2518: overzealously alarmist re unresponsive trackers 2009-10-27 21:03:13 +00:00
Charles Kerr baa860e6ce (trunk libT) #2518: r9334 overzealously alarmist wrt unresponsive trackers 2009-10-22 01:28:39 +00:00
Charles Kerr 2e3a3e60aa (trunk libT) #2498: DHT broken 2009-10-12 23:16:51 +00:00
Charles Kerr 3da08652ba (trunk libT) #2494: Adding a tracker changes announce status from time to "queued." 2009-10-12 06:08:28 +00:00
Charles Kerr fde3abaa1e (trunk libT) fix scrape status string error reporte by bmw 2009-10-11 04:39:24 +00:00
Mitchell Livingston 4290927563 retain previous announce/scrape info when a tracker becomes a backup 2009-10-10 20:46:24 +00:00
Mitchell Livingston 2730f9ac9c finish #2463 2009-10-10 20:25:05 +00:00
Charles Kerr b7677f7059 (trunk libT) #2463 if at first you don't succeed... 2009-10-10 20:14:26 +00:00
Charles Kerr 61042404ad (trunk) replace tr_tracker_stat's "isActive" field with the more descriptive "isBackup" 2009-10-10 00:17:00 +00:00
Charles Kerr f607c7591a (trunk) #2463: 'Mac Client shows huge "next announce in" timer' 2009-10-09 21:30:34 +00:00
Charles Kerr 90d612f9a9 (trunk libT) remove randOffset from announcer; the new announce queue handles load balancing 2009-10-03 14:08:05 +00:00
Charles Kerr 412f0b40a2 (trunk libT) fix a crash reported by John Clay and silence a gcc warning 2009-10-03 13:15:32 +00:00
Charles Kerr 21bd104bda (trunk libT) #2471: added/removed trackers aren't applied until restart 2009-10-02 04:54:02 +00:00
Charles Kerr b9a4f418ed (trunk, libT) filter out unsupported announce addresses 2009-10-02 02:03:30 +00:00
Charles Kerr 5819ffc2d8 (trunk, libT) #2464: Mac Client shows incorrect announce/scrape results for backup trackers 2009-09-30 20:49:52 +00:00
Mitchell Livingston 79b5c3e596 show N/A for peer counts when there hasn't been a scrape/announce yet 2009-09-28 15:16:23 +00:00
Charles Kerr a2b8588206 (trunk libT) possibly fix a crash-on-shutdown reported by John_ 2009-09-27 00:27:51 +00:00
Charles Kerr 459bea37f9 (trunk libT) remove a couple more debugging printf() calls 2009-09-26 13:21:46 +00:00
Charles Kerr 681584e58e (trunk libT) possibly fix a crash reported by stdisease 2009-09-26 06:43:44 +00:00
Charles Kerr 4a09a1de13 (trunk) remove tr_stats fields: downloaders, leechers, seeders, timesCompleted as per discussion with livings 2009-09-26 06:20:33 +00:00
Charles Kerr 52f212fc9a (trunk libT) remove some debug printfs 2009-09-26 04:13:09 +00:00
Charles Kerr 28e119c1bb (trunk) copy-by-value changes to tr_tracker_stat 2009-09-26 03:36:58 +00:00
Charles Kerr 86ada18266 (trunk)
#1699: Announce to multiple trackers at once
#2424: Tracker address is not listed in GTK client.
2009-09-25 21:05:59 +00:00