Change log:
This is the changelog file for the POCO C++ Libraries.
Release 1.4.2p1 (2011-09-24)
============================
- 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 (2011-08-28)
==========================
- 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.
- NetworkInterface::list() now also returns IPv4 interfaces on Windows when
built with -DPOCO_HAVE_IPv6
- 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: 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 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: 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: TemporaryFile::tempName() + glob bug on xp
- fixed SF# 3177372: 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 (2011-02-08)
============================
- 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 (2011-01-29)
==========================
- fixed SF# 3150223: Poco::BinaryReader cannot read std::vector correctly
- fixed SF# 3146326: 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: 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.