summaryrefslogtreecommitdiff
path: root/README
blob: 858b59cc9514a561bd4eba08f0b5f31984e83864 (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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
rexmpp - a reusable XMPP IM client library

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.

Mandatory dependencies:

- libxml2, libexpat, or rxml (Rust)
- gcrypt, nettle, or openssl

Optional dependencies:

- gsasl
- libunbound or c-ares
- gnutls with gnutls-dane or openssl
- icu-i18n
- gpgme
- curl

For Jingle calls:

- libnice (with glib)
- gnutls or openssl
- libsrtp2
- portaudio
- opus (optional)

For use of the alternative Rust implementations, rustc and cargo
should be available, and the following Rust libraries will be pulled:
libc, errno, rxml.


A rough roadmap:


- Basic protocol:

[+] XMPP core (RFC 6120). Mostly ready, though would be nice to
    review and refactor.


- Reliable and predictable message delivery:

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


- Better connectivity:

[+] "Happy Eyeballs" (RFC 8305).
[+] XEP-0368 v1.1: SRV records for XMPP over TLS (when built with
    libunbound or c-ares).
[+] SOCKS5 (RFC 1928) support. Implemented, though no authentication.
[+] XEP-0199 v2.0: XMPP Ping.
[.] Certificate verification using DANE (experimental, only when built
    with GnuTLS).
[+] DNSSEC checks (when built with libunbound).


- 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.
[.] Automated testing.
[.] Alternative module implementations in Rust (looks like there is a
    memory leak somewhere around those though).


- IM features:

[+] XMPP IM (RFC 6121): roster management (loading and pushes, with
    versioning and caching)
[+] XEP-0030 v2.5: Service Discovery (replying to queries, recursively
    searching for features)
[+] XEP-0115 v1.5: Entity Capabilities (including into initial presence)
[+] XEP-0092 v1.1: Software Version
[+] XEP-0172 v1.1: User Nickname
[+] XEP-0373 v0.6: OpenPGP for XMPP
[+] XEP-0402 v1.1: PEP Native Bookmarks
[+] XEP-0410 v1.1: MUC Self-Ping
[+] XEP-0363 v1.0: HTTP File Upload (when built with curl)
[+] XEP-0166 v1.1: Jingle
[+] XEP-0234 v0.19: Jingle File Transfer (sending and accepting, but
    no requests and no ranged transfers)
[+] XEP-0261 v1.0: Jingle In-Band Bytestreams Transport Method
[+] XEP-0167 v1.2: Jingle RTP Sessions (uses PortAudio and Opus)
[+] XEP-0176 v1.1: Jingle ICE-UDP Transport Method (uses libnice,
    discovers TURN/STUN servers with XEP-0215: External Service
    Discovery)
[+] XEP-0320 v1.0: Use of DTLS-SRTP in Jingle Sessions
[ ] XEP-0260: Jingle SOCKS5 Bytestreams Transport Method?
[ ] XEP-0391: Jingle Encrypted Transports?
[ ] XEP-0184: Message Delivery Receipts?
[ ] OTR/OMEMO/MLS encryption?


- Additional state tracking:

[+] XMPP IM (RFC 6121): track presences of contacts.
[+] XEP-0163 v1.2: Personal Eventing Protocol: track contacts'
    published items.
[+] IQ response caching.
[ ] 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:

[+] Display name establishment.
[+] A console module.
[+] XEP-0060 v1.19: Publish-Subscribe: helper functions.


- Examples and application:

[+] Basic usage example.
[.] WeeChat plugin.
[+] Emacs mode (and an XML-based interface). See emacs/README.