Commit graph

129 commits

Author SHA1 Message Date
Jonas Schäfer
80efd2eb19 Ignore missing disco#info feature in disco#info responses
xmpp-rs normally has the stance to get buggy implementations fixed
rather than dropping checks. In this particular case I think this is not
a good use of resources:

- The disco#info feature var conveys no actual information:
  If an implementation replies properly to a disco#info query, it is
  already implied that it supports the protocol.

- There are broken server implementations out there.
  A lot of them (all recent (>= 0.10 && < 0.13 AFAICT) Prosody IM
  instances). At this point in time, xmpp-rs is unable to query
  disco#info from MUCs hosted on such prosody versions, except by
  workarounds (such as the one removed in this diff).

- XEP-0030 now features a note which reads:

  > Note: Some entities are known not to advertise the
  > `http://jabber.org/protocol/disco#info` feature within their
  > responses, contrary to this specification. Entities receiving
  > otherwise valid responses which do not include this feature SHOULD
  > infer the support.

The case would be different if there were no (deployed) implementations
which had this bug or if the bug actually had an effect on clients.
Especially the latter is not the case though, as pointed out above.

Hence, I conclude that this check is overly pedantic and the resources
(time, emotional energy of dealing with bugs, punching patches through
to stable distributions, etc. etc.) spent on getting this fixed would
be better invested elsewhere.

In addition, the workaround is extremely ugly and, even in the xmpp-rs
implementation, has no test coverage. Without test coverage of such an
implementation, it is bound to break in funny ways when xmpp-rs changes
the strings of its error messages (which is something one might do even
outside a breaking release).
2024-06-16 10:52:51 +02:00
xmppftw
034976748a Add serde feature for xmpp crate 2024-06-05 11:20:33 +02:00
Emmanuel Gil Peyrot
002c2803d4 Fix typos across the codebase (thanks codespell!) 2024-05-14 05:46:02 +00:00
Paul Fariello
ccd46047be Add OOB 2024-05-14 05:45:42 +00:00
Jonas Schäfer
4853776010 data_forms: ignore incorrect FORM_TYPE fields as per XEP-0068
XEP-0068 is rather explicit that `FORM_TYPE` fields which are not
`type='hidden'` MUST be ignored (in most cases, see comments inside
the code for exceptions). The previous implementation returned an error
instead (and aborted parsing with that), which is obviously not
"ignoring".
2024-05-13 19:56:56 +00:00
Jonas Schäfer
675907ba20 pubsub: provide accessor function for event's source node's name
Handy if you want to prefilter or distribute events based on the source
node's name.
2024-05-13 17:16:57 +00:00
Jonas Schäfer
384b366f5f Add Message::extract_payload function
This should simplify access to message payloads significantly.
2024-05-06 09:40:08 +00:00
Emmanuel Gil Peyrot
f725994fe0 Bump all dependencies but rustls and webpki-roots
The latter have changed their API a bit, while everything else is still
compatible.
2024-05-04 12:42:53 +02:00
Jonas Schäfer
fcadccfbab parsers::vcard: allow linebreaks in binval data
[RFC 2426][1] says:

> The binary data MUST be encoded using the "B" encoding format.
> Long lines of encoded binary data SHOULD BE folded to 75 characters
> using the folding method defined in [MIME-DIR].

That implies that whitespace may occur in binval data and we thus must
be able to parse this correctly.

   [1]: https://datatracker.ietf.org/doc/html/rfc2426#section-2.4.1
2024-05-04 10:02:53 +00:00
Jonas Schäfer
37481fb8f6 parsers: do not do extensive XEP-0030 validation with disable-validation
Other additional checks are already gated by the absence of this
feature. As the MR to remove these checks altogether is still blocked,
this should serve as at least as an intermediate solution to anyone
affected by buggy remote implementations.
2024-04-28 10:48:35 +02:00
Jonas Schäfer
2e9c9411a3 jid: rewrite public types
This moves InnerJid into Jid and reformulates BareJid and FullJid in
terms of Jid.

Doing this has the key advantage that FullJid and BareJid can deref to
and borrow as Jid. This, in turn, has the advantage that they can be
used much more flexibly in HashMaps. However, this is (as we say in
Germany) future music; this commit only does the internal reworking.

Oh and also, it saves 20% memory on Jid objects.

Fixes #122 more thoroughly, or rather the original intent behind it.
2024-04-15 18:21:24 +02:00
Jonas Schäfer
e7fa6460f4 Update size tests
This seems to be related to an update of chrono. 32-bit sizes verified
using `cargo test --target i686-unknown-linux-gnu`.
2024-03-08 16:04:55 +01:00
Jonas Schäfer
2f7d5edb8a Make TryFrom<Element> chainable
This allows constructs like:

```rust
let residual = match Iq::try_from(stanza) {
  Ok(iq) => return handle_iq(..),
  Err(Error::TypeMismatch(_, _, v)) => v,
  Err(other) => return handle_parse_error(..),
};
let residual = match Message::try_from(stanza) {
  ..
};
let residual = ..
log::warn!("unhandled object: {:?}", residual);
```

The interesting part of this is that this could be used in a loop over a
Vec<Box<dyn FnMut(Element) -> ControlFlow<SomeResult, Element>>, i.e. in
a parsing loop for a generic XML/XMPP stream.

The advantage is that the stanza.is() check runs only once (in
check_self!) and doesn't need to be duplicated outside, and it reduces
the use of magic strings.
2024-03-03 14:50:29 +00:00
Jonas Schäfer
3b3a4ff0c8 Do not .clone() Element in code generated with generate_element
This should improve performance a little.
2024-03-03 15:05:11 +01:00
Jonas Schäfer
6f6f8abb53 Add fields for Result Set Management in disco#items
Note that this is a breaking change, as it changes the struct definition
and now requires additional fields when constructing the struct.
2024-03-03 14:54:30 +01:00
Emmanuel Gil Peyrot
1bab5c3cd9 Remove redundant imports
These became warnings in a recent nightly.

The TryFrom/TryInto imports were missed in
4089891f6c, but the rest are truly
redundant.
2024-02-27 22:57:18 +01:00
Emmanuel Gil Peyrot
6df8062867 Fix size tests on latest Rust release
Since Rust 1.76, and some much older nightly, there have been
improvements to the niche computation, which leads to smaller types
which can encode the same amount of data, variants, and such.

This fixes the tests on this compiler version.
2024-02-27 12:27:31 +01:00
Paul Fariello
1ecfaeb2bf Fix multiple error text lang handling in stanza_error 2024-02-27 08:53:19 +01:00
Werner Kroneman
87164b01ee Added xep-0264 to doap.xml 2024-02-08 16:07:41 +00:00
Werner Kroneman
78158edc3e Added jingle_thumbnails mod to lib.rs. 2024-02-08 16:07:41 +00:00
Werner Kroneman
611c09a8a2 Added jingle_thumbnails module. 2024-02-08 16:07:41 +00:00
Werner Kroneman
b541f8a809 Added ns::JINGLE_THUMBNAILS 2024-02-08 16:07:41 +00:00
famfo
b2ba646fd4 Implement empty before for QuerySet 2024-02-06 12:29:37 +01:00
famfo
a292e19314 Fix 32bit Qurey struct size 2024-02-05 22:19:22 +00:00
famfo
6daf0e906e Implement flip-page for MAM 2024-02-05 22:19:22 +00:00
xmpp ftw
9d5019ecdd Fix last cargo doc warnings
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2024-01-27 17:44:48 +00:00
xmppftw@kl.netlib.re
a6f4600a19 Reexport hashes from parsers 2024-01-16 15:18:26 +01:00
Werner Kroneman
83d0d1bdfd Updated doap.xml for vCard avatars 2024-01-10 23:34:52 +01:00
Werner Kroneman
10b204093e Added vCard update to parsers 2024-01-10 23:34:50 +01:00
Werner Kroneman
c0cf672131 Added vCard avatars (XEP-0054) to parsers. 2024-01-10 21:50:34 +01:00
Werner Kroneman
18cb6f6e2d Refactored the "helpers" so that they use a common Codec trait; this makes them composable as well. 2024-01-10 19:49:53 +00:00
Emmanuel Gil Peyrot
3f90e84c5b xmpp-parsers: Add a hexadecimal codec
That one accepts both uppercase and lowercase hexadecimal input, and
outputs in lowercase.

It requires no separator between bytes, unlike ColonSeparatedHex.
2024-01-05 17:36:43 +01:00
xmppftw
0a6ee5b32e Support legacy integer <error> code. Don't expose it. 2023-12-22 12:26:28 +01:00
xmppftw
ac4ffd2268 Use relative cargo paths when using local copy 2023-12-18 13:06:22 +01:00
xmppftw
f9b71c8da0 Improve documentation 2023-12-16 17:29:00 +01:00
xmppftw
f1713231c4 Add Private XML Storage (XEP-0049) support for legacy bookmarks (XEP-0048 v1.0) 2023-12-16 17:28:13 +01:00
xmppftw
7a55608433 Document bookmarks2 module 2023-12-16 17:19:13 +01:00
xmppftw
d1b63a52a5 Add method to convert bookmarks::Conference to bookmarks2::Conference
Autojoin is now same struct in both modules
2023-12-16 17:19:13 +01:00
4089891f6c Update edition to 2021
- Remove TryFrom/Into and FromIterator imports
- Prevent impl_validator_using_provider macro in sasl crate from
  constructing trait object

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-12-15 19:40:09 +00:00
c8f312e89d
parsers/xhtml: keep iterating on all bodies
Revert part of b522eaf7f3.

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-12-15 20:39:09 +01:00
b522eaf7f3 parsers: clippy pass
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-12-15 19:26:06 +00:00
Emmanuel Gil Peyrot
372234b912 tokio-xmpp: Remove workaround for Debian oldoldstable
hickory-resolver’s MSRV is 1.67, those super old toolchain versions
wouldn’t build a recent version of tokio-xmpp anyway.

This effectively reverts 52a2d962ee.
2023-12-04 15:34:26 +01:00
50415415c6 Revert "parsers/doap: update 0084's xmpp:since field"
This reverts commit dce8ab445c.
2023-12-04 12:43:01 +01:00
449c8d8131
parsers: remove unused build script
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-12-04 02:14:52 +01:00
dce8ab445c
parsers/doap: update 0084's xmpp:since field
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-12-04 02:13:52 +01:00
Werner Kroneman
fcd30c2eb2 Updated DOAP 2023-12-03 16:38:14 +01:00
Werner Kroneman
a7ab45cb2d Avatars can now be 32 bit sizes. (see https://xmpp.org/extensions/xep-0084.html) size can be xs:unsignedInt 2023-12-03 16:38:14 +01:00
2f47bdb1d3
parsers: Add TODO to remove superfluous exports from jid on next major release
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-10-26 17:46:42 +02:00
3a0336bed0
parsers: re-export the jid module entirely
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-10-26 14:03:21 +02:00
Emmanuel Gil Peyrot
4460a59bc8 xmpp-parsers: XEP-0257: Correctly serialise no-cert-management
This element was previously always put in the generated element.
2023-09-05 17:08:30 +02:00