POCO C++ Libraries Release Notes
AAAIntroduction

!!!Release 1.4.6p4

!!Summary of Changes

  - no longer use reverse DNS lookups for cert hostname validation
  - cert hostname validation is case insensitive and more strict
  - HTMLForm: in URL encoding, percent-encode more special characters
  - fixed thread priority issues on POSIX platforms with non-standard scheduling policy
  - XMLWriter no longer escapes apostrophe character
  - fixed GH# 316: Poco::DateTimeFormatter::append() gives wrong result for Poco::LocalDateTime
  - fixed GH# 305 (memcpy in Poco::Buffer uses wrong size if type != char)
  - Zip: fixed a crash caused by an I/O error (e.g., full disk) while creating a Zip archive


!!!Release 1.4.6p3

!!Summary of Changes

  - Fixed a potential security vulnerability in client-side X509
    certificate verification.


!!!Release 1.4.6p2

!!Summary of Changes

  - fixed GH #156: Possible buffer overrun in Foundation/EventLogChannel
  - XML: fixed an issue with parsing a memory buffer > 2 GB
  - upgraded to expat 2.1.0
  - Data/ODBC: added support for setting query timeout (via setProperty
    of "queryTimeout"). Timeout is int, given in seconds.
  - fixed a potential endless loop in SecureStreamSocketImpl::sendBytes() 
    and also removed unnecessary code.
  - fixed GH #159: Crash in openssl CRYPTO_thread_id() after library libPocoCrypto.so 
    has been unloaded.
  - fixed GH #155: MailOutputStream mangles consecutive newline sequences 
  - fixed GH# 139: FileChannel::PROP_FLUSH is invalid (contains a tab character)
  - fixed GH# 173: HTTPClientSession::proxyConnect forces DNS lookup of host names
  - fixed GH# 194: MessageNotification constructor is inefficient.
  - fixed GH# 189: Poco::NumberParser::tryParse() documentation bug
  - fixed GH# 172: IPv6 Host field is stripped of Brackets in HTTPClientSession
  - fixed GH# 188: Net: SocketAddress operator < unusable for std::map key
  - fixed GH# 128: DOMWriter incorrectly adds SYSTEM keyword to DTD if PUBLIC is 
    already specified
  - fixed GH# 65: Poco::format() misorders sign and padding specifiers
  - upgraded bundled SQLite to 3.7.17
  - upgraded bundled zlib to 1.2.8
  - fixed a potential memory leak in Poco::Net::HTTPClientSession if it is misused 
    (e.g., sendRequest() is sent two times in a row without an intermediate call to 
    receiveResponse(), or by calling receiveResponse() two times in a row without 
    an intermediate call to sendRequest()) - GH #217
  - removed a few unnecessary protected accessor methods from Poco::Net::HTTPClientSession 
    that would provide inappropriate access to internal state
  - fixed GH# 223 (Poco::Net::HTTPCookie does not support expiry times in the past)
  - fixed GH# 233: ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only) 
    does not work
  - added ColorConsoleChannel and WindowsColorConsoleChannel classes supporting
    colorizing log messages
  - fixed GH# 259: Poco::EventLogChannel fails to find 64bit Poco Foundation dll
  - fixed GH# 254: UTF8::icompare unexpected behavior
  - Poco::UUID::tryParse() also accepts UUIDs without hyphens. Also updated documentation
    (links to specifications).
  - Added support for ARM64 architecture and iPhone 5s 64-bit builds
    (POCO_TARGET_OSARCH=arm64).


!!!Release 1.4.6p1

!!Summary of Changes

  - fixed GH# 71: WebSocket and broken Timeouts (POCO_BROKEN_TIMEOUTS)
  - fixed an ambiguity error with VC++ 2010 in Data/MySQL testsuite
  - Poco::Net::NetworkInterface now provides the interface index even for IPv4
  - added DNS::reload() as a wrapper for res_init().
  - On Linux, Poco::Environment::nodeId() first always tries to obtain the
    MAC address of eth0, before looking for other interfaces.
  - Poco::Net::HTTPSession now always resets the buffer in connect() to clear 
    any leftover data from a (failed) previous session
  - fixed copysign namespace issue in FPEnvironment_DUMMY.h
  - fixed a warning in Poco/Crypto/OpenSSLInitializer.h
  - added a build configuration for BeagleBoard/Angstrom
  - fixed GH# 109: Bug in Poco::Net::SMTPClientSession::loginUsingPlain) 
  - fixed compile errors with clang -std=c++11
  - fixed GH# 116: Wrong timezone parsing in DateTimeParse (fix by Matej Knopp)
  - updated bundled SQLite to 3.7.15.2
  

!!!Release 1.4.6

!!Summary of Changes

  - changed FPEnvironment_DUMMY.h to include <cmath> instead of <math.h>
  - updated bundled SQLite to 3.7.15.1
  - fixed GH# 30: Poco::Path::home() throws
  - fixed SF Patch# 120: The ExpireLRUCache does not compile with a tuple as key on VS2010
  - fixed SF# 603: count() is missing in HashMap
  - Crypto and NetSSL_OpenSSL project files now use OpenSSL *MD.lib library files for 
    static_md builds. Previously, the DLL import libs were used.
  - Poco::Environment::osDisplayName() now recognizes Windows 8/Server 2012


!!!Release 1.4.5

!!Summary of Changes

  - added Visual Studio 2012 project files
  - buildwin.cmd now support building with msbuild for VS2010 and 2012.
  - added Poco::Optional class
  - fixed SF# 3558012 Compilation fails when building with -ansi or -std=c++0x
  - fixed SF# 3563517 Get rid of loss-of-precision warnings on x64 MacOS
  - fixed SF# 3562244: Portability fix for AF_LINK
  - fixed SF# 3562400: DatagramSocketImpl comment 
  - fixed SF# 594: Websocket fails with small masked payloads
  - fixed SF# 588: Missing POCO_ARCH and POCO_ARCH_LITTLE_ENDIAN define for WinCE on SH4
  - fixed SF# 581: Out-of-bound array access in Unicode::properties() function.
  - fixed SF# 590: Segfault on FreeBSD when stack size not rounded
  - fixed SF# 586: Poco::DateTimeParser and ISO8601 issues when seconds fraction has more than 6 digits
  - Poco::Net::HTTPSSessionInstantiator::registerInstantiator() now optionally accepts a 
    Poco::Net::Context object.
  - added Poco::XML::XMLWriter::depth() member function.
  - added Poco::XML::XMLWriter::uniquePrefix() and Poco::XML::XMLWriter::isNamespaceMapped().
  - Poco::FileChannel now supports a new rotateOnOpen property (true/false) which can be used
    to force rotation of the log file when it's opened.
  - fixed a bug in Poco::XML::XMLWriter::emptyElement(): need to pop namespace context
  - OS X builds now use Clang as default compiler
  - Updated SQLite to 3.7.14.1
  - POCO_SERVER_MAIN macro now has a try ... catch block for Poco::Exception and writes 
    the displayText to stderr.
  - Poco/Platform.h now defines POCO_LOCAL_STATIC_INIT_IS_THREADSAFE macro if the compiler
    generates thread-safe static local initialization code.


!!!Release 1.4.4

!!Summary of Changes

  - ZipStream now builds correctly in unbundled build.
  - added proxy digest authentication support to Net library
  - integrated MySQL BLOB fixes from Franky Braem.
  - use standard OpenSSL import libraries (libeay32.lib, ssleay32.lib) for Crypto and 
    NetSSL_OpenSSL Visual Studio project files.
  - fixed a potential buffer corruption issue in Poco::Net::SecureStreamSocket if lazy 
    handshake is enabled and the first attempt to complete the handshake fails
  - Poco::DateTimeParser::tryParse() without format specifier now correctly parses ISO8601 
    date/times with fractional seconds.
  - Poco::Process::launch() now has additional overloads allowing to specify an initial 
    directory and/or environment.
  - Poco::Net::FTPClientSession: timeout was not applied to data connection, only to 
    control connection.
  - Fixed potential IPv6 issue with socket constructors if IPv6 SocketAddress is given 
    (contributed by Алексей Миловидов <milovidov@yandex-team.ru>).
  - Added an additional (optional) parameter to Poco::Thread::setOSPriority() allowing to 
    specify a scheduling policy. Currently this is only used on POSIX platforms and allows 
    specifying SCHED_OTHER (default), SCHED_FIFO or SCHED_RR, as well as other 
    platform-specific policy values.
  - Added Poco::Crypto::DigestEngine class providing a Poco::DigestEngine interface to
    the digest algorithms provided by OpenSSL.
  - Fixed some potential compiler warnings in Crypto library
  - In some cases, when an SSL exception was unexpectedly closed, a generic Poco::IOException
    was thrown. This was fixed to throw a SSLConnectionUnexpectedlyClosedException instead.
  - Added Poco::ObjectPool class template.
  - Poco::Net::HTTPServer has a new stopAll() method allowing stopping/aborting of all 
    currently active client connections.
  - The HTTP server framework now actively prevents sending a message body in the
    response to a HEAD request, or in case of a 204 No Content or 304 Not Modified
    response status.
  - fixed a DOM parser performance bug (patch by Peter Klotz)
  - updated iOS build configuration to use xcode-select for finding toolchain
  - Poco::Net::SecureSocketImpl::shutdown() now also shuts down the underlying socket.
  - fixed SF# 3552597: Crypto  des-ecb error
  - fixed SF# 3550553: SecureSocketImpl::connect hangs
  - fixed SF# 3543047: Poco::Timer bug for long startInterval/periodic interval 
  - fixed SF# 3539695: Thread attributes should be destroyed using the pthread_attr_destroy() 
  - fixed SF# 3532311: Not able to set socket option on ServerSocket before bind
    Added Poco::Net::Socket::init(int af) which can be used to explicitely
    initialize the underlying socket before calling bind(), connect(), etc.
  - fixed SF# 3521347: Typo in UnWindows.h undef
  - fixed SF# 3519474: WinRegistryConfiguration bug
    Also added tests and fixed another potential issue with an empty root path passed to the constructor.
  - fixed SF# 3516827: wrong return value of WinRegistryKey::exists()
  - fixed SF# 3515284: RSA publickey format(X.509 SubjectPublicKeyInfo)
  - fixed SF# 3503267: VxWorks OS prio is not set in standard constructor
  - fixed SF# 3500438: HTTPResponse failure when reason is empty
  - fixed SF# 3495656: numberformater, numberparser error in mingw
  - fixed SF# 3496493: Reference counting broken in TaskManager postNotification
  - fixed SF# 3483174: LogFile flushing behavior on Windows
    Flushing is now configurable for FileChannel and SimpleFileChannel
    using the "flush" property (true or false).
  - fixed SF# 3479561: Subsequent IPs on a NIC is not enumerated
  - fixed SF# 3478665: Permission checks in Poco::File not correct for root
  - fixed SF# 3475050: Threading bug in initializeNetwork() on Windows
  - fixed SF# 3552680: websocket small frames bug and proposed fix
  - fixed a WebSocket interop issue with Firefox
  - added Poco::Net::MessageHeader::hasToken()
  - Poco::AtomicCounter now uses GCC 4.3 builtin atomics on more platforms
  - fixed SF# 3555938: NetSSL: socket closed twice
  - socket exceptions now include OS error code
  - fixed SF# 3556975: Need to fix Shared Memory for memory map
  - Poco::Net::SecureSocketImpl::close() now catches exceptions thrown by its call to shutdown().
  - fixed SF# 3535990: POCO_HAVE_IPv6 without POCO_WIN32_UTF8 conflict
  - fixed SF# 3559665: Poco::InflatingInputStream may not always inflate completely
  - added Poco::DirectoryWatcher class
  - fixed SF# 3561464: Poco::File::isDevice() can throw due to sharing violation
  - Poco::Zip::Compress::addRecursive() has a second variant that allows to specify the compression method.
  - Upgraded internal SQLite to 3.7.14


!!!Release 1.4.3p1

!!Summary of Changes

  - fixed SF# 3476926: RegDeleteKeyEx not available on Windows XP 32-bit.


!!!Release 1.4.3

!!Summary of Changes

  - fixed a compilation error with Data/MySQL on QNX.
  - fixed Util project files for WinCE (removed sources not compileable on CE)
  - removed MD2 license text from Ackowledgements document
  - fixed iPhone build config for Xcode 4.2 (compiler name changed to llvm-g++)
  - Poco::Util::XMLConfiguration: delimiter char (default '.') is now configurable.
    This allows for working with XML documents having element names with '.' in them.
  - Poco::Util::OptionProcessor: Required option arguments can now be specified as 
    separate command line arguments, as in "--option value" in addition to the 
    "--option=value" format.
  - Poco::Util::HelpFormatter: improved option help formatting if  indentation has 
    been set explicitely.
  - added Mail sample to NetSSL_OpenSSL, showing use of Poco::Net::SecureSMTPClientSession.
  - added additional read() overloads to Poco::Net::HTMLForm.
  - fixed SF# 3440769: Poco::Net::HTTPResponse doesn't like Amazon EC2 cookies.
  - added support for requiring TLSv1 to Poco::Net::Context.
  - added an additional constructor to Poco::Net::HTTPBasicCredentials, allowing
    the object to be created from a string containing a base64-encoded, colon-separated
    username and password.
  - Poco::Zip::ZipStreamBuf: fixed a crash if CM_STORE was used.
  - Added setContentLength64() and getContentLength64() to Poco::Net::HTTPMessage.
  - added Poco::Environment::osDisplayName().
  - fixed SF# 3463096: WinService leaves dangling handles (open() now does not reopen the 
    service handle if it's already open)
  - fixed SF# 3426537: WinRegistryConfiguration can't read virtualized keys
  - added Poco::Buffer::resize()
  - fixed SF# 3441822: thread safety issue in Poco::Net::HTTPClientSession:
    always use getaddrinfo() instead of gethostbyname() on all platforms supporting it
  - added version resource to POCO DLLs
  - fixed SF# 3440599: Dir Path in Quotes in PATH cause PathTest::testFind to fail.
  - fixed SF# 3406030: Poco::Glob::collect() problem
  - added Poco::Util::AbstractConfiguration::enableEvents() 
  - Poco::AtomicCounter now uses GCC builtins with GCC 4.1 or newer 
    (contributed by Alexey Milovidov)
  - made Poco::Logger::formatDump() public as it may be useful for others as well
    (SF# 3453446)
  - Poco::Net::DialogSocket now has a proper copy constructor (SF# 3414602)
  - Poco::Net::MessageHeader and Poco::Net::HTMLForm now limit the maximum number of
    fields parsed from a message to prevent certain kinds of denial-of-service
    attacks. The field limit can be changed with the new method setFieldLimit().
    The default limit is 100.
  - Poco::NumberFormatter, Poco::NumberParser and Poco::format() now always use the
    classic ("C") locale to format and parse floating-point numbers.
  - added Poco::StreamCopier::copyStream64(), Poco::StreamCopier::copyStreamUnbuffered64()
    and Poco::StreamCopier::copyToString64(). These functions use a 64-bit integer
    to count the number of bytes copied.
  - upgraded internal zlib to 1.2.5
  - upgraded internal sqlite to 3.7.9
  - XML: integrated bugfix for Expat bug# 2958794 (memory leak in poolGrow)
  - Added support for HTTP Digest authentication (based on a contribution by
    Anton V. Yabchinskiy (arn at bestmx dot ru)). For information on how
    to use this, see the Poco::Net::HTTPCredentials, Poco::Net::HTTPDigestCredentials
    and Poco::Net::HTTPAuthenticationParams classes.
  - Poco::Net::HTTPStreamFactory and Poco::Net::HTTPSStreamFactory now support Basic
    and Digest authentication. Username and password must be provided in the URI.
  - added Poco::Net::WebSocket, supporting the WebSocket protocol as described in RFC 6455
  - NetSSL_OpenSSL: added client-side support for Server Name Indication.
    Poco::Net::SecureSocketImpl::connectSSL() now calls SSL_set_tlsext_host_name()
    if its available (OpenSSL 9.8.6f and later).
  - added Poco::Net::HTTPClientSession::proxyConnect() (factored out from
    Poco::Net::HTTPSClientSession::connect())
  - added Poco::Process::kill(const Poco::ProcessHandle&) which is preferable to
    kill(pid) on Windows, as process IDs on Windows may be reused.
  - fixed SF# 3471463: Compiler warnings with -Wformat
  - Poco::Util::Application::run() now catches and logs exceptions thrown in initialize()
  - Fixed a WinCE-specific bug in Poco::Util::ServerApplication where uninitialize() would
    be called twice.
  - fixed SF# 3471957: WinRegistryKey::deleteKey() unable to delete alt views
  - Added additional constructor to Poco::ScopedLock and Poco::ScopedLockWithUnlock 
    accepting a timeout as second argument.
  - Added Poco::Logger::parseLevel()
  - Poco::format(): an argument that does not match the format
    specifier no longer results in a BadCastException. The string [ERRFMT] is 
    written to the result string instead.


!!!Release 1.4.2p1

!!Summary of Changes

  - On Linux, the RTLD_DEEPBIND option is no longer passed to dlopen(). 
    This change was introduced in 1.4.2 to solve a specific problem one customer 
    was having. Unfortunately, it leads to problems with RTTI.
  - It's now possible to pass flags (SHLIB_GLOBAL, SHLIB_LOCAL) to 
    Poco::SharedLibrary::load() (and the constructor implicitly calling load()), 
    controlling the mode flags (RTLD_GLOBAL, RTLD_LOCAL) passed to dlopen(). 
    On platforms not using dlopen(), these flags are ignored.
  - fixed SF# 3400267: Path_WIN32.cpp bug


!!!Release 1.4.2

!!Summary of Changes

  - added Poco::DateTimeFormat::ISO8601_FRAC_FORMAT
  - added new Poco::DateTimeFormatter and Poco::DateTimeParser format specifier:
    %s for seconds with optional fractions of a second
  - fixed a problem with ioctl() on BSD platforms (including OS X) where the 
    second argument to ioctl() is unsigned long instead of int, causing bad 
    things on a OS X 64-bit kernel.
  - fixed a potential endless loop when enumerating IPv6 network addresses 
    (reported by Laurent Carcagno)
  - new compile-time config option on Windows to set thread names in
    debugger. Enable with -DPOCO_WIN32_DEBUGGER_THREAD_NAMES. Available
    only in debug builds.
  - Cipher can now create Base64 and HexBinary encoded output without linefeeds 
    (suitable for use in cookies, etc.)
  - added Poco::Path::popFrontDirectory()
  - improved VxWorks support
  - IPv6 fixes: added proper scope id handling in IPAddress, SocketAddress
    and related classes.
  - Added Poco::Net::ServerSocket::bind6() which allows control over the
    IPPROTO_IPV6/IPV6_V6ONLY socket option.
  - Removed Poco::MD2Engine class due to licensing issues (the 
    license for the MD2 code from RSA only allows non-commercial
    use). Note that the MD4 and MD5 code from RSA does not have
    this issue.
  - fixed a Net HTTP client testsuite issue where some tests might
    have failed due to prematurely aborted connections by
    the HTTPTestServer.
  - Poco::Net::SocketAddress: when there is more than one address
    returned by a DNS lookup for a name, IPv4 addresses will be
    preferred to IPv6 ones.
  - Poco::Net::NetworkInterface::list() now also returns IPv4 interfaces on Windows when 
    built with -DPOCO_HAVE_IPv6
  - Poco::XML::XMLWriter: fixed a bug with attribute namespaces (no namespace prefix 
    written if attribute namespace is the same as element namespace)
  - fixed SF# 3378588: Mismatched new[]/delete (in RSAEncryptImpl and RSADecryptImpl)
  - fixed SF# 3212954 (OpenSSLInitializer::uninitialize() crash) and 
    SF# 3196862 (Static OpenSSLInitializer instance causes Windows deadlocks) by
    removing the static Poco::Crypto::OpenSSLInitializer instance. Automatic OpenSSL
    initialization is now done through Poco::Crypto::Cipher, Poco::Crypto::CipherKey, 
    Poco::Crypto::X509Certificate, Poco::Net::Context classes; however, it is still
    recommended to call Poco::Crypto::initializeCrypto() and 
    Poco::Crypto::uninitializeCrypto() early at application startup, and late at
    shutdown respectively (or Poco::Net::initializeSSL()/Poco::Net::uninitializeSSL()
    if the NetSSL library is used) to avoid multiple full OpenSSL init/uninit cycles
    during application runtime.
  - Poco::Logger now also support a symbolic log level "none"
    (for use with setLevel()) that disables logging completely
    for that Logger (equivalent to setLevel(0)).
  - Added experimental Android support, using the existing gmake-based
    build system.
  - fixed SF# 3288584: DateTimeFormatter link error
  - fixed SF# 3187117: Typo in InflatingInputStream doc
  - fixed SF# 3309731: _WIN32_WCE comparison should be with 0x600 not 600
  - fixed SF# 3393026: RegularExpression.h identical enum value
  - fixed SF# 3274222: AtomicCounter's postfix operators aren't atomic on Windows
  - fixed SF# 3317177: Handle leak on windows
  - fixed SF# 3181882: Poco::URI::getPathEtc() double-encodes query
  - fixed SF# 3379935: Poco::ThreadPool Start Bug
  - fixed SF# 3354451: Poco::Format::parsePrec() never sets the precision to zero
  - fixed SF# 3387258: _MAX_PATH used but unknown in Path_WIN32
  - fixed a problem in Poco::Crypto::RSAKeyImpl where direct access to the RSA in a 
    EVP_PKEY would no longer work in recent OpenSSL versions. Using EVP_PKEY_get1_RSA() 
    fixes the issue.
  - added Poco::Crypto::EncryptingInputStream, Poco::Crypto::EncryptingOutputStream, 
    Poco::Crypto::DecryptingInputStream and Poco::Crypto::DecryptingOutputStream.
  - fixed SF# 3148126: Poco::Net::HTTPSClientSession destructor throws an IOException
  - fixed SF# 3178098: Add constructor to Poco::TemporaryFile to specify directory
  - fixed SF# 3175310: Absolute path when device 
  - fixed SF# 3301207: Guided tour example contradicts apidoc (API doc was wrong)
  - Poco::Net::HTTPMessage::setContentLength() and Poco::Net::HTTPMessage::getContentLength() now
    use std::streamsize instead of int. This enables 64-bit Content-Length support at least
    on 64-bit platforms.
  - fixed SF# 3177530: Poco::TemporaryFile::tempName() + glob bug on xp
  - fixed SF# 3177372: Poco::FileChannel documentation inconsistency
  - added %E format specifier to Poco::PattermFormatter (epoch time in seconds
    since midnight, January 1 1970)
  - On Windows, Poco::Util::ServerApplication now supports a /description command 
    line argument for specifying a service description (together with /registerService)
  - added Poco::Util::WinService::setDescription() and 
    Poco::Util::WinService::getDescription()
  - fixed SF# 3155477: Incorrect URI path handling
  - fixed SF# 3309736: Extended Exception macros to set default exception code
    new macro is named POCO_DECLARE_EXCEPTION_CODE
  - added getter functions for modulus and exponents to Poco::Crypto::RSAKey.
  - added Poco::Net::SocketAddress::operator == () and 
    Poco::Net::SocketAddress::operator != ()
  - fixed SF# 3182746: IPAddress.cpp IPv6 bug on big-endian
  - fixed SF# 3196961: Unix daemon fails to loadConfiguration() if started from cwd
  - fixed SF# 3393700: NotificationCenter may call a removed observer and crash.
  - Reworked implementation of the events framework (Poco::BasicEvent and friends).
    The framework is now completely multithreading save (even in the case that
    an event subscriber object unsubscribes and is deleted while an event is
    being dispatched). Also, the restriction that any object can only register
    one delegate for each event has been removed. For most cases, dispatching
    events should be faster, as dispatching an event now needs less dynamic memory
    allocations.
  - fixed SF# 3178109: getNodeByPath() changes:
    getNodeByPath() and getNodeByPathNS() have been moved to Poco::XML::Node. 
    Furthermore, when invoked on a Poco::XML::Document, the behavior has changed
    so that the document element is now included when traversing the path (previously,
    traversal would start at the document element, now it starts at the document).
    The path expression can now start with a double-slash, which results in a recursive
    search for the path's first element in the DOM tree.
  - fixed SF# 3382935: String data being truncated using ODBC, and
    SF# 2921813: Wrong implementation of the ODBC string binding


!!!Release 1.4.1p1

!!Summary of Changes

  - Poco::Mutex is now a recursive mutex again on Linux
    (this was caused by an unfortunate feature test for
    PTHREAD_MUTEX_RECURSIVE which did not work on Linux
    as PTHREAD_MUTEX_RECURSIVE is an enum value and not
    a macro)
  - Poco::Net::SecureSocketImpl::abort() now only shuts
    down the underlying socket connection and does not free
    the SSL object, due to multithreading issues.


!!!Release 1.4.1

!!Summary of Changes

  - fixed SF# 3150223: Poco::BinaryReader cannot read std::vector correctly
  - fixed SF# 3146326: Poco::SharedMemory issue
  - made Poco::Net::HTTPSession::abort() virtual
  - added Poco::Net::SecureStreamSocket::abort() to immediately close
    a SSL/TLS connection without performing an orderly SSL/TLS shutdown.
  - fixed SF# 3148126: Poco::Net::HTTPSClientSession destructor (!) throws an IOException.
    Added try/catch block to Poco::Net::SecureSocketImpl destructor.
  - added additional constructor to Poco::Net::HTTPSClientSession, taking
    both a socket and a session object.
  - Poco::Net::HTTPSession::abort() now also can be used with a
    Poco::Net::HTTPSClientSession.
  - fixed SF# 3148045: make clean and distclean issues
  - changed Data library names on Unix/Linux platforms to
    match the names on Windows (PocoSQLite -> PocoDataSQLite,
    PocoMySQL -> PocoDataMySQL, PocoODBC -> PocoDataODBC)
  - added additional options to configure script
  - added additional documentation to Poco::Net::HTTPClientSession
  - Poco::Net::HTTPClientSession::receiveResponse() closes the connection 
    if an exception is thrown while reading the response header. 
    This ensures that a new connection will be set up for the next request 
    if persistent connections are used.
  - improved Poco::Net::MultipartDecoder performance by reading directly from streambuf
  - improved performance of Poco::Base64Encoder, Poco::Base64Decoder, 
    Poco::HexBinaryEncoder and Poco::HexBinaryDecoder by working directly with the 
    given stream's streambuf.
  - improved performance of MessageHeader::read() by reading directly from streambuf 
    instead of istream.
  - it is now possible to specify additional MIME part header fields
    for a MIME part through the Poco::Net::PartSource class.
  - upgraded SQLite to release 3.7.4
  - added experimental VxWorks support for VxWorks 5.5.1/Tornado 2.2 and
    newer. Please see the VxWorks Platform Notes in the reference documentation
    for more information. Currently, the VxWorks is untested; full support
    will be available in release 1.4.2.
  - fixed SF# 3165918: Poco::DynamicAny fails to convert from string to float
  - fixed SF# 3165910: Poco::Net::MessageHeader does not accept HTTP conforming header
  - made Poco::Task::cancel() virtual so that tasks can implement custom
    cancellation behavior.
  - added optional argument to Poco::Util::WinRegistryKey constructor
    to specify additional flags (in addition to KEY_READ and KEY_WRITE)
    for the samDesired argument of RegOpenKeyEx() or RegCreateKeyEx().
  - improved Poco::BasicEvent::notify() performance by avoiding an unnecessary heap
    allocation.  
  - added additional well-known port numbers to Poco::URI: rtsp, sip, sips, xmpp.
  - added Poco::Net::MediaType::matchesRange()
  - improved invalid socket handling: a Poco::Net::InvalidSocketException is 
    now thrown instead of an assertion when an operation is attempted on a closed or 
    otherwise uninitialized socket.


!!!Release 1.4.0

!!Summary of Changes

  - Poco::Net::SSLManager: documentation fixes, code cleanup
  - Poco::Net::SSLManager: renamed PrivateKeyPassPhrase event to PrivateKeyPassphraseRequired
  - added Poco::Net::HTTPServerRequestImpl::socket() to get access to the underlying socket
  - added Poco::Net::Socket::secure() to find out whether a given socket supports SSL/TLS
  - added Poco::Net::SecureStreamSocket::havePeerCertificate()
  - NetSSL: added support for turning off extended certificate validation (hostname matching)
  - fixed SF# 2941228: Poco::Net::ICMPClient::ping() issues on Mac OS X
  - fixed SF# 2941231: Poco::Net::ICMPEventArgs out of bounds array access
  - added PageCompiler sample
  - added missing newline at end of xmlparse.c
  - Poco::Glob can now be used with an empty pattern which will match nothing (patch from Kim Graesman)
  - added support for HTTP proxy authentication (Basic authentication only)
  - fixed SF# 2958959: Poco::XML::XMLWriter must encode CR, LF and TAB in attribute values as character entities.
  - Poco::Net::HTMLForm now supports PUT requests as well (see <http://pocoproject.org/forum/viewtopic.php?f=12&t=2163&p=3930#p3930>)
  - fixed SF# #2970521: Poco::FileOutputStream and file permissions.
    (also fixed in File class)
  - removed an unused (and wrong) default parameter from EventImpl constructor for WIN32.
  - added full support for session caching to NetSSL_OpenSSL
  - fixed SF# 2984454: Poco::Util::Timer::scheduleAtFixedRate() works incorrectly
  - fixed a bug in Poco::Util::Timer that could lead to high CPU load if
    the system clock is moved forward.
  - added "system.nodeId" property to Poco::Util::SystemConfiguration
  - added a note to Poco::Util::ServerApplication documentation regarding
    creation of threads
  - added Poco::Net::IPAddress::broadcast() and Poco::Net::IPAddress::wildcard() to 
    create broadcast (255.255.255.255) and wildcard (0.0.0.0) addresses.
  - fixed SF# 2916154: Poco::Net::IPAddress::isLoopback() only works for 127.0.0.1.
  - added build configuration for iPhone Simulator
  - GNU Make based build system provides new variables: POCO_HOST_BINDIR, POCO_HOST_BINPATH,
    POCO_HOST_LIBDIR, POCO_HOST_LIBPATH and POCO_TARGET_* equivalents.
  - Poco::Util::Application::initialize() and Poco::Util::Application::uninitialize() will now be called from within run().
    This solves various issues with uninitialize() not being called, or being called inappropriately 
    from the Application destructor.
    Please note that this change will break applications that use the Application class,
    but only call init() and not run().
  - added /startup option to specify startup mode for Windows services (automatic or manual)
  - fixed SF# 2967354: SecureSocketImpl shutdown/close problem
  - fixed SF# 3006340: LinearHashTable grows even if key already exists
  - fixed a particularly nasty Windows error handling issue that manifested itself on WinCE: 
    WSAGetLastError() would be called after a std::string was created. The string creation could result 
    in a heap operation which called a Windows API to allocate memory. This would reset the 
    GetLastError() error code. Since WSAGetLastError() is just an alias for GetLastError(), the actual 
    error code from the socket operation would be lost.
  - upgraded SQLite to 3.7.3
  - added --header-prefix option to PageCompiler
  - fixed SF# 3003875: SQLite data binding is broken
  - fixed SF# 2993988: Issue with multiple calls to open()/close() on File*Stream
  - fixed SF# 2990256: Poco::Net::HTMLForm and file uploads
  - fixed SF# 2969227: Poco::DateTimeParser bug
  - fixed SF# 2966698: Socket connect with timeout issue
  - fixed SF# 2981041: Bind NULL to a query (patch supplied)
  - fixed SF# 2961419: Poco::UTF8Encoding::convert() doesn't work properly in DEBUG mode
  - fixed SF# 2957068: Timeout value not picked up by proxy in Poco::Net::HTTPSClientSession
  - fixed NetSSL_OpenSSL test runner for Poco::Util::Application class changes
  - Poco::AbstractEvent, Poco::AbstractCache and related classes now accept a Mutex class as additional template argument.
    Poco::NullMutex can be used if no synchronization is desired.
  - Added Poco::AbstractEvent::empty() to check whether an event has registered delegates.
  - Poco::URI now correctly handles IPv6 addresses.
  - Added Poco::Nullable class template.
  - Added Poco::NullMutex, a no-op mutex to be used as template argument for template classes
    taking a mutex policy argument.
  - Poco::XML::XMLWriter: fixed a namespace handling issue that occured with startPrefixMapping() and endPrefixMapping()
  - Poco::Net::Context now allows for loading certificates and private keys from Poco::Crypto::X509Certificate objects 
    and Poco::Crypto::RSAKey objects.
  - Poco::Crypto::RSAKey no longer uses temporary files for stream operations. Memory buffers are used instead.
  - fixed SF# 2957865: added Poco::UUID::tryParse()
  - All Zip classes now use Poco::File[Input|Output]Stream instead of std::[i|o]fstream. 
    UTF-8 filenames will now be handled correctly on Windows.
  - fixed SF# 2902029: zlib flush support (Z_SYNC_FLUSH)
  - added Poco::TextBufferIterator class
  - fixed SF# 2977249: Use epoll instead select under Linux
    Poco::Net::Socket::select() and Poco::Net::Socket::poll() will use epoll under Linux if the Net library is compiled
    with -DPOCO_HAVE_FD_EPOLL. This is the default for the Linux build configuration (but not for
    the various build configurations targeting embedded Linux platforms).
  - fixed SF# 2941664: Memory leak in Poco::DeflatingStream with zero-length streams (also fixed some other potential, 
    but unlikely, memory leaks)
  - fixed SF# 2946457: added Poco::Net::RejectCertificateHandler
  - fixed SF# 2946621: Poco::Path bug with POCO_WIN32_UTF8
  - fixed SF# 2929805: Environment::nodeId() does not work if no eth0 device exists
  - Poco::Environment::nodeId() no longer throws if no hardware ethernet address can be determined. 
    It returns an all-zero address instead.
  - Added additional classification functions to Poco::Unicode class; made classification functions inline.
  - added Poco::Ascii class for ASCII character classification.
    Methods of the Ascii class are now used instead of the
    standard library functions (std::isspace(), etc.) due to
    possible inconsistent results or assertions when the
    standard library functions are used with character codes
    outside the ASCII range.
  - Poco::Net::MailMessage: fixed a bug in StringPartHandler that resulted in incorrect handling of non-ASCII data if 
    char is signed.
  - Improved Poco::Net::SMTPClientSession compatibility with various mail servers when using AUTH_LOGIN authentication.
  - Added CRAM-SHA1 support to Poco::Net::SMTPClientSession
  - Poco::Net::SMTPClientSession now also supports login with AUTH PLAIN.
  - Added Poco::Net::SecureSMTPClientSession class, supporting STARTTLS for secure SMTP connections.
  - fixed an issue with SharedMemory on POSIX systems, where a shared memory region would be deleted 
    despite the server flag set to true (see http://pocoproject.org/forum/viewtopic.php?f=12&t=3494).
  - PageCompiler: added a new page context directive, to allow passing custom context objects to the
    request handler.
  - fixed Poco::Net::StreamSocketImpl::sendBytes() for non-blocking sockets
  - added Poco::Net::DialogSocket::receiveRawBytes(), which should be used instead of receiveBytes() due to internal 
    buffering by DialogSocket.
  - Poco::XML::DOMParser: FEATURE_WHITESPACE has been renamed to FEATURE_FILTER_WHITESPACE (which now matches the underlying URI)
    and is now handled correctly (previously we did the exact reverse thing)
  - added Poco::Util::AbstractConfiguration::remove() to remove a configuration property; added removeRaw() implementations 
    to all implementations (contributions by Daniel Hobi and Alexey Shults).
  - fixed NetSSL_OpenSSL compilation error on Windows with OpenSSL 1.0
  - Added optional FIPS mode support to NetSSL_OpenSSL (contributed by Lior Okman).
    If OpenSSL has been configured and built with FIPS support, then FIPS support can
    be enabled by calling Poco::Crypto::OpenSSLInitializer::enableFIPSMode(true); or
    by setting the fips property in the OpenSSL configuration to true (see Poco::Net::SSLManager
    for details).
  - fixed SF# 3031530: Ping and possible no timeout
  - added Poco::Net::SocketReactor::onBusy(), called whenever at least one notification will
    be dispatched.
  - fixed SF# 3034863: Compiler warning in Net/IPAddress.h with poco 1.3.2
  - added support for CRAM-SHA1 authentication to Poco::Net::SMTPClientSession
  - Poco::format(): arguments can now be addressed by their index, e.g. %[2]d
  - Poco::Util::Timer::cancel() now accepts an optional boolean argument.
    If true is passed, cancel() waits until the task queue has been purged.
    Otherwise, it returns immediately and works asynchronously, as before.
  - Poco::Net::HTTPServerResponse::redirect() now accepts an optional additional
    argument to specify the HTTP status code for the redirection.       
  - fixed a warning (BinaryReader.cpp) and error (ThreadLocal.cpp) in Foundation when compiling with Visual Studio 2010
  - fixed a wrong exception in Poco::Net::POP3ClientSession
  - Poco::Net::FTPClientSession and Poco::Net::SMTPClientSession now set the error code in exceptions they throw
  - fixed a potential race condition with terminating a Windows service based on Poco::Util::ServerApplication
  - fixed a bug in global build configuration file: explicitly setting POCO_CONFIG did not work on Solaris platforms,
    as it was always overridden by the automatically determined configuration.
  - Added support for MinGW cross builds on Linux.
  - Changed location of statically linked build products in the gmake-based build system.
    Statically linked executables are now in bin/$(OSNAME)/$(OSARCH)/static and no longer
    have the _s suffix
  - The POCO_VERSION macro now is in its own header file, "Poco/Version.h". It is no longer
    available through "Poco/Foundation.h".
  - added Poco::Net::HTTPCookie::escape() and Poco::Net::HTTPCookie::unescape().
  - fixed SF# 3021173: Poco::Thread (POSIX) returns uninitialised value for OS priority
  - fixed SF# 3040870: Poco::ThreadPool has no function to get assigned name
  - fixed SF# 3044303: Can't use own config file on Solaris & OSARCH_64BITS ignored
  - fixed SF# 2943896: Poco::AsyncChannel::log() blocks
  - fixed a bug in Poco::Util::WinRegistryKey::getInt():
    The size variable passed to RegQueryValueExW() should be initialized to the size 
    of the output buffer.
  - Added rudimentary support for compiling with Clang 2.0 (Xcode 4) on Mac OS X.
  - New build configurations for Mac OS X: Darwin32 and Darwin64 for explicit
    32-bit and 64-bit builds. Note that the default Darwin build configuration 
    will build 64-bit on Snow Leopard and 32-bit on Leopard, but will always place
    build products in Darwin/i386. The new Darwin32 and Darwin64 configurations
    will use the correct directories.
  - fixed SF# 3051598: Bug in URL encoding
  - Poco::ThreadPool::stopAll() (and thus also the destructor) will now wait for each
    pooled thread to terminate before returning. This fixes an issue with creating
    and orderly shutting down a thread pool in a plugin. Previously, a pooled thread
    in a thread pool created by a dynamically loaded library might still be running
    when the plugin's shared library was unloaded, resulting in Bad Things happening.
    This can now no longer happen. As a downside, a pooled thread that fails to
    finish will block stopAll() and the destructor forever.
  - NetSSL_OpenSSL: for a Poco::Net::SecureStreamSocket, available() now returns the number of bytes that 
    are pending in the SSL buffer (SSL_pending()), not the actual socket buffer.
  - Added Poco::Net::HTTPClientSession::secure() to check for a secure connection.
  - Poco::Net::HTTPRequest::setHost() now does not include the port number in the Host header 
    if it's either 80 or 443.
  - log messages can now optionally include source file path and line number
  - Poco::PatternFormatter can format source file path and line number (%U, %u)
  - logging macros (poco_information(), etc.) now use __LINE__ and __FILE__
  - new logging macros that incorporate Poco::format(): poco_information_f1(logger, format, arg) with up to 4 arguments
  - added Poco::Net::HTTPSession::attachSessionData() and Poco::Net::HTTPSession::sessionData()
    to attach arbitrary data to a HTTP session.
  - added additional constructors to zlib stream classes that allow passing
    a windowBits parameter to the underlying zlib library.
  - fixed a potential error handling issue in Poco::Net::SecureSocketImpl.
  - fixed SF# 3110272: Poco::Crypto::RSACipherImpl bug.
  - fixed SF# 3081677: Poco::Util::ConfigurationView's getRaw not retrieving xml attributes.
  - added basic support for Canonical XML and better pretty-printing support to Poco::XML::XMLWriter.
  - Poco::Util::AbstractConfiguration now supports events fired when changing or
    removing properties.
  - XML: added support for finding DOM nodes by XPath-like
    expressions. Only a very minimal subset of XPath is supported.
    See Poco::XML::Element::getNodeByPath(), Poco::XML::Element::getNodeByPathNS()
    and the same methods in Poco::XML::Document.
  - Poco::Timer: If the callback takes longer to execute than the
    timer interval, the callback function will not be called until the next
    proper interval. The number of skipped invocations since the last
    invocation will be recorded and can be obtained by the callback
    by calling skipped().
  - Poco::BinaryReader and Poco::BinaryWriter now support reading and
    writing std::vectors of the supported basic types. Also, strings
    can now be written in a different encoding (a Poco::TextEncoding
    can be optionally passed to the constructor).
  - Windows Embedded CE (5.0 and newer) is now a supported platform.
  - Poco::UUID::nil() and Poco::UUID::isNil() have been renamed to
    Poco::UUID::null() and Poco::UUID::isNull(), respectively, to avoid
    issues with Objective-C++ projects on Mac OS X and iOS where nil is
    a system-provided macro.
  - Crypto bugfixes: Poco::Crypto::RSACipherImpl now pads every block of data, not just the 
    last (or last two).
  - Improved Crypto testsuite by adding new tests.
  - Added new Visual Studio project configurations: debug_static_mt and release_static_mt
    (linking with static runtime libraries). The existing configurations debug_static
    and release_static have been renamed to debug_static_md and release_static_md, respectively.
    The suffixes of the static libraries have also changed. The static_md configurations
    now build libraries with suffixes md[d], while the libraries built by the static_mt
    configurations have mt[d] suffixes.
  - Added Visual Studio project files for 64-bit builds.
  - Added Visual Studio 2010 project files.
  - Removed the use of local static objects in various methods due to
    their construction not being threadsafe (and thus leading to
    potential race conditions) on Windows/Visual C++.
  - Fixed some warning on 64-bit Windows builds.
  - The names of the Data connector libraries have changed. They are now
    named PocoDataMySQL, PocoDataODBC and PocoDataSQLite.
  - fixed SF# 3125498: Linux NetworkInterface::list() doesn't return IPv6 IPs
  - fixed SF# 3125457: IPv6 IPAddress tests are wrong
  - Added initialization functions for the NetSSL_OpenSSL and Crypto libraries.
    These should be called instead of relying on automatic initialization,
    implemented with static initializer objects, as this won't work with
    statically linked executables (where the linker won't include the
    static initializer object).
    The functions are Poco::Crypto::initializeCrypto(), Poco::Crypto::uninitializeCrypto(),
    Poco::Net::initializeSSL() and Poco::Net::uninitializeSSL().
    Applications using Crypto and/or NetSSL should call these methods appropriately at
    program startup and shutdown.
    Note: In release 1.3.6, similar functions have been added to the Net library.


!!Incompatible Changes and Possible Transition Issues

  - The behavior of Poco::Timer has been changed for the case when
    the callback function takes longer to execute than the given
    timer interval. In this case, the missed intervals are counted
    and the next callback will be at the next proper interval.
  - Poco::XML::DOMParser: FEATURE_WHITESPACE has been renamed to FEATURE_FILTER_WHITESPACE 
    (which now matches the underlying URI)
    and is now handled correctly (previously we did the exact reverse thing)
  - Poco::UUID::nil() and Poco::UUID::isNil() have been renamed to
    Poco::UUID::null() and Poco::UUID::isNull(), respectively, to avoid
    issues with Objective-C++ projects on Mac OS X and iOS where nil is
    a system-provided macro.
  - The names of the Data connector libraries have changed. They are now
    named PocoDataMySQL, PocoDataODBC and PocoDataSQLite.
  - The existing Visual Studio build configurations debug_static
    and release_static have been renamed to debug_static_md and 
    release_static_md, respectively. Also, the suffixes of the static
    library names have changed to match usual conventions.
  - New static initialization functions for the Crypto and NetSSL_OpenSSL libraries
    have been added. These should be called instead of relying on automatic initialization,
    implemented with static initializer objects, as this won't work with
    statically linked executables (where the linker won't include the
    static initializer object).
    The functions are Poco::Crypto::initializeCrypto(), Poco::Crypto::uninitializeCrypto(),
    Poco::Net::initializeSSL() and Poco::Net::uninitializeSSL().
    Applications using Crypto and/or NetSSL should call these methods appropriately at
    program startup and shutdown.
    Note: In release 1.3.6, similar functions have been added to the Net library.


!!!Release 1.3.6p2

!!Summary of Changes

  - fixed an issue in the Windows implementation Poco::RWLock, where
    tryReadLock() sometimes would return false even if no writers
    were using the lock (fix contributed by Bjrn Carlsson)
  - added Poco::Environment::libraryVersion().
  - fixed SF# 2919461: Context ignores parameter cypherList
  - removed an unused enum from RSACipherImpl.cpp (Crypto)
  - integrated a new expat patch for CVE-2009-3560.
  - fixed SF# 2926458: SSL Context Problem. The Poco::Net::Context
    class now makes sure that OpenSSL is properly initialized.
  - updated iPhone build configuration (contributed by Martin York)
  - fixed SF# 1815124 (reopened): XML Compile failed on VS7.1 with
    XML_UNICODE_WCHAR_T
  - fixed SF# 2932647: FTPClientSession::getWorkingDirectory() returns a bad result


!!!Release 1.3.6p1

!!Summary of Changes

  - added support for using external zlib, pcre, expat and sqlite3 instead of 
    bundled ones (-DPOCO_UNBUNDLED, configure --unbundled)
  - fixed SF# 2911407: Add sh4 support
  - fixed SF# 2912746: RSAKey::EXP_LARGE doesn't work
  - fixed SF# 2904119: abstractstrategy uses std::set but do not includes it
  - fixed SF# 2909946: localtime NULL pointer
  - fixed SF# 2914986: potential expat DoS security issues (CVE-2009-3560 and CVE-2009-3720)
  - fixed SF# 2916305: SSL Manager crashes
  - fixed SF# 2903676: Tuple TypeHander does not handle composites.


!!!Release 1.3.6

!!Summary of Changes

  - added Environment::processorCount()
  - added POCO_VERSION macro to Poco/Foundation.h
  - fixed SF# 2807527: Poco::Timer bug for long startInterval/periodic interval
  - fixed a bug similar to SF# 2807527 in Poco::Util::Timer.
  - fixed SF# 2795395: Constructor doesn't treat the params "key" and "iv"
  - fixed SF# 2804457: DateTime::checkLimit looks wrong
  - fixed SF# 2804546: DateTimeParser requires explicit RFC1123 format
  - added ReleaseArrayPolicy to Poco::SharedPtr
  - upgraded to SQLite 3.6.20
  - fixed SF# 2782709: Missing semicolons in "Logger.h" convenience
  - fixed SF# 2526407: DefaultStrategy.h ++it instead of it++ in a loop
  - fixed SF# 2502235: Poco STLPort patch
  - fixed SF# 2186643: Data::Statement::reset() not implemented in 1.3.3
  - fixed SF# 2164227: Allow File opened read only by FileInputSteam to be writable
  - fixed SF# 2791934: use of char_traits::copy in BufferedStreamBuf::underflow
  - fixed SF# 2807750: Support additional SQL types in SQLite
  - fixed documentation bugs in Timed/PriorityNotificationQueue
  - fixed SF# 2828401: Deadlock in SocketReactor/NotificationCenter (also fixes patch# 1956490)
    NotificationCenter now uses a std::vector internally instead of a std::list, and the mutex is
    no longer held while notifications are sent to observers.
  - fixed SF# 2835206: File_WIN32 not checking aganist INVALID_HANDLE_VALUE
  - fixed SF# 2841812: Posix ThreadImpl::sleepImpl throws exceptions on EINTR
  - fixed SF# 2839579: simple DoS for SSL TCPServer, HTTPS server
    No SSL handshake is performed during accept() - the handshake is delayed until
    sendBytes(), receiveBytes() or completeHandshake() is called for the first time.
    This also allows for better handshake and certificate validation when using
    nonblocking connections.
  - fixed SF# 2836049: Possible handle leak in FileStream
    If sync() fails, close() now simply set's the stream's bad bit.
    In any case, close() closes the file handle/descriptor.   
  - fixed SF# 2814451: NetSSL: receiveBytes crashes if socket is closed
  - added a workaround for Vista service network initialization issue
    (an Windows service using the Net library running under Vista will
    crash in the call to WSAStartup() done in NetworkInitializer).
    Workaround is to call WSAStartup() in the application's main().
    Automatic call to WSAStartup() in the Net library can now be disabled 
    by compiling Net with -DPOCO_NET_NO_AUTOMATIC_WSASTARTUP. Also
    the new Poco::Net::initializeNetwork() and Poco::Net::uninitializeNetwork()
    functions can be used to call WSAStartup() and WSACleanup(), respectively,
    in a platform-independent way (on platforms other than Windows, these
    functions will simply do nothing).
  - added VCexpress build script support (contributed by Jolyon Wright)
  - fixed SF# 2851052: Poco::DirectoryIterator copy constructor is broken
  - fixed SF# 2851197: IPAddress ctor throw keyword missing
  - added Poco::ProtocolException
  - PageCompiler improvements: new tags, support for buffered output, etc.
  - better error reporting in Data MySQL connector (patch #2881270 by Jan "HanzZ" Kaluza)
  - fixed SF# 1892462: FTPClient:Choose explicitely between EPSV and PASV
  - fixed SF# 2806365: Option for PageCompiler to write output to different dir 
  - fixed a documentation bug (wrong sample code) in Process::launch() documentation
  - added --header-output-dir option to PageCompiler
  - fixed SF# 2849144: Zip::Decompress notifications error
  - SAXParser has a new feature: "http://www.appinf.com/features/enable-partial-reads".
    See ParserEngine::setEnablePartialReads() for a description of what this does.
  - fixed SF# 2876179: MySQL Signed/Unsigned value bug
  - fixed SF# 2877970: possible bug in timer task
  - fixed SF# 2874104: wrong parsing empty http headers
  - fixed SF# 2860694: Incorrect return code from SecureStreamSocketImpl::sendBytes
  - fixed SF# 2849750: Possible bug with XMLWriter?
  - added MailMessage::encodeWord() to support RFC 2047 word encoded
    mail header fields when sending out mail containing non-ASCII
    characters.
  - fixed SF# 2890975: SMTPClientSession bug with 7BIT encoding
  - fixed an issue with retrieving the value of socket options on Windows 7. 
    Before obtaining the value of a socket, we now initialize the variable receiving the 
    socket option value to zero.
  - fixed SF# 2836141: Documentation errors
  - fixed SF# 2864232: Socket::select() does not detect closed sockets on windows
  - fixed SF# 2812143: Socket::select() should check socket descriptors...
  - fixed SF# 2801750: NetworkInterface <iface-Obj>forName returns wrong subnetMask
  - fixed SF# 2816315: Problem with POSIX Thread::sleepImpl
  - fixed SF# 2795646: IPv6 address parsing bug
  - fixed #0000092: ServerApplication::waitForTerminationRequest(), SIGINT and GDB.
    Poco::Util::ServerApplication::waitForTerminationRequest() no longer registers a
    signal handler for SIGINT if the environment variable POCO_ENABLE_DEBUGGER
    is defined.
  - fixed SF# 2896070: Poco::Net::Context with non-ASCII paths
  - added Unicode Surrogate support to Poco::UTF16Encoding. 
    See Poco::TextEncoding::queryConvert() and Poco::TextEncoding::sequenceLength() 
    for how this is implemented. Contributed by Philippe Cuvillier.
  - fixed SF# 2897650: [branch 1.3.6] Net.SocketAddress won't compile for CYGWIN
  - fixed SF# 2896161: Building on Windows fails when basedir has space in it
  - fixed SF# 2864380: Memory leak when using secure sockets
  - NetSSL_OpenSSL: the SSL/TLS session cache is now disabled by default and
    can be enabled per Context using Poco::Net::Context::enableSessionCache().
  - fixed SF# 2899039: Wrong DST handling in LocalDateTime 
  - added Poco::RWLock::ScopedReadLock and Poco::RWLock::ScopedWriteLock (contributed by Marc Chevrier)
  - added Poco::Thread::TID type, as well as Poco::Thread::tid() and Poco::Thread::currentTid() 
    to obtain the native thread handle/ID
  - added Zip file comment support
  - On Windows, Poco::SharedLibrary::load() now uses LoadLibraryEx instead of LoadLibrary
    and uses the LOAD_WITH_ALTERED_SEARCH_PATH if an absolute path is specified. This will
    add the directory containing the library to the search path for DLLs that the
    loaded library depends upon.
  - Mac OS X build settings now match those used by default Xcode projects, making linking the 
    POCO libs to Xcode projects easier
  - Replaced use of std::valarray in Poco::Net::ICMPEventArgs with std::vector due to issues with 
    std::valarray together with STDCXX debug mode on OS X


!!!Release 1.3.5

!!Summary of Changes

  - fixed SF# 2779410: Poco::Data::ODBC::HandleException impovement
  - fixed wrong exception text for Poco::UnhandledException
  - Fixed a problem with SSL shutdown that causes clients (web browsers) 
    to hang when the server attempts to perform a clean SSL shutdown. We now call 
    SSL_shutdown() once, even if the shutdown is not complete after the first call.
  - added Poco::Crypto::X509Certificate::save()
  - fixed a bug in Poco::Zip::Decompress that results in wrong paths for extracted files
  - fixed a bug in Poco::Zip::ZipManipulator where the Zip file was opened in text format
    on Windows.
  - added Poco::Crypto::X509Certificate::issuedBy() to verify certificate chain.
  - added methods to extract the contents of specific fields from the 
    subject and issuer distinguished names of a certificate.
  - fixed 0000089: Thread::sleep() on Linux is extremely inaccurate


!!!Release 1.3.4

!!Summary of Changes

  - fixed SF# 2611804: PropertyFileConfiguration continuation lines
  - fixed SF# 2529788: ServerApplication::beDaemon() broken
  - fixed SF# 2445467: Bug in Thread_WIN32.cpp
  - Improved performance of HTTP Server by removing some
    string copy operations
  - fixed SF# 2310735: HTTPServer: Keep-Alive only works with send()
  - fixed appinf.com IP address in Net testsuite
  - fixed RFC-00188: NumberFormatter and float/double numbers
  - added --pidfile option to ServerApplication on Unix
  - fixed SF# 2499504: Bug in Win32_Thread when using from dll (fixed also for POSIX threads)
  - fixed SF# 2465794: HTTPServerRequestImpl memory leak
  - fixed SF# 2583934: Zip: No Unix permissions set
  - the NetSSL_OpenSSL library has been heavily refactored
  - added NumberFormatter::append*() and DateTimeFormatter::append() functions
  - use NumberFormatter::append() and DateTimeFormatter::append() instead of format() where 
    it makes sense to gain some performance
  - added system.dateTime and system.pid to Poco::Util::SystemConfiguration
  - added %F format specifier (fractional seconds/microseconds) to DateTimeFormatter,
    DateTimeParser and PatternFormatter.
  - fixed SF# 2630476: Thread_POSIX::setStackSize() failure with g++ 4.3
  - fixed SF# 2679279: Handling of -- option broken
  - added compile options to reduce memory footprint of statically linked applications 
    by excluding various classes from automatically being linked.
    See the POCO_NO_* macros in Poco/Config.h.
  - fixed SF# 2644940: on Windows the COMPUTER-NAME and the HOSTNAME can be different
  - added DNS::hostName() function	
  - added build configuration for iPhone (using Apple's SDK)
  - basic support for AIX 5.x/xlC 8
  - fixed a bug resulting in a badly formatted exception message with IOException 
    thrown due to a socket-related error
  - fixed SF# 2644718: NetworkInterface name conflict in MinGW
  - added a missing #include to CryptoTransform.h
  - fixed SF# 2635377: HTTPServer::HTTPServer should take AutoPtr<HTTPServerParams>
  - replaced plain pointers with smart pointers in some interfaces
  - upgraded to sqlite 3.6.13
  - improved Data::SQLite error reporting
  - Poco::Glob now works with UTF-8 encoded strings and supports case-insensitive comparison.
    This also fixes SF# 1944831: Glob::glob on windows should be case insensitve
  - added Twitter client sample to Net library
  - Fixed SF# 2513643: Seg fault in Poco::UTF8::toLower on 64-bit Linux
  - Poco::Data::SessionPool: the janitor can be disabled by specifying a zero idle time.
  - added Poco::Data::SessionPool::customizeSession()
  - added support for different SQLite transaction modes (DEFERRED, IMMEDIATE, EXCLUSIVE)
  - fixed a few wrong #if POCO_HAVE_IPv6 in the Net library
  - added support for creating an initialized, but unconnected StreamSocket.
  - added File::isDevice()
  - added family() member function to SocketAddress,
  - Data::SQLite: added support for automatic retries if the database is locked
  - XMLConfiguration is now writable
  - fixed an IPv6 implementation for Windows bug in HostEntry
  - Timer class improvement: interval between callback is no longer influenced by the 
    time needed to execute the callback.
  - added PriorityNotificationQueue and TimedNotificationQueue classes to Foundation. 
    These are variants of the NotificationQueue class that support priority and 
    timestamp-tagged notifications.
  - added Poco::Util::Timer class. This implements a timer that can schedule different 
    tasks at different times, using only one thread.
  - the signatures of Poco::NotificationQueue and Poco::NotificationCenter member functions 
    have been changed to accept a Poco::Notification::Ptr instead of Poco::Notification* 
    to improve exception safety. This change should be transparent and fully backwards 
    compatible. The signature of the methods returning a Poco::Notification* have not been 
    changed for backwards compatibility. It is recommended, that any Notification* obtained 
    should be immediately assigned to a Notification::Ptr.	
  - SQLite::SessionImpl::isTransaction() now uses sqlite3_get_autocommit() to find out 
    about the transaction state.
  - improved SQLite data type mapping
  - refactored Crypto library to make it independent from NetSSL_OpenSSL.
  - added support for RSA-MD5 digital signatures to Crypto library.
  - removed SSLInitializer from NetSSL library (now moved to Crypto library)
  - added build configs for static libraries to Crypto library
  - OpenSSL now depends on Crypto library (which makes more sense than
    vice versa, as it was before). Poco::Net::X509Certificate is now
    a subclass of Poco::Crypto::X509Certificate (adding the verify()
    member function) and the Poco::Net::SSLInitializer class was 
    moved to Poco::Crypto::OpenSSLInitializer.		  
  - added build configs for static libraries to Zip
  - added batch mode to CppUnit::WinTestRunner.
    WinTestRunnerApp supports a batch mode, which runs the
    test using the standard text-based TestRunner from CppUnit.
    To enable batch mode, start the application with the "/b"
    or "/B" command line argument. Optionally, a path to a file
    where the test output will be written to may be given:
    "/b:<path>" or "/B:<path>".
    When run in batch mode, the exit code of the application
    will denote test success (0) or failure (1).
  - testsuites now also work for static builds on Windows
  - The IPv6 support for Windows now basically works (Net library compiled with POCO_HAVE_IPv6)
  - fixed a potential error when shutting down openssl in a statically linked application
  - added static build configs to Data library
  - added Poco::AtomicCounter class, which uses OS-specific APIs for atomic (thread-safe) 
    manipulation of counter values.
  - Poco::RefCountedObject and Poco::SharedPtr now use Poco::AtomicCounter for 
    reference counting
  - fixed SF# 2765569: LoadConfiguration failing from current directory


!!Incompatible Changes and Possible Transition Issues

  - Some methods that have previously taken a plain pointer (to a reference counted object)
    as argument now take a Poco::AutoPtr instead. This shouldn't cause any problems for
    properly written code. Examples are Poco::NotificationCenter, Poco::NotificationQueue
    and Poco::Net::HTTPServer.
  - Poco::Glob now works with and assumes UTF-8 encoded strings.
  - Poco::Timer: the interval between callbacks is no longer influenced by the 
    time needed to execute the callback.
  - The Crypto and NetSSL_OpenSSL libraries have been refactored. NetSSL_OpenSSL
    now depends on the Crypto library (previously, it was vice versa).
  

!!!Release 1.3.3

!!Summary of Changes

  - Threads now have optional user-settable stack size (if the OS supports that feature)
  - Events now support simplified delegate syntax based on delegate function template.
    See Poco::AbstractEvent documentation for new syntax.
  - Cache supports new access expire strategy.
  - Upgraded to SQLite 3.6.2
  - Upgraded to PCRE 7.8
  - added HttpOnly support to Poco::Net::HTTPCookie
  - NetworkInterface now has displayName() member (useful only on Windows)
  - Poco::Util::WinRegistryKey now has a read-only mode
  - Poco::Util::WinRegistryKey::deleteKey() can now recursively delete registry keys
  - Poco::File::created() now returns 0 if the creation date/time is not known, as 
    it's the case on most Unix platforms (including Linux). 
    On FreeBSD and Mac OS X, it returns the real creation time.
  - Time interval based log file rotation (Poco::FileChannel) now works
    correctly. Since there's no reliable and portable way to find out the creation 
    date of a file (Windows has the tunneling "feature", most Unixes don't provide 
    the creation date), the creation/rotation date of the log file is written into 
    the log file as the first line.
  - added Environment::nodeId() for obtaining the Ethernet address of the system
    (this is now also used by UUIDGenerator - the corresponding code from UUIDGenerator
    was moved into Environment)
  - added a release policy argument to SharedPtr template
  - Socket::select() will no longer throw an InvalidArgumentException
    on Windows when called with no sockets at all. If all three socket
    sets are empty, Socket::select() will return 0 immediately.
  - SocketReactor::run() now catches exceptions and reports them via
    the ErrorHandler.
  - SocketReactor has a new IdleNotification, which will be posted when
    the SocketReactor has no sockets to handle.
  - added referenceCount() method to Poco::SharedPtr.
  - POCO now builds with GCC 4.3 (but there are some stupid warnings:
    "suggest parentheses around && within ||".
  - Solution and project files for Visual Studio 2008 are included
  - fixed SF# 1859738: AsyncChannel stall
  - fixed SF# 1815124: XML Compile failed on VS7.1 with XML_UNICODE_WCHAR_T
  - fixed SF# 1867340: Net and NetSSL additional dependency not set - ws2_32.lib
  - fixed SF# 1871946: no exception thrown on error
  - fixed SF# 1881113: LinearHashTable does not conform to stl iterators
  - fixed SF# 1899808: HTMLForm.load() should call clear() first
  - fixed SF# 2030074: Cookie problem with .NET server
  - fixed SF# 2009707: small bug in Net/ICMPPacketImpl.cpp
  - fixed SF# 1988579: Intel Warning: invalid multibyte character sequence
  - fixed SF# 2007486: Please clarify license for Data/samples/*
  - fixed SF# 1985180: Poco::Net::DNS multithreading issue
  - fixed SF# 1968106: DigestOutputStream losing data
  - fixed SF# 1980478: FileChannel loses messages with "archive"="timestamp"
  - fixed SF# 1906481: mingw build WC_NO_BEST_FIT_CHARS is not defined 
  - fixed SF# 1916763: Bug in Activity?
  - fixed SF# 1956300: HTTPServerConnection hanging
  - fixed SF# 1963214: Typo in documentation for NumberParser::parseFloat
  - fixed SF# 1981865: Cygwin Makefile lacks ThreadTarget.cpp
  - fixed SF# 1981130: pointless comparison of unsigned integer with zero
  - fixed SF# 1943728: POCO_APP_MAIN namespace issue
  - fixed SF# 1981139: initial value of reference to non-const must be an lvalue
  - fixed SF# 1995073: setupRegistry is broken if POCO_WIN32_UTF8 enabled
  - fixed SF# 1981125: std::swap_ranges overloading resolution failed
  - fixed SF# 2019857: Memory leak in Data::ODBC Extractor
  - fixed SF# 1916761: Bug in Stopwatch?
  - fixed SF# 1951443: NetworkInterface::list BSD/QNX no netmask and broadcast addr
  - fixed SF# 1935310: Unhandled characters in Windows1252Encoding
  - fixed SF# 1948361: a little bug for win32
  - fixed SF# 1896482: tryReadLock intermittent error
  - workaround for SF# 1959059: Poco::SignalHandler deadlock
    the SignalHandler can now be disabled globally by adding a
    #define POCO_NO_SIGNAL_HANDLER to Poco/Config.h
  - fixed SF# 2012050: Configuration key created on read access
  - fixed SF# 1895483: PCRE - possible buffer overflow
  - fixed SF# 2062835: Logfile _creationDate is wrong
  - fixed SF# 2118943: out_of_bound access in Poco::Data::BLOB:rawContent
  - fixed SF# 2121732: Prevent InvalidArgumentException in SocketReactor
  - fixed SF# 1891132: Poco::Data::StatementImpl::executeWithLimit is not correct
  - fixed SF# 1951604: POCO refuses to compile with g++ 4.3.0
  - fixed SF# 1954327: CYGWIN's pthread does not define PTHREAD_STACK_MIN
  - fixed SF# 2124636: Discrepancy between FileWIN32(U)::handleLastError
  - fixed SF# 1558300: MinGW/MSYS Builds
  - fixed SF# 2123266: Memory leak under QNX6 with dinkum library


!!!Release 1.3.2

!!Summary of Changes

  - added POCO_NO_SHAREDMEMORY to Config.h
  - POCO_NO_WSTRING now really disables all wide string related calls
  - added template specialization for string hashfunction (performance)
  - XML parser performance improvements (SAX parser is now up to 40 % faster
  - added parseMemoryNP() to XMLReader and friends
  - URIStreamOpener improvement: redirect logic is now in URIStreamOpener.
    this enables support for redirects from http to https.
  - added support for temporary redirects and useproxy return code
  - added getBlocking() to Socket	  		
  - added File::isHidden()
  - better WIN64 support (AMD64 and IA64 platforms are recognized)
  - added support for timed lock operations to [Fast]Mutex
  - SharedLibrary: dlopen() is called with RTLD_GLOBAL instead of RTLD_LOCAL 
    (see http://gcc.gnu.org/faq.html#dso)
  - Poco::Timer threads can now run with a specified priority
  - added testcase for SF# 1774351
  - fixed SF# 1784772: Message::swap omits _tid mem
  - fixed SF# 1790894: IPAddress(addr,family) doesn't fail on invalid address
  - fixed SF# 1804395: Constructor argument name wrong
  - fixed SF# 1806807: XMLWriter::characters should ignore empty strings
  - fixed SF# 1806994: property application.runAsService set too late
  - fixed SF# 1828908: HTMLForm does not encode '+'
  - fixed SF# 1831871: Windows configuration file line endings not correct.
  - fixed SF# 1845545: TCP server hangs on shutdown
  - fixed SF# 1846734: Option::validator() does not behave according to doc
  - fixed SF# 1856567: Assertion in DateTimeParser::tryParse()
  - fixed SF# 1864832: HTTP server sendFile() uses incorrect date
  - HTTPServerResponseImpl now always sets the Date header automatically
    in the constructor.
  - fixed SF# 1787667: DateTimeFormatter and time related classes
    (also SF# 1800031: The wrong behavior of time related classes)
  - fixed SF# 1829700: TaskManager::_taskList contains tasks that never started
  - fixed SF# 1834127: Anonymous enums in Tuple.h result in invalid C++
  - fixed SF# 1834130: RunnableAdapter::operator= not returning a value
  - fixed SF# 1873924: Add exception code to NetException
  - fixed SF# 1873929: SMTPClientSession support for name in sender field
  - logging performance improvements (PatternFormatter)
  - fixed SF# 1883871: TypeList operator < fails for tuples with duplicate values
  - CYGWIN build works again (most things work but Foundation testsuite still fails)
  - new build configuration for Digi Embedded Linux (ARM9, uclibc)
  - new build configuration for PowerPC Linux


!!!Release 1.3.1

!!Summary of Changes

  - DynamicAny fixes for char conversions
  - fixed SF# 1733362: Strange timeout handling in SocketImpl::poll and Socket::select
  - fixed SF patch# 1728912: crash in POCO on Solaris
  - fixed SF# 1732138: Bug in WinRegistryConfiguration::getString
  - fixed SF# 1730790: Reference counting breaks NetworkInterface::list()
  - fixed SF# 1720733: Poco::SignalHandler bug
  - fixed SF# 1718724: Poco::StreamCopier::copyStream loops forever
  - fixed SF# 1718437: HashMap bug
  - changed LinearHashTable iterator implementation. less templates -> good thing.
  - fixed SF# 1733964: DynamicAny compile error
  - UUIDGenerator: fixed infinite loop with non ethernet interfaces
  - updated expat to 2.0.1
  - fixed SF# 1730566: HTTP server throws exception
  - Glob supports symbolic links (additional flag to control behavior)
  - fixed a problem with non blocking connect in NetSSL_OpenSSL
    (see http://www.appinf.com/poco/wiki/tiki-view_forum_thread.php?comments_parentId=441&topics_threshold=0&topics_offset=29&topics_sort_mode=commentDate_desc&topics_find=&forumId=6)
  - fixed a problem with SSL renegotiation in NetSSL_OpenSSL (thanks to Sanjay Chouksey for the fix)
  - fixed SF# 1714753: NetSSL_OpenSSL: HTTPS connections fail with wildcard certs
  - HTTPClientSession: set Host header only if it's not already set (proposed by EHL)
  - NetworkInterface (Windows): Loopback interface now has correct netmask;
    interfaces that do not have an IP address assigned are no longer reported.
  - Fixes for VC++ W4 warnings from EHL
  - SharedMemory: first constructor has an additional "server" parameter 
    Setting to true does not unlink the shared memory region when the SharedMemory object is destroyed. (Alessandro Oliveira Ungaro)
  - fixed SF# 1768231: MemoryPool constructor


!!!Release 1.3.0

Release 1.3 of the POCO C++ Libraries contains major improvements and new features throughout all libraries.

!!Summary of Changes

  - Poco::HashMap and Poco::HashSet classes (Foundation)
  - Poco::Tuple class template (Foundation)
  - Poco::SharedMemory class (Foundation)
  - Poco::FileStream, Poco::FileInputStream, Poco::FileOutputStream classes that
    support Unicode (UTF-8) filenames on Windows (Foundation)
  - improvements and bugfixes in the Net library, with a focus on the HTTP client
    and server classes
  - Poco::DynamicAny class (Foundation)
  - improvements to Poco::Net::NetworkInterface class (Net)
  - Poco::Condition class, implementing POSIX condition variable-style
    thread synchronization (Foundation)
  - Poco::RegularExpression now uses [[http://www.pcre.org PCRE]] 7.1 (Foundation)
  - improved Unicode/UTF-8 support -- Poco::Unicode and Poco::UTF8 classes
  - Poco::XML::NodeAppender class for faster DOM tree creation (XML)
  - Poco::Checksum class (Foundation)
  - lots of bugfixes and other improvements -- please see the
    CHANGELOG for details


!!Incompatible Changes and Possible Transition Issues

The (now deprecated) Poco::HashFunction class template has been changed in an 
incompatible way. The member function formerly named hash() is now the function
call operator. If you have defined your own HashFunction classes,
you have to update your code. Sorry for the inconvenience.

On Windows, POCO now builds with Unicode/UTF-8 support 
(POCO_WIN32_UTF8) enabled by default. If you need the previous (1.2)
behavior, remove the corresponding #define from Poco/Config.h
