const BOSH_SERVICE = '/http-bind/' let show_log = false Strophe.addNamespace('C2SSTREAM', 'http://prosody.im/streams/c2s') Strophe.addNamespace('S2SSTREAM', 'http://prosody.im/streams/s2s') Strophe.addNamespace('ADMINSUB', 'http://prosody.im/adminsub') Strophe.addNamespace('CAPS', 'http://jabber.org/protocol/caps') let localJID = null let connection = null let adminsubHost = null let adhocControl = new Adhoc('#adhocDisplay', function () {}) function log (msg) { let entry = $('
').append(document.createTextNode(msg)) $('#log').append(entry) } function rawInput (data) { log('RECV: ' + data) } function rawOutput (data) { log('SENT: ' + data) } function _cbNewS2S (e) { let items = e.getElementsByTagName('item') for (let i = 0; i < items.length; i++) { let item = items[i] let id = item.attributes.getNamedItem('id').value let jid = item.getElementsByTagName('session')[0].attributes.getNamedItem('jid').value let infos = item.getElementsByTagName('info') let entry = $(`
')
} else {
entry.append('
')
}
}
if (item.getElementsByTagName('compressed')[0]) {
entry.append('
')
}
let metadata = $('
')
}
if (item.getElementsByTagName('compressed')[0]) {
entry.append('
')
}
let metadata = $('This host does not support commands
') } ) connection.addHandler(_cbAdminSub, Strophe.NS.ADMINSUB + '#event', 'message') connection.send($iq({ to: adminsubHost, type: 'set', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('subscribe', { node: Strophe.NS.C2SSTREAM })) connection.send($iq({ to: adminsubHost, type: 'set', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('subscribe', { node: Strophe.NS.S2SSTREAM })) connection.sendIQ($iq({ to: adminsubHost, type: 'get', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('items', { node: Strophe.NS.S2SSTREAM }), _cbNewS2S) connection.sendIQ($iq({ to: adminsubHost, type: 'get', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('items', { node: Strophe.NS.C2SSTREAM }), _cbNewC2S) }) } } function showConnect () { $('#login').show() $('#menu').hide() $('#main').hide() $('#s2sin').empty() $('#s2sout').empty() $('#c2s').empty() $('#host').empty() } function showDisconnect () { $('#s2sList').hide() $('#c2sList').hide() $('#login').hide() $('#menu').show() $('#main').show() $('#adhoc').show() } $(document).ready(function () { connection = new Strophe.Connection(BOSH_SERVICE) if (show_log) { $('#log_container').show() connection.rawInput = rawInput connection.rawOutput = rawOutput } $('#log_toggle').click(function () { $('#log').toggle() }) $('#cred').on('submit', function (event) { let button = $('#connect').get(0) let jid = $('#jid') let pass = $('#pass') localJID = jid.get(0).value $('#log').empty() connection.connect(localJID, pass.get(0).value, onConnect) event.preventDefault() }) $('#logout').click(function (event) { connection.disconnect() event.preventDefault() }) $('#adhocMenu, #serverMenu, #clientMenu').click(function (event) { event.preventDefault() let tab = $(this).attr('href') $('#main > div').hide() $(tab).fadeIn('fast') }) $('#host').on('change', function (event) { connection.send($iq({ to: adminsubHost, type: 'set', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('unsubscribe', { node: Strophe.NS.C2SSTREAM })) connection.send($iq({ to: adminsubHost, type: 'set', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('unsubscribe', { node: Strophe.NS.S2SSTREAM })) adminsubHost = $(this).val() adhocControl.checkFeatures(adminsubHost, function () { adhocControl.getCommandNodes(function (result) { $('#adhocDisplay').empty() $('#adhocCommands').html(result) }) }, function () { $('#adhocCommands').empty() $('#adhocDisplay').html('This host does not support commands
') }) $('#s2sin').empty() $('#s2sout').empty() $('#c2s').empty() connection.send($iq({ to: adminsubHost, type: 'set', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('subscribe', { node: Strophe.NS.C2SSTREAM })) connection.send($iq({ to: adminsubHost, type: 'set', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('subscribe', { node: Strophe.NS.S2SSTREAM })) connection.sendIQ($iq({ to: adminsubHost, type: 'get', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('items', { node: Strophe.NS.S2SSTREAM }), _cbNewS2S) connection.sendIQ($iq({ to: adminsubHost, type: 'get', id: connection.getUniqueId() }).c('adminsub', { xmlns: Strophe.NS.ADMINSUB }) .c('items', { node: Strophe.NS.C2SSTREAM }), _cbNewC2S) }) }) window.onunload = window.onbeforeunload = function () { if (connection) { connection.disconnect(); } }