Our Todo List

(1) is high priority, (5) is low priority
(**) Means we need this for the real 1.2 release
==============================================================================

(1)	A customizable cache replacement policy.  Ugh, this could be
	interesting since we just optimized the LRU replacement with a 
	doubly-linked list.

(2)	be more persistent in forwarding requests; return fewer error pages
(2)	Fix some problems with peer-selection.
		- Allow for 'backup' parents 
		- An orderd list of siblings to try.  
		- Hash function load balancing
(2)     Calculate Content-Length for multipart range replies (AR)

(3)	hit metering
(3)	ETag support (makes metadata bigger--ack!)
(3)	Efficient public peer access control *without ACLs*
	Bill Wichers <billw@unix0.waveform.net>
	Dave Zarzycki <zarzycki@ricochet.net>
	# distant_peer_deny (icmp rtt) (hops)
	#    If the ICP client is farther than "z" hops away,
	#    or if more than y% of pings to the client exceed
	#    x milliseconds, then deny.
	distant_peer_deny   200  75  10
(3)     deny/allow tags for HTTP header fields (AR)
(3)	LDAP support.  See http://miso.wwa.com/~donley/ and
	Clayton Donley <qa1049@ilms04.cig.mot.com>
(3)	What to do about ACL's and URL escaping?
(3)	Review RFC 2068 and RFC 2109 for header handing, especially
	Cache-Control.

(4) **	Everywhere that we use 'pattern' or such, use ACL elements instead.
	stoplist_pattern, refresh_pattern, ...  (DW)
(4)	Refresh based on content types.  This means we'll need an enum of
	known content types added to StoreEntry.  Unknown types will lose.
(4)	Write binary headers as metadata?
(4)	HTML-escape special characters in errorConvert().

(5)	X-Proxy-hops header?
(5)	internalize redirectors?
(5)	For _popular_ objects, return hits if known to be stale, but then
	initiate an IMS/refresh in the background.
(5)	#ifdefs to disable IP caching
(5)	REST for failed ftp transfers.
(5)	Customizable access logging.
(5)	Inline DNS queries with native resolver calls.
(5)	MD5 acl type
(5)	return "ERR_TOO_LARGE" messages for replies with
	content-lengths larger than some limit.
(5)	Bind HTTP/ICP sockets to multiple interfaces
(5)	Custom X-Forwarded-For

DONE:
+ s/sprintf/snprintf/g
+ Write the text for all the error message files
+ fix all the assert(!ERR_FOO) placeholders
+ Finish hacking at storeCopy() to achieve in-memory sliding window
  for objects being retrieved.
+ make USE_PROXY_AUTH standard
+ single linked list for disk LRU replacement
+ Incorporate Pelletier's latest retry patch for 1.1
(3) URLs --> MD5?
(1) reconfigure (SIGHUP) causes problems with Config.cacheSwap.swapDirs[].
(1) I think we're assuming persistent connections and not looking at
    the reply headers.
(2) Write src/store_key_md5.c and lib/md5.c
(2) SNMP interface
(5) convert ipcache/fqdncache to double-linked list
    and lose qsort() calls.
(3) AS # routing
	- whois -h whois.ra.net '\!gAS194'
	- Stevens V2 Ch.18
(3) SIGHUP should reread error text files
(4) support ftp://host/pub;type=d
(5)	should we write clean store logs from the double-linked list so
	that they are sorted in order of last reference?  Then upon
	restart we won't have to worry about the list being unsorted
	and causing problems with the LRU magic value.
(3) **	Make checkFailureRatio() work again.  (DW)
(2) **  copy over -z semantics from 1.1; don't automatically wipeout
	cache (DW)
(3) **	Make swap.state binary with fixed-size cache keys (AR)
(3) **  Make sure every squid.conf option has documentation (??)
(3) **  Store cache key and other metadata in swap files (KA)
(3) **  Finish implementing the *_dump() functions in cache_cf.c (DW)
(2) **  Fix cachemgr.cgi.  It doesn't understand some of the new
        output formats. (??)
(2) **	Add "Squid" trailer to all error messages. (AR)
(2) **	copy over 'test_reachability' from 1.1 (DW)
(2) **	we don't properly handle the HTTP/1.1 'Connection' header (KA)
(2) **	Code cleanup: (KA)
		- Make sure the lib/*.c files do not use printf/fprintf.
		- Replace bzero with memset
		- Replace bcopy with xmemcpy
(4) **	FTP PUT (KA)
(1)	SSL doesn't work with Proxy Authentication
(3)     HTTP Header todo list (AR)
(5)     replace "for" loops in md5.c with memcpy and memset
(3) **  shrink-able memory pools (AR)
(3) **	request-range (AR)
(4) **  Double check that MemBuf.size is used correctly everywhere (AR)
(3)	'no_cache' access list for specifing objects which should not
	be cached.
(3)	Full request headers for CONNECT requests.
(1) **	Send full HTTP requests in ICP messages (DW)
(2)	Track cache keys (MD5) in memory utilization
(3)	Resource limits.
(3)	Arjan's external proxy auth patch is at
	http://www.iae.nl/users/devet/squid/proxy_auth/
(3)	In some situations, a private-key reply needs to eject a
	public-key cached object.  For example when an object is
	first cachable, but later becomes uncachable.
(4)	Configurable proxy-auth realm
(4)	Configurable FQDN cache size
