Software /
code /
prosody-modules
Comparison
mod_client_proxy/README.markdown @ 3098:a81456a13797
mod_client_proxy: a Jabber Address Translation implementation
author | Jonas Wielicki <jonas@wielicki.name> |
---|---|
date | Sun, 03 Jun 2018 13:55:10 +0200 |
child | 3102:f04dbfad5407 |
comparison
equal
deleted
inserted
replaced
3097:c7f4e3987ed0 | 3098:a81456a13797 |
---|---|
1 --- | |
2 labels: | |
3 - 'Stage-Alpha' | |
4 summary: 'Proxy multiple client resources behind a single component' | |
5 ... | |
6 | |
7 What it does | |
8 ============ | |
9 | |
10 This module must be used as a component. For example: | |
11 | |
12 Component "proxy.domain.example" "client_proxy" | |
13 target_address = "some-user@some-domain.example" | |
14 | |
15 All IQ requests against the proxy host (in the above example: | |
16 proxy.domain.example) are sent to a random resource of the target address (in | |
17 the above example: some-user@some-domain.example). The entity behind the | |
18 target address is called the "implementing client". | |
19 | |
20 The IQ requests are JAT-ed (JAT: Jabber Address Translation) so that when the | |
21 implementing client answers the IQ request, it is sent back to the component, | |
22 which reverts the translation and routes the reply back to the user. | |
23 | |
24 Let us assume that user@some-domain.exmaple sends a request. The | |
25 proxy.domain.example component has the client_proxy module loaded and proxies to | |
26 some-user@some-domain.example. some-user@some-domain.example has two resources, | |
27 /a and /b. | |
28 | |
29 user -> component: | |
30 <iq type='get' id='1234' to='proxy.domain.example' from='user@some-domain.example/abc'> | |
31 component -> implementing client: | |
32 <iq type='get' id='1234' to='some-user@some-domain.example/a' from='proxy.domain.example/encoded-from'> | |
33 implementing client -> component: | |
34 <iq type='result' id='1234' to='proxy.domain.example/encoded-from' from='some-user@some-domain.example/a'> | |
35 component -> user: | |
36 <iq type='result' id='1234' to='user@some-domain.example/abc' from='proxy.domain.example'> | |
37 | |
38 The encoded-from resource used in the exchange between the proxy component | |
39 and the implementing client is an implementation-defined string which allows | |
40 the proxy component to revert the JAT. | |
41 | |
42 | |
43 Use cases | |
44 ========= | |
45 | |
46 * Implementation of services within clients instead of components, thus making | |
47 use of the more advanced authentication features. | |
48 * General evilness | |
49 | |
50 | |
51 Configuration | |
52 ============= | |
53 | |
54 To use this module, it needs to be loaded on a component: | |
55 | |
56 Component "proxy.yourdomain.example" "client_proxy" | |
57 target_address = "implementation@yourdomain.example" | |
58 | |
59 It will then send a subscription request to implementation@yourdomain.example | |
60 which MUST be accepted: this is required so that the component can detect the | |
61 resources to which IQ requests can be dispatched. | |
62 | |
63 | |
64 Limitations | |
65 =========== | |
66 | |
67 * It does not handle presence or message stanzas. | |
68 * It does not allow the implementing client to initiate IQ requests |