annotate mod_tcpproxy/web/xmpp.io.js @ 3656:3e0f4d727825

mod_vcard_muc: Add an alternative method of signaling avatar change When the avatar has been changed, a signal is sent that the room configuration has changed. Clients then do a disco#info query to find the SHA-1 of the new avatar. They can then fetch it as before, or not if they have it cached already. This is meant to be less disruptive than signaling via presence, which caused problems for some clients. If clients transition to the new method, the old one can eventually be removed. The namespace is made up while waiting for standardization. Otherwise it is very close to what's described in https://xmpp.org/extensions/inbox/muc-avatars.html
author Kim Alvefur <zash@zash.se>
date Sun, 25 Aug 2019 20:46:43 +0200
parents 7dbde05b48a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 };