Fixed bizarre MSVC 6 bug by making template functons in a class.
[pwlib.git] / History.txt
blob31297d1f09577e25c1475ecc81e2ae5e54c5817b
1 Portable Windows Library Modification History
2 =============================================
4 current code
5 ------------
6         Complete Mac OS X (using Darwin 1.2) port.
8 Release 1.1pl19
9 ---------------
10         More bullet proofing of PER decoder, could crash if given garbage data
11         to decode.
13         Fixed problem in ASN parser with BER encoding of ASN with optional 
14         fields.
16         Fixed missing immediate expiry date on string and file HTTP Service 
17         classes HTTP resources.
19         Added macro to do server side includes of signed or unsigned chunks of
20         HTML in HTTP Service classes.
22         Added flag to globally ignore HTML signatures in HTTP Service classes
23         (useful for develeopment).
25         Improved the HTTP form management classes.
27         Added RFC822 aware channel class for doing internet mail via existing
28         POP3 and SMTP classes, includes content transfer encoding and automatic 
29         base64 translation.
31         Fixed crash if used PBase64::ProcessEncoding() with zero length.
33         Fixed bug in base64 encoder, overwriting memory buffer.
35         Added certificate and private key classes to OpenSSL interface.
37         Fixed problem with propagation of the error text through to indirect
38         channel.
40         Fixed compiler ambiguities in PTimeInterval constructor.
42         Added static function to create a new thread class and automatically
43         run a function on another class in the context of that thread.
45         Added function to change auto delete flag on a thread.
47         Added assert when get nested mutex.
49         Fixed problem with PSemaphore::WillBlock actually locking semaphore.
51         Fixed bug un Linux version where HTML macros didn't work correctly in
52         PHTTPService applications.
54         Improved PString sprintf functions so no longer limited to 1000 characters.
56         Fixed bug in unix version where subsequent config file opening uses first
57         opened filename.
59         Changed PConfig to allow writing of config files whilst config file is open.
61         Changed unix config file code to allow writing of config files whilst
62         config file is open.
64         Fixed problem in unix thrading where thread that uses PThread::Current()
65         in destructor crashes.
67         Various fixes for Motif and Qt build.
69         Various fixes for BeOS build.
71         Various fixes for BSD build.
74 Release 1.1pl18
75 ------------
76         Added ability to change the persistent connection parameters (timeout
77         etc) in HTTP server class.
79         Fixed bug in HTTP form updating SELECT fields from registry.
81         Fixed OpenSSL support so can operate as a server channel.
83         SSL channel changes, added error functions, removed need to have
84         openssl include directory in app.
86         Added mechanism by which a service can get at new HTTP connections, 
87         eg to add SSL.
89         Fixed resize of multi-line edit box windows, again.
91         Fixed problem with no control value update if press "Enter" to close dialog.
93         Added ability to have multiple lines with the same key in PConfig.
95         Removed assert for empty key name so can set registry default key for 
96         a section.
98         Removed PAssert with registry access denied error, changed to PTRACE.
100         Fixed subtle difference between Unix and Win32 section names (ignore 
101         trailing backslash) in PConfig files.
103         Fixed silly mistake in runtime_malloc() function, should return a 
104         pointer!
106         Improved multithreaded reliability of the timers under stress.
108         Fixed problem with no new lines in trace output to stderr.
110         Added Windows 2000 to operating system reporting.
112         Fixed problem with bothnoshared target in makefile
115 Release 1.1pl17
116 ------------
117         AIX port, thanks Wolfgang Platzer (wolfgang.platzer@infonova.at).
119         Start of Nucleus++ port.
121         Fixed bug in setting current value of options in select form fields.
123         Added ability to get at the PTraceStream without timestamps etc, 
124         use UINT_MAX trace level.
126         Added more guards for NULL PStrings in PConfigArg handling.
128         Removed some warnings on compiling colour icons in PWRC.
130         Fixed problems in decompile of .ICO file with multiple icons in PWRC.
132         Added ability to append resources to existing file in PWRC.
134         Fixed bug that causes crash when gettng cursor/selection position in
135         a PEditBox.
137         Added flags for controlling file sharing.
139         Added start of video I/O abstraction classes.
140         
141         Added runtime_malloc() function for cases where memory check code must
142         be bypassed.
144         Fixed bug when PWaveFormat is assigned to itself.
146         Fixed shutdown issues with buffers in use in PSoundChannel.
148         Fixed potential race condition in OSS initialise (Unix sound).
150         Fixed BSD compatibility for OSS sound usage.
153 Release 1.1pl16
154 ------------
155         Added PConfigArgs class so can save program arguments to config files.
157         Removed static global ojects that require construction as they cause
158         phantom memory leaks when using the GNU compiler.
160         Added microseconds to string output of PTime.
162         Added strcasecmp macro, BSDish version of stricmp.
164         Added mutex to PSoundChannel buffer structure to avoid rare but quite
165         possible multi-threading crashes.
167         Added tcp.h to get TCP_NODELAY for setsockopt call to pmachdep.h.
169         Fixed missing default on PTopLevelWindow::Show() function.
171         Fixed support for older FreeBSD (location of sysctrl program).
173         Added variables for standard programs ar and ranlib, plus making the
174         use of ranlib optional according to another variable.
176         Fixed bug in restarting free running timers, would not always happen.
178         Fixed problem with stream output width in PTimeInterval.
180         Fixed uninitialised microseconds on some PTime constructors.
182         Added display of thread name in SystemLog.
184         Fixed problem where lastReadCount was not zeroed if no read occurred
185         in a PChannel.
187         Added OSS unix implementation for PlayFile command.
189         Fixed race condition causing asserts in ballon help.
191         Added directory search path argument for external DEF files in 
192         MergeSym. This allows correct building of DLLs that use ptlib.dll.
194         Fixed bug for symbols in external DEF file actively removed from 
195         merged DEF file in MergeSym.
197         Fixed production error for ValueSet in asn parser.
200 Release 1.1pl15
201 ------------
202         Added option to rename imported module names in ASN parser, allows
203         generated code #include filename matching to what would be generated
204         elsewhere by the applications make system.
206         Added ability to remove optional field in ASN sequence.
208         Added simple static play functions for sound files.
210         Added constructor to do PString conversion to PTimeInterval parsing
211         the string as for stream I/O.
213         Added microseconds field to PTime class.
215         Added parameter so get/setsockopt can have other levels to SOL_SOCKET.
217         Fixed error in check for SIOCGHWADDR define. Caused compile errors on
218         Solaris 2.6 systems (but not 2.5 or 2.7!)
220         Fixed problem with connect() call not timing out according to the
221         readTimeout value of the channel.
223         Removed ptclib/proto directory. Its purpose was lost in time and causes
224         more problems now than it is worth.
226         Added named threads to tracing function.
228         Fixed handling of NULL pointer on current thread in PTRACE output.
230         Fixed infinite recursion on PProcess::Current() = NULL assertion.
232         Added function to determine if PProcess instance has been initialised
233         yet for use by static objects etc.
235         Fixed problem with asserts generating continuous output when input is 
236         redirected and especially when EOF is read.
238         Added the ability to get a stack dump on assert on unix systems by
239         calling gdb on the fly.
241         Changes to build system to make GUI selection under Unix systems
242         easier.
244         Changed DEBUG build to always be static libraries, an opt build will
245         use the shared libraries.
247         Add support for OpenBSD.
249         Some BeOS port changes.
251         Some VxWorks port changes, still not complete.
253         Add some Mac OS X port changes, still not complete.
255         Add support for NetBSD.
257 Release 1.14
258 ------------
259         Added new improved random number generator. Mainly due to discovered
260         inadaquacies in the MSVC run time version of rand().
262         Added support for producing shared libraries.
264         Added optimisation to array comparisons if referencing same array.
266         Fixed problem with changing size of referenced objects, reference needed
267         to be broken and wasn't invalidating other references causing crashes.
269         Updated OpenSSL support.
271         Improved FreeBSD support (later versions, OSS sound etc).
273         Fixed some minor BeOS issues.
275         Added support for power PC Linux variant.
277         Fixed ASN PER encoder boundary condition error for constrained integer 
278         encoding (values 1, 256 etc).
280         Fixed ASN parsing of multiple IMPORTS and OID's in IMPORTS section.
284 Release 1.13
285 ------------
286         Fixed alignment problem in debug memory check code (especially with
287         sparc architecture).
289         Fixed problem in timers startup condition in short duration (< 10 second)
290         timers, timing out immediately.
292         Improved some of the documentation especially the root web page.
295 Release 1.12
296 ------------
297         Made static form of ConvertOSError public scope.
299         Added override of new functions for MSVC memory check code.
301         Added functions to get current trace options and level.
303         Fixed display of decimals in milliseconds when precision other than 3.
305         Fixed problem, assuring millisecond accuracy in timestamp of trace
306         output.
308         Improved portability of copy from host_info struct to IP address.
310         Created PCustomListBox to allow native Motif code PStringListBox
311         implementation.
313         Fixed problem with PSemaphore::Wait consuming 100% CPU under unix.
315         Changed semaphore.h inclusion to be dependent upon P_HAS_SEMAPHORE
316         under unix.
318         Added pipe to thread to allow asynchronous abort of socket operations
319         under unix.
321         Added define to only include semaphore libraries on Linux platform
323         Changed semantics of OnClose() to be the same as PTitledWindow in Win32.
325         Fixed problems with creating/deleting dialogs from background threads in
326         Win32.
328         Fixed possible crash accessing IP addresses from SNMP tables in Win32.
330         Fixed bug in GetErrorText() occasionally returning incorrect empty
331         string in Win32.
333         Fixed bug in SetDimensions() to allow for a window with a menu in Win32.
335         Added missing GetLength function for PComboBoxes in Win32.
338 Release 1.11
339 ------------
340         Fixed error display for sound channels.
342         Added Windows version of PIPSocket::GetInterfaceTable() function.
344         Changed PTRACE so will output to system log in PServiceProcess 
345         applications.
347         Fixed name space problem with PSYSTEMLOG() macro.
349         Allowed some Win32 only access to custom wave format in sound channel.
351         Changed PSemaphore to use Posix semaphores.
353         ASN Parser: Optimised CreateObject() switch statements, collapsing 
354         common cases.
356         ASN Parser: Fixed failure to put "using namespace" in every 
357         generated .cxx file.
360 Release 1.10
361 ------------
362         Fixed usage of inlines in optimised version. Was not inlined.
364         Added ASN compiler #defines for backward support of pre GCC 2.9
365         compilers.
367         Added ASN compiler #defines to reduce its memory footprint.
369         Added comparison operation to base ASN classes and compiled ASN
370         code.
372         Added support for ANY type in ASN parser.
374         Fixed anomaly to always include non-optional extensions in
375         PER encodings of the ASN parser generated code.
377         Fixed ASN PER encoding problems for large integer values.
379         Fixed incorrect encoding of unknown extensions in ASN PER.
381         Fixed incorrect size of ASN PER OID if zero length encoded.
383         Added ability to get the host/port of the the last packet
384         read/written to UDP socket.
386         Added ability to listen to specific interfaces for IP sockets.
388         Added operator>> for PIPSocket::Address class.
390         Fixed problem with creating windows in background threads, not
391         happening until have a message sent.
393         Fixed problem with calling modal dialog from a background thread.
395         Fixed problem with GUI menu item stopping working on calling
396         SetString().
398         Changes to aid in breaking I/O locks on thread termination. Still
399         needs more work especially in BSD!
401         Fixed problem with destroying PMutex that is already locked.
403         Fixed termination hang up problem with memory check code under unix
404         pthreads.
406         Added mutex in memory check detection code.
408         Added missing operator on smart pointer to return the pointer!
409         Cleaned up the smart pointer code (macros).
411         Added concatenation function to "base type" arrays.
413         Added "NoWin" option to prevent display of window in command
414         line commands of "Service Process" applications.
416         Added audio loopback psuedo-device (thanks Philip Edelbrock)
418         Fixed bug in display of PTimeIntervals larger than 24 hours.
420         Added missing unix paths include (esp. for VARRUN in svcproc)
422         Added support for libc5 and libc6 compiles under Linux (libc6
423         uses pthreads).
425         Fixed problem with EINTR causing sound channel reads and write
426         to fail, thanks to phil@netroedge.com!
429 Release 1.09
430 ------------
432         Fixed bug when assigning negative number to a cosntrained
433         PASN_Integer.
435         Fixed bug in encoding/decoding OID greater than 2.39 in PER and
436         BER ASN.
438         Changed PASN_Choice cast operators in ASN generated code so no
439         longer "break" const-ness of object.
441         Fixed bug in encoding sequence of constrained primitive type in
442         ASN generated code, constraint not set.
444         Fixed bug in not emitting namespace use clause in ASN generated code.
446         Added "normalisation" of separate sequence of <base type> to be
447         single class in ASN generated code.
449         Fixed some 64 bit compatibility issues.
451         Fixed being able to cast an unsigned to a PTimeInterval.
453         Improved resolution of PTimer::Tick() to be millisecond accurate.
455         Rewite to compensate for linux OSS sensitivity to ioctl order.
456         Added code to allow full duplex audio.
458         Fixed build problems with not including oss.cxx in library if
459         OSTYPE not "linux"
461         Fixed bug in PFile::Copy, does not write last chunk of data to
462         new file.
464         Fixed bug when breaking block by closing the PSoundChannel in
465         other thread.
467         Fixed bug in PThread::IsSuspended(), returned exactly the
468         opposite state!
470         Fixed bug in PFilePath::SetType finding dots outside of file
471         name in path.
473         Portability issues, especially n BeOS (thanks Yuri!)
476 Release 1.08
477 ------------
479         Fixed bug causing crashes on pass through of unknown extensions in
480         PER encoding.
482         Fixed race condition on indirect channel close, mutex needed in
483         PIndirectChannel.
485         Fixed core dump problem with SIGINT/SIGTERM terminating process.
487         Fixed bug in not returning correct default recorder (waveIn) device
488         under MS Windows.
490 Release 1.07
491 ------------
493         Improved tracing yet again. Now has options for adding timestamps,
494         thread ID etc to the trace output as well as the file/line number.
496         Fixed bug in the output code in ASN compiler for string constraints
497         under PER. They were not being set on the correct object causing
498         decode failures (usually via assert).
500         Added PConsoleChannel class to allow access to stdin/stdout/stderr
501         as a PWLib channel. Primarily this is for allow read from stdin to
502         not block the cooperative multithreading.
504         Fixed bug in printing PTimeInterval objects, would leave fll char
505         set to '0'. Also ignored stream width parameter.
508 Release 1.06
509 ------------
511         Added better User Interface to make files.
513         Major ASN Parser enhancements for parameterised types etc.
515         Fixed problems with decoding of extensions (signed/unsigned bug) 
516         in ASN PER.
518         Fixed date parsing to be forgiving of rubbish at end of date string.
519         Fixed problem with not stopping date parse at end of line.
520         Fixed PTime::GetHour() etc to not crash on time=-1.
522         Fixed ugly little bug in the cooperative multithreading that meant 
523         that threads blocked on timers didn't always get rescheduled.
525         Changed channel output flush to remove double Write() call. This caused
526         problems on TCP/IP stuff getting a packet for the first byte and then
527         another pacet for the rest of the buffer.
529         Added retries to DNS lookup if get temporary error.
531         Fixed race condition in doing Select() on closed sockets. Could go 
532         into infinite wait.
534         Added ability to open file as standard input, output and error streams.
536         Added function to get default audio device.
538         Added initialisers to string containers (list, sorted list and set).
541 Release 1.05
542 ------------
544         Changed build to allow for 64 bit processors (Alpha port).
546         Minor changes to support egcs compiler.
548         Added SIGHUP and SIGWINCH handlers to increase and decrease the log
549         level respectively in a service (daemon) application.
551 Release 1.04
552 ------------
554         Large numbers of changes to support automated documentation system
555         doc++.
557         Utilised full grammar parsing for dates.
559         Simultaneous MSVC 6 and MSVC 5 compatibility.
561         Improved trace facility adding trace levels and #define to remove all
562         trace code.
564         Various BeOS port modifications.
566         Fixed bug in IP access control lists compatibility with unix
567         hosts.allow and hosts.deny files.
569         Added support for UDP in SOCKS 5 classes.
571         Added [] operator PIPSocket::Address to get the bytes out of an IP
572         address.
574         Fixed ability to have PMEMORY_CHECK on/off on both debug/release
575         versions.
577         Sound driver interface implementation to Linux OSS specification.
580 Release 1.03
581 ------------
583 Very slack in not producing histories for earlier versions.
585 ------------------------------------------------------------------------------