~samwhited/xmpp

ref: c98da397314a57419fb1041f927b83246ed7366d xmpp/CHANGELOG.md -rw-r--r-- 12.5 KiB
c98da397Sam Whited carbons: new package 3 months ago

#Changelog

All notable changes to this project will be documented in this file.

#Unreleased

#Breaking

  • roster: rename version attribute to ver
  • styling: decoding tokens now uses an iterator pattern
  • xmpp: the WebSocket option on StreamConfig has been removed in favor of websocket.Negotiator

#Security

  • all: update the default TLS config to disable TLS < 1.2

#Added

#Fixed

  • form: calling Set after unmarshaling into an uninitialized form no longer panics
  • form: unmarshaling into an existing form now resets the stored values to prevent data leaks across forms
  • stanza: unmarshaling error IQs now works even if the error is not the first child in the payload
  • styling: pre-block start tokens with no newline had nonsensical formatting
  • xmpp: empty IQ iters no longer return EOF when there is no payload

#v0.19.0 — 2021-05-02

#Breaking

  • color: change list of color vision deficiencies from uint8 to a new type
  • disco: rename GetItems and GetItemsIQ to FetchItems and FetchItemsIQ to signal that they return an iterator
  • xmpp: remove unused argument from DialSession
  • jid: splitting a JID no longer trims trailing dots from the domainpart

#Added

  • delay: new package implementing XEP-0203: Delayed Delivery
  • disco: new package implementing XEP-0030: Service Discovery
  • jid: normalization of domainparts for display purposes
  • paging: new package implementing XEP-0059: Result Set Management
  • stanza: new functions AddID and AddOriginID to support unique and stable stanza IDs
  • stanza: ability to compare errors with errors.Is
  • stanza: add Is function to check if an XMLName is a valid stanza name
  • stanza: new Wrap method on Error
  • stanza: new UnmarshalIQError function
  • styling: satisfy fmt.Stringer for the Style type
  • version: new package implementing XEP-0092: Software Version
  • xmpp: satisfy fmt.Stringer for the SessionState type
  • xmpp: new UnmarshalIQ, UnmarshalIQElement, IterIQ, and IterIQElement methods
  • xtime: times can now be marshaled and unmarshaled as XML attributes

#Fixed

  • form: if no field type is set the correct default (text-single) is used
  • jid: JIDs created with New now trim trailing dots from the domainpart
  • xmpp: unknown IQ error responses are now sent to the correct address
  • xmpp: fixed DOS where reads/writes never timed out on Dial* functions

#v0.18.0 — 2021-02-14

#Breaking

  • component: NewClientSession has been split in to NewSession and ReceiveSession
  • mux: fixed the signature of the IQFunc option to differentiate it from the normal IQ option
  • stream: the SeeOtherHost function signature has changed now that payload is available for all stream errors
  • stream: the TokenReader method signature has changed to make it match the xmlstream.Marshaler interface
  • stream: renamed ErrorNS to NSError for consistency
  • xmpp: the Negotiator type signature has changed
  • xmpp: the StreamConfig.Features field is now a callback instead of a slice
  • xmpp: the StreamFeature type's Parse function now takes an xml.Decoder instead of an xml.TokenReader
  • xmpp: IQs sent during stream negotiation are now matched against registered stream features based on the namespace of their payload
  • xmpp: the session negotiation functions have been renamed and revamped, see the main package docs for a comprehensive overview
  • xtime: change the Time type to fix unmarshaling

#Added

  • internal/integration/mcabber: Mcabber support for integration tests
  • oob: implementations of xmlstream.Marshaler and xmlstream.WriterTo for the types IQ, Query, and Data
  • receipts: add Request and Requested to add receipt requests to messages without waiting on a response
  • roster: add Set and Delete functions for roster management
  • roster: support multiple groups
  • s2s: added a new package implementing Bidi
  • stanza: add Error method on the IQ type
  • stream: new InnerXML and ApplicationError methods on Error provide a way to easily construct customized stream errors
  • stream: ability to compare errors with errors.Is
  • stream: support adding human-readable text to errors
  • stream: add Info block for use by custom Negotiators
  • styling: add Disable and Unstyled to support disabling styling on some messages
  • websocket: added a new package for dialing WebSocket connections
  • xmpp: SetReadDeadline and SetWriteDeadline are now proxied even if the underlying connection is not a net.Conn
  • xmpp: all sent stanzas are now given randomly generated IDs if no ID was provided (not just IQs)
  • xmpp: the start token that triggers a call to Negotiate is now no longer popped from the stream before the actual call to Negotiate for server side stream features
  • xmpp: a SASLServer stream feature for authenticating users
  • xmpp: two methods for getting the stream IDs, InSID and OutSID
  • xmpp: a new state bit, s2s to indicate whether the session is a server-to-server connection

#Changed

  • dial: resolving SRV records for XMPP over implicit or opportunistic TLS is now done concurrently to make the initial connection faster
  • dial: the fallback for dialing an XMPP connection when no SRV records exist is now more robust
  • xmpp: stanzas sent over S2S connections now always have the "from" attribute set
  • xmpp: the default negotiator now supports negotiating the WebSocket subprotocol when the WebSocket option is set

#Fixed

  • component: the NewSession function (previously NewClientSession) now correctly marks the connection as having been received or initiated
  • component: the wrong error is no longer returned if Prosody sends an error immediately after the start of a stream with no ID
  • dial: dialing an XMPP connection where no xmpps SRV records exist no longer results in an error (fallback works correctly)
  • roster: fix infinite loop marshaling lists of items
  • stream: errors are now unmarshaled correctly
  • xmpp: the Encode methods no longer sometimes duplicate the xmlns attribute
  • xmpp: stream errors are now unmarshaled and returned from Serve and during session negotiation
  • xmpp: XML tokens written directly to the session are now always flushed to the underlying connection when the token writer is closed
  • xmpp: stream feature parse functions can no longer read beyond the end of the feature element
  • xmpp: the resource binding feature was previously broken for server sessions.
  • xmpp: the "to" and "from" attributes on incoming streams are now verified and an error is returned if they change between stream restarts
  • xmpp: empty "from" attributes are now removed before marshaling so that a default value can be set (if applicable)

#v0.17.1 — 2020-11-21

#Breaking

  • roster: remove workaround for a bug in Go versions prior to 1.14 which is now the earliest supported version
  • xmpp: the Encode and EncodeElement methods now take a context and respect its deadline

#Added

  • internal/integration: new package for writing integration tests
  • internal/integration/ejabberd: Ejabberd support for integration tests
  • internal/integration/prosody: Prosŏdy support for integration tests
  • internal/xmpptest: new ClientServer for testing two connected sessions
  • xmpp: new EncodeIQ and EncodeIQElement methods

#Fixed

  • stanza: converting stanzas with empty to/from attributes no longer fails
  • xmpp: fixed data race that could result in invalid session state and lead to writes on a closed session and other state related issues
  • xmpp: the Send and SendElement methods now respect the context deadline

#v0.17.0 — 2020-11-11

#Breaking

  • sasl2: removed experimental package
  • xmpp: removed option to make STARTTLS feature optional

#Added

#Fixed

  • roster: iters that have errored no longer panic when closed
  • xmpp: using TeeIn/TeeOut no longer breaks SCRAM based SASL mechanisms
  • xmpp: stream negotiation no longer fails when the only required features cannot yet be negotiated because they depend on optional features

#v0.16.0 — 2020-03-08

#Breaking

  • xmpp: the end element is now included in the token stream passed to handlers
  • xmpp: SendElement now wraps the entire stream, not just the first element

#Added

  • receipts: new package implementing XEP-0333: Chat Markers
  • roster: add handler and mux option for roster pushes

#Fixed

  • mux: fix broken Decode and possible infinite loop due to cutting off the last token in a buffered XML token stream
  • roster: work around a bug in Go 1.13 where io.EOF may be returned from the XML decoder

#v0.15.0 — 2020-02-28

#Breaking

  • all: dropped support for versions of Go before 1.13
  • mux: move Wrap{IQ,Presence,Message} functions to methods on the stanza types

#Added

  • mux: ability to select handlers by stanza payload
  • mux: new handler types and API
  • ping: a function for easily encoding pings and handling errors
  • ping: a handler and mux option for responding to pings
  • stanza: ability to convert stanzas to/from xml.StartElement
  • stanza: API to simplify replying to IQs
  • uri: new package for parsing XMPP URI's and IRI's
  • xtime: new package for handling XEP-0202: Entity Time and XEP-0082: XMPP Date and Time Profiles

#Fixed

  • dial: if a port number is present in a JID it was previously ignored

#v0.14.0 — 2019-08-18

#Breaking

  • ping: remove IQ function and replace with struct based API

#Added

  • ping: add IQ struct based encoding API

#Changed

  • stanza: a zero value IQType now marshals as "get"
  • xmpp: read timeouts are now returned instead of ignored

#Fixed

  • dial: fix broken fallback to domainpart
  • xmpp: allow whitespace keepalives
  • roster: the iterator now correctly closes the underlying TokenReadCloser
  • xmpp: fix bug where stream processing could stop after an IQ was received

#v0.13.0 — 2019-07-27

#Breaking

  • xmpp: change Handler to take an xmlstream.TokenReadEncoder
  • xmpp: replace EncodeToken and Flush with TokenWriter
  • xmpp: replace Token with TokenReader

#Added

  • examples/echobot: add graceful shutdown on SIGINT
  • xmpp: Encode and EncodeElement methods

#Changed

  • xmpp: calls to Serve no longer return io.EOF on success

#Fixed

  • examples/echobot: calling Send from within the handler resulted in deadlock
  • xmpp: closing the input stream was racy, resulting in invalid XML

#v0.12.0

#Breaking

  • dial: moved network dialing types and functions into new package.
  • dial: use underlying net.Dialer's DNS Resolver in Dialer.
  • stanza: change API of WrapIQ and WrapPresence to not abuse pointers
  • xmpp: add new SendIQ API and remove response from Send and SendElement
  • xmpp: new API for writing custom tokens to a session

#Fixed

  • xmpp: let Session.Close operate concurrently with SendElement et al.