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 or workaround the problem.
You can also download older versions to find one that works for you.

v0.4.28 (not yet released)
 SUMMARY: Fix a few segfaults and other fatal errors. Fix several bugs
 that happened only on non-Linux systems. Remove debug calls for
 efficiency (can be re-enabled with a define). Add several option
 variables. Add more options to #forget# and #kill# commands.

 NOTE TO GNUT DEVELOPERS: I have given each change a "tag" like
 0.4.28.c02 and I placed the tag in the code at each place you
 need to look to see how that change was done. I did not tag trivial
 changes like renamed variables, changed or added comments, changes
 in whitespace and indenting, etc. This is to make it easier for
 you to pick and choose which changes you implement in your version
 of gnut. You can find tags in the code with a command like
 'fgrep 0.4.28.c02 src/*.[ch]' 

 change-tag  date  who   description
 ---------   ----  ---   -------------------------------------------
 0.4.28.c28 (1003) RPM - Add some more host cache sites
 0.4.28.c27 (1002) RPM - Add *search_max_size* setting
 0.4.28.c26 (1002) RPM - Add comparative size versions of #forget#
like #forget > 1200k#
 0.4.28.c25 (0929) RPM - Add #kill i# and #kill o#
 0.4.28.c24 (0929) RPM - Fix segfault after using #forget# command
 0.4.28.c23 (0908) RPM - Add *password_only* and
*virtual_network_name* options
 0.4.28.c22 (0906) WS1 & RPM - Make certain packet-related structures
into char[] arrays to avoid alignment issues on ARM and certain other
processors
 0.4.28.c21 (0904) TG1 - #blacklist# regexps are now case-insensitive
 n/a        (0907) RPM - Add 'make headerstats' target
 0.4.28.c20 (0830) RPM - #response# always prints items consecutive
item numbers (even after #forget# has been used to remove items from
response list)
 0.4.28.c17 (0829) RPM - Add and improve tests for existence of
certain header files (should improve chances of building on different
platforms)
 0.4.28.c16 (0829) RPM - Remove unused query_kname()
 0.4.28.c15 (0829) RPM - http.c removes < > and " characters from
filenames to prevent filenames like "xxx<br>yyy" from confusing a
broswer
 0.4.28.c14 (0829) PD1, MT1 - Allow newlines in prompt, for example
"set prompt gnut:\n"
 0.4.28.c18 (0827) RPM - Comply with (int) parameter type when calling
ctype routines
 0.4.28.c13 (0827) RPM - Protect against double-free error case 241
 0.4.28.c11 (0826) RPM - host_restore and host_add zero counts of
hosts that claim to be sharing "too many" files
 0.4.28.c09 (0824) RPM - Fix crash if #forget# command typed with no
argument
 0.4.28.c08 (0824) RPM - Replace two-step endian conversion with more
efficient and less error-prone one-step macros. The new macros are
faster, and if YTAGS is 1 they do type-checking
 0.4.28.c12 (0823) RPM - Fix compile error on HPUX in connection.c
 0.4.28.c19 (0821) RPM - Replace all gd_xx calls with macros, which
compile out to nothing unless GDEBUG_ENABLE is defined
 0.4.28.c10 (0816) RPM - Fix crash on bigendian machines after
receiving first spam query packet (fixes case 286)
 0.4.28.c07 (0815) RPM - Add checks for allocating huge packets (while
tracking down 0.4.28.c10, but I left the checks in because they seem
like a good idea)
 0.4.28.c06 (0815) RPM - Change design of (as yet unused) varstring
routines
 0.4.28.c05 (0815) RPM - Remove unused code including Josh's
never-enabled qreply cache in share.c
 0.4.28.c04 (0813) RPM - #info t# shows ETA as "Unknown" if rate is
currently 0 bytes/sec
 0.4.28.c03 (0813) RPM - Fix bugs in setting did_receive and
did_upload (which caused us to have a lower score than we "ought" to
have)
 0.4.28.c02 (0813) RPM - Allocate gnut_transfer structure just once
per download, rather than once per retry
 0.4.28.c01 (0812) RPM - Move all mutex declaration and initialization
to gnut.c

v0.4.27 2001.08.10

 SUMMARY: Fixed two major segfaults and a memory leak. Add search
 results ratings system (similar to BearShare) based on the extended
 query hits descriptor data, with settings to tweak the scoring
 system. Add lots of options to #forget# command and *auto_forget*
 flag; lots of smaller changes.
 
 change-tag  date  who   description
 ----------  ----  ---   -------------------------------------------
 ...n/a.... (0810) RPM - Remove the annoying "please follow directions
in file DEPEND" message and replace with a simple prompted message in
./configure
 0.4.27.c30 (0808) RPM - Fix block underwrite (writing before
beginning of block) in connection_handle_packet case 0x80
 0.4.27.c29 (0808) RPM - Fix memory leak in cache_clear_list
 0.4.27.c28 (0807) RPM - #info q# now shows total number of
file-matches sent, rather than packets sent
 0.4.27.c27 (0806) RPM - Generate the extended query reply info when
replying to queries from other servers. This includes adding a history
of measured upload data rates to the .gnut_hosts file and changes to
#info s#
 0.4.27.c26 (0806) RPM - Automatic connection to host caches is now
enabled for all users (used to require *debug_opts* setting). It does
this if there are no hosts in the host list at startup
 0.4.27.c25 (0806) RPM - Add host_lru stats to #info h#
 0.4.27.c24 (0805) RPM - Add *results_format* variable
 0.4.27.c23 (0805) RPM - Change default of *speed* variable to 56
 0.4.27.c22 (0805) RPM - Convert format of qreplies lru_hash entries to
standard query_resp structures
 0.4.27.c21 (0805) RPM - Add routines to parse extended query reply
info. Add rating to results list display, which includes the speed as
well as other hints (server busy, etc.) from the extended query reply.
Rating replaces speed as second parameter of sort order
 0.4.27.c20 (0805) RPM - Add missing pthread_mutex_init calls (affects
only platforms with pthreads draft 4)
 0.4.27.c04 (0803) RPM - Add 's' variant of #forget# command
 0.4.27.c13 (0801) RPM - query_resp record now includes the name
(saves some memory and reduces risk of dangling pointer segfaults)
 0.4.27.c12 (0801) RPM - Removed unused copy of parse_http_request in
threads.c, #include http.h where needed
 0.4.27.c11 (0801) RPM - All file lengths, byte offsets, query reply
refnums, and bandwidth values are now unsigned 32-bit integers (most
used to be 'int'). Gnut can now serve and download files up to 4
Gbytes in size on any system where off_t is assignment-compatible with
uint32 without overflow. This also allows file cache size to exceed
2^31 bytes.
 0.4.27.c10 (0801) RPM - Fix bug in host_save: write each host to
.gnut_hosts only once.
 0.4.27.c09 (0730) RPM - Use crc32 for all hashfunctions
 0.4.27.c08 (0730) RPM - replace 'assert' with explicit handling of
the corresponding errors
 0.4.27.c07 (0730) RPM - use ctype functions and tolower.
 0.4.27.c06 (0730) NM1 - Ignore leading spaces and one leading '/' in
commands
 0.4.27.c04 (0729) RPM - Add '=' variant of #forget# command
 0.4.27.c15 (0727) RPM - Add prototypes for various cli.c functions
 0.4.27.c18 (0726) RPM - Fix a memory leak in threads.c gtdh_1() (free
c2 after rename on successful complete download)
 0.4.27.c05 (0726) RPM (confirmed on 0805 by PB1) - Eliminate yet
another cause of the 'stop push download segfault' (the third so
far!), and increase limit on number of pending pushes to 100
 0.4.27.c19 (0726) RPM - Clean up code dealing with query_resp
records
 0.4.27.c17 (0726) RPM - Eliminate unused code in share.c
 0.4.27.c18 (0726) RPM - Don't send push packet for file cache (the
push would get ignored even if it was successful)
 0.4.27.c04 (0726) RPM - Add keywords variant of #forget# command
 0.4.27.c03 (0726) RPM - Fix a couple bugs related to "verbose*
setting; now the #stop# command works even if *verbose* is not set!
 0.4.27.c02 (0726) RPM - #set# now alphabetizes its output
 0.4.27.c14 (0725) RPM - Add builtin commands to display the GNU
General Public License (because the GPL seems to require it)
 0.4.27.c01 (0724) RPM - Add *auto_forget* flag
 0.4.27.c16 (0724) RPM - Protect lru hashes with a mutex. This is
to provide robustness for future instant-search algorithm.

v0.4.26 2001.07.23
    SUMMARY: Fix some segfaults; much better #stop# command (stop
0-byte downloads with 'stop d 0'); allow control of host list size;
save host stats in hosts file; allow control of file cache loading
rate; add *follow_symlinks* and *search_log_all* settings
 (0723) RPM - Fix another cause of the 'stop push download segfault'
 (0723) RPM - Add *auto_remove_segv_info* flag
 (0721) RPM - Fix bug that sometimes caused multiple cache downloads
to happen in parallel, and another that sometimes caused cache
downloads to stop happening altogether; then add *cache_parallel*
setting
 (0721) RPM - #stop# command now prints pathname (or last part of
pathname) of each transfer stopped
 (0719) RPM - Massively improve #stop# command: Add options
0, d, p, g, u. For example 'stop d 0' stops all downloads that
have transferred 0 bytes; see manual for details
 (0719) RPM - Fix a possible segfault problem arising from getting
multiple PUSH connections from the same host for the same file in
rapid succession.
 (0718) RPM - a few small changes for ANSI-compliance and robustness
 (0717) RPM - Change method of loading .gnutrc so *host_list_size*
can be set before .gnut_hosts gets loaded
 (0717) RPM - .gnut_hosts file now saves and restores the file and
byte counts for each host, so #info h# is more informative at startup
and you can do histograms on the .gnut_hosts file to evaluate how much
stuff people are sharing
 (0717) RPM - Add *host_list_size* to control size of memory host
list. .gnut_hosts file now saves and restores the file and byte counts
for each host. Memory host list now automatically throws away
least-recently-seen host IPs
 (0716) RPM - Add *search_log_all* setting
 (0716) RPM - Stop memory leak by limiting size of memory host list
(it used to keep every host IP address forever, and due to dynamic IP
addresses this essentially makes the list grow without limit)
 (0716) RPM (for AN1) - At startup, load any blacklist settings saved
via previous #save# command
 (0713) DC1 & RPM - Add *checkpoint_hosts* and *checkpoint_net*
options
 (0708) RPM - Eradicate all use of int64. Rename munge_bytes to
format_si
 (0706) RPM - munge_bytes now uses SI standard powers of 1000
'k', 'M', 'G' and so on (used to be a mix of 1000 and 1024)
 (0706) PK1 & RPM - in gc_searchlog, gc_transferlog, make
date human-readable
 (0706) PK1 - Fix segfault in #last# command if no .gnut_last_turd
file exists
 (0706) PK1 - Add *follow_symlinks* option
 (0706) HH1 - Fix bug in blacklisting hosts with a subnet mask

v0.4.25 2001.06.27
    SUMMARY: Cache query replies, which greatly reduces CPU usage if
you're sharing more than a few hundred files; add #last# command,
which displays last download error message.
 (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 response 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 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 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 <curses.h>" 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 <term.h>
 (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. <homer>DOH!</homer>
 (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!!!
<eli at panix.com>
 STREAMING MEDIA SUPPORT w/ the "play" command!! Thanks to Ray Jones
<rjones at pobox.com>

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 <eli at panix.com>.
 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 <kris at freeBSD.org>!
 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.
