1gsk (1.0.63):
2  * dns memory leak (it would leak up to 2^16 hash-table entries before
3    reusing them)
4  * memory leak in local socket-addresses.
5  * add gsk-analyze-successive-memdumps
6  * fix gsk_escape functions properly handle situations
7    like "\0000", which should be two characters:
8    a NUL followed by a digit '0'.
9  * use g_slice for foreign buffer fragments
10  * fix to gsk_rm_rf() with symlinks
11
12gsk (1.0.62)
13  * bug fix in blocking of POST data.
14
15gsk (1.0.61)
16  * gsk_http_server_set_idle_timeout(),
17    gsk_http_content_set_idle_timeout(): adjust the keepalive timeout
18
19gsk (1.0.60)
20  * bug in gsk_log_rotate_stdio_logs():
21    implement '%s' ourselves instead of using strftime.
22
23gsk (1.0.59)
24  * add gsk_log_rotate_stdio_logs()
25
26gsk (1.0.58)
27  * add gsk_http_client_propagate_content_read_shutdown();
28    use it from gskurltransferhttp.
29
30gsk (1.0.57)
31  * gskstreamconnection: use read_buffer on input stream if available.
32  * BUG: gsk_http_request_parse_cgi_string() (and friends).
33    Skip past multiple '&' characters as intended.
34  * obey "mask" in gsk_log_trap()
35
36gsk (1.0.56)
37  * fix bug parsing content-charset (remove quotes if necessary)
38
39gsk (1.0.55)
40  * add gsk_lock_dir()
41
42gsk (1.0.54)
43  * add gsk_http_content_type_parse() function
44  * permit gsk_io_set_gerror to specific a non-GSK domain (remove assertion)
45
46
47gsk (1.0.53)
48  * gsk_date_parse_timet() assert failed on some bad dates.
49
50gsk (1.0.52)
51  * bug fix: gsk_date_parse_timet() had a sign-error in its timezone
52    handling.
53  * add gsk_buffer_append_repeated_char().
54  * http server fix
55
56gsk (1.0.51)
57  * bug fix: gskstreamlistenersocket: do not crash if remote or local addr
58    is unavailable.
59  * bug fix: GSK_QSELECT macro was broken
60  * bug fix: stream-fd was sometimes notifying after shutdown.
61  * minimal support for "100 Continue" messages in gskhttpclient
62
63gsk (1.0.50) NOT YET RELEASED
64
65gsk (1.0.49)
66  * avoid using gettimeofday() if a suitable CPU timer is available.
67  * gskpassfd: mechanism for passing file-descriptors between processes.
68
69gsk (1.0.48)
70  * gsk_zlib_inflator_new2() and
71    gsk_zlib_deflator_new2() allow you to use gzip compression
72    and decompression.  These require zlib >= 1.2.0 to work right.
73
74gsk (1.0.47)
75  * GskStreamWatchdog: a stream that closes automatically after
76    a certain amount of inactivity.
77  * gsk_hook_set_poll(), etc: call the set_poll function even
78    if idle notification is enabled.
79
80gsk (1.0.46)
81  * micro bug fix.
82
83gsk (1.0.45)
84  * major fix in HttpServer if not enough data comes in.
85  * GskIO::print_errors.  Setting this flag in a GskIO
86    should print all errors that occur.  The default
87    is FALSE, but if GSK_PRINT_ERRORS=1 in the environment,
88    then the default will become TRUE.
89
90gsk (1.0.44)
91  * minor possibly bug in HttpClient.
92
93gsk (1.0.43)
94  * gsk-throttle-proxy: --{half,full}-shutdowns options
95  * http-client bug fixes: was forgetting to clear a write
96    block in several key places.
97
98gsk (1.0.42)
99  * gsk-throttle-proxy: useful for testing.
100  * suppress warnings on http-server "X-Whatever" headers.
101
102gsk (1.0.41)
103  * gsk_main_loop_add_timer(), gsk_source_adjust_timer()
104    take 64-bit arguments for the time in milliseconds,
105    so that we can handle really long timeouts.
106    (the old limit was 2^32 ms == 48.5 days)
107    (Additionally hacks were added for binary compatibility)
108  * gsk_socket_address_new_local() is deprecated in favor of
109    gsk_socket_address_local_new().  Likewise,
110    gsk_socket_address_new_ethernet() is deprecated by
111    gsk_socket_address_ethernet_new().
112  * GskSocketAddressSymbolic, a symbolic address
113    which can be used with gsk_stream_fd_new_from_symbolic_address()
114    or gsk_stream_new_connecting(), which will handle a
115    native or symbolic address without burdening the user.
116  * GskPersistentConnection is implemented in terms
117    of GskSocketAddressSymbolic, and its DOING_NAME_RESOLUTION state
118    is now unused.
119
120gsk (1.0.40)
121  * minor bug fix (in rbtreemacros)
122
123gsk (1.0.39)
124  * minor bug fix.
125
126gsk (1.0.38)
127  * keep-alive improvements
128
129gsk (1.0.37)
130  * randomize DNS results to support roundrobin DNS;
131    enabled by default.
132    Implement gsk_dns_rr_cache_roundrobin()
133    and gsk_name_resolver_set_dns_roundrobin().
134  * bugs in redirect handling for HTTP Url transfers.
135
136gsk (1.0.36)
137  * bug fix:  gsk_stream_write() on GskStreamExternal
138    was not handling contention properly.
139
140gsk (1.0.35)
141  * bug fix:  try the nameservers in the order listed in resolv.conf,
142    instead of the reverse of that order.
143  * Provide GSK_QSELECT()
144
145gsk (1.0.34)
146  * Provide GSK_QSORT(), a macro-based quicksort. (in gskqsortmacro.h)
147  * Provide stack, deque and list macro-based implementations.
148    (in gsklistmacros.h)
149  * Add gsk_g_error_add_prefix().
150
151gsk (1.0.33)
152  * GskMemPoolFixed bug fix.
153  * expose gsk/zlib/gskzlib.h for its helper functions.
154
155gsk (1.0.32)
156  * DNS bug fix.
157
158gsk (1.0.30)
159  * BUG: bogus assertions in gskdnsrrcache wrt to the is_deprecated flag.
160  * Make DNS warning/debugging messages go to their own log-domain. (Gsk-Dns)
161
162gsk (1.0.10)
163
164  * BUILD BUG: sometimes -lreadline requires -ltermcap;
165    in any event, test linkage.
166  * MAJOR BUG: fixes in GskDnsClient list manipulation.
167    The bug caused (under duress)
168    "useless DNS message" warnings and segfaults.
169  * add gsk_memory_source_new_vprintf()
170  * automatically delete stale unix-domain sockets if a server tries
171    to reuse the path.
172  * Change gsk_name_resolve() to be deprecated,
173    in favor of more correctly named gsk_name_resolver_task_new();
174    casual, non-cancelling users may use gsk_name_resolver_lookup().
175  * minor SSL issues
176  * Add gsk-netcat program, for debugging and as useful example code.
177
178gsk (1.0.9)
179  * BUG: gskhttpserver was creating 0-length chunks which looked
180    like EOF chunks.
181  * BUG: gskmemory was shutting down while returning nonzero.
182    i think we decided that that wasn't allowed.
183  * add a line-based ring-buffer: GskLogRingBuffer.
184  * add generic logging traps (gsk_log_trap_generic)
185  * add ring-buffer logging traps (gsk_log_trap_ring_buffer)
186  * API change: change gsk_log_trap_domain_to_file() to take
187    the set of log-levels trapped.
188  * BUG: gskmimemultipart{decoder,encoder} both had serious bugs
189  * BUG: zlibdeflator didn't properly "finish" its data.
190    zlibinflator wasn't always giving shutdown notification, nor syncing.
191
192gsk (1.0.8)
193  * allow user to set the DNS cache size
194  * build fixes
195  * BUG: GskStreamExternal was busy-looping.
196
197gsk (1.0.7)
198  * include GskControlServer/GskControlClient
199    which provide a simple to implement generic control
200    interface.  We also provide the gsk-control-client
201    program which can talk to such a server, in general.
202    Therefore, must programs will only need to implement the
203    server.  An example server has been added in src/programs.
204  * include GskHttpContent, a content database for implementing
205    normal HTTP servers, which usually want to provide different handlers
206    for various portions of the path/user-agent/virtual-host space.
207  * BUG: GskStreamExternal: re-fix bug that caused
208    stdin and stdout to be nonblocking.
209  * gskdaemonize provides --foreground and --background options,
210    as well as restart-on-segv or assertion failure support.
211
212gsk (1.0.6)
213  * compiler bug fix
214  * bug fixes to gsklog.
215  * this version was botched.  do not use it.
216
217gsk (1.0.5)
218  * API change:  GskPacket now has two addresses: a source and a destination
219    instead of a single multi-use address.
220  * change GskNetworkInterfaceSet::num_interfaces to an unsigned.
221  * gsklog.h:  gmessage-based logging to files, using many domains. (daveb)
222  * SHA-256 support in gskhash. (daveb)
223  * GskStreamListenerSocket has a parameter to remove the entry
224    from the file-system when done.
225
226gsk (1.0.4)
227  * memory leak in gskhttpclient and gskhttpserver finalize routines
228
229gsk (1.0.1)
230  * gsk_socket_address_localhost() becomes a macro,
231    and more properly named gsk_socket_address_loopback()
232    is added.  gsk_ipv4_ip_address_{any,loopback} globals
233    are added, basically fixed as 0.0.0.0 and 127.0.0.1. (mrad)
234  * Force absolute URLs to have a slash (/) after the host. (daveb)
235  * Partial shutdown problem in HTTP client, noticed by Ted Witkamp. (daveb)
236  * HTTP Download include query string (twitkamp)
237  * shutdown-in-shutdown loop noticed by mrad. (daveb)
238  * gsk_url_encode and gsk_url_encode_http weren't escaping some
239    whitespace and other "non-unreserved" characters. (mrad)
240  * various solaris fixes reported by Jeremy Leader (at Overture).
241  * add gsk_timegm() which does the opposite of gmtime() portably. (daveb)
242  * better handling of POLLHUP and POLLERR in GskMainLoop{Poll,Epoll}.
243    Now the POLLHUP flag is propagated to G_IO_IN and POLLERR
244    is propagated to G_IO_IN|G_IO_OUT.  This is roughly what
245    BSD and select(2) do, so it seems right for linux/poll,epoll as well.
246  * gsk_tree_remove wasn't removing newly inserted keys when a node
247    with the same key was already being visited. (mrad)
248  * Allow hooks to be safely untrapped/retrapped during notification. (mrad)
249  * Allow hooks to defer shutdown notification when the hook is initialized
250    with gsk_hook_mark_can_defer_shutdown, and the class's shutdown method
251    returns false. (mrad)
252
253 -- Dave Benson <daveb@ffem.org>  ???
254
255
256gsk (1.0.0)
257
258  * Completely rewritten to use 'streams' and 'hooks' instead
259    of 'actors'.
260
261 -- Dave Benson <daveb@ffem.org>  Tues Jan 13, 2004
262