Gtk-Gnutella Changelog

What's new in Gtk-Gnutella 1.1.2

Mar 21, 2015
  • Improvements:
  • [GTK2] Added translation URL in the "About" GUI dialog.
  • [GTK2] Highlight searches with registered downloads by using green text.
  • [GTK2] Added tri-state column sorting to the "upload history" panel.
  • FAQ: added new entry explaining how to get the magnet of a shared file.
  • Map the "collection" G2 query tag to the Windows / Linux "archive" file set.
  • Map the "torrent" G2 query tag to the "torrent" file set.
  • Added support for "rom", "wordprocessing" and "subtitle" G2 query media types.
  • Further optimized SHA1 computation, now going about twice faster for files.
  • Bug Fixes:
  • page_cache_insert_pages(): fixed incorrect write-lock upgrade logic.
  • pmap_insert_region(): must recompute insertion index if we extend the pmap!
  • tmalloc: fixed thread magazine accounting in the depots.
  • Did not commit back to database after updating the DHT key request count.
  • routing_chunk_move(): must check messages carefully when chunk was moved.
  • route_message(): beware of check_duplicate() which can remove the node.
  • thread_element_matches(): pay more attention to discovered threads.
  • thread_find_tid(): skip thread elements not marked as being valid!
  • node_shutdown_mode(): must correctly account for shutdowning G2 nodes!
  • bogons_changed(): forgot to close opened file descriptor
  • upload_stats_load_history(): added missing break in switch.
  • qrt_compressed(): was not handling QRP compression task cancellation properly.
  • Under the Hood:
  • Added hostile ranges.
  • Updated GeoIP databases for IPv4 and IPv6.
  • Throttle the amount of PUSH messages we can send for a given remote server.
  • Legitimate Shareaza nodes cannot be flagging themselves as ultrapeers.
  • Windows: stack unwinding made safer with more memory checks to avoid faults.
  • UPNP: attempt rediscovery of port mapping devices every hour, if missing one.
  • UPNP: attempt rediscovery of port mapping devices every hour, if missing one.
  • Added new TSIG_OVFLOW signal sent when a thread overflows its stack.
  • Fixed race condition between concurrent waiter_refcnt_dec() calls.
  • Added logging of layer which reports a TX error in case of assert failure.
  • Track the last seen time (activity) of discovered threads other than main.
  • Prevent glade-2 from outputting support files now, since we patched them.
  • Added tracing of funny X-Falt lines we are seeing when demsh_debug is set.
  • Added tracing of funny X-Alt lines we are seeing when dmesh_debug is set.
  • Added tracing of funny X-Nalt lines we are seeing when dmesh_debug is set.
  • Added crash hook for the thread layer.
  • Added TX layer write-fault mechansim to help detect user error handling bugs.
  • Syntaxic adjustments to make the latest guile happy with definitions.
  • The GUI will now display current bandwidth by default, instead of the average.
  • mingw_exception(): write shorter messages in case of stack overflows.
  • thread_element_reset(): forgot to reset te->stack_base to NULL.
  • header_append(): allow "." in header names.
  • thread_join_internal(): no thread_cancel_test_element() on foreign thread!
  • thread_find_element(): avoid leaving routine without unlocking mutex!
  • cond_wait_until(): now correctly handle underlying cond variable mutation.
  • thread_block_timeout(): don't panic if main thread already unblocked.
  • dir_entry_filename(): made the Windows version thread-safe.
  • hfield_dump(): fixed formatting of continuation lines.
  • dmesh_collect_locations(): only parse the last timestamp when many given.
  • xmalloc_thread_free(): always handle blocks in the cross-thread free list.
  • Hide strtok_free(), forcing clients to use new strtok_free_null().

New in Gtk-Gnutella 0.98.4 (Nov 12, 2012)

  • This is an important release correcting severe bugs affecting the overall wealth of the system: the PARQ upload queue was not properly restored, the DHT was not always sending correct values back (resulting in failed lookups), and SDBM (the hash-on-disk database) had two well-hidden bugs that could cause crashes at startup or that compromised regular runtime operations.
  • This release uses a reliable UDP layer to transfer out-of-band query hits, ensuring that these important messages are properly sent and received and never lost.

New in Gtk-Gnutella 0.96.9 (Mar 24, 2011)

  • UPnP and NAT-PMP support was added.
  • More status icons were added for DHT, port mapping, and upload pre-stalling information.
  • 12 minor bugs were fixed and 25 "under the hood" improvements were made.

New in Gtk-Gnutella 0.96.6 (Mar 29, 2009)

  • Bug Fixes:
  • #1932909 "columns in search window do not scale properly".
  • Fixed improper HTTP chunking when outputing chunks larger than 64 KiB.
  • #2628899 "tries to download from my old self after IP changes".
  • Was not always resuming the interrupted SHA-1 computation of a finished file when servent was closed in the middle of processing.
  • Fixed bad range checking test in the download part.
  • Was not paying attention to the "give_server_hostname" property and instead sent "HNAME" GGEP extensions in query hits provided a non-empty name was defined as the "server_hostname".
  • Fixed improper upload slot counting which introduced race conditions, sometimes leading to having more slots used than the configured maximum (in addition to the "quick" upload slots).
  • Prevent occasional crashes at shutdown time, during subsystem cleanups.
  • Fixed corner cases where we could lose a server hostname and downright bug where we discarded the hostname after a DNS lookup if the subsequent connection attempt did not succeed.
  • Improvements:
  • Refuse to share certain directories: /, $HOME, $GTK_GNUTELLA_DIR, and the incomplete and corrupted directories.
  • Downloads GUI: added checkboxes to invert the select/filter patterns.
  • Downloads GUI: added "Modified" column and detail showing the timestamp of the last file modification.
  • Optional beautification operations on filenames: strip leading "-", remove consecutive "_" and prevent "_" surrounding punctuation characters.
  • Fixed significant performance issue in the Gtk+ 1.2 front-end: update of upload statistics was O(n) but is now O(1).
  • Background TTH file verification now lights an icon in the GUI.
  • Show TTH tree depth in the download "Details" pane.
  • Update the bitzi metadata info box when a query finishes, so that it is not required to click on the result again after requesting bitzi data.
  • Added MIME type column for search results.
  • Added "Last Request" and "Last Upload" columns to the Upload History.
  • Almost complete DHT support (missing only publishing of data), but code needs to be explicitly enabled by setting "enable_dht" to TRUE. The DHT knows how to look for alt-locs for files and push-proxies for firewalled hosts, and will store local data for others to query.
  • New shell commands "stats", "download", "echo".
  • It is now possible to rename files being downloaded (through GTK2 or shell, no support in GTK1).
  • Added more filename extensions to the built-in search filters.
  • Switch resources after getting an HTTP error if the connection is kept alive and the error permits follow-ups (non-busy conditions).
  • Improved ability to switch resources after file completion by ignoring trailing swarming data, to keep the connection alive.
  • Bitzi tickets are refreshed when explicitely requested, avoiding reuse of stale metadata
  • Completed files are displayed during hash verification.
  • Only propagate good alt-locs for files we are downloading, i.e. addresses of hosts which we know to be serving that file because we contacted them.
  • Many new statistics counters.
  • Allow scheduling of special downloads without considering per-host limits, as these are of a much shorter duration (THEX and browse host requests).
  • Always seed completed files, regardless of their size (no PFSP minimum as with partial files), when their SHA-1 has been verified.
  • Incorrectly encoded Bitzi metadata is translated to Unicode.
  • Browse-host responses are sorted alphanumerically on relative pathnames to allow users to relate files together if they don't understand GGEP "PATH".
  • Improved routing of PUSH messages by also looking whether targetted hosts happen to be one of our immediate neighbours.
  • Updated Norwegian Bokmal and Spanish translations.
  • Under the hood:
  • Parse legacy Shareaza THEX URIs "urn:tree:tiger/:" (extra "/" here).
  • Handle non-standard X-Thex-URI headers if peer provides a valid X-Content-URN header (Shareaza 2.1.0.0).
  • Also attempt to give priority to the last "pfsp_last_chunk" bytes of downloaded files, since that can contain important indexing information to enable pre-view of partial video files.
  • More MIME types known (derived from file extensions).
  • Can now download THEX data at a tree depth of 11 for files larger than 1 GiB.
  • Can download sub-optimal THEX data, as non-optimal data is better than none, but keeps looking for THEX data at the optimal tree depth nonetheless.
  • Reimplemented scanning of shared directories as a background task so that the process (not just the GUI) is fully responsive during the whole scan.
  • Let the background task scheduler compute the proper amount of ticks to use for each task.
  • Upload statistics now record the file's SHA-1, so that we can consolidate partial file sharing with library sharing statistics, with the filename being forced to the library's filename.
  • Avoid starting moving a completed file if there is not enough space on the targetted file system.
  • Recognize and propagate the "DHT" GGEP extension in pongs.
  • Added support for "DHTIPP" GGEP extension in pings, used for DHT bootstrap.
  • Added more entropy to the random number seed.
  • Plugged memory leaks
  • No longer send SHA-1 queries on the Gnutella network. They are now performed through the DHT, which has the suitable topology to do so efficiently.
  • Fixed UDP bandwidth computation, and removed any limit on UDP incoming.
  • Updated list of hostile IP adress ranges, Geo-IP data, spam patterns and spam samples.
  • Property loading from files was in O(n*n), made it O(n).
  • Now detect property files being blindly copied over from another gtk-gnutella's config directory and reset properties whose value needs to be unique.
  • The GUID and the KUID (Kademlia ID, the DHT node ID) were made sticky.
  • Optimization of QRP lookups in tables ranging from 16k to 2M slots.
  • Limit amount of hits to 10 per query hit packet, as LimeWire chokes otherwise.
  • Limit amount of alt-locs in hits to 10 or LimeWire chokes.
  • Keep connection alive when reporting an HTTP error to allow remote resource switching if necessary.
  • Emit and parse new X-Downloaded header, apparently introduced by LimeWire.
  • Added parsing of X-FW-Node-Info headers to grab push-proxies from firewalled hosts, as well as gather the proper GUID and host address/port.
  • Emit X-FW-Node-Info if node is firewalled but continue to list our push-proxies in the standard X-Push-Proxies header.
  • Avoid endless aggressive chunk splitting during swarming.
  • Proper parsing of comma-separated values in Accept and other Accept-Encoding HTTP headers.
  • Reject UDP packets from unspecified addresses.
  • Drain more data out of the UDP receive buffer to prevent it from filling up.
  • Strip at most 5 trailing characters from words when building the QRP table, thereby inserting less radices and making the table more sparse.
  • Removed workarounds for dealing with broken 0.96.2 nodes and earlier 0.95.x.
  • Extended syntax for push:// exact sources in magnets to be able to supply all the known push-proxies, even if that is an empty set. Since downloads are persisted as magnets, this also allows keeping all the previously known push-proxies accross sessions.
  • Upgraded PARQ to version 1.1 (mostly specification cleanups).
  • Added additional anti-hammering for cases where many files on the same server are queued and gtk-gnutella is configured to launch more than 1 connection per IP. Connection attempts to the same server are now limited to 5 per minute.
  • Limitations:
  • DHT code is still experimental, although functional: configuration of parameters can only be done through the shell, and there is no support for publishing yet.