Give all chat prompts a 'field property. This changes behaviour,
hopefully to the better. For example, C-a will now stop at the
beginning of the chat text; use C-b C-a at that point to go to the
beginning of the prompt.
Use the field property to improve jabber-chat-goto-address. Previously,
we would try to make URLs clickable in the entire buffer, which besides
being wasteful would cease working once the buffer size was past
goto-address-fontify-maximum-size.
This improves interoperability with the client Profanity.
Comparing what Pidgin sends to what jabber.el did, the
difference was that Pidgin includes an id- and a type attribute.
Adding just the 'type' was enough to make Profanity recognize
the notifications sent by jabber.el.
Previously we would crash in destructuring-bind, but this produces
rather unhelpful error messages. Better log it in *fsm-debug*, pointing
to the source of the error.
The closure data used in jabber-process-caps-modern was a three-element
list, while the one used in jabber-caps-try-next was a cons cell. This
led to crashes in jabber-process-caps-info-error when there were more
than one contact with the same caps hash, all failing to respond.
Some SASL mechanisms, e.g. SCRAM-SHA-1, specify that the server should
send additional data along with the success response. This data needs
to be validated by the client according to the SASL mechanism.
This was overlooked when introducing namespace handling: the namespace
prefix is no longer part of the element name, and the namespace can be
looked up through a fictitious xmlns attribute.
In jabber-network-connect-async, the call to make-network-process can
fail in certain cases without creating a connection and without
calling our sentinel function, in particular if DNS resolution fails,
and that error case was not updated for the new error reporting
solution. This should now work properly.
Ensure that the final message, the one that stays in the echo area,
contains information about where we tried to connect to. Also
accumulate error messages for all addresses we tried.
We can't distinguish "personal" vs "non-personal" in
jabber-activity-mode-line-update, since that loops over _all_ entries in
jabber-activity-jids each time, and thus the JIDs will be marked either
all personal or all non-personal. Instead, let's keep a separate list,
jabber-activity-personal-jids, which is updated when activity is logged
for a JID.
The `define-state-machine' macro uses `destructuring-bind' in its
expansion, and thus requires cl to be loaded while modules using
fsm.el are being compiled. This should be the safest solution.
I really don't understand why, but sometimes executing (require 'sha1)
from a byte-compiled file fails in Emacs 24, even though sha1 should be
provided automatically. Let's hope this fixes the problem...
Some Jabber servers (notably Facebook Chat) assign a different JID at
resource binding. This used to confuse jabber-connect-all, such that it
would establish a new connection although the existing one is perfectly
healthy.
With this change, we save the JID that we originally connected with, and
use that to avoid duplicate connections.
jabber-disco-advertise-features now checks whether the feature is
already listed, to avoid duplicate entries if a module is reloaded.
Duplicate entries can cause invalid Entity Capabilities entries.
Also changed the disco info feature "plugin" system - now a module that
wants to advertise a feature needs to call the function
`jabber-disco-advertise-feature'. This ensures that caps are
recalculated as needed.
dns.el requires support for UDP sockets, which is not present on
Windows. Check whether UDP sockets are supported, and if not, parse
the output of nslookup.