The releases are listed in reverse chronilogical order. Each change has a date and an author number, see the AUTHORS file for a list of the authors. The "not yet released" version will not be available until I release it. If there is a problem with the current release, report the problem, or better yet, explain how to fix the problem. Then download older versions to find one that works for you. v0.4.26 (not yet released) v0.4.25-ps0 2001.07.02 (0702) PS1 - Migrated Peter Selinger's patches to version 0.4.25 v0.4.25 2001.06.27 (0627) RPM - DR1's optimizations disabled because of major SEGFAULT problem when the file cache (cache_path, etc.) is turned on. In the meantime the RPM optimized share_search developed on 20010607 is being used always. (0612) RPM - Optimizations and corrections to DR1's QREPLY cache. (0612) DR1 - Add data structures and algorithms to cache the results of query packets, thereby making the processing of queries more efficient. (0611) RPM - Make #last# command OS-independent, filter out HTML tags, ignore non-printable chars, and limit its output to 1024 chars (0611) DR1 - Add #last# command, which displays the last "turd" (usually a server error message) (0607) RPM - Optimize share_search so users who share a *lot* of files (like more than a thousand!) won't get quite as much CPU usage from gnut. v0.4.24 2001.06.03 (0602) RPM - Fix a SEGV error that happened when a PUSH comes in for the same search reqponse as a download you have stopped. (0602) RPM - Implement code to debug segfaults on a per-thread basis (lib.c routines dq_init, dq_start, dq_end, dq_dump, dqi, etc.) gnut Now produces dump file "gnut-segfault-info" if it segfaults. (0518) RPM - Add the GDJ script (0517) RPM - #info# now allows multiple arguments, like "info nh" (0516) RPM - Simplify source file names, and eliminate some of the very small source files (0516) RPM - Scan cache directory immediately at startup so the cached files get shared right away. (0516) RB1 - "blacklist search" now affects cache, so you can prevent certain filenames from being cached on your machine. v0.4.23 2001.05.11 (0511) RPM - configure prints error message if they specify --enable-gnome (0511) RPM - When loading hosts file, only load up to a maximum of 20,000 addresses. This speeds startup and (more importantly) after the second launch it improves the ratio of active addresses to inactive addresses. (0511) RPM - Only print the segfault thread info if log_level is set (because segfaults are usually nonfatal). (0504) GR1 - Fix bug that made BearShare get the wrong number of bytes on an upload. (0502) RPM - Eliminate use of snprintf (0429) WH1 - Test for ncurses version of readline v0.4.22 2001.04.24 (0423) RPM - Optimize IP address randomization, so as to favor addresses that have been seen recently over older ones. This is important because the network is now so large, with so many old "dead" IP addresses, that it takes too long for gnut to search through all the addresses to find the good ones. Hosts are still chosen randomly to avoid the problem that was fixed in version 0.4.4 (0420) RPM - Fix memory leak in gnut_connection.c function gnut_connection_delete(). (0420) RPM - Fix memory leak in Gnut_Hash.c function lru_gc(). (0420) RPM - Fix memory leak in host.c function host_remove(). (0420) RPM - Finish implementing memory leak detection. (0412) PS1 - Fix bug that made other clients request the last byte of a shared file many, many times. (0406) RPM - Auto-connect to three well-known host cache servers if the .gnut_hosts file is missing. (0403) RPM - Fix bug that made the file sizes wrong for any files that are on hosts that returned more than one match to a single search. v0.4.21-ps0 2001.04.12 (0412) PS1 - Migrated Peter Selinger's patches to version 0.4.21 v0.4.21 2001.03.28 (0316) RPM - Stop counting dropped DOS PINGs against a connection's "duplicate" count. This reduces the turnover rate in the connection list. (0314) RPM - Send a PING with TTL=1 to each new connection right after opening. Such PINGs seem to be necessary to make the connections stay open (due to the popularity of Limewire and BearShare, which expect to see traffic right away on each opened connection). (0314) LT1 - Fix bug that caused newest (rather than oldest) connection to be killed when *redirect* is set (this bug was present starting with version 0.4.7). (0301) RPM - Add *search_min_size* setting. (0216) MK1 - 'scan' only prints "using 'find' to scan" message if initated by 'scan' command rather than by the share cache mechanism (0216) MK1 and HL1 - *sort_order* now allows sorting by host IP address (0212) RPM - Adding documentation explaining how to change anything (including the ./configure script or a Makefile) and actually get the changes to take effect. Not done yet. v0.4.20-ps-0 2001.03.26 (0122) PS1 - Human readable formal for transfer_log (0122) PS1 - Fixed HTTP subrange bug (0121) PS1 - List titles in alphabetical order (0117) PS1 - Changed slash-stripping code to leave "/" untouched (0117) PS1 - Rewrote directory scanning code in C, removing dependency on GNU "find" or Perl v0.4.20 2001.02.07 (0124) RPM - A search for "john john" will now match only those files that have two "john"'s in their name. (0122) RPM - #stop# now stops a connection while it is in the CONN state. (0121) RPM - Add #forget# command. (0120) RPM - PUSH sent by auto-retry now respects no_rfc_1597 unless overridden by retry_push=2 (0119) RPM - Add *retry_push* setting. v0.4.19 2001.01.18 (0118) RPM - When resuming a download, overlap the new data on top of the old data so as to eliminate any error message that might have been written at the end of the existing partly-transferred file by a previous failed download-resume operation. (0117) RPM - Automatically restarts incomplete downloads, and automatically retries failed download connections (to disable, turn off the *auto_download_retry* flag). (0117) RPM - Add *http_client_headers* variable. (0117) RPM - (internal) replace many uses of the xfree macro with free_xx calls to eliminate possible missed indirection errors, and with trackable error codes. (0117) RPM - Improvements to MK1's changes, including *leave_turds* config option. (0116) MK1 - Allow #stop# command to stop a queued download. Fix a couple bugs in downloading - no longer leaves small incomplete files around. v0.4.18 2001.01.08 (0104) FR1 and RPM - Remove reliance on GNU 'find' to index shared directories, use 'perl' script instead (or print error if no perl either) (1231) GK1 - Another fix to a misaligned access problem. (1230) RPM - Replace varargs version of g_debug with gd_xx routines. (1228) RPM - Detect segfault inside readline() and print appropriate error message. (1226) RPM - Make host_class() aware of some additional address ranges v0.4.17 2000.12.24 (1218) RPM - fix crash on certain processors (including Sparc) resulting from misaligned access on third parameter of certain calls to gnut_blacklist_allow(). (1208) RPM - Fix bug in #scan# command that messed up shared pathnames when scanned directory name included quotes or backslash escapes. (1208) RPM - Send PING to a newly-opened Gnutellanet connection if our host list happens to be empty. (1207) RPM - Fix possible bug from send(2) not sending whole buffer. (1205) RPM - Fix bug with setting or changing name of search log file (1128) RPM - Search results list now shows which items have been used as subjects of a #get# or #push# command. (1124) RPM - Add 'u' and 'd' options to #info# command. (1118) RPM - *verbose* setting now allows separate control of upload and download messages. (1116) RPM - Add #lshare# command. v0.4.16 2000.11.10 (1003) RPM - Slight change to munge_time(): "1h0m34s" instead of "60m34s". (1003) RPM - #load# with spaces after argument works now (a convenience for readline users) (1003) PD1 - Add support for multiple searching, via #list# and #lclear# commands and *multi_enable*, *max_searches* flags. v0.4.15 2000.09.26 (0923) RPM - Added "#include " to cli_input.c. v0.4.14 2000.09.26 (broken build -- download 0.4.15 instead) (0920) PD1 - Add interpolation of shell commands within `backquotes`. (0918) RPM - #help# now includes detailed descriptions of most commands, with examples. Type for example 'help load'. (0918) (submitted by duncanpa) Add #eval#, #load#, and #save# commands. (0915) RPM - When upload limit reached, send "503" error message instead of "404". (091x) RPM - fix crash that happened when connecting by hostname and said hostname does not resolve to an IP address. (091x) RPM - improve handling of bad packet data (usually garbage generated by poorly implemented clients). (0911) RPM - #open# with a nonesistent hostname no longer causes a segfault. (0911) RPM - Added "log_level" variable. (0911) RPM - #set# accepts "-" as equivalent to "_" in variable names. (0911) RPM - Slight change in how total shared filesize is calculated. (0907) RPM - Fixed compile error in gnut_transfer.c for environments that have FCNTL and not FLOCK (0906) RPM - #exit# is a synonym for #quit#. (0906) JW1 - Add "min_cache_size" setting to keep very-small files out of the cache. (0906) JW1 - Add "search_log" and "transfer_log" variables, which allow automatic logging of all query packets and uploads (respectively) to local files. conf_cache_int() renamed to conf_cache_entry(). (0906) JW1 - Web interface tells whether each shared file is in cache or not. v0.4.13 2000.08.13 (0811) RPM - Add "hide_pathname" option, to control whether search replies give the full pathname of the file (0809) RPM - It now grabs query replies from all packets it receives if they match the current query string. This causes more results to arrive and more quickly than if we only watched for our own replies. (0808) RPM - Merge in Jon Arney's changes to the command-line portions of gnut. (Gnome interface still waiting) (0808) RPM - Add #prompt# option, a string that can contain variables, to put info on the "gnut > " prompt line. (0808) RPM - Add #blacklist# command (0808) RPM - Add shell escape (!) command (UNIX users only) (0808) RPM - Add #cls# command (UNIX users only) (0808) RPM - Add #player# command to support multiple streaming players for multiple file types. (0807) RPM - #mpush# command allows you to monitor PUSH requests (downloads) initated by other users on the network. (0805) RPM - #mreply# command allows you to monitor search replies (filenames) returned by other hosts on the network. (0729) JA1 - To support the Windows interface (not yet brought in), added #ifdef __cplusplus around all function prototypes in header files. (0728) JA1 - Added in blacklist filtering features. (0728) JA1 - Added in prompt features and clear screen and shell commands contributed by Jason Smith. (0728) JA1 - Added Gtk/Gnome interface. There are still some problems with it, but it mostly works now. (0728) JA1 - To support the Gtk interface, fixed a problem with hostname resolution in gnut_net.c (0728) JA1 - Brought in better support for "players" not yet ready for use. v0.4.12 2000.08.04 ------- (0804) RPM - drop very long queries (more than 80 characters) because such packets have recently been seen spamming the Gnutella network. (0804) RPM - (internal) Update aclocal.m4, configure, install-sh, missing, mkinstalldirs and the Makefile.in's to agree with my version of aclocal, autoconf and automake, then rebuild configure. (0802) RPM - (internal) Fix minor file-locking bugs: unlock download file if HAVE_FNCTL, don't unlock upload files (because they're never locked!). (0801) RPM - Changes to default_upload_cap and default_download_cap now take effect immediately on current transfers. (0801) RPM - Transfer rates are now computed and displayed by a decaying-average formula with a half-life of about 10 seconds, to more accurately show actual rises and falls in the transfer rate. (0801) RPM - (internal) add get_rate_limit(), decay_rate() (0801) RPM - #get# checks IP address before sending push request. (0731) RPM - Add quotes around strings displayed by #monitor#. (0731) RPM - Add "no_rfc_1597" setting to disable VPN address checks. (0731) RPM - (internal) change host address routines in host.c to support no_rfc_1597 setting. (0731) RPM - Make #push# error messages (for IP address checks) more informative. (0731) RPM - Add configure check for (0730) RPM - Add some overlap code for transfer, but it's disabled for the time being. (0728) RPM - Add "search_extensions" variable, to specify filename extensions to use in limiting search results. v0.4.11 2000.07.28 ------- (0728) RPM - Drop queries of 3 characters or less. (0727) RPM - Fix #push# command -- it now sends the proper GUID in the PUSH packet, so the remote host actually recognizes and responds now. DOH! (0727) RPM - Shared files are now displayed to remote hosts as filenames only, not full pathnames (this is what all the other Gnutella clients do). (0727) RPM - PUSH handler ignores requests from IP addresses that failed to connect or issue a GET on a previous PUSH attempt, for an amount of time that depends on the type of failure. (0725) RPM - #response# (and #find# or #search# without argument) display current query string. (0725) RPM - PUSH handler no longer tries to make multiple simultaneous connections to the same host for the same file. (0725) RPM - Change default TTL from 4 to 7. (0725) RPM - #monitor# command now takes an argument, which is used as a boolean AND filter against the query match strings displayed. (0724) RPM - Respond to PUSH requests with full pathname of requested file, thus making PUSH transfers work properly for files in a subdirectory. (0723) RPM - Add option "strict_search", which specifies filtering search results to make sure they match (by boolean AND, and not ignoring punctuation) the string given in the #find# or #search# command ( but not yet implemented for searches through the HTTP interface). (07xx) RPM - (internal) Change all "//" style comments to "/* */" (makes it compile on old or non-GCC compilers). Move more text strings to gnut_ui.h. v0.4.10 2000.07.21 ------- All changes for 0.4.2 through 0.4.10 are by RPM (0721) (internal) ./configure now checks for getopt_long() in two places. Create gnut_ui.h, move all language-specific strings from gnut_http.c into gnut_ui.h (0721) HTTP search form pop-up choices (time and # replies) now default to the same values you used in your previous search. Also, increase the number of choices (delays from 15 to 240; results from 5 to 320) (0721) Improve look of HTML pages. Add GnutellaNet statistics to each page. Make number-of-replies setting in HTTP search work. (0721) HTTP search sends a trickle of data while searching so the browser won't say "(stalled)" in the status line (0720) HTTP server now formats search results in a table, and includes size and server speed for each file. Add "please wait ## seconds for page to finish loading" message. v0.4.9 2000.07.19 ------ (0719) #find# "results received" display now prints only when the number actually changes (important to users of screen reader software and users running #gnut# over #ssh# or a slow terminal link). (0719) Add 'beep_on_all' preference; if set (and if 'wait_after_find' is also set) #find# will beep every time the number of responses goes up, rather than just the first time. (0719) #monitor# no longer prints non-ASCII characters (which often screw up an xterm or console window so bad that you'd have to log out to recover) (0719) #sleep# and #kill# no longer cause a segfault if they have no argument. (0719) Update gnut URL in "Powered by gnut" link on web page. (0719) (internal) Remove a debug printf. Fix small memory leak in gnut_connection_delete() v0.4.8 2000.06.16 ------ (0615) Rewrite parts of manual and tutorial to reflect the changes in gnut. Bring up new web site. Automate synchronization of documentation files and web site. Put 0.4.1 on web site. (0612) Enforce max_responses on the actual list in memory (rather than on just the displayed results). (0612) Add CRC check to eliminate duplicate query results (necessary because of the new-connection-query-packet change in 0.4.7) (0612) Implement VPN host address filtering: gnut no longer uses hosts that are unreachable because they have behind-firewall addresses, unless they're in your own firewall address range; also removes some non-downloadable files from results list (but only if you and the other file are both in VPN's and the VPN's are different ranges). (internal) add crc32_start(), crc32_add8(), host_ok_for_connect(), host_ok_for_download(); local_vpn_class global v0.4.7 2000.06.12 ------ (0611) Sent current query packet out to any new connection as soon as the connection opens. (0611) 'find' with no arguments displays results. (0611) 'search' is synonym for 'find'. (0611) Add 'download_timeout' preference, because some hosts make downloads wait in a queue before connecting. (0611) Add 'autokill_thres' option, if set to zero it disables autokill (described in 0.4.6 changes) (0611) New connections now appended to end of connection-list rather than beginning; makes the connection numbers in #info c# more stable, which in turn makes it easier to issue the #kill# command. (internal) Reserve 2 bytes of GUID for possible future multiple concurrent search feature. kill_worst now breaks ties in preference to the last 'bad' connection rather than the first. v0.4.6 2000.06.11 ------ (0611) Add autokill: automatic connection-list grooming. If left alone, gnut will now optimize its N connections to get the minimum possible overlap; this means you get more results when you do a search. Dropped packets now counted as in Windows Gnutella ('dropped' = duplicate). run_config_file() now takes a parameter to only run #set# commands, which allows us to get settings (like the port number) from .gnutrc before the rest of initialization. (internal) clean up #ifdefs in command_loop() v0.4.5 2000.06.08 (another INTERIM DEBUG VERSION) ------ Like version 0.4.4, this version isn't too useful because it prints a lot of stuff (I was in the middle of fixing the inefficiencies in the connection list and host list) (0608) Dramatically improve stability of connections by handling the buffer-overrun problem differently: now, instead of dropping the connection, it simply drops one packet and tries again. (0608) Add total packets sent (at bottom of 'info c'). Append new hosts to hash bucket instead of prepend (improves long-term freshness of host list). Fix ttl and hops reject checks. (internal) add total_sent global, bad_host() v0.4.4 2000.06.07 (INTERIM DEBUG VERSION) ------ This version isn't too useful because it prints a lot of stuff (I was in the middle of fixing the inefficiencies in the connection list and host list) (0607) Randomize choice of next host when opening a new outgoing connection (it used to always choose a host with a hashcode of 0, and would repeatedly attempt to connect to the same hosts) (0607) (internal) add 'next_hashstart' global; add some debug printf's; cosmetic reformatting v0.4.3 2000.06.07 ------ (0607) Add 'kill w' command -- kills connection with worst duplicate-packet count (0607) (internal): rename 'state' field to 'cstate', and 'type' to 'ctype'; add gnut_connection_kill_worst() v0.4.2 2000.06.07 ------ (0607) Add 'stats_format' config parameter, which makes the connection stats look more like the original Windows Gnutella. (internal) add droprate() v0.4.1 2000.06.07 ------ First version after Robert Munafo began maintenence. 0.4.1 is actually the same as 0.3.29, but many files have tabs changed to spaces. This is to make it easier to track changes in CVS when, eventually, the sources are put into CVS. v0.3.29 ------ Fixed Win32 problem with config files not working properly. Added sleep command, just waits a certain number of seconds. The munge configuration variable now affects most of the numbers. New config option: "html_enable" determines whether the web interface is usable. New config option: "wait_after_find" tells gnut whether to wait for responses after you do a find command. User-space linuxthreads should now work. A message is displayed when a download is queued. Better locking behavior. (Still no locking on Win32 though.) v0.3.28 5/2/00 ------ New config option: "update_clear" determines whether the host list is cleared when the update command is run. New config option: "beep_on_first" makes gnut beep when the first result from a search comes in. (thanks to whoever suggested it) New config option: "munge" allows for prettying up of large numbers. (thanks dmg and whoever suggested it a long time ago) New config option: "max_downloads" maximum number of concurrent downloads, any more than this are queued up. Fixed bug in host handling which would only allow 256 hosts. v0.3.27 5/1/00 ------ Much more substantive caching. See configuration parameters cache_path, cache_refresh and cache_size. "conf" is changed to "set", "search" is changed to "find". You can share symlinks now properly. Files are appended the extension ".gnut" when they are downloading, this extension is only removed when the file is all the way done. Win32 now looks for all configuration files in the current directory, not in the windows directory. Platforms without regexp can now use simple expressions in response. Responses can now be sorted based on any criteria. See README for the syntax. File names are now displayed in bold on platforms which support this. Changed host list management, decreased CPU usage by about 2 times. v0.3.26 4/25/00 ------- A http client can now send more than one query per session. (thanks Jon) Debug statements fixed up in HTTP section. Added timed_recv into transfer loop to get rid of dead connections. Fixed memory glitch on end of push connections. Reports error when file cannot be opened for download. Fixed uploads in Win32. Fixed path slashes when downloading between win32 and unix. More stuff that I can't remember. Thanks to anyone I forgot! :) Server passwords. See "conf password_required" and "conf password". v0.3.25 4/21/00 ------- Pagination support. Small bugfixes. Support for full path being shown in file requests! (thanks Jason Steiner) In the same patch as above configurable html for gnut returns. Small bugfixes in read_packet. Tab completion of both commands and configuration keys. v0.3.24 4/19/00 ------- Added detailed packet monitoring capability. Turn on hidden mode, and you'll see what I mean! (thanks David Maymudes) More options to regexps. (thanks Elijah) Now routes push request packets. Better handling of push connections. Web searches no longer clear out cli searches. v0.3.23 4/16/00 ------- Added a lot of HTTP functionality from Jonathan S. Arney, you can now use gnut as a web-based search engine. Tried to track down some other bugs----it didn't work, if you want to help turn on "--enable-mcheck" , maybe add some more gnut_mprobes all over the place, and track down where the heap goes sour. I can't figure it out for anything. Fixed transfers on Win32. Beginnings of cacheing support. (thanks Ray Jones) v0.3.22 4/16/00 ------- Sorry, didn't keep track very well this release. A lot of bugfixes. Win32 Support. (thanks David Maymudes) v0.3.21 4/14/00 ------- Brown bag release, accidentally removed a config variable, thinking it was never used. Stopped sharing from working. Also made it so that spaces can be included in configuration values. v0.3.20 4/14/00 ------- Fixed up some stupid g_debug problems. (thanks Damian) New configuration system, your ~/.gnutrc will need to be replaced, see gnutrc.sample for help. Added configure check for HP-UX and PTHREADS draft 4. HP-UX should be able to compile out of the box now. (thanks Ken Platz) Made configure.in function on SunOS 5.7 as well. (thanks SFGeek) REGULAR EXPRESSIONS in "response"!!! Thanks to Elijah!!! STREAMING MEDIA SUPPORT w/ the "play" command!! Thanks to Ray Jones v0.3.19 ------- Added verbosity support, so that you get notified when downloads start and stop. Added hidden support, so that you can make your client not visible on the network if you so choose. (thanks to Jason Steiner) Worked on network problems between Solaris and FreeBSD. Fixed a bug in config file parsing. (thanks to Frank Waveren) Long option parsing. (thanks Damian) Worked on support for HP-UX 10.20 and 11.00 FreeBSD 2.8-RELEASE works now. (Thanks to whoever lent me that shell account.) v0.3.18 ------- The .gnut_hosts file is now much easier to use, you should be able to copy the gnutella.txt file off of gnutella.wego.com straight into it to get yourself started. Excellent tutorial in TUTORIAL written by Elijah . Added bad packets field in the connection listing, better detection and dropping of malicious packets. Fixed compilation on Sun. Better autoconf'ability of gnome stuff. Connections are now dropped after they have reached a bad packet cap. This should try and segment the people creating the bad packets... v0.3.17 ------- Fixed query handling. (Man, this was a bad night for making bad bugs!) v0.3.16 ------- Fixed a bug in the hashing that made nothing work as it should. Better handling of bad packets, nothing that can't be decoded is passed on now. v0.3.15 ------- Implemented hashing the routing table, seems to have decreased CPU usage in about half. Added better debugging info when crashes occur. Pushes automatically get requested when the initial transfer connection fails. v0.3.14 ------- The Glade front-end is working better than it ever has. (Granted that doesn't mean a whole lot!) Other things are fixed as well. I can't name them. v0.3.13 ------- Total transfer bandwidth limiting implemented. Matched incorrect results in previous version, fixed now. Re-implemented no output mode. Query replies are tested for uniqueness upon display. Some other things I'm forgetting. v0.3.12 ------- Reduced CPU usage in about half by using a better search method. Some other small things. v0.3.11 ------- Many bugfixes... a lot of them from ! Changed the packet_stack to a packet_queue, and also moved monitoring over to this object as well. Fixed read_line on BSD. A nasty segfault was fixed that would happen anytime a push send was cleared. v0.3.10 ------- Fixed many small bugs that could cause segfaults, made the HTTP replies a little more according to the RFCs. Thanks to dmg for all the help finding segfaults, to Kris for helping with FreeBSD, and to Frank for the long list of feature requests! ;) v0.3.9 ------ Fixed some of the problems with the new IP detection code. Cleaned up a HUGE memory leak, and some other stuff. v0.3.8 ------ Better local IP detection, you no longer have to have a valid hostname for gnut to work. Also I messed with signal handling a bit, they shouldn't crash gnut as much, although I haven't tried to get suspend/resume to work yet. v0.3.6 ------ Dunno, searches are now shown coming in in real time. v0.3.5 ------ Push requests now are completely supported! Minor bugfixes, and some FreeBSD portability patches applied. v0.3.4 ------ Compiles and runs on SunOS 5.6 again. Other bugfixes, and other such crap.