summaryrefslogtreecommitdiff
path: root/README
blob: 4efc99c9e24a69bc8a4c595fe60c67e4ff0e55c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
rexmpp - a reusable XMPP IM client library

This is currently at a draft/prototype stage.

The goal is to produce a library reusable from different languages
(via C FFI), without hijacking an event loop, requiring any specific
one, or otherwise restricting a user, and fairly feature-rich. The
motivation for that is multitude of clients using custom and
incomplete XMPP implementations, occasionally even failing to deliver
one-to-one textual messages.

The exact scope is yet to be determined, but it shouldn't implement or
rely on any particular UI, should be flexible and not stay in the way
of implementing additional XEPs on top of it, and should try to make
it easy to implement a decent client application using it.

Current dependencies: c-ares, libxml2, gnutls, gsasl.


A rough roadmap:


- Basic protocol:

[+] XMPP core (RFC 6120). A prototype is mostly ready, though it can
    use more of error handling and refinement.


- Reliable and predictable message delivery:

[+] XEP-0198: Stream Management. Implemented (both acknowledgements
    and resumption, making use of XEP-0203: Delayed Delivery).
[+] XEP-0280: Message Carbons.


- Better connectivity:

[+] "Happy Eyeballs" (RFC 8305).
[+] XEP-0368: SRV records for XMPP over TLS.
[+] SOCKS5 (RFC 1928) support. Implemented, though can be improved.


- Library refinement:

[.] Doxygen documentation.
[.] Texinfo manual.
[ ] Proper JID handling (RFC 7622).
[ ] Abstraction of the used XML, SASL, TLS, and DNS libraries, and
    optional usage of alternative ones. Though maybe shouldn't
    abstract out XML functions and structures: could reuse existing
    libxml2 bindings that way.
[ ] Automated testing.


- IM features:

[+] XMPP IM (RFC 6121): roster management (loading and pushes, with
    versioning and caching)
[+] XEP-0030: Service Discovery (replying to queries)
[+] XEP-0115: Entity Capabilities (including into initial presence)
[ ] XEP-0166: Jingle
[ ] XEP-0234: Jingle File Transfer
[ ] XEP-0261: Jingle In-Band Bytestreams Transport Method
[ ] XEP-0363: HTTP File Upload
[ ] XEP-0260: Jingle SOCKS5 Bytestreams Transport Method
[ ] XEP-0391: Jingle Encrypted Transports
[ ] XEP-0184: Message Delivery Receipts?
[ ] OpenPGP/OTR/OMEMO/MLS encryption?


- Additional state tracking:

[ ] XMPP IM (RFC 6121): track presences of contacts.
[ ] XEP-0030: Service Discovery: track features provided by known
    entities.
[ ] XEP-0115: Entity Capabilities: maintain a capability database,
    track capabilities of known entities.
[ ] XEP-0045: Multi-User Chat: tracking of related states/presences.


- Various utility functions?


- Examples and application:

[+] Basic usage example.
[.] WeeChat plugin.