Software /
code /
prosody-modules
Annotate
mod_tcpproxy/web/xmpp.io.js @ 4876:0f5f2d4475b9
mod_http_xep227: Add support for import via APIs rather than direct store manipulation
In particular this transitions PEP nodes and data to be imported via mod_pep's
APIs, fixing issues with importing at runtime while PEP data may already be
live in RAM.
Next obvious candidate for this approach is rosters, so clients get immediate
roster pushes and other special handling (such as emitting subscribes to reach
the desired subscription state).
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 18 Jan 2022 17:01:18 +0000 |
parent | 1343:7dbde05b48a9 |
rev | line source |
---|---|
148
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 var xmlns_ibb = "http://jabber.org/protocol/ibb"; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 var xmlns_tcp = "http://prosody.im/protocol/tcpproxy"; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 function XMPPIO(xmppconn, xmpptcp_host) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 this.xmppconn = xmppconn; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 this.xmpphost = xmpptcp_host; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 this.sid = "FIXME"; |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
148
diff
changeset
|
9 |
148
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 this.listeners = []; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 return this; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 } |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 XMPPIO.prototype = { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 connect: function (host, port) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 var conn = this; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 console.log("Connecting..."); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 function onConnect() |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 this.xmppconn.addHandler(function (stanza) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 var data = stanza.getElementsByTagName("data")[0]; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 if(data) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 conn.emit("data", Strophe.Base64.decode(Strophe.getText(data))); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 }, null, "message", null, null, this.xmpphost, {}); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 this.xmppconn.addHandler(function (stanza) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 var data = stanza.getElementsByTagName("close")[0]; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 if(close) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 conn.write = function () { throw "Connection closed"; }; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 conn.emit("end"); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 } |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 }, xmlns_ibb, "iq", "set", null, this.xmpphost, {}); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 conn.emit("connect"); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 } |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 this.xmppconn.sendIQ($iq({to:this.xmpphost,type:"set"}) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 .c("open", { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 "xmlns": xmlns_ibb, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 "xmlns:tcp": xmlns_tcp, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 "tcp:host": host, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 "tcp:port": port.toString(), |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 "block-size": "4096", |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 "sid": this.sid.toString(), |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 "stanza": "message" |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 }), onConnect, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 function () { conn.emit("error"); }); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 }, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 emit: function () |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 console.log("xmpp.io: Emitting "+arguments[0]); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 var args = Array.prototype.slice.call(arguments, 1); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 var listeners = this.listeners[arguments[0]]; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 if(listeners) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 for(var i=0;i<listeners.length;i++) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 listeners[i][1].apply(listeners[i][0], args); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 } |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 } |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 }, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 addListener: function (event, method, obj) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 if(typeof(obj)=="undefined") |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 obj = this; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 if(!(event in this.listeners)) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 this.listeners[event] = []; |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 this.listeners[event].push([obj, method]); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 }, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 write: function (data) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 return this.xmppconn.send($msg({to:this.xmpphost}) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 .c("data", {xmlns:xmlns_ibb, sid:this.sid.toString()}) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 .t(Strophe.Base64.encode(data))); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 }, |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 end: function () |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 { |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 return this.xmppconn.send($iq({to:this.xmpphost}) |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 .c("close", {xmlns:xmlns_ibb, sid:this.sid.toString()})); |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 } |
f2f9b965d1ad
mod_tcpproxy: Add web/ folder containing demo JS client
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 }; |