mod_tcpproxy/web/xmpp.io.js
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Sep 2022 22:40:54 +0100
changeset 5057 00e8cc6860cb
parent 1343 7dbde05b48a9
permissions -rw-r--r--
mod_cloud_notify: Fix default extended timeout from 72 days -> 72 hours
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
};