1.24 2014-12-22
  - Roll-up of all 1.23_* changes
  - Update bug tracker location

1.23_07 2014-12-17
  - Correct incorrectly tagged 1.23_06 (errantly tagged as 1.24_06)

1.23_06 2011-07-19
  - Eliminate another set of cyclic references (szabgab)
  - Stylistic improvements in tests (szabgab)
  - Refactor debug output to separate module (szabgab)
  - Weaken scalar references to address additional memory leak (szabgab)
  - Add additional tests for scalar references (szabgab)
  - Documentation format corrections (szabgab)

1.23_05 2011-06-23
  - RT#8834 unindented POD so that it reformats properly (szabgab)
  - Weaken cyclic references in XML::Stream to eliminate memory leak (szabgab)
  - Increase use of warnings and strictures in tests and code (szabgab)
  - Replace indirect object notation with direct invocation notation (szabgab)
  - Replace manual TAP output with Test::More (szabgab)

1.23_04 2010-09-22
  - RT#57649 Set default value for _tls flag
  - Module metadata changes

1.23_03 2010-09-20
  - RT#57649 Prepare cert verification params when TLS connection is requested

1.23_02 2010-09-18
  - Convert project to Module::Build, with ExtUtils::MakeMaker compatibility
  - RT#57649 SSL cert verification, enabled by default
  - RT#53315 Remove old, bundled Test::* libraries, now core
  - RT#54880 Clarify license terms
  - RT#54151 Disable network-based tests via environment variable (for Debian)
  - RT#56574 Fix object construction causing problems on Perl 5.12.0

  - New maintainer: DAPATRICK
  - RT#17484 Handle servers which re-use stream ID 
  - RT#18711 Update link to XML Streams doc 
  - RT#12977 Require perl >= 5.8.0
  - RT#19415 Use jabber.org for tests
  - RT#21932 Fix authname for Google Talk SASL auth
  - RT#39098 Make dependencies more explicit
  - RT#24817 Merge and massage of toddr's SASL fix
  - RT#36864 Fake select on filehandles on win32
  - RT#31215 Test and fix for XML node copying issue
  - RT#17325 Fix and test for infinite loop on quotes

  * Version 1.23_01 was errantly published as a pre-release of 1.23

  - Using Encode module to handle utf encoding and decoding.  I cannot
    just put the socket into utf8 because IO::Socket::SSL does not
    support binmode.  So I'm calling decode_utf8() before returning the
    Read string, and encode_utf8() before writing the Send string.
  - Fixed SASL PLAIN authentication.

  - Sigh... Screwed up the CPAN release... again...

  - Ok... dang it.  Another minor tweak to fix CPAN.

  - Minor release bug.  Forgot to include the prereqs for Authen::SASL
    and MIME::Base4.

  - Added initial cut at XMPP 1.0 support.
  - Fixed timeout for Connect().  It was horribly broken and in
    efficient.  Thanks to Jesper Krogh.
  - Added timeout to socket creation.

  - Added patch to make the Process a little faster by putting the
    sleeps into the can_read() calls so that you don't have to delay
    even a few micro seconds when you get new XML.  (Evan Prodromou)
  - Added SRV lookup support for Connect via Net::DNS.
  - Changed the select calls when blocking to can_read calls so
    that we can wake up when there is data, and not just after a
    certain period of time.  Thanks to Evan Prodromou.
  - Interesting bug with Broken Pipes.

  - Upgraded the XPath engine to a more extensible and robust
  - To get tests to work 100% I have to get better determination
    on the BuildXML functions.  So fomr this point on, all
    attributes are printed in alphabetical order.
  - Fixed bug in Parser with <![CDATA[...]]> not being supported.
  - Changed BuildXML for Tree.  You have to pass it a ref
    and not an array.  That was to make the rawXML thing
    work better.
  - Added the ability to add raw XML at the BuildXML call.
  - Added remove_cdata method to Node.
  - Added methods to Node to make calls easier (XPath, GetXML).

  - Added XPath function and support for most of the abbreviated
  - Added new XML::Stream::Node type.  This behaves more like a
    you would think an XML node would behave.
  - Added a NONBLOCKING variable to control if the parser blocks
    or does not block.  This might cause some problems, but it also
    might open some new doors.  We will see.
  - Upped buffer size by 4x for second party fix.
  - Added code to handle tracking the last activity.
  - Fixed Disconnect bug where is would not clean up the environment
    well enough.
  - Added check for version of IO::Socket::SSL since it is not a
    required module.
  - Added check before trying to convert a socket to SSL.
  - Removed some warnings about unintialized strings.
  - Added tests for make test.

  - Fixed slow execution due to a sleep where there shouldn't be
    a sleep.
  - Added OpenFile() way to parse a stream.  It takes the same kind of
    arguments that open() takes, so you can parse the stream output from
    a command or a file and pretend that it's a stream.  It will ignore
    the outer most tag and pretend that it's a <stream:stream/> tag.
  - Fixed documentation to reflect the SID.
  - Get "value array" with attrib fetches the same attrib from the
    macthing nodes.

  - Fixed bug in Parser with entities getting split by reads and
    not interpreted properly.
  - Moved IO::Select requirement to 1.13 per a bug report from
  - Added XML2Config function to handle parsing config.xml files.
  - Fixed bug in the Parser parse and parsefile functions.

  - Fixed SSL bug.
  - Added support for the new HTTP::ProxyAutoConfig from Netscape.
  - Fixed logic for proxy servers.  (This is gonna break for someone...
    I can just feel it.)
  - Added SSL support in for both tcpip and http connections.
  - Removed support for native Unicode under perl 5.6.  It was causing a
    big memory leak that the Unicode::String module does not incur.
    This means that the Unicode::String module is now a requirement for
  - Added in support for connecting via HTTP.  This takes a special server
    that can keep the connection alive as the HTTP connection is setup only
    once and is kept opne while you send and receive.  This allows you to
    connect through proxy servers.
  - More tweaks for memory usage and speed ups.
  - Added in a new XML sotrage format to try and save space.  It's
    a hash representation of the entire XML document.  XML::Parser::Tree
    uses arrays of arrays and arrays of hashes which can consume memory
    in very short order.  It was a good starting point, but it's time to
    move on.  Se the INFO doc for more info on the new format.  (Not
    done yet.)
  - Added GetXMLData, SetXMLData, BuildXML, and EscapeXML which was
    originally written for the Net::Jabber modules but realized that
    they made more sense in here. =P

  - Added in a module for DTD parsing.  This will hopefully lead to
    verification of XML Streams based off of DTD.
  - Fixed bug in the Process function caused by the new way of handling
    multiple connections with detecting a broken connection.
  - Added code to handle listening for incoming connections on a port
    for a namespace.  THIS IS STILL UNDER DEVELOPMENT!
  - Added XML::Stream::Parser to replace XML::Parser.
  - Fixed bug in the timeout code.

  - Added SetCallBacks function to repleace OnNode and provide other
    hooks for more functions.
  - Fixed initial connect function and error handling.

  - Updated Connect to handle changing the values of the to and from
    attributes directly from the function call.  (Useful for proxying.)

  - Added boiler plate comments for the LGPL.
  - Added code to Send to check if the connection was lost.  This
    fixes a Broken Pipe error that I was seeing when the program tried
    to write to a socket that was closed.

  - Added code to handle not only connecting over TCP/IP but over
    STDIN/STDOUT (for the new Jabber server).
  - Added code to handle keeping the connection alive over connections
    that drop the connection after a period of inactivity.

  - Fixed bug where Process(0) would still sleep for a short time and
    cause those fast loops to take longer than they should.
  - Added Unicode support.  When you build the tree, make sure that
    it's latin 1 you are speaking.  It's then up to the sender to ensure
    that the outgoing data is utf8.
  - Added timestamp support to debug.
  - STREAMERROR is now local to an object instantiaion instead of the 
    namespace.  This helps when you get an error and then grab a new
    object and want to connect again.

  - Fixed sport where Stream would die if it could not resolve your full
    hostname.  Now it just reverts back to the result of hostname() if
    it can' look up the full name.
  - Initialized some variables to get rid of warnings with perl -w.

  - Changed version scheme to allow Perl to check for it.

  - I think I got the bug in ParseStream that removes the parse coming in
    while a parse is already in progress.
  - Fixed major bug in Process.  If you got a tag in the middle of the tag
    it would cause an XML error.
  - Also, if another parse came in during another parse, the second parse
    tree would get built under the current parse tree and everything would
    grind to a halt.

  - Improved error handling by creating GetErrorCode and SetErrorCode.
    These functions allow the caller to get some information about why
    Process or Connect returned undef.
  - Added error checking if a <stream:error> is sent.  This will call
    SetErrorCode and return undef.

  - Version bump.
  - Changed method of handling timeouts in the Connect and Process block.
    The timeout from the Connect is no longer remembered in the Process
    and used.  This method has improved the speed of the module greatly.
  - Fixed bug where the Process was not properly handling a connection 
    breakdown.  It now returns undef, or "", when the server dies or the
    connection is dropped.

  - Added XML::Stream::Namespace to make writting Perl modules for other
    namepsaces possible.  (This is highly alpha...)
  - Added Disconnect function to send closing tag and shut the stream down.
  - Added documentation list of methods in Stream.pm.

  - First version.
  - Supports connecting to a server, opening a stream, and receiving from that